summaryrefslogtreecommitdiff
path: root/web/yacco2
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/yacco2
Initial commit
Diffstat (limited to 'web/yacco2')
-rw-r--r--web/yacco2/README47
-rw-r--r--web/yacco2/READMEv1.1.pdfbin0 -> 149577 bytes
-rw-r--r--web/yacco2/READMEv1.1.w449
-rw-r--r--web/yacco2/bin/man/man1/o2.1139
-rw-r--r--web/yacco2/bin/man/man1/o2.man265
-rw-r--r--web/yacco2/bin/man/man1/o2linker.188
-rw-r--r--web/yacco2/bin/man/man1/o2linker.man133
-rw-r--r--web/yacco2/bin/man/man1/yacco2.168
-rw-r--r--web/yacco2/bin/man/man1/yacco2.man103
-rwxr-xr-xweb/yacco2/bin/o2bin0 -> 4372780 bytes
-rwxr-xr-xweb/yacco2/bin/o2linkerbin0 -> 3491300 bytes
-rwxr-xr-xweb/yacco2/bin/testdriverbin0 -> 4048624 bytes
-rwxr-xr-xweb/yacco2/bld_bash_APPLE99
-rwxr-xr-xweb/yacco2/bld_bash_GNU70
-rwxr-xr-xweb/yacco2/bld_bash_SOLARIS127
-rw-r--r--web/yacco2/compiler/grammars/Err.w1799
-rw-r--r--web/yacco2/compiler/grammars/Lrk.w331
-rw-r--r--web/yacco2/compiler/grammars/T.w4116
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase.h69
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase.lex90
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_th.cpp423
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_th.fsc25
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_th.h220
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_th.lex264
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_thsym.cpp500
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrase_thtbl.cpp1249
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/T_enum_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/angled_string.cpp145
-rw-r--r--web/yacco2/compiler/grammars/angled_string.fsc20
-rw-r--r--web/yacco2/compiler/grammars/angled_string.h74
-rw-r--r--web/yacco2/compiler/grammars/angled_string.lex172
-rw-r--r--web/yacco2/compiler/grammars/angled_stringsym.cpp78
-rw-r--r--web/yacco2/compiler/grammars/angled_stringtbl.cpp87
-rw-r--r--web/yacco2/compiler/grammars/bad_char_set.cpp284
-rw-r--r--web/yacco2/compiler/grammars/bad_char_set.fsc175
-rw-r--r--web/yacco2/compiler/grammars/bad_char_set.h290
-rw-r--r--web/yacco2/compiler/grammars/bad_char_set.lex122
-rw-r--r--web/yacco2/compiler/grammars/bad_char_setsym.cpp2382
-rw-r--r--web/yacco2/compiler/grammars/bad_char_settbl.cpp2689
-rw-r--r--web/yacco2/compiler/grammars/c_comments.cpp163
-rw-r--r--web/yacco2/compiler/grammars/c_comments.fsc20
-rw-r--r--web/yacco2/compiler/grammars/c_comments.h81
-rw-r--r--web/yacco2/compiler/grammars/c_comments.lex156
-rw-r--r--web/yacco2/compiler/grammars/c_commentssym.cpp108
-rw-r--r--web/yacco2/compiler/grammars/c_commentstbl.cpp151
-rw-r--r--web/yacco2/compiler/grammars/c_literal.cpp150
-rw-r--r--web/yacco2/compiler/grammars/c_literal.fsc20
-rw-r--r--web/yacco2/compiler/grammars/c_literal.h74
-rw-r--r--web/yacco2/compiler/grammars/c_literal.lex167
-rw-r--r--web/yacco2/compiler/grammars/c_literalsym.cpp78
-rw-r--r--web/yacco2/compiler/grammars/c_literaltbl.cpp87
-rw-r--r--web/yacco2/compiler/grammars/c_string.cpp151
-rw-r--r--web/yacco2/compiler/grammars/c_string.fsc20
-rw-r--r--web/yacco2/compiler/grammars/c_string.h74
-rw-r--r--web/yacco2/compiler/grammars/c_string.lex173
-rw-r--r--web/yacco2/compiler/grammars/c_stringsym.cpp78
-rw-r--r--web/yacco2/compiler/grammars/c_stringtbl.cpp87
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdc.cpp223
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdc.fsc24
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdc.h89
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdc.lex173
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdcsym.cpp144
-rw-r--r--web/yacco2/compiler/grammars/cweave_T_sdctbl.cpp193
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdc.cpp303
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdc.fsc29
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdc.h99
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdc.lex206
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdcsym.cpp219
-rw-r--r--web/yacco2/compiler/grammars/cweave_fsm_sdctbl.cpp283
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdc.cpp240
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdc.fsc25
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdc.h90
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdc.lex176
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdcsym.cpp159
-rw-r--r--web/yacco2/compiler/grammars/cweave_lhs_sdctbl.cpp212
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdc.cpp306
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdc.fsc29
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdc.h102
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdc.lex212
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdcsym.cpp219
-rw-r--r--web/yacco2/compiler/grammars/cweave_sdctbl.cpp284
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_k.cpp238
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_k.fsc20
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_k.h93
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_k.lex233
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_ksym.cpp138
-rw-r--r--web/yacco2/compiler/grammars/cweb_or_c_ktbl.cpp200
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_ph.cpp186
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc27
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_ph.h70
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_ph.lex97
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_phsym.cpp147
-rw-r--r--web/yacco2/compiler/grammars/cweb_put_k_into_phtbl.cpp161
-rw-r--r--web/yacco2/compiler/grammars/dbl_colon.cpp65
-rw-r--r--web/yacco2/compiler/grammars/dbl_colon.fsc20
-rw-r--r--web/yacco2/compiler/grammars/dbl_colon.h60
-rw-r--r--web/yacco2/compiler/grammars/dbl_colon.lex62
-rw-r--r--web/yacco2/compiler/grammars/dbl_colonsym.cpp64
-rw-r--r--web/yacco2/compiler/grammars/dbl_colontbl.cpp695
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabet.cpp241
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabet.fsc19
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabet.h93
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabet.lex263
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabetsym.cpp102
-rw-r--r--web/yacco2/compiler/grammars/enumerate_T_alphabettbl.cpp138
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammar.cpp255
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammar.fsc20
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammar.h137
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammar.lex164
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammarsym.cpp258
-rw-r--r--web/yacco2/compiler/grammars/enumerate_grammartbl.cpp408
-rw-r--r--web/yacco2/compiler/grammars/eol.cpp68
-rw-r--r--web/yacco2/compiler/grammars/eol.fsc21
-rw-r--r--web/yacco2/compiler/grammars/eol.h65
-rw-r--r--web/yacco2/compiler/grammars/eol.lex98
-rw-r--r--web/yacco2/compiler/grammars/eolsym.cpp105
-rw-r--r--web/yacco2/compiler/grammars/eoltbl.cpp114
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rules.cpp283
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rules.fsc20
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rules.h146
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rules.lex414
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rulessym.cpp156
-rw-r--r--web/yacco2/compiler/grammars/epsilon_rulestbl.cpp241
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph.cpp109
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph.fsc22
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph.h70
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph.lex78
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_th.cpp624
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_th.fsc25
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_th.h247
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_th.lex380
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_thsym.cpp649
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_ph_thtbl.cpp1429
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_phsym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/err_symbols_phtbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/esc_seq.cpp432
-rw-r--r--web/yacco2/compiler/grammars/esc_seq.fsc20
-rw-r--r--web/yacco2/compiler/grammars/esc_seq.h263
-rw-r--r--web/yacco2/compiler/grammars/esc_seq.lex361
-rw-r--r--web/yacco2/compiler/grammars/esc_seqsym.cpp999
-rw-r--r--web/yacco2/compiler/grammars/esc_seqtbl.cpp2034
-rw-r--r--web/yacco2/compiler/grammars/eval_phrases.cpp365
-rw-r--r--web/yacco2/compiler/grammars/eval_phrases.fsc22
-rw-r--r--web/yacco2/compiler/grammars/eval_phrases.h144
-rw-r--r--web/yacco2/compiler/grammars/eval_phrases.lex214
-rw-r--r--web/yacco2/compiler/grammars/eval_phrasessym.cpp295
-rw-r--r--web/yacco2/compiler/grammars/eval_phrasestbl.cpp505
-rw-r--r--web/yacco2/compiler/grammars/first_set_rules.cpp96
-rw-r--r--web/yacco2/compiler/grammars/first_set_rules.fsc20
-rw-r--r--web/yacco2/compiler/grammars/first_set_rules.h83
-rw-r--r--web/yacco2/compiler/grammars/first_set_rules.lex158
-rw-r--r--web/yacco2/compiler/grammars/first_set_rulessym.cpp99
-rw-r--r--web/yacco2/compiler/grammars/first_set_rulestbl.cpp137
-rw-r--r--web/yacco2/compiler/grammars/fsc_file.cpp1227
-rw-r--r--web/yacco2/compiler/grammars/fsc_file.fsc21
-rw-r--r--web/yacco2/compiler/grammars/fsc_file.h507
-rw-r--r--web/yacco2/compiler/grammars/fsc_file.lex782
-rw-r--r--web/yacco2/compiler/grammars/fsc_filesym.cpp1160
-rw-r--r--web/yacco2/compiler/grammars/fsc_filetbl.cpp1921
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_th.cpp992
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_th.fsc25
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_th.h270
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_th.lex509
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_thsym.cpp785
-rw-r--r--web/yacco2/compiler/grammars/fsm_class_phrase_thtbl.cpp1417
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase.cpp104
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase.h69
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase.lex69
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_th.cpp1011
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_th.fsc26
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_th.h388
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_th.lex580
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_thsym.cpp1105
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrase_thtbl.cpp2869
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/fsm_phrasetbl.cpp129
-rwxr-xr-xweb/yacco2/compiler/grammars/gen1grammar.sh140
-rw-r--r--web/yacco2/compiler/grammars/identifier.cpp374
-rw-r--r--web/yacco2/compiler/grammars/identifier.fsc71
-rw-r--r--web/yacco2/compiler/grammars/identifier.h189
-rw-r--r--web/yacco2/compiler/grammars/identifier.lex345
-rw-r--r--web/yacco2/compiler/grammars/identifiersym.cpp1079
-rw-r--r--web/yacco2/compiler/grammars/identifiertbl.cpp989
-rw-r--r--web/yacco2/compiler/grammars/int_no.cpp108
-rw-r--r--web/yacco2/compiler/grammars/int_no.fsc29
-rw-r--r--web/yacco2/compiler/grammars/int_no.h92
-rw-r--r--web/yacco2/compiler/grammars/int_no.lex92
-rw-r--r--web/yacco2/compiler/grammars/int_nosym.cpp241
-rw-r--r--web/yacco2/compiler/grammars/int_notbl.cpp285
-rw-r--r--web/yacco2/compiler/grammars/la_expr.cpp447
-rw-r--r--web/yacco2/compiler/grammars/la_expr.fsc22
-rw-r--r--web/yacco2/compiler/grammars/la_expr.h138
-rw-r--r--web/yacco2/compiler/grammars/la_expr.lex443
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexical.cpp187
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexical.fsc25
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexical.h81
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexical.lex124
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexicalsym.cpp160
-rw-r--r--web/yacco2/compiler/grammars/la_expr_lexicaltbl.cpp215
-rw-r--r--web/yacco2/compiler/grammars/la_expr_src.cpp303
-rw-r--r--web/yacco2/compiler/grammars/la_expr_src.fsc35
-rw-r--r--web/yacco2/compiler/grammars/la_expr_src.h125
-rw-r--r--web/yacco2/compiler/grammars/la_expr_src.lex184
-rw-r--r--web/yacco2/compiler/grammars/la_expr_srcsym.cpp325
-rw-r--r--web/yacco2/compiler/grammars/la_expr_srctbl.cpp376
-rw-r--r--web/yacco2/compiler/grammars/la_exprsym.cpp198
-rw-r--r--web/yacco2/compiler/grammars/la_exprtbl.cpp285
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_T.cpp185
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_T.fsc22
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_T.h83
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_T.lex147
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_Tsym.cpp273
-rw-r--r--web/yacco2/compiler/grammars/la_lrk_Ttbl.cpp723
-rw-r--r--web/yacco2/compiler/grammars/lib/Debug/info.txt14
-rw-r--r--web/yacco2/compiler/grammars/lib/Release/libo2grammars.abin0 -> 7090416 bytes
-rw-r--r--web/yacco2/compiler/grammars/link_cleanser.cpp315
-rw-r--r--web/yacco2/compiler/grammars/link_cleanser.fsc35
-rw-r--r--web/yacco2/compiler/grammars/link_cleanser.h104
-rw-r--r--web/yacco2/compiler/grammars/link_cleanser.lex140
-rw-r--r--web/yacco2/compiler/grammars/link_cleansersym.cpp308
-rw-r--r--web/yacco2/compiler/grammars/link_cleansertbl.cpp402
-rw-r--r--web/yacco2/compiler/grammars/linker_id.cpp359
-rw-r--r--web/yacco2/compiler/grammars/linker_id.fsc71
-rw-r--r--web/yacco2/compiler/grammars/linker_id.h226
-rw-r--r--web/yacco2/compiler/grammars/linker_id.lex255
-rw-r--r--web/yacco2/compiler/grammars/linker_idsym.cpp1320
-rw-r--r--web/yacco2/compiler/grammars/linker_idtbl.cpp2071
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3.cpp648
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3.fsc27
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3.h195
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3.lex357
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3sym.cpp545
-rw-r--r--web/yacco2/compiler/grammars/linker_pass3tbl.cpp1247
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_code.cpp293
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_code.fsc28
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_code.h98
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_code.lex222
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_codesym.cpp203
-rw-r--r--web/yacco2/compiler/grammars/linker_preamble_codetbl.cpp243
-rw-r--r--web/yacco2/compiler/grammars/lint_balls.cpp119
-rw-r--r--web/yacco2/compiler/grammars/lint_balls.fsc25
-rw-r--r--web/yacco2/compiler/grammars/lint_balls.h90
-rw-r--r--web/yacco2/compiler/grammars/lint_balls.lex94
-rw-r--r--web/yacco2/compiler/grammars/lint_ballssym.cpp163
-rw-r--r--web/yacco2/compiler/grammars/lint_ballstbl.cpp218
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase.h69
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase.lex86
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_th.cpp775
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_th.fsc27
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_th.h305
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_th.lex467
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_thsym.cpp782
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrase_thtbl.cpp1868
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/lr1_k_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/makefile_APPLE86
-rw-r--r--web/yacco2/compiler/grammars/makefile_GNU101
-rw-r--r--web/yacco2/compiler/grammars/makefile_SOLARIS561
-rw-r--r--web/yacco2/compiler/grammars/mpost_output.cpp881
-rw-r--r--web/yacco2/compiler/grammars/mpost_output.fsc20
-rw-r--r--web/yacco2/compiler/grammars/mpost_output.h307
-rw-r--r--web/yacco2/compiler/grammars/mpost_output.lex856
-rw-r--r--web/yacco2/compiler/grammars/mpost_outputsym.cpp490
-rw-r--r--web/yacco2/compiler/grammars/mpost_outputtbl.cpp1266
-rw-r--r--web/yacco2/compiler/grammars/o2_code_end.cpp59
-rw-r--r--web/yacco2/compiler/grammars/o2_code_end.fsc20
-rw-r--r--web/yacco2/compiler/grammars/o2_code_end.h55
-rw-r--r--web/yacco2/compiler/grammars/o2_code_end.lex46
-rw-r--r--web/yacco2/compiler/grammars/o2_code_endsym.cpp63
-rw-r--r--web/yacco2/compiler/grammars/o2_code_endtbl.cpp710
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlr.cpp384
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlr.fsc35
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlr.h155
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlr.lex233
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlrsym.cpp353
-rw-r--r--web/yacco2/compiler/grammars/o2_err_hdlrtbl.cpp458
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opt.cpp151
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opt.fsc20
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opt.h97
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opt.lex196
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opts.cpp372
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opts.fsc32
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opts.h159
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opts.lex241
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_optssym.cpp362
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_optstbl.cpp696
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_optsym.cpp210
-rw-r--r--web/yacco2/compiler/grammars/o2_lcl_opttbl.cpp340
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_opts.cpp239
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_opts.fsc30
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_opts.h136
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_opts.lex166
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_optssym.cpp246
-rw-r--r--web/yacco2/compiler/grammars/o2_linker_optstbl.cpp420
-rw-r--r--web/yacco2/compiler/grammars/o2_sdc.cpp310
-rw-r--r--web/yacco2/compiler/grammars/o2_sdc.fsc28
-rw-r--r--web/yacco2/compiler/grammars/o2_sdc.h100
-rw-r--r--web/yacco2/compiler/grammars/o2_sdc.lex257
-rw-r--r--web/yacco2/compiler/grammars/o2_sdcsym.cpp203
-rw-r--r--web/yacco2/compiler/grammars/o2_sdctbl.cpp1514
-rwxr-xr-xweb/yacco2/compiler/grammars/o2grammars.sh115
-rw-r--r--web/yacco2/compiler/grammars/o2grammars_Edit_cweb7
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_ph.cpp389
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_ph.fsc24
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_ph.h157
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_ph.lex258
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_phsym.cpp304
-rw-r--r--web/yacco2/compiler/grammars/parallel_monitor_phtbl.cpp682
-rw-r--r--web/yacco2/compiler/grammars/parallel_oper.cpp86
-rw-r--r--web/yacco2/compiler/grammars/parallel_oper.fsc21
-rw-r--r--web/yacco2/compiler/grammars/parallel_oper.h66
-rw-r--r--web/yacco2/compiler/grammars/parallel_oper.lex71
-rw-r--r--web/yacco2/compiler/grammars/parallel_opersym.cpp112
-rw-r--r--web/yacco2/compiler/grammars/parallel_opertbl.cpp863
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_th.cpp482
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_th.fsc26
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_th.h197
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_th.lex283
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_thsym.cpp402
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_ph_thtbl.cpp924
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrase.h70
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrase.lex77
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/parallel_parser_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/pass3.cpp410
-rw-r--r--web/yacco2/compiler/grammars/pass3.fsc32
-rw-r--r--web/yacco2/compiler/grammars/pass3.h120
-rw-r--r--web/yacco2/compiler/grammars/pass3.lex345
-rw-r--r--web/yacco2/compiler/grammars/pass3sym.cpp339
-rw-r--r--web/yacco2/compiler/grammars/pass3tbl.cpp470
-rw-r--r--web/yacco2/compiler/grammars/prefile_inc.cpp183
-rw-r--r--web/yacco2/compiler/grammars/prefile_inc.fsc23
-rw-r--r--web/yacco2/compiler/grammars/prefile_inc.h101
-rw-r--r--web/yacco2/compiler/grammars/prefile_inc.lex133
-rw-r--r--web/yacco2/compiler/grammars/prefile_include.cpp185
-rw-r--r--web/yacco2/compiler/grammars/prefile_include.fsc23
-rw-r--r--web/yacco2/compiler/grammars/prefile_include.h101
-rw-r--r--web/yacco2/compiler/grammars/prefile_include.lex135
-rw-r--r--web/yacco2/compiler/grammars/prefile_includesym.cpp194
-rw-r--r--web/yacco2/compiler/grammars/prefile_includetbl.cpp342
-rw-r--r--web/yacco2/compiler/grammars/prefile_incsym.cpp194
-rw-r--r--web/yacco2/compiler/grammars/prefile_inctbl.cpp337
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rules.cpp80
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rules.fsc20
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rules.h70
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rules.lex57
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rulessym.cpp84
-rw-r--r--web/yacco2/compiler/grammars/prt_fs_of_rulestbl.cpp120
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elements.cpp251
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elements.fsc20
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elements.h104
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elements.lex157
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elementssym.cpp188
-rw-r--r--web/yacco2/compiler/grammars/prt_sr_elementstbl.cpp309
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docs.cpp812
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docs.fsc20
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docs.h175
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docs.lex745
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docssym.cpp274
-rw-r--r--web/yacco2/compiler/grammars/prt_xrefs_docstbl.cpp452
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase.h70
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase.lex77
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_th.cpp580
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_th.fsc25
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_th.h239
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_th.lex349
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_thsym.cpp619
-rw-r--r--web/yacco2/compiler/grammars/rc_phrase_thtbl.cpp1393
-rw-r--r--web/yacco2/compiler/grammars/rc_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/rc_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/rhs_bnd.cpp72
-rw-r--r--web/yacco2/compiler/grammars/rhs_bnd.fsc23
-rw-r--r--web/yacco2/compiler/grammars/rhs_bnd.h59
-rw-r--r--web/yacco2/compiler/grammars/rhs_bnd.lex82
-rw-r--r--web/yacco2/compiler/grammars/rhs_bndsym.cpp109
-rw-r--r--web/yacco2/compiler/grammars/rhs_bndtbl.cpp112
-rw-r--r--web/yacco2/compiler/grammars/rhs_component.cpp341
-rw-r--r--web/yacco2/compiler/grammars/rhs_component.fsc27
-rw-r--r--web/yacco2/compiler/grammars/rhs_component.h82
-rw-r--r--web/yacco2/compiler/grammars/rhs_component.lex289
-rw-r--r--web/yacco2/compiler/grammars/rhs_componentsym.cpp168
-rw-r--r--web/yacco2/compiler/grammars/rhs_componenttbl.cpp194
-rw-r--r--web/yacco2/compiler/grammars/rtn_component.cpp223
-rw-r--r--web/yacco2/compiler/grammars/rtn_component.fsc25
-rw-r--r--web/yacco2/compiler/grammars/rtn_component.h79
-rw-r--r--web/yacco2/compiler/grammars/rtn_component.lex173
-rw-r--r--web/yacco2/compiler/grammars/rtn_componentsym.cpp153
-rw-r--r--web/yacco2/compiler/grammars/rtn_componenttbl.cpp177
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrase.cpp604
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrase.fsc26
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrase.h231
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrase.lex340
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrasesym.cpp587
-rw-r--r--web/yacco2/compiler/grammars/rule_def_phrasetbl.cpp1361
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrase.cpp779
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrase.fsc24
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrase.h261
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrase.lex424
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrasesym.cpp628
-rw-r--r--web/yacco2/compiler/grammars/rule_lhs_phrasetbl.cpp1176
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase.h69
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase.lex72
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_th.cpp354
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_th.fsc28
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_th.h174
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_th.lex236
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_thsym.cpp410
-rw-r--r--web/yacco2/compiler/grammars/rules_phrase_thtbl.cpp782
-rw-r--r--web/yacco2/compiler/grammars/rules_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/rules_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cnt.cpp262
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cnt.fsc20
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cnt.h135
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cnt.lex295
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cntsym.cpp213
-rw-r--r--web/yacco2/compiler/grammars/rules_use_cnttbl.cpp363
-rw-r--r--web/yacco2/compiler/grammars/sp_2.cpp75
-rw-r--r--web/yacco2/compiler/grammars/sp_2.fsc21
-rw-r--r--web/yacco2/compiler/grammars/sp_2.h76
-rw-r--r--web/yacco2/compiler/grammars/sp_2sym.cpp125
-rw-r--r--web/yacco2/compiler/grammars/sp_2tbl.cpp267
-rw-r--r--web/yacco2/compiler/grammars/subrule_def.cpp1486
-rw-r--r--web/yacco2/compiler/grammars/subrule_def.fsc30
-rw-r--r--web/yacco2/compiler/grammars/subrule_def.h476
-rw-r--r--web/yacco2/compiler/grammars/subrule_def.lex849
-rw-r--r--web/yacco2/compiler/grammars/subrule_defsym.cpp1192
-rw-r--r--web/yacco2/compiler/grammars/subrule_deftbl.cpp4291
-rw-r--r--web/yacco2/compiler/grammars/subrule_vector.cpp64
-rw-r--r--web/yacco2/compiler/grammars/subrule_vector.fsc20
-rw-r--r--web/yacco2/compiler/grammars/subrule_vector.h60
-rw-r--r--web/yacco2/compiler/grammars/subrule_vector.lex52
-rw-r--r--web/yacco2/compiler/grammars/subrule_vectorsym.cpp64
-rw-r--r--web/yacco2/compiler/grammars/subrule_vectortbl.cpp64
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrase.cpp189
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrase.fsc23
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrase.h110
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrase.lex127
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrasesym.cpp194
-rw-r--r--web/yacco2/compiler/grammars/subrules_phrasetbl.cpp1601
-rw-r--r--web/yacco2/compiler/grammars/t_alphabet.cpp210
-rw-r--r--web/yacco2/compiler/grammars/t_alphabet.fsc21
-rw-r--r--web/yacco2/compiler/grammars/t_alphabet.h110
-rw-r--r--web/yacco2/compiler/grammars/t_alphabet.lex154
-rw-r--r--web/yacco2/compiler/grammars/t_alphabetsym.cpp173
-rw-r--r--web/yacco2/compiler/grammars/t_alphabettbl.cpp266
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tags.cpp177
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tags.fsc20
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tags.h173
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tags.lex91
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tagssym.cpp1046
-rw-r--r--web/yacco2/compiler/grammars/t_def_delabort_tagstbl.cpp643
-rw-r--r--web/yacco2/compiler/grammars/term_def_ph.cpp787
-rw-r--r--web/yacco2/compiler/grammars/term_def_ph.fsc28
-rw-r--r--web/yacco2/compiler/grammars/term_def_ph.h253
-rw-r--r--web/yacco2/compiler/grammars/term_def_ph.lex455
-rw-r--r--web/yacco2/compiler/grammars/term_def_phsym.cpp671
-rw-r--r--web/yacco2/compiler/grammars/term_def_phtbl.cpp1636
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclass.cpp170
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclass.fsc20
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclass.h171
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclass.lex86
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclasssym.cpp1030
-rw-r--r--web/yacco2/compiler/grammars/terminal_def_symclasstbl.cpp732
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase.cpp109
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase.fsc22
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase.h69
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase.lex111
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_th.cpp967
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_th.fsc27
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_th.h361
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_th.lex588
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_thsym.cpp944
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrase_thtbl.cpp2202
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrasesym.cpp86
-rw-r--r--web/yacco2/compiler/grammars/terminals_phrasetbl.cpp129
-rw-r--r--web/yacco2/compiler/grammars/test_components.cpp1216
-rw-r--r--web/yacco2/compiler/grammars/test_components.fsc47
-rw-r--r--web/yacco2/compiler/grammars/test_components.h244
-rw-r--r--web/yacco2/compiler/grammars/test_components.lex436
-rw-r--r--web/yacco2/compiler/grammars/test_componentssym.cpp1040
-rw-r--r--web/yacco2/compiler/grammars/test_componentstbl.cpp1197
-rw-r--r--web/yacco2/compiler/grammars/unq_str.cpp98
-rw-r--r--web/yacco2/compiler/grammars/unq_str.fsc20
-rw-r--r--web/yacco2/compiler/grammars/unq_str.h98
-rw-r--r--web/yacco2/compiler/grammars/unq_str.lex111
-rw-r--r--web/yacco2/compiler/grammars/unq_strsym.cpp106
-rw-r--r--web/yacco2/compiler/grammars/unq_strtbl.cpp112
-rw-r--r--web/yacco2/compiler/grammars/ws.cpp95
-rw-r--r--web/yacco2/compiler/grammars/ws.fsc23
-rw-r--r--web/yacco2/compiler/grammars/ws.h71
-rw-r--r--web/yacco2/compiler/grammars/ws.lex105
-rw-r--r--web/yacco2/compiler/grammars/wssym.cpp123
-rw-r--r--web/yacco2/compiler/grammars/wstbl.cpp135
-rw-r--r--web/yacco2/compiler/grammars/xc_str.cpp126
-rw-r--r--web/yacco2/compiler/grammars/xc_str.fsc20
-rw-r--r--web/yacco2/compiler/grammars/xc_str.h71
-rw-r--r--web/yacco2/compiler/grammars/xc_str.lex130
-rw-r--r--web/yacco2/compiler/grammars/xc_strsym.cpp78
-rw-r--r--web/yacco2/compiler/grammars/xc_strtbl.cpp87
-rw-r--r--web/yacco2/compiler/grammars/yacco2.fsc91
-rw-r--r--web/yacco2/compiler/grammars/yacco2_T_enumeration.T39
-rw-r--r--web/yacco2/compiler/grammars/yacco2_T_enumeration.fsc575
-rw-r--r--web/yacco2/compiler/grammars/yacco2_T_enumeration.h592
-rw-r--r--web/yacco2/compiler/grammars/yacco2_T_includes.T15
-rw-r--r--web/yacco2/compiler/grammars/yacco2_err_symbols.T704
-rw-r--r--web/yacco2/compiler/grammars/yacco2_err_symbols.cpp665
-rw-r--r--web/yacco2/compiler/grammars/yacco2_err_symbols.h679
-rw-r--r--web/yacco2/compiler/grammars/yacco2_fsc.cpp9776
-rw-r--r--web/yacco2/compiler/grammars/yacco2_stbl.cpp391
-rw-r--r--web/yacco2/compiler/grammars/yacco2_stbl.h36
-rw-r--r--web/yacco2/compiler/grammars/yacco2_terminals.T3381
-rw-r--r--web/yacco2/compiler/grammars/yacco2_terminals.cpp1946
-rw-r--r--web/yacco2/compiler/grammars/yacco2_terminals.h1217
-rw-r--r--web/yacco2/compiler/grammars/yacco2_test.fsc94
-rw-r--r--web/yacco2/compiler/o2/Makefile_Edit_cweb31
-rw-r--r--web/yacco2/compiler/o2/bugs.w426
-rw-r--r--web/yacco2/compiler/o2/common_externs.cpp379
-rw-r--r--web/yacco2/compiler/o2/common_externs.h28
-rw-r--r--web/yacco2/compiler/o2/globals.h26
-rw-r--r--web/yacco2/compiler/o2/includes.w50
-rw-r--r--web/yacco2/compiler/o2/intro.w417
-rw-r--r--web/yacco2/compiler/o2/makefile_APPLE115
-rw-r--r--web/yacco2/compiler/o2/makefile_GNU89
-rw-r--r--web/yacco2/compiler/o2/makefile_SOLARIS123
-rw-r--r--web/yacco2/compiler/o2/o2.cpp849
-rw-r--r--web/yacco2/compiler/o2/o2.h46
-rw-r--r--web/yacco2/compiler/o2/o2.w17
-rw-r--r--web/yacco2/compiler/o2/o2_defs.cpp1671
-rw-r--r--web/yacco2/compiler/o2/o2_defs.w2217
-rw-r--r--web/yacco2/compiler/o2/o2_externs.cpp7278
-rw-r--r--web/yacco2/compiler/o2/o2_externs.h96
-rw-r--r--web/yacco2/compiler/o2/o2_types.h537
-rw-r--r--web/yacco2/compiler/o2/o2_types.w789
-rw-r--r--web/yacco2/compiler/o2/o2externs.w8194
-rw-r--r--web/yacco2/compiler/o2/prog.w651
-rw-r--r--web/yacco2/compiler/stbl/yacco2_stbl.w860
-rw-r--r--web/yacco2/copyright.w11
-rw-r--r--web/yacco2/diagrams/1test.txt33
-rw-r--r--web/yacco2/diagrams/TS_la1.mp60
-rw-r--r--web/yacco2/diagrams/TS_la2.mp60
-rw-r--r--web/yacco2/diagrams/TextFile1.txt690
-rw-r--r--web/yacco2/diagrams/Tsym.txt30
-rw-r--r--web/yacco2/diagrams/arbitrator.txt25
-rw-r--r--web/yacco2/diagrams/array_def.txt5
-rw-r--r--web/yacco2/diagrams/bug1.txt8
-rw-r--r--web/yacco2/diagrams/docgeneration.1193
-rw-r--r--web/yacco2/diagrams/docgeneration.mp57
-rw-r--r--web/yacco2/diagrams/eol.txt39
-rw-r--r--web/yacco2/diagrams/errsym.txt37
-rw-r--r--web/yacco2/diagrams/fsm.txt9
-rw-r--r--web/yacco2/diagrams/fsm_failed.txt39
-rw-r--r--web/yacco2/diagrams/fsmclass.txt45
-rw-r--r--web/yacco2/diagrams/intro1.txt1
-rw-r--r--web/yacco2/diagrams/intro2.txt7
-rw-r--r--web/yacco2/diagrams/intro3.txt30
-rw-r--r--web/yacco2/diagrams/intro4.txt21
-rw-r--r--web/yacco2/diagrams/linker.193
-rw-r--r--web/yacco2/diagrams/linker.2219
-rw-r--r--web/yacco2/diagrams/linker.311
-rw-r--r--web/yacco2/diagrams/linker.mp117
-rw-r--r--web/yacco2/diagrams/lrksym.txt41
-rw-r--r--web/yacco2/diagrams/mpxerr.tex35
-rw-r--r--web/yacco2/diagrams/o2_Toverview.1130
-rw-r--r--web/yacco2/diagrams/o2_Toverview.mp45
-rw-r--r--web/yacco2/diagrams/o2_overview.1368
-rw-r--r--web/yacco2/diagrams/o2_overview.mp105
-rw-r--r--web/yacco2/diagrams/o2_structures.180
-rw-r--r--web/yacco2/diagrams/o2_structures.2263
-rw-r--r--web/yacco2/diagrams/o2_structures.mp59
-rw-r--r--web/yacco2/diagrams/o2diag.mp506
-rw-r--r--web/yacco2/diagrams/o2linker_overview.1294
-rw-r--r--web/yacco2/diagrams/o2linker_overview.mp78
-rw-r--r--web/yacco2/diagrams/o2mac.tex390
-rw-r--r--web/yacco2/diagrams/o2run_example.txt9
-rw-r--r--web/yacco2/diagrams/parse_stk_env.1136
-rw-r--r--web/yacco2/diagrams/parse_stk_env.mp53
-rw-r--r--web/yacco2/diagrams/ppmntr.txt33
-rw-r--r--web/yacco2/diagrams/ppprsr.txt13
-rw-r--r--web/yacco2/diagrams/rcsym.txt46
-rw-r--r--web/yacco2/diagrams/ruledef.txt25
-rw-r--r--web/yacco2/diagrams/rulelhs.txt13
-rw-r--r--web/yacco2/diagrams/sampleoutput.txt197
-rw-r--r--web/yacco2/diagrams/sampleoutput2.txt28
-rw-r--r--web/yacco2/diagrams/subrdef.txt22
-rw-r--r--web/yacco2/diagrams/test.pdfbin0 -> 39053 bytes
-rw-r--r--web/yacco2/diagrams/test.tex109
-rw-r--r--web/yacco2/diagrams/testsuiteoutput.txt622
-rw-r--r--web/yacco2/diagrams/threading_defs.1203
-rw-r--r--web/yacco2/diagrams/threading_defs.mp49
-rw-r--r--web/yacco2/diagrams/threading_exs.1617
-rw-r--r--web/yacco2/diagrams/threading_exs.2492
-rw-r--r--web/yacco2/diagrams/threading_exs.3434
-rw-r--r--web/yacco2/diagrams/threading_exs.mp565
-rw-r--r--web/yacco2/diagrams/threadmanualcall.txt74
-rw-r--r--web/yacco2/diagrams/tokcanaccess.txt13
-rw-r--r--web/yacco2/diagrams/treemodify.txt9
-rw-r--r--web/yacco2/diagrams/yacco2_stbl.1289
-rw-r--r--web/yacco2/diagrams/yacco2_stbl.2444
-rw-r--r--web/yacco2/diagrams/yacco2_stbl.mp136
-rw-r--r--web/yacco2/docs/Err.pdfbin0 -> 269534 bytes
-rw-r--r--web/yacco2/docs/Lrk.pdfbin0 -> 153153 bytes
-rw-r--r--web/yacco2/docs/T.pdfbin0 -> 652927 bytes
-rw-r--r--web/yacco2/docs/T_enum_phrase.pdfbin0 -> 168730 bytes
-rw-r--r--web/yacco2/docs/T_enum_phrase_idx.pdfbin0 -> 137081 bytes
-rw-r--r--web/yacco2/docs/T_enum_phrase_th.pdfbin0 -> 238171 bytes
-rw-r--r--web/yacco2/docs/T_enum_phrase_th_idx.pdfbin0 -> 169866 bytes
-rw-r--r--web/yacco2/docs/angled_string.pdfbin0 -> 174034 bytes
-rw-r--r--web/yacco2/docs/angled_string_idx.pdfbin0 -> 135552 bytes
-rw-r--r--web/yacco2/docs/bad_char_set.pdfbin0 -> 202770 bytes
-rw-r--r--web/yacco2/docs/bad_char_set_idx.pdfbin0 -> 186011 bytes
-rw-r--r--web/yacco2/docs/c_comments.pdfbin0 -> 177451 bytes
-rw-r--r--web/yacco2/docs/c_comments_idx.pdfbin0 -> 137011 bytes
-rw-r--r--web/yacco2/docs/c_k_of_cweb_or_cpp.pdfbin0 -> 194487 bytes
-rw-r--r--web/yacco2/docs/c_k_of_cweb_or_cpp_idx.pdfbin0 -> 141517 bytes
-rw-r--r--web/yacco2/docs/c_literal.pdfbin0 -> 178276 bytes
-rw-r--r--web/yacco2/docs/c_literal_idx.pdfbin0 -> 133105 bytes
-rw-r--r--web/yacco2/docs/c_string.pdfbin0 -> 173282 bytes
-rw-r--r--web/yacco2/docs/c_string_idx.pdfbin0 -> 134350 bytes
-rw-r--r--web/yacco2/docs/common_externs.pdfbin0 -> 173311 bytes
-rw-r--r--web/yacco2/docs/cweave_T_sdc.pdfbin0 -> 193653 bytes
-rw-r--r--web/yacco2/docs/cweave_T_sdc_idx.pdfbin0 -> 137732 bytes
-rw-r--r--web/yacco2/docs/cweave_fsm_sdc.pdfbin0 -> 206996 bytes
-rw-r--r--web/yacco2/docs/cweave_fsm_sdc_idx.pdfbin0 -> 142277 bytes
-rw-r--r--web/yacco2/docs/cweave_lhs_sdc.pdfbin0 -> 197359 bytes
-rw-r--r--web/yacco2/docs/cweave_lhs_sdc_idx.pdfbin0 -> 138827 bytes
-rw-r--r--web/yacco2/docs/cweave_sdc.pdfbin0 -> 207410 bytes
-rw-r--r--web/yacco2/docs/cweave_sdc_idx.pdfbin0 -> 140710 bytes
-rw-r--r--web/yacco2/docs/cweb_or_c_k.pdfbin0 -> 196964 bytes
-rw-r--r--web/yacco2/docs/cweb_or_c_k_idx.pdfbin0 -> 139469 bytes
-rw-r--r--web/yacco2/docs/cweb_put_k_into_ph.pdfbin0 -> 178808 bytes
-rw-r--r--web/yacco2/docs/cweb_put_k_into_ph_idx.pdfbin0 -> 137527 bytes
-rw-r--r--web/yacco2/docs/dbl_colon.pdfbin0 -> 139717 bytes
-rw-r--r--web/yacco2/docs/dbl_colon_idx.pdfbin0 -> 154807 bytes
-rw-r--r--web/yacco2/docs/dp_1.pdfbin0 -> 133141 bytes
-rw-r--r--web/yacco2/docs/dp_1_idx.pdfbin0 -> 133711 bytes
-rw-r--r--web/yacco2/docs/dp_2.pdfbin0 -> 135867 bytes
-rw-r--r--web/yacco2/docs/dp_2_idx.pdfbin0 -> 137137 bytes
-rw-r--r--web/yacco2/docs/enumerate_T_alphabet.pdfbin0 -> 188819 bytes
-rw-r--r--web/yacco2/docs/enumerate_T_alphabet_idx.pdfbin0 -> 141078 bytes
-rw-r--r--web/yacco2/docs/enumerate_grammar.pdfbin0 -> 186308 bytes
-rw-r--r--web/yacco2/docs/enumerate_grammar_idx.pdfbin0 -> 147804 bytes
-rw-r--r--web/yacco2/docs/eol.pdfbin0 -> 151447 bytes
-rw-r--r--web/yacco2/docs/eol_idx.pdfbin0 -> 132294 bytes
-rw-r--r--web/yacco2/docs/epsilon_rules.pdfbin0 -> 208450 bytes
-rw-r--r--web/yacco2/docs/epsilon_rules_idx.pdfbin0 -> 142376 bytes
-rw-r--r--web/yacco2/docs/err_symbols_ph.pdfbin0 -> 169666 bytes
-rw-r--r--web/yacco2/docs/err_symbols_ph_idx.pdfbin0 -> 137747 bytes
-rw-r--r--web/yacco2/docs/err_symbols_ph_th.pdfbin0 -> 271625 bytes
-rw-r--r--web/yacco2/docs/err_symbols_ph_th_idx.pdfbin0 -> 171010 bytes
-rw-r--r--web/yacco2/docs/esc_seq.pdfbin0 -> 273827 bytes
-rw-r--r--web/yacco2/docs/esc_seq_idx.pdfbin0 -> 178692 bytes
-rw-r--r--web/yacco2/docs/eval_phrases.pdfbin0 -> 212138 bytes
-rw-r--r--web/yacco2/docs/eval_phrases_idx.pdfbin0 -> 152941 bytes
-rw-r--r--web/yacco2/docs/first_set_for_threads.pdfbin0 -> 178668 bytes
-rw-r--r--web/yacco2/docs/first_set_for_threads_idx.pdfbin0 -> 143779 bytes
-rw-r--r--web/yacco2/docs/first_set_rules.pdfbin0 -> 166488 bytes
-rw-r--r--web/yacco2/docs/first_set_rules_idx.pdfbin0 -> 136734 bytes
-rw-r--r--web/yacco2/docs/fsc_file.pdfbin0 -> 355226 bytes
-rw-r--r--web/yacco2/docs/fsc_file_idx.pdfbin0 -> 210532 bytes
-rw-r--r--web/yacco2/docs/fsm_class_phrase_th.pdfbin0 -> 310333 bytes
-rw-r--r--web/yacco2/docs/fsm_class_phrase_th_idx.pdfbin0 -> 176705 bytes
-rw-r--r--web/yacco2/docs/fsm_phrase.pdfbin0 -> 164515 bytes
-rw-r--r--web/yacco2/docs/fsm_phrase_idx.pdfbin0 -> 136007 bytes
-rw-r--r--web/yacco2/docs/fsm_phrase_th.pdfbin0 -> 338947 bytes
-rw-r--r--web/yacco2/docs/fsm_phrase_th_idx.pdfbin0 -> 194105 bytes
-rw-r--r--web/yacco2/docs/identifier.pdfbin0 -> 256555 bytes
-rw-r--r--web/yacco2/docs/identifier_idx.pdfbin0 -> 168544 bytes
-rw-r--r--web/yacco2/docs/int_no.pdfbin0 -> 160271 bytes
-rw-r--r--web/yacco2/docs/int_no_idx.pdfbin0 -> 136921 bytes
-rw-r--r--web/yacco2/docs/km_1.pdfbin0 -> 141680 bytes
-rw-r--r--web/yacco2/docs/km_1_idx.pdfbin0 -> 142469 bytes
-rw-r--r--web/yacco2/docs/la_expr.pdfbin0 -> 238463 bytes
-rw-r--r--web/yacco2/docs/la_expr_idx.pdfbin0 -> 142692 bytes
-rw-r--r--web/yacco2/docs/la_expr_lexical.pdfbin0 -> 176891 bytes
-rw-r--r--web/yacco2/docs/la_expr_lexical_idx.pdfbin0 -> 137134 bytes
-rw-r--r--web/yacco2/docs/la_expr_src.pdfbin0 -> 206445 bytes
-rw-r--r--web/yacco2/docs/la_expr_src_idx.pdfbin0 -> 147586 bytes
-rw-r--r--web/yacco2/docs/la_lrk_T.pdfbin0 -> 194762 bytes
-rw-r--r--web/yacco2/docs/la_lrk_T_idx.pdfbin0 -> 135020 bytes
-rw-r--r--web/yacco2/docs/link_cleanser.pdfbin0 -> 198027 bytes
-rw-r--r--web/yacco2/docs/link_cleanser_idx.pdfbin0 -> 144523 bytes
-rw-r--r--web/yacco2/docs/linker_id.pdfbin0 -> 265870 bytes
-rw-r--r--web/yacco2/docs/linker_id_idx.pdfbin0 -> 199377 bytes
-rw-r--r--web/yacco2/docs/linker_pass3.pdfbin0 -> 272802 bytes
-rw-r--r--web/yacco2/docs/linker_pass3_idx.pdfbin0 -> 161969 bytes
-rw-r--r--web/yacco2/docs/linker_preamble_code.pdfbin0 -> 206114 bytes
-rw-r--r--web/yacco2/docs/linker_preamble_code_idx.pdfbin0 -> 144645 bytes
-rw-r--r--web/yacco2/docs/lint_balls.pdfbin0 -> 173873 bytes
-rw-r--r--web/yacco2/docs/lint_balls_idx.pdfbin0 -> 140377 bytes
-rw-r--r--web/yacco2/docs/lr1_k_phrase.pdfbin0 -> 168090 bytes
-rw-r--r--web/yacco2/docs/lr1_k_phrase_idx.pdfbin0 -> 136685 bytes
-rw-r--r--web/yacco2/docs/lr1_k_phrase_th.pdfbin0 -> 302976 bytes
-rw-r--r--web/yacco2/docs/lr1_k_phrase_th_idx.pdfbin0 -> 187603 bytes
-rw-r--r--web/yacco2/docs/mpost_output.pdfbin0 -> 319037 bytes
-rw-r--r--web/yacco2/docs/mpost_output_idx.pdfbin0 -> 177514 bytes
-rw-r--r--web/yacco2/docs/o2.pdfbin0 -> 649370 bytes
-rw-r--r--web/yacco2/docs/o2_code_end.pdfbin0 -> 142947 bytes
-rw-r--r--web/yacco2/docs/o2_code_end_idx.pdfbin0 -> 149653 bytes
-rw-r--r--web/yacco2/docs/o2_err_hdlr.pdfbin0 -> 206372 bytes
-rw-r--r--web/yacco2/docs/o2_err_hdlr_idx.pdfbin0 -> 140916 bytes
-rw-r--r--web/yacco2/docs/o2_lcl_opt.pdfbin0 -> 185294 bytes
-rw-r--r--web/yacco2/docs/o2_lcl_opt_idx.pdfbin0 -> 140984 bytes
-rw-r--r--web/yacco2/docs/o2_lcl_opts.pdfbin0 -> 230680 bytes
-rw-r--r--web/yacco2/docs/o2_lcl_opts_idx.pdfbin0 -> 157590 bytes
-rw-r--r--web/yacco2/docs/o2_linker_opts.pdfbin0 -> 210722 bytes
-rw-r--r--web/yacco2/docs/o2_linker_opts_idx.pdfbin0 -> 150390 bytes
-rw-r--r--web/yacco2/docs/o2_sdc.pdfbin0 -> 213153 bytes
-rw-r--r--web/yacco2/docs/o2_sdc_idx.pdfbin0 -> 170661 bytes
-rw-r--r--web/yacco2/docs/o2_types.pdfbin0 -> 243820 bytes
-rw-r--r--web/yacco2/docs/o2book.pdfbin0 -> 1327846 bytes
-rw-r--r--web/yacco2/docs/o2externs.pdfbin0 -> 1221474 bytes
-rw-r--r--web/yacco2/docs/o2linker.pdfbin0 -> 422483 bytes
-rw-r--r--web/yacco2/docs/o2linker_doc.pdfbin0 -> 262744 bytes
-rw-r--r--web/yacco2/docs/o2linker_externs.pdfbin0 -> 134051 bytes
-rw-r--r--web/yacco2/docs/o2linker_types.pdfbin0 -> 139329 bytes
-rw-r--r--web/yacco2/docs/p1.pdfbin0 -> 164582 bytes
-rw-r--r--web/yacco2/docs/p2.pdfbin0 -> 189058 bytes
-rw-r--r--web/yacco2/docs/pager_1.pdfbin0 -> 155913 bytes
-rw-r--r--web/yacco2/docs/pager_1_idx.pdfbin0 -> 142665 bytes
-rw-r--r--web/yacco2/docs/pager_2.pdfbin0 -> 160139 bytes
-rw-r--r--web/yacco2/docs/pager_2_idx.pdfbin0 -> 153751 bytes
-rw-r--r--web/yacco2/docs/parallel_monitor_ph.pdfbin0 -> 233919 bytes
-rw-r--r--web/yacco2/docs/parallel_monitor_ph_idx.pdfbin0 -> 159359 bytes
-rw-r--r--web/yacco2/docs/parallel_oper.pdfbin0 -> 156291 bytes
-rw-r--r--web/yacco2/docs/parallel_oper_idx.pdfbin0 -> 146892 bytes
-rw-r--r--web/yacco2/docs/parallel_parser_ph_th.pdfbin0 -> 240370 bytes
-rw-r--r--web/yacco2/docs/parallel_parser_ph_th_idx.pdfbin0 -> 162721 bytes
-rw-r--r--web/yacco2/docs/parallel_parser_phrase.pdfbin0 -> 165847 bytes
-rw-r--r--web/yacco2/docs/parallel_parser_phrase_idx.pdfbin0 -> 135095 bytes
-rw-r--r--web/yacco2/docs/pass3.pdfbin0 -> 238978 bytes
-rw-r--r--web/yacco2/docs/pass3_idx.pdfbin0 -> 149349 bytes
-rw-r--r--web/yacco2/docs/prefile_inc.pdfbin0 -> 191895 bytes
-rw-r--r--web/yacco2/docs/prefile_inc_idx.pdfbin0 -> 144297 bytes
-rw-r--r--web/yacco2/docs/prefile_include.pdfbin0 -> 191856 bytes
-rw-r--r--web/yacco2/docs/prefile_include_idx.pdfbin0 -> 144575 bytes
-rw-r--r--web/yacco2/docs/prt_fs_of_rules.pdfbin0 -> 152968 bytes
-rw-r--r--web/yacco2/docs/prt_fs_of_rules_idx.pdfbin0 -> 136057 bytes
-rw-r--r--web/yacco2/docs/prt_sr_elements.pdfbin0 -> 195043 bytes
-rw-r--r--web/yacco2/docs/prt_sr_elements_idx.pdfbin0 -> 141183 bytes
-rw-r--r--web/yacco2/docs/prt_xrefs_docs.pdfbin0 -> 298154 bytes
-rw-r--r--web/yacco2/docs/prt_xrefs_docs_idx.pdfbin0 -> 148279 bytes
-rw-r--r--web/yacco2/docs/rc_phrase.pdfbin0 -> 164449 bytes
-rw-r--r--web/yacco2/docs/rc_phrase_idx.pdfbin0 -> 134683 bytes
-rw-r--r--web/yacco2/docs/rc_phrase_th.pdfbin0 -> 262321 bytes
-rw-r--r--web/yacco2/docs/rc_phrase_th_idx.pdfbin0 -> 169627 bytes
-rw-r--r--web/yacco2/docs/rhs_bnd.pdfbin0 -> 153441 bytes
-rw-r--r--web/yacco2/docs/rhs_bnd_idx.pdfbin0 -> 132319 bytes
-rw-r--r--web/yacco2/docs/rhs_component.pdfbin0 -> 210625 bytes
-rw-r--r--web/yacco2/docs/rhs_component_idx.pdfbin0 -> 138585 bytes
-rw-r--r--web/yacco2/docs/rtn_component.pdfbin0 -> 196098 bytes
-rw-r--r--web/yacco2/docs/rtn_component_idx.pdfbin0 -> 135263 bytes
-rw-r--r--web/yacco2/docs/rule_def_phrase.pdfbin0 -> 270216 bytes
-rw-r--r--web/yacco2/docs/rule_def_phrase_idx.pdfbin0 -> 175962 bytes
-rw-r--r--web/yacco2/docs/rule_lhs_phrase.pdfbin0 -> 280940 bytes
-rw-r--r--web/yacco2/docs/rule_lhs_phrase_idx.pdfbin0 -> 170694 bytes
-rw-r--r--web/yacco2/docs/rules_phrase.pdfbin0 -> 164944 bytes
-rw-r--r--web/yacco2/docs/rules_phrase_idx.pdfbin0 -> 135148 bytes
-rw-r--r--web/yacco2/docs/rules_phrase_th.pdfbin0 -> 231800 bytes
-rw-r--r--web/yacco2/docs/rules_phrase_th_idx.pdfbin0 -> 166284 bytes
-rw-r--r--web/yacco2/docs/rules_use_cnt.pdfbin0 -> 205288 bytes
-rw-r--r--web/yacco2/docs/rules_use_cnt_idx.pdfbin0 -> 146689 bytes
-rw-r--r--web/yacco2/docs/sp_1.pdfbin0 -> 137324 bytes
-rw-r--r--web/yacco2/docs/sp_1_idx.pdfbin0 -> 140837 bytes
-rw-r--r--web/yacco2/docs/sp_2.pdfbin0 -> 138250 bytes
-rw-r--r--web/yacco2/docs/sp_2_idx.pdfbin0 -> 140195 bytes
-rw-r--r--web/yacco2/docs/subrule_def.pdfbin0 -> 410525 bytes
-rw-r--r--web/yacco2/docs/subrule_def_idx.pdfbin0 -> 240199 bytes
-rw-r--r--web/yacco2/docs/subrule_vector.pdfbin0 -> 148252 bytes
-rw-r--r--web/yacco2/docs/subrule_vector_idx.pdfbin0 -> 132080 bytes
-rw-r--r--web/yacco2/docs/subrules_phrase.pdfbin0 -> 183963 bytes
-rw-r--r--web/yacco2/docs/subrules_phrase_idx.pdfbin0 -> 169111 bytes
-rw-r--r--web/yacco2/docs/t_alphabet.pdfbin0 -> 196661 bytes
-rw-r--r--web/yacco2/docs/t_alphabet_idx.pdfbin0 -> 143310 bytes
-rw-r--r--web/yacco2/docs/t_def_delabort_tags.pdfbin0 -> 167410 bytes
-rw-r--r--web/yacco2/docs/t_def_delabort_tags_idx.pdfbin0 -> 179737 bytes
-rw-r--r--web/yacco2/docs/term_def_ph.pdfbin0 -> 298677 bytes
-rw-r--r--web/yacco2/docs/term_def_ph_idx.pdfbin0 -> 178052 bytes
-rw-r--r--web/yacco2/docs/terminal_def_symclass.pdfbin0 -> 174755 bytes
-rw-r--r--web/yacco2/docs/terminal_def_symclass_idx.pdfbin0 -> 179155 bytes
-rw-r--r--web/yacco2/docs/terminals_phrase.pdfbin0 -> 167128 bytes
-rw-r--r--web/yacco2/docs/terminals_phrase_idx.pdfbin0 -> 136950 bytes
-rw-r--r--web/yacco2/docs/terminals_phrase_th.pdfbin0 -> 327473 bytes
-rw-r--r--web/yacco2/docs/terminals_phrase_th_idx.pdfbin0 -> 193970 bytes
-rw-r--r--web/yacco2/docs/test_components.pdfbin0 -> 288565 bytes
-rw-r--r--web/yacco2/docs/test_components_idx.pdfbin0 -> 173122 bytes
-rw-r--r--web/yacco2/docs/testdriver.pdfbin0 -> 140439 bytes
-rw-r--r--web/yacco2/docs/testout.pdfbin0 -> 174020 bytes
-rw-r--r--web/yacco2/docs/testout_err_hdlr.pdfbin0 -> 165981 bytes
-rw-r--r--web/yacco2/docs/testout_err_hdlr_idx.pdfbin0 -> 136249 bytes
-rw-r--r--web/yacco2/docs/thread_fs_calc.pdfbin0 -> 173651 bytes
-rw-r--r--web/yacco2/docs/thread_fs_calc_idx.pdfbin0 -> 142406 bytes
-rw-r--r--web/yacco2/docs/tugboat-o2.pdfbin0 -> 194378 bytes
-rw-r--r--web/yacco2/docs/unq_str.pdfbin0 -> 162296 bytes
-rw-r--r--web/yacco2/docs/unq_str_idx.pdfbin0 -> 135977 bytes
-rw-r--r--web/yacco2/docs/wlibrary.pdfbin0 -> 1939262 bytes
-rw-r--r--web/yacco2/docs/ws.pdfbin0 -> 153437 bytes
-rw-r--r--web/yacco2/docs/ws_idx.pdfbin0 -> 130360 bytes
-rw-r--r--web/yacco2/docs/xc_str.pdfbin0 -> 160579 bytes
-rw-r--r--web/yacco2/docs/xc_str_idx.pdfbin0 -> 132587 bytes
-rw-r--r--web/yacco2/docs/xxx.pdfbin0 -> 29346 bytes
-rw-r--r--web/yacco2/docs/yacco2_stbl.pdfbin0 -> 235510 bytes
-rw-r--r--web/yacco2/externals/common_externs.w489
-rw-r--r--web/yacco2/grammar-testsuite/Err.w60
-rw-r--r--web/yacco2/grammar-testsuite/Lrk.w331
-rw-r--r--web/yacco2/grammar-testsuite/Makefile_Edit_cweb30
-rw-r--r--web/yacco2/grammar-testsuite/T.w17
-rw-r--r--web/yacco2/grammar-testsuite/dp_1.cpp75
-rw-r--r--web/yacco2/grammar-testsuite/dp_1.fsc21
-rw-r--r--web/yacco2/grammar-testsuite/dp_1.h76
-rw-r--r--web/yacco2/grammar-testsuite/dp_1.lex40
-rw-r--r--web/yacco2/grammar-testsuite/dp_1.pdfbin0 -> 133167 bytes
-rw-r--r--web/yacco2/grammar-testsuite/dp_1_idx.pdfbin0 -> 133663 bytes
-rw-r--r--web/yacco2/grammar-testsuite/dp_1_idx.w228
-rw-r--r--web/yacco2/grammar-testsuite/dp_1sym.cpp125
-rw-r--r--web/yacco2/grammar-testsuite/dp_1tbl.cpp287
-rw-r--r--web/yacco2/grammar-testsuite/dp_2.cpp88
-rw-r--r--web/yacco2/grammar-testsuite/dp_2.fsc21
-rw-r--r--web/yacco2/grammar-testsuite/dp_2.h91
-rw-r--r--web/yacco2/grammar-testsuite/dp_2.lex46
-rw-r--r--web/yacco2/grammar-testsuite/dp_2.pdfbin0 -> 135979 bytes
-rw-r--r--web/yacco2/grammar-testsuite/dp_2_idx.pdfbin0 -> 137223 bytes
-rw-r--r--web/yacco2/grammar-testsuite/dp_2sym.cpp139
-rw-r--r--web/yacco2/grammar-testsuite/dp_2tbl.cpp279
-rw-r--r--web/yacco2/grammar-testsuite/km_1.cpp77
-rw-r--r--web/yacco2/grammar-testsuite/km_1.fsc21
-rw-r--r--web/yacco2/grammar-testsuite/km_1.h78
-rw-r--r--web/yacco2/grammar-testsuite/km_1.lex41
-rw-r--r--web/yacco2/grammar-testsuite/km_1.pdfbin0 -> 142003 bytes
-rw-r--r--web/yacco2/grammar-testsuite/km_1_idx.pdfbin0 -> 142546 bytes
-rw-r--r--web/yacco2/grammar-testsuite/km_1sym.cpp153
-rw-r--r--web/yacco2/grammar-testsuite/km_1tbl.cpp408
-rw-r--r--web/yacco2/grammar-testsuite/makefile_testout_APPLE100
-rw-r--r--web/yacco2/grammar-testsuite/makefile_testout_GNU90
-rw-r--r--web/yacco2/grammar-testsuite/makefile_testout_SOLARIS125
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.cpp82
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.fsc21
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.h78
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.lex65
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.pdfbin0 -> 155793 bytes
-rw-r--r--web/yacco2/grammar-testsuite/pager_1.w687
-rw-r--r--web/yacco2/grammar-testsuite/pager_1_idx.pdfbin0 -> 142749 bytes
-rw-r--r--web/yacco2/grammar-testsuite/pager_1sym.cpp153
-rw-r--r--web/yacco2/grammar-testsuite/pager_1tbl.cpp353
-rw-r--r--web/yacco2/grammar-testsuite/pager_2.cpp128
-rw-r--r--web/yacco2/grammar-testsuite/pager_2.fsc23
-rw-r--r--web/yacco2/grammar-testsuite/pager_2.h135
-rw-r--r--web/yacco2/grammar-testsuite/pager_2.lex75
-rw-r--r--web/yacco2/grammar-testsuite/pager_2.pdfbin0 -> 160239 bytes
-rw-r--r--web/yacco2/grammar-testsuite/pager_2_idx.pdfbin0 -> 153823 bytes
-rw-r--r--web/yacco2/grammar-testsuite/pager_2sym.cpp363
-rw-r--r--web/yacco2/grammar-testsuite/pager_2tbl.cpp699
-rw-r--r--web/yacco2/grammar-testsuite/sp_1.cpp75
-rw-r--r--web/yacco2/grammar-testsuite/sp_1.fsc20
-rw-r--r--web/yacco2/grammar-testsuite/sp_1.h76
-rw-r--r--web/yacco2/grammar-testsuite/sp_1.lex40
-rw-r--r--web/yacco2/grammar-testsuite/sp_1.pdfbin0 -> 137422 bytes
-rw-r--r--web/yacco2/grammar-testsuite/sp_1_idx.pdfbin0 -> 140942 bytes
-rw-r--r--web/yacco2/grammar-testsuite/sp_1sym.cpp125
-rw-r--r--web/yacco2/grammar-testsuite/sp_1tbl.cpp320
-rw-r--r--web/yacco2/grammar-testsuite/sp_2.cpp75
-rw-r--r--web/yacco2/grammar-testsuite/sp_2.fsc21
-rw-r--r--web/yacco2/grammar-testsuite/sp_2.h76
-rw-r--r--web/yacco2/grammar-testsuite/sp_2.lex40
-rw-r--r--web/yacco2/grammar-testsuite/sp_2.pdfbin0 -> 138343 bytes
-rw-r--r--web/yacco2/grammar-testsuite/sp_2_idx.pdfbin0 -> 140262 bytes
-rw-r--r--web/yacco2/grammar-testsuite/sp_2sym.cpp125
-rw-r--r--web/yacco2/grammar-testsuite/sp_2tbl.cpp267
-rwxr-xr-xweb/yacco2/grammar-testsuite/test-out-grammars.sh120
-rwxr-xr-xweb/yacco2/grammar-testsuite/testoutbin0 -> 419684 bytes
-rw-r--r--web/yacco2/grammar-testsuite/testout.cpp171
-rw-r--r--web/yacco2/grammar-testsuite/testout.fsc19
-rw-r--r--web/yacco2/grammar-testsuite/testout.h39
-rw-r--r--web/yacco2/grammar-testsuite/testout.w15
-rw-r--r--web/yacco2/grammar-testsuite/testout_1.dat1
-rw-r--r--web/yacco2/grammar-testsuite/testout_2.dat1
-rw-r--r--web/yacco2/grammar-testsuite/testout_3.dat1
-rw-r--r--web/yacco2/grammar-testsuite/testout_T_enumeration.T39
-rw-r--r--web/yacco2/grammar-testsuite/testout_T_enumeration.fsc275
-rw-r--r--web/yacco2/grammar-testsuite/testout_T_enumeration.h292
-rw-r--r--web/yacco2/grammar-testsuite/testout_T_includes.T15
-rw-r--r--web/yacco2/grammar-testsuite/testout_comments.w56
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlr.cpp118
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlr.fsc23
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlr.h130
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlr.lex123
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlrsym.cpp128
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_hdlrtbl.cpp176
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_symbols.T45
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_symbols.cpp26
-rw-r--r--web/yacco2/grammar-testsuite/testout_err_symbols.h32
-rw-r--r--web/yacco2/grammar-testsuite/testout_error.dat1
-rw-r--r--web/yacco2/grammar-testsuite/testout_fsc.cpp40
-rw-r--r--web/yacco2/grammar-testsuite/testout_holding_file.cmd1
-rw-r--r--web/yacco2/grammar-testsuite/testout_includes.w50
-rw-r--r--web/yacco2/grammar-testsuite/testout_prog.w214
-rw-r--r--web/yacco2/grammar-testsuite/testout_terminals.T17
-rw-r--r--web/yacco2/grammar-testsuite/testout_terminals.cpp10
-rw-r--r--web/yacco2/grammar-testsuite/testout_terminals.h17
-rw-r--r--web/yacco2/grammar-testsuite/testout_types.w34
-rw-r--r--web/yacco2/grammar-testsuite/yacco2_T_enumeration.h592
-rw-r--r--web/yacco2/library/CAbs_lr1_sym.w493
-rw-r--r--web/yacco2/library/Makefile_Edit_cweb30
-rw-r--r--web/yacco2/library/bugs.w509
-rw-r--r--web/yacco2/library/constants.w52
-rw-r--r--web/yacco2/library/constraints.w258
-rw-r--r--web/yacco2/library/enum.w37
-rw-r--r--web/yacco2/library/errhdling.w263
-rw-r--r--web/yacco2/library/fsm.w233
-rw-r--r--web/yacco2/library/fsm_tbls.w536
-rw-r--r--web/yacco2/library/gbl_defs.w58
-rw-r--r--web/yacco2/library/grammars/yacco2_T_enumeration.h294
-rw-r--r--web/yacco2/library/grammars/yacco2_characters.T2848
-rw-r--r--web/yacco2/library/grammars/yacco2_characters.cpp781
-rw-r--r--web/yacco2/library/grammars/yacco2_characters.h1043
-rw-r--r--web/yacco2/library/grammars/yacco2_k_symbols.T296
-rw-r--r--web/yacco2/library/grammars/yacco2_k_symbols.cpp58
-rw-r--r--web/yacco2/library/grammars/yacco2_k_symbols.h58
-rw-r--r--web/yacco2/library/intro.w482
-rw-r--r--web/yacco2/library/lib/Debug/info.txt14
-rw-r--r--web/yacco2/library/lib/Release/libyacco2.abin0 -> 819232 bytes
-rw-r--r--web/yacco2/library/macros.w1636
-rw-r--r--web/yacco2/library/makefile_APPLE85
-rw-r--r--web/yacco2/library/makefile_GNU70
-rw-r--r--web/yacco2/library/makefile_SOLARIS100
-rw-r--r--web/yacco2/library/notes.w1078
-rw-r--r--web/yacco2/library/parse_env.w312
-rw-r--r--web/yacco2/library/parser.w3525
-rw-r--r--web/yacco2/library/pms.w38
-rw-r--r--web/yacco2/library/rc.w133
-rw-r--r--web/yacco2/library/runtime_env.w262
-rw-r--r--web/yacco2/library/sampleoutput.w23
-rw-r--r--web/yacco2/library/set.w123
-rw-r--r--web/yacco2/library/std_includes.h27
-rw-r--r--web/yacco2/library/structures.w76
-rw-r--r--web/yacco2/library/tblkup.w36
-rw-r--r--web/yacco2/library/testMakefile28
-rw-r--r--web/yacco2/library/testsuites.w15
-rw-r--r--web/yacco2/library/thread.w988
-rw-r--r--web/yacco2/library/tok_can.w1167
-rw-r--r--web/yacco2/library/tree.w2071
-rw-r--r--web/yacco2/library/war_begin_code.h86
-rw-r--r--web/yacco2/library/war_end_code.h62
-rw-r--r--web/yacco2/library/wlibrary.w36
-rw-r--r--web/yacco2/library/wpp_core.h434
-rw-r--r--web/yacco2/library/wproc_pp_core.h298
-rw-r--r--web/yacco2/library/wrc.cpp225
-rw-r--r--web/yacco2/library/wset.cpp38
-rw-r--r--web/yacco2/library/wthread.cpp1728
-rw-r--r--web/yacco2/library/wthread.w401
-rw-r--r--web/yacco2/library/wtok_can.cpp880
-rw-r--r--web/yacco2/library/wtree.cpp2602
-rw-r--r--web/yacco2/library/yacco2.cpp8056
-rw-r--r--web/yacco2/library/yacco2.h1721
-rw-r--r--web/yacco2/library/yacco2_compile_symbols.h39
-rw-r--r--web/yacco2/library/yacco2_macros.h24
-rw-r--r--web/yacco2/library/yacco2_typedefs.h19
-rw-r--r--web/yacco2/license.w16
-rw-r--r--web/yacco2/o2linker/Makefile86
-rw-r--r--web/yacco2/o2linker/Makefile_Edit_cweb36
-rw-r--r--web/yacco2/o2linker/bugs.w173
-rw-r--r--web/yacco2/o2linker/common_externs.cpp379
-rw-r--r--web/yacco2/o2linker/common_externs.h28
-rw-r--r--web/yacco2/o2linker/globals.h26
-rw-r--r--web/yacco2/o2linker/includes.w42
-rw-r--r--web/yacco2/o2linker/intro.w394
-rw-r--r--web/yacco2/o2linker/makefile_APPLE110
-rw-r--r--web/yacco2/o2linker/makefile_GNU82
-rw-r--r--web/yacco2/o2linker/makefile_SOLARIS141
-rw-r--r--web/yacco2/o2linker/o2linker.cpp1132
-rw-r--r--web/yacco2/o2linker/o2linker.h60
-rw-r--r--web/yacco2/o2linker/o2linker.w20
-rw-r--r--web/yacco2/o2linker/o2linker_defs.cpp99
-rw-r--r--web/yacco2/o2linker/o2linker_defs.w92
-rw-r--r--web/yacco2/o2linker/o2linker_doc.w3195
-rw-r--r--web/yacco2/o2linker/o2linker_externs.cpp54
-rw-r--r--web/yacco2/o2linker/o2linker_externs.h32
-rw-r--r--web/yacco2/o2linker/o2linker_externs.w147
-rw-r--r--web/yacco2/o2linker/o2linker_types.h142
-rw-r--r--web/yacco2/o2linker/o2linker_types.w133
-rw-r--r--web/yacco2/o2linker/pms.w38
-rw-r--r--web/yacco2/o2linker/prog.w1134
-rw-r--r--web/yacco2/o2linker/sampleoutput.w23
-rw-r--r--web/yacco2/o2linker/testsuites.w15
-rw-r--r--web/yacco2/o2testdriver/common_externs.cpp380
-rw-r--r--web/yacco2/o2testdriver/common_externs.h28
-rw-r--r--web/yacco2/o2testdriver/globals.h26
-rw-r--r--web/yacco2/o2testdriver/makefile_APPLE93
-rw-r--r--web/yacco2/o2testdriver/o2.h46
-rw-r--r--web/yacco2/o2testdriver/o2_defs.cpp1664
-rw-r--r--web/yacco2/o2testdriver/o2_externs.cpp7277
-rw-r--r--web/yacco2/o2testdriver/o2_externs.h96
-rw-r--r--web/yacco2/o2testdriver/o2_types.h536
-rw-r--r--web/yacco2/o2testdriver/testdriver.cpp106
-rw-r--r--web/yacco2/o2testdriver/testdriver.w136
-rw-r--r--web/yacco2/qa/1.dat7
-rw-r--r--web/yacco2/qa/LR1_sp4.cpp75
-rw-r--r--web/yacco2/qa/LR1_sp4.fsc21
-rw-r--r--web/yacco2/qa/LR1_sp4.h76
-rw-r--r--web/yacco2/qa/LR1_sp4sym.cpp125
-rw-r--r--web/yacco2/qa/LR1_sp4tbl.cpp267
-rw-r--r--web/yacco2/qa/LR1_sp5.cpp93
-rw-r--r--web/yacco2/qa/LR1_sp5.fsc21
-rw-r--r--web/yacco2/qa/LR1_sp5.h96
-rw-r--r--web/yacco2/qa/LR1_sp5sym.cpp209
-rw-r--r--web/yacco2/qa/LR1_sp5tbl.cpp391
-rw-r--r--web/yacco2/qa/TS.fsc22
-rw-r--r--web/yacco2/qa/TS1.fsc21
-rw-r--r--web/yacco2/qa/TS_0.fsc22
-rw-r--r--web/yacco2/qa/TS_1.fsc22
-rw-r--r--web/yacco2/qa/TS_la1.cpp60
-rw-r--r--web/yacco2/qa/TS_la1.fsc21
-rw-r--r--web/yacco2/qa/TS_la1.h64
-rw-r--r--web/yacco2/qa/TS_la1.lex36
-rw-r--r--web/yacco2/qa/TS_la1.pdfbin0 -> 130107 bytes
-rw-r--r--web/yacco2/qa/TS_la1_idx.pdfbin0 -> 132725 bytes
-rw-r--r--web/yacco2/qa/TS_la1sym.cpp104
-rw-r--r--web/yacco2/qa/TS_la1tbl.cpp114
-rw-r--r--web/yacco2/qa/TS_la2.lex34
-rw-r--r--web/yacco2/qa/TS_la2a.lex35
-rw-r--r--web/yacco2/qa/TS_la3.lex35
-rw-r--r--web/yacco2/qa/TS_la4.cpp60
-rw-r--r--web/yacco2/qa/TS_la4.fsc21
-rw-r--r--web/yacco2/qa/TS_la4.h64
-rw-r--r--web/yacco2/qa/TS_la4.lex34
-rw-r--r--web/yacco2/qa/TS_la4.pdfbin0 -> 127231 bytes
-rw-r--r--web/yacco2/qa/TS_la4_idx.pdfbin0 -> 132881 bytes
-rw-r--r--web/yacco2/qa/TS_la4sym.cpp104
-rw-r--r--web/yacco2/qa/TS_la4tbl.cpp114
-rw-r--r--web/yacco2/qa/TS_la5.lex38
-rw-r--r--web/yacco2/qa/TS_la6.cpp165
-rw-r--r--web/yacco2/qa/TS_la6.fsc21
-rw-r--r--web/yacco2/qa/TS_la6.h175
-rw-r--r--web/yacco2/qa/TS_la6.lex69
-rw-r--r--web/yacco2/qa/TS_la6.pdfbin0 -> 153960 bytes
-rw-r--r--web/yacco2/qa/TS_la6_idx.pdfbin0 -> 179932 bytes
-rw-r--r--web/yacco2/qa/TS_la6sym.cpp1070
-rw-r--r--web/yacco2/qa/TS_la6tbl.cpp735
-rw-r--r--web/yacco2/qa/TS_la7.cpp165
-rw-r--r--web/yacco2/qa/TS_la7.fsc21
-rw-r--r--web/yacco2/qa/TS_la7.h175
-rw-r--r--web/yacco2/qa/TS_la7.lex65
-rw-r--r--web/yacco2/qa/TS_la7.pdfbin0 -> 153224 bytes
-rw-r--r--web/yacco2/qa/TS_la7_idx.pdfbin0 -> 177172 bytes
-rw-r--r--web/yacco2/qa/TS_la7sym.cpp1070
-rw-r--r--web/yacco2/qa/TS_la7tbl.cpp677
-rw-r--r--web/yacco2/qa/TS_la8.lex66
-rw-r--r--web/yacco2/qa/TS_la9.cpp60
-rw-r--r--web/yacco2/qa/TS_la9.fsc21
-rw-r--r--web/yacco2/qa/TS_la9.h64
-rw-r--r--web/yacco2/qa/TS_la9.lex37
-rw-r--r--web/yacco2/qa/TS_la9.pdfbin0 -> 127692 bytes
-rw-r--r--web/yacco2/qa/TS_la9_idx.pdfbin0 -> 133345 bytes
-rw-r--r--web/yacco2/qa/TS_la9sym.cpp104
-rw-r--r--web/yacco2/qa/TS_la9tbl.cpp116
-rw-r--r--web/yacco2/qa/TS_laa.cpp62
-rw-r--r--web/yacco2/qa/TS_laa.fsc21
-rw-r--r--web/yacco2/qa/TS_laa.h72
-rw-r--r--web/yacco2/qa/TS_laa.lex37
-rw-r--r--web/yacco2/qa/TS_laasym.cpp108
-rw-r--r--web/yacco2/qa/TS_laatbl.cpp118
-rw-r--r--web/yacco2/qa/TS_lab.cpp60
-rw-r--r--web/yacco2/qa/TS_lab.fsc21
-rw-r--r--web/yacco2/qa/TS_lab.h64
-rw-r--r--web/yacco2/qa/TS_lab.lex39
-rw-r--r--web/yacco2/qa/TS_lab.pdfbin0 -> 127393 bytes
-rw-r--r--web/yacco2/qa/TS_lab_idx.pdfbin0 -> 133291 bytes
-rw-r--r--web/yacco2/qa/TS_labsym.cpp104
-rw-r--r--web/yacco2/qa/TS_labtbl.cpp118
-rw-r--r--web/yacco2/qa/TS_path1.lex38
-rw-r--r--web/yacco2/qa/TS_path1a.cpp59
-rw-r--r--web/yacco2/qa/TS_path1a.fsc20
-rw-r--r--web/yacco2/qa/TS_path1a.h58
-rw-r--r--web/yacco2/qa/TS_path1a.lex30
-rw-r--r--web/yacco2/qa/TS_path1asym.cpp69
-rw-r--r--web/yacco2/qa/TS_path1atbl.cpp96
-rw-r--r--web/yacco2/qa/TS_path2.lex33
-rw-r--r--web/yacco2/qa/TS_path3.lex32
-rw-r--r--web/yacco2/qa/TS_path4.cpp59
-rw-r--r--web/yacco2/qa/TS_path4.fsc20
-rw-r--r--web/yacco2/qa/TS_path4.h58
-rw-r--r--web/yacco2/qa/TS_path4.lex31
-rw-r--r--web/yacco2/qa/TS_path4sym.cpp69
-rw-r--r--web/yacco2/qa/TS_path4tbl.cpp91
-rw-r--r--web/yacco2/qa/TS_path5.lex33
-rw-r--r--web/yacco2/qa/TS_path6.lex32
-rw-r--r--web/yacco2/qa/TS_path7.lex41
-rw-r--r--web/yacco2/qa/TS_pathsp2.lex82
-rw-r--r--web/yacco2/qa/a.dat8
-rw-r--r--web/yacco2/qa/angled_string.dat15
-rw-r--r--web/yacco2/qa/b.dat1
-rw-r--r--web/yacco2/qa/c_comment.dat10
-rw-r--r--web/yacco2/qa/c_literal.dat14
-rw-r--r--web/yacco2/qa/c_literal1.dat6
-rw-r--r--web/yacco2/qa/c_string.dat14
-rw-r--r--web/yacco2/qa/c_string1.dat6
-rw-r--r--web/yacco2/qa/cmd_line.dat5
-rw-r--r--web/yacco2/qa/cmd_line1.dat5
-rw-r--r--web/yacco2/qa/cmd_line2.dat6
-rw-r--r--web/yacco2/qa/cmd_line3.dat7
-rw-r--r--web/yacco2/qa/cmd_line4.dat5
-rw-r--r--web/yacco2/qa/comment.dat16
-rw-r--r--web/yacco2/qa/comment1.dat6
-rw-r--r--web/yacco2/qa/costofthrding.txt119999
-rw-r--r--web/yacco2/qa/dbl_colon.dat8
-rw-r--r--web/yacco2/qa/eol.dat56
-rw-r--r--web/yacco2/qa/err_sym.dat51
-rw-r--r--web/yacco2/qa/err_sym1.dat12
-rw-r--r--web/yacco2/qa/err_sym10.dat24
-rw-r--r--web/yacco2/qa/err_sym11.dat24
-rw-r--r--web/yacco2/qa/err_sym2.dat11
-rw-r--r--web/yacco2/qa/err_sym3.dat11
-rw-r--r--web/yacco2/qa/err_sym4.dat11
-rw-r--r--web/yacco2/qa/err_sym5.dat11
-rw-r--r--web/yacco2/qa/err_sym6.dat44
-rw-r--r--web/yacco2/qa/err_sym7.dat23
-rw-r--r--web/yacco2/qa/err_sym8.dat23
-rw-r--r--web/yacco2/qa/err_sym9.dat23
-rw-r--r--web/yacco2/qa/esc_seq.dat12
-rw-r--r--web/yacco2/qa/file_include1.dat6
-rw-r--r--web/yacco2/qa/file_include2.dat6
-rw-r--r--web/yacco2/qa/fsm_class_phrase.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase1.dat43
-rw-r--r--web/yacco2/qa/fsm_class_phrase10.dat11
-rw-r--r--web/yacco2/qa/fsm_class_phrase11.dat39
-rw-r--r--web/yacco2/qa/fsm_class_phrase12.dat39
-rw-r--r--web/yacco2/qa/fsm_class_phrase13.dat10
-rw-r--r--web/yacco2/qa/fsm_class_phrase14.dat10
-rw-r--r--web/yacco2/qa/fsm_class_phrase15.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase2.dat39
-rw-r--r--web/yacco2/qa/fsm_class_phrase3.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase4.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase5.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase6.dat13
-rw-r--r--web/yacco2/qa/fsm_class_phrase7.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase8.dat12
-rw-r--r--web/yacco2/qa/fsm_class_phrase9.dat12
-rw-r--r--web/yacco2/qa/fsm_op.dat10
-rw-r--r--web/yacco2/qa/fsm_op1.dat10
-rw-r--r--web/yacco2/qa/fsm_op10.dat10
-rw-r--r--web/yacco2/qa/fsm_op2.dat10
-rw-r--r--web/yacco2/qa/fsm_op3.dat10
-rw-r--r--web/yacco2/qa/fsm_op4.dat10
-rw-r--r--web/yacco2/qa/fsm_op5.dat10
-rw-r--r--web/yacco2/qa/fsm_op6.dat10
-rw-r--r--web/yacco2/qa/fsm_op7.dat10
-rw-r--r--web/yacco2/qa/fsm_op8.dat10
-rw-r--r--web/yacco2/qa/fsm_op9.dat10
-rw-r--r--web/yacco2/qa/identifier.dat49
-rw-r--r--web/yacco2/qa/identifier1.dat4
-rw-r--r--web/yacco2/qa/int_no.dat10
-rw-r--r--web/yacco2/qa/keyword.dat46
-rw-r--r--web/yacco2/qa/keyword1.dat7
-rw-r--r--web/yacco2/qa/knu1.cpp76
-rw-r--r--web/yacco2/qa/knu1.fsc22
-rw-r--r--web/yacco2/qa/knu1.h77
-rw-r--r--web/yacco2/qa/knu1.lex44
-rw-r--r--web/yacco2/qa/knu1.pdfbin0 -> 134520 bytes
-rw-r--r--web/yacco2/qa/knu1_idx.pdfbin0 -> 136958 bytes
-rw-r--r--web/yacco2/qa/knu1_sick.cpp76
-rw-r--r--web/yacco2/qa/knu1_sick.h77
-rw-r--r--web/yacco2/qa/knu1_sick.lex55
-rw-r--r--web/yacco2/qa/knu1_sicksym.cpp139
-rw-r--r--web/yacco2/qa/knu1_sicktbl.cpp35
-rw-r--r--web/yacco2/qa/knu1sym.cpp139
-rw-r--r--web/yacco2/qa/knu1tbl.cpp430
-rw-r--r--web/yacco2/qa/knu2.cpp59
-rw-r--r--web/yacco2/qa/knu2.fsc21
-rw-r--r--web/yacco2/qa/knu2.h58
-rw-r--r--web/yacco2/qa/knu2.lex34
-rw-r--r--web/yacco2/qa/knu2.pdfbin0 -> 126117 bytes
-rw-r--r--web/yacco2/qa/knu2_idx.pdfbin0 -> 132207 bytes
-rw-r--r--web/yacco2/qa/knu2sym.cpp69
-rw-r--r--web/yacco2/qa/knu2tbl.cpp168
-rw-r--r--web/yacco2/qa/knu3.cpp88
-rw-r--r--web/yacco2/qa/knu3.fsc20
-rw-r--r--web/yacco2/qa/knu3.h113
-rw-r--r--web/yacco2/qa/knu3.lex46
-rw-r--r--web/yacco2/qa/knu3sym.cpp142
-rw-r--r--web/yacco2/qa/knu3tbl.cpp301
-rw-r--r--web/yacco2/qa/lalr1_dp1.cpp75
-rw-r--r--web/yacco2/qa/lalr1_dp1.fsc21
-rw-r--r--web/yacco2/qa/lalr1_dp1.h76
-rw-r--r--web/yacco2/qa/lalr1_dp1.lex47
-rw-r--r--web/yacco2/qa/lalr1_dp1.pdfbin0 -> 134103 bytes
-rw-r--r--web/yacco2/qa/lalr1_dp1_idx.pdfbin0 -> 137097 bytes
-rw-r--r--web/yacco2/qa/lalr1_dp1sym.cpp125
-rw-r--r--web/yacco2/qa/lalr1_dp1tbl.cpp287
-rw-r--r--web/yacco2/qa/lalr1_dp2.cpp88
-rw-r--r--web/yacco2/qa/lalr1_dp2.fsc21
-rw-r--r--web/yacco2/qa/lalr1_dp2.h91
-rw-r--r--web/yacco2/qa/lalr1_dp2.lex51
-rw-r--r--web/yacco2/qa/lalr1_dp2.pdfbin0 -> 137597 bytes
-rw-r--r--web/yacco2/qa/lalr1_dp2_idx.pdfbin0 -> 140950 bytes
-rw-r--r--web/yacco2/qa/lalr1_dp2sym.cpp139
-rw-r--r--web/yacco2/qa/lalr1_dp2tbl.cpp279
-rw-r--r--web/yacco2/qa/lr1_br1.cpp77
-rw-r--r--web/yacco2/qa/lr1_br1.fsc21
-rw-r--r--web/yacco2/qa/lr1_br1.h78
-rw-r--r--web/yacco2/qa/lr1_br1.lex46
-rw-r--r--web/yacco2/qa/lr1_br1.pdfbin0 -> 142746 bytes
-rw-r--r--web/yacco2/qa/lr1_br1_idx.pdfbin0 -> 143532 bytes
-rw-r--r--web/yacco2/qa/lr1_br1sym.cpp153
-rw-r--r--web/yacco2/qa/lr1_br1tbl.cpp408
-rw-r--r--web/yacco2/qa/lr1_pa1.cpp99
-rw-r--r--web/yacco2/qa/lr1_pa1.fsc21
-rw-r--r--web/yacco2/qa/lr1_pa1.h103
-rw-r--r--web/yacco2/qa/lr1_pa1.lex58
-rw-r--r--web/yacco2/qa/lr1_pa1.pdfbin0 -> 149586 bytes
-rw-r--r--web/yacco2/qa/lr1_pa1_idx.pdfbin0 -> 151710 bytes
-rw-r--r--web/yacco2/qa/lr1_pa1sym.cpp209
-rw-r--r--web/yacco2/qa/lr1_pa1tbl.cpp458
-rw-r--r--web/yacco2/qa/lr1_pa2.cpp75
-rw-r--r--web/yacco2/qa/lr1_pa2.fsc21
-rw-r--r--web/yacco2/qa/lr1_pa2.h76
-rw-r--r--web/yacco2/qa/lr1_pa2.lex43
-rw-r--r--web/yacco2/qa/lr1_pa2.pdfbin0 -> 136984 bytes
-rw-r--r--web/yacco2/qa/lr1_pa2_idx.pdfbin0 -> 137712 bytes
-rw-r--r--web/yacco2/qa/lr1_pa2sym.cpp125
-rw-r--r--web/yacco2/qa/lr1_pa2tbl.cpp298
-rw-r--r--web/yacco2/qa/lr1_sp2.cpp133
-rw-r--r--web/yacco2/qa/lr1_sp2.fsc23
-rw-r--r--web/yacco2/qa/lr1_sp2.h140
-rw-r--r--web/yacco2/qa/lr1_sp2.lex78
-rw-r--r--web/yacco2/qa/lr1_sp2.pdfbin0 -> 163852 bytes
-rw-r--r--web/yacco2/qa/lr1_sp2_idx.pdfbin0 -> 157473 bytes
-rw-r--r--web/yacco2/qa/lr1_sp2sym.cpp433
-rw-r--r--web/yacco2/qa/lr1_sp2tbl.cpp1357
-rw-r--r--web/yacco2/qa/lr1_sp3.cpp75
-rw-r--r--web/yacco2/qa/lr1_sp3.fsc20
-rw-r--r--web/yacco2/qa/lr1_sp3.h76
-rw-r--r--web/yacco2/qa/lr1_sp3.lex38
-rw-r--r--web/yacco2/qa/lr1_sp3.pdfbin0 -> 139781 bytes
-rw-r--r--web/yacco2/qa/lr1_sp3_idx.pdfbin0 -> 143923 bytes
-rw-r--r--web/yacco2/qa/lr1_sp3sym.cpp125
-rw-r--r--web/yacco2/qa/lr1_sp3tbl.cpp320
-rw-r--r--web/yacco2/qa/lr1_sp4.lex41
-rw-r--r--web/yacco2/qa/lr1_sp4.pdfbin0 -> 140511 bytes
-rw-r--r--web/yacco2/qa/lr1_sp4_idx.pdfbin0 -> 142756 bytes
-rw-r--r--web/yacco2/qa/lr1_sp5.lex53
-rw-r--r--web/yacco2/qa/lr1_sp5.pdfbin0 -> 147597 bytes
-rw-r--r--web/yacco2/qa/lr1_sp5_idx.pdfbin0 -> 148007 bytes
-rw-r--r--web/yacco2/qa/lr1_sp6.cpp122
-rw-r--r--web/yacco2/qa/lr1_sp6.fsc20
-rw-r--r--web/yacco2/qa/lr1_sp6.h129
-rw-r--r--web/yacco2/qa/lr1_sp6.lex72
-rw-r--r--web/yacco2/qa/lr1_sp6sym.cpp279
-rw-r--r--web/yacco2/qa/lr1_sp6tbl.cpp505
-rw-r--r--web/yacco2/qa/lr1_tst.cpp184
-rw-r--r--web/yacco2/qa/lr1_tst.fsc23
-rw-r--r--web/yacco2/qa/lr1_tst.h173
-rw-r--r--web/yacco2/qa/lr1_tst.lex142
-rw-r--r--web/yacco2/qa/lr1_tst.pdfbin0 -> 169681 bytes
-rw-r--r--web/yacco2/qa/lr1_tst_idx.pdfbin0 -> 154236 bytes
-rw-r--r--web/yacco2/qa/lr1_tstsym.cpp396
-rw-r--r--web/yacco2/qa/lr1_tsttbl.cpp821
-rw-r--r--web/yacco2/qa/not_lr1_1.cpp59
-rw-r--r--web/yacco2/qa/not_lr1_1.fsc20
-rw-r--r--web/yacco2/qa/not_lr1_1.h58
-rw-r--r--web/yacco2/qa/not_lr1_1.lex25
-rw-r--r--web/yacco2/qa/not_lr1_1sym.cpp69
-rw-r--r--web/yacco2/qa/not_lr1_1tbl.cpp86
-rw-r--r--web/yacco2/qa/not_lr1_2.cpp73
-rw-r--r--web/yacco2/qa/not_lr1_2.fsc20
-rw-r--r--web/yacco2/qa/not_lr1_2.h74
-rw-r--r--web/yacco2/qa/not_lr1_2.lex31
-rw-r--r--web/yacco2/qa/not_lr1_2sym.cpp97
-rw-r--r--web/yacco2/qa/not_lr1_2tbl.cpp133
-rw-r--r--web/yacco2/qa/o2_sdc.h100
-rw-r--r--web/yacco2/qa/o2_sdcsym.cpp203
-rw-r--r--web/yacco2/qa/o2_sdctbl.cpp1514
-rwxr-xr-xweb/yacco2/qa/o2_testsuite.sh226
-rwxr-xr-xweb/yacco2/qa/o2_testsuite_lrness.sh104
-rwxr-xr-xweb/yacco2/qa/o2linker_testsuite2.sh117
-rwxr-xr-xweb/yacco2/qa/o2testdriver_tests.sh136
-rw-r--r--web/yacco2/qa/parallel_parser1.dat65
-rw-r--r--web/yacco2/qa/parallel_parser2.dat23
-rw-r--r--web/yacco2/qa/pathological.lex77
-rwxr-xr-xweb/yacco2/qa/qa_alltests.sh117
-rwxr-xr-xweb/yacco2/qa/qa_alltests1.sh115
-rw-r--r--web/yacco2/qa/qa_echo.sedt2
-rw-r--r--web/yacco2/qa/rule1.dat45
-rw-r--r--web/yacco2/qa/rule2.dat42
-rw-r--r--web/yacco2/qa/rule3.dat29
-rw-r--r--web/yacco2/qa/rule4.dat39
-rw-r--r--web/yacco2/qa/rule5.dat59
-rw-r--r--web/yacco2/qa/rule6.dat33
-rw-r--r--web/yacco2/qa/rule7.dat95
-rw-r--r--web/yacco2/qa/rule8.dat346
-rw-r--r--web/yacco2/qa/rule9.dat44
-rw-r--r--web/yacco2/qa/rule_test2.dat44
-rw-r--r--web/yacco2/qa/symtbl_test.txt30
-rw-r--r--web/yacco2/qa/t_enum.dat12
-rw-r--r--web/yacco2/qa/t_enum1.dat12
-rw-r--r--web/yacco2/qa/t_enum10.dat12
-rw-r--r--web/yacco2/qa/t_enum11.dat12
-rw-r--r--web/yacco2/qa/t_enum2.dat12
-rw-r--r--web/yacco2/qa/t_enum3.dat12
-rw-r--r--web/yacco2/qa/t_enum4.dat12
-rw-r--r--web/yacco2/qa/t_enum5.dat12
-rw-r--r--web/yacco2/qa/t_enum6.dat12
-rw-r--r--web/yacco2/qa/t_enum7.dat12
-rw-r--r--web/yacco2/qa/t_enum8.dat12
-rw-r--r--web/yacco2/qa/t_enum9.dat12
-rw-r--r--web/yacco2/qa/term_test1.dat59
-rw-r--r--web/yacco2/qa/term_test2.dat15
-rw-r--r--web/yacco2/qa/term_test3.dat59
-rw-r--r--web/yacco2/qa/term_test4.dat78
-rw-r--r--web/yacco2/qa/term_test5.dat15
-rw-r--r--web/yacco2/qa/term_test6.dat15
-rw-r--r--web/yacco2/qa/term_test7.dat15
-rw-r--r--web/yacco2/qa/term_test8.dat15
-rw-r--r--web/yacco2/qa/term_test9.dat15
-rw-r--r--web/yacco2/qa/test_called_thd_fs.cpp98
-rw-r--r--web/yacco2/qa/test_called_thd_fs.fsc28
-rw-r--r--web/yacco2/qa/test_called_thd_fs.h107
-rw-r--r--web/yacco2/qa/test_called_thd_fs.lex75
-rw-r--r--web/yacco2/qa/test_called_thd_fs.pdfbin0 -> 149498 bytes
-rw-r--r--web/yacco2/qa/test_called_thd_fs_idx.pdfbin0 -> 148609 bytes
-rw-r--r--web/yacco2/qa/test_called_thd_fssym.cpp216
-rw-r--r--web/yacco2/qa/test_called_thd_fstbl.cpp319
-rw-r--r--web/yacco2/qa/test_use_cnt.cpp73
-rw-r--r--web/yacco2/qa/test_use_cnt.fsc20
-rw-r--r--web/yacco2/qa/test_use_cnt.h74
-rw-r--r--web/yacco2/qa/test_use_cnt.lex33
-rw-r--r--web/yacco2/qa/test_use_cnt.pdfbin0 -> 131033 bytes
-rwxr-xr-xweb/yacco2/qa/test_use_cnt.sh81
-rw-r--r--web/yacco2/qa/test_use_cnt_idx.pdfbin0 -> 137937 bytes
-rw-r--r--web/yacco2/qa/test_use_cntsym.cpp97
-rw-r--r--web/yacco2/qa/test_use_cnttbl.cpp350
-rw-r--r--web/yacco2/qa/unquoted_string.dat9
-rw-r--r--web/yacco2/qa/xc_str.dat11
1343 files changed, 423394 insertions, 0 deletions
diff --git a/web/yacco2/README b/web/yacco2/README
new file mode 100644
index 0000000000..f18fd45b82
--- /dev/null
+++ b/web/yacco2/README
@@ -0,0 +1,47 @@
+
+Project: Yacco2 --- Multi-threaded lr(1) Compiler/compiler system
+Distributed under license: Mozilla Public License, v. 2.0.
+Distribution Date: 16 Feb. 2015
+Distribution version: 1.1
+Comments: Currently for the Unix flavoured Platforms
+Author: Dave Bone
+Support email: cc.yacco2@yahoo.ca
+
+Contributors list:
+ Dave Bone
+
+
+The distribution contains the programs: compiler/compiler O2 and its linker O2linker, along
+with its runtime library yacco2. There are build scripts for platforms: Apple, GNU, Solaris.
+Various documents, grammars, reference manual, quality assurance suites, and generated
+c++ source code are included.
+These items are elaborated upon in the READMEv1.0.pdf document.
+
+1) License.
+Yacco2's distributed source code is subject to the terms of the Mozilla Public License, v. 2.0.
+If a copy of the MPL was not distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+
+As best as I could, the ``Literate programming'' w type files contain a reference to this license along with
+ their generated documents.
+The c++ source files generated from the w files
+
+ ``do not and will not have any comments referencing this license but are also subject to its terms''.
+
+The ctangle program generating the c++ code does not emit programmer c type comments.
+It emits ``#line'' macro references to the w file and only c comments to its gened document's section number.
+Any discovered license omissions required to be referenced within Yacco2's Project files
+are still covered by this license and will be corrected in future distributions.
+
+2) Yacco2 install Instructions.
+Unzip the yacco2.zip file.
+Please read READMEv1.1.pdf document as this is your oracle to installing Yacco2.
+It also has other pertinent comments on documentation, open source tools used, and ``how to'' directives.
+
+There are binaries prebuilt for the Apple Maverick platform: o2, o2linker, and API yacco2 library.
+
+You will find instructions/Bash scripts for other Unix platforms: GNU and Solaris.
+
+3) V1.1 Corrections: Minor corrections
+a) Regenerating Yacco2 c++ code emitted improper license comments that produced compile errors
+b) Renamed diagrams+etc folder to diagrams
+
diff --git a/web/yacco2/READMEv1.1.pdf b/web/yacco2/READMEv1.1.pdf
new file mode 100644
index 0000000000..4430fdfe7b
--- /dev/null
+++ b/web/yacco2/READMEv1.1.pdf
Binary files differ
diff --git a/web/yacco2/READMEv1.1.w b/web/yacco2/READMEv1.1.w
new file mode 100644
index 0000000000..5a3691697f
--- /dev/null
+++ b/web/yacco2/READMEv1.1.w
@@ -0,0 +1,449 @@
+@q file: READMEv1.1.w@>
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@** Comments on \Yacco2's |READMEv1.1| file --- Date: \today.\fbreak
+\ptindent{Project: \Yacco2 --- Multi-threaded lr(1) Compiler/compiler system}
+\ptindent{Distributed under license: Mozilla Public License, v. 2.0.}
+\ptindent{Distribution Date: \today}
+\ptindent{Distribution version: 1.1}
+\ptindent{Comments: Currently for the Unix flavoured Platforms}
+\ptindent{Author: Dave Bone}
+\ptindent{Support email: cc.yacco2{\char 64}yahoo.ca}
+\ptindent{Contributors list:}
+\INDENT{.75in}{Dave Bone}
+\fbreak
+\fbreak
+The distribution contains the programs: compiler/compiler {\it{\O2}} and its linker {\it{\O2linker}}, along
+with its runtime library {\it{yacco2}}. There are build scripts for platforms: Apple, GNU, Solaris.
+Various documents, grammars, reference manual, quality assurance suites, and generated c++ source code are included.
+These items are elaborated upon further within this document.
+
+@*2 License.\fbreak
+\Yacco2's distributed source code is subject
+to the terms of the Mozilla Public License, v. 2.0.
+If a copy of the MPL was not distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+\fbreak
+\fbreak
+As best as I could, the ``Literate programming'' w type files
+contain a reference to this license along with their generated documents.
+The c++ source files generated from the w files {\bf {do not and will not have any comments
+referencing this license but are also subject to its terms}}.
+The {\it {ctangle}} program generating the c++ code does not emit programmer c type comments.
+It emits ``\#line'' macro references to the w file and only c comments to its gened document's section number.
+Any discovered license omissions required to be referenced within \Yacco2's Project files
+are still covered by this license and
+will be corrected in future distributions.
+\fbreak
+\fbreak
+@*2 Version |v1.1| --- minor fixes.\fbreak
+\ptindent{\derives{} Regenerating Yacco2 c++ code emitted improper license comments that produced compile errors}
+\ptindent{\derives{} Renamed diagrams+etc folder to diagrams}
+
+
+@*2 README literate programming.\fbreak
+This ``READMEv1.1.w'' file is run thru the {\it cweave}
+ progam to generate a tex file: cweave ``READMEv1.1.w''.
+The {\bf{v1.1}} suffix in its name is the distribution's version.
+Then the program {\it pdftex} is run to create its pdf document: pdftex ``READMEv1.1.tex''.
+Literate programming at the install documentation level that u are now reading.
+@*2 Comments on 1st attempt at ``Open Source''.\fbreak
+Project \Yacco2{} is my first attempt at ``Open Source'' software.
+There are propably faux pas made by my lack of experience but I'm willing to learn from the community.
+My ears, eyes, and grey cells are open to your suggested refinements.
+Harnessed non-determinism thru threading opens up parallel activities. The thought experiment stepping out
+with arbitration deciding multiple outcomes.
+Interesting when a thread becomes a computational universe having time displaying its trails of activities...
+
+
+@*1 Some installation concerns.\fbreak
+Here is a list of questions/answers to help u install and get things going.
+
+@*2 How is \Yacco2 installed?.\fbreak
+Grab a copy of the system and place it on your computer.
+It comes as a zipped file named {\bf{yacco2.zip}}.
+Depending on your run platform, either double click the zipped file
+or run from the command-line-interface using an unzip program like gunzip.
+Once unzipping its contents, the {\bf{yacco2}} folder
+contains subdirectories of text
+files aka grammars and ``literate programs'', the c++ source code,
+binary static libraries of \Yacco2, and the 2 executeable programs
+{\it o2} and {\it o2linker}
+which are the compiler/compiler and its linker.
+
+@*2 Where is \Yacco2 installed?.\fbreak
+The {\bf{yacco2}} folder should be copied to the {\bf{/usr/local/}} folder.\fbreak
+\fbreak
+This distribution contains the executeables and libraries
+{\bf prebuilt for an Apple laptop running Maverick}.
+Other platforms will need to be built using the instructions below.
+This comment also holds for older Apple platforms like the ``Cat'' series.
+
+A ``drag and drop'' attitude it is to installing \Yacco2
+placed in {\bf{/usr/local/}}.
+It is self contained. To thrown it out just drag
+ the ``\Whereyacco2'' folder into the trash bin and delete it
+or use the Unix ``rm'' utility to delete it.
+
+For example if u unzipped \Yacco2 into your desktop folder, then
+the following {\it{Bash}} CLI move command on the Apple platform is:\fbreak
+\ptindent{1) cd \char 126/DeskTop \# example Apple desktop holding yacco2 folder}
+\ptindent{2) mv -f yacco2 /use/local/ \# move the yacco2 folder}
+Substitute your own folder name containing yacco2 for the above ``cd'' command.
+U can also use a ``drag-and-drop'' to do it.
+For the Apple platform, u can unhide the hidden folders shown by ``Finder''
+or use Finder's ``cmd-shift-G'' key combination and type in the
+``/usr/local/'' to see its contents in the Finder's screen.
+Now ``drag-and-drop'' the {\bf{yacco2}} folder into {\bf{/usr/local/}}.
+Other platforms have their version of ``drag-and-drop'' to move \Yacco2.
+
+@*2 What \Cpp{} compiler does it require to compile/install \Yacco2{} system?.\fbreak
+The Apple environment needs Xcode or a development system like GNU.
+For the other platforms, a development system with a \Cpp{} compiler
+and a run time library supporting multi-threading.
+
+This distribution already has the {\it o2} and {\it o2linker} programs installed along
+with the {\it yacco2} library
+for the latest Maverick Apple platform.
+So u can stop the balance of the installation
+for the Apple if u are running Maverick.
+For older Apple Operating systems like the ``Cat'' series, they require u to do some adjustments
+to the Apple scripts below.
+There are {\it bash} comments in these scripts on the variables to set.
+
+
+@*2 How to install \Yacco2.\fbreak
+Once you have placed \Yacco2{} system in {\bf ``/usr/local/''} on either your laptop or server, you will find
+the following Bash scripts
+where each script's suffix name indicates the platform to run the script under.\fbreak
+\ptindent{1) bld\_bash\_APPLE}
+\ptindent{2) bld\_bash\_GNU}
+\ptindent{3) bld\_bash\_SOLARIS}
+You run one of the above scripts with the {\it bash} command-line-interface(CLI).
+Each script is documented with references to other scripts of {\bf makefile\_xxx} where xxx is
+the platform to build
+the subcomponents of \Yacco2. Have a read, they don't bite.
+
+@*3 Possibly out-of-date --- GNU and Solaris scripts.\fbreak
+Possibly points 2 + 3 could be out-of-date as I'm now developing exclusively on the Apple
+MacPro / Xcode environment. These scripts should clue u into what is
+required to get them running on a more up-todate platform.
+Once upon a time they worked but time has changed the Apple script and not them!
+So use the Apple script as a guide to get the other scripts working.
+I'm sure the \Cpp{} compiler and its supporting libraries will be out-of-date.
+
+@*3 Run the installation script.\fbreak
+Here are the bash commands to install the complete system on the Apple MacPro system:\fbreak
+\ptindent{1) cd \Whereyacco2}
+\ptindent{2) . |bld_bash_APPLE|}
+The script has commented out other options that u can use for
+other things like gening the \Cweb{} files
+to building debug executeables. Ditto on the other Operating system scripts.
+\fbreak
+\fbreak
+{\bf Note}:
+\fbreak
+In the ./bin folder, there are the latest executeables for
+the Apple MacPro ``OS X 10.9.2’’/ Xcode 5.1.1: \O2{} and \O2linker
+along with the libraries: {\it yacco2} in ``\Whereyacco2/library/lib/Release'' for u
+to link your own compiler to,
+and {\it o2grammars} in ``\Whereyacco2/compiler/grammars/lib/Release''
+for the \Yacco2{} programs to build against.
+Ready baked for u to try if u are on an Applelite.
+
+
+@*3 Other OPs: GNU, SOLARIS for bld\_bash\_XXX and makefile\_XXX scripts.\fbreak
+To provide consistency, scripts per run platform were written rather than
+depend on a specific development framework like Apple's Xcode.
+If u use a development framework, these scripts will clue u to the ingredients needed to
+map \Yacco2's components to your framework.
+
+You will probably need {\bf to edit} the GNU or Solaris scripts regarding the C++
+libraries versions needed.
+The referenced {\bf makefile\_APPLE} scripts per subfolder
+like {\bf \Whereyacco2/library} in the {\bf bld\_bash\_APPLE} script
+uses the latest 64 bit LLVM compiler toolset under
+Apple's latest operating Maverick version ``10.9.2'' and {\bf Xcode} Version 5.1 (5B130a).
+The later Xcode (6.+) versions were tried but at the time of preparing this distribution
+were unstable and crashing.
+Possiblely now Xcode's latest version is stable but for now i'm staying with this earlier Xcode version.
+Each {\bf makefile\_APPLE script per subfolder are up-todate}
+and can be run individually within their subfolder.
+There are equivalent scripts to the mentioned APPLE scripts within the various folders
+with suffix GNU or SOLARIS indicating the operating system supported.
+
+Their use are the same under each operating platform.
+For example to regenerate only the \Yacco2's library, run the following {\it bash} commands:\fbreak
+\ptindent{1) cd \Whereyacco2/library}
+\ptindent{2) make Genw -f makefile\_APPLE \# gen c++ code from w files}
+\ptindent{3) make Rlse -f makefile\_APPLE \# compile c++ code and create library}
+All other port scripts {\bf should be eye-balled} against each {\it makefile\_APPLE} script
+for any adjustments needed when
+compiling/linking re: \Cpp{} compiler and {\bf ld} libraries used: {\it pthread}, {\it \Cpp}.
+For the above example with the {\bf {\it Rlse}} parameter inputted, you will see it as a label within the bash script
+with its appropriate compile and create the library commands.
+These scripts are reasonably documented for your eyes and editing.\fbreak
+\fbreak
+{\bf Note:} the {\bf makefile\_APPLE} script can be modified to support an older {\bf Xcode}
+version. \Yacco2{} has been developed on Xcode versions from 3 and greater
+on Apple's ``Cat'' platforms.
+You'll have to adjust your script for the appropriate \Cpp{} compiler
+and \Cpp{} runtime support library.
+
+@*2 Grammar Testsuite.\fbreak
+Added to the distribution in folder {\bf \Whereyacco2/grammar-testsuite} are some grammars
+from published papers
+testing out lr(0), lr(1), and lalr ness by running its ``test-out-grammars.sh’’ {\it bash} script.
+All platform scripts run \O2{} against the testsuite to
+confirm the distribution validity.
+It also runs self against self with one of its own grammars: ``eol.lex''.
+
+@*3 A translator for your learnings from the Grammar Testsuite.\fbreak
+To confirm that the distribution works, one of the published grammars: ``pager\_1.lex'' has a translator {\it {testout}}
+that is compiled, linked against the built \Yacco2{} library, and run against some input with
+some trace parameters turned on: see {\bf {1lrtracings.log}}.
+Have a peek in its folder to see how easy it is to build a
+compiler/translator: script makefile\_testout\_APPLE..
+Of course my leanings are towards ``literate programming'' use and hence the slant on its residues
+of generated documents.
+
+@*2 Quality Assurance.\fbreak
+In {\bf {\Whereyacco2/qa}} folder, there are a series of batch files that tests
+out the ``quality assurance'' of \Yacco2.
+Within the various tests are more grammars testing lr(1) compliance.
+For the curious or doubters have a look or try them out yourself.
+They might leave bite marks but should be a bit more convincing than my verbage.\fbreak
+\ptindent{{\bf{cd \Whereyacco2/qa}}}
+\ptindent{{\bf{ls *sh}} \# list of bash scripts to be run}
+
+@*1 Challenge to the Open Source / Computer Science Community.\fbreak
+Depending on the \Cpp{} code, {\it cweave} emits unstructured code.
+In the {\bf o2book} document there is a footnote as to why this is occuring.
+I raise the challenge to u to correct this in improvements to the ``Open Source'' evolution.
+
+Internet donations is a newer money raising model helping not-for-profit foundations
+with support staff
+but for the majority of Open Source projects, their life expectancy becomes short lived
+when others don't pick up the torch towards bug corrections etc.
+Letting the author ``just do it'' leads to a no-growth attitude for the next generation.
+Enough Dave of your squawking!
+So is the challenge taken up from possibly the computer science students as a class assignment?
+Let's hope the future tales whisper challenge accepted/taken/completed!
+
+@*1 Unix {\it{man}}'s quick overview to \Yacco2's programs and API.\fbreak
+In {\bf{\Whereyacco2/bin/man/man1}} are the Unix style references for:\fbreak
+\ptindent{{\it{o2}} compiler/compiler}
+\ptindent{{\it{o2linker}} \Yacco2's linker}
+\ptindent{{\it{yacco2}} API/library}
+Either set up a link to this folder in your startup file like {\bf{.bash\_profile}} to exercise them,
+explicitly reference their path when running {\it{man}}, or adjust your {\bf{/private/etc/man.conf}} file.\fbreak
+\fbreak
+Command-line-interface examples for \Yacco2's references.\fbreak
+The examples show variations
+ depending on how u set up the path reference:\fbreak
+\ptindent{{\it{man}} \Whereyacco2/bin/man/man1/yacco2.1 \#explicit reference to API library}
+\ptindent{{\it{man}} -M \Whereyacco2/bin/man/man1: yacco2 \# use man's path list}
+\ptindent{{\it{man}} o2linker \# o2linker and man.conf file has \Yacco2's reference's link}
+\ptindent{{\it{man}} o2 \# o2 where MANPATH has link}
+
+
+@*1 Documents to read --- U have edocs Sir!.\fbreak
+All docs are in the ``\Whereyacco2/docs'' folder in ``pdf'' format.\fbreak
+\ptindent{1) Grammars in their published format --- examples of literate programming using \Cweb}
+\ptindent{2) \O2's grammars in \Whereyacco2/compiler/grammars/*.lex in raw form.}
+\ptindent{3) \O2{} and \O2linker{} documented source programs.}
+\ptindent{4) wlibrary --- \Yacco2's documented library.}
+\ptindent{5) Some unpublished essays --- p1, p2 discussing the why of \O2's language paradigm.}
+\INDENT{1in}{Relatively relevent though early in \O2's development cycle.}
+\ptindent{6) Unpublished Tugboat-o2 essay on ``literate programming'' as applied to \O2. A must read.}
+\ptindent{7) Draft copy of reference ``o2book.pdf'' to rev u up.}
+\ptindent{8) ``testout.pdf'' and grammars ``test*.pdf, pager\_1.pdf'' comments on writing your own compiler.}
+\ptindent{9) ``testdriver.pdf'' and ``test\_components.pdf'' --- lexical quality assurance testing.}
+\ptindent{10) possiblely published book --- ``\Yacco2 and some practical uses''.}
+
+The unpublished essayes listed above should be read first as
+they describe in a light way the Why of \O2. For those that don't have time, at least speed read the
+``Tugboat-o2'' essay.
+{\it {testout}} program documentation should be read along with the ``o2book''.
+There are comments to developing your own compiler regarding the Terminal / Error Vocabulary, and
+Error tracing.
+At least there are some clues/comments/references to \Yacco2{}, and its use.
+
+``\Yacco2 and some practical uses...'' will be a ``how to'' set of observations/steps when i developed
+a retargetting Pascal translator. It deals with observations made in grammars evolution, Terminal/Error Vocabulary
+development, symbol table management controlled from grammars' logic points, to
+tree building and their walkings within semantic routines.
+The project's post evaluation gives observations, mistakes made, and potential
+warnings for your future language development.
+Hopefully to u a necessary companion with \Yacco2's reference ``o2book''.
+
+@*1 Comments: Typesetting, ``Literate programming'', and Drawing.\fbreak
+The principle software driving the typesetting
+of documents is \TeX{} which should be on your system.
+Metapost is the graphics drawing system used to sketch grammars.
+By combining the 2 components: \Cpp{} code and typesetting directives into one file, u now have
+a ``Literate program''. This is the principle used by \O2's grammars.
+\O2{} emits its own \Cpp{} code files.
+For its grammar documents, \O2{} maps the grammar into a \Cweb's template form called
+ a ``literate grammar''
+ and also emits Metapost grammar type files.
+These become the fodder for \Cweb's {\it cweave} program and Metapost's {\it mpost} digestion.
+The \TeX{} {\it pdftex} program turns their outputed files into a pdf document.
+All said, to use \O2{} does not require \TeX, \Cweb{} or Metapost systems to be installed but you are losing
+out on one of the gems in \O2's tiarra: document generation.\fbreak
+\fbreak
+{\bf Caveat}: as the \Cweb{} system is required to emit \Cpp{} code from ``Literate programs'', all
+of \Yacco2's programs and API library will be very difficult to modify/correct/enhance without this system installed.
+\fbreak
+
+Please go visit the {\bf {`www.tug.org'}} website.
+It provides ``downloads'' for various operating platforms of \TeX{}, \Cweb{}, and Metapost systems.
+Other interesting software gems are there for download.
+Accompanying these downloads are their ``How to use it'' manuals/documents.
+{\bf Please consider joining Tug} as there are a lot of ``Open Source projects'' that need your support
+to keep improving.\fbreak
+A recap on programs use:\fbreak
+\ptindent{1) {\it cweave} creates a ``.tex'' file from a ``.w'' program for document creation.}
+\ptindent{2) {\it pdftex} generates a pdf document from cweave's outputted `.tex' file.}
+\ptindent{3) {\it ctangle} generates the \Cpp{} program from the same `.w' program.}
+\ptindent{4) {\it mpost} is used to draw the grammar's productions generated from \O2.}
+\fbreak
+All \Yacco2's grammars and programs can be regenerated using these above programs.
+To generate the grammars's documents, they are run thru \O2 with the `-p' parameter
+that generates a `.w' file and accompanying mpost grammar diagrams for
+{\it mpost} and {\it cweave} digestion outputting the ``.tex'' file
+for {\it pdftex} to generate a ``pdf'' document.
+Running \O2{} without or with possible parameters ``-t'', ``-err'' generates
+the ``.cpp'' files
+to be compiled by your \Cpp{} compiler.
+\fbreak
+
+@*2 Bash/batch files to help u do the dirty work.\fbreak
+Have a look at `{\bf{o2grammars.sh}}’ bash script in `\Whereyacco2/compiler/grammars/'
+folder showing ``how to'' generate either a \Cpp{} or typeset document for each grammar.
+`{\bf{gen1grammar.sh}}’ bash script has the same capability but is applied to 1 interactively selected grammar.\fbreak
+Here's how to gen your grammars.\fbreak
+\ptindent{{\bf{cd /xxx}} \# your folder containing your grammar *.lex files}
+\ptindent{{\bf{. \Whereyacco2{}/compiler/grammars/o2grammars.sh Rlse}} \# gen c++ code}
+\ptindent{{\bf{cd /xxx}} \# your folder containing your grammar *.lex files}
+\ptindent{{\bf{. \Whereyacco2{}/compiler/grammars/o2grammars.sh Genw}} \# gen grammar docs}
+\ptindent{{\bf{mv *.pdf /xxx/docs}} \# optional: move docs from your grammars folder into your docs folder}
+
+@*1 Potential problems installing \O2.\fbreak
+This is a list of possible problems u might run across.
+As the system gets more exposure / use, this list will probably grow.
+Hopefully not too fast!
+
+@*2 Why is \Yacco2{} installed at the /usr/local level?.\fbreak
+My 1st virtual attempt to get \Yacco2{} out to the ``Open Source Community'' and my laziness
+had it installed at the root level but this has been changed.
+``/usr/local'' was chosen as this seems to be the crowd's concensus to installing foreign
+software.
+I contemplated using Apple's ``Framwork'' approach but this seems
+to be local to Apple though appropriate.
+The original include statements for \Yacco2's library and API have been adjusted.
+
+@*2 File Permissions.\fbreak
+After u installed the \Whereyacco2 folder make sure u can read / modify its contents.
+chmod utility might be needed or by running the script suffixed to the sudo utility.\fbreak
+\ptindent{{\bf{chmod +a "staff allow read" \Whereyacco2}}}
+ or \fbreak
+\ptindent{{\bf{sudo chmod +a "staff allow read" \Whereyacco2}}}
+ or \fbreak
+\ptindent{{\bf{sudo chmod 755 \Whereyacco2}}}
+
+
+
+@*2 Comments on compiling, linking, and \Cweb{} line macro referencing file's ``w'' code lines.\fbreak
+Files makefile\_* like {\bf makefile\_APPLE} or {\bf makefile\_GNU} are found in \Whereyacco2's subfolders
+ of ``compiler/grammars/, compiler/o2/,
+library/, or o2linker/'' that compile the individual \Cpp{} programs and possibly build a
+library, or create a runable program.
+These {\it bash} scripts are Unix flavoured.
+Cast your eyes on some of these files as the appropriate {\it bash} statements with comments
+ show ``how to'' roll your own within these various Operating system contexts.
+U should note the {\bf \Cpp's compiler options used}, and ditto
+on the {\bf linker's parameters}.
+They will clue u into what i needed to bootstrap \Yacco2{} onto
+different Operating system platforms.
+
+In some of the subfolders you will find a {\it bash} script ``{\bf makefile\_Edit\_CWEB}'' to comment out
+links to the CWEB code lines in the \Cpp{} generated programs.
+This is helpfull when u want to debug, set break points
+to the \Cpp{} lines of code rather than the ``.w'' line of code
+using your interactive debugger.
+Possibly the newer version of CWEB's {\bf ctangle} program has
+an option whether to emit the ``c'' line macro or not. My version does not.
+Hence the
+reason for the script to ``post process'' {\it ctangle}'s emitted C++ code.
+
+@*2 Where's libstdc$++$ or libc$++$ library?.\fbreak
+{\bf Note}: The below points also apply to the other computer scripts: SOLARIS and GNU.\fbreak
+
+
+These comments are more appropriate for older Xcode environments and other
+Unix platforms.
+One problem u might experience is where does the libstdc$++$ library reside
+for building both programs \O2{} and \O2linker{} if u are
+not using a development framework.
+Or possibly u might want to use a different \Cpp{} compiler/set of libraries then the one
+your system defaults to.
+For an Apple computer, {\it bash} scripts ``{\bf \Whereyacco2/compiler/o2/makefile\_APPLE}''
+and ``{\bf \Whereyacco2/o2linker/makefile\_APPLE}''
+might need editing along with the c$++$ compiler to be used due to your older
+Xcode environment: eg. g$++$ or gcc compiler and libstdc$++$ library.
+Find out where the libstdc$++$ resides on your system.
+Running these below {\it bash} commands to look for libstdc$++$ should
+find it. For other \Cpp{} library, run the same commands below
+with the appropriate library name to be searched:\fbreak
+\ptindent{{\bf find /usr/ $\vert$ grep libstdc$++$}}
+Or more general:\fbreak
+\ptindent{{\bf find / $\vert$ grep libstdc$++$}}
+Once found using your text editor, adjust the {\bf STDCC\_dir} variable
+with the found library location, the library {\bf CC\_lib} variable,
+and compiler {\bf CC} variable
+in the above 2 script files. The scripts are commented so u should not have any touble
+editing them.
+Now rerun the {\it bash} script to rebuild \Yacco2:\fbreak
+\ptindent{{\bf . bld\_bash\_APPLE}}
+
+
+@*2 An inconvenience on getting the typesetting to work.\fbreak
+An apology due to this minor inconvenience: the ``{\bf cwebmac.tex}'' file might need to be modified
+so that the grammar's file listings can be included into their generated documents.\fbreak
+\fbreak
+{\bf{Warning:}} Try generating a grammar document to see if your system needs to be adjusted.\fbreak
+{\bf{Warning:}} The instructions are an example of what I had to do to get it working on my Apple laptop.\fbreak
+{\bf{Warning:}} I am not responsible if they do not work covered by the license terms.\fbreak
+\fbreak
+{\it{
+The below instructions are what I had to do to get it working on my Apple laptop.\fbreak
+Please make appropriate backups before trying these instructions on your computer if required.
+}}
+\fbreak
+\fbreak
+To do this, u must find where the {\bf .../eplain/eplain.tex} file is
+installed on your computer from the Tex{} installation.
+In my computer, it is in the folder ``{\bf /usr/local/texlive/2014/texmf-dist/tex/eplain/eplain.tex}''
+where the year of the distribution in this example is 2014
+which u would substitute with your own distribution year.
+Possibly non Apple platforms could be distributed differently and would require you to use
+{\bf{its folder name instead of this example}}.
+Then u must edit ``{\bf .../cweb/cwebmac.tex}'' file from
+the \Cweb{} installation with the following
+line added at the beginning of this file:\fbreak
+\ptindent{{\bf$\backslash$input /usr/local/texlive/2014/texmf-dist/tex/eplain/eplain}}
+On my computer this file is found here:\fbreak
+\ptindent{{\bf /usr/local/texlive/2014/texmf-dist/tex/plain/cweb/cwebmac.tex}}
+U can use your prefered text editor but make sure u have write permission to this read-only file.
+I used vim text editor with sudo to obtain write privileges.\fbreak
+\ptindent{{\bf sudo vim /usr/local/texlive/2014/texmf-dist/tex/plain/cweb/cwebmac.tex}}
+Here are its edited contents with my \TeX{}'s \% comments:\fbreak
+\ptindent{{\bf \%\%\% Date: 23 Oct 2014 EDT modified cwebmac.tex file to fetch eplain tex macros}}
+\ptindent{{\bf \%\%\% needed is the $\backslash$listing tex macro to generate grammar documents}}
+\ptindent{{\bf $\backslash$input /usr/local/texlive/2014/texmf-dist/tex/eplain/eplain}}
+\fbreak
+
+@*1 Happy \Yacco2{}ing.\fbreak
+Bonne chance with your language development and use of \Yacco2.
+
+@** Index.
diff --git a/web/yacco2/bin/man/man1/o2.1 b/web/yacco2/bin/man/man1/o2.1
new file mode 100644
index 0000000000..dfebb3c3c0
--- /dev/null
+++ b/web/yacco2/bin/man/man1/o2.1
@@ -0,0 +1,139 @@
+o2(1) o2(1)
+
+
+
+NNAAMMEE
+ o2 -- multi-threaded non-deterministic lr(1) compiler/compiler included
+ in the yyaaccccoo22 system.
+
+SSYYNNOOPPSSIISS
+ oo22 [ --pp ] [ --tt ] [ --eerrrr ] [ grammar file to compile ]
+
+OOPPTTIIOONNSS
+ oo22 options are each individually prefixed by one ``-'' only. If no
+ grammar file is inputted, o2 will ask for one.
+
+ --pp Create pdf documents for the inputted grammar. It requires
+ CWEB's program suite: ccwweeaavvee and mmppoosstt programs to do this.
+
+
+ --tt Generate ``User terminal class'' vocabulary's c++ code along
+ with the inputted grammar.
+
+ WWaarrnniinngg:: Option is required if the ``User terminal class'' has been
+ modified: Tes added, subtracted, or modified. Not doing so leaves the
+ emitted lr(1) tables out-of-whack! So regenerate aallll tthhee ggrraammmmaarrss so
+ that their lr(1) tables are in sync with the new Terminal vocabulary.
+ See reference to oo22ggrraammmmaarrss..bbaatt script on how to do it for your own
+ grammars.
+
+
+ --eerrrr Generate "Error terminal class" vocabulary's c++ code along with
+ the inputted grammar. WWaarrnniinngg:: Ditto as -t warning.
+
+
+DDEESSCCRRIIPPTTIIOONN
+ oo22 extends bottom-up parsing by defining 2 types of grammars: mono-
+ lithic and threaded. A ``thread call'' operator is introduced into the
+ traditional grammar definition along with an arbitration clause. These
+ 2 extensions allow multiple grammars to be run in parallel with poten-
+ tially multiple results returned to be arbitrated upon.
+
+ The yyaaccccoo22 system is written in the ``Literate programming'' genre
+ using the CCWWEEBB program suite: cweave and ctangle. ctangle emits c++
+ code while cweave emits a TeX file for the ppddfftteexx program to typeset
+ into a pdf document.
+
+ oo22 is just 1 program within the yacco2 translation system. Other items
+ of import: yyaaccccoo22 library for your own compiler to link to and oo22lliinnkkeerr
+ that is o2's companion program to link all your grammars together.
+ Grammars and Terminal vocabulary files support cweave's language direc-
+ tives and TTeeXX typesetting facilities. By using the --pp option, oo22 emits
+ files for _m_p_o_s_t (a graphic drawing program) and _c_w_e_a_v_e digestion.
+ _m_p_o_s_t draws Niklaus Wirth's ``Pascal grammar like diagrams'' that get
+ included into files processed by cweave. _c_w_e_a_v_e then generates the Tex
+ files for the _p_d_f_t_e_x program to generate the pdf documents.
+
+
+oo22 oouuttppuutteedd ffiilleess
+ c++ code and lr(1) tables for each grammar and grammar's fsc type file
+ for o2linker consumption
+
+ Pdf documents per grammar: grammar code and its lr(1) cross reference
+ tables
+
+
+OOTTHHEERR FFEEAATTUURREESS
+ -- Modular grammars allowing reuse by other compilers
+ -- Simplified ambiguity resolution
+ -- Programmable ``context sensitive'' lookahead per threaded grammar
+ -- Self documenting
+ -- Dynamic tracing / trouble shooting facilities
+ -- Out-of-the-box error messaging
+ -- Multiple input / output token container types:
+ Files
+ Trees
+ In memory string
+
+
+
+EEXXAAMMPPLLEESS
+ 1) Compiling one of o2's grammars
+ cd /usr/local/yacco2/compiler/grammars
+ /usr/local/yacco2/bin/o2 eol.lex # no options except file: emit c++ code for grammar
+ 2) Generate grammar's documents
+ cd /usr/local/yacco2/compiler/grammars
+ o2 -p eol.lex # bash PATH variable modified to resolve o2 whereabouts
+ 3) Compile grammar and ``Error class'' due to new error terminal added
+ o2 -err /usr/local/yacco2/compiler/grammars/eol.lex
+
+
+SSEEEE AALLSSOO bbyy mmaann
+ oo22lliinnkkeerr((11)),, yyaaccccoo22((11)),, CCWWEEBB((11)),, ccwweeaavvee((11)),, ccttaannggllee((11)),, mmppoosstt((11)),,
+ TTeeXX((11))
+
+ In //uussrr//llooccaall//yyaaccccoo22//ddooccss//
+ wlibrary.pdf -- yacco2's library documented ``literate program''
+ o2.pdf -- compiler/compiler documented ``literate program''
+ o2linker.pdf -- linker documented ``literate program''
+ yacco2's grammars's pdfes
+ o2linker_doc.pdf -- example of o2/o2linker's grammars cross reference produced by o2linker
+ o2book.pdf -- reference manual
+
+ In //uussrr//llooccaall//yyaaccccoo22//
+ READMEvx.y.pdf -- installation guide x: version number, y: minor adjustment number.
+ bld_bash_APPLE script to build complete yacco2 system
+
+ In //uussrr//llooccaall////yyaaccccoo22//ccoommppiilleerr//ggrraammmmaarrss,, to help u out, some bash
+ scripts that u can clone off for your own projects:
+ o2grammars.sh -- gen all grammars with possible inputted parameters
+ gen1grammar.sh -- gen 1 grammar where appropriate parameters are asked by the script
+
+
+SSUUGGGGEESSTTEEDD RREEAADDIINNGGSS GGIIVVIINNGG RREEAASSOONNSS FFOORR YYAACCCCOO22 SSYYSSTTEEMM
+ In //uussrr//llooccaall//yyaaccccoo22//ddooccss
+ p1 and p2 pdf documents -- unpublished essays overviewing some of whyes for yacco2 development
+ Tugboat-o2.pdf -- unpublished essay on ``literate programming'' as applied to the yacco2 system
+
+
+NNOOTTEE
+ The bld_bash_APPLE script is used as an example. There are other bash
+ scripts for GGNNUU and SSOOLLAARRIISS.. See READMEvx.y.pdf.
+
+
+
+OOTTHHEERR LLIINNKKSS
+ wwwwww..ttuugg..oorrgg
+ -- website to download the CCWWEEBB ``Literate programming'' system,
+ _m_p_o_s_t Metapost graphics program and possibly the TTeeXX typesetting
+ system. These are open source. Please consider joining TTuugg..
+
+
+AAUUTTHHOORR
+ Dave Bone
+
+
+
+
+
+1.0 o2(1)
diff --git a/web/yacco2/bin/man/man1/o2.man b/web/yacco2/bin/man/man1/o2.man
new file mode 100644
index 0000000000..a5a2cf4647
--- /dev/null
+++ b/web/yacco2/bin/man/man1/o2.man
@@ -0,0 +1,265 @@
+./#=========
+.TH o2 1 "" "1.0"
+./#=========
+.SH NAME
+o2 \(em multi-threaded non-deterministic lr(1) compiler/compiler included in the
+.B yacco2
+system.
+./"=========
+.SH SYNOPSIS
+.B o2
+[
+.B \-p
+]
+[
+.B -t
+]
+[
+.B \-err
+]
+[
+grammar file to compile
+]
+./"=========
+.SH OPTIONS
+.B o2
+options are each individually prefixed by one ``\-'' only.
+If no grammar file is inputted, o2 will ask for one.
+.TP
+.B \-p
+Create pdf documents for the inputted grammar. It requires CWEB's program suite:
+.B cweave
+and
+.B mpost
+programs to do this.
+
+./"=========
+.TP
+.B \-t
+Generate ``User terminal class'' vocabulary's c++ code along with the inputted grammar.
+.PP
+.B Warning:
+Option is required if the ``User terminal class'' has been modified:
+Tes added, subtracted, or modified.
+Not doing so leaves the emitted lr(1) tables out-of-whack!
+So regenerate
+.B all the grammars
+so that their lr(1) tables are in sync with the new Terminal vocabulary.
+See reference to
+.B o2grammars.bat
+script on how to do it for your own grammars.
+
+./"=========
+.TP
+.B \-err
+Generate "Error terminal class" vocabulary's c++ code along with the inputted grammar.
+.B Warning:
+Ditto as \-t warning.
+
+./"========
+.SH DESCRIPTION
+.B o2
+extends bottom-up parsing by
+defining 2 types of grammars: monolithic and threaded.
+A ``thread call'' operator is introduced into the traditional grammar definition along with
+an arbitration clause.
+These 2 extensions allow multiple grammars
+to be run in parallel with potentially multiple results returned to be arbitrated upon.
+.PP
+The
+.B yacco2
+system is written in the ``Literate programming'' genre using the
+.B CWEB
+program suite: cweave and ctangle. ctangle emits c++ code while cweave
+emits a TeX file for the
+.B pdftex
+program to typeset into a pdf document.
+
+.B o2
+is just 1 program within the yacco2 translation system.
+Other items of import:
+.B yacco2
+library for your own compiler to link to
+and
+.B o2linker
+that is
+o2's companion program to link all your grammars together.
+Grammars and Terminal vocabulary files
+support cweave's language directives and
+.B TeX
+typesetting facilities.
+By using the
+.B \-p
+option,
+.B o2
+emits files for
+.I mpost
+(a graphic drawing program)
+and
+.I cweave
+digestion.
+.I mpost
+draws Niklaus Wirth's ``Pascal grammar like diagrams'' that get included into
+files processed by cweave.
+.I cweave
+then generates the Tex files for the
+.I pdftex
+program to generate the pdf documents.
+.PP
+.SH "o2 outputed files"
+.TP
+c++ code and lr(1) tables for each grammar and grammar's fsc type file for o2linker consumption
+.TP
+Pdf documents per grammar: grammar code and its lr(1) cross reference tables
+
+./"========
+.SH "OTHER FEATURES"
+.PP
+\(em Modular grammars allowing reuse by other compilers
+.RS
+.nf
+.fi
+.RE
+\(em Simplified ambiguity resolution
+.RS
+.nf
+.fi
+.RE
+\(em Programmable ``context sensitive'' lookahead per threaded grammar
+.RS
+.nf
+.fi
+.RE
+\(em Self documenting
+.RS
+.nf
+.fi
+.RE
+\(em Dynamic tracing / trouble shooting facilities
+.RS
+.nf
+.fi
+.RE
+\(em Out-of-the-box error messaging
+.RS
+.nf
+.fi
+.RE
+\(em Multiple input / output token container types:
+.RS
+.nf
+Files
+Trees
+In memory string
+.fi
+.RE
+
+./"========
+.PP
+.SH EXAMPLES
+1) Compiling one of o2's grammars
+.RS
+.nf
+\&\fCcd /usr/local/yacco2/compiler/grammars
+/usr/local/yacco2/bin/o2 eol.lex # no options except file: emit c++ code for grammar
+.fi
+.RE
+2) Generate grammar's documents
+.RS
+.nf
+\&\fCcd /usr/local/yacco2/compiler/grammars
+o2 -p eol.lex # bash PATH variable modified to resolve o2 whereabouts
+.fi
+.RE
+3) Compile grammar and ``Error class'' due to new error terminal added
+.RS
+.nf
+\&\fCo2 -err /usr/local/yacco2/compiler/grammars/eol.lex
+.fi
+.RE
+
+./"========
+.SH "SEE ALSO by man"
+.BR o2linker(1),
+.BR yacco2(1),
+.BR CWEB(1),
+.BR cweave(1),
+.BR ctangle(1),
+.BR mpost(1),
+.BR TeX(1)
+.PP
+In
+.B /usr/local/yacco2/docs/
+.RS
+.nf
+wlibrary.pdf \(em yacco2's library documented ``literate program''
+o2.pdf \(em compiler/compiler documented ``literate program''
+o2linker.pdf \(em linker documented ``literate program''
+yacco2's grammars's pdfes
+o2linker_doc.pdf \(em example of o2/o2linker's grammars cross reference produced by o2linker
+o2book.pdf \(em reference manual
+.fi
+.RE
+
+In
+.B /usr/local/yacco2/
+.RS
+.nf
+READMEvx.y.pdf \(em installation guide x: version number, y: minor adjustment number.
+bld_bash_APPLE script to build complete yacco2 system
+.fi
+.RE
+
+In
+.B /usr/local//yacco2/compiler/grammars,
+to help u out, some bash scripts that u can clone off for your own projects:
+.RE
+.RS
+.nf
+o2grammars.sh \(em gen all grammars with possible inputted parameters
+gen1grammar.sh \(em gen 1 grammar where appropriate parameters are asked by the script
+.fi
+.RE
+
+./"=========
+.SH "SUGGESTED READINGS GIVING REASONS FOR YACCO2 SYSTEM"
+In
+.B /usr/local/yacco2/docs
+.RS
+.nf
+p1 and p2 pdf documents \(em unpublished essays overviewing some of whyes for yacco2 development
+Tugboat-o2.pdf \(em unpublished essay on ``literate programming'' as applied to the yacco2 system
+.fi
+.RE
+
+./"========
+.SH "NOTE"
+The bld_bash_APPLE script is used as an example. There are other bash scripts
+for
+.B GNU
+and
+.B SOLARIS.
+See
+READMEvx.y.pdf.
+
+
+./"=========
+.SH "OTHER LINKS"
+.TP
+.B www.tug.org
+\(em website to download the
+.B CWEB
+``Literate programming'' system,
+.I mpost
+Metapost graphics program
+and possibly the
+.B TeX
+typesetting system. These are open source. Please consider joining
+.B
+Tug.
+
+./"=========
+.SH AUTHOR
+Dave Bone
+
+
diff --git a/web/yacco2/bin/man/man1/o2linker.1 b/web/yacco2/bin/man/man1/o2linker.1
new file mode 100644
index 0000000000..77948c2d16
--- /dev/null
+++ b/web/yacco2/bin/man/man1/o2linker.1
@@ -0,0 +1,88 @@
+o2linker(1) o2linker(1)
+
+
+
+NNAAMMEE
+ o2linker -- o2's companion program to link together all your threaded
+ grammars.
+
+SSYYNNOOPPSSIISS
+ [ file containing listing of all grammars fsc files ]
+
+OOPPTTIIOONNSS
+ If no fsc type file is inputted, o2linker will ask for one. This file
+ is hand written by the compiler writer and contains a list of all the
+ emitted grammars fsc files. See ````//uussrr//llooccaall//yyaaccccoo22//ccoommppiilleerr//ggrraamm--
+ mmaarrss//yyaaccccoo22..ffsscc'''' file as an example to write your own fsc file.
+
+DDEESSCCRRIIPPTTIIOONN
+ oo22lliinnkkeerr emits the ``thread bit'' map object file required for your
+ compiler to reference the threaded grammars. Then all your object
+ files are inputted for the system linker lldd to make an executable pro-
+ gram of your compiler. Please read ````//uussrr//llooccaall//yyaaccccoo22//ccoomm--
+ ppiilleerr//oo22//bblldd__bbaasshh__AAPPPPLLEE'''' script paying particular attention to the ld
+ script line detailing the objects and libraries used. This should
+ guide u in creating your own ``fsc'' type file.
+
+
+
+
+````oo22lliinnkkeerr oouuttppuutteedd ffiilleess''''
+ thread bit map c++ code
+
+ Pdf document:
+ oo22lliinnkkeerr__ddoocc..ppddff cross reference of all your grammars defined
+ and their referenced threads
+
+
+
+
+EEXXAAMMPPLLEESS
+ 1) Creating o2's threads bit map
+ cd /usr/local/yacco2/compiler/grammars
+ /usr/local/yacco2/bin/o2linker yacco2.fsc
+
+
+SSEEEE AALLSSOO bbyy mmaann
+ yyaaccccoo22((11)),, oo22((11)),, CCWWEEBB((11)),, ccwweeaavvee((11)),, ccttaannggllee((11)),, mmppoosstt((11)),, TTeeXX((11))
+
+ In //uussrr//llooccaall//yyaaccccoo22//ddooccss//
+ o2linker.pdf -- linker documentated ``literate program''
+ o2linker_doc.pdf -- example of o2/o2linker's grammars cross reference document produced by o2linker
+ o2book.pdf -- reference manual
+
+ In //uussrr//llooccaall//yyaaccccoo22//ccoommppiilleerr//ggrraammmmaarrss
+ yacco2.fsc -- example of handcrafted input file of yacco2's grammars for o2linker digestion.
+ These grammars are used by o2 and o2linker programs.
+
+ In //uussrr//llooccaall//yyaaccccoo22//
+ READMEvx.y.pdf - installation guide where x: version number and y: minor adjustment number
+ gives a more detailed explanation.
+ bld_bash_APPLE -- install script referencing other scripts building libraries and programs.
+
+ In //uussrr//llooccaall//yyaaccccoo22//oo22lliinnkkeerr and //uussrr//llooccaall//yyaaccccoo22//ccoommppiilleerr//oo22
+ bld_bash_APPLE -- script to create a program using libraries yacco2, pthread, and c++.
+
+
+NNOOTTEE
+ The bld_bash_APPLE script is used as an example. There are other bash
+ scripts for GGNNUU and SSOOLLAARRIISS.. See READMEvx.y.pdf.
+
+
+
+OOTTHHEERR LLIINNKKSS
+ wwwwww..ttuugg..oorrgg
+ -- website to download the CCWWEEBB "Literate programming" system,
+ _m_p_o_s_t Metapost graphics program and possibly the TTeeXX typesetting
+ system. These are open source. Please consider joining TTuugg..
+
+
+
+AAUUTTHHOORR
+ Dave Bone
+
+
+
+
+
+1.0 o2linker(1)
diff --git a/web/yacco2/bin/man/man1/o2linker.man b/web/yacco2/bin/man/man1/o2linker.man
new file mode 100644
index 0000000000..bbb0619322
--- /dev/null
+++ b/web/yacco2/bin/man/man1/o2linker.man
@@ -0,0 +1,133 @@
+./#=========
+.TH o2linker 1 "" "1.0"
+./#=========
+.SH NAME
+o2linker \(em o2's companion program to link together all your threaded grammars.
+./"=========
+.SH SYNOPSIS
+[
+file containing listing of all grammars fsc files
+]
+./"=========
+.SH OPTIONS
+If no fsc type file is inputted, o2linker will ask for one.
+This file is hand written by the compiler writer and contains
+a list of all the emitted grammars fsc files.
+See
+.B ``/usr/local/yacco2/compiler/grammars/yacco2.fsc''
+file as an example to write your own fsc file.
+./"========
+.SH DESCRIPTION
+.B o2linker
+emits the ``thread bit'' map object file required for your compiler to reference the threaded grammars.
+Then all your object files are inputted for the system linker
+.B ld
+to make an executable program of your compiler.
+Please read
+.B ``/usr/local/yacco2/compiler/o2/bld_bash_APPLE''
+script paying particular attention to the ld script line detailing the objects and libraries used.
+This should guide u in creating your own ``fsc'' type file.
+
+
+./"========
+.PP
+.SH ``o2linker outputed files''
+.TP
+thread bit map c++ code
+.TP
+Pdf document:
+.B o2linker_doc.pdf
+cross reference of all your grammars defined and their referenced threads
+
+
+./"========
+.PP
+.SH EXAMPLES
+1) Creating o2's threads bit map
+.RS
+.nf
+\&\fCcd /usr/local/yacco2/compiler/grammars
+/usr/local/yacco2/bin/o2linker yacco2.fsc
+.fi
+.RE
+
+./"========
+.SH "SEE ALSO by man"
+.BR yacco2(1),
+.BR o2(1),
+.BR CWEB(1),
+.BR cweave(1),
+.BR ctangle(1),
+.BR mpost(1),
+.BR TeX(1)
+.PP
+In
+.B /usr/local/yacco2/docs/
+.RS
+.nf
+o2linker.pdf \(em linker documentated ``literate program''
+o2linker_doc.pdf \(em example of o2/o2linker's grammars cross reference document produced by o2linker
+o2book.pdf \(em reference manual
+.fi
+.RE
+
+In
+.B /usr/local/yacco2/compiler/grammars
+.RS
+.nf
+yacco2.fsc \(em example of handcrafted input file of yacco2's grammars for o2linker digestion.
+These grammars are used by o2 and o2linker programs.
+.fi
+.RE
+
+In
+.B /usr/local/yacco2/
+.RS
+.nf
+READMEvx.y.pdf - installation guide where x: version number and y: minor adjustment number
+gives a more detailed explanation.
+bld_bash_APPLE \(em install script referencing other scripts building libraries and programs.
+.fi
+.RE
+
+In
+.B /usr/local/yacco2/o2linker
+and
+.B /usr/local/yacco2/compiler/o2
+.RS
+.nf
+bld_bash_APPLE \(em script to create a program using libraries yacco2, pthread, and c++.
+.fi
+.RE
+
+./"========
+.SH "NOTE"
+The bld_bash_APPLE script is used as an example. There are other bash scripts
+for
+.B GNU
+and
+.B SOLARIS.
+See READMEvx.y.pdf.
+
+
+./"=========
+.SH "OTHER LINKS"
+.TP
+.B www.tug.org
+\(em website to download the
+.B CWEB
+"Literate programming" system,
+.I mpost
+Metapost graphics program
+and possibly the
+.B TeX
+typesetting system. These are open source. Please consider joining
+.B
+Tug.
+
+
+./"=========
+.SH AUTHOR
+Dave Bone
+
+
diff --git a/web/yacco2/bin/man/man1/yacco2.1 b/web/yacco2/bin/man/man1/yacco2.1
new file mode 100644
index 0000000000..5fb72a015f
--- /dev/null
+++ b/web/yacco2/bin/man/man1/yacco2.1
@@ -0,0 +1,68 @@
+yacco2(1) yacco2(1)
+
+
+
+NNAAMMEE
+ yacco2 -- multi-threaded lr1(1) translation system.
+
+
+DDEESSCCRRIIPPTTIIOONN
+ yyaaccccoo22 is a complete translation system to create compilers/transla-
+ tors. It is written using "Literate programming" genre that generates
+ c++ code and companion pdf documents (see CWEB reference below). Gram-
+ mars are written in a dialect of a deterministc grammar with ``liter-
+ ate programming'' directives. Thus providing the generation duality of
+ c++ code and its pdf document. Also the emitted lr(1) parsing tables
+ per grammar have their own lookahead sets documented as a pdf.
+
+
+
+ 44 ppaarrttss ooff yyaaccccoo22 ssyysstteemm
+ 1) _y_a_c_c_o_2
+ API parse library that your compiler/translator links to
+ Found in /usr/local/yacco2/library/lib/Release/
+
+ 2) _o_2
+ compiler/compiler program to compile your grammars or to generate their c++/documentation
+ Found in /usr/local/yacco2/bin
+
+ 3) _o_2_l_i_n_k_e_r
+ grammars linker to create ``thread bit'' map, and a grammars summary document
+ Found in /usr/local/yacco2/bin
+
+ 4) document generator
+ ``Literate grammar'' documents (see CWEB reference below)
+
+
+SSEEEE AALLSSOO bbyy mmaann
+ oo22((11)),, oo22lliinnkkeerr((11)),, TTeeXX((11)),, CCWWEEBB((11)),, ccwweeaavvee((11)),, ccttaannggllee((11)),, mmppoosstt((11))
+
+ In //uussrr//llooccaall//yyaaccccoo22//ddooccss//
+ wlibrary.pdf -- yacco2's library documented ``literate program''
+ o2.pdf -- compiler/compiler documented ``literate program''
+ o2linker.pdf -- documented ``literate program''
+ yacco2's grammars's pdfes
+ o2linker_doc.pdf -- example of o2/o2linker's grammars cross reference produced by o2linker
+ o2book.pdf -- reference manual
+
+ In //uussrr//llooccaall//yyaaccccoo22//
+ READMEvx.y.pdf -- installation guide. A must read where v: version number, y: minor adjustment number.
+
+
+OOTTHHEERR LLIINNKKSS
+ wwwwww..ttuugg..oorrgg
+ -- website to download the CCWWEEBB ``Literate programming'' system,
+ _m_p_o_s_t Metapost graphics program, and TTeeXX typesetting system if
+ not already on your system. These are open source. Please con-
+ sider joining TTuugg..
+
+
+
+AAUUTTHHOORR
+ Dave Bone
+
+
+
+
+
+1.0 yacco2(1)
diff --git a/web/yacco2/bin/man/man1/yacco2.man b/web/yacco2/bin/man/man1/yacco2.man
new file mode 100644
index 0000000000..c1905e8dc8
--- /dev/null
+++ b/web/yacco2/bin/man/man1/yacco2.man
@@ -0,0 +1,103 @@
+./#=========
+.TH yacco2 1 "" "1.0"
+./#=========
+.SH NAME
+yacco2 \(em multi-threaded lr1(1) translation system.
+
+./"========
+.SH DESCRIPTION
+.B yacco2
+is a complete translation system to create compilers/translators.
+It is written using "Literate programming" genre that generates
+c++ code and companion pdf documents (see CWEB reference below).
+Grammars are written in a dialect of a deterministc grammar with ``literate programming'' directives.
+Thus providing the generation duality of c++ code and its pdf document.
+Also the emitted lr(1) parsing tables per grammar have their own lookahead sets documented as a pdf.
+
+.PP
+.SH " 4 parts of yacco2 system"
+1)
+.I yacco2
+.RS
+.nf
+API parse library that your compiler/translator links to
+Found in /usr/local/yacco2/library/lib/Release/
+.fi
+.RE
+
+2)
+.I o2
+.RS
+.nf
+compiler/compiler program to compile your grammars or to generate their c++/documentation
+Found in /usr/local/yacco2/bin
+.fi
+.RE
+
+ 3)
+.I o2linker
+.RS
+.nf
+grammars linker to create ``thread bit'' map, and a grammars summary document
+Found in /usr/local/yacco2/bin
+.fi
+.RE
+
+4) document generator
+.RS
+.nf
+``Literate grammar'' documents (see CWEB reference below)
+.fi
+.RE
+
+./"========
+.SH "SEE ALSO by man"
+.BR o2(1),
+.BR o2linker(1),
+.BR TeX(1),
+.BR CWEB(1),
+.BR cweave(1),
+.BR ctangle(1),
+.BR mpost(1)
+.PP
+In
+.B /usr/local/yacco2/docs/
+.RS
+.nf
+wlibrary.pdf \(em yacco2's library documented ``literate program''
+o2.pdf \(em compiler/compiler documented ``literate program''
+o2linker.pdf \(em documented ``literate program''
+yacco2's grammars's pdfes
+o2linker_doc.pdf \(em example of o2/o2linker's grammars cross reference produced by o2linker
+o2book.pdf \(em reference manual
+.fi
+.RE
+
+In
+.B /usr/local/yacco2/
+.RS
+.nf
+READMEvx.y.pdf \(em installation guide. A must read where v: version number, y: minor adjustment number.
+.fi
+.RE
+
+./"=========
+.SH "OTHER LINKS"
+.TP
+.B www.tug.org
+\(em website to download the
+.B CWEB
+``Literate programming'' system,
+.I mpost
+Metapost graphics program, and
+.B TeX
+typesetting system if not already on your system. These are open source. Please consider joining
+.B
+Tug.
+
+
+./"=========
+.SH AUTHOR
+Dave Bone
+
+
diff --git a/web/yacco2/bin/o2 b/web/yacco2/bin/o2
new file mode 100755
index 0000000000..1b9311c819
--- /dev/null
+++ b/web/yacco2/bin/o2
Binary files differ
diff --git a/web/yacco2/bin/o2linker b/web/yacco2/bin/o2linker
new file mode 100755
index 0000000000..f7fdc4f19a
--- /dev/null
+++ b/web/yacco2/bin/o2linker
Binary files differ
diff --git a/web/yacco2/bin/testdriver b/web/yacco2/bin/testdriver
new file mode 100755
index 0000000000..7b5f8ace15
--- /dev/null
+++ b/web/yacco2/bin/testdriver
Binary files differ
diff --git a/web/yacco2/bld_bash_APPLE b/web/yacco2/bld_bash_APPLE
new file mode 100755
index 0000000000..23846d0f20
--- /dev/null
+++ b/web/yacco2/bld_bash_APPLE
@@ -0,0 +1,99 @@
+#! /bin/sh
+# File: bld_bash_APPLE
+# Why: builds the yacco2 package for Apple mac 10.7 lion
+# Note: set the proper path of package by variable O2
+# How to run:
+# cd /usr/local/yacco2
+# . bld_bash_APPLE
+#
+# U can edit/comment out the bld_bash_APPLE make lines not wanted
+# or the appropriate option wanted: Rlse, Genw, Dbg
+# Happy ccing
+#
+O2=`pwd`
+export O2
+echo "----------->Building yacco2 library<-----------"
+cd "$O2"/library
+make Rlse -f makefile_APPLE
+#make Dbg -f makefile_APPLE
+#make Genw -f makefile_APPLE
+
+echo "----------->Building yacco2's grammars library<-----------"
+cd "$O2"/compiler/grammars
+make Rlse -f makefile_APPLE
+#make Dbg -f makefile_APPLE
+#make Genw -f makefile_APPLE
+
+
+echo "----------->Building o2 program --- the compiler / compiler <-----------"
+cd "$O2"/compiler/o2
+make Rlse -f makefile_APPLE
+#make Dbg -f makefile_APPLE
+#make Genw -f makefile_APPLE
+
+echo "----------->Building o2linker program --- the companion to o2 compiler / compiler<-----------"
+cd "$O2"/o2linker
+make Rlse -f makefile_APPLE
+#make Dbg -f makefile_APPLE
+#make Genw -f makefile_APPLE
+
+echo "----------->Building testout program --- example of writing a compiler<-----------"
+cd "$O2"/grammar-testsuite
+make Rlse -f makefile_testout_APPLE
+#make Dbg -f makefile_testout_APPLE
+#make Genw -f makefile_testout_APPLE
+
+echo "----------->Building testdriver program <-----------"
+cd "$O2"/o2testdriver
+make Rlse -f makefile_APPLE
+#make Dbg -f makefile_APPLE
+#make Genw -f makefile_APPLE
+
+###
+# testing O2 by gening all options
+# the gened eol*.* c++ code is left in the /tmp account
+# See yacco2/compiler/grammars/o2grammars.bat for gening properly all the grammars
+###
+
+echo "----------->Simple test on self<-----------"
+cd /tmp
+"$O2"/bin/o2 -t -err "$O2"/compiler/grammars/eol.lex
+
+echo "----------->Exercise the test suite of grammars<-----------"
+cd /usr/local/yacco2/grammar-testsuite
+make Rlse -f makefile_testout_APPLE
+cd /usr/local/yacco2/grammar-testsuite
+. test-out-grammars.sh -p
+
+###
+# comment out below bash scripts if u want to test out the quality assurance tests
+# or run them individually by hand
+###
+echo "----------->Exercise the QA suite of tests<-----------"
+echo "----------->uncomment the below scripts if u want to test out QA<-----------"
+####cd /usr/local/yacco2/qa
+####. o2_testsuite.sh
+####. o2linker_testsuite2.sh
+####. qa_alltests.sh
+####. test_use_cnt.sh
+####. o2_testsuite_lrness.sh
+####. o2testdriver_tests.sh
+####. qa_alltests1.sh
+
+###
+### If u have cweave / ctangle then uncomment out below bash commands
+### to gen \o2's Error and T terminal s vocabulary documents
+###
+echo "If u have cweave / ctangle installed then uncomment below bash commands"
+echo "to gen o2's Error and T terminal documents"
+####cd /usr/local/yacco2/compiler/grammars
+####cweave Err
+####pdftex Err
+####cweave T
+####pdftex T
+####cweave Lrk
+####pdftex Lrk
+####mv Err.pdf "$O2"/docs/
+####mv T.pdf "$O2"/docs/
+####mv Lrk.pdf "$O2"/docs/
+
diff --git a/web/yacco2/bld_bash_GNU b/web/yacco2/bld_bash_GNU
new file mode 100755
index 0000000000..e31e382b62
--- /dev/null
+++ b/web/yacco2/bld_bash_GNU
@@ -0,0 +1,70 @@
+#! /bin/sh
+# File: bld_bash_GNU
+# Why: builds the yacco2 package for a GNU environment like Ubuntu
+# Note: set the proper path of package by variable O2
+# How to run:
+# cd /usr/local/yacco2
+# . bld_bash_GNU
+#
+# U can edit/comment out the Gnu_bash_file make lines not wanted
+# Happy ccing
+#
+
+# determine base folder
+# and set it as a global bash variable for downstream bash makefiles
+O2=/usr/local/yacco2/
+export O2
+
+echo "----------->Building yacco2 library<-----------"
+cd "$O2"/library
+make Rlse -f makefile_GNU
+#make Dbg -f makefile_GNU
+#make Genw -f makefile_GNU
+
+echo "----------->Building yacco2's grammars library<-----------"
+cd "$O2"/compiler/grammars
+make Rlse -f makefile_GNU
+#make Dbg -f makefile_GNU
+#make Genw -f makefile_GNU
+
+echo "----------->Building o2 program --- the compiler / compiler<-----------"
+cd "$O2"/compiler/o2
+make Rlse -f makefile_GNU
+#make Dbg -f makefile_GNU
+#make Genw -f makefile_GNU
+
+echo "----------->Building o2linker program --- the companion to o2 compiler / compiler<-----------"
+cd "$O2"/o2linker
+make Rlse -f makefile_GNU
+#make Dbg -f makefile_GNU
+#make Genw -f makefile_GNU
+
+###
+# testing H2Os by gening all options
+# the gened eol*.* c++ code is left in the /tmp account
+# See yacco2/compiler/grammars/o2grammars.bat for gening properly all the grammars
+###
+echo "----------->Simple test on self<-----------"
+echo "----will only run successfully----"
+echo "----when default /yacco2 is used.----------"
+echo "----This is due to the include statements in the grammar being compiled----------"
+cd /tmp
+"$O2"/bin/o2 -t -err "$O2"/compiler/grammars/eol.lex
+
+echo "----------->Exercise the test suite of grammars<-----------"
+cd /yacco2/grammar-testsuite
+. test-out-grammars.sh -p
+
+###
+### If u have cweave / ctangle then comment out below bash commands
+###
+#cweave Err
+#pdftex Err
+#cweave T
+#pdftex T
+#cweave Lrk
+#pdftex Lrk
+#mv Err.pdf "$O2"/docs/
+#mv T.pdf "$O2"/docs/
+#mv Lrk.pdf "$O2"/docs/
+
diff --git a/web/yacco2/bld_bash_SOLARIS b/web/yacco2/bld_bash_SOLARIS
new file mode 100755
index 0000000000..3979af62d1
--- /dev/null
+++ b/web/yacco2/bld_bash_SOLARIS
@@ -0,0 +1,127 @@
+#! /bin/sh
+# File: bld_bash_SOLARIS
+# Why: builds the yacco2 package
+# Note: set the proper path of package by variable O2
+# How to run example:
+# cd /usr/local//yacco2
+# . bld_bash_SOLARIS
+#
+# U can edit/comment out the Solaris_bash_file make lines not wanted
+#
+# Note: I use the Gnu make utility as the Solaris
+# ``make'' is a bit crude in its parsing of content and functionality
+# ``Unexpected end of line problems'' did me in when ``od'' showed
+# a well formed Solaris make file and my patiences is thinning on
+# just bad parsing.
+#
+#
+# Happy ccing
+#
+###---- Notice - ``cwebmac.tex'' file needing Repair:
+### Please make sure you're signed in as a user with appropriate priviledges
+### to change the ``cwebmac.tex'' file of your ``texlive'' distribution.
+### If u do not have ``texlive'' installed on your system, this does not stop
+### the O2 compiler/compiler from running but the ``-p'' option to draw grammar
+### diagrams and ``cweb'' to create TeX grammar documents will be not supported.
+### To obtain ``texlive'', please visit ``www.tex.org'' website and join Tug.
+### There is great ``open source'' software of which O2 uses ``cweb'', TeX,
+### and metapost. Even more there are some very interesting people and events
+### that just might hook your intellect.
+### ----> Again please join Tug and support their efforts and thank you.<----
+###
+### Must add ``\input eplain'' instruction to the start of the cwebmac.tex file
+### as its \listing macro is used by O2's generated documents.
+### Please edit below the uncommented Bash line CWEBDIR as to where
+### the directory is containing this file. Example:
+### CWEBDIR=/usr/local/texlive/2008/texmf-dist/tex/plain/cweb
+### The /2008/ part is all that needs to be changed to your installed distribution.
+### If u are not sure of where it resides then run the following command
+### find / | grep 'cwebmac\.tex$'
+### If this is NOT the first time installing O2, the below command
+### will bypass the editing of the ``cwebmac.tex'' file if the comment within the quotes
+### '% For O2 compiler/compiler support' is present.
+###---- end of Notice
+CWEBDIR=/usr/local/texlive/2008/texmf-dist/tex/plain/cweb
+CWEBFILE="$CWEBDIR/cwebmac.tex"
+if ! grep '% For O2 compiler/compiler support' $CWEBFILE > /dev/null
+then
+cp $CWEBFILE "$CWEBFILE.bk"
+echo -e "% For O2 compiler/compiler support\n\\input eplain" > x;
+cat x "$CWEBFILE.bk" > $CWEBFILE
+rm -f x
+fi
+
+############# Start of O2 distribution #####################
+O2=/usr/local/yacco2/
+export O2
+#Make=/usr/bin/gnumake
+Make=/usr/sfw/bin/gmake
+### o2testdriver bld
+echo "----------->Building o2testdriver that allows some QA sanity checks<-----------"
+cd "$O2"/o2testdriver
+$Make Rlse -f makefile_SOLARIS
+
+echo "----------->Building yacco2 library<-----------"
+cd "$O2"/library
+$Make Rlse -f makefile_SOLARIS
+#$Make Genw -f makefile_SOLARIS
+#$Make Dbg -f makefile_SOLARIS
+
+echo "----------->Building o2's grammars library<-----------"
+cd "$O2"/compiler/grammars
+$Make Rlse -f makefile_SOLARIS
+#$Make Genw -f makefile_SOLARIS
+#$Make Dbg -f makefile_SOLARIS
+
+echo "----------->Building o2 the compiler / compiler<-----------"
+cd "$O2"/compiler/o2
+$Make Rlse -f makefile_SOLARIS
+#$Make Genw -f makefile_SOLARIS
+#$Make Dbg -f makefile_SOLARIS
+
+echo "----------->Building o2linker the companion to o2 compiler / compiler<-----------"
+cd "$O2"/o2linker
+$Make Rlse -f makefile_SOLARIS
+#$Make Genw -f makefile_SOLARIS
+#$Make Dbg -f makefile_SOLARIS
+
+echo "----------->Building o2testdriver that allows some QA sanity checks<-----------"
+cd "$O2"/o2testdriver
+$Make Rlse -f makefile_SOLARIS
+#$Make Dbg -f makefile_SOLARIS
+
+###
+# testing H2Os by gening all options
+# the gened eol*.* c++ code is left in the /tmp account
+# See yacco2/compiler/grammars/o2grammars.bat for gening properly all the grammars
+###
+echo "----------->Simple test on self<-----------"
+echo "----will only run successfully----"
+echo "----when default /yacco2 is used.----------"
+echo "----This is due to the include statements in the grammar being compiled----------"
+cd /tmp
+"$O2"/bin/o2 -p -t -err "$O2"/compiler/grammars/eol.lex
+
+echo "----------->Exercise the test suite of grammars<-----------"
+cd /yacco2/grammar-testsuite
+. test-out-grammars.sh -p
+
+
+###
+### If u don't have ``cweb'' system installed please comment out below bash commands
+###
+cweave Err
+pdftex Err
+pdftops Err.pdf
+cweave T
+pdftex T
+pdftops T.pdf
+cweave Lrk
+pdftex Lrk
+pdftops Lrk.pdf
+mv Err.pdf "$O2"/docs/
+mv T.pdf "$O2"/docs/
+mv Lrk.pdf "$O2"/docs/
+mv Err.ps "$O2"/docs/
+mv T.ps "$O2"/docs/
+mv Lrk.ps "$O2"/docs/
diff --git a/web/yacco2/compiler/grammars/Err.w b/web/yacco2/compiler/grammars/Err.w
new file mode 100644
index 0000000000..d411ac23d3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/Err.w
@@ -0,0 +1,1799 @@
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+\DOCtitle{Error Vocabulary}{yacco2\_err\_symbols}
+{NS\_yacco2\_err\_symbols}{191}
+
+@i "/usr/local/yacco2/copyright.w"
+@** Error symbols vocabulary.\fbreak
+Error symbols for the telling.\fbreak
+Due to my verbosity and |cweb|'s (\TeX) black slug output
+some of my symbol keys are
+more cryptic in description as i wanted to title them with
+their enumeration symbol.
+Now, the enumeration symbol is removed from the index so there is
+no blob of ...
+If the truth be told, these descriptions should
+be indirect key values that allow for
+multilingual translation.
+One step at a time...
+
+Upon experimentation with error keys
+having a suffixed Exxx indicator in the key itself
+whereby
+the xxx is a number: 001 and
+associating a translation file with the error construct, i nixed the ideas.
+It is simply a post error evaluation on the given
+error keys to translate them using some form of associated map.
+The error enumeration key with a language indicator would suffice.
+A simple database could be used.
+For example T\_Enum::T\_LR1\_err\_nested\_files\_exceeded\_ with
+ a country code of ``DE'' for
+German would translate ``nested files exceeded''.
+Not finding a translation should default to the error token's
+literal key.
+See grammar ``o2\_err\_hdr.lex'' for a context sensitive approach to error reporting.
+
+
+Ahh... grandeur. Now what about unicode?
+
+@*2 {\bf \NOsign T in list not eq}.\fbreak
+Enum: T\_Err\_no\_of\_native\_Ts\_in\_list\_not\_equal\_
+\fbreak
+\line{Class: Err\_no\_of\_native\_Ts\_in\_list\_not\_equal \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign T in list not eq user-declaration directive.
+@<\NOsign T in list not eq user-declaration directive@>=
+
+ public:
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long Value);
+ unsigned long no()const;
+ private:unsigned long no_;
+
+@*3 \NOsign T in list not eq user-implementation directive.
+@<\NOsign T in list not eq user-implementation directive@>=
+
+ Err_no_of_native_Ts_in_list_not_equal::
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long No)
+T_CTOR("no terminals in list not equal, chk items in list",T_Enum::T_Err_no_of_native_Ts_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_native_Ts_in_list_not_equal::no()const{return no_;}
+
+@*2 {\bf \NOsign threads in list not eq}.\fbreak
+Enum: T\_Err\_no\_of\_threads\_in\_list\_not\_equal\_
+\fbreak
+\line{Class: Err\_no\_of\_threads\_in\_list\_not\_equal \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign threads in list not eq user-declaration directive.
+@<\NOsign threads in list not eq user-declaration directive@>=
+
+ public:
+ Err_no_of_threads_in_list_not_equal(unsigned long No);
+ unsigned long no()const;
+ private:unsigned long no_;
+
+@*3 \NOsign threads in list not eq user-implementation directive.
+@<\NOsign threads in list not eq user-implementation directive@>=
+
+ Err_no_of_threads_in_list_not_equal::
+ Err_no_of_threads_in_list_not_equal(unsigned long No)
+T_CTOR("no threads in list not equal, chk list",T_Enum::T_Err_no_of_threads_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_threads_in_list_not_equal::no()const{return no_;}
+
+@*2 {\bf ? ended subrule expr}.\fbreak
+Enum: T\_Err\_not\_T\_or\_R\_or\_eos\_in\_subrule\_expr\_
+\fbreak
+\line{Class: Err\_not\_T\_or\_R\_or\_eos\_in\_subrule\_expr \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf Empty file no grammar constructs present}.\fbreak
+Enum: T\_Err\_empty\_file\_
+\fbreak
+\line{Class: Err\_empty\_file \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf O2 epsilon badly gened: 0 items in fsc lists}.\fbreak
+Enum: T\_Err\_epsilon\_pass\_thru\_
+\fbreak
+\line{Class: Err\_epsilon\_pass\_thru \hfil AB: N \hfil AD: N}
+
+
+\O2 states that a thread has epsilon pass thru of thread calling.
+Example the called thread start state has an epsilon subrule.
+Sanity check or paranoia on my work.
+
+\fbreak
+\hrule
+@*2 {\bf O2 epsilon: T present, but no T list}.\fbreak
+Enum: T\_Err\_epsilon\_pass\_thru\_no\_Ts\_
+\fbreak
+\line{Class: Err\_epsilon\_pass\_thru\_no\_Ts \hfil AB: N \hfil AD: N}
+
+
+\O2 states that a thread has epsilon pass thru of thread calling.
+Example the called thread start state has an epsilon subrule.
+Sanity check or paranoia on my work.
+
+\fbreak
+\hrule
+@*2 {\bf T in list not defined in T-alphabet}.\fbreak
+Enum: T\_Err\_bad\_T\_in\_list\_
+\fbreak
+\line{Class: Err\_bad\_T\_in\_list \hfil AB: N \hfil AD: N}
+
+
+\Olinker message. It indicates that the terminal
+is not defined in ``T-alphabet'' construct.
+This is the T vocabulary.
+If the terminal is not defined, it means that the
+grammar writer has not generated the vocabulary.
+So turn on the /t option and re-compile a grammar thus
+creating the updated list.
+
+\fbreak
+\hrule
+@*2 {\bf T not found in stbl}.\fbreak
+Enum: T\_Err\_T\_not\_in\_stbl\_
+\fbreak
+\line{Class: Err\_T\_not\_in\_stbl \hfil AB: N \hfil AD: N}
+
+
+Either the grammmar writer forgot to add a new T definition or
+its a mistype.
+
+\fbreak
+\hrule
+@*2 {\bf T not returned from a thread}.\fbreak
+Enum: T\_Err\_not\_T\_for\_rtned\_token\_from\_th\_
+\fbreak
+\line{Class: Err\_not\_T\_for\_rtned\_token\_from\_th \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf T-alphabet file does not exist}.\fbreak
+Enum: T\_Err\_T\_alphabet\_file\_does\_not\_exist\_
+\fbreak
+\line{Class: Err\_T\_alphabet\_file\_does\_not\_exist \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf T-alphabet file not present}.\fbreak
+Enum: T\_Err\_T\_alphabet\_file\_not\_present\_
+\fbreak
+\line{Class: Err\_T\_alphabet\_file\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf T-alphabet kw not present}.\fbreak
+Enum: T\_Err\_T\_alphabet\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_T\_alphabet\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf already defined AB tag}.\fbreak
+Enum: T\_Err\_already\_defined\_AB\_
+\fbreak
+\line{Class: Err\_already\_defined\_AB \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf already defined AD tag}.\fbreak
+Enum: T\_Err\_already\_defined\_AD\_
+\fbreak
+\line{Class: Err\_already\_defined\_AD \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad char}.\fbreak
+Enum: T\_Err\_bad\_char\_
+\fbreak
+\line{Class: Err\_bad\_char \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad char destructor directive.
+@<bad char destructor directive@>=
+
+ if(R->bad_char_!=0)
+ delete R->bad_char();
+
+@*3 bad char user-declaration directive.
+@<bad char user-declaration directive@>=
+
+ public:
+ Err_bad_char(CAbs_lr1_sym* Err_char);
+ yacco2::CAbs_lr1_sym* bad_char()const;
+ void zero_out_bad_char();
+ private:
+ yacco2::CAbs_lr1_sym* bad_char_;
+
+@*3 bad char user-implementation directive.
+@<bad char user-implementation directive@>=
+
+ Err_bad_char::
+ Err_bad_char(CAbs_lr1_sym* Bad_char)
+T_CTOR("bad char",T_Enum::T_Err_bad_char_,&dtor_Err_bad_char,false,false)
+ {bad_char_ = Bad_char;}
+ yacco2::CAbs_lr1_sym* Err_bad_char::bad_char()const{return bad_char_;}
+ void Err_bad_char::zero_out_bad_char(){bad_char_ = 0;}
+
+@*2 {\bf bad cmd-opt}.\fbreak
+Enum: T\_Err\_bad\_cmd\_lne\_opt\_
+\fbreak
+\line{Class: Err\_bad\_cmd\_lne\_opt \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad directive}.\fbreak
+Enum: T\_Err\_bad\_directive\_
+\fbreak
+\line{Class: Err\_bad\_directive \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad eos}.\fbreak
+Enum: T\_Err\_bad\_eos\_
+\fbreak
+\line{Class: Err\_bad\_eos \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad esc}.\fbreak
+Enum: T\_Err\_bad\_esc\_
+\fbreak
+\line{Class: Err\_bad\_esc \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad filename}.\fbreak
+Enum: T\_Err\_bad\_filename\_
+\fbreak
+\line{Class: Err\_bad\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename user-declaration directive.
+@<bad filename user-declaration directive@>=
+
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename user-implementation directive.
+@<bad filename user-implementation directive@>=
+
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename for Errors vocabulary header}.\fbreak
+Enum: T\_Err\_bad\_errors\_hdrfilename\_
+\fbreak
+\line{Class: Err\_bad\_errors\_hdrfilename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename for Errors vocabulary header user-declaration directive.
+@<bad filename for Errors vocabulary header user-declaration directive@>=
+
+ public:
+ Err_bad_errors_hdrfilename(std::string& File_name);
+ Err_bad_errors_hdrfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename for Errors vocabulary header user-implementation directive.
+@<bad filename for Errors vocabulary header user-implementation directive@>=
+
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_hdrfilename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename for Errors vocabulary implementation}.\fbreak
+Enum: T\_Err\_bad\_errors\_impfilename\_
+\fbreak
+\line{Class: Err\_bad\_errors\_impfilename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename for Errors vocabulary implementation user-declaration directive.
+@<bad filename for Errors vocabulary implementation user-declaration directive@>=
+
+ public:
+ Err_bad_errors_impfilename(std::string& File_name);
+ Err_bad_errors_impfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename for Errors vocabulary implementation user-implementation directive.
+@<bad filename for Errors vocabulary implementation user-implementation directive@>=
+
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_impfilename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename to output cpp}.\fbreak
+Enum: T\_Err\_bad\_fsmcpp\_filename\_
+\fbreak
+\line{Class: Err\_bad\_fsmcpp\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename to output cpp user-declaration directive.
+@<bad filename to output cpp user-declaration directive@>=
+
+ public:
+ Err_bad_fsmcpp_filename(std::string& File_name);
+ Err_bad_fsmcpp_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename to output cpp user-implementation directive.
+@<bad filename to output cpp user-implementation directive@>=
+
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(std::string& File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(const char* File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmcpp_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename to output enumeration header}.\fbreak
+Enum: T\_Err\_bad\_enum\_filename\_
+\fbreak
+\line{Class: Err\_bad\_enum\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename to output enumeration header user-declaration directive.
+@<bad filename to output enumeration header user-declaration directive@>=
+
+ public:
+ Err_bad_enum_filename(std::string& File_name);
+ Err_bad_enum_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename to output enumeration header user-implementation directive.
+@<bad filename to output enumeration header user-implementation directive@>=
+
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(std::string& File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(const char* File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_enum_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename to output grammar header}.\fbreak
+Enum: T\_Err\_bad\_fsmheader\_filename\_
+\fbreak
+\line{Class: Err\_bad\_fsmheader\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename to output grammar header user-declaration directive.
+@<bad filename to output grammar header user-declaration directive@>=
+
+ public:
+ Err_bad_fsmheader_filename(std::string& File_name);
+ Err_bad_fsmheader_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename to output grammar header user-implementation directive.
+@<bad filename to output grammar header user-implementation directive@>=
+
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(std::string& File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(const char* File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmheader_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename to output sym}.\fbreak
+Enum: T\_Err\_bad\_fsmsym\_filename\_
+\fbreak
+\line{Class: Err\_bad\_fsmsym\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename to output sym user-declaration directive.
+@<bad filename to output sym user-declaration directive@>=
+
+ public:
+ Err_bad_fsmsym_filename(std::string& File_name);
+ Err_bad_fsmsym_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename to output sym user-implementation directive.
+@<bad filename to output sym user-implementation directive@>=
+
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(std::string& File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(const char* File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmsym_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad filename to output tbl}.\fbreak
+Enum: T\_Err\_bad\_fsmtbl\_filename\_
+\fbreak
+\line{Class: Err\_bad\_fsmtbl\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename to output tbl user-declaration directive.
+@<bad filename to output tbl user-declaration directive@>=
+
+ public:
+ Err_bad_fsmtbl_filename(std::string& File_name);
+ Err_bad_fsmtbl_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename to output tbl user-implementation directive.
+@<bad filename to output tbl user-implementation directive@>=
+
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(std::string& File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(const char* File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmtbl_filename::file_name(){return &file_name_;}
+
+@*2 {\bf bad int-no}.\fbreak
+Enum: T\_Err\_bad\_int\_no\_
+\fbreak
+\line{Class: Err\_bad\_int\_no \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad int-no range}.\fbreak
+Enum: T\_Err\_bad\_int\_no\_range\_
+\fbreak
+\line{Class: Err\_bad\_int\_no\_range \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad operator la expr: not a + or -}.\fbreak
+Enum: T\_Err\_bad\_operator\_in\_la\_expr\_
+\fbreak
+\line{Class: Err\_bad\_operator\_in\_la\_expr \hfil AB: N \hfil AD: N}
+
+
+Thread's lookahead expression malformed.
+
+\fbreak
+\hrule
+@*2 {\bf bad pos of t def}.\fbreak
+Enum: T\_Err\_cannot\_define\_term\_after\_sufx\_dir\_
+\fbreak
+\line{Class: Err\_cannot\_define\_term\_after\_sufx\_dir \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad pos of terminals-refs}.\fbreak
+Enum: T\_Err\_terminals\_refs\_def\_after\_terminals\_
+\fbreak
+\line{Class: Err\_terminals\_refs\_def\_after\_terminals \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad term in la expr}.\fbreak
+Enum: T\_Err\_bad\_term\_in\_la\_expr\_
+\fbreak
+\line{Class: Err\_bad\_term\_in\_la\_expr \hfil AB: N \hfil AD: N}
+
+
+Must be a Rule or a T term within the subrule expression.
+
+\fbreak
+\hrule
+@*2 {\bf bad term in subrule expr}.\fbreak
+Enum: T\_Err\_not\_T\_or\_R\_in\_subrule\_expr\_
+\fbreak
+\line{Class: Err\_not\_T\_or\_R\_in\_subrule\_expr \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad thread expr}.\fbreak
+Enum: T\_Err\_bad\_th\_qualifier\_
+\fbreak
+\line{Class: Err\_bad\_th\_qualifier \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad univ-seq}.\fbreak
+Enum: T\_Err\_bad\_univ\_seq\_
+\fbreak
+\line{Class: Err\_bad\_univ\_seq \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad univ-seq user-declaration directive.
+@<bad univ-seq user-declaration directive@>=
+
+ public:
+ Err_bad_univ_seq(unsigned long Value);
+ unsigned long bad_univ_seq()const;
+ private:unsigned long bad_univ_seq_;
+
+@*3 bad univ-seq user-implementation directive.
+@<bad univ-seq user-implementation directive@>=
+
+ Err_bad_univ_seq::
+ Err_bad_univ_seq(unsigned long Bad_univ_seq)
+ T_CTOR("bad univ seq",T_Enum::T_Err_bad_univ_seq_,0,false,false)
+ {bad_univ_seq_ = Bad_univ_seq;
+ }
+ unsigned long
+ Err_bad_univ_seq::bad_univ_seq()const{return bad_univ_seq_;}
+
+@*2 {\bf command line chaffe}.\fbreak
+Enum: T\_Err\_cmd\_line\_chaffe\_
+\fbreak
+\line{Class: Err\_cmd\_line\_chaffe \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf comment-overrun}.\fbreak
+Enum: T\_Err\_comment\_overrun\_
+\fbreak
+\line{Class: Err\_comment\_overrun \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf dup ? sufx directive}.\fbreak
+Enum: T\_Err\_dup\_sufx\_directive\_
+\fbreak
+\line{Class: Err\_dup\_sufx\_directive \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf dup-entry in sym-table}.\fbreak
+Enum: T\_Err\_dup\_entry\_in\_sym\_table\_
+\fbreak
+\line{Class: Err\_dup\_entry\_in\_sym\_table \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate T\_enum phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_T\_enum\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_T\_enum\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate directive}.\fbreak
+Enum: T\_Err\_duplicate\_directive\_
+\fbreak
+\line{Class: Err\_duplicate\_directive \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate error phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_error\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_error\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate fsm phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_fsm\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_fsm\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate logical name}.\fbreak
+Enum: T\_Err\_duplicate\_logical\_name\_
+\fbreak
+\line{Class: Err\_duplicate\_logical\_name \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate lrk phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_lrk\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_lrk\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate parallel-parse phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_pp\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_pp\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate raw character phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_rc\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_rc\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate rule phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_rule\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_rule\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate terminal phrase}.\fbreak
+Enum: T\_Err\_already\_processed\_T\_phase\_
+\fbreak
+\line{Class: Err\_already\_processed\_T\_phase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf duplicate-entry in alphabet}.\fbreak
+Enum: T\_Err\_dup\_entry\_in\_alphabet\_
+\fbreak
+\line{Class: Err\_dup\_entry\_in\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf emitfile file does not exist}.\fbreak
+Enum: T\_Err\_emitfile\_file\_does\_not\_exist\_
+\fbreak
+\line{Class: Err\_emitfile\_file\_does\_not\_exist \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf emitfile file not present}.\fbreak
+Enum: T\_Err\_emitfile\_file\_not\_present\_
+\fbreak
+\line{Class: Err\_emitfile\_file\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf emitfile kw not present}.\fbreak
+Enum: T\_Err\_emitfile\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_emitfile\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf file of T-alphabet not present}.\fbreak
+Enum: T\_Err\_file\_of\_T\_alphabet\_not\_present\_
+\fbreak
+\line{Class: Err\_file\_of\_T\_alphabet\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf file-name file does not exist}.\fbreak
+Enum: T\_Err\_filename\_file\_does\_not\_exist\_
+\fbreak
+\line{Class: Err\_filename\_file\_does\_not\_exist \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf fsc file does not exist}.\fbreak
+Enum: T\_Err\_fsc\_file\_does\_not\_exist\_
+\fbreak
+\line{Class: Err\_fsc\_file\_does\_not\_exist \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf fsc file not present}.\fbreak
+Enum: T\_Err\_fsc\_cntl\_file\_not\_present\_
+\fbreak
+\line{Class: Err\_fsc\_cntl\_file\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf improper closing of rules construct}.\fbreak
+Enum: T\_Err\_improper\_closing\_of\_rules\_
+\fbreak
+\line{Class: Err\_improper\_closing\_of\_rules \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf improper directive}.\fbreak
+Enum: T\_Err\_improper\_directive\_
+\fbreak
+\line{Class: Err\_improper\_directive \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf invalid fsm-debug value}.\fbreak
+Enum: T\_Err\_fsm\_debug\_string\_not\_true\_or\_false\_
+\fbreak
+\line{Class: Err\_fsm\_debug\_string\_not\_true\_or\_false \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf invalid logical name}.\fbreak
+Enum: T\_Err\_invalid\_logical\_name\_
+\fbreak
+\line{Class: Err\_invalid\_logical\_name \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf invalid logical value}.\fbreak
+Enum: T\_Err\_invalid\_logical\_value\_
+\fbreak
+\line{Class: Err\_invalid\_logical\_value \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf la expression calculates an empty set}.\fbreak
+Enum: T\_Err\_la\_expr\_calc\_empty\_set\_
+\fbreak
+\line{Class: Err\_la\_expr\_calc\_empty\_set \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf linker's monolithic value not n or y}.\fbreak
+Enum: T\_Err\_monolithic\_value\_bad\_
+\fbreak
+\line{Class: Err\_monolithic\_value\_bad \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf linker's transitive value not n or y}.\fbreak
+Enum: T\_Err\_transitive\_value\_bad\_
+\fbreak
+\line{Class: Err\_transitive\_value\_bad \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing T enumeration phrase}.\fbreak
+Enum: T\_ERR\_no\_T\_enum\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_T\_enum\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing errors phrase}.\fbreak
+Enum: T\_ERR\_no\_errors\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_errors\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing fsm phrase}.\fbreak
+Enum: T\_ERR\_no\_fsm\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_fsm\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing lrk phrase}.\fbreak
+Enum: T\_ERR\_no\_lrk\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_lrk\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing rc phrase}.\fbreak
+Enum: T\_ERR\_no\_rc\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_rc\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing rules phrase}.\fbreak
+Enum: T\_ERR\_no\_rules\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_rules\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or missing terminals phrase}.\fbreak
+Enum: T\_ERR\_no\_terminals\_phrase\_
+\fbreak
+\line{Class: ERR\_no\_terminals\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf misplaced or misspelt Rule or T outside of Rules defs}.\fbreak
+Enum: T\_Err\_misplaced\_or\_misspelt\_Rule\_or\_T\_
+\fbreak
+\line{Class: Err\_misplaced\_or\_misspelt\_Rule\_or\_T \hfil AB: N \hfil AD: N}
+
+
+Thrown by |pass3.lex| grammar.
+It is outside of a proper grammar's construct and
+does not have a symbol table entry.
+So it could be a misspelt T or an orphanned rule outside of its
+defining Rules construct.
+
+\fbreak
+\hrule
+@*2 {\bf missing lrk-sufx kw}.\fbreak
+Enum: T\_Err\_missing\_lrk\_sufx\_kw\_
+\fbreak
+\line{Class: Err\_missing\_lrk\_sufx\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf missing terminals-refs kw}.\fbreak
+Enum: T\_Err\_missing\_terminals\_refs\_kw\_
+\fbreak
+\line{Class: Err\_missing\_terminals\_refs\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf missing terminals-sufx kw}.\fbreak
+Enum: T\_Err\_missing\_terminals\_sufx\_kw\_
+\fbreak
+\line{Class: Err\_missing\_terminals\_sufx\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf nested files exceeded}.\fbreak
+Enum: T\_Err\_nested\_files\_exceeded\_
+\fbreak
+\line{Class: Err\_nested\_files\_exceeded \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 nested files exceeded user-declaration directive.
+@<nested files exceeded user-declaration directive@>=
+
+ public:
+ Err_nested_files_exceeded(yacco2::INT Nested_file_cnt,std::string& File_name);
+ yacco2::INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ yacco2::INT nested_cnt_;
+ std::string file_exceeded_;
+
+@*3 nested files exceeded user-implementation directive.
+@<nested files exceeded user-implementation directive@>=
+
+ Err_nested_files_exceeded::
+ Err_nested_files_exceeded(yacco2::INT Nested_cnt,std::string& File_name)
+ T_CTOR("nested files exceeded",T_Enum::T_Err_nested_files_exceeded_,0,false,false)
+ {nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+
+@*2 {\bf no \ASTERICsign{}\ASTERICsign{}\ASTERICsign{}}.\fbreak
+Enum: T\_Err\_no\_syntax\_code\_end\_present\_
+\fbreak
+\line{Class: Err\_no\_syntax\_code\_end\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no T in T-alphabet list}.\fbreak
+Enum: T\_Err\_no\_terminals\_in\_T\_alphabet\_list\_
+\fbreak
+\line{Class: Err\_no\_terminals\_in\_T\_alphabet\_list \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no Ts in T-alphabet}.\fbreak
+Enum: T\_Err\_no\_terminals\_present\_in\_T\_alphabet\_
+\fbreak
+\line{Class: Err\_no\_terminals\_present\_in\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no close-brace}.\fbreak
+Enum: T\_Err\_no\_close\_brace\_
+\fbreak
+\line{Class: Err\_no\_close\_brace \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no close-parenthesis}.\fbreak
+Enum: T\_Err\_no\_close\_parenthesis\_
+\fbreak
+\line{Class: Err\_no\_close\_parenthesis \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no closing brace ending rules defs}.\fbreak
+Enum: T\_Err\_no\_close\_brace\_ending\_rules\_defs\_
+\fbreak
+\line{Class: Err\_no\_close\_brace\_ending\_rules\_defs \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no cmd-lne-data}.\fbreak
+Enum: T\_Err\_no\_cmd\_lne\_data\_
+\fbreak
+\line{Class: Err\_no\_cmd\_lne\_data \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no comma present}.\fbreak
+Enum: T\_Err\_no\_comma\_present\_
+\fbreak
+\line{Class: Err\_no\_comma\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no constant-defs keyword present}.\fbreak
+Enum: T\_Err\_no\_kdefs\_kw\_present\_
+\fbreak
+\line{Class: Err\_no\_kdefs\_kw\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no constant-defs-code present}.\fbreak
+Enum: T\_Err\_no\_kdefs\_code\_present\_
+\fbreak
+\line{Class: Err\_no\_kdefs\_code\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no constant-defs-directive present}.\fbreak
+Enum: T\_Err\_no\_constant\_defs\_present\_
+\fbreak
+\line{Class: Err\_no\_constant\_defs\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no directive present}.\fbreak
+Enum: T\_Err\_no\_directive\_present\_
+\fbreak
+\line{Class: Err\_no\_directive\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no end-T-alphabet present}.\fbreak
+Enum: T\_Err\_end\_T\_alphabet\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_end\_T\_alphabet\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no end-list-of-native...}.\fbreak
+Enum: T\_Err\_end\_list\_native\_T\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_end\_list\_native\_T\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no end-list-of-trans...}.\fbreak
+Enum: T\_Err\_end\_list\_of\_transitive\_threads\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_end\_list\_of\_transitive\_threads\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no end-of-code}.\fbreak
+Enum: T\_Err\_no\_end\_of\_code\_
+\fbreak
+\line{Class: Err\_no\_end\_of\_code \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no end-preamble present}.\fbreak
+Enum: T\_Err\_end\_preamble\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_end\_preamble\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no file-name kw present}.\fbreak
+Enum: T\_Err\_filename\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_filename\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no file-name present}.\fbreak
+Enum: T\_Err\_no\_filename\_present\_
+\fbreak
+\line{Class: Err\_no\_filename\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no file-name value}.\fbreak
+Enum: T\_Err\_filename\_value\_not\_present\_
+\fbreak
+\line{Class: Err\_filename\_value\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no file-name-id present}.\fbreak
+Enum: T\_Err\_no\_filename\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_filename\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no file-of-T-alphabet}.\fbreak
+Enum: T\_Err\_file\_of\_T\_alphabet\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_file\_of\_T\_alphabet\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no filename}.\fbreak
+Enum: T\_Err\_no\_filename\_
+\fbreak
+\line{Class: Err\_no\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-class present}.\fbreak
+Enum: T\_Err\_no\_fsm\_class\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_class\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-comments present}.\fbreak
+Enum: T\_Err\_no\_fsm\_comments\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_comments\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-comments string present}.\fbreak
+Enum: T\_Err\_no\_fsm\_comments\_string\_
+\fbreak
+\line{Class: Err\_no\_fsm\_comments\_string \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-date present}.\fbreak
+Enum: T\_Err\_no\_fsm\_date\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_date\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-date string present}.\fbreak
+Enum: T\_Err\_no\_fsm\_date\_string\_
+\fbreak
+\line{Class: Err\_no\_fsm\_date\_string \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-debug present}.\fbreak
+Enum: T\_Err\_no\_fsm\_debug\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_debug\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-debug string present}.\fbreak
+Enum: T\_Err\_no\_fsm\_debug\_string\_
+\fbreak
+\line{Class: Err\_no\_fsm\_debug\_string \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-filename id present}.\fbreak
+Enum: T\_Err\_no\_fsm\_filename\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_filename\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-filename present}.\fbreak
+Enum: T\_Err\_no\_fsm\_filename\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_filename\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-id-present}.\fbreak
+Enum: T\_Err\_no\_fsm\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-id-string present}.\fbreak
+Enum: T\_Err\_no\_fsm\_id\_string\_
+\fbreak
+\line{Class: Err\_no\_fsm\_id\_string \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-namespace id present}.\fbreak
+Enum: T\_Err\_no\_fsm\_namespace\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_namespace\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-namespace present}.\fbreak
+Enum: T\_Err\_no\_fsm\_namespace\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_namespace\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-version present}.\fbreak
+Enum: T\_Err\_no\_fsm\_version\_present\_
+\fbreak
+\line{Class: Err\_no\_fsm\_version\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no fsm-version string present}.\fbreak
+Enum: T\_Err\_no\_fsm\_version\_string\_
+\fbreak
+\line{Class: Err\_no\_fsm\_version\_string \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no grammar-name present}.\fbreak
+Enum: T\_Err\_grammar\_name\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_grammar\_name\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no grammar-name value}.\fbreak
+Enum: T\_Err\_grammar\_name\_value\_not\_present\_
+\fbreak
+\line{Class: Err\_grammar\_name\_value\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no identifier present}.\fbreak
+Enum: T\_Err\_no\_identifier\_present\_
+\fbreak
+\line{Class: Err\_no\_identifier\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no int present}.\fbreak
+Enum: T\_Err\_no\_int\_present\_
+\fbreak
+\line{Class: Err\_no\_int\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no key-value present in definition}.\fbreak
+Enum: T\_Err\_no\_terminal\_key\_present\_
+\fbreak
+\line{Class: Err\_no\_terminal\_key\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no list-of-native-terminals}.\fbreak
+Enum: T\_Err\_list\_of\_terminals\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_list\_of\_terminals\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no list-of-transit...}.\fbreak
+Enum: T\_Err\_no\_list\_of\_trans\_threads\_kw\_
+\fbreak
+\line{Class: Err\_no\_list\_of\_trans\_threads\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no monolithic present}.\fbreak
+Enum: T\_Err\_monolithic\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_monolithic\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no name-space}.\fbreak
+Enum: T\_Err\_namespace\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_namespace\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no name-space present}.\fbreak
+Enum: T\_Err\_no\_namespace\_present\_
+\fbreak
+\line{Class: Err\_no\_namespace\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no name-space value}.\fbreak
+Enum: T\_Err\_namespace\_value\_not\_present\_
+\fbreak
+\line{Class: Err\_namespace\_value\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no name-space-id present}.\fbreak
+Enum: T\_Err\_no\_namespace\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_namespace\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no no-of-T present}.\fbreak
+Enum: T\_Err\_no\_of\_T\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_no\_of\_T\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no open-brace}.\fbreak
+Enum: T\_Err\_no\_open\_brace\_
+\fbreak
+\line{Class: Err\_no\_open\_brace \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no open-parenthesis}.\fbreak
+Enum: T\_Err\_no\_open\_parenthesis\_
+\fbreak
+\line{Class: Err\_no\_open\_parenthesis \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel thread function}.\fbreak
+Enum: T\_Err\_no\_pp\_fnct\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_fnct\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-code}.\fbreak
+Enum: T\_Err\_no\_pp\_code\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_code\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-code-syntax-code}.\fbreak
+Enum: T\_Err\_no\_pp\_code\_stc\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_code\_stc\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-control-monitor}.\fbreak
+Enum: T\_Err\_no\_pp\_ctrl\_mntor\_kw\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_ctrl\_mntor\_kw\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-la-bndary expr}.\fbreak
+Enum: T\_Err\_pp\_la\_boundary\_attribute\_not\_fnd\_
+\fbreak
+\line{Class: Err\_pp\_la\_boundary\_attribute\_not\_fnd \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-la-boundary}.\fbreak
+Enum: T\_Err\_no\_pp\_bndry\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_bndry\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-la-boundary-expr}.\fbreak
+Enum: T\_Err\_no\_pp\_la\_bndary\_expr\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_la\_bndary\_expr\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no parallel-thread-function}.\fbreak
+Enum: T\_Err\_no\_pp\_thread\_function\_present\_
+\fbreak
+\line{Class: Err\_no\_pp\_thread\_function\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no preamble source code}.\fbreak
+Enum: T\_Err\_preamble\_srce\_code\_not\_present\_
+\fbreak
+\line{Class: Err\_preamble\_srce\_code\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no rule name present}.\fbreak
+Enum: T\_Err\_no\_rule\_name\_present\_
+\fbreak
+\line{Class: Err\_no\_rule\_name\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no sub rule present}.\fbreak
+Enum: T\_Err\_no\_sub\_rule\_present\_
+\fbreak
+\line{Class: Err\_no\_sub\_rule\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no sym-class id present}.\fbreak
+Enum: T\_Err\_no\_sym\_class\_id\_present\_
+\fbreak
+\line{Class: Err\_no\_sym\_class\_id\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no sym-class present}.\fbreak
+Enum: T\_Err\_no\_sym\_class\_present\_
+\fbreak
+\line{Class: Err\_no\_sym\_class\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no symbol definition present}.\fbreak
+Enum: T\_Err\_no\_sym\_defs\_present\_
+\fbreak
+\line{Class: Err\_no\_sym\_defs\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no syntax-code present}.\fbreak
+Enum: T\_Err\_no\_syntax\_code\_present\_
+\fbreak
+\line{Class: Err\_no\_syntax\_code\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no terminal-def-code present}.\fbreak
+Enum: T\_Err\_no\_tdef\_code\_present\_
+\fbreak
+\line{Class: Err\_no\_tdef\_code\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no thread-name present}.\fbreak
+Enum: T\_Err\_threadname\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_threadname\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no thread-name value}.\fbreak
+Enum: T\_Err\_threadname\_value\_not\_present\_
+\fbreak
+\line{Class: Err\_threadname\_value\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no transitive present}.\fbreak
+Enum: T\_Err\_transitive\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_transitive\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no\NOsign in list-of-native-term...}.\fbreak
+Enum: T\_Err\_no\_of\_terminals\_not\_present\_
+\fbreak
+\line{Class: Err\_no\_of\_terminals\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no\NOsign in list-of-trans...}.\fbreak
+Enum: T\_Err\_no\_of\_threads\_not\_present\_
+\fbreak
+\line{Class: Err\_no\_of\_threads\_not\_present \hfil AB: N \hfil AD: N}
+
+
+Cross check against the \O2 linker ``fsc'' info.
+The ``list-of-transitive-threads'' construct also
+states the number of entries in its list.
+Some how they don't jive.
+i think thar's something rotten in the fingers and
+diletants playing with the file?
+
+\fbreak
+\hrule
+@*2 {\bf no-of-T value not present}.\fbreak
+Enum: T\_Err\_no\_of\_T\_value\_not\_present\_
+\fbreak
+\line{Class: Err\_no\_of\_T\_value\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not :: in thread expr}.\fbreak
+Enum: T\_Err\_not\_dbl\_colon\_in\_th\_stmt\_
+\fbreak
+\line{Class: Err\_not\_dbl\_colon\_in\_th\_stmt \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not a Rule in chained dispatcher expr}.\fbreak
+Enum: T\_Err\_not\_a\_Rule\_
+\fbreak
+\line{Class: Err\_not\_a\_Rule \hfil AB: N \hfil AD: N}
+
+
+Thrown by |subrule_def.lex| grammar supporting the
+new back-to-back thread call construct whereby the following procedure call is chained to
+the pushed ``return T'' of the 1st thread call.
+The term following the 1st thread call expression must be a rule whose
+contents use the \\TRAshift operator.
+
+\fbreak
+\hrule
+@*2 {\bf not a kw to start the top/down parse construct}.\fbreak
+Enum: T\_Err\_not\_kw\_defining\_grammar\_construct\_
+\fbreak
+\line{Class: Err\_not\_kw\_defining\_grammar\_construct \hfil AB: N \hfil AD: N}
+
+
+Thrown by |pass3.lex| grammar.
+Caused by an identifier that has been misplaced.
+Could be a typo
+where the item should be within the
+defining Rules Vocabulary or
+a premature ending of the Rules construct by an extra close brace
+whereby it is trying to define a rule.
+
+\fbreak
+\hrule
+@*2 {\bf not a lhs kw}.\fbreak
+Enum: T\_Err\_not\_a\_lhs\_kw\_
+\fbreak
+\line{Class: Err\_not\_a\_lhs\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not a namespace id in thread expr}.\fbreak
+Enum: T\_Err\_not\_id\_for\_ns\_in\_th\_stmt\_
+\fbreak
+\line{Class: Err\_not\_id\_for\_ns\_in\_th\_stmt \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not a terminal definition}.\fbreak
+Enum: T\_Err\_not\_a\_terminal\_definition\_
+\fbreak
+\line{Class: Err\_not\_a\_terminal\_definition \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not a thread name id in expr}.\fbreak
+Enum: T\_Err\_not\_id\_for\_th\_name\_in\_th\_stmt\_
+\fbreak
+\line{Class: Err\_not\_id\_for\_th\_name\_in\_th\_stmt \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not an arbitration-code keyword}.\fbreak
+Enum: T\_Err\_not\_arbitration\_code\_kw\_
+\fbreak
+\line{Class: Err\_not\_arbitration\_code\_kw \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf not an eosr in subrule expr}.\fbreak
+Enum: T\_Err\_not\_eos\_in\_subrule\_expr\_
+\fbreak
+\line{Class: Err\_not\_eos\_in\_subrule\_expr \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf preamble kw not present}.\fbreak
+Enum: T\_Err\_preamble\_kw\_not\_present\_
+\fbreak
+\line{Class: Err\_preamble\_kw\_not\_present \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf re-compile grammar: bad T-alphabet}.\fbreak
+Enum: T\_Err\_bad\_T\_alphabet\_
+\fbreak
+\line{Class: Err\_bad\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+
+Mismatch with the contents of the ``T-alphabet'' construct and the
+number of terminals stated in each individual grammar ``fsc'' file.
+Usually means that terminals of some ilk have changed the
+population and requires a recompilation per grammar
+to match the vocabulary numbers.
+That is regen grammars with the ``-t'' and ``-err'' switches.
+This gens the eumeration file that ``o2linker'' depends on.
+
+\fbreak
+\hrule
+@*2 {\bf removal of term against empty set in la expr}.\fbreak
+Enum: T\_Err\_empty\_set\_removal\_in\_la\_expr\_
+\fbreak
+\line{Class: Err\_empty\_set\_removal\_in\_la\_expr \hfil AB: N \hfil AD: N}
+
+
+Bad expression where a removal expression is against an empty set.
+For example, a - eolr - b is invalid. The eolr empties the set.
+a - eolr + b is a round about way of having just b in the set.
+
+\fbreak
+\hrule
+@*2 {\bf report-card-ptr-0}.\fbreak
+Enum: T\_Err\_report\_card\_ptr\_0\_
+\fbreak
+\line{Class: Err\_report\_card\_ptr\_0 \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf rotten chr in T-alphabet}.\fbreak
+Enum: T\_Err\_rotten\_chr\_in\_T\_alphabet\_
+\fbreak
+\line{Class: Err\_rotten\_chr\_in\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf rule already defined}.\fbreak
+Enum: T\_Err\_rule\_already\_defined\_
+\fbreak
+\line{Class: Err\_rule\_already\_defined \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf rule does not gen T strings - sick grammar}.\fbreak
+Enum: T\_ERR\_sick\_grammar\_
+\fbreak
+\line{Class: ERR\_sick\_grammar \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf rule not found in stbl}.\fbreak
+Enum: T\_Err\_rule\_not\_in\_stbl\_
+\fbreak
+\line{Class: Err\_rule\_not\_in\_stbl \hfil AB: N \hfil AD: N}
+
+
+Post process the grammar's vocabulary.
+A rule can be referenced before
+its definition.
+Just help the grammar writer of misselling or forgetfulness.
+
+\fbreak
+\hrule
+@*2 {\bf rule used but undefined}.\fbreak
+Enum: T\_Err\_used\_rule\_but\_undefined\_
+\fbreak
+\line{Class: Err\_used\_rule\_but\_undefined \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl char-pool full}.\fbreak
+Enum: T\_Err\_sym\_tbl\_char\_pool\_full\_
+\fbreak
+\line{Class: Err\_sym\_tbl\_char\_pool\_full \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl context-buf-overflow}.\fbreak
+Enum: T\_Err\_sym\_tbl\_context\_buf\_overflow\_
+\fbreak
+\line{Class: Err\_sym\_tbl\_context\_buf\_overflow \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl full}.\fbreak
+Enum: T\_Err\_sym\_tbl\_full\_
+\fbreak
+\line{Class: Err\_sym\_tbl\_full \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl has entry but not a rule}.\fbreak
+Enum: T\_Err\_stble\_has\_entry\_but\_not\_a\_rule\_
+\fbreak
+\line{Class: Err\_stble\_has\_entry\_but\_not\_a\_rule \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl scope-stk overflow}.\fbreak
+Enum: T\_Err\_sym\_tbl\_nested\_scope\_stk\_overflow\_
+\fbreak
+\line{Class: Err\_sym\_tbl\_nested\_scope\_stk\_overflow \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf stbl scope-stk underflow}.\fbreak
+Enum: T\_Err\_sym\_tbl\_nested\_scope\_stk\_underflow\_
+\fbreak
+\line{Class: Err\_sym\_tbl\_nested\_scope\_stk\_underflow \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf subrule overrun}.\fbreak
+Enum: T\_Err\_subrule\_overrun\_
+\fbreak
+\line{Class: Err\_subrule\_overrun \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf subscript out-of-range}.\fbreak
+Enum: T\_Err\_subscript\_out\_of\_range\_
+\fbreak
+\line{Class: Err\_subscript\_out\_of\_range \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf term not a lhs or parallel-control-monitor kw}.\fbreak
+Enum: T\_Err\_not\_lhs\_pcnrl\_mntr\_
+\fbreak
+\line{Class: Err\_not\_lhs\_pcnrl\_mntr \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf terminals-refs duplicate}.\fbreak
+Enum: T\_Err\_terminals\_refs\_dup\_def\_
+\fbreak
+\line{Class: Err\_terminals\_refs\_dup\_def \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf thread defined by another fsc file}.\fbreak
+Enum: T\_Err\_already\_defined\_in\_fsc\_file\_
+\fbreak
+\line{Class: Err\_already\_defined\_in\_fsc\_file \hfil AB: N \hfil AD: N}
+
+
+Each individual thread's fsc file contains its bio.
+This error indicates that the grammar writer probably
+cloned off a grammar but did not
+edit properly the vital statistics.
+So go edit the erroneous grammar and correct
+its thread name, namespace etc.
+
+\fbreak
+\hrule
+@*2 {\bf thread in stbl but subscript badly set}.\fbreak
+Enum: T\_Err\_bad\_thread\_subscript\_
+\fbreak
+\line{Class: Err\_bad\_thread\_subscript \hfil AB: N \hfil AD: N}
+
+
+More of a sanity check in the symbol table.
+If this occurs i'm really in trouble.
+
+\fbreak
+\hrule
+@*2 {\bf thread xrefed, but not defed}.\fbreak
+Enum: T\_Err\_thread\_refed\_but\_not\_defined\_
+\fbreak
+\line{Class: Err\_thread\_refed\_but\_not\_defined \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 thread xrefed, but not defed user-declaration directive.
+@<thread xrefed, but not defed user-declaration directive@>=
+
+ public:
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id);
+ CAbs_lr1_sym* th_id();
+ private:CAbs_lr1_sym* th_id_;
+
+@*3 thread xrefed, but not defed user-implementation directive.
+@<thread xrefed, but not defed user-implementation directive@>=
+
+ Err_thread_refed_but_not_defined::
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id)
+T_CTOR("thread xrefed, but not defed",T_Enum::T_Err_thread_refed_but_not_defined_,0,false,false)
+ { th_id_ = Th_id;}
+yacco2::CAbs_lr1_sym* Err_thread_refed_but_not_defined::th_id(){return th_id_;};
+
+@*2 {\bf token found in stbl but not a kw}.\fbreak
+Enum: T\_Err\_not\_a\_keyword\_
+\fbreak
+\line{Class: Err\_not\_a\_keyword \hfil AB: N \hfil AD: N}
+
+
+The symbol is not a keyword. Could be an initialization
+problem with my \O2 setup.
+
+\fbreak
+\hrule
+@*2 {\bf transitive list thread not defined by fsc files}.\fbreak
+Enum: T\_Err\_bad\_th\_in\_list\_
+\fbreak
+\line{Class: Err\_bad\_th\_in\_list \hfil AB: N \hfil AD: N}
+
+
+The hand coded ``???.fsc'' control file provides
+all the threads' ``fsc'' files has thread entries missing.
+Typically the grammar writer created a new thread but forgot the
+include it in the global ``fsc'' file.
+So go add the missing thread entries in the global ``fsc'' file.
+
+\fbreak
+\hrule
+@*2 {\bf undefined terminal in subrule}.\fbreak
+Enum: T\_Err\_subrule\_use\_undefined\_T\_
+\fbreak
+\line{Class: Err\_subrule\_use\_undefined\_T \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf unknown symbol type in stbl}.\fbreak
+Enum: T\_Err\_stbl\_entry\_unknown\_
+\fbreak
+\line{Class: Err\_stbl\_entry\_unknown \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf use of Non-terminal (rule) outside Rules's construct}.\fbreak
+Enum: T\_Err\_use\_of\_N\_outside\_Rules\_construct\_
+\fbreak
+\line{Class: Err\_use\_of\_N\_outside\_Rules\_construct \hfil AB: N \hfil AD: N}
+
+
+Thrown by |pass3.lex| grammar.
+The rule reference has already been
+seen by the parsed Rules construct and
+stored in the symbol table.
+The symbol table returns the found item as a rule.
+Cause is a reference to the rule outside of the Rules construct.
+Probably a typo by the grammar writer caused by the premature
+parsing of the Rules Vocabulary.
+
+\fbreak
+\hrule
+@*2 {\bf use of T outside Rules's construct}.\fbreak
+Enum: T\_Err\_use\_of\_T\_outside\_Rules\_construct\_
+\fbreak
+\line{Class: Err\_use\_of\_T\_outside\_Rules\_construct \hfil AB: N \hfil AD: N}
+
+
+Thrown by |pass3.lex| grammar.
+The terminal definitions have already been parsed and
+stored in the symbol table.
+The symbol table returns the found item as a terminal rather than
+the unfound identifier.
+Cause is reference of a terminal outside of the Rules construct.
+Probably a typo by the grammar writer.
+
+\fbreak
+\hrule
+@*2 {\bf zero len symbol}.\fbreak
+Enum: T\_Err\_zero\_len\_sym\_
+\fbreak
+\line{Class: Err\_zero\_len\_sym \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@** Index.
diff --git a/web/yacco2/compiler/grammars/Lrk.w b/web/yacco2/compiler/grammars/Lrk.w
new file mode 100644
index 0000000000..11018e6b95
--- /dev/null
+++ b/web/yacco2/compiler/grammars/Lrk.w
@@ -0,0 +1,331 @@
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+\DOCtitle{Lr K Vocabulary}{yacco2\_k\_symbols}
+{NS\_yacco2\_k\_symbols}{8}
+
+@i "/usr/local/yacco2/copyright.w"
+@** K symbols vocabulary.\fbreak
+Ahh the ``Constant grammar'' symbols used throughout all grammars.
+Depending on the command line options \O2 can generate the grammar
+and possibly the various flavours of the Terminal vocabulary.
+Under normal development, the grammar writer
+compiles and emits just the grammar.
+Flavours of the terminal vocabulary are not usually generated unless
+there have been changes
+to either {\bf error} or
+{\bf terminal} with accompaning command line option.
+At the
+initial ``big bang'' of bootstrapping \O2's library and compiler / compiler,
+both {\bf raw characters} and {\bf lr k} terminals were generated
+using their command line options
+{/rc} and {/lrk}. The command line option
+now uses an Unix style {-t, -err} and
+these 2 terminal types ``lrk'' and ``raw characters''
+are now cast in cement: u cannot regen them
+ from their ``*.T'' file definitions but
+u can change their ``big bang'' generated ``c++'' modules.
+These terminals are now read-only:
+they will never be changed by a user of \O2 and who'd want to anyway?.
+
+The hardwired ``k'' terminals are used by \O2's library
+ for internal parsing situations.
+Apart from {\bf eog} who represents
+the end-of-grammar and end-of-file conditions,
+all other definitions are not part of the token source
+ stream being parsed.
+I call them meta terminals
+as they are never in the token stream but
+represent internal parsing conditions within the emitted
+finite-state table that triggers the \O2's library routines.
+For example, the presence of \paralleloperator within
+a parse state
+indicates the potential ``to run'' threads.
+If u look carefully, their file definitions and
+implementations reside in \O2's ``../yacco2/library/grammars'' folder.
+Their definition files are ``yacco2\_k\_symbols.T'' and
+``yacco2\_characters.T'' with
+their ``c++'' variants having the ``.h'' and ''.cpp'' extensions.
+
+@*2 {\bf eog}.\fbreak
+Enum: T\_LR1\_eog\_
+\fbreak
+\line{Class: LR1\_eog \hfil AB: N \hfil AD: N}
+
+
+ Used to indicate an end-of-grammar or an end-of-file condition.
+ When the token container is reached, calls for another terminal
+ will always return the |eog|.
+ It's your door bouncer before hell.
+
+\fbreak
+\hrule
+@*3 eog user-declaration directive.
+@<eog user-declaration directive@>=
+
+ LR1_eog();
+
+@*3 eog user-implementation directive.
+@<eog user-implementation directive@>=
+
+ LR1_eog::LR1_eog()
+ T_CTOR("eog",T_LR1_eog_,0,false,false)
+ {}
+ LR1_eog LR1_eog__;
+ yacco2::CAbs_lr1_sym* yacco2::PTR_LR1_eog__ = &LR1_eog__;
+
+@*2 {\bf eolr}.\fbreak
+Enum: T\_LR1\_eolr\_
+\fbreak
+\line{Class: LR1\_eolr \hfil AB: N \hfil AD: N}
+
+
+ Used to indicate all-terminals of the
+ terminal vocabulary including itself.
+ It saves finger blisters by not having
+ to be explicit in the thread's lookahead expression.
+ Dieting hasn't been this effective to code bloat.
+
+\fbreak
+\hrule
+@*3 eolr user-declaration directive.
+@<eolr user-declaration directive@>=
+
+ LR1_eolr();
+
+@*3 eolr user-implementation directive.
+@<eolr user-implementation directive@>=
+
+ LR1_eolr::LR1_eolr()
+ T_CTOR("eolr",T_LR1_eolr_,0,false,false)
+ {}
+ LR1_eolr LR1_eolr__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_eolr__ = &LR1_eolr__;
+
+@*2 {\bf \ALLshift{}}.\fbreak
+Enum: T\_LR1\_all\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_all\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ Represents the wild token situation.
+ Lowers the specific shifts of the finite-state-table and
+ allows the grammar writer to field the unexpected from returned
+ threads. Good stuff.
+
+Caveat: One should use the \QUEshift to field unknow return Tes if
+they are to be interpreted as errors.
+
+\fbreak
+\hrule
+@*3 \ALLshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\ALLshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_all_shift_operator();
+
+@*3 \ALLshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\ALLshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_all_shift_operator::LR1_all_shift_operator()
+ T_CTOR("|+|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_all_shift_operator LR1_all_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_all_shift_operator__
+= &LR1_all_shift_operator__;
+
+@*2 {\bf \INVshift{}}.\fbreak
+Enum: T\_LR1\_invisible\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_invisible\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ It's a nice way to program
+ out of an ambiguous grammar.
+ It can also lower the code bloat
+ of a thread's first set.
+
+\fbreak
+\hrule
+@*3 \INVshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\INVshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_invisible_shift_operator();
+
+@*3 \INVshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\INVshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_invisible_shift_operator::LR1_invisible_shift_operator()
+ T_CTOR("|.|",T_LR1_invisible_shift_operator_,0,false,false)
+ {}
+ LR1_invisible_shift_operator LR1_invisible_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__
+ = &LR1_invisible_shift_operator__;
+
+@*2 {\bf \QUEshift{}}.\fbreak
+Enum: T\_LR1\_questionable\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_questionable\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ Represents a questionable grammar situation.
+It pinpoints programmed error points within the grammar.
+The subrule using this symbol has a lr(0) reduction as
+the lookahead is not kosher and so would probably not reduce
+in the lr(1) context.
+It can be used both in the following grammar expressions:\fbreak
+\INDENT{1.5cm}{1) \subrule \QUEshift}
+\INDENT{1.5cm}{2) \subrule \PARshift \quad \QUEshift \quad NULL}
+Point 1 covers the state where the current token being parsed
+is improper. Point 2 is more interesting as it captures
+a returned terminal that the thread passes back as an error.
+
+The \QUEshift was not one of the original
+``k'' terminals. It replaced the ``eof'' terminal
+which was marginal in intent.
+I felt the \QUEshift symbol drew the reader's eye of the grammar where
+``faulty'' points where captured and to force lr(0) context processing
+to reduce its subrule.
+Why lr(0) context? Glad u asked, the lookahead terminal --- the current
+terminal being parsed, is in error and
+so ``how is the subrule with the \QUEshift to reduce after its shifted T?''.
+It must be divorced of any lookahead and just acted upon.
+
+Now another question arises: ``how is this condition detected in
+a parsing state of
+mixed conditions --- threading, shifting, reducing''?
+There is a pecking order on the conditions tried by the parser:\fbreak
+\INDENT{1.5cm}{$\circ$ threading}
+\INDENT{2.5cm}{if tried and unsuccessful the balance of conditions are attempted}
+\INDENT{1.5cm}{$\circ$ shifts pecking order by their presence in current parse state:}
+\INDENT{2.5cm}{can the current token be shifted?}
+\INDENT{2.5cm}{\QUEshift --- error condition}
+\INDENT{2.5cm}{\INVshift --- explicit \emptyrule}
+\INDENT{2.5cm}{\ALLshift --- any terminial}
+\INDENT{1.5cm}{$\circ$ reduce}
+\INDENT{2.5cm}{note shifting is favoured over reducing}
+
+\fbreak
+\hrule
+@*3 \QUEshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\QUEshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_questionable_shift_operator();
+
+@*3 \QUEshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\QUEshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_questionable_shift_operator::LR1_questionable_shift_operator()
+ T_CTOR("|?|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_questionable_shift_operator LR1_questionable_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_questionable_shift_operator__
+= &LR1_questionable_shift_operator__;
+
+@*2 {\bf \REDshift{}}.\fbreak
+Enum: T\_LR1\_reduce\_operator\_
+\fbreak
+\line{Class: LR1\_reduce\_operator \hfil AB: Y \hfil AD: Y}
+
+
+ Its presence within the individual state of
+ the ``fsm'' table is to force a reduce operation.
+ Why? it's a back-to-back
+ situation within the state table whereby a thread should reduce
+ while its reducing lookahead is the \paralleloperator indicating to run a thread.
+
+\fbreak
+\hrule
+@*2 {\bf \TRAshift{}}.\fbreak
+Enum: T\_LR1\_fset\_transience\_operator\_
+\fbreak
+\line{Class: LR1\_fset\_transience\_operator \hfil AB: Y \hfil AD: Y}
+
+
+ \TRAshift has dual purposes: used in \O2linker to process the transient
+ first sets generated by threads, and used within a grammar's
+``chained call procedure'' expression to lower thread overhead by
+calling a procedure with explicit intent on double use of its
+``first set'' token.
+I'll give an example of a ``chained procedure call'' expression drawn from
+the ``pass3.lex'' grammar handling the grammar's file include expression:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rprefile\_inc\_dispatcher}
+\fbreak
+The ``Rprefile\_inc\_dispatcher'' grammar rule has the following subrule:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule \TRAshift "file-inclusion" NS\_prefile\_include::PROC\_TH\_prefile\_include}
+\fbreak
+The ``chained'' part is in the duplicating of ``\ATsign'';
+that is, the parsing mechanism does not get a new terminal when shifted but
+passes this T onto the called procedure.
+The called PROC\_TH\_prefile\_include procedure / thread has its
+start rule as:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rpossible\_ws Rfile\_string Reof}
+\fbreak
+The repeated use of ``\ATsign'' was to reenforce the idea
+that the procedure called cuz of ``\ATsign'': there's that ``first set'' again.
+Well time will pass its comments on this thought process.
+
+\fbreak
+\hrule
+@*3 \TRAshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\TRAshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_fset_transience_operator();
+
+@*3 \TRAshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\TRAshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_fset_transience_operator::LR1_fset_transience_operator()
+ T_CTOR("|t|",T_LR1_fset_transience_operator_,0,false,false)
+ {}
+ LR1_fset_transience_operator LR1_fset_transience_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__
+ = &LR1_fset_transience_operator__;
+
+@*2 {\bf \PARshift{}}.\fbreak
+Enum: T\_LR1\_parallel\_operator\_
+\fbreak
+\line{Class: LR1\_parallel\_operator \hfil AB: N \hfil AD: N}
+
+
+ Its presence within the individual state of
+ the ``fsm'' table dictates potential threads to run.
+ You see it sprinkled throughout my grammars
+ to call threads.
+ This is part of \O2's raison d'{\^e}tre.
+
+\fbreak
+\hrule
+@*3 \PARshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\PARshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_parallel_operator();
+
+@*3 \PARshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\PARshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_parallel_operator::LR1_parallel_operator()
+ T_CTOR("|||",T_LR1_parallel_operator_,0,false,false)
+ {}
+ LR1_parallel_operator LR1_parallel_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_parallel_operator__
+= &LR1_parallel_operator__;
+
+@*1 {\bf lrk-sufx} directive.\fbreak
+
+As they are constants, they are defined globally
+to save space / overhead in the typical new create / delete
+cycle of terminals. Thar's recycling going on in this green space.
+
+@<lrk-sufx directive@>=
+
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_fset_transience_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_invisible_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_questionable_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_all_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+
+
+@** Index.
diff --git a/web/yacco2/compiler/grammars/T.w b/web/yacco2/compiler/grammars/T.w
new file mode 100644
index 0000000000..2b3b411cc2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T.w
@@ -0,0 +1,4116 @@
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+\DOCtitle{Terminal Vocabulary}{yacco2\_terminals}
+{NS\_yacco2\_terminals}{114}
+
+@i "/yacco2/copyright.w"
+@** Terminal vocabulary.\fbreak
+There are some terminals that spoof the grammar's keywords like
+``\#fsm''. The keyword recognizer recognizes the character string
+of ``fsm'' but how do u define it and reference it within the
+grammars defining \O2's very own language: the
+conundrum of the grammar defining itself?
+Ahh to recurse or not to curse, that is the?
+Well this is my take.
+The logical keys are just proxy material.
+
+@*2 {\bf Terminals-refs} directive.\fbreak
+
+Makesure c++ forward references compile.
+
+@<terminals-refs directive@>=
+
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+struct T_called_thread_eosubrule;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+struct T_rules_phrase;
+struct T_subrules_phrase;
+struct T_rhs_bnd;
+struct refered_rule;
+struct rule_def;
+struct refered_T;
+struct T_in_stbl;
+struct rule_in_stbl;
+extern yacco2::CAbs_lr1_sym* PTR_lint__;
+extern yacco2::CAbs_lr1_sym* PTR_ws__;
+extern yacco2::CAbs_lr1_sym* PTR_eol__;
+
+
+@*2 {\bf \NOsign \ASTERICsign{}\ASTERICsign{}\ASTERICsign{}}.\fbreak
+Enum: T\_T\_eocode\_
+\fbreak
+\line{Class: T\_eocode \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword ending syntax directed code block.
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign AB}.\fbreak
+Enum: T\_T\_AB\_
+\fbreak
+\line{Class: T\_AB \hfil AB: N \hfil AD: N}
+
+
+``AB'' means auto-abort.
+This attribute when present with any grammar's vocabulary definition ---
+rules or terminals,
+allows proper cleanup when a grammar aborts parsing.
+Rules always have this attribute turned on to
+house clean their parse tracings in any situation.
+Terminal definitions left on the aborted parse stack
+are also deleted if their ``AB'' attribute is on.
+This forced cleanup of the parse stack brings the grammar
+back to normalcy.
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign AD}.\fbreak
+Enum: T\_T\_AD\_
+\fbreak
+\line{Class: T\_AD \hfil AB: N \hfil AD: N}
+
+
+``AD'' means auto-delete.
+This attribute when present with any grammar's vocabulary definition ---
+rules or terminals,
+indicates
+that the symbol is deleted when popped from
+the parse stack.
+Rules always have this attribute turned on.
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign NULL}.\fbreak
+Enum: T\_T\_NULL\_
+\fbreak
+\line{Class: T\_NULL \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign T-enumeration}.\fbreak
+Enum: T\_T\_enumeration\_
+\fbreak
+\line{Class: T\_enumeration \hfil AB: Y \hfil AD: N}
+
+
+Introduces the enumeration construct of the grammar.
+The 1 + 2 + 3 scheme counting of the symbols.
+
+\fbreak
+\hrule
+@*3 \NOsign T-enumeration destructor directive.
+@<\NOsign T-enumeration destructor directive@>=
+
+ if(R->enum_phrase_ != 0)
+ delete R->enum_phrase_;
+
+@*3 \NOsign T-enumeration user-declaration directive.
+@<\NOsign T-enumeration user-declaration directive@>=
+
+ public:
+ T_enumeration();
+ void enum_phrase(T_enum_phrase* Phrase);
+ T_enum_phrase* enum_phrase();
+ private:T_enum_phrase* enum_phrase_;
+
+@*3 \NOsign T-enumeration user-implementation directive.
+@<\NOsign T-enumeration user-implementation directive@>=
+
+ T_enumeration::T_enumeration()
+ T_CTOR("#T-enumeration",T_Enum::T_T_enumeration_,&dtor_T_enumeration,false,true)
+ {enum_phrase_ = 0;}
+ T_enum_phrase* T_enumeration::enum_phrase(){return enum_phrase_;}
+ void T_enumeration::enum_phrase(T_enum_phrase* Phrase){enum_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign arbitrator-code}.\fbreak
+Enum: T\_T\_arbitrator\_code\_
+\fbreak
+\line{Class: T\_arbitrator\_code \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword introducing c++ arbitration code within the grammar's rule.
+
+\fbreak
+\hrule
+@*3 \NOsign arbitrator-code user-declaration directive.
+@<\NOsign arbitrator-code user-declaration directive@>=
+
+ public:
+ T_arbitrator_code();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_syntax_code* syntax_code_;
+ AST* cweb_marker_;
+
+@*3 \NOsign arbitrator-code user-implementation directive.
+@<\NOsign arbitrator-code user-implementation directive@>=
+
+ T_arbitrator_code::T_arbitrator_code()
+ T_CTOR("#arbitrator-code",T_Enum::T_T_arbitrator_code_,0,false,false)
+ {syntax_code_ = 0;cweb_marker_=0;}
+ T_syntax_code* T_arbitrator_code::syntax_code(){return syntax_code_;}
+ void T_arbitrator_code::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ void T_arbitrator_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_arbitrator_code::cweb_marker(){
+ return cweb_marker_;
+ }
+
+@*2 {\bf \NOsign constant-defs}.\fbreak
+Enum: T\_T\_constant\_defs\_
+\fbreak
+\line{Class: T\_constant\_defs \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign constructor}.\fbreak
+Enum: T\_T\_constructor\_
+\fbreak
+\line{Class: T\_constructor \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign constructor user-declaration directive.
+@<\NOsign constructor user-declaration directive@>=
+
+ public:
+ T_constructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign constructor user-implementation directive.
+@<\NOsign constructor user-implementation directive@>=
+
+ T_constructor::T_constructor()
+ T_CTOR("#constructor",T_Enum::T_T_constructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_constructor::syntax_code(){return syntax_code_;}
+ void T_constructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign destructor}.\fbreak
+Enum: T\_T\_destructor\_
+\fbreak
+\line{Class: T\_destructor \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign destructor user-declaration directive.
+@<\NOsign destructor user-declaration directive@>=
+
+ public:
+ T_destructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign destructor user-implementation directive.
+@<\NOsign destructor user-implementation directive@>=
+
+ T_destructor::T_destructor()
+ T_CTOR("#destructor",T_Enum::T_T_destructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_destructor::syntax_code(){return syntax_code_;}
+ void T_destructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign error-symbols}.\fbreak
+Enum: T\_T\_error\_symbols\_
+\fbreak
+\line{Class: T\_error\_symbols \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword introducing the Errors vocabulary.
+
+\fbreak
+\hrule
+@*3 \NOsign error-symbols destructor directive.
+@<\NOsign error-symbols destructor directive@>=
+
+ if(R->error_symbols_phrase_ != 0)
+ delete R->error_symbols_phrase_;
+
+@*3 \NOsign error-symbols user-declaration directive.
+@<\NOsign error-symbols user-declaration directive@>=
+
+ public:
+ T_error_symbols();
+ void error_symbols_phrase(T_error_symbols_phrase* Phrase);
+ T_error_symbols_phrase* error_symbols_phrase();
+ private:T_error_symbols_phrase* error_symbols_phrase_;
+
+@*3 \NOsign error-symbols user-implementation directive.
+@<\NOsign error-symbols user-implementation directive@>=
+
+ T_error_symbols::T_error_symbols()
+T_CTOR("#error-symbols",T_Enum::T_T_error_symbols_,&dtor_T_error_symbols,false,false)
+ {error_symbols_phrase_ = 0;}
+ T_error_symbols_phrase*
+ T_error_symbols::error_symbols_phrase(){return error_symbols_phrase_;}
+ void T_error_symbols::
+ error_symbols_phrase(T_error_symbols_phrase* Phrase){error_symbols_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign failed}.\fbreak
+Enum: T\_T\_failed\_
+\fbreak
+\line{Class: T\_failed \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign failed user-declaration directive.
+@<\NOsign failed user-declaration directive@>=
+
+ public:
+ T_failed();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign failed user-implementation directive.
+@<\NOsign failed user-implementation directive@>=
+
+ T_failed::T_failed()
+ T_CTOR("#failed",T_Enum::T_T_failed_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_failed::syntax_code(){return syntax_code_;}
+ void T_failed::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign file-name}.\fbreak
+Enum: T\_T\_file\_name\_
+\fbreak
+\line{Class: T\_file\_name \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm}.\fbreak
+Enum: T\_T\_fsm\_
+\fbreak
+\line{Class: T\_fsm \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign fsm destructor directive.
+@<\NOsign fsm destructor directive@>=
+
+ if(R->fsm_phrase_ != 0)
+ delete R->fsm_phrase_;
+
+@*3 \NOsign fsm user-declaration directive.
+@<\NOsign fsm user-declaration directive@>=
+
+ public:
+ T_fsm();
+ void fsm_phrase(T_fsm_phrase* Phrase);
+ T_fsm_phrase* fsm_phrase();
+ private:T_fsm_phrase* fsm_phrase_;
+
+@*3 \NOsign fsm user-implementation directive.
+@<\NOsign fsm user-implementation directive@>=
+
+ T_fsm::T_fsm()
+ T_CTOR("#fsm",T_Enum::T_T_fsm_,&dtor_T_fsm,false,false)
+ {fsm_phrase_ = 0;}
+ T_fsm_phrase* T_fsm::fsm_phrase(){return fsm_phrase_;}
+ void T_fsm::fsm_phrase(T_fsm_phrase* Phrase){fsm_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign fsm-class}.\fbreak
+Enum: T\_T\_fsm\_class\_
+\fbreak
+\line{Class: T\_fsm\_class \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-comments}.\fbreak
+Enum: T\_T\_fsm\_comments\_
+\fbreak
+\line{Class: T\_fsm\_comments \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-date}.\fbreak
+Enum: T\_T\_fsm\_date\_
+\fbreak
+\line{Class: T\_fsm\_date \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-debug}.\fbreak
+Enum: T\_T\_fsm\_debug\_
+\fbreak
+\line{Class: T\_fsm\_debug \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-filename}.\fbreak
+Enum: T\_T\_fsm\_filename\_
+\fbreak
+\line{Class: T\_fsm\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-id}.\fbreak
+Enum: T\_T\_fsm\_id\_
+\fbreak
+\line{Class: T\_fsm\_id \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-namespace}.\fbreak
+Enum: T\_T\_fsm\_namespace\_
+\fbreak
+\line{Class: T\_fsm\_namespace \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign fsm-version}.\fbreak
+Enum: T\_T\_fsm\_version\_
+\fbreak
+\line{Class: T\_fsm\_version \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign lhs}.\fbreak
+Enum: T\_T\_lhs\_
+\fbreak
+\line{Class: T\_lhs \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign lr1-constant-symbols}.\fbreak
+Enum: T\_T\_lr1\_constant\_symbols\_
+\fbreak
+\line{Class: T\_lr1\_constant\_symbols \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword introducing the lr constants vocabulary.
+
+\fbreak
+\hrule
+@*3 \NOsign lr1-constant-symbols destructor directive.
+@<\NOsign lr1-constant-symbols destructor directive@>=
+
+ if(R->lr1_k_phrase_ != 0)
+ delete R->lr1_k_phrase_;
+
+@*3 \NOsign lr1-constant-symbols user-declaration directive.
+@<\NOsign lr1-constant-symbols user-declaration directive@>=
+
+ public:
+ T_lr1_constant_symbols();
+ void lr1_k_phrase(T_lr1_k_phrase* Phrase);
+ T_lr1_k_phrase* lr1_k_phrase();
+ private:T_lr1_k_phrase* lr1_k_phrase_;
+
+@*3 \NOsign lr1-constant-symbols user-implementation directive.
+@<\NOsign lr1-constant-symbols user-implementation directive@>=
+
+ T_lr1_constant_symbols::T_lr1_constant_symbols()
+T_CTOR("#lr1-constant-symbols",T_Enum::T_T_lr1_constant_symbols_,&dtor_T_lr1_constant_symbols,false,false)
+ {lr1_k_phrase_ = 0;}
+ T_lr1_k_phrase* T_lr1_constant_symbols::lr1_k_phrase(){return lr1_k_phrase_;}
+ void T_lr1_constant_symbols::lr1_k_phrase(T_lr1_k_phrase* Phrase){lr1_k_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign lrk-sufx}.\fbreak
+Enum: T\_T\_lrk\_sufx\_
+\fbreak
+\line{Class: T\_lrk\_sufx \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign name-space}.\fbreak
+Enum: T\_T\_name\_space\_
+\fbreak
+\line{Class: T\_name\_space \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign op}.\fbreak
+Enum: T\_T\_op\_
+\fbreak
+\line{Class: T\_op \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign op user-declaration directive.
+@<\NOsign op user-declaration directive@>=
+
+ public:
+ T_op();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign op user-implementation directive.
+@<\NOsign op user-implementation directive@>=
+
+ T_op::T_op()
+ T_CTOR("#op",T_Enum::T_T_op_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_op::syntax_code(){return syntax_code_;}
+ void T_op::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign parallel-control-monitor}.\fbreak
+Enum: T\_T\_parallel\_control\_monitor\_
+\fbreak
+\line{Class: T\_parallel\_control\_monitor \hfil AB: N \hfil AD: N}
+
+
+Introduction of the rule's arbitration.
+For the moment, all rules using a thread call need this
+grammar construct that introduces
+the arbitration logic.
+Most rules do not need to arbitrate.
+It is determinist in the returned terminal from
+threads.
+So why must it be present?
+Only cuz of my frontend hacking of ideas.
+It will be corrected to simplifiy the grammar code.
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign parallel-la-boundary}.\fbreak
+Enum: T\_T\_parallel\_la\_boundary\_
+\fbreak
+\line{Class: T\_parallel\_la\_boundary \hfil AB: N \hfil AD: N}
+
+
+Thread lookahead first set.
+
+\fbreak
+\hrule
+@*3 \NOsign parallel-la-boundary user-declaration directive.
+@<\NOsign parallel-la-boundary user-declaration directive@>=
+
+ public:
+ T_parallel_la_boundary();
+ void la_first_set(std::set<T_in_stbl*>& Supplier);
+ std::set<T_in_stbl*>* la_first_set();
+ void la_supplier(yacco2::TOKEN_GAGGLE* Supplier);
+ yacco2::TOKEN_GAGGLE* la_supplier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void cweb_la_srce_expr(const char* Srce_expr);
+ std::string* cweb_la_srce_expr();
+ private:
+ std::set<T_in_stbl*> la_first_set_;
+ std::string cweb_la_srce_expr_;
+ AST* cweb_marker_;
+ yacco2::TOKEN_GAGGLE* la_supplier_;
+
+@*3 \NOsign parallel-la-boundary user-implementation directive.
+@<\NOsign parallel-la-boundary user-implementation directive@>=
+
+ T_parallel_la_boundary::T_parallel_la_boundary()
+ T_CTOR("#parallel-la-boundary",T_Enum::T_T_parallel_la_boundary_,0,false,false)
+ {la_supplier_ = 0;
+ cweb_marker_=0;
+ }
+ void T_parallel_la_boundary::cweb_la_srce_expr(const char* Srce_expr){
+ cweb_la_srce_expr_.append(Srce_expr);
+ }
+ std::string* T_parallel_la_boundary::cweb_la_srce_expr(){
+ return &cweb_la_srce_expr_;
+ }
+
+ yacco2::TOKEN_GAGGLE* T_parallel_la_boundary::la_supplier(){return la_supplier_;}
+ void T_parallel_la_boundary::la_supplier(yacco2::TOKEN_GAGGLE* Supplier)
+ {la_supplier_ = Supplier;}
+
+ void T_parallel_la_boundary::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_la_boundary::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ std::set<T_in_stbl*>* T_parallel_la_boundary::la_first_set()
+ {return &la_first_set_;}
+ void T_parallel_la_boundary::la_first_set(std::set<T_in_stbl*>& Supplier)
+ {
+ la_first_set_.insert(Supplier.begin(),Supplier.end());
+ }
+
+@*2 {\bf \NOsign parallel-parser}.\fbreak
+Enum: T\_T\_parallel\_parser\_
+\fbreak
+\line{Class: T\_parallel\_parser \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword introducing the grammar as a thread:
+all the debutant's coming out like its thread name
+and look ahead expression.
+
+\fbreak
+\hrule
+@*3 \NOsign parallel-parser destructor directive.
+@<\NOsign parallel-parser destructor directive@>=
+
+ if(R->parallel_parser_phrase_ != 0)
+ delete R->parallel_parser_phrase_;
+
+@*3 \NOsign parallel-parser user-declaration directive.
+@<\NOsign parallel-parser user-declaration directive@>=
+
+ public:
+ T_parallel_parser();
+ void parallel_parser_phrase(T_parallel_parser_phrase* Phrase);
+ T_parallel_parser_phrase* parallel_parser_phrase();
+ private:T_parallel_parser_phrase* parallel_parser_phrase_;
+
+@*3 \NOsign parallel-parser user-implementation directive.
+@<\NOsign parallel-parser user-implementation directive@>=
+
+ T_parallel_parser::T_parallel_parser()
+ T_CTOR("#parallel-parser",T_Enum::T_T_parallel_parser_,&dtor_T_parallel_parser,false,false)
+ {parallel_parser_phrase_ = 0;}
+ T_parallel_parser_phrase*
+ T_parallel_parser::parallel_parser_phrase(){return parallel_parser_phrase_;}
+ void T_parallel_parser::parallel_parser_phrase
+ (T_parallel_parser_phrase* Phrase){parallel_parser_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign parallel-thread-function}.\fbreak
+Enum: T\_T\_parallel\_thread\_function\_
+\fbreak
+\line{Class: T\_parallel\_thread\_function \hfil AB: N \hfil AD: N}
+
+
+The grammar thread's name construct.
+
+\fbreak
+\hrule
+@*3 \NOsign parallel-thread-function user-declaration directive.
+@<\NOsign parallel-thread-function user-declaration directive@>=
+
+ public:
+ T_parallel_thread_function();
+ void identifier(T_identifier* Id);
+ T_identifier* identifier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_identifier* id_;
+ AST* cweb_marker_;
+
+@*3 \NOsign parallel-thread-function user-implementation directive.
+@<\NOsign parallel-thread-function user-implementation directive@>=
+
+ T_parallel_thread_function::T_parallel_thread_function()
+ T_CTOR("#parallel-thread-function",T_Enum::T_T_parallel_thread_function_,0,false,false)
+ {id_ = 0;cweb_marker_=0;}
+ T_identifier* T_parallel_thread_function::identifier(){return id_;}
+ void T_parallel_thread_function::identifier(T_identifier* Id){id_ = Id;}
+ void T_parallel_thread_function::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_parallel_thread_function::cweb_marker(){
+ return cweb_marker_;
+ }
+
+@*2 {\bf \NOsign raw-characters}.\fbreak
+Enum: T\_T\_raw\_characters\_
+\fbreak
+\line{Class: T\_raw\_characters \hfil AB: N \hfil AD: N}
+
+
+\O2's keyword introducing the raw characters vocabulary.
+
+\fbreak
+\hrule
+@*3 \NOsign raw-characters destructor directive.
+@<\NOsign raw-characters destructor directive@>=
+
+ if(R->rc_phrase_!=0)
+ delete R->rc_phrase_;
+
+@*3 \NOsign raw-characters user-declaration directive.
+@<\NOsign raw-characters user-declaration directive@>=
+
+ public:
+ T_raw_characters();
+ void rc_phrase(T_rc_phrase* Phrase);
+ T_rc_phrase* rc_phrase();
+ private:T_rc_phrase* rc_phrase_;
+
+@*3 \NOsign raw-characters user-implementation directive.
+@<\NOsign raw-characters user-implementation directive@>=
+
+ T_raw_characters::T_raw_characters()
+ T_CTOR("#raw-characters",T_Enum::T_T_raw_characters_,&dtor_T_raw_characters,false,false)
+ {rc_phrase_ = 0;}
+ T_rc_phrase* T_raw_characters::rc_phrase(){return rc_phrase_;}
+ void T_raw_characters::rc_phrase(T_rc_phrase* Phrase){rc_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign rules}.\fbreak
+Enum: T\_T\_rules\_
+\fbreak
+\line{Class: T\_rules \hfil AB: Y \hfil AD: N}
+
+
+Introduces the rules construct of the grammar.
+
+\fbreak
+\hrule
+@*3 \NOsign rules destructor directive.
+@<\NOsign rules destructor directive@>=
+
+ if(R->rules_phrase_ != 0)
+ delete R->rules_phrase_;
+
+@*3 \NOsign rules user-declaration directive.
+@<\NOsign rules user-declaration directive@>=
+
+ public:
+ T_rules();
+ void rules_phrase(T_rules_phrase* Phrase);
+ T_rules_phrase* rules_phrase();
+ private:T_rules_phrase* rules_phrase_;
+
+@*3 \NOsign rules user-implementation directive.
+@<\NOsign rules user-implementation directive@>=
+
+ T_rules::T_rules()
+ T_CTOR("#rules",T_Enum::T_T_rules_,&dtor_T_rules,false,true)
+ {rules_phrase_ = 0;}
+ T_rules_phrase* T_rules::rules_phrase(){return rules_phrase_;}
+ void T_rules::rules_phrase(T_rules_phrase* Phrase){rules_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign sym-class}.\fbreak
+Enum: T\_T\_sym\_class\_
+\fbreak
+\line{Class: T\_sym\_class \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign terminals}.\fbreak
+Enum: T\_T\_terminals\_
+\fbreak
+\line{Class: T\_terminals \hfil AB: Y \hfil AD: N}
+
+
+Introduces the Terminal vocabulary phrase of the grammar.
+Note the ``auto abort'' indicator that should match with the |CTOR| macro.
+Which vice is it?
+
+\fbreak
+\hrule
+@*3 \NOsign terminals destructor directive.
+@<\NOsign terminals destructor directive@>=
+
+ if(R->terminals_phrase_ != 0)
+ delete R->terminals_phrase_;
+
+@*3 \NOsign terminals user-declaration directive.
+@<\NOsign terminals user-declaration directive@>=
+
+ public:
+ T_terminals();
+ void terminals_phrase(T_terminals_phrase* Phrase);
+ T_terminals_phrase* terminals_phrase();
+ private:T_terminals_phrase* terminals_phrase_;
+
+@*3 \NOsign terminals user-implementation directive.
+@<\NOsign terminals user-implementation directive@>=
+
+ T_terminals::T_terminals()
+ T_CTOR("#terminals",T_Enum::T_T_terminals_,&dtor_T_terminals,false,true)
+ {terminals_phrase_ = 0;}
+ T_terminals_phrase* T_terminals::terminals_phrase(){return terminals_phrase_;}
+ void T_terminals::terminals_phrase(T_terminals_phrase* Phrase)
+ {terminals_phrase_ = Phrase;}
+
+@*2 {\bf \NOsign terminals-refs}.\fbreak
+Enum: T\_T\_terminals\_refs\_
+\fbreak
+\line{Class: T\_terminals\_refs \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign terminals-sufx}.\fbreak
+Enum: T\_T\_terminals\_sufx\_
+\fbreak
+\line{Class: T\_terminals\_sufx \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf \NOsign user-declaration}.\fbreak
+Enum: T\_T\_user\_declaration\_
+\fbreak
+\line{Class: T\_user\_declaration \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-declaration user-declaration directive.
+@<\NOsign user-declaration user-declaration directive@>=
+
+ public:
+ T_user_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-declaration user-implementation directive.
+@<\NOsign user-declaration user-implementation directive@>=
+
+ T_user_declaration::T_user_declaration()
+ T_CTOR("#user-declaration",T_Enum::T_T_user_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_declaration::syntax_code(){return syntax_code_;}
+ void T_user_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign user-imp-sym}.\fbreak
+Enum: T\_T\_user\_imp\_sym\_
+\fbreak
+\line{Class: T\_user\_imp\_sym \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-imp-sym user-declaration directive.
+@<\NOsign user-imp-sym user-declaration directive@>=
+
+ public:
+ T_user_imp_sym();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-imp-sym user-implementation directive.
+@<\NOsign user-imp-sym user-implementation directive@>=
+
+ T_user_imp_sym::T_user_imp_sym()
+ T_CTOR("#user-imp-sym",T_Enum::T_T_user_imp_sym_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_sym::syntax_code(){return syntax_code_;}
+ void T_user_imp_sym::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign user-imp-tbl}.\fbreak
+Enum: T\_T\_user\_imp\_tbl\_
+\fbreak
+\line{Class: T\_user\_imp\_tbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-imp-tbl user-declaration directive.
+@<\NOsign user-imp-tbl user-declaration directive@>=
+
+ public:
+ T_user_imp_tbl();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-imp-tbl user-implementation directive.
+@<\NOsign user-imp-tbl user-implementation directive@>=
+
+ T_user_imp_tbl::T_user_imp_tbl()
+ T_CTOR("#user-imp-tbl",T_Enum::T_T_user_imp_tbl_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_tbl::syntax_code(){return syntax_code_;}
+ void T_user_imp_tbl::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign user-implementation}.\fbreak
+Enum: T\_T\_user\_implementation\_
+\fbreak
+\line{Class: T\_user\_implementation \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-implementation user-declaration directive.
+@<\NOsign user-implementation user-declaration directive@>=
+
+ public:
+ T_user_implementation();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-implementation user-implementation directive.
+@<\NOsign user-implementation user-implementation directive@>=
+
+ T_user_implementation::T_user_implementation()
+ T_CTOR("#user-implementation",T_Enum::T_T_user_implementation_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_implementation::syntax_code(){return syntax_code_;}
+ void T_user_implementation::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign user-prefix-declaration}.\fbreak
+Enum: T\_T\_user\_prefix\_declaration\_
+\fbreak
+\line{Class: T\_user\_prefix\_declaration \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-prefix-declaration user-declaration directive.
+@<\NOsign user-prefix-declaration user-declaration directive@>=
+
+ public:
+ T_user_prefix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-prefix-declaration user-implementation directive.
+@<\NOsign user-prefix-declaration user-implementation directive@>=
+
+ T_user_prefix_declaration::T_user_prefix_declaration()
+ T_CTOR("#user-prefix-declaration",T_Enum::T_T_user_prefix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_prefix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_prefix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf \NOsign user-suffix-declaration}.\fbreak
+Enum: T\_T\_user\_suffix\_declaration\_
+\fbreak
+\line{Class: T\_user\_suffix\_declaration \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 \NOsign user-suffix-declaration user-declaration directive.
+@<\NOsign user-suffix-declaration user-declaration directive@>=
+
+ public:
+ T_user_suffix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+
+@*3 \NOsign user-suffix-declaration user-implementation directive.
+@<\NOsign user-suffix-declaration user-implementation directive@>=
+
+ T_user_suffix_declaration::T_user_suffix_declaration()
+ T_CTOR("#user-suffix-declaration",T_Enum::T_T_user_suffix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_suffix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_suffix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+@*2 {\bf -\GTsign{}}.\fbreak
+Enum: T\_T\_selector\_
+\fbreak
+\line{Class: T\_selector \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf ::}.\fbreak
+Enum: T\_T\_2colon\_
+\fbreak
+\line{Class: T\_2colon \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf T-alphabet}.\fbreak
+Enum: T\_T\_T\_alphabet\_
+\fbreak
+\line{Class: T\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf T-attributes}.\fbreak
+Enum: T\_T\_attributes\_
+\fbreak
+\line{Class: T\_attributes \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 T-attributes user-declaration directive.
+@<T-attributes user-declaration directive@>=
+
+ public:
+T_attributes(const char* Fully_qualified_T_name,int Enum);
+std::string fully_qualified_T_name_;
+ int T_enum_;
+
+@*3 T-attributes user-implementation directive.
+@<T-attributes user-implementation directive@>=
+
+ T_attributes::T_attributes(const char* Fully_qualified_T_name,int Enum)
+ T_CTOR("T-attributes",T_Enum::T_T_attributes_,0,false,false)
+ {fully_qualified_T_name_ += Fully_qualified_T_name;
+ T_enum_ = Enum;
+ }
+
+@*2 {\bf T-enum-phrase}.\fbreak
+Enum: T\_T\_enum\_phrase\_
+\fbreak
+\line{Class: T\_enum\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 T-enum-phrase destructor directive.
+@<T-enum-phrase destructor directive@>=
+
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->kdefs_;
+
+@*3 T-enum-phrase user-declaration directive.
+@<T-enum-phrase user-declaration directive@>=
+
+ public:
+ T_enum_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_syntax_code* kdefs();
+ void kdefs(T_syntax_code* Kdefs);
+ void start_lrk_enumerate(int Enum);
+ void stop_lrk_enumerate(int Enum);
+ int start_lrk_enumerate();
+ int stop_lrk_enumerate();
+ void start_err_enumerate(int Enum);
+ void stop_err_enumerate(int Enum);
+ int start_err_enumerate();
+ int stop_err_enumerate();
+ void start_rc_enumerate(int Enum);
+ void stop_rc_enumerate(int Enum);
+ int start_rc_enumerate();
+ int stop_rc_enumerate();
+ void start_T_enumerate(int Enum);
+ void stop_T_enumerate(int Enum);
+ int start_T_enumerate();
+ int stop_T_enumerate();
+
+ int total_T_enumerate();
+ void total_T_enumerate(int Enum);
+ int total_rc_enumerate();
+ void total_rc_enumerate(int Enum);
+ int total_err_enumerate();
+ void total_err_enumerate(int Enum);
+ int total_lrk_enumerate();
+ void total_lrk_enumerate(int Enum);
+ void total_enumerate(int Enum);
+ int total_enumerate();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ int total_no_subrules();
+ void total_no_subrules(int Total_subrules);
+ private:
+ T_syntax_code* kdefs_;
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ int start_lrk_enumerate_;
+ int stop_lrk_enumerate_;
+ int start_err_enumerate_;
+ int stop_err_enumerate_;
+ int start_rc_enumerate_;
+ int stop_rc_enumerate_;
+ int start_T_enumerate_;
+ int stop_T_enumerate_;
+ int total_enumerate_;
+ int total_T_enumerate_;
+ int total_rc_enumerate_;
+ int total_err_enumerate_;
+ int total_lrk_enumerate_;
+ int total_no_subrules_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 T-enum-phrase user-implementation directive.
+@<T-enum-phrase user-implementation directive@>=
+
+ T_enum_phrase::T_enum_phrase()
+ T_CTOR("T-enum-phrase",T_Enum::T_T_enum_phrase_,&dtor_T_enum_phrase,false,false)
+ {kdefs_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_enum_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_enum_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_enum_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_enum_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_enum_phrase::filename_id(){return filename_id_;}
+ void T_enum_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_enum_phrase::namespace_id(){return namespace_id_;}
+ void T_enum_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_syntax_code*
+ T_enum_phrase::kdefs(){return kdefs_;}
+
+ void T_enum_phrase::kdefs(T_syntax_code* Kdefs){
+ kdefs_ = Kdefs;
+ }
+ void T_enum_phrase::start_lrk_enumerate(int Enum){start_lrk_enumerate_ = Enum;}
+ void T_enum_phrase::stop_lrk_enumerate(int Enum){stop_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::start_lrk_enumerate(){return start_lrk_enumerate_;}
+ int T_enum_phrase::stop_lrk_enumerate(){return stop_lrk_enumerate_;}
+ void T_enum_phrase::start_err_enumerate(int Enum){start_err_enumerate_ = Enum;}
+ void T_enum_phrase::stop_err_enumerate(int Enum){stop_err_enumerate_ = Enum;}
+ int T_enum_phrase::start_err_enumerate(){return start_err_enumerate_;}
+ int T_enum_phrase::stop_err_enumerate(){return stop_err_enumerate_;}
+ void T_enum_phrase::start_rc_enumerate(int Enum){start_rc_enumerate_ = Enum;}
+ void T_enum_phrase::stop_rc_enumerate(int Enum){stop_rc_enumerate_ = Enum;}
+ int T_enum_phrase::start_rc_enumerate(){return start_rc_enumerate_;}
+ int T_enum_phrase::stop_rc_enumerate(){return stop_rc_enumerate_;}
+ void T_enum_phrase::start_T_enumerate(int Enum){start_T_enumerate_ = Enum;}
+ void T_enum_phrase::stop_T_enumerate(int Enum){stop_T_enumerate_ = Enum;}
+ int T_enum_phrase::start_T_enumerate(){return start_T_enumerate_;}
+ int T_enum_phrase::stop_T_enumerate(){return stop_T_enumerate_;}
+ void T_enum_phrase::total_enumerate(int Enum){total_enumerate_ = Enum;}
+ int T_enum_phrase::total_enumerate(){return total_enumerate_;}
+
+ void T_enum_phrase::total_T_enumerate(int Enum){total_T_enumerate_ = Enum;}
+ int T_enum_phrase::total_T_enumerate(){return total_T_enumerate_;}
+ void T_enum_phrase::total_rc_enumerate(int Enum){total_rc_enumerate_ = Enum;}
+ int T_enum_phrase::total_rc_enumerate(){return total_rc_enumerate_;}
+ void T_enum_phrase::total_err_enumerate(int Enum){total_err_enumerate_ = Enum;}
+ int T_enum_phrase::total_err_enumerate(){return total_err_enumerate_;}
+ void T_enum_phrase::total_lrk_enumerate(int Enum){total_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::total_lrk_enumerate(){return total_lrk_enumerate_;}
+ int T_enum_phrase::total_no_subrules(){return total_no_subrules_;}
+ void T_enum_phrase::total_no_subrules(int Total_subrules){
+ total_no_subrules_ = Total_subrules;
+ }
+
+@*2 {\bf T-in-stbl}.\fbreak
+Enum: T\_T\_in\_stbl\_
+\fbreak
+\line{Class: T\_in\_stbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 T-in-stbl user-declaration directive.
+@<T-in-stbl user-declaration directive@>=
+
+ public:
+ T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_terminal_def* t_def();
+ std::list<refered_T*>* xref_t();
+ void add_T_into_xref(refered_T& T);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_terminal_def* t_def_;
+ std::list<refered_T*> xref_t_;
+ int stbl_idx_;
+
+@*3 T-in-stbl user-implementation directive.
+@<T-in-stbl user-implementation directive@>=
+
+T_in_stbl::T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("T-in-stbl",T_Enum::T_T_in_stbl_,0,false,false)
+ {t_def_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_terminal_def* T_in_stbl::t_def(){
+ return t_def_;
+ }
+ std::list<refered_T*>* T_in_stbl::xref_t(){
+ return &xref_t_;;
+ }
+ void T_in_stbl::add_T_into_xref(refered_T& T){
+ xref_t_.push_back(&T);
+ }
+ void T_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int T_in_stbl::stbl_idx(){return stbl_idx_;}
+
+@*2 {\bf angled-string}.\fbreak
+Enum: T\_T\_angled\_string\_
+\fbreak
+\line{Class: T\_angled\_string \hfil AB: N \hfil AD: N}
+
+
+Returned from |angled_string| grammar whereby the
+|angled_string_| contains its content without the angle bars.
+Escape sequences are verified and not converted but
+just concatenated to its content.
+
+\fbreak
+\hrule
+@*3 angled-string user-declaration directive.
+@<angled-string user-declaration directive@>=
+
+ public:
+ T_angled_string(const std::string& Angled_string);
+ std::string* angled_string();
+ private:std::string angled_string_;
+
+@*3 angled-string user-implementation directive.
+@<angled-string user-implementation directive@>=
+
+ T_angled_string::T_angled_string(const string& Angled_string)
+ T_CTOR("angled-string",T_Enum::T_T_angled_string_,0,false,false)
+ {angled_string_ = Angled_string;}
+ std::string* T_angled_string::angled_string(){return &angled_string_;}
+
+@*2 {\bf basic-char}.\fbreak
+Enum: T\_T\_basic\_char\_
+\fbreak
+\line{Class: T\_basic\_char \hfil AB: N \hfil AD: N}
+
+
+Basic source character set indicator.
+It can be used to assess the good, the bad, and the ulgy
+character traits.
+For example, prescan the characters against the
+|bad_char_set| thread and return one of the 2 terminals.
+It is left here but not used.
+
+\fbreak
+\hrule
+@*3 basic-char destructor directive.
+@<basic-char destructor directive@>=
+
+ if(R->basic_char_!=0)
+ delete R->basic_char();
+
+@*3 basic-char user-declaration directive.
+@<basic-char user-declaration directive@>=
+
+ public:
+ T_basic_char(CAbs_lr1_sym* Basic_char);
+ CAbs_lr1_sym* basic_char()const;
+ void zero_out_basic_char();
+ private:CAbs_lr1_sym* basic_char_;
+
+@*3 basic-char user-implementation directive.
+@<basic-char user-implementation directive@>=
+
+ T_basic_char::
+ T_basic_char(CAbs_lr1_sym* Basic_char)
+ T_CTOR("basic-char",T_Enum::T_T_basic_char_,&dtor_T_basic_char,false,false)
+ {basic_char_ = Basic_char;}
+ void T_basic_char::zero_out_basic_char(){basic_char_ = 0;}
+ CAbs_lr1_sym* T_basic_char::basic_char()const{return basic_char_;}
+
+@*2 {\bf block}.\fbreak
+Enum: T\_T\_block\_
+\fbreak
+\line{Class: T\_block \hfil AB: Y \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 block destructor directive.
+@<block destructor directive@>=
+
+ if(ABORT_STATUS == true){
+ yacco2::AST::zero_content(*R->ast());// break dbl delete of self
+ yacco2::AST::ast_delete(*R->ast(),ABORT_STATUS);
+ }
+
+@*3 block user-declaration directive.
+@<block user-declaration directive@>=
+
+ public:
+ T_block(yacco2::AST* Ast);
+ yacco2::AST* ast();
+ private: yacco2::AST* ast_;
+
+@*3 block user-implementation directive.
+@<block user-implementation directive@>=
+
+ T_block::
+ T_block(yacco2::AST* Ast)
+ T_CTOR("block",T_Enum::T_T_block_,&dtor_T_block,false,true)
+ {ast_ = Ast;}
+ yacco2::AST* T_block::ast(){return ast_;}
+
+@*2 {\bf c-literal}.\fbreak
+Enum: T\_T\_c\_literal\_
+\fbreak
+\line{Class: T\_c\_literal \hfil AB: N \hfil AD: N}
+
+
+Returned from |c_literal| grammar
+ recognizing a c++ literal.
+|c_literal_| contains its content without the single quotes.
+'hi there' is an example.
+Escape sequences are verified and not converted but
+ concatenated to its content.
+
+\fbreak
+\hrule
+@*3 c-literal user-declaration directive.
+@<c-literal user-declaration directive@>=
+
+ public:
+ T_c_literal(const std::string& C_literal);
+ std::string* c_literal();
+ private:std::string c_literal_;
+
+@*3 c-literal user-implementation directive.
+@<c-literal user-implementation directive@>=
+
+ T_c_literal::T_c_literal(const string& C_literal)
+ T_CTOR("c-literal",T_Enum::T_T_c_literal_,0,false,false)
+ {c_literal_ = C_literal;}
+ std::string* T_c_literal::c_literal(){return &c_literal_;}
+
+@*2 {\bf c-string}.\fbreak
+Enum: T\_T\_c\_string\_
+\fbreak
+\line{Class: T\_c\_string \hfil AB: N \hfil AD: N}
+
+
+Returned from |c_string| grammar recognizing a c++ string.
+|c_string_| contains its content without the double quotes.
+
+\fbreak
+\hrule
+@*3 c-string user-declaration directive.
+@<c-string user-declaration directive@>=
+
+ public:
+ T_c_string(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+
+@*3 c-string user-implementation directive.
+@<c-string user-implementation directive@>=
+
+ T_c_string::T_c_string(const std::string& C_string)
+ T_CTOR("c-string",T_Enum::T_T_c_string_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_c_string::c_string(){return &c_string_;}
+
+@*2 {\bf called thread eosubrule}.\fbreak
+Enum: T\_T\_called\_thread\_eosubrule\_
+\fbreak
+\line{Class: T\_called\_thread\_eosubrule \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 called thread eosubrule user-declaration directive.
+@<called thread eosubrule user-declaration directive@>=
+
+ public:
+ T_called_thread_eosubrule(T_identifier* Ns,T_identifier* Thread_name);
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ T_identifier* ns();
+ T_identifier* called_thread_name();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ T_identifier* ns_;
+ T_identifier* called_thread_name_;
+ int element_pos_;
+
+@*3 called thread eosubrule user-implementation directive.
+@<called thread eosubrule user-implementation directive@>=
+
+T_called_thread_eosubrule::T_called_thread_eosubrule
+ (T_identifier* Ns,T_identifier* Thd_name)
+T_CTOR("called thread eosubrule",T_Enum::T_T_called_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ ns_ = Ns;
+ called_thread_name_ = Thd_name;
+ element_pos_ = 0;
+ }
+ int T_called_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_called_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ T_identifier* T_called_thread_eosubrule::ns(){
+ return ns_;
+ }
+ T_identifier* T_called_thread_eosubrule::called_thread_name(){
+ return called_thread_name_;
+ }
+ rule_def* T_called_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_called_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_called_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_called_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_called_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_called_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_called_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+@*2 {\bf comment}.\fbreak
+Enum: T\_T\_comment\_
+\fbreak
+\line{Class: T\_comment \hfil AB: N \hfil AD: N}
+
+
+Basic c++ comment in its 2 forms:\fbreak
+/* ...*/ and single line //.
+The |c_comment| grammar returns it.
+
+\fbreak
+\hrule
+@*3 comment user-declaration directive.
+@<comment user-declaration directive@>=
+
+ public:
+ T_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+
+@*3 comment user-implementation directive.
+@<comment user-implementation directive@>=
+
+ T_comment::
+ T_comment(const std::string& Comment_data)
+ T_CTOR("comment",T_Enum::T_T_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_comment::comment_data(){return &comment_data_;}
+
+@*2 {\bf cweb-comment}.\fbreak
+Enum: T\_T\_cweb\_comment\_
+\fbreak
+\line{Class: T\_cweb\_comment \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 cweb-comment user-declaration directive.
+@<cweb-comment user-declaration directive@>=
+
+ public:
+ T_cweb_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+
+@*3 cweb-comment user-implementation directive.
+@<cweb-comment user-implementation directive@>=
+
+ T_cweb_comment::
+ T_cweb_comment(const std::string& Comment_data)
+ T_CTOR("cweb-comment",T_Enum::T_T_cweb_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_cweb_comment::comment_data(){return &comment_data_;}
+
+@*2 {\bf cweb-marker}.\fbreak
+Enum: T\_T\_cweb\_marker\_
+\fbreak
+\line{Class: T\_cweb\_marker \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 cweb-marker user-declaration directive.
+@<cweb-marker user-declaration directive@>=
+
+ public:
+ T_cweb_marker(AST* Node);
+ T_cweb_marker();
+ AST* ast();
+ private:AST* ast_;
+
+@*3 cweb-marker user-implementation directive.
+@<cweb-marker user-implementation directive@>=
+
+ T_cweb_marker::
+ T_cweb_marker(AST* Node)
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = Node;}
+ T_cweb_marker::
+ T_cweb_marker()
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = 0;}
+ AST* T_cweb_marker::ast(){return ast_;}
+
+@*2 {\bf emitfile}.\fbreak
+Enum: T\_T\_emitfile\_
+\fbreak
+\line{Class: T\_emitfile \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf end-T-alphabet}.\fbreak
+Enum: T\_T\_end\_T\_alphabet\_
+\fbreak
+\line{Class: T\_end\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf end-list-of-native-first-set-terminals}.\fbreak
+Enum: T\_T\_end\_list\_of\_native\_first\_set\_terminals\_
+\fbreak
+\line{Class: T\_end\_list\_of\_native\_first\_set\_terminals \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf end-list-of-transitive-threads}.\fbreak
+Enum: T\_T\_end\_list\_of\_transitive\_threads\_
+\fbreak
+\line{Class: T\_end\_list\_of\_transitive\_threads \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf end-list-of-used-threads}.\fbreak
+Enum: T\_T\_end\_list\_of\_used\_threads\_
+\fbreak
+\line{Class: T\_end\_list\_of\_used\_threads \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf end-preamble}.\fbreak
+Enum: T\_T\_end\_preamble\_
+\fbreak
+\line{Class: T\_end\_preamble \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf eol}.\fbreak
+Enum: T\_T\_eol\_
+\fbreak
+\line{Class: T\_eol \hfil AB: N \hfil AD: N}
+
+
+This is the end-of-line indicator returned from the |eol| thread.
+
+\fbreak
+\hrule
+@*3 eol user-declaration directive.
+@<eol user-declaration directive@>=
+
+ public:
+ T_eol();
+
+@*3 eol user-implementation directive.
+@<eol user-implementation directive@>=
+
+ T_eol::
+ T_eol()
+ T_CTOR("eol",T_Enum::T_T_eol_,0,false,false)
+ {}
+ T_eol eol__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_eol__ = &eol__;
+
+@*2 {\bf eosubrule}.\fbreak
+Enum: T\_T\_eosubrule\_
+\fbreak
+\line{Class: T\_eosubrule \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 eosubrule user-declaration directive.
+@<eosubrule user-declaration directive@>=
+
+ public:
+ T_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+
+@*3 eosubrule user-implementation directive.
+@<eosubrule user-implementation directive@>=
+
+ T_eosubrule::T_eosubrule()
+ T_CTOR("eosubrule",T_Enum::T_T_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_eosubrule::element_pos(){return element_pos_;}
+ void T_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+
+ rule_def* T_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+@*2 {\bf error-symbols-phrase}.\fbreak
+Enum: T\_T\_error\_symbols\_phrase\_
+\fbreak
+\line{Class: T\_error\_symbols\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 error-symbols-phrase destructor directive.
+@<error-symbols-phrase destructor directive@>=
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+
+@*3 error-symbols-phrase user-declaration directive.
+@<error-symbols-phrase user-declaration directive@>=
+
+ public:
+ T_error_symbols_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 error-symbols-phrase user-implementation directive.
+@<error-symbols-phrase user-implementation directive@>=
+
+ T_error_symbols_phrase::T_error_symbols_phrase()
+T_CTOR("error-symbols-phrase",T_Enum::T_T_error_symbols_phrase_,&dtor_T_error_symbols_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_error_symbols_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_error_symbols_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_error_symbols_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_error_symbols_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_error_symbols_phrase::filename_id(){return filename_id_;}
+ void T_error_symbols_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_error_symbols_phrase::namespace_id(){return namespace_id_;}
+ void T_error_symbols_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_error_symbols_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_error_symbols_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_error_symbols_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_error_symbols_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+
+@*2 {\bf esc-seq}.\fbreak
+Enum: T\_T\_esc\_seq\_
+\fbreak
+\line{Class: T\_esc\_seq \hfil AB: N \hfil AD: Y}
+
+
+Returned T from the |esc_seq| thread.
+Note within the |ctor| macro
+that the ``auto delete'' indicator is
+explicitly turned on and matches the ``AD'' switch.
+As i do not parse the c++ code, {\bf watch your self}.
+This is a dangerous bend in \TeX parlance.
+
+\fbreak
+\hrule
+@*3 esc-seq user-declaration directive.
+@<esc-seq user-declaration directive@>=
+
+ public:
+ T_esc_seq(const char* Esc_data);
+ std::string* esc_data();
+ private:std::string esc_data_;
+
+@*3 esc-seq user-implementation directive.
+@<esc-seq user-implementation directive@>=
+
+ T_esc_seq::
+ T_esc_seq(const char* Esc_data)
+ T_CTOR("esc-seq",T_Enum::T_T_esc_seq_,0,true,false)
+ {
+ esc_data_ += Esc_data;
+ }
+ std::string* T_esc_seq::esc_data(){return &esc_data_;};
+
+@*2 {\bf file-inclusion}.\fbreak
+Enum: T\_T\_file\_inclusion\_
+\fbreak
+\line{Class: T\_file\_inclusion \hfil AB: N \hfil AD: N}
+
+
+Used in processing file inclusion: hence the name.
+Why the |error_sym_| variable?
+Normally i use this terminal by calling a file processing procedure.
+Deposited in this variable are conditions found to not allow
+the reading of the file.
+See |pass3| thread of how it applies.
+
+\fbreak
+\hrule
+@*3 file-inclusion user-declaration directive.
+@<file-inclusion user-declaration directive@>=
+
+ public:
+ T_file_inclusion(T_c_string* File_name_,CAbs_lr1_sym* Error);
+ ~T_file_inclusion();
+ T_c_string* file_name();
+ CAbs_lr1_sym* error_sym();
+ void error_sym(CAbs_lr1_sym* Error);
+ private:T_c_string* file_name_;
+ CAbs_lr1_sym* error_sym_;
+
+@*3 file-inclusion user-implementation directive.
+@<file-inclusion user-implementation directive@>=
+
+ T_file_inclusion::T_file_inclusion
+ (T_c_string* File_name,CAbs_lr1_sym* Error)
+ T_CTOR("file-inclusion",T_Enum::T_T_file_inclusion_,0,false,false)
+ {file_name_ = File_name;
+ error_sym_ = Error;}
+ CAbs_lr1_sym* T_file_inclusion::error_sym(){
+ return error_sym_;
+ }
+ void T_file_inclusion::error_sym(CAbs_lr1_sym* Error){
+ error_sym_ = Error;
+ }
+ T_c_string* T_file_inclusion::file_name(){return file_name_;}
+ T_file_inclusion::~T_file_inclusion(){delete file_name_;delete error_sym_;}
+
+@*2 {\bf file-of-T-alphabet}.\fbreak
+Enum: T\_T\_file\_of\_T\_alphabet\_
+\fbreak
+\line{Class: T\_file\_of\_T\_alphabet \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf fsm-class-phrase}.\fbreak
+Enum: T\_T\_fsm\_class\_phrase\_
+\fbreak
+\line{Class: T\_fsm\_class\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 fsm-class-phrase destructor directive.
+@<fsm-class-phrase destructor directive@>=
+
+ if(R->identifier_ != 0)
+ delete R->identifier_;
+ R->remove_directives_from_map();
+
+@*3 fsm-class-phrase user-declaration directive.
+@<fsm-class-phrase user-declaration directive@>=
+
+ public:
+ T_fsm_class_phrase();
+ T_identifier* identifier();
+ void identifier(T_identifier* Id);
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ T_identifier* identifier_;
+ std::map<std::string,CAbs_lr1_sym*> directives_map_;
+ AST* phrase_tree_;
+
+@*3 fsm-class-phrase user-implementation directive.
+@<fsm-class-phrase user-implementation directive@>=
+
+ T_fsm_class_phrase::T_fsm_class_phrase()
+T_CTOR("fsm-class-phrase",T_Enum::T_T_fsm_class_phrase_,&dtor_T_fsm_class_phrase,false,false)
+ {identifier_ = 0;phrase_tree_=0;}
+
+ void T_fsm_class_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_class_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_fsm_class_phrase::identifier(){return identifier_;}
+ void T_fsm_class_phrase::identifier(T_identifier* Id){identifier_ = Id;}
+
+ std::map<string,CAbs_lr1_sym*>*
+ T_fsm_class_phrase::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_fsm_class_phrase::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_fsm_class_phrase::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+
+@*2 {\bf fsm-phrase}.\fbreak
+Enum: T\_T\_fsm\_phrase\_
+\fbreak
+\line{Class: T\_fsm\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 fsm-phrase destructor directive.
+@<fsm-phrase destructor directive@>=
+
+ delete R->fsm_id_;
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->fsm_class_phrase_;
+ delete R->version_;
+ delete R->date_;
+ delete R->debug_;
+ delete R->comment_;
+
+@*3 fsm-phrase user-declaration directive.
+@<fsm-phrase user-declaration directive@>=
+
+ public:
+ T_fsm_phrase();
+ T_c_string* fsm_id();
+ void fsm_id(T_c_string* Id);
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_fsm_class_phrase* fsm_class_phrase();
+ void fsm_class_phrase(T_fsm_class_phrase* Id);
+ T_c_string* version();
+ void version(T_c_string* Id);
+ T_c_string* date();
+ void date(T_c_string* Id);
+ T_c_string* debug();
+ void debug(T_c_string* Id);
+ T_c_string* comment();
+ void comment(T_c_string* Id);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_c_string* fsm_id_;
+ T_identifier* filename_id_;
+ string filename_no_ext_;
+ T_identifier* namespace_id_;
+ T_fsm_class_phrase* fsm_class_phrase_;
+ T_c_string* version_;
+ T_c_string* date_;
+ T_c_string* debug_;
+ T_c_string* comment_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 fsm-phrase user-implementation directive.
+@<fsm-phrase user-implementation directive@>=
+
+ T_fsm_phrase::T_fsm_phrase()
+ T_CTOR("fsm-phrase",T_Enum::T_T_fsm_phrase_,&dtor_T_fsm_phrase,false,false)
+ {fsm_id_ = 0;
+ filename_id_ = 0;
+ namespace_id_ = 0;
+ fsm_class_phrase_ = 0;
+ version_ = 0;
+ date_ = 0;
+ debug_ = 0;
+ comment_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_fsm_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_fsm_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_fsm_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_c_string* T_fsm_phrase::fsm_id(){return fsm_id_;}
+ void T_fsm_phrase::fsm_id(T_c_string* Id){fsm_id_ = Id;}
+ T_identifier* T_fsm_phrase::filename_id(){return filename_id_;}
+ void T_fsm_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_fsm_phrase::namespace_id(){return namespace_id_;}
+ void T_fsm_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_fsm_class_phrase* T_fsm_phrase::fsm_class_phrase(){return fsm_class_phrase_;}
+ void T_fsm_phrase::fsm_class_phrase(T_fsm_class_phrase* Id)
+ {fsm_class_phrase_ = Id;}
+
+
+ T_c_string* T_fsm_phrase::version(){return version_;}
+ void T_fsm_phrase::version(T_c_string* Id){version_ = Id;}
+ T_c_string* T_fsm_phrase::date(){return date_;}
+ void T_fsm_phrase::date(T_c_string* Id){date_ = Id;}
+ T_c_string* T_fsm_phrase::debug(){return debug_;}
+ void T_fsm_phrase::debug(T_c_string* Id){debug_ = Id;}
+ T_c_string* T_fsm_phrase::comment(){return comment_;}
+ void T_fsm_phrase::comment(T_c_string* Id){comment_ = Id;}
+
+@*2 {\bf grammar-name}.\fbreak
+Enum: T\_T\_grammar\_name\_
+\fbreak
+\line{Class: T\_grammar\_name \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf grammar-phrase}.\fbreak
+Enum: T\_T\_grammar\_phrase\_
+\fbreak
+\line{Class: T\_grammar\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf identifier}.\fbreak
+Enum: T\_T\_identifier\_
+\fbreak
+\line{Class: T\_identifier \hfil AB: N \hfil AD: N}
+
+
+Returned terminal from the |identifier| thread.
+Just your basic word classifier.
+
+\fbreak
+\hrule
+@*3 identifier user-declaration directive.
+@<identifier user-declaration directive@>=
+
+ public:
+ T_identifier(yacco2::KCHARP Identifier);
+ std::string* identifier();
+ private:std::string identifier_;
+
+@*3 identifier user-implementation directive.
+@<identifier user-implementation directive@>=
+
+ T_identifier::T_identifier(yacco2::KCHARP Identifier)
+ T_CTOR("identifier",T_Enum::T_T_identifier_,0,false,false)
+ {identifier_ = Identifier;}
+ std::string* T_identifier::identifier(){return &identifier_;}
+
+@*2 {\bf int-no}.\fbreak
+Enum: T\_T\_int\_no\_
+\fbreak
+\line{Class: T\_int\_no \hfil AB: N \hfil AD: N}
+
+
+Carrier returned from |integer_no| thread.
+Within |integer_no| the number is converted into its binary
+format.
+
+\fbreak
+\hrule
+@*3 int-no user-declaration directive.
+@<int-no user-declaration directive@>=
+
+ public:
+ T_int_no(long S_no);
+ long no();
+ private:
+ long no_;
+
+@*3 int-no user-implementation directive.
+@<int-no user-implementation directive@>=
+
+ T_int_no::
+ T_int_no(long S_no)
+ T_CTOR("int-no",T_Enum::T_T_int_no_,0,false,false)
+ {no_ = S_no;}
+ long T_int_no::no(){return no_;};
+
+@*2 {\bf kw-in-stbl}.\fbreak
+Enum: T\_kw\_in\_stbl\_
+\fbreak
+\line{Class: kw\_in\_stbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 kw-in-stbl user-declaration directive.
+@<kw-in-stbl user-declaration directive@>=
+
+ public:
+ kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl);
+ CAbs_lr1_sym* keyword_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ CAbs_lr1_sym* kw_in_stbl_;
+ int stbl_idx_;
+
+@*3 kw-in-stbl user-implementation directive.
+@<kw-in-stbl user-implementation directive@>=
+
+ kw_in_stbl::kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl)
+ T_CTOR("kw-in-stbl",T_Enum::T_kw_in_stbl_,0,false,false)
+ {kw_in_stbl_ = Fnd_kw_in_stbl;
+ stbl_idx_ = -1;
+ }
+ CAbs_lr1_sym* kw_in_stbl::keyword_in_stbl(){
+ return kw_in_stbl_;
+ }
+ void kw_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int kw_in_stbl::stbl_idx(){return stbl_idx_;}
+
+@*2 {\bf la-express-source}.\fbreak
+Enum: T\_T\_la\_expr\_src\_
+\fbreak
+\line{Class: T\_la\_expr\_src \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 la-express-source user-declaration directive.
+@<la-express-source user-declaration directive@>=
+
+ public:
+ T_la_expr_src();
+ yacco2::TOKEN_GAGGLE* la_tok_can();
+ void zero_la_tok_can();
+ private:
+ yacco2::TOKEN_GAGGLE* la_tok_can_;
+
+@*3 la-express-source user-implementation directive.
+@<la-express-source user-implementation directive@>=
+
+ T_la_expr_src::T_la_expr_src()
+T_CTOR("la-express-source",T_Enum::T_T_la_expr_src_,0,false,false)
+ {la_tok_can_ = new yacco2::TOKEN_GAGGLE;
+ }
+ void T_la_expr_src::zero_la_tok_can(){
+ la_tok_can_ = 0;
+ }
+ yacco2::TOKEN_GAGGLE* T_la_expr_src::la_tok_can(){
+ return la_tok_can_;
+ }
+
+@*2 {\bf lint}.\fbreak
+Enum: T\_T\_lint\_
+\fbreak
+\line{Class: T\_lint \hfil AB: N \hfil AD: N}
+
+
+ Gathers the fluff.
+
+\fbreak
+\hrule
+@*3 lint user-declaration directive.
+@<lint user-declaration directive@>=
+
+ T_lint();
+
+@*3 lint user-implementation directive.
+@<lint user-implementation directive@>=
+
+ T_lint::T_lint()
+ T_CTOR("lint",T_Enum::T_T_lint_,0,false,false)
+ {}
+ T_lint lint__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_lint__ = &lint__;
+
+@*2 {\bf list-of-native-first-set-terminals}.\fbreak
+Enum: T\_T\_list\_of\_native\_first\_set\_terminals\_
+\fbreak
+\line{Class: T\_list\_of\_native\_first\_set\_terminals \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf list-of-transitive-threads}.\fbreak
+Enum: T\_T\_list\_of\_transitive\_threads\_
+\fbreak
+\line{Class: T\_list\_of\_transitive\_threads \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf list-of-used-threads}.\fbreak
+Enum: T\_T\_list\_of\_used\_threads\_
+\fbreak
+\line{Class: T\_list\_of\_used\_threads \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf lr1-k-phrase}.\fbreak
+Enum: T\_T\_lr1\_k\_phrase\_
+\fbreak
+\line{Class: T\_lr1\_k\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 lr1-k-phrase destructor directive.
+@<lr1-k-phrase destructor directive@>=
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->lrk_sufx_code_;
+
+@*3 lr1-k-phrase user-declaration directive.
+@<lr1-k-phrase user-declaration directive@>=
+
+ public:
+ T_lr1_k_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* lrk_sufx_code();
+ void lrk_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* lrk_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 lr1-k-phrase user-implementation directive.
+@<lr1-k-phrase user-implementation directive@>=
+
+ T_lr1_k_phrase::T_lr1_k_phrase()
+ T_CTOR("lr1-k-phrase",T_Enum::T_T_lr1_k_phrase_,&dtor_T_lr1_k_phrase,false,false)
+ {lrk_sufx_code_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_lr1_k_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_lr1_k_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_lr1_k_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_lr1_k_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_lr1_k_phrase::filename_id(){return filename_id_;}
+ void T_lr1_k_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_lr1_k_phrase::namespace_id(){return namespace_id_;}
+ void T_lr1_k_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_lr1_k_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_lr1_k_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_lr1_k_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_lr1_k_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ T_syntax_code*
+ T_lr1_k_phrase::
+ lrk_sufx_code(){return lrk_sufx_code_;}
+
+ void
+ T_lr1_k_phrase::
+ lrk_sufx_code(T_syntax_code* Code){
+ lrk_sufx_code_ = Code;
+ }
+
+@*2 {\bf monolithic}.\fbreak
+Enum: T\_T\_monolithic\_
+\fbreak
+\line{Class: T\_monolithic \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no-of-T}.\fbreak
+Enum: T\_T\_no\_of\_T\_
+\fbreak
+\line{Class: T\_no\_of\_T \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf null call thread eosubrule}.\fbreak
+Enum: T\_T\_null\_call\_thread\_eosubrule\_
+\fbreak
+\line{Class: T\_null\_call\_thread\_eosubrule \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 null call thread eosubrule user-declaration directive.
+@<null call thread eosubrule user-declaration directive@>=
+
+ public:
+ T_null_call_thread_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+
+@*3 null call thread eosubrule user-implementation directive.
+@<null call thread eosubrule user-implementation directive@>=
+
+ T_null_call_thread_eosubrule::T_null_call_thread_eosubrule()
+T_CTOR("null call thread eosubrule",T_Enum::T_T_null_call_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_null_call_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_null_call_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* T_null_call_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_null_call_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_null_call_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_null_call_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_null_call_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_null_call_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_null_call_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+@*2 {\bf option-err}.\fbreak
+Enum: T\_T\_option\_err\_
+\fbreak
+\line{Class: T\_option\_err \hfil AB: N \hfil AD: Y}
+
+
+Command line option for \O2 indicating generate Error vocabulary code.
+Returned from |yacco2_lcl_option| thread.
+
+\fbreak
+\hrule
+@*2 {\bf option-p}.\fbreak
+Enum: T\_T\_option\_p\_
+\fbreak
+\line{Class: T\_option\_p \hfil AB: N \hfil AD: Y}
+
+
+Command line option for \O2 indicating generate
+cweb type documents.
+Returned from |yacco2_lcl_option| thread.
+
+\fbreak
+\hrule
+@*2 {\bf option-t}.\fbreak
+Enum: T\_T\_option\_t\_
+\fbreak
+\line{Class: T\_option\_t \hfil AB: N \hfil AD: Y}
+
+
+Command line option for \O2 indicating generate T vocabulary code.
+Returned from |yacco2_lcl_option| thread.
+
+\fbreak
+\hrule
+@*2 {\bf parallel-monitor-phrase}.\fbreak
+Enum: T\_T\_parallel\_monitor\_phrase\_
+\fbreak
+\line{Class: T\_parallel\_monitor\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 parallel-monitor-phrase destructor directive.
+@<parallel-monitor-phrase destructor directive@>=
+
+ R->remove_mntr_directives();
+
+@*3 parallel-monitor-phrase user-declaration directive.
+@<parallel-monitor-phrase user-declaration directive@>=
+
+ public:
+ T_parallel_monitor_phrase();
+ void remove_mntr_directives();
+ std::map<std::string,CAbs_lr1_sym*>* mntr_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ map<std::string,CAbs_lr1_sym*> mntr_directives_map_;
+ AST* phrase_tree_;
+
+@*3 parallel-monitor-phrase user-implementation directive.
+@<parallel-monitor-phrase user-implementation directive@>=
+
+ T_parallel_monitor_phrase::T_parallel_monitor_phrase()
+T_CTOR("parallel-monitor-phrase",T_Enum::T_T_parallel_monitor_phrase_,&dtor_T_parallel_monitor_phrase,false,false)
+ {phrase_tree_=0;}
+
+ void T_parallel_monitor_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_monitor_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<string,CAbs_lr1_sym*>*
+ T_parallel_monitor_phrase::mntr_directives_map(){
+ return &mntr_directives_map_;
+ }
+
+ void T_parallel_monitor_phrase::remove_mntr_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = mntr_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = mntr_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_parallel_monitor_phrase::
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = mntr_directives_map_.find(key);
+ if(i == mntr_directives_map_.end()){
+ mntr_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_mntr_directives();
+ return sym;
+ }
+
+@*2 {\bf parallel-parser-phrase}.\fbreak
+Enum: T\_T\_parallel\_parser\_phrase\_
+\fbreak
+\line{Class: T\_parallel\_parser\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 parallel-parser-phrase destructor directive.
+@<parallel-parser-phrase destructor directive@>=
+
+ delete R->la_bndry_;
+ delete R->pp_funct_;
+
+@*3 parallel-parser-phrase user-declaration directive.
+@<parallel-parser-phrase user-declaration directive@>=
+
+ public:
+ T_parallel_parser_phrase();
+ T_parallel_thread_function* pp_funct();
+ void pp_funct(T_parallel_thread_function* PP_fnct);
+ T_parallel_la_boundary* la_bndry();
+ void la_bndry(T_parallel_la_boundary* La_bndry);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_parallel_thread_function* pp_funct_;
+ T_parallel_la_boundary* la_bndry_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 parallel-parser-phrase user-implementation directive.
+@<parallel-parser-phrase user-implementation directive@>=
+
+ T_parallel_parser_phrase::T_parallel_parser_phrase()
+ T_CTOR("parallel-parser-phrase",T_Enum::T_T_parallel_parser_phrase_,&dtor_T_parallel_parser_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_parallel_parser_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_parser_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_parallel_parser_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_parser_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_parallel_thread_function* T_parallel_parser_phrase::pp_funct(){
+ return pp_funct_;
+ }
+ void T_parallel_parser_phrase::pp_funct(T_parallel_thread_function* PP_fnct){
+ pp_funct_ = PP_fnct;
+ }
+ T_parallel_la_boundary* T_parallel_parser_phrase::la_bndry(){
+ return la_bndry_;
+ }
+ void T_parallel_parser_phrase::la_bndry(T_parallel_la_boundary* La_bndry){
+ la_bndry_ = La_bndry;
+ }
+
+@*2 {\bf preamble}.\fbreak
+Enum: T\_T\_preamble\_
+\fbreak
+\line{Class: T\_preamble \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf raw-char}.\fbreak
+Enum: T\_T\_raw\_char\_
+\fbreak
+\line{Class: T\_raw\_char \hfil AB: N \hfil AD: N}
+
+
+A universal carrier from the raw text character into
+c++ objects.
+Still don't know why there is also a |raw-characters| terminal.
+
+\fbreak
+\hrule
+@*3 raw-char destructor directive.
+@<raw-char destructor directive@>=
+
+ if(R->raw_char_!=0)
+ delete R->raw_char();
+
+@*3 raw-char user-declaration directive.
+@<raw-char user-declaration directive@>=
+
+ public:
+ T_raw_char(CAbs_lr1_sym* Raw_char);
+ CAbs_lr1_sym* raw_char()const;
+ void zero_out_raw_char();
+ private:CAbs_lr1_sym* raw_char_;
+
+@*3 raw-char user-implementation directive.
+@<raw-char user-implementation directive@>=
+
+ T_raw_char::
+ T_raw_char(CAbs_lr1_sym* Raw_char)
+ T_CTOR("raw-char",T_Enum::T_T_raw_char_,0,false,false)
+ {raw_char_ = Raw_char;}
+ void T_raw_char::zero_out_raw_char(){raw_char_ = 0;}
+ CAbs_lr1_sym* T_raw_char::raw_char()const{return raw_char_;}
+
+@*2 {\bf rc-phrase}.\fbreak
+Enum: T\_T\_rc\_phrase\_
+\fbreak
+\line{Class: T\_rc\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 rc-phrase destructor directive.
+@<rc-phrase destructor directive@>=
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+
+@*3 rc-phrase user-declaration directive.
+@<rc-phrase user-declaration directive@>=
+
+ public:
+ T_rc_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 rc-phrase user-implementation directive.
+@<rc-phrase user-implementation directive@>=
+
+ T_rc_phrase::T_rc_phrase()
+ T_CTOR("rc-phrase",T_Enum::T_T_rc_phrase_,&dtor_T_rc_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rc_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rc_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rc_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rc_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_rc_phrase::filename_id(){return filename_id_;}
+ void T_rc_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_rc_phrase::namespace_id(){return namespace_id_;}
+ void T_rc_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_rc_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_rc_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_rc_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rc_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+
+@*2 {\bf refered-T}.\fbreak
+Enum: T\_refered\_T\_
+\fbreak
+\line{Class: refered\_T \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 refered-T user-declaration directive.
+@<refered-T user-declaration directive@>=
+
+ public:
+ refered_T(T_in_stbl& Term_in_stbl);
+ T_in_stbl* t_in_stbl();
+ T_terminal_def* its_t_def();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_in_stbl* t_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+
+@*3 refered-T user-implementation directive.
+@<refered-T user-implementation directive@>=
+
+ refered_T::refered_T(T_in_stbl& Term_in_stbl)
+ T_CTOR("refered-T",T_Enum::T_refered_T_,0,false,false)
+ {t_in_stbl_ = &Term_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_T::element_pos(){return element_pos_;}
+ void refered_T::element_pos(int Pos){element_pos_ = Pos;}
+
+ T_terminal_def* refered_T::its_t_def(){
+ return t_in_stbl_->t_def();
+ }
+ rule_def* refered_T::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* refered_T::tree_node(){
+ return tree_node_;
+ }
+ void refered_T::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_T::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_T::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_in_stbl* refered_T::t_in_stbl(){
+ return t_in_stbl_;
+ }
+
+ T_subrule_def* refered_T::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_T::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+@*2 {\bf refered-rule}.\fbreak
+Enum: T\_refered\_rule\_
+\fbreak
+\line{Class: refered\_rule \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 refered-rule user-declaration directive.
+@<refered-rule user-declaration directive@>=
+
+ public:
+ refered_rule(rule_in_stbl& Rule_in_stbl);
+ rule_in_stbl* Rule_in_stbl();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ rule_in_stbl* rule_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+
+@*3 refered-rule user-implementation directive.
+@<refered-rule user-implementation directive@>=
+
+ refered_rule::refered_rule(rule_in_stbl& Rule_in_stbl)
+ T_CTOR("refered-rule",T_Enum::T_refered_rule_,0,false,false)
+ {rule_in_stbl_ = &Rule_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_rule::element_pos(){return element_pos_;}
+ void refered_rule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* refered_rule::its_rule_def(){
+ return rule_in_stbl_->r_def();
+ }
+ AST* refered_rule::tree_node(){
+ return tree_node_;
+ }
+ void refered_rule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_rule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_rule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_subrule_def* refered_rule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_rule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ rule_in_stbl* refered_rule::Rule_in_stbl(){
+ return rule_in_stbl_;
+ }
+
+@*2 {\bf rule-def}.\fbreak
+Enum: T\_rule\_def\_
+\fbreak
+\line{Class: rule\_def \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 rule-def destructor directive.
+@<rule-def destructor directive@>=
+
+ delete R->parallel_mntr_;
+ delete R->rule_lhs_;
+ delete R->subrules_;
+
+@*3 rule-def user-declaration directive.
+@<rule-def user-declaration directive@>=
+
+ public:
+ rule_def(const char* Key);
+ T_rule_lhs_phrase* rule_lhs();
+ void rule_lhs(T_rule_lhs_phrase* Lhs);
+ int rule_no();
+ void rule_no(int Rule_no);
+ int lhs_use_cnt();
+ void lhs_use_cnt(int Use_cnt);
+ int rhs_use_cnt();
+ void rhs_use_cnt(int Use_cnt);
+ bool recursive();
+ void recursive(bool Recursive);
+
+ void parallel_mntr(T_parallel_monitor_phrase* Mntr);
+ T_parallel_monitor_phrase* parallel_mntr();
+ T_subrules_phrase* subrules();
+ void subrules(T_subrules_phrase* Subrules);
+
+ std::string* rule_name();
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ bool epsilon();
+ void epsilon(bool Ton);
+ bool derive_t();
+ void derive_t(bool Ton);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* rule_s_tree();
+ void enum_id(int Id);
+ int enum_id();
+ std::set<T_in_stbl*>* first_set();
+ void add_to_first_set(T_in_stbl& T);
+ std::set<T_called_thread_eosubrule*>* called_thread_first_set();
+ void add_to_called_thread_first_set(T_called_thread_eosubrule* T);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ void add_closure_rule_making_up_first_set(rule_in_stbl* Rule);
+ std::set<rule_in_stbl*>* closure_rules_making_up_first_set();
+ void add_rule_adding_T_in_first_set(T_in_stbl* T,std::string* Rule_enumerate);
+ std::map<T_in_stbl*,std::set<std::string*> >* rule_adding_T_in_first_set();
+ AST* rule_use_skeleton();
+ void rule_use_skeleton(AST* Tree);
+ private:
+ std::string rule_name_;
+ T_parallel_monitor_phrase* parallel_mntr_;
+ T_subrules_phrase* subrules_;
+ T_rule_lhs_phrase* rule_lhs_;
+ bool auto_delete_;
+ bool auto_abort_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int enum_id_;
+ int rule_no_;
+ int lhs_use_cnt_;// for rule recycling
+ int rhs_use_cnt_;// for rule recycling
+ bool recursive_;
+ bool epsilon_;
+ bool derive_t_;
+ std::string grammar_s_enumerate_;
+ std::set<T_in_stbl*> first_set_;
+ std::set<T_called_thread_eosubrule*> called_thread_first_set_;
+ std::set<rule_in_stbl*> closure_rules_making_up_first_set_;
+ std::map<T_in_stbl*,std::set<std::string*> > rules_adding_T_in_first_set_;
+ AST* rule_use_skeleton_;
+
+@*3 rule-def user-implementation directive.
+@<rule-def user-implementation directive@>=
+
+ rule_def::rule_def(const char* Key)
+ T_CTOR("rule-def",T_Enum::T_rule_def_,&dtor_rule_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ rule_no_ = 0;//starts cnt at 1
+ recursive_ = NO;
+ lhs_use_cnt_ = 0;
+ rhs_use_cnt_ = 0;
+ rule_use_skeleton_ = 0;
+ parallel_mntr_ = 0;
+ subrules_ = 0;
+ rule_lhs_ = 0;
+ rule_name_ += Key;
+ epsilon_ = false;
+ derive_t_ = false;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ enum_id_ = -1;
+ first_set_.clear();
+ }
+ std::set<rule_in_stbl*>* rule_def::closure_rules_making_up_first_set(){
+ return &closure_rules_making_up_first_set_;
+ }
+ AST* rule_def::rule_use_skeleton(){return rule_use_skeleton_;}
+ void rule_def::rule_use_skeleton(AST* Tree){rule_use_skeleton_ = Tree;}
+
+ std::map<T_in_stbl*,std::set<std::string*> >*
+ rule_def::rule_adding_T_in_first_set(){
+ return &rules_adding_T_in_first_set_;
+ }
+ int rule_def::rule_no(){return rule_no_;}
+ void rule_def::rule_no(int Rule_no){rule_no_ = Rule_no;}
+ bool rule_def::recursive(){return recursive_;}
+ void rule_def::recursive(bool Recursive){recursive_ = Recursive;}
+ int rule_def::lhs_use_cnt(){return lhs_use_cnt_;};
+ void rule_def::lhs_use_cnt(int Use_cnt){lhs_use_cnt_ = Use_cnt;}
+ int rule_def::rhs_use_cnt(){return rhs_use_cnt_;}
+ void rule_def::rhs_use_cnt(int Use_cnt){rhs_use_cnt_ = Use_cnt;}
+
+ void rule_def::add_closure_rule_making_up_first_set(rule_in_stbl* Rule){
+ if(closure_rules_making_up_first_set_.find(Rule)
+ !=
+ closure_rules_making_up_first_set_ .end()) return;
+ closure_rules_making_up_first_set_.insert(Rule);
+ }
+ void rule_def::add_rule_adding_T_in_first_set
+ (T_in_stbl* T,std::string* Rule_enumerate){
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator i;
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator ie;
+ ie = rules_adding_T_in_first_set_.end();
+ i = rules_adding_T_in_first_set_.find(T);
+ if(i == ie){
+ rules_adding_T_in_first_set_[T] = std::set<std::string*>();
+ i = rules_adding_T_in_first_set_.find(T);
+ i->second.insert(Rule_enumerate);
+ return;
+ }
+ i->second.insert(Rule_enumerate);
+ }
+
+ std::string* rule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void rule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ std::set<T_in_stbl*>* rule_def::first_set(){
+ return &first_set_;
+ }
+ std::set<T_called_thread_eosubrule*>* rule_def::called_thread_first_set(){
+ return &called_thread_first_set_;
+ }
+
+ void rule_def::add_to_first_set(T_in_stbl& T){
+ T_in_stbl* t = &T;
+ std::set<T_in_stbl*>::iterator i;
+ i = first_set_.find(t);
+ if(i == first_set_.end()){
+ first_set_.insert(t);
+ }
+ }
+ void rule_def::add_to_called_thread_first_set(T_called_thread_eosubrule* T){
+ std::set<T_called_thread_eosubrule*>::iterator i;
+ i = called_thread_first_set_.find(T);
+ if(i == called_thread_first_set_.end()){
+ called_thread_first_set_.insert(T);
+ }
+ }
+
+ void rule_def::enum_id(int Id){enum_id_=Id;}
+ int rule_def::enum_id(){return enum_id_;}
+ void rule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ T_subrules_phrase* subrules_ph = subrules();
+ std::vector<T_subrule_def*>* subrule_list = subrules_ph->subrules();
+ std::vector<T_subrule_def*>::iterator sri = subrule_list->begin();
+ std::vector<T_subrule_def*>::iterator srie = subrule_list->end();
+ AST* subrule_lvl = 0;
+ for(;sri!=srie;++sri){// walk subrules
+ T_subrule_def* srdef = *sri;
+ AST* srt = srdef->subrule_s_tree();
+ if(subrule_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*srt);
+ subrule_lvl = srt;
+ }else{ // subrule brothers
+ AST::join_sts(*subrule_lvl,*srt);
+ subrule_lvl = srt;
+ }
+ }
+ }
+
+ AST* rule_def::rule_s_tree(){
+ return its_tree_;
+ }
+
+ void rule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* rule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ T_rule_lhs_phrase* rule_def::rule_lhs(){
+ return rule_lhs_;
+ }
+
+ void rule_def::rule_lhs(T_rule_lhs_phrase* Lhs){
+ rule_lhs_ = Lhs;
+ }
+
+ void rule_def::parallel_mntr(T_parallel_monitor_phrase* Mntr){
+ parallel_mntr_ = Mntr;
+ }
+
+ T_parallel_monitor_phrase* rule_def::parallel_mntr(){
+ return parallel_mntr_;
+ }
+
+ T_subrules_phrase* rule_def::subrules(){
+ return subrules_;
+ }
+
+ void rule_def::subrules(T_subrules_phrase* Subrules){
+ subrules_ = Subrules;
+ }
+
+ std::string* rule_def::rule_name(){return &rule_name_;}
+
+ bool rule_def::autodelete(){return auto_delete_;}
+ void rule_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool rule_def::autoabort(){return auto_abort_;}
+ void rule_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ bool rule_def::epsilon(){return epsilon_;}
+ void rule_def::epsilon(bool Ton){epsilon_ = Ton;}
+
+ bool rule_def::derive_t(){return derive_t_;}
+ void rule_def::derive_t(bool Ton){derive_t_ = Ton;}
+
+
+@*2 {\bf rule-in-stbl}.\fbreak
+Enum: T\_rule\_in\_stbl\_
+\fbreak
+\line{Class: rule\_in\_stbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 rule-in-stbl user-declaration directive.
+@<rule-in-stbl user-declaration directive@>=
+
+ public:
+ rule_in_stbl(rule_def& Rule_def);
+ rule_def* r_def();
+ std::list<refered_rule*>* xref_r();
+ void add_R_into_xref(refered_rule& R);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ rule_def* r_def_;
+ std::list<refered_rule*> xref_r_;
+ int stbl_idx_;
+
+@*3 rule-in-stbl user-implementation directive.
+@<rule-in-stbl user-implementation directive@>=
+
+ rule_in_stbl::rule_in_stbl(rule_def& Rule_def)
+ T_CTOR("rule-in-stbl",T_Enum::T_rule_in_stbl_,0,false,false)
+ {r_def_ = &Rule_def;
+ stbl_idx_ = -1;
+ }
+ rule_def* rule_in_stbl::r_def(){
+ return r_def_;
+ }
+ std::list<refered_rule*>* rule_in_stbl::xref_r(){
+ return &xref_r_;;
+ }
+ void rule_in_stbl::add_R_into_xref(refered_rule& R){
+ xref_r_.push_back(&R);
+ }
+ void rule_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int rule_in_stbl::stbl_idx(){return stbl_idx_;}
+
+@*2 {\bf rule-lhs-phrase}.\fbreak
+Enum: T\_T\_rule\_lhs\_phrase\_
+\fbreak
+\line{Class: T\_rule\_lhs\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 rule-lhs-phrase destructor directive.
+@<rule-lhs-phrase destructor directive@>=
+
+ R->remove_lhs_directives();
+
+@*3 rule-lhs-phrase user-declaration directive.
+@<rule-lhs-phrase user-declaration directive@>=
+
+ public:
+ T_rule_lhs_phrase();
+ void remove_lhs_directives();
+ std::map<std::string,CAbs_lr1_sym*>* lhs_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ map<std::string,CAbs_lr1_sym*> lhs_directives_map_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 rule-lhs-phrase user-implementation directive.
+@<rule-lhs-phrase user-implementation directive@>=
+
+ T_rule_lhs_phrase::T_rule_lhs_phrase()
+T_CTOR("rule-lhs-phrase",T_Enum::T_T_rule_lhs_phrase_,&dtor_T_rule_lhs_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+
+ void T_rule_lhs_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rule_lhs_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rule_lhs_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rule_lhs_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_rule_lhs_phrase::lhs_directives_map(){
+ return &lhs_directives_map_;
+ }
+
+ void T_rule_lhs_phrase::remove_lhs_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = lhs_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = lhs_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_rule_lhs_phrase::
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = lhs_directives_map_.find(key);
+ if(i == lhs_directives_map_.end()){
+ lhs_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_lhs_directives();
+ return sym;
+ }
+
+@*2 {\bf rules-phrase}.\fbreak
+Enum: T\_T\_rules\_phrase\_
+\fbreak
+\line{Class: T\_rules\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 rules-phrase destructor directive.
+@<rules-phrase destructor directive@>=
+
+ R->destroy_rules_alphabet();
+
+@*3 rules-phrase user-declaration directive.
+@<rules-phrase user-declaration directive@>=
+
+ public:
+ T_rules_phrase();
+ void destroy_rules_alphabet();
+ std::map<std::string,rule_def*>* rules_alphabet();
+ CAbs_lr1_sym* add_r_to_alphabet(rule_def* R,yacco2::Parser* P);
+ std::vector<rule_def*>* crt_order();
+ void rules_tree(AST* Tree);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ std::map<std::string,rule_def*> rules_alphabet_;
+ std::vector<rule_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 rules-phrase user-implementation directive.
+@<rules-phrase user-implementation directive@>=
+
+ T_rules_phrase::T_rules_phrase()
+T_CTOR("rules-phrase",T_Enum::T_T_rules_phrase_,&dtor_T_rules_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rules_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rules_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+
+ void T_rules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rules_phrase::phrase_tree(){return phrase_tree_;}
+
+ std::map<string,rule_def*>*
+ T_rules_phrase::rules_alphabet(){
+ return &rules_alphabet_;
+ }
+
+ void T_rules_phrase::destroy_rules_alphabet(){
+ std::vector<rule_def*>::iterator i = crt_order_.begin();
+ std::vector<rule_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ rules_alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rules_phrase::
+ add_r_to_alphabet(rule_def* R,yacco2::Parser* P){
+ std::string key(R->rule_name()->c_str());
+ std::map<std::string,rule_def*>::iterator i = rules_alphabet_.find(key);
+ if(i != rules_alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*R,__FILE__,__LINE__);
+ return sym;
+ }
+ rules_alphabet_[key] = R;
+ crt_order_.push_back(R);
+ return 0;
+ }
+ std::vector<rule_def*>*
+ T_rules_phrase::
+ crt_order(){return &crt_order_;}
+
+@*2 {\bf subrule-def}.\fbreak
+Enum: T\_T\_subrule\_def\_
+\fbreak
+\line{Class: T\_subrule\_def \hfil AB: N \hfil AD: N}
+
+
+The |its_grammar_s_pos_| provides its position within the grammar.
+Not important in gening of the grammar but used in the cross reference document.
+As the address of the |T_subrule_def| object
+does not garantee ascending order, this does.
+
+\fbreak
+\hrule
+@*3 subrule-def destructor directive.
+@<subrule-def destructor directive@>=
+
+ R->remove_subrule_directives();
+ R->remove_subrule_elems_from_vector();
+
+@*3 subrule-def user-declaration directive.
+@<subrule-def user-declaration directive@>=
+
+ public:
+ T_subrule_def();
+ int subrule_no_of_rule();
+ void subrule_no_of_rule(int Subrule_no);
+ void remove_subrule_directives();
+ std::map<std::string,CAbs_lr1_sym*>* subrule_directives();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ std::vector<CAbs_lr1_sym*>* subrule_elems();
+ void add_elem_to_subrule_vector(CAbs_lr1_sym* Elem);
+ int no_of_elems();
+ void remove_subrule_elems_from_vector();
+ bool epsilon();
+ void epsilon(bool Epsilon);
+ bool derive_t();
+ void derive_t(bool Epsilon);
+ rule_def* its_rule_def();
+ void its_rule_def(rule_def* Its_rule_def);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* subrule_s_tree();
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ int its_grammar_s_pos();
+ void its_grammar_s_pos(int Pos);
+ private:
+ std::map<std::string,CAbs_lr1_sym*> subrule_directives_;
+ std::vector<CAbs_lr1_sym*> subrule_elems_;
+ int subrule_no_of_rule_;// rel 1
+ int no_of_elems_;
+ bool epsilon_;
+ bool derive_t_;
+ rule_def* its_rule_def_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int its_grammar_s_pos_;
+ std::string grammar_s_enumerate_;
+
+@*3 subrule-def user-implementation directive.
+@<subrule-def user-implementation directive@>=
+
+ T_subrule_def::T_subrule_def()
+T_CTOR("subrule-def",T_Enum::T_T_subrule_def_,&dtor_T_subrule_def,false,false)
+ {subrule_no_of_rule_ = 0;
+ no_of_elems_ = 0;
+ epsilon_ = false;
+ derive_t_ = false;
+ its_rule_def_ = 0;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ its_grammar_s_pos_ = 0;
+ }
+ int T_subrule_def::its_grammar_s_pos(){return its_grammar_s_pos_;}
+ void T_subrule_def::its_grammar_s_pos(int Pos){its_grammar_s_pos_ = Pos;}
+ int T_subrule_def::subrule_no_of_rule(){
+ return subrule_no_of_rule_;
+ }
+ void T_subrule_def::subrule_no_of_rule(int Subrule_no){
+ subrule_no_of_rule_ = Subrule_no;
+ }
+
+ std::string* T_subrule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_subrule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ void T_subrule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ std::vector<CAbs_lr1_sym*>* element_list = subrule_elems();
+ std::vector<CAbs_lr1_sym*>::iterator ei = element_list->begin();
+ std::vector<CAbs_lr1_sym*>::iterator eie = element_list->end();
+ AST* element_lvl = 0;
+ for(;ei!=eie;++ei){// walk elements of subrule
+ CAbs_lr1_sym* elem_def = *ei;
+ AST* elemtt = new AST(*elem_def);
+ int id = elem_def->enumerated_id__;
+ using namespace NS_yacco2_terminals;
+ switch (id){
+ case T_Enum::T_refered_rule_: {
+ refered_rule* rrule = (refered_rule*)elem_def;
+ rrule->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_: {
+ T_eosubrule* eos = (T_eosubrule*)elem_def;
+ eos->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_refered_T_: {
+ refered_T* rt = (refered_T*)elem_def;
+ rt->tree_node(elemtt);
+ break;
+ }
+ }
+ if(element_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*elemtt);
+ element_lvl = elemtt;
+ }else{ // element brothers
+ AST::join_sts(*element_lvl,*elemtt);
+ element_lvl = elemtt;
+ }
+ }
+ }
+
+ AST* T_subrule_def::subrule_s_tree(){
+ return its_tree_;
+ }
+
+ void T_subrule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_subrule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ rule_def* T_subrule_def::its_rule_def(){
+ return its_rule_def_;
+ }
+
+ void T_subrule_def::its_rule_def(rule_def* Its_rule_def){
+ its_rule_def_ = Its_rule_def;
+ }
+
+ std::vector<CAbs_lr1_sym*>* T_subrule_def::subrule_elems(){
+ return &subrule_elems_;
+ }
+
+ bool T_subrule_def::epsilon(){
+ return epsilon_;
+ }
+
+ void T_subrule_def::epsilon(bool Epsilon){
+ epsilon_ = Epsilon;
+ }
+
+ bool T_subrule_def::derive_t(){
+ return derive_t_;
+ }
+
+ void T_subrule_def::derive_t(bool Ton){
+ derive_t_ = Ton;
+ }
+
+ void T_subrule_def::
+ add_elem_to_subrule_vector(CAbs_lr1_sym* Elem){
+ ++no_of_elems_;
+ subrule_elems_.push_back(Elem);
+ }
+ int T_subrule_def::no_of_elems(){
+ return no_of_elems_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_subrule_def::subrule_directives(){
+ return &subrule_directives_;
+ }
+
+ void T_subrule_def::remove_subrule_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = subrule_directives_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = subrule_directives_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_subrule_def::
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = subrule_directives_.find(key);
+ if(i == subrule_directives_.end()){
+ subrule_directives_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_subrule_directives();
+ return sym;
+ }
+ void T_subrule_def::remove_subrule_elems_from_vector(){
+ std::vector<CAbs_lr1_sym*>::iterator i = subrule_elems_.begin();
+ std::vector<CAbs_lr1_sym*>::iterator ie = subrule_elems_.end();
+ for(;i != ie;++i){
+ delete *i;
+ }
+ }
+
+@*2 {\bf subrules-phrase}.\fbreak
+Enum: T\_T\_subrules\_phrase\_
+\fbreak
+\line{Class: T\_subrules\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 subrules-phrase destructor directive.
+@<subrules-phrase destructor directive@>=
+
+ R->destroy_subrules();
+
+@*3 subrules-phrase user-declaration directive.
+@<subrules-phrase user-declaration directive@>=
+
+ public:
+ T_subrules_phrase();
+ void destroy_subrules();
+ std::vector<T_subrule_def*>* subrules();
+ void add_sr_to_subrules(T_subrule_def* R);
+ int no_subrules();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ std::vector<T_subrule_def*> subrules_;
+ int no_subrules_;
+ AST* phrase_tree_;
+
+@*3 subrules-phrase user-implementation directive.
+@<subrules-phrase user-implementation directive@>=
+
+ T_subrules_phrase::T_subrules_phrase()
+T_CTOR("subrules-phrase",T_Enum::T_T_subrules_phrase_,&dtor_T_subrules_phrase,false,false)
+ {no_subrules_ = 0;phrase_tree_=0;}
+ void T_subrules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_subrules_phrase::phrase_tree(){return phrase_tree_;}
+
+ int T_subrules_phrase::no_subrules(){
+ return no_subrules_;
+ }
+ std::vector<T_subrule_def*>*
+ T_subrules_phrase::subrules(){
+ return &subrules_;
+ }
+
+ void T_subrules_phrase::destroy_subrules(){
+ std::vector<T_subrule_def*>::iterator i = subrules_.begin();
+ std::vector<T_subrule_def*>::iterator ie = subrules_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ }
+
+ void
+ T_subrules_phrase::
+ add_sr_to_subrules(T_subrule_def* R){
+ ++no_subrules_;
+ subrules_.push_back(R);
+ }
+
+@*2 {\bf sym-tbl-report-card}.\fbreak
+Enum: T\_T\_sym\_tbl\_report\_card\_
+\fbreak
+\line{Class: T\_sym\_tbl\_report\_card \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 sym-tbl-report-card user-declaration directive.
+@<sym-tbl-report-card user-declaration directive@>=
+
+ public:
+ enum status {okay,failure,fatal};
+ enum action {not_fnd,fnd,inserted,aborted,unknown};
+ T_sym_tbl_report_card();
+ T_sym_tbl_report_card::status status_;
+ T_sym_tbl_report_card::action action_;
+ table_entry* tbl_entry_;
+ CAbs_lr1_sym* err_entry_;
+ int pos_;
+ int key_len_;
+
+@*3 sym-tbl-report-card user-implementation directive.
+@<sym-tbl-report-card user-implementation directive@>=
+
+ T_sym_tbl_report_card::
+ T_sym_tbl_report_card()
+ T_CTOR("sym-tbl-report-card",T_Enum::T_T_sym_tbl_report_card_,0,false,false)
+ {status_ = okay;
+ action_ = unknown;
+ tbl_entry_ = 0;
+ pos_ = 0;
+ key_len_ = 0;
+ }
+
+@*2 {\bf syntax-code}.\fbreak
+Enum: T\_T\_syntax\_code\_
+\fbreak
+\line{Class: T\_syntax\_code \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 syntax-code user-declaration directive.
+@<syntax-code user-declaration directive@>=
+
+ public:
+ T_syntax_code(const char* Syntax_code);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ std::string* syntax_code();
+ private:std::string syntax_code_;
+ AST* cweb_marker_;
+
+@*3 syntax-code user-implementation directive.
+@<syntax-code user-implementation directive@>=
+
+ T_syntax_code::T_syntax_code(const char* Syntax_code)
+ T_CTOR("syntax-code",T_Enum::T_T_syntax_code_,0,false,false)
+ {syntax_code_ += Syntax_code;
+ cweb_marker_=0;}
+ std::string* T_syntax_code::syntax_code(){return &syntax_code_;}
+ void T_syntax_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_syntax_code::cweb_marker(){
+ return cweb_marker_;
+ }
+
+@*2 {\bf table-entry}.\fbreak
+Enum: T\_table\_entry\_
+\fbreak
+\line{Class: table\_entry \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 table-entry user-declaration directive.
+@<table-entry user-declaration directive@>=
+
+ public:
+ enum entry_typ {terminal,rule,keyword,unknown,thread};
+ enum defined_or_used_typ {defed,used};
+ table_entry();
+ bool vacant_;
+ bool defined_;
+ bool used_;
+ entry_typ type_;
+ CAbs_lr1_sym* symbol_;
+ const char* key_;
+ int pos_;
+ int key_len_;
+
+@*3 table-entry user-implementation directive.
+@<table-entry user-implementation directive@>=
+
+ table_entry::
+ table_entry()
+ T_CTOR("symbol-table",T_Enum::T_table_entry_,0,false,false)
+ {vacant_ = true;
+ defined_ = false;
+ used_ = false;
+ type_ = table_entry::unknown;
+ symbol_ = 0;
+ key_ = 0;
+ pos_ = -1;
+ key_len_ = 0;
+ }
+
+@*2 {\bf terminal-def}.\fbreak
+Enum: T\_T\_terminal\_def\_
+\fbreak
+\line{Class: T\_terminal\_def \hfil AB: N \hfil AD: N}
+
+
+Watch out.\fbreak
+The individual syntax directed code directives
+are unique whereby each directive terminal contains their source code.
+Depending on their key within the ``directives\_map\_'',
+u recast the abstract symbol
+into the specific directive.\fbreak
+For example:\fbreak
+The ``SDC\_user\_declaration'' key representing the ``user-declaration'' directive
+would cast the mapped symbol to |T_user_declaration|.
+
+\fbreak
+\hrule
+@*3 terminal-def destructor directive.
+@<terminal-def destructor directive@>=
+
+ R->remove_directives_from_map();
+
+@*3 terminal-def user-declaration directive.
+@<terminal-def user-declaration directive@>=
+
+ public:
+ enum classification_typ {not_classed,err,rc,lrk,t};
+ T_terminal_def();
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+
+ std::string* t_name();
+ void t_name(const char* Id);
+ std::string* classsym();
+ void classsym(const char* Id);
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ classification_typ classification();
+ void classification(classification_typ C);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void enum_id(int Id);
+ int enum_id();
+ private:
+ std::string t_name_;
+ std::string class_sym_;
+ bool auto_delete_;
+ bool auto_abort_;
+ map<std::string,CAbs_lr1_sym*> directives_map_;
+ classification_typ classification_;
+ AST* cweb_marker_;
+ int enum_id_;
+
+@*3 terminal-def user-implementation directive.
+@<terminal-def user-implementation directive@>=
+
+ T_terminal_def::T_terminal_def()
+T_CTOR("terminal-def",T_Enum::T_T_terminal_def_,&dtor_T_terminal_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ classification_ = T_terminal_def::not_classed;
+ cweb_marker_ = 0;
+ enum_id_ = -1;
+ }
+ void T_terminal_def::enum_id(int Id){enum_id_=Id;}
+ int T_terminal_def::enum_id(){return enum_id_;}
+ void T_terminal_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminal_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_terminal_def::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_terminal_def::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_terminal_def::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+
+ std::string* T_terminal_def::t_name(){return &t_name_;}
+ void T_terminal_def::t_name(const char* Id){t_name_ += Id;}
+
+ std::string* T_terminal_def::classsym(){return &class_sym_;}
+ void T_terminal_def::classsym(const char* Id){class_sym_ += Id;}
+
+ bool T_terminal_def::autodelete(){return auto_delete_;}
+ void T_terminal_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool T_terminal_def::autoabort(){return auto_abort_;}
+ void T_terminal_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ T_terminal_def::classification_typ
+ T_terminal_def::classification(){return classification_;}
+ void
+ T_terminal_def::classification(T_terminal_def::classification_typ C)
+ {classification_ = C;}
+
+@*2 {\bf terminals-phrase}.\fbreak
+Enum: T\_T\_terminals\_phrase\_
+\fbreak
+\line{Class: T\_terminals\_phrase \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 terminals-phrase destructor directive.
+@<terminals-phrase destructor directive@>=
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->terminals_refs_code_;
+ delete R->terminals_sufx_code_;
+
+@*3 terminals-phrase user-declaration directive.
+@<terminals-phrase user-declaration directive@>=
+
+ public:
+ T_terminals_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* terminals_refs_code();
+ void terminals_refs_code(T_syntax_code* Code);
+ T_syntax_code* terminals_sufx_code();
+ void terminals_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* terminals_refs_code_;
+ T_syntax_code* terminals_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+
+@*3 terminals-phrase user-implementation directive.
+@<terminals-phrase user-implementation directive@>=
+
+ T_terminals_phrase::T_terminals_phrase()
+T_CTOR("terminals-phrase",T_Enum::T_T_terminals_phrase_,&dtor_T_terminals_phrase,false,false)
+ {terminals_refs_code_ = 0;
+ terminals_sufx_code_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_terminals_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminals_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_terminals_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_terminals_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_terminals_phrase::filename_id(){return filename_id_;}
+ void T_terminals_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_terminals_phrase::namespace_id(){return namespace_id_;}
+ void T_terminals_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_terminals_phrase::alphabet(){
+ return &alphabet_;
+ }
+ std::vector<T_terminal_def*>*
+ T_terminals_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_terminals_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_terminals_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_refs_code(){return terminals_refs_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_refs_code(T_syntax_code* Code){
+ terminals_refs_code_ = Code;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_sufx_code(){return terminals_sufx_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_sufx_code(T_syntax_code* Code){
+ terminals_sufx_code_ = Code;
+ }
+
+@*2 {\bf th-in-stbl}.\fbreak
+Enum: T\_th\_in\_stbl\_
+\fbreak
+\line{Class: th\_in\_stbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 th-in-stbl user-declaration directive.
+@<th-in-stbl user-declaration directive@>=
+
+ public:
+ th_in_stbl(thread_attributes* Fnd_th_in_stbl);
+ thread_attributes* thread_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ thread_attributes* th_in_stbl_;
+ int stbl_idx_;
+
+@*3 th-in-stbl user-implementation directive.
+@<th-in-stbl user-implementation directive@>=
+
+ th_in_stbl::th_in_stbl(thread_attributes* Fnd_th_in_stbl)
+ T_CTOR("th-in-stbl",T_Enum::T_th_in_stbl_,0,false,false)
+ {th_in_stbl_ = Fnd_th_in_stbl;
+ stbl_idx_ = -1;
+ }
+ thread_attributes* th_in_stbl::thread_in_stbl(){
+ return th_in_stbl_;
+ }
+ void th_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int th_in_stbl::stbl_idx(){return stbl_idx_;}
+
+@*2 {\bf thread-attributes}.\fbreak
+Enum: T\_thread\_attributes\_
+\fbreak
+\line{Class: thread\_attributes \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 thread-attributes user-declaration directive.
+@<thread-attributes user-declaration directive@>=
+
+ public:
+ thread_attributes(const char* Fully_qualified_th_name);
+ thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments);
+ std::string fully_qualified_th_name_;
+ char transitive_;
+ T_c_string* grammar_file_name_;
+ T_c_string* name_space_name_;
+ T_c_string* thread_name_;
+ char monolithic_;
+ T_c_string* file_name_;
+ std::vector<int> list_of_Ts_;
+ std::set<int> fs_;
+ std::vector<thread_attributes*> list_of_transitive_threads_;
+ int th_enum_;
+ T_c_string* fsm_comments_;
+ AST* called_thread_graph_;
+
+
+@*3 thread-attributes user-implementation directive.
+@<thread-attributes user-implementation directive@>=
+
+ thread_attributes::thread_attributes(const char* Fully_qualified_th_name)
+T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = ' ';
+ grammar_file_name_ = 0;
+ name_space_name_ = 0;
+ thread_name_ = 0;
+ monolithic_ = ' ';
+ file_name_ = 0;
+ th_enum_ = -1;
+ fsm_comments_ = 0;
+ called_thread_graph_ = 0;
+ }
+ thread_attributes::thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments)
+ T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = Transitive;
+ grammar_file_name_ = Grammar_name;
+ name_space_name_ = Name_space_name;
+ thread_name_ = Thread_name;
+ monolithic_ = Monolithic;
+ file_name_ = File_name;
+ if(!List_of_Ts.empty()){
+ copy(List_of_Ts.begin()
+ ,List_of_Ts.end()
+ ,back_inserter(list_of_Ts_));
+ std::vector<int>::iterator i = List_of_Ts.begin();
+ std::vector<int>::iterator ie = List_of_Ts.end();
+ for(;i!=ie;++i){
+ fs_.insert(*i);
+ }
+ }
+ if(!List_of_transitive_thds.empty())
+ copy(List_of_transitive_thds.begin()
+ ,List_of_transitive_thds.end()
+ ,back_inserter(list_of_transitive_threads_));
+ th_enum_ = -1;
+ fsm_comments_ = Fsm_comments;
+ called_thread_graph_ = 0;
+ }
+
+@*2 {\bf thread-name}.\fbreak
+Enum: T\_T\_thread\_name\_
+\fbreak
+\line{Class: T\_thread\_name \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf transitive}.\fbreak
+Enum: T\_T\_transitive\_
+\fbreak
+\line{Class: T\_transitive \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf tth-in-stbl}.\fbreak
+Enum: T\_tth\_in\_stbl\_
+\fbreak
+\line{Class: tth\_in\_stbl \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 tth-in-stbl user-declaration directive.
+@<tth-in-stbl user-declaration directive@>=
+
+ public:
+ tth_in_stbl(T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_attributes* t_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_attributes* t_in_stbl_;
+ int stbl_idx_;
+
+@*3 tth-in-stbl user-implementation directive.
+@<tth-in-stbl user-implementation directive@>=
+
+ tth_in_stbl::tth_in_stbl
+ (T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("tth-in-stbl",T_Enum::T_tth_in_stbl_,0,false,false)
+ {t_in_stbl_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_attributes* tth_in_stbl::t_in_stbl(){
+ return t_in_stbl_;
+ }
+ void tth_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int tth_in_stbl::stbl_idx(){return stbl_idx_;}
+
+@*2 {\bf unquoted-string}.\fbreak
+Enum: T\_T\_unquoted\_string\_
+\fbreak
+\line{Class: T\_unquoted\_string \hfil AB: N \hfil AD: N}
+
+
+Just as described. Gather all the characters until
+an end-of-line met.
+Used in the command line.
+Watch yourself as this is a gobbler:
+marginal utility.
+
+\fbreak
+\hrule
+@*3 unquoted-string user-declaration directive.
+@<unquoted-string user-declaration directive@>=
+
+ public:
+ T_unquoted_string(const std::string& String);
+ std::string* unquoted_string();
+ private:std::string unquoted_string_;
+
+@*3 unquoted-string user-implementation directive.
+@<unquoted-string user-implementation directive@>=
+
+ T_unquoted_string::T_unquoted_string(const std::string& String)
+ T_CTOR("unquoted-string",T_Enum::T_T_unquoted_string_,0,false,false)
+ {unquoted_string_ = String;}
+ std::string* T_unquoted_string::unquoted_string(){return &unquoted_string_;}
+
+@*2 {\bf ws}.\fbreak
+Enum: T\_T\_ws\_
+\fbreak
+\line{Class: T\_ws \hfil AB: N \hfil AD: N}
+
+
+Just white space of spaces, vertical and horizontal tabs,
+and form feeds. This is a vacuum cleaner of
+inter-word separators.
+
+\fbreak
+\hrule
+@*3 ws user-declaration directive.
+@<ws user-declaration directive@>=
+
+ public:
+ T_ws(const std::string& White_space_data);
+ T_ws();
+ std::string* ws_data();
+ private:std::string ws_data_;
+
+@*3 ws user-implementation directive.
+@<ws user-implementation directive@>=
+
+ T_ws::
+ T_ws(const std::string& Ws_data)
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {ws_data_+= Ws_data;}
+ T_ws::
+ T_ws()
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {}
+ std::string* T_ws::ws_data(){return &ws_data_;}
+ T_ws ws__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_ws__ = &ws__;
+
+@*2 {\bf xc-str}.\fbreak
+Enum: T\_T\_xc\_str\_
+\fbreak
+\line{Class: T\_xc\_str \hfil AB: N \hfil AD: N}
+
+
+Returned from |xc_str| grammar recognizing a c++ string
+without the escape sequence check. This allows one to input
+at the command level a string containing backslash etc in
+single quantities. Example, "\\nogood\\b".
+This does not end a line nor ring your bell.
+The surrounding double quotes are not added to the content.
+It's just a slight variation on ``c-string'' using
+a different grammar.
+
+\fbreak
+\hrule
+@*3 xc-str user-declaration directive.
+@<xc-str user-declaration directive@>=
+
+ public:
+ T_xc_str(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+
+@*3 xc-str user-implementation directive.
+@<xc-str user-implementation directive@>=
+
+ T_xc_str::T_xc_str(const std::string& C_string)
+ T_CTOR("xc-str",T_Enum::T_T_xc_str_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_xc_str::c_string(){return &c_string_;}
+
+@** Index.
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase.cpp b/web/yacco2/compiler/grammars/T_enum_phrase.cpp
new file mode 100644
index 0000000000..91d9296e00
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: T_enum_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CT_enum_phrase::
+ CT_enum_phrase()
+ :yacco2::CAbs_fsm
+ ("T_enum_phrase.lex"
+ ,"1.0"
+ ,"18 mar 2004"
+ ,false
+ ,"Dispatcher to parse T-enumeration construct."
+ ,"Fri Jan 30 18:55:26 2015 "
+ ,S1_CT_enum_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+CT_enum_phrase::~CT_enum_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CT_enum_phrase::failed(){
+ return false;
+ }
+ void CT_enum_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int CT_enum_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+RT_enum_phrase::RT_enum_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_enum_phrase",0,CT_enum_phrase::R_RT_enum_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,CT_enum_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_enum_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase.fsc b/web/yacco2/compiler/grammars/T_enum_phrase.fsc
new file mode 100644
index 0000000000..fec1fe0d1c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: T_enum_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+transitive y
+grammar-name "T_enum_phrase"
+name-space "NS_T_enum_phrase"
+thread-name "CT_enum_phrase"
+monolithic y
+file-name "T_enum_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_T_enum_phrase_th::TH_T_enum_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_T_enum_phrase_th::TH_T_enum_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse T-enumeration construct."
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase.h b/web/yacco2/compiler/grammars/T_enum_phrase.h
new file mode 100644
index 0000000000..55a7f4aa49
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase.h
@@ -0,0 +1,69 @@
+/*
+ File: T_enum_phrase.h
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#ifndef __T_enum_phrase_h__
+#define __T_enum_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "T_enum_phrase_th.h"
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_CT_enum_phrase;
+namespace NS_T_enum_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CT_enum_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_RT_enum_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_RT_enum_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CT_enum_phrase();
+ ~CT_enum_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct RT_enum_phrase;
+struct Rphrase;
+struct RT_enum_phrase:public yacco2::CAbs_lr1_sym {
+ RT_enum_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase.lex b/web/yacco2/compiler/grammars/T_enum_phrase.lex
new file mode 100644
index 0000000000..204d7048e0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase.lex
@@ -0,0 +1,90 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: T_enum_phrase.lex
+Dates: 15 Mar 2004
+Purpose: T-enumeration construct
+ Monolithic grammar that launches its thread.
+ Properly handles threads and errors. Starts
+ from a procedure using another parser's
+ token stream from a specific point.
+Note: Use of ||| |+| phrase to catch other returned terminals
+ or errors. In this case, it is errors.
+ One can be selective within various contexts:
+ 1) within arbitration
+ 2) sub-rule level
+ The symbol's enumerated id is the fodder to filter on.
+Grammar being parsed:
+T-enumeration
+(file-name yacco2_T_enumeration
+,name-space NS_yacco2_T_enum)
+ zero-or-one { constant-defs ...C++ constant declarations ... *** }
+*/
+/@
+@i "/yacco2/copyright.w"
+@** |T_enum_phrase| grammar.\fbreak
+Dispatcher to parse T-enumeration construct.\fbreak
+Note: Use of \PARshift{} \QUEshift{} phrase to catch
+other returned terminals
+or errors from called threads.
+In this case, it is errors so its r\^aison d'\^etre instead of
+\ALLshift{} as a ``catch all''.
+One can be selective within various contexts:\fbreak
+\INDENT{.5in}{1) within arbitration}
+\INDENT{.5in}{2) sub-rule level}
+The symbol's enumerated id is the fodder to filter on.
+ @/
+fsm
+(fsm-id "T_enum_phrase.lex"
+,fsm-filename T_enum_phrase
+,fsm-namespace NS_T_enum_phrase
+,fsm-class CT_enum_phrase{
+ user-prefix-declaration
+#include "T_enum_phrase_th.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "18 mar 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse T-enumeration construct.")
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+RT_enum_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "T-enum-phrase"
+ NS_T_enum_phrase_th::TH_T_enum_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_th.cpp b/web/yacco2/compiler/grammars/T_enum_phrase_th.cpp
new file mode 100644
index 0000000000..0cae7712ec
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_th.cpp
@@ -0,0 +1,423 @@
+/*
+ File: T_enum_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 16;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+}
+ CT_enum_phrase_th::
+ CT_enum_phrase_th()
+ :yacco2::CAbs_fsm
+ ("T_enum_phrase_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Parse ``T-enumeration'' construct: Time out smell the tullips."
+ ,"Fri Jan 30 18:55:26 2015 "
+ ,S1_CT_enum_phrase_th){
+
+ enum_phrase_ = 0;
+
+ }
+
+CT_enum_phrase_th::~CT_enum_phrase_th(){
+
+ for(int x = 0;x < 16;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CT_enum_phrase_th::failed(){
+ return false;
+ }
+ void CT_enum_phrase_th::op(){
+ if(enum_phrase_ != 0){
+ delete enum_phrase_;
+ enum_phrase_ = 0;
+ }
+ enum_phrase_ = new T_enum_phrase;
+ enum_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*enum_phrase_);
+ enum_phrase_->phrase_tree(t);
+
+}
+int CT_enum_phrase_th::rhs_to_rules_mapping_[32] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,7 // subrule 13 for rule 8
+ ,7 // subrule 14 for rule 8
+ ,8 // subrule 15 for rule 9
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,9 // subrule 18 for rule 10
+ ,9 // subrule 19 for rule 10
+ ,10 // subrule 20 for rule 11
+ ,11 // subrule 21 for rule 12
+ ,11 // subrule 22 for rule 12
+ ,12 // subrule 23 for rule 13
+ ,12 // subrule 24 for rule 13
+ ,13 // subrule 25 for rule 14
+ ,13 // subrule 26 for rule 14
+ ,13 // subrule 27 for rule 14
+ ,14 // subrule 28 for rule 15
+ ,14 // subrule 29 for rule 15
+ ,15 // subrule 30 for rule 16
+ ,15 // subrule 31 for rule 16
+};
+RT_enum_phrase::RT_enum_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_enum_phrase",0,CT_enum_phrase_th::R_RT_enum_phrase_,P,false,false){
+}
+
+void RT_enum_phrase::sr1(){
+
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->enum_phrase_);
+ fsm->enum_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,CT_enum_phrase_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,CT_enum_phrase_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,CT_enum_phrase_th::R_Rparameters_,P,false,false){
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,CT_enum_phrase_th::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,CT_enum_phrase_th::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_id::Rfilename_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_id",0,CT_enum_phrase_th::R_Rfilename_id_,P,false,false){
+}
+
+void Rfilename_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfilename_id::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,CT_enum_phrase_th::R_Rnamespace_phrase_,P,false,false){
+}
+
+void Rnamespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,CT_enum_phrase_th::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_id::Rnamespace_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_id",0,CT_enum_phrase_th::R_Rnamespace_id_,P,false,false){
+}
+
+void Rnamespace_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rnamespace_id::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rk_defs_phrase::Rk_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rk_defs_phrase",0,CT_enum_phrase_th::R_Rk_defs_phrase_,P,false,false){
+}
+
+Rconstant_epi_defs::Rconstant_epi_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rconstant_epi_defs",0,CT_enum_phrase_th::R_Rconstant_epi_defs_,P,false,false){
+}
+
+Rconstant_defs::Rconstant_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rconstant_defs",0,CT_enum_phrase_th::R_Rconstant_defs_,P,false,false){
+}
+
+void Rconstant_defs::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constant_defs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rconstant_defs::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rconstant_defs_code::Rconstant_defs_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rconstant_defs_code",0,CT_enum_phrase_th::R_Rconstant_defs_code_,P,false,false){
+}
+
+void Rconstant_defs_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->kdefs(sf->p2__);
+
+}
+
+void Rconstant_defs_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_no_kdefs_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->set_auto_delete(true);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rconstant_defs_code::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_kdefs_code_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,CT_enum_phrase_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,CT_enum_phrase_th::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_th.fsc b/web/yacco2/compiler/grammars/T_enum_phrase_th.fsc
new file mode 100644
index 0000000000..f6f9edc8da
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_th.fsc
@@ -0,0 +1,25 @@
+/*
+ File: T_enum_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+transitive y
+grammar-name "T_enum_phrase_th"
+name-space "NS_T_enum_phrase_th"
+thread-name "TH_T_enum_phrase_th"
+monolithic n
+file-name "T_enum_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+end-list-of-used-threads
+fsm-comments
+"Parse ``T-enumeration'' construct: Time out smell the tullips."
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_th.h b/web/yacco2/compiler/grammars/T_enum_phrase_th.h
new file mode 100644
index 0000000000..a9bd520593
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_th.h
@@ -0,0 +1,220 @@
+/*
+ File: T_enum_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#ifndef __T_enum_phrase_th_h__
+#define __T_enum_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+ using namespace NS_yacco2_terminals;
+
+extern yacco2::Thread_entry ITH_T_enum_phrase_th;
+
+extern yacco2::State S1_CT_enum_phrase_th;
+namespace NS_T_enum_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_T_enum_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_T_enum_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[16];
+};
+class CT_enum_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_RT_enum_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_RT_enum_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfilename_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfilename_phrase_ = 7
+ ,R_Rfilename_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfilename_ = 8
+ ,rhs2_Rfilename_ = 9
+ ,rhs3_Rfilename_ = 10
+ ,R_Rfilename_id_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfilename_id_ = 11
+ ,rhs2_Rfilename_id_ = 12
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 13
+ ,rhs2_Rnamespace_phrase_ = 14
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 15
+ ,rhs2_Rnamespace_ = 16
+ ,rhs3_Rnamespace_ = 17
+ ,R_Rnamespace_id_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_id_ = 18
+ ,rhs2_Rnamespace_id_ = 19
+ ,R_Rk_defs_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rk_defs_phrase_ = 20
+ ,R_Rconstant_epi_defs_ = 580//start_of_rule_list + 22
+ ,rhs1_Rconstant_epi_defs_ = 21
+ ,rhs2_Rconstant_epi_defs_ = 22
+ ,R_Rconstant_defs_ = 581//start_of_rule_list + 24
+ ,rhs1_Rconstant_defs_ = 23
+ ,rhs2_Rconstant_defs_ = 24
+ ,R_Rconstant_defs_code_ = 582//start_of_rule_list + 26
+ ,rhs1_Rconstant_defs_code_ = 25
+ ,rhs2_Rconstant_defs_code_ = 26
+ ,rhs3_Rconstant_defs_code_ = 27
+ ,R_Rclose_brace_ = 583//start_of_rule_list + 28
+ ,rhs1_Rclose_brace_ = 28
+ ,rhs2_Rclose_brace_ = 29
+ ,R_Rlint_ = 584//start_of_rule_list + 30
+ ,rhs1_Rlint_ = 30
+ ,rhs2_Rlint_ = 31
+ };
+ //no of la sets = 10
+ //no of states = 58
+ CT_enum_phrase_th();
+ ~CT_enum_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[32];
+
+ public:
+ T_enum_phrase* enum_phrase_;
+
+ };
+struct RT_enum_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_id;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_id;
+struct Rk_defs_phrase;
+struct Rconstant_epi_defs;
+struct Rconstant_defs;
+struct Rconstant_defs_code;
+struct Rclose_brace;
+struct Rlint;
+struct RT_enum_phrase:public yacco2::CAbs_lr1_sym {
+ RT_enum_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfilename_id:public yacco2::CAbs_lr1_sym {
+ Rfilename_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_id:public yacco2::CAbs_lr1_sym {
+ Rnamespace_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rk_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rk_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rconstant_epi_defs:public yacco2::CAbs_lr1_sym {
+ Rconstant_epi_defs(yacco2::Parser* P);
+ public:
+};
+
+struct Rconstant_defs:public yacco2::CAbs_lr1_sym {
+ Rconstant_defs(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rconstant_defs_code:public yacco2::CAbs_lr1_sym {
+ Rconstant_defs_code(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_th.lex b/web/yacco2/compiler/grammars/T_enum_phrase_th.lex
new file mode 100644
index 0000000000..ffa137a816
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_th.lex
@@ -0,0 +1,264 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: T_enum_phrase_th.lex
+Dates: 22 Mar 2004
+Purpose: parse T-enumeration phrase
+Output: T_enum_phrase
+*/
+/@
+@i "/yacco2/copyright.w"
+@** |T_enum_phrase_th| Thread.\fbreak
+parse T-enumeration phrase.
+@/
+fsm
+(fsm-id "T_enum_phrase_th.lex"
+,fsm-filename T_enum_phrase_th
+,fsm-namespace NS_T_enum_phrase_th
+,fsm-class CT_enum_phrase_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+ using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public:
+ T_enum_phrase* enum_phrase_;
+ ***
+ op
+ if(enum_phrase_ != 0){
+ delete enum_phrase_;
+ enum_phrase_ = 0;
+ }
+ enum_phrase_ = new T_enum_phrase;
+ enum_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*enum_phrase_);
+ enum_phrase_->phrase_tree(t);
+ ***
+ constructor
+ enum_phrase_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Parse ``T-enumeration'' construct: Time out smell the tullips.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_T_enum_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+RT_enum_phrase (){
+ -> Rlint
+ Ropen_par
+ Rparameters
+ Rclose_par
+ Rlint
+ Rk_defs_phrase
+ Rlint {
+ op
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->enum_phrase_);
+ fsm->enum_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rlint
+ Rfilename_phrase Rlint
+ Rnamespace_phrase Rlint
+}
+
+Rfilename_phrase (){
+ -> Rfilename Rlint Rfilename_id
+}
+
+Rfilename (){
+ -> ||| "#file-name" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (){
+ -> "," Rlint Rnamespace Rlint Rnamespace_id
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace (){
+ -> ||| "#name-space" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rk_defs_phrase (){
+ -> "{" Rlint Rconstant_epi_defs Rlint Rclose_brace
+}
+
+Rconstant_epi_defs (){
+ -> Rconstant_defs Rconstant_defs_code
+ ->
+}
+Rconstant_defs (){
+ -> ||| "#constant-defs" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rconstant_defs_code (){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ CT_enum_phrase_th* fsm = (CT_enum_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->kdefs(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {// error from syntax code thread
+ op
+ CAbs_lr1_sym* sym = new Err_no_kdefs_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->set_auto_delete(true);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_kdefs_code_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_thsym.cpp b/web/yacco2/compiler/grammars/T_enum_phrase_thsym.cpp
new file mode 100644
index 0000000000..a926305fc2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_thsym.cpp
@@ -0,0 +1,500 @@
+/*
+ File: T_enum_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_T_enum_phrase_th::TH_T_enum_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_T_enum_phrase_th;
+ NS_T_enum_phrase_th::CT_enum_phrase_th CT_enum_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE CT_enum_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_T_enum_phrase_th::PROC_TH_T_enum_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_T_enum_phrase_th";
+ static bool one_time(false);
+ static NS_T_enum_phrase_th::CT_enum_phrase_th* NS_T_enum_phrase_th_CT_enum_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_T_enum_phrase_th_CT_enum_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_T_enum_phrase_th_CT_enum_phrase_th_ = new NS_T_enum_phrase_th::CT_enum_phrase_th();// parallel-parser's fsm table
+ NS_T_enum_phrase_th_CT_enum_phrase_th_parser = new Parser(*NS_T_enum_phrase_th_CT_enum_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_T_enum_phrase_th_CT_enum_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+CT_enum_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_RT_enum_phrase_:{
+ RT_enum_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new RT_enum_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_enum_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 7;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rk_defs_phrase_:{
+ Rk_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rk_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rk_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rconstant_epi_defs_:{
+ Rconstant_epi_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_epi_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_epi_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rconstant_epi_defs_:{
+ Rconstant_epi_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_epi_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_epi_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rconstant_defs_:{
+ Rconstant_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rconstant_defs_:{
+ Rconstant_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rconstant_defs_code_:{
+ Rconstant_defs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_defs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_defs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rconstant_defs_code_:{
+ Rconstant_defs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_defs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_defs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rconstant_defs_code_:{
+ Rconstant_defs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rconstant_defs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rconstant_defs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/T_enum_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/T_enum_phrase_thtbl.cpp
new file mode 100644
index 0000000000..bda9c8bb03
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrase_thtbl.cpp
@@ -0,0 +1,1249 @@
+/*
+ File: T_enum_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase_th;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_CT_enum_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_CT_enum_phrase_th[] ={
+1
+,0,17
+};
+// raw_open_brace
+yacco2::UCHAR LA3_CT_enum_phrase_th[] ={
+1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA4_CT_enum_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA5_CT_enum_phrase_th[] ={
+2
+,0,1
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_comma
+yacco2::UCHAR LA6_CT_enum_phrase_th[] ={
+2
+,0,1
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA7_CT_enum_phrase_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA8_CT_enum_phrase_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA9_CT_enum_phrase_th[] ={
+2
+,0,16
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_comma
+yacco2::UCHAR LA10_CT_enum_phrase_th[] ={
+2
+,0,17
+,6,16
+};
+extern yacco2::State S1_CT_enum_phrase_th;
+extern yacco2::State S2_CT_enum_phrase_th;
+struct S2ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_CT_enum_phrase_th S2tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_CT_enum_phrase_th;
+extern yacco2::State S4_CT_enum_phrase_th;
+extern yacco2::State S5_CT_enum_phrase_th;
+extern yacco2::State S6_CT_enum_phrase_th;
+extern yacco2::State S7_CT_enum_phrase_th;
+extern yacco2::State S8_CT_enum_phrase_th;
+extern yacco2::State S9_CT_enum_phrase_th;
+extern yacco2::State S10_CT_enum_phrase_th;
+extern yacco2::State S11_CT_enum_phrase_th;
+extern yacco2::State S12_CT_enum_phrase_th;
+extern yacco2::State S13_CT_enum_phrase_th;
+extern yacco2::State S14_CT_enum_phrase_th;
+extern yacco2::State S15_CT_enum_phrase_th;
+extern yacco2::State S16_CT_enum_phrase_th;
+extern yacco2::State S17_CT_enum_phrase_th;
+extern yacco2::State S18_CT_enum_phrase_th;
+extern yacco2::State S19_CT_enum_phrase_th;
+extern yacco2::State S20_CT_enum_phrase_th;
+extern yacco2::State S21_CT_enum_phrase_th;
+extern yacco2::State S22_CT_enum_phrase_th;
+extern yacco2::State S23_CT_enum_phrase_th;
+extern yacco2::State S24_CT_enum_phrase_th;
+extern yacco2::State S25_CT_enum_phrase_th;
+extern yacco2::State S26_CT_enum_phrase_th;
+extern yacco2::State S27_CT_enum_phrase_th;
+extern yacco2::State S28_CT_enum_phrase_th;
+extern yacco2::State S29_CT_enum_phrase_th;
+struct S29ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S29ttd_CT_enum_phrase_th S29tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S30_CT_enum_phrase_th;
+extern yacco2::State S31_CT_enum_phrase_th;
+extern yacco2::State S32_CT_enum_phrase_th;
+extern yacco2::State S33_CT_enum_phrase_th;
+extern yacco2::State S34_CT_enum_phrase_th;
+extern yacco2::State S35_CT_enum_phrase_th;
+extern yacco2::State S36_CT_enum_phrase_th;
+struct S36ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S36ttd_CT_enum_phrase_th S36tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S37_CT_enum_phrase_th;
+extern yacco2::State S38_CT_enum_phrase_th;
+extern yacco2::State S39_CT_enum_phrase_th;
+extern yacco2::State S40_CT_enum_phrase_th;
+extern yacco2::State S41_CT_enum_phrase_th;
+struct S41ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S41ttd_CT_enum_phrase_th S41tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S42_CT_enum_phrase_th;
+extern yacco2::State S43_CT_enum_phrase_th;
+extern yacco2::State S44_CT_enum_phrase_th;
+extern yacco2::State S45_CT_enum_phrase_th;
+extern yacco2::State S46_CT_enum_phrase_th;
+struct S46ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S46ttd_CT_enum_phrase_th S46tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S47_CT_enum_phrase_th;
+extern yacco2::State S48_CT_enum_phrase_th;
+extern yacco2::State S49_CT_enum_phrase_th;
+extern yacco2::State S50_CT_enum_phrase_th;
+extern yacco2::State S51_CT_enum_phrase_th;
+extern yacco2::State S52_CT_enum_phrase_th;
+struct S52ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S52ttd_CT_enum_phrase_th S52tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S53_CT_enum_phrase_th;
+extern yacco2::State S54_CT_enum_phrase_th;
+extern yacco2::State S55_CT_enum_phrase_th;
+extern yacco2::State S56_CT_enum_phrase_th;
+struct S56ttd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S56ttd_CT_enum_phrase_th S56tt_CT_enum_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S57_CT_enum_phrase_th;
+extern yacco2::State S58_CT_enum_phrase_th;
+struct S1std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_CT_enum_phrase_th S1st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_CT_enum_phrase_th} // accept sym: RT_enum_phrase
+ ,{584,(State*)&S4_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S1rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_CT_enum_phrase_th S1rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_CT_enum_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S1st_CT_enum_phrase_th,(Reduce_tbl*)&S1rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S2std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_CT_enum_phrase_th S2st_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_CT_enum_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_CT_enum_phrase_th,0,0,0,0};
+struct S3rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_CT_enum_phrase_th S3rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_CT_enum_phrase_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_CT_enum_phrase_th,0,0,0};
+struct S4std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_CT_enum_phrase_th S4st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S18_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S19_CT_enum_phrase_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_CT_enum_phrase_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_CT_enum_phrase_th = {0,(State*)&S18_CT_enum_phrase_th};
+yacco2::State S4_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S4qse_CT_enum_phrase_th
+};
+struct S5std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_CT_enum_phrase_th S5st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_CT_enum_phrase_th} // shift sym: Rparameters
+ ,{584,(State*)&S20_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S5rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CT_enum_phrase_th S5rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_CT_enum_phrase_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S5st_CT_enum_phrase_th,(Reduce_tbl*)&S5rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S6std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_CT_enum_phrase_th S6st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S34_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S35_CT_enum_phrase_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S7_CT_enum_phrase_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_CT_enum_phrase_th = {0,(State*)&S34_CT_enum_phrase_th};
+yacco2::State S6_CT_enum_phrase_th = //State's vectored into symbol: "Rparameters"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S6qse_CT_enum_phrase_th
+};
+struct S7std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_CT_enum_phrase_th S7st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S8_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S7rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_CT_enum_phrase_th S7rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_CT_enum_phrase_th = //State's vectored into symbol: "Rclose_par"
+{7
+,(Shift_entry*)&S7pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S7st_CT_enum_phrase_th,(Reduce_tbl*)&S7rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S8std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S8std_CT_enum_phrase_th S8st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {131,(State*)&S9_CT_enum_phrase_th} // shift sym: raw_open_brace
+ ,{579,(State*)&S16_CT_enum_phrase_th} // shift sym: Rk_defs_phrase
+ }// end of shift table
+};
+yacco2::State S8_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_CT_enum_phrase_th,0,0,0,0};
+struct S9std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_CT_enum_phrase_th S9st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S10_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S9rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_CT_enum_phrase_th S9rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_CT_enum_phrase_th = //State's vectored into symbol: "{"
+{9
+,(Shift_entry*)&S9pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S9st_CT_enum_phrase_th,(Reduce_tbl*)&S9rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S10std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_CT_enum_phrase_th S10st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S36_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S11_CT_enum_phrase_th} // shift sym: Rconstant_epi_defs
+ ,{581,(State*)&S39_CT_enum_phrase_th} // shift sym: Rconstant_defs
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_CT_enum_phrase_th = {3,(State*)&S36_CT_enum_phrase_th};
+struct S10rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_CT_enum_phrase_th S10rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rconstant_epi_defs_}
+ }// end of reduce table
+};
+yacco2::State S10_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{10
+,(Shift_entry*)&S10pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S10st_CT_enum_phrase_th,(Reduce_tbl*)&S10rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S36tt_CT_enum_phrase_th,0,0};
+struct S11std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_CT_enum_phrase_th S11st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S12_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S11rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_CT_enum_phrase_th S11rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_CT_enum_phrase_th = //State's vectored into symbol: "Rconstant_epi_defs"
+{11
+,(Shift_entry*)&S11pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S11st_CT_enum_phrase_th,(Reduce_tbl*)&S11rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S12std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S12std_CT_enum_phrase_th S12st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S13_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S14_CT_enum_phrase_th} // shift sym: raw_close_brace
+ ,{583,(State*)&S15_CT_enum_phrase_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S12qse_CT_enum_phrase_th = {0,(State*)&S13_CT_enum_phrase_th};
+yacco2::State S12_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S12qse_CT_enum_phrase_th
+};
+struct S13rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_CT_enum_phrase_th S13rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S13_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_CT_enum_phrase_th,0,0,0};
+struct S14rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_CT_enum_phrase_th S14rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S14_CT_enum_phrase_th = //State's vectored into symbol: "}"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_CT_enum_phrase_th,0,0,0};
+struct S15rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_CT_enum_phrase_th S15rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rk_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S15_CT_enum_phrase_th = //State's vectored into symbol: "Rclose_brace"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_CT_enum_phrase_th,0,0,0};
+struct S16std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_CT_enum_phrase_th S16st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S17_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S16rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_CT_enum_phrase_th S16rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S16_CT_enum_phrase_th = //State's vectored into symbol: "Rk_defs_phrase"
+{16
+,(Shift_entry*)&S16pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S16st_CT_enum_phrase_th,(Reduce_tbl*)&S16rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S17rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_CT_enum_phrase_th S17rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_RT_enum_phrase_}
+ }// end of reduce table
+};
+yacco2::State S17_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_CT_enum_phrase_th,0,0,0};
+struct S18rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_CT_enum_phrase_th S18rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S18_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_CT_enum_phrase_th,0,0,0};
+struct S19rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_CT_enum_phrase_th S19rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S19_CT_enum_phrase_th = //State's vectored into symbol: "("
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_CT_enum_phrase_th,0,0,0};
+struct S20std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S20std_CT_enum_phrase_th S20st_CT_enum_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S45_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S46_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S21_CT_enum_phrase_th} // shift sym: Rfilename_phrase
+ ,{574,(State*)&S49_CT_enum_phrase_th} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_CT_enum_phrase_th = {3,(State*)&S46_CT_enum_phrase_th};
+yacco2::Shift_entry S20qse_CT_enum_phrase_th = {0,(State*)&S45_CT_enum_phrase_th};
+yacco2::State S20_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{20
+,(Shift_entry*)&S20pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S20st_CT_enum_phrase_th,0,(State_s_thread_tbl*)&S46tt_CT_enum_phrase_th,0,(Shift_entry*)&S20qse_CT_enum_phrase_th
+};
+struct S21std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S21std_CT_enum_phrase_th S21st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S22_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S21pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S21rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_CT_enum_phrase_th S21rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S21_CT_enum_phrase_th = //State's vectored into symbol: "Rfilename_phrase"
+{21
+,(Shift_entry*)&S21pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S21st_CT_enum_phrase_th,(Reduce_tbl*)&S21rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S22std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S22std_CT_enum_phrase_th S22st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S23_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S24_CT_enum_phrase_th} // shift sym: raw_comma
+ ,{576,(State*)&S32_CT_enum_phrase_th} // shift sym: Rnamespace_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S22qse_CT_enum_phrase_th = {0,(State*)&S23_CT_enum_phrase_th};
+yacco2::State S22_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S22qse_CT_enum_phrase_th
+};
+struct S23rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_CT_enum_phrase_th S23rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S23_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_CT_enum_phrase_th,0,0,0};
+struct S24std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_CT_enum_phrase_th S24st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S25_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S24rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_CT_enum_phrase_th S24rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_CT_enum_phrase_th = //State's vectored into symbol: ","
+{24
+,(Shift_entry*)&S24pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S24st_CT_enum_phrase_th,(Reduce_tbl*)&S24rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S25std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_CT_enum_phrase_th S25st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S55_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S56_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S26_CT_enum_phrase_th} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S25pse_CT_enum_phrase_th = {3,(State*)&S56_CT_enum_phrase_th};
+yacco2::Shift_entry S25qse_CT_enum_phrase_th = {0,(State*)&S55_CT_enum_phrase_th};
+yacco2::State S25_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{25
+,(Shift_entry*)&S25pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S25st_CT_enum_phrase_th,0,(State_s_thread_tbl*)&S56tt_CT_enum_phrase_th,0,(Shift_entry*)&S25qse_CT_enum_phrase_th
+};
+struct S26std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_CT_enum_phrase_th S26st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S27_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S26rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_CT_enum_phrase_th S26rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S26_CT_enum_phrase_th = //State's vectored into symbol: "Rnamespace"
+{26
+,(Shift_entry*)&S26pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S26st_CT_enum_phrase_th,(Reduce_tbl*)&S26rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S27std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S27std_CT_enum_phrase_th S27st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S28_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S29_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S31_CT_enum_phrase_th} // shift sym: Rnamespace_id
+ }// end of shift table
+};
+yacco2::Shift_entry S27pse_CT_enum_phrase_th = {3,(State*)&S29_CT_enum_phrase_th};
+yacco2::Shift_entry S27qse_CT_enum_phrase_th = {0,(State*)&S28_CT_enum_phrase_th};
+yacco2::State S27_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{27
+,(Shift_entry*)&S27pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S27st_CT_enum_phrase_th,0,(State_s_thread_tbl*)&S29tt_CT_enum_phrase_th,0,(Shift_entry*)&S27qse_CT_enum_phrase_th
+};
+struct S28rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_CT_enum_phrase_th S28rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S28_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_CT_enum_phrase_th,0,0,0};
+struct S29std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S29std_CT_enum_phrase_th S29st_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {279,(State*)&S30_CT_enum_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::State S29_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_CT_enum_phrase_th,0,0,0,0};
+struct S30rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_CT_enum_phrase_th S30rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S30_CT_enum_phrase_th = //State's vectored into symbol: "identifier"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_CT_enum_phrase_th,0,0,0};
+struct S31rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_CT_enum_phrase_th S31rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S31_CT_enum_phrase_th = //State's vectored into symbol: "Rnamespace_id"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_CT_enum_phrase_th,0,0,0};
+struct S32std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S32std_CT_enum_phrase_th S32st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S33_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S32rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_CT_enum_phrase_th S32rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S32_CT_enum_phrase_th = //State's vectored into symbol: "Rnamespace_phrase"
+{32
+,(Shift_entry*)&S32pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S32st_CT_enum_phrase_th,(Reduce_tbl*)&S32rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S33rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_CT_enum_phrase_th S33rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S33_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_CT_enum_phrase_th,0,0,0};
+struct S34rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_CT_enum_phrase_th S34rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S34_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_CT_enum_phrase_th,0,0,0};
+struct S35rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_CT_enum_phrase_th S35rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S35_CT_enum_phrase_th = //State's vectored into symbol: ")"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_CT_enum_phrase_th,0,0,0};
+struct S36std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S36std_CT_enum_phrase_th S36st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S37_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{318,(State*)&S38_CT_enum_phrase_th} // shift sym: T_constant_defs
+ }// end of shift table
+};
+yacco2::Shift_entry S36qse_CT_enum_phrase_th = {0,(State*)&S37_CT_enum_phrase_th};
+yacco2::State S36_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{36
+,0,0,0,0,(Shift_tbl*)&S36st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S36qse_CT_enum_phrase_th
+};
+struct S37rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_CT_enum_phrase_th S37rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rconstant_defs_}
+ }// end of reduce table
+};
+yacco2::State S37_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_CT_enum_phrase_th,0,0,0};
+struct S38rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_CT_enum_phrase_th S38rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rconstant_defs_}
+ }// end of reduce table
+};
+yacco2::State S38_CT_enum_phrase_th = //State's vectored into symbol: "#constant-defs"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_CT_enum_phrase_th,0,0,0};
+struct S39std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S39std_CT_enum_phrase_th S39st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S40_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S41_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{582,(State*)&S44_CT_enum_phrase_th} // shift sym: Rconstant_defs_code
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_CT_enum_phrase_th = {3,(State*)&S41_CT_enum_phrase_th};
+yacco2::Shift_entry S39qse_CT_enum_phrase_th = {0,(State*)&S40_CT_enum_phrase_th};
+yacco2::State S39_CT_enum_phrase_th = //State's vectored into symbol: "Rconstant_defs"
+{39
+,(Shift_entry*)&S39pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S39st_CT_enum_phrase_th,0,(State_s_thread_tbl*)&S41tt_CT_enum_phrase_th,0,(Shift_entry*)&S39qse_CT_enum_phrase_th
+};
+struct S40rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_CT_enum_phrase_th S40rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs3_Rconstant_defs_code_}
+ }// end of reduce table
+};
+yacco2::State S40_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_CT_enum_phrase_th,0,0,0};
+struct S41std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S41std_CT_enum_phrase_th S41st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S42_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S43_CT_enum_phrase_th} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S41qse_CT_enum_phrase_th = {0,(State*)&S42_CT_enum_phrase_th};
+yacco2::State S41_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{41
+,0,0,0,0,(Shift_tbl*)&S41st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S41qse_CT_enum_phrase_th
+};
+struct S42rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_CT_enum_phrase_th S42rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rconstant_defs_code_}
+ }// end of reduce table
+};
+yacco2::State S42_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_CT_enum_phrase_th,0,0,0};
+struct S43rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_CT_enum_phrase_th S43rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rconstant_defs_code_}
+ }// end of reduce table
+};
+yacco2::State S43_CT_enum_phrase_th = //State's vectored into symbol: "syntax-code"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_CT_enum_phrase_th,0,0,0};
+struct S44rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_CT_enum_phrase_th S44rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rconstant_epi_defs_}
+ }// end of reduce table
+};
+yacco2::State S44_CT_enum_phrase_th = //State's vectored into symbol: "Rconstant_defs_code"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_CT_enum_phrase_th,0,0,0};
+struct S45rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_CT_enum_phrase_th S45rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs3_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S45_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_CT_enum_phrase_th,0,0,0};
+struct S46std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S46std_CT_enum_phrase_th S46st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S47_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{303,(State*)&S48_CT_enum_phrase_th} // shift sym: T_file_name
+ }// end of shift table
+};
+yacco2::Shift_entry S46qse_CT_enum_phrase_th = {0,(State*)&S47_CT_enum_phrase_th};
+yacco2::State S46_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{46
+,0,0,0,0,(Shift_tbl*)&S46st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S46qse_CT_enum_phrase_th
+};
+struct S47rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_CT_enum_phrase_th S47rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S47_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_CT_enum_phrase_th,0,0,0};
+struct S48rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_CT_enum_phrase_th S48rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S48_CT_enum_phrase_th = //State's vectored into symbol: "#file-name"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_CT_enum_phrase_th,0,0,0};
+struct S49std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S49std_CT_enum_phrase_th S49st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S50_CT_enum_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S49pse_CT_enum_phrase_th = {3,(State*)&S2_CT_enum_phrase_th};
+struct S49rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_CT_enum_phrase_th S49rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S49_CT_enum_phrase_th = //State's vectored into symbol: "Rfilename"
+{49
+,(Shift_entry*)&S49pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S49st_CT_enum_phrase_th,(Reduce_tbl*)&S49rt_CT_enum_phrase_th,(State_s_thread_tbl*)&S2tt_CT_enum_phrase_th,0,0};
+struct S50std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S50std_CT_enum_phrase_th S50st_CT_enum_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S51_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S52_CT_enum_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S54_CT_enum_phrase_th} // shift sym: Rfilename_id
+ }// end of shift table
+};
+yacco2::Shift_entry S50pse_CT_enum_phrase_th = {3,(State*)&S52_CT_enum_phrase_th};
+yacco2::Shift_entry S50qse_CT_enum_phrase_th = {0,(State*)&S51_CT_enum_phrase_th};
+yacco2::State S50_CT_enum_phrase_th = //State's vectored into symbol: "Rlint"
+{50
+,(Shift_entry*)&S50pse_CT_enum_phrase_th,0,0,0,(Shift_tbl*)&S50st_CT_enum_phrase_th,0,(State_s_thread_tbl*)&S52tt_CT_enum_phrase_th,0,(Shift_entry*)&S50qse_CT_enum_phrase_th
+};
+struct S51rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_CT_enum_phrase_th S51rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S51_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_CT_enum_phrase_th,0,0,0};
+struct S52std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S52std_CT_enum_phrase_th S52st_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {279,(State*)&S53_CT_enum_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::State S52_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{52
+,0,0,0,0,(Shift_tbl*)&S52st_CT_enum_phrase_th,0,0,0,0};
+struct S53rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_CT_enum_phrase_th S53rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S53_CT_enum_phrase_th = //State's vectored into symbol: "identifier"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_CT_enum_phrase_th,0,0,0};
+struct S54rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_CT_enum_phrase_th S54rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S54_CT_enum_phrase_th = //State's vectored into symbol: "Rfilename_id"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_CT_enum_phrase_th,0,0,0};
+struct S55rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_CT_enum_phrase_th S55rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs3_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S55_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_CT_enum_phrase_th,0,0,0};
+struct S56std_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S56std_CT_enum_phrase_th S56st_CT_enum_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S57_CT_enum_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{304,(State*)&S58_CT_enum_phrase_th} // shift sym: T_name_space
+ }// end of shift table
+};
+yacco2::Shift_entry S56qse_CT_enum_phrase_th = {0,(State*)&S57_CT_enum_phrase_th};
+yacco2::State S56_CT_enum_phrase_th = //State's vectored into symbol: "|||"
+{56
+,0,0,0,0,(Shift_tbl*)&S56st_CT_enum_phrase_th,0,0,0,(Shift_entry*)&S56qse_CT_enum_phrase_th
+};
+struct S57rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_CT_enum_phrase_th S57rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S57_CT_enum_phrase_th = //State's vectored into symbol: "|?|"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_CT_enum_phrase_th,0,0,0};
+struct S58rtd_CT_enum_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_CT_enum_phrase_th S58rt_CT_enum_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CT_enum_phrase_th,CT_enum_phrase_th::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S58_CT_enum_phrase_th = //State's vectored into symbol: "#name-space"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_CT_enum_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/T_enum_phrasesym.cpp b/web/yacco2/compiler/grammars/T_enum_phrasesym.cpp
new file mode 100644
index 0000000000..3b0cd738dd
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: T_enum_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+CT_enum_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_RT_enum_phrase_:{
+ RT_enum_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new RT_enum_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_enum_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/T_enum_phrasetbl.cpp b/web/yacco2/compiler/grammars/T_enum_phrasetbl.cpp
new file mode 100644
index 0000000000..7a9faeb0fb
--- /dev/null
+++ b/web/yacco2/compiler/grammars/T_enum_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: T_enum_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "T_enum_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_T_enum_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_CT_enum_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_CT_enum_phrase;
+extern yacco2::State S2_CT_enum_phrase;
+extern yacco2::State S3_CT_enum_phrase;
+struct S3ttd_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_CT_enum_phrase S3tt_CT_enum_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_T_enum_phrase_th
+};
+extern yacco2::State S4_CT_enum_phrase;
+extern yacco2::State S5_CT_enum_phrase;
+extern yacco2::State S6_CT_enum_phrase;
+struct S1std_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CT_enum_phrase S1st_CT_enum_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_CT_enum_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_CT_enum_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_CT_enum_phrase} // accept sym: RT_enum_phrase
+ ,{570,(State*)&S6_CT_enum_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_CT_enum_phrase = {3,(State*)&S3_CT_enum_phrase};
+yacco2::Shift_entry S1qse_CT_enum_phrase = {0,(State*)&S2_CT_enum_phrase};
+yacco2::State S1_CT_enum_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_CT_enum_phrase,0,0,0,(Shift_tbl*)&S1st_CT_enum_phrase,0,(State_s_thread_tbl*)&S3tt_CT_enum_phrase,0,(Shift_entry*)&S1qse_CT_enum_phrase
+};
+struct S2rtd_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CT_enum_phrase S2rt_CT_enum_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase,CT_enum_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_CT_enum_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CT_enum_phrase,0,0,0};
+struct S3std_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CT_enum_phrase S3st_CT_enum_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_CT_enum_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{330,(State*)&S5_CT_enum_phrase} // shift sym: T_enum_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_CT_enum_phrase = {0,(State*)&S4_CT_enum_phrase};
+yacco2::State S3_CT_enum_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_CT_enum_phrase,0,0,0,(Shift_entry*)&S3qse_CT_enum_phrase
+};
+struct S4rtd_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CT_enum_phrase S4rt_CT_enum_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase,CT_enum_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_CT_enum_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CT_enum_phrase,0,0,0};
+struct S5rtd_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CT_enum_phrase S5rt_CT_enum_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase,CT_enum_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_CT_enum_phrase = //State's vectored into symbol: "T-enum-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CT_enum_phrase,0,0,0};
+struct S6rtd_CT_enum_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CT_enum_phrase S6rt_CT_enum_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CT_enum_phrase,CT_enum_phrase::rhs1_RT_enum_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_CT_enum_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CT_enum_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/angled_string.cpp b/web/yacco2/compiler/grammars/angled_string.cpp
new file mode 100644
index 0000000000..05198acc6d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_string.cpp
@@ -0,0 +1,145 @@
+/*
+ File: angled_string.cpp
+ Date and Time: Fri Jan 30 18:55:04 2015
+*/
+#include "angled_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_angled_string;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cangled_string::
+ Cangled_string()
+ :yacco2::CAbs_fsm
+ ("angled_string.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"Angled string lexer: < ... > with c type escape sequences."
+ ,"Fri Jan 30 18:55:04 2015 "
+ ,S1_Cangled_string){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cangled_string::~Cangled_string(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cangled_string::failed(){
+ return false;
+ }
+ void Cangled_string::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cangled_string::rhs_to_rules_mapping_[3] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+};
+
+ void Cangled_string::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+
+ void Cangled_string::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rangled_string::Rangled_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rangled_string",0,Cangled_string::R_Rangled_string_,P,false,false){
+}
+
+void Rangled_string::sr1(){
+
+ Cangled_string* fsm = (Cangled_string*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_angled_string((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+Ropen_angle::Ropen_angle(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_angle",0,Cangled_string::R_Ropen_angle_,P,false,false){
+}
+
+void Ropen_angle::sr1(){
+
+ Cangled_string* fsm = (Cangled_string*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_gt_than_: goto closestr;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ closestr:{ // end of string
+ rule_info__.parser__->get_next_token();
+ return;// end of angled string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{ // what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/angled_string.fsc b/web/yacco2/compiler/grammars/angled_string.fsc
new file mode 100644
index 0000000000..e62d66f586
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_string.fsc
@@ -0,0 +1,20 @@
+/*
+ File: angled_string.fsc
+ Date and Time: Fri Jan 30 18:55:04 2015
+*/
+transitive n
+grammar-name "angled_string"
+name-space "NS_angled_string"
+thread-name "TH_angled_string"
+monolithic n
+file-name "angled_string.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_less_than
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Angled string lexer: < ... > with c type escape sequences."
diff --git a/web/yacco2/compiler/grammars/angled_string.h b/web/yacco2/compiler/grammars/angled_string.h
new file mode 100644
index 0000000000..5ded93babf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_string.h
@@ -0,0 +1,74 @@
+/*
+ File: angled_string.h
+ Date and Time: Fri Jan 30 18:55:04 2015
+*/
+#ifndef __angled_string_h__
+#define __angled_string_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "esc_seq.h"
+
+extern yacco2::Thread_entry ITH_angled_string;
+
+extern yacco2::State S1_Cangled_string;
+namespace NS_angled_string {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_angled_string(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_angled_string(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cangled_string: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rangled_string_ = 569//start_of_rule_list + 0
+ ,rhs1_Rangled_string_ = 1
+ ,R_Ropen_angle_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_angle_ = 2
+ };
+ //no of la sets = 2
+ //no of states = 4
+ Cangled_string();
+ ~Cangled_string();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[3];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rangled_string;
+struct Ropen_angle;
+struct Rangled_string:public yacco2::CAbs_lr1_sym {
+ Rangled_string(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_angle:public yacco2::CAbs_lr1_sym {
+ Ropen_angle(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/angled_string.lex b/web/yacco2/compiler/grammars/angled_string.lex
new file mode 100644
index 0000000000..23e3929fa3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_string.lex
@@ -0,0 +1,172 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: angled_string.lex
+Dates: 2 mar. 2005
+Purpose: angle bracket filename: Eg <yacco2.h>
+Returned: T_angled_string
+ Err_bad_eos - meta terminal indicating an improper end-of-string
+ this occurs on eof,eog, or an eol terminal ending the string
+ Err_bad_esc - bad escape sequence.
+Note: Stripped of its bounding <> for ease of use
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |angled_string| Thread.\fbreak
+It recognizes
+character sequences of example ${<}$ my disc ${>}$
+typically used in a c++ include statement or in my case files to be
+read either thru my own include statements or from the
+command line.
+|esc_seq| thread evaluates the c++ literal character escape sequences buried
+inside the angled brackets.
+The escape sequences cover the backslash variety ---
+octal, hex, and character, and
+those pesky unicode types.
+Nothing is done with them at present --- only their syntax is
+recognized.
+The |esc_seq| terminal returned contains the
+character string parsed.
+The |angled_string| returned contains the enclosed character string
+without the bounding angle brackets.
+So ${<}$ my disc ${>}$ becomes ``my disc'' without the quotes.
+The {\bf empty string} is tollerated.
+It is left to the calling grammar to deal with it.\fbreak
+\fbreak
+Errors:\fbreak
+Caused by either an invalid character escape sequence or an improper closing of the
+|angled_string| --- an end of line or file etc
+before possibly omitted closing
+``${>}$'' bracket.
+These two conditions are indicated by the 2 error terminals
+ |Err_bad_esc| and |Err_bad_eos|.\fbreak
+\fbreak
+Returned T: |T_angled_string| \fbreak
+@/
+fsm
+(fsm-id "angled_string.lex",fsm-filename angled_string,fsm-namespace NS_angled_string
+,fsm-class Cangled_string {
+ user-prefix-declaration
+#include "esc_seq.h"
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Cangled_string::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+
+ void Cangled_string::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+}
+,fsm-version "1.0" ,fsm-date "17 Juin 2003"
+,fsm-debug "false"
+,fsm-comments "Angled string lexer: < ... > with c type escape sequences.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_angled_string
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rangled_string ()
+{
+ -> Ropen_angle |.|{
+ op
+ Cangled_string* fsm = (Cangled_string*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_angled_string((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+}
+
+Ropen_angle (){
+ -> "<" {
+ op
+ Cangled_string* fsm = (Cangled_string*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_gt_than_: goto closestr;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ closestr:{ // end of string
+ rule_info__.parser__->get_next_token();
+ return;// end of angled string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{ // what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/angled_stringsym.cpp b/web/yacco2/compiler/grammars/angled_stringsym.cpp
new file mode 100644
index 0000000000..4ebce9c214
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_stringsym.cpp
@@ -0,0 +1,78 @@
+/*
+ File: angled_stringsym.cpp
+ Date and Time: Fri Jan 30 18:55:04 2015
+*/
+#include "angled_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_angled_string;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_angled_string::TH_angled_string(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_angled_string;
+ NS_angled_string::Cangled_string Cangled_string_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cangled_string_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_angled_string::PROC_TH_angled_string(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_angled_string";
+ static bool one_time(false);
+ static NS_angled_string::Cangled_string* NS_angled_string_Cangled_string_(0);// parallel-parser's fsm table
+ static Parser* NS_angled_string_Cangled_string_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_angled_string_Cangled_string_ = new NS_angled_string::Cangled_string();// parallel-parser's fsm table
+ NS_angled_string_Cangled_string_parser = new Parser(*NS_angled_string_Cangled_string_,Caller_pp);
+ }
+ proc_parser = NS_angled_string_Cangled_string_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cangled_string::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rangled_string_:{
+ Rangled_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rangled_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rangled_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_angle_:{
+ Ropen_angle* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_angle(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_angle*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/angled_stringtbl.cpp b/web/yacco2/compiler/grammars/angled_stringtbl.cpp
new file mode 100644
index 0000000000..5f32bea7cc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/angled_stringtbl.cpp
@@ -0,0 +1,87 @@
+/*
+ File: angled_stringtbl.cpp
+ Date and Time: Fri Jan 30 18:55:04 2015
+*/
+#include "angled_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_angled_string;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cangled_string[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cangled_string[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cangled_string;
+extern yacco2::State S2_Cangled_string;
+extern yacco2::State S3_Cangled_string;
+extern yacco2::State S4_Cangled_string;
+struct S1std_Cangled_string{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cangled_string S1st_Cangled_string = {
+ 3
+ ,
+ {// start of table
+ {68,(State*)&S2_Cangled_string} // shift sym: raw_less_than
+ ,{569,(State*)&S1_Cangled_string} // accept sym: Rangled_string
+ ,{570,(State*)&S3_Cangled_string} // shift sym: Ropen_angle
+ }// end of shift table
+};
+yacco2::State S1_Cangled_string = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cangled_string,0,0,0,0};
+struct S2rtd_Cangled_string{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cangled_string S2rt_Cangled_string = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cangled_string,Cangled_string::rhs1_Ropen_angle_}
+ }// end of reduce table
+};
+yacco2::State S2_Cangled_string = //State's vectored into symbol: "<"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cangled_string,0,0,0};
+struct S3std_Cangled_string{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cangled_string S3st_Cangled_string = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S4_Cangled_string} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Cangled_string = {5,(State*)&S4_Cangled_string};
+yacco2::State S3_Cangled_string = //State's vectored into symbol: "Ropen_angle"
+{3
+,0,0,(Shift_entry*)&S3ise_Cangled_string
+,0,(Shift_tbl*)&S3st_Cangled_string,0,0,0,0};
+struct S4rtd_Cangled_string{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cangled_string S4rt_Cangled_string = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cangled_string,Cangled_string::rhs1_Rangled_string_}
+ }// end of reduce table
+};
+yacco2::State S4_Cangled_string = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cangled_string,0,0,0};
diff --git a/web/yacco2/compiler/grammars/bad_char_set.cpp b/web/yacco2/compiler/grammars/bad_char_set.cpp
new file mode 100644
index 0000000000..d852ef8c3a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_set.cpp
@@ -0,0 +1,284 @@
+/*
+ File: bad_char_set.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "bad_char_set.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_bad_char_set;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 11;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+}
+ Cbad_char_set::
+ Cbad_char_set()
+ :yacco2::CAbs_fsm
+ ("bad_char_set.lex"
+ ,"1.0"
+ ,"16 Juin 2003"
+ ,false
+ ,"Bad source character set recognizer."
+ ,"Fri Jan 30 18:55:05 2015 "
+ ,S1_Cbad_char_set){
+
+ }
+
+Cbad_char_set::~Cbad_char_set(){
+
+ for(int x = 0;x < 11;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cbad_char_set::failed(){
+ return false;
+ }
+ void Cbad_char_set::op(){
+}
+int Cbad_char_set::rhs_to_rules_mapping_[167] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,0 // subrule 6 for rule 1
+ ,0 // subrule 7 for rule 1
+ ,0 // subrule 8 for rule 1
+ ,0 // subrule 9 for rule 1
+ ,0 // subrule 10 for rule 1
+ ,1 // subrule 11 for rule 2
+ ,1 // subrule 12 for rule 2
+ ,1 // subrule 13 for rule 2
+ ,1 // subrule 14 for rule 2
+ ,1 // subrule 15 for rule 2
+ ,1 // subrule 16 for rule 2
+ ,1 // subrule 17 for rule 2
+ ,1 // subrule 18 for rule 2
+ ,1 // subrule 19 for rule 2
+ ,1 // subrule 20 for rule 2
+ ,1 // subrule 21 for rule 2
+ ,2 // subrule 22 for rule 3
+ ,2 // subrule 23 for rule 3
+ ,2 // subrule 24 for rule 3
+ ,2 // subrule 25 for rule 3
+ ,2 // subrule 26 for rule 3
+ ,2 // subrule 27 for rule 3
+ ,2 // subrule 28 for rule 3
+ ,2 // subrule 29 for rule 3
+ ,2 // subrule 30 for rule 3
+ ,2 // subrule 31 for rule 3
+ ,2 // subrule 32 for rule 3
+ ,2 // subrule 33 for rule 3
+ ,2 // subrule 34 for rule 3
+ ,2 // subrule 35 for rule 3
+ ,2 // subrule 36 for rule 3
+ ,2 // subrule 37 for rule 3
+ ,2 // subrule 38 for rule 3
+ ,3 // subrule 39 for rule 4
+ ,3 // subrule 40 for rule 4
+ ,3 // subrule 41 for rule 4
+ ,3 // subrule 42 for rule 4
+ ,3 // subrule 43 for rule 4
+ ,3 // subrule 44 for rule 4
+ ,3 // subrule 45 for rule 4
+ ,3 // subrule 46 for rule 4
+ ,3 // subrule 47 for rule 4
+ ,3 // subrule 48 for rule 4
+ ,3 // subrule 49 for rule 4
+ ,3 // subrule 50 for rule 4
+ ,3 // subrule 51 for rule 4
+ ,3 // subrule 52 for rule 4
+ ,3 // subrule 53 for rule 4
+ ,3 // subrule 54 for rule 4
+ ,4 // subrule 55 for rule 5
+ ,4 // subrule 56 for rule 5
+ ,4 // subrule 57 for rule 5
+ ,4 // subrule 58 for rule 5
+ ,4 // subrule 59 for rule 5
+ ,4 // subrule 60 for rule 5
+ ,4 // subrule 61 for rule 5
+ ,4 // subrule 62 for rule 5
+ ,4 // subrule 63 for rule 5
+ ,4 // subrule 64 for rule 5
+ ,4 // subrule 65 for rule 5
+ ,4 // subrule 66 for rule 5
+ ,4 // subrule 67 for rule 5
+ ,4 // subrule 68 for rule 5
+ ,4 // subrule 69 for rule 5
+ ,4 // subrule 70 for rule 5
+ ,5 // subrule 71 for rule 6
+ ,5 // subrule 72 for rule 6
+ ,5 // subrule 73 for rule 6
+ ,5 // subrule 74 for rule 6
+ ,5 // subrule 75 for rule 6
+ ,5 // subrule 76 for rule 6
+ ,5 // subrule 77 for rule 6
+ ,5 // subrule 78 for rule 6
+ ,5 // subrule 79 for rule 6
+ ,5 // subrule 80 for rule 6
+ ,5 // subrule 81 for rule 6
+ ,5 // subrule 82 for rule 6
+ ,5 // subrule 83 for rule 6
+ ,5 // subrule 84 for rule 6
+ ,5 // subrule 85 for rule 6
+ ,5 // subrule 86 for rule 6
+ ,6 // subrule 87 for rule 7
+ ,6 // subrule 88 for rule 7
+ ,6 // subrule 89 for rule 7
+ ,6 // subrule 90 for rule 7
+ ,6 // subrule 91 for rule 7
+ ,6 // subrule 92 for rule 7
+ ,6 // subrule 93 for rule 7
+ ,6 // subrule 94 for rule 7
+ ,6 // subrule 95 for rule 7
+ ,6 // subrule 96 for rule 7
+ ,6 // subrule 97 for rule 7
+ ,6 // subrule 98 for rule 7
+ ,6 // subrule 99 for rule 7
+ ,6 // subrule 100 for rule 7
+ ,6 // subrule 101 for rule 7
+ ,6 // subrule 102 for rule 7
+ ,7 // subrule 103 for rule 8
+ ,7 // subrule 104 for rule 8
+ ,7 // subrule 105 for rule 8
+ ,7 // subrule 106 for rule 8
+ ,7 // subrule 107 for rule 8
+ ,7 // subrule 108 for rule 8
+ ,7 // subrule 109 for rule 8
+ ,7 // subrule 110 for rule 8
+ ,7 // subrule 111 for rule 8
+ ,7 // subrule 112 for rule 8
+ ,7 // subrule 113 for rule 8
+ ,7 // subrule 114 for rule 8
+ ,7 // subrule 115 for rule 8
+ ,7 // subrule 116 for rule 8
+ ,7 // subrule 117 for rule 8
+ ,7 // subrule 118 for rule 8
+ ,8 // subrule 119 for rule 9
+ ,8 // subrule 120 for rule 9
+ ,8 // subrule 121 for rule 9
+ ,8 // subrule 122 for rule 9
+ ,8 // subrule 123 for rule 9
+ ,8 // subrule 124 for rule 9
+ ,8 // subrule 125 for rule 9
+ ,8 // subrule 126 for rule 9
+ ,8 // subrule 127 for rule 9
+ ,8 // subrule 128 for rule 9
+ ,8 // subrule 129 for rule 9
+ ,8 // subrule 130 for rule 9
+ ,8 // subrule 131 for rule 9
+ ,8 // subrule 132 for rule 9
+ ,8 // subrule 133 for rule 9
+ ,8 // subrule 134 for rule 9
+ ,9 // subrule 135 for rule 10
+ ,9 // subrule 136 for rule 10
+ ,9 // subrule 137 for rule 10
+ ,9 // subrule 138 for rule 10
+ ,9 // subrule 139 for rule 10
+ ,9 // subrule 140 for rule 10
+ ,9 // subrule 141 for rule 10
+ ,9 // subrule 142 for rule 10
+ ,9 // subrule 143 for rule 10
+ ,9 // subrule 144 for rule 10
+ ,9 // subrule 145 for rule 10
+ ,9 // subrule 146 for rule 10
+ ,9 // subrule 147 for rule 10
+ ,9 // subrule 148 for rule 10
+ ,9 // subrule 149 for rule 10
+ ,9 // subrule 150 for rule 10
+ ,10 // subrule 151 for rule 11
+ ,10 // subrule 152 for rule 11
+ ,10 // subrule 153 for rule 11
+ ,10 // subrule 154 for rule 11
+ ,10 // subrule 155 for rule 11
+ ,10 // subrule 156 for rule 11
+ ,10 // subrule 157 for rule 11
+ ,10 // subrule 158 for rule 11
+ ,10 // subrule 159 for rule 11
+ ,10 // subrule 160 for rule 11
+ ,10 // subrule 161 for rule 11
+ ,10 // subrule 162 for rule 11
+ ,10 // subrule 163 for rule 11
+ ,10 // subrule 164 for rule 11
+ ,10 // subrule 165 for rule 11
+ ,10 // subrule 166 for rule 11
+};
+Rbad_char_set::Rbad_char_set(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_set",0,Cbad_char_set::R_Rbad_char_set_,P,false,false){
+}
+
+void Rbad_char_set::op(){
+ sstrace_rulesss
+
+ CAbs_lr1_sym* sym = new Err_bad_char(rule_info__.parser__->start_token__);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+Rbad_char_00_0f::Rbad_char_00_0f(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_00_0f",0,Cbad_char_set::R_Rbad_char_00_0f_,P,false,false){
+}
+
+Rbad_char_10_7f::Rbad_char_10_7f(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_10_7f",0,Cbad_char_set::R_Rbad_char_10_7f_,P,false,false){
+}
+
+Rbad_char_80_8f::Rbad_char_80_8f(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_80_8f",0,Cbad_char_set::R_Rbad_char_80_8f_,P,false,false){
+}
+
+Rbad_char_90_9f::Rbad_char_90_9f(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_90_9f",0,Cbad_char_set::R_Rbad_char_90_9f_,P,false,false){
+}
+
+Rbad_char_a0_af::Rbad_char_a0_af(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_a0_af",0,Cbad_char_set::R_Rbad_char_a0_af_,P,false,false){
+}
+
+Rbad_char_b0_bf::Rbad_char_b0_bf(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_b0_bf",0,Cbad_char_set::R_Rbad_char_b0_bf_,P,false,false){
+}
+
+Rbad_char_c0_cf::Rbad_char_c0_cf(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_c0_cf",0,Cbad_char_set::R_Rbad_char_c0_cf_,P,false,false){
+}
+
+Rbad_char_d0_df::Rbad_char_d0_df(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_d0_df",0,Cbad_char_set::R_Rbad_char_d0_df_,P,false,false){
+}
+
+Rbad_char_e0_ef::Rbad_char_e0_ef(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_e0_ef",0,Cbad_char_set::R_Rbad_char_e0_ef_,P,false,false){
+}
+
+Rbad_char_f0_ff::Rbad_char_f0_ff(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbad_char_f0_ff",0,Cbad_char_set::R_Rbad_char_f0_ff_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/bad_char_set.fsc b/web/yacco2/compiler/grammars/bad_char_set.fsc
new file mode 100644
index 0000000000..b66d5d3b07
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_set.fsc
@@ -0,0 +1,175 @@
+/*
+ File: bad_char_set.fsc
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+transitive n
+grammar-name "bad_char_set"
+name-space "NS_bad_char_set"
+thread-name "TH_bad_char_set"
+monolithic n
+file-name "bad_char_set.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 156
+ raw_nul
+ raw_soh
+ raw_stx
+ raw_etx
+ raw_eot
+ raw_enq
+ raw_ack
+ raw_bel
+ raw_bs
+ raw_so
+ raw_si
+ raw_dle
+ raw_dc1
+ raw_dc2
+ raw_dc3
+ raw_dc4
+ raw_nak
+ raw_syn
+ raw_etb
+ raw_can
+ raw_em
+ raw_sub
+ raw_esc
+ raw_fs
+ raw_gs
+ raw_rs
+ raw_us
+ raw_del
+ raw_x80
+ raw_x81
+ raw_x82
+ raw_x83
+ raw_x84
+ raw_x85
+ raw_x86
+ raw_x87
+ raw_x88
+ raw_x89
+ raw_x8a
+ raw_x8b
+ raw_x8c
+ raw_x8d
+ raw_x8e
+ raw_x8f
+ raw_x90
+ raw_x91
+ raw_x92
+ raw_x93
+ raw_x94
+ raw_x95
+ raw_x96
+ raw_x97
+ raw_x98
+ raw_x99
+ raw_x9a
+ raw_x9b
+ raw_x9c
+ raw_x9d
+ raw_x9e
+ raw_x9f
+ raw_xa0
+ raw_xa1
+ raw_xa2
+ raw_xa3
+ raw_xa4
+ raw_xa5
+ raw_xa6
+ raw_xa7
+ raw_xa8
+ raw_xa9
+ raw_xaa
+ raw_xab
+ raw_xac
+ raw_xad
+ raw_xae
+ raw_xaf
+ raw_xb0
+ raw_xb1
+ raw_xb2
+ raw_xb3
+ raw_xb4
+ raw_xb5
+ raw_xb6
+ raw_xb7
+ raw_xb8
+ raw_xb9
+ raw_xba
+ raw_xbb
+ raw_xbc
+ raw_xbd
+ raw_xbe
+ raw_xbf
+ raw_xc0
+ raw_xc1
+ raw_xc2
+ raw_xc3
+ raw_xc4
+ raw_xc5
+ raw_xc6
+ raw_xc7
+ raw_xc8
+ raw_xc9
+ raw_xca
+ raw_xcb
+ raw_xcc
+ raw_xcd
+ raw_xce
+ raw_xcf
+ raw_xd0
+ raw_xd1
+ raw_xd2
+ raw_xd3
+ raw_xd4
+ raw_xd5
+ raw_xd6
+ raw_xd7
+ raw_xd8
+ raw_xd9
+ raw_xda
+ raw_xdb
+ raw_xdc
+ raw_xdd
+ raw_xde
+ raw_xdf
+ raw_xe0
+ raw_xe1
+ raw_xe2
+ raw_xe3
+ raw_xe4
+ raw_xe5
+ raw_xe6
+ raw_xe7
+ raw_xe8
+ raw_xe9
+ raw_xea
+ raw_xeb
+ raw_xec
+ raw_xed
+ raw_xee
+ raw_xef
+ raw_xf0
+ raw_xf1
+ raw_xf2
+ raw_xf3
+ raw_xf4
+ raw_xf5
+ raw_xf6
+ raw_xf7
+ raw_xf8
+ raw_xf9
+ raw_xfa
+ raw_xfb
+ raw_xfc
+ raw_xfd
+ raw_xfe
+ raw_xff
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Bad source character set recognizer."
diff --git a/web/yacco2/compiler/grammars/bad_char_set.h b/web/yacco2/compiler/grammars/bad_char_set.h
new file mode 100644
index 0000000000..ac8f304b30
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_set.h
@@ -0,0 +1,290 @@
+/*
+ File: bad_char_set.h
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#ifndef __bad_char_set_h__
+#define __bad_char_set_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_bad_char_set;
+
+extern yacco2::State S1_Cbad_char_set;
+namespace NS_bad_char_set {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_bad_char_set(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_bad_char_set(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[11];
+};
+class Cbad_char_set: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rbad_char_set_ = 569//start_of_rule_list + 0
+ ,rhs1_Rbad_char_set_ = 1
+ ,rhs2_Rbad_char_set_ = 2
+ ,rhs3_Rbad_char_set_ = 3
+ ,rhs4_Rbad_char_set_ = 4
+ ,rhs5_Rbad_char_set_ = 5
+ ,rhs6_Rbad_char_set_ = 6
+ ,rhs7_Rbad_char_set_ = 7
+ ,rhs8_Rbad_char_set_ = 8
+ ,rhs9_Rbad_char_set_ = 9
+ ,rhs10_Rbad_char_set_ = 10
+ ,R_Rbad_char_00_0f_ = 570//start_of_rule_list + 2
+ ,rhs1_Rbad_char_00_0f_ = 11
+ ,rhs2_Rbad_char_00_0f_ = 12
+ ,rhs3_Rbad_char_00_0f_ = 13
+ ,rhs4_Rbad_char_00_0f_ = 14
+ ,rhs5_Rbad_char_00_0f_ = 15
+ ,rhs6_Rbad_char_00_0f_ = 16
+ ,rhs7_Rbad_char_00_0f_ = 17
+ ,rhs8_Rbad_char_00_0f_ = 18
+ ,rhs9_Rbad_char_00_0f_ = 19
+ ,rhs10_Rbad_char_00_0f_ = 20
+ ,rhs11_Rbad_char_00_0f_ = 21
+ ,R_Rbad_char_10_7f_ = 571//start_of_rule_list + 4
+ ,rhs1_Rbad_char_10_7f_ = 22
+ ,rhs2_Rbad_char_10_7f_ = 23
+ ,rhs3_Rbad_char_10_7f_ = 24
+ ,rhs4_Rbad_char_10_7f_ = 25
+ ,rhs5_Rbad_char_10_7f_ = 26
+ ,rhs6_Rbad_char_10_7f_ = 27
+ ,rhs7_Rbad_char_10_7f_ = 28
+ ,rhs8_Rbad_char_10_7f_ = 29
+ ,rhs9_Rbad_char_10_7f_ = 30
+ ,rhs10_Rbad_char_10_7f_ = 31
+ ,rhs11_Rbad_char_10_7f_ = 32
+ ,rhs12_Rbad_char_10_7f_ = 33
+ ,rhs13_Rbad_char_10_7f_ = 34
+ ,rhs14_Rbad_char_10_7f_ = 35
+ ,rhs15_Rbad_char_10_7f_ = 36
+ ,rhs16_Rbad_char_10_7f_ = 37
+ ,rhs17_Rbad_char_10_7f_ = 38
+ ,R_Rbad_char_80_8f_ = 572//start_of_rule_list + 6
+ ,rhs1_Rbad_char_80_8f_ = 39
+ ,rhs2_Rbad_char_80_8f_ = 40
+ ,rhs3_Rbad_char_80_8f_ = 41
+ ,rhs4_Rbad_char_80_8f_ = 42
+ ,rhs5_Rbad_char_80_8f_ = 43
+ ,rhs6_Rbad_char_80_8f_ = 44
+ ,rhs7_Rbad_char_80_8f_ = 45
+ ,rhs8_Rbad_char_80_8f_ = 46
+ ,rhs9_Rbad_char_80_8f_ = 47
+ ,rhs10_Rbad_char_80_8f_ = 48
+ ,rhs11_Rbad_char_80_8f_ = 49
+ ,rhs12_Rbad_char_80_8f_ = 50
+ ,rhs13_Rbad_char_80_8f_ = 51
+ ,rhs14_Rbad_char_80_8f_ = 52
+ ,rhs15_Rbad_char_80_8f_ = 53
+ ,rhs16_Rbad_char_80_8f_ = 54
+ ,R_Rbad_char_90_9f_ = 573//start_of_rule_list + 8
+ ,rhs1_Rbad_char_90_9f_ = 55
+ ,rhs2_Rbad_char_90_9f_ = 56
+ ,rhs3_Rbad_char_90_9f_ = 57
+ ,rhs4_Rbad_char_90_9f_ = 58
+ ,rhs5_Rbad_char_90_9f_ = 59
+ ,rhs6_Rbad_char_90_9f_ = 60
+ ,rhs7_Rbad_char_90_9f_ = 61
+ ,rhs8_Rbad_char_90_9f_ = 62
+ ,rhs9_Rbad_char_90_9f_ = 63
+ ,rhs10_Rbad_char_90_9f_ = 64
+ ,rhs11_Rbad_char_90_9f_ = 65
+ ,rhs12_Rbad_char_90_9f_ = 66
+ ,rhs13_Rbad_char_90_9f_ = 67
+ ,rhs14_Rbad_char_90_9f_ = 68
+ ,rhs15_Rbad_char_90_9f_ = 69
+ ,rhs16_Rbad_char_90_9f_ = 70
+ ,R_Rbad_char_a0_af_ = 574//start_of_rule_list + 10
+ ,rhs1_Rbad_char_a0_af_ = 71
+ ,rhs2_Rbad_char_a0_af_ = 72
+ ,rhs3_Rbad_char_a0_af_ = 73
+ ,rhs4_Rbad_char_a0_af_ = 74
+ ,rhs5_Rbad_char_a0_af_ = 75
+ ,rhs6_Rbad_char_a0_af_ = 76
+ ,rhs7_Rbad_char_a0_af_ = 77
+ ,rhs8_Rbad_char_a0_af_ = 78
+ ,rhs9_Rbad_char_a0_af_ = 79
+ ,rhs10_Rbad_char_a0_af_ = 80
+ ,rhs11_Rbad_char_a0_af_ = 81
+ ,rhs12_Rbad_char_a0_af_ = 82
+ ,rhs13_Rbad_char_a0_af_ = 83
+ ,rhs14_Rbad_char_a0_af_ = 84
+ ,rhs15_Rbad_char_a0_af_ = 85
+ ,rhs16_Rbad_char_a0_af_ = 86
+ ,R_Rbad_char_b0_bf_ = 575//start_of_rule_list + 12
+ ,rhs1_Rbad_char_b0_bf_ = 87
+ ,rhs2_Rbad_char_b0_bf_ = 88
+ ,rhs3_Rbad_char_b0_bf_ = 89
+ ,rhs4_Rbad_char_b0_bf_ = 90
+ ,rhs5_Rbad_char_b0_bf_ = 91
+ ,rhs6_Rbad_char_b0_bf_ = 92
+ ,rhs7_Rbad_char_b0_bf_ = 93
+ ,rhs8_Rbad_char_b0_bf_ = 94
+ ,rhs9_Rbad_char_b0_bf_ = 95
+ ,rhs10_Rbad_char_b0_bf_ = 96
+ ,rhs11_Rbad_char_b0_bf_ = 97
+ ,rhs12_Rbad_char_b0_bf_ = 98
+ ,rhs13_Rbad_char_b0_bf_ = 99
+ ,rhs14_Rbad_char_b0_bf_ = 100
+ ,rhs15_Rbad_char_b0_bf_ = 101
+ ,rhs16_Rbad_char_b0_bf_ = 102
+ ,R_Rbad_char_c0_cf_ = 576//start_of_rule_list + 14
+ ,rhs1_Rbad_char_c0_cf_ = 103
+ ,rhs2_Rbad_char_c0_cf_ = 104
+ ,rhs3_Rbad_char_c0_cf_ = 105
+ ,rhs4_Rbad_char_c0_cf_ = 106
+ ,rhs5_Rbad_char_c0_cf_ = 107
+ ,rhs6_Rbad_char_c0_cf_ = 108
+ ,rhs7_Rbad_char_c0_cf_ = 109
+ ,rhs8_Rbad_char_c0_cf_ = 110
+ ,rhs9_Rbad_char_c0_cf_ = 111
+ ,rhs10_Rbad_char_c0_cf_ = 112
+ ,rhs11_Rbad_char_c0_cf_ = 113
+ ,rhs12_Rbad_char_c0_cf_ = 114
+ ,rhs13_Rbad_char_c0_cf_ = 115
+ ,rhs14_Rbad_char_c0_cf_ = 116
+ ,rhs15_Rbad_char_c0_cf_ = 117
+ ,rhs16_Rbad_char_c0_cf_ = 118
+ ,R_Rbad_char_d0_df_ = 577//start_of_rule_list + 16
+ ,rhs1_Rbad_char_d0_df_ = 119
+ ,rhs2_Rbad_char_d0_df_ = 120
+ ,rhs3_Rbad_char_d0_df_ = 121
+ ,rhs4_Rbad_char_d0_df_ = 122
+ ,rhs5_Rbad_char_d0_df_ = 123
+ ,rhs6_Rbad_char_d0_df_ = 124
+ ,rhs7_Rbad_char_d0_df_ = 125
+ ,rhs8_Rbad_char_d0_df_ = 126
+ ,rhs9_Rbad_char_d0_df_ = 127
+ ,rhs10_Rbad_char_d0_df_ = 128
+ ,rhs11_Rbad_char_d0_df_ = 129
+ ,rhs12_Rbad_char_d0_df_ = 130
+ ,rhs13_Rbad_char_d0_df_ = 131
+ ,rhs14_Rbad_char_d0_df_ = 132
+ ,rhs15_Rbad_char_d0_df_ = 133
+ ,rhs16_Rbad_char_d0_df_ = 134
+ ,R_Rbad_char_e0_ef_ = 578//start_of_rule_list + 18
+ ,rhs1_Rbad_char_e0_ef_ = 135
+ ,rhs2_Rbad_char_e0_ef_ = 136
+ ,rhs3_Rbad_char_e0_ef_ = 137
+ ,rhs4_Rbad_char_e0_ef_ = 138
+ ,rhs5_Rbad_char_e0_ef_ = 139
+ ,rhs6_Rbad_char_e0_ef_ = 140
+ ,rhs7_Rbad_char_e0_ef_ = 141
+ ,rhs8_Rbad_char_e0_ef_ = 142
+ ,rhs9_Rbad_char_e0_ef_ = 143
+ ,rhs10_Rbad_char_e0_ef_ = 144
+ ,rhs11_Rbad_char_e0_ef_ = 145
+ ,rhs12_Rbad_char_e0_ef_ = 146
+ ,rhs13_Rbad_char_e0_ef_ = 147
+ ,rhs14_Rbad_char_e0_ef_ = 148
+ ,rhs15_Rbad_char_e0_ef_ = 149
+ ,rhs16_Rbad_char_e0_ef_ = 150
+ ,R_Rbad_char_f0_ff_ = 579//start_of_rule_list + 20
+ ,rhs1_Rbad_char_f0_ff_ = 151
+ ,rhs2_Rbad_char_f0_ff_ = 152
+ ,rhs3_Rbad_char_f0_ff_ = 153
+ ,rhs4_Rbad_char_f0_ff_ = 154
+ ,rhs5_Rbad_char_f0_ff_ = 155
+ ,rhs6_Rbad_char_f0_ff_ = 156
+ ,rhs7_Rbad_char_f0_ff_ = 157
+ ,rhs8_Rbad_char_f0_ff_ = 158
+ ,rhs9_Rbad_char_f0_ff_ = 159
+ ,rhs10_Rbad_char_f0_ff_ = 160
+ ,rhs11_Rbad_char_f0_ff_ = 161
+ ,rhs12_Rbad_char_f0_ff_ = 162
+ ,rhs13_Rbad_char_f0_ff_ = 163
+ ,rhs14_Rbad_char_f0_ff_ = 164
+ ,rhs15_Rbad_char_f0_ff_ = 165
+ ,rhs16_Rbad_char_f0_ff_ = 166
+ };
+ //no of la sets = 1
+ //no of states = 167
+ Cbad_char_set();
+ ~Cbad_char_set();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[167];
+ };
+struct Rbad_char_set;
+struct Rbad_char_00_0f;
+struct Rbad_char_10_7f;
+struct Rbad_char_80_8f;
+struct Rbad_char_90_9f;
+struct Rbad_char_a0_af;
+struct Rbad_char_b0_bf;
+struct Rbad_char_c0_cf;
+struct Rbad_char_d0_df;
+struct Rbad_char_e0_ef;
+struct Rbad_char_f0_ff;
+struct Rbad_char_set:public yacco2::CAbs_lr1_sym {
+ Rbad_char_set(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rbad_char_00_0f:public yacco2::CAbs_lr1_sym {
+ Rbad_char_00_0f(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_10_7f:public yacco2::CAbs_lr1_sym {
+ Rbad_char_10_7f(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_80_8f:public yacco2::CAbs_lr1_sym {
+ Rbad_char_80_8f(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_90_9f:public yacco2::CAbs_lr1_sym {
+ Rbad_char_90_9f(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_a0_af:public yacco2::CAbs_lr1_sym {
+ Rbad_char_a0_af(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_b0_bf:public yacco2::CAbs_lr1_sym {
+ Rbad_char_b0_bf(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_c0_cf:public yacco2::CAbs_lr1_sym {
+ Rbad_char_c0_cf(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_d0_df:public yacco2::CAbs_lr1_sym {
+ Rbad_char_d0_df(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_e0_ef:public yacco2::CAbs_lr1_sym {
+ Rbad_char_e0_ef(yacco2::Parser* P);
+ public:
+};
+
+struct Rbad_char_f0_ff:public yacco2::CAbs_lr1_sym {
+ Rbad_char_f0_ff(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/bad_char_set.lex b/web/yacco2/compiler/grammars/bad_char_set.lex
new file mode 100644
index 0000000000..762e2e3eb0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_set.lex
@@ -0,0 +1,122 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: bad_char_set.lex
+dates: 16 June 2003
+Purpose: bad char characters
+Note:
+ The reason to be explicit on the bad characters is
+ performance: First set of thread is specific on each terminal
+ and not general using |+| with filter logic.
+Returned: Err_bad_char
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |bad_char_set| Thread.\fbreak
+|bad_char_set| recognizes characters in the range of
+0 .. 8, 14..31, 127 .. 255. This is my take at the momment
+on bad dudes.
+The terminal literal is a variant on the hex sequence
+without the escape part. This is just to reference
+and display it rather than deal with its
+ binary representation and purpose.
+
+|bad_char_set| is just a single character
+recognizer ie its first set.
+This thread can be removed from the thread stable giving
+the complete character range to play with across your grammars.
+The raw character terminals defines them.
+The breaking up into a character range per rule allows
+the drawings to be contained per print page.
+This is a little more estheque than a hanging ladder of
+subrules exceeding the bottom part of the sheet.
+@/
+fsm
+(fsm-id "bad_char_set.lex",fsm-filename bad_char_set,fsm-namespace NS_bad_char_set
+,fsm-class Cbad_char_set,fsm-version "1.0",fsm-date "16 Juin 2003",fsm-debug "false"
+,fsm-comments "Bad source character set recognizer.")
+parallel-parser
+( parallel-thread-function
+ TH_bad_char_set
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rbad_char_set (
+lhs{
+ op
+ CAbs_lr1_sym* sym = new Err_bad_char(rule_info__.parser__->start_token__);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+){
+ -> Rbad_char_00_0f
+ -> Rbad_char_10_7f
+ -> Rbad_char_80_8f
+ -> Rbad_char_90_9f
+ -> Rbad_char_a0_af
+ -> Rbad_char_b0_bf
+ -> Rbad_char_c0_cf
+ -> Rbad_char_d0_df
+ -> Rbad_char_e0_ef
+ -> Rbad_char_f0_ff
+}
+
+Rbad_char_00_0f (){
+ -> "x00" -> "x01" -> "x02" -> "x03" -> "x04" -> "x05" -> "x06" -> "x07"
+ -> "x08"
+ -> "x0e" -> "x0f"
+}
+
+Rbad_char_10_7f (){
+ -> "x10" -> "x11" -> "x12" -> "x13" -> "x14" -> "x15" -> "x16" -> "x17"
+ -> "x18" -> "x19" -> "x1a" -> "x1b" -> "x1c" -> "x1d" -> "x1e" -> "x1f"
+ -> "x7f"
+}
+
+Rbad_char_80_8f (){
+ -> "x80" -> "x81" -> "x82" -> "x83" -> "x84" -> "x85" -> "x86" -> "x87"
+ -> "x88" -> "x89" -> "x8a" -> "x8b" -> "x8c" -> "x8d" -> "x8e" -> "x8f"
+}
+
+Rbad_char_90_9f (){
+ -> "x90" -> "x91" -> "x92" -> "x93" -> "x94" -> "x95" -> "x96" -> "x97"
+ -> "x98" -> "x99" -> "x9a" -> "x9b" -> "x9c" -> "x9d" -> "x9e" -> "x9f"
+}
+
+Rbad_char_a0_af (){
+ -> "xa0" -> "xa1" -> "xa2" -> "xa3" -> "xa4" -> "xa5" -> "xa6" -> "xa7"
+ -> "xa8" -> "xa9" -> "xaa" -> "xab" -> "xac" -> "xad" -> "xae" -> "xaf"
+}
+
+Rbad_char_b0_bf (){
+ -> "xb0" -> "xb1" -> "xb2" -> "xb3" -> "xb4" -> "xb5" -> "xb6" -> "xb7"
+ -> "xb8" -> "xb9" -> "xba" -> "xbb" -> "xbc" -> "xbd" -> "xbe" -> "xbf"
+}
+
+Rbad_char_c0_cf (){
+ -> "xc0" -> "xc1" -> "xc2" -> "xc3" -> "xc4" -> "xc5" -> "xc6" -> "xc7"
+ -> "xc8" -> "xc9" -> "xca" -> "xcb" -> "xcc" -> "xcd" -> "xce" -> "xcf"
+}
+
+Rbad_char_d0_df (){
+ -> "xd0" -> "xd1" -> "xd2" -> "xd3" -> "xd4" -> "xd5" -> "xd6" -> "xd7"
+ -> "xd8" -> "xd9" -> "xda" -> "xdb" -> "xdc" -> "xdd" -> "xde" -> "xdf"
+}
+
+Rbad_char_e0_ef (){
+ -> "xe0" -> "xe1" -> "xe2" -> "xe3" -> "xe4" -> "xe5" -> "xe6" -> "xe7"
+ -> "xe8" -> "xe9" -> "xea" -> "xeb" -> "xec" -> "xed" -> "xee" -> "xef"
+}
+
+Rbad_char_f0_ff (){
+ -> "xf0" -> "xf1" -> "xf2" -> "xf3" -> "xf4" -> "xf5" -> "xf6" -> "xf7"
+ -> "xf8" -> "xf9" -> "xfa" -> "xfb" -> "xfc" -> "xfd" -> "xfe" -> "xff"
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/bad_char_setsym.cpp b/web/yacco2/compiler/grammars/bad_char_setsym.cpp
new file mode 100644
index 0000000000..ed7b842a27
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_setsym.cpp
@@ -0,0 +1,2382 @@
+/*
+ File: bad_char_setsym.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "bad_char_set.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_bad_char_set;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_bad_char_set::TH_bad_char_set(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_bad_char_set;
+ NS_bad_char_set::Cbad_char_set Cbad_char_set_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cbad_char_set_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_bad_char_set::PROC_TH_bad_char_set(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_bad_char_set";
+ static bool one_time(false);
+ static NS_bad_char_set::Cbad_char_set* NS_bad_char_set_Cbad_char_set_(0);// parallel-parser's fsm table
+ static Parser* NS_bad_char_set_Cbad_char_set_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_bad_char_set_Cbad_char_set_ = new NS_bad_char_set::Cbad_char_set();// parallel-parser's fsm table
+ NS_bad_char_set_Cbad_char_set_parser = new Parser(*NS_bad_char_set_Cbad_char_set_,Caller_pp);
+ }
+ proc_parser = NS_bad_char_set_Cbad_char_set_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cbad_char_set::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rbad_char_set_:{
+ Rbad_char_set* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_set(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_set*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_00_0f_:{
+ Rbad_char_00_0f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_00_0f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_00_0f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs17_Rbad_char_10_7f_:{
+ Rbad_char_10_7f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_10_7f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_10_7f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_80_8f_:{
+ Rbad_char_80_8f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_80_8f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_80_8f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_90_9f_:{
+ Rbad_char_90_9f* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_90_9f(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_90_9f*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_a0_af_:{
+ Rbad_char_a0_af* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_a0_af(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_a0_af*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_b0_bf_:{
+ Rbad_char_b0_bf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_b0_bf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_b0_bf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_c0_cf_:{
+ Rbad_char_c0_cf* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_c0_cf(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_c0_cf*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_d0_df_:{
+ Rbad_char_d0_df* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_d0_df(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_d0_df*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_e0_ef_:{
+ Rbad_char_e0_ef* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_e0_ef(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_e0_ef*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs14_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs15_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs16_Rbad_char_f0_ff_:{
+ Rbad_char_f0_ff* sym;
+ if(re->rule_ == 0){
+ sym = new Rbad_char_f0_ff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbad_char_f0_ff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/bad_char_settbl.cpp b/web/yacco2/compiler/grammars/bad_char_settbl.cpp
new file mode 100644
index 0000000000..16aacf2a55
--- /dev/null
+++ b/web/yacco2/compiler/grammars/bad_char_settbl.cpp
@@ -0,0 +1,2689 @@
+/*
+ File: bad_char_settbl.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "bad_char_set.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_bad_char_set;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cbad_char_set[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cbad_char_set;
+extern yacco2::State S2_Cbad_char_set;
+extern yacco2::State S3_Cbad_char_set;
+extern yacco2::State S4_Cbad_char_set;
+extern yacco2::State S5_Cbad_char_set;
+extern yacco2::State S6_Cbad_char_set;
+extern yacco2::State S7_Cbad_char_set;
+extern yacco2::State S8_Cbad_char_set;
+extern yacco2::State S9_Cbad_char_set;
+extern yacco2::State S10_Cbad_char_set;
+extern yacco2::State S11_Cbad_char_set;
+extern yacco2::State S12_Cbad_char_set;
+extern yacco2::State S13_Cbad_char_set;
+extern yacco2::State S14_Cbad_char_set;
+extern yacco2::State S15_Cbad_char_set;
+extern yacco2::State S16_Cbad_char_set;
+extern yacco2::State S17_Cbad_char_set;
+extern yacco2::State S18_Cbad_char_set;
+extern yacco2::State S19_Cbad_char_set;
+extern yacco2::State S20_Cbad_char_set;
+extern yacco2::State S21_Cbad_char_set;
+extern yacco2::State S22_Cbad_char_set;
+extern yacco2::State S23_Cbad_char_set;
+extern yacco2::State S24_Cbad_char_set;
+extern yacco2::State S25_Cbad_char_set;
+extern yacco2::State S26_Cbad_char_set;
+extern yacco2::State S27_Cbad_char_set;
+extern yacco2::State S28_Cbad_char_set;
+extern yacco2::State S29_Cbad_char_set;
+extern yacco2::State S30_Cbad_char_set;
+extern yacco2::State S31_Cbad_char_set;
+extern yacco2::State S32_Cbad_char_set;
+extern yacco2::State S33_Cbad_char_set;
+extern yacco2::State S34_Cbad_char_set;
+extern yacco2::State S35_Cbad_char_set;
+extern yacco2::State S36_Cbad_char_set;
+extern yacco2::State S37_Cbad_char_set;
+extern yacco2::State S38_Cbad_char_set;
+extern yacco2::State S39_Cbad_char_set;
+extern yacco2::State S40_Cbad_char_set;
+extern yacco2::State S41_Cbad_char_set;
+extern yacco2::State S42_Cbad_char_set;
+extern yacco2::State S43_Cbad_char_set;
+extern yacco2::State S44_Cbad_char_set;
+extern yacco2::State S45_Cbad_char_set;
+extern yacco2::State S46_Cbad_char_set;
+extern yacco2::State S47_Cbad_char_set;
+extern yacco2::State S48_Cbad_char_set;
+extern yacco2::State S49_Cbad_char_set;
+extern yacco2::State S50_Cbad_char_set;
+extern yacco2::State S51_Cbad_char_set;
+extern yacco2::State S52_Cbad_char_set;
+extern yacco2::State S53_Cbad_char_set;
+extern yacco2::State S54_Cbad_char_set;
+extern yacco2::State S55_Cbad_char_set;
+extern yacco2::State S56_Cbad_char_set;
+extern yacco2::State S57_Cbad_char_set;
+extern yacco2::State S58_Cbad_char_set;
+extern yacco2::State S59_Cbad_char_set;
+extern yacco2::State S60_Cbad_char_set;
+extern yacco2::State S61_Cbad_char_set;
+extern yacco2::State S62_Cbad_char_set;
+extern yacco2::State S63_Cbad_char_set;
+extern yacco2::State S64_Cbad_char_set;
+extern yacco2::State S65_Cbad_char_set;
+extern yacco2::State S66_Cbad_char_set;
+extern yacco2::State S67_Cbad_char_set;
+extern yacco2::State S68_Cbad_char_set;
+extern yacco2::State S69_Cbad_char_set;
+extern yacco2::State S70_Cbad_char_set;
+extern yacco2::State S71_Cbad_char_set;
+extern yacco2::State S72_Cbad_char_set;
+extern yacco2::State S73_Cbad_char_set;
+extern yacco2::State S74_Cbad_char_set;
+extern yacco2::State S75_Cbad_char_set;
+extern yacco2::State S76_Cbad_char_set;
+extern yacco2::State S77_Cbad_char_set;
+extern yacco2::State S78_Cbad_char_set;
+extern yacco2::State S79_Cbad_char_set;
+extern yacco2::State S80_Cbad_char_set;
+extern yacco2::State S81_Cbad_char_set;
+extern yacco2::State S82_Cbad_char_set;
+extern yacco2::State S83_Cbad_char_set;
+extern yacco2::State S84_Cbad_char_set;
+extern yacco2::State S85_Cbad_char_set;
+extern yacco2::State S86_Cbad_char_set;
+extern yacco2::State S87_Cbad_char_set;
+extern yacco2::State S88_Cbad_char_set;
+extern yacco2::State S89_Cbad_char_set;
+extern yacco2::State S90_Cbad_char_set;
+extern yacco2::State S91_Cbad_char_set;
+extern yacco2::State S92_Cbad_char_set;
+extern yacco2::State S93_Cbad_char_set;
+extern yacco2::State S94_Cbad_char_set;
+extern yacco2::State S95_Cbad_char_set;
+extern yacco2::State S96_Cbad_char_set;
+extern yacco2::State S97_Cbad_char_set;
+extern yacco2::State S98_Cbad_char_set;
+extern yacco2::State S99_Cbad_char_set;
+extern yacco2::State S100_Cbad_char_set;
+extern yacco2::State S101_Cbad_char_set;
+extern yacco2::State S102_Cbad_char_set;
+extern yacco2::State S103_Cbad_char_set;
+extern yacco2::State S104_Cbad_char_set;
+extern yacco2::State S105_Cbad_char_set;
+extern yacco2::State S106_Cbad_char_set;
+extern yacco2::State S107_Cbad_char_set;
+extern yacco2::State S108_Cbad_char_set;
+extern yacco2::State S109_Cbad_char_set;
+extern yacco2::State S110_Cbad_char_set;
+extern yacco2::State S111_Cbad_char_set;
+extern yacco2::State S112_Cbad_char_set;
+extern yacco2::State S113_Cbad_char_set;
+extern yacco2::State S114_Cbad_char_set;
+extern yacco2::State S115_Cbad_char_set;
+extern yacco2::State S116_Cbad_char_set;
+extern yacco2::State S117_Cbad_char_set;
+extern yacco2::State S118_Cbad_char_set;
+extern yacco2::State S119_Cbad_char_set;
+extern yacco2::State S120_Cbad_char_set;
+extern yacco2::State S121_Cbad_char_set;
+extern yacco2::State S122_Cbad_char_set;
+extern yacco2::State S123_Cbad_char_set;
+extern yacco2::State S124_Cbad_char_set;
+extern yacco2::State S125_Cbad_char_set;
+extern yacco2::State S126_Cbad_char_set;
+extern yacco2::State S127_Cbad_char_set;
+extern yacco2::State S128_Cbad_char_set;
+extern yacco2::State S129_Cbad_char_set;
+extern yacco2::State S130_Cbad_char_set;
+extern yacco2::State S131_Cbad_char_set;
+extern yacco2::State S132_Cbad_char_set;
+extern yacco2::State S133_Cbad_char_set;
+extern yacco2::State S134_Cbad_char_set;
+extern yacco2::State S135_Cbad_char_set;
+extern yacco2::State S136_Cbad_char_set;
+extern yacco2::State S137_Cbad_char_set;
+extern yacco2::State S138_Cbad_char_set;
+extern yacco2::State S139_Cbad_char_set;
+extern yacco2::State S140_Cbad_char_set;
+extern yacco2::State S141_Cbad_char_set;
+extern yacco2::State S142_Cbad_char_set;
+extern yacco2::State S143_Cbad_char_set;
+extern yacco2::State S144_Cbad_char_set;
+extern yacco2::State S145_Cbad_char_set;
+extern yacco2::State S146_Cbad_char_set;
+extern yacco2::State S147_Cbad_char_set;
+extern yacco2::State S148_Cbad_char_set;
+extern yacco2::State S149_Cbad_char_set;
+extern yacco2::State S150_Cbad_char_set;
+extern yacco2::State S151_Cbad_char_set;
+extern yacco2::State S152_Cbad_char_set;
+extern yacco2::State S153_Cbad_char_set;
+extern yacco2::State S154_Cbad_char_set;
+extern yacco2::State S155_Cbad_char_set;
+extern yacco2::State S156_Cbad_char_set;
+extern yacco2::State S157_Cbad_char_set;
+extern yacco2::State S158_Cbad_char_set;
+extern yacco2::State S159_Cbad_char_set;
+extern yacco2::State S160_Cbad_char_set;
+extern yacco2::State S161_Cbad_char_set;
+extern yacco2::State S162_Cbad_char_set;
+extern yacco2::State S163_Cbad_char_set;
+extern yacco2::State S164_Cbad_char_set;
+extern yacco2::State S165_Cbad_char_set;
+extern yacco2::State S166_Cbad_char_set;
+extern yacco2::State S167_Cbad_char_set;
+struct S1std_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[167];
+};
+S1std_Cbad_char_set S1st_Cbad_char_set = {
+ 167
+ ,
+ {// start of table
+ {8,(State*)&S2_Cbad_char_set} // shift sym: raw_nul
+ ,{9,(State*)&S3_Cbad_char_set} // shift sym: raw_soh
+ ,{10,(State*)&S4_Cbad_char_set} // shift sym: raw_stx
+ ,{11,(State*)&S5_Cbad_char_set} // shift sym: raw_etx
+ ,{12,(State*)&S6_Cbad_char_set} // shift sym: raw_eot
+ ,{13,(State*)&S7_Cbad_char_set} // shift sym: raw_enq
+ ,{14,(State*)&S8_Cbad_char_set} // shift sym: raw_ack
+ ,{15,(State*)&S9_Cbad_char_set} // shift sym: raw_bel
+ ,{16,(State*)&S10_Cbad_char_set} // shift sym: raw_bs
+ ,{22,(State*)&S11_Cbad_char_set} // shift sym: raw_so
+ ,{23,(State*)&S12_Cbad_char_set} // shift sym: raw_si
+ ,{24,(State*)&S13_Cbad_char_set} // shift sym: raw_dle
+ ,{25,(State*)&S14_Cbad_char_set} // shift sym: raw_dc1
+ ,{26,(State*)&S15_Cbad_char_set} // shift sym: raw_dc2
+ ,{27,(State*)&S16_Cbad_char_set} // shift sym: raw_dc3
+ ,{28,(State*)&S17_Cbad_char_set} // shift sym: raw_dc4
+ ,{29,(State*)&S18_Cbad_char_set} // shift sym: raw_nak
+ ,{30,(State*)&S19_Cbad_char_set} // shift sym: raw_syn
+ ,{31,(State*)&S20_Cbad_char_set} // shift sym: raw_etb
+ ,{32,(State*)&S21_Cbad_char_set} // shift sym: raw_can
+ ,{33,(State*)&S22_Cbad_char_set} // shift sym: raw_em
+ ,{34,(State*)&S23_Cbad_char_set} // shift sym: raw_sub
+ ,{35,(State*)&S24_Cbad_char_set} // shift sym: raw_esc
+ ,{36,(State*)&S25_Cbad_char_set} // shift sym: raw_fs
+ ,{37,(State*)&S26_Cbad_char_set} // shift sym: raw_gs
+ ,{38,(State*)&S27_Cbad_char_set} // shift sym: raw_rs
+ ,{39,(State*)&S28_Cbad_char_set} // shift sym: raw_us
+ ,{135,(State*)&S29_Cbad_char_set} // shift sym: raw_del
+ ,{136,(State*)&S30_Cbad_char_set} // shift sym: raw_x80
+ ,{137,(State*)&S31_Cbad_char_set} // shift sym: raw_x81
+ ,{138,(State*)&S32_Cbad_char_set} // shift sym: raw_x82
+ ,{139,(State*)&S33_Cbad_char_set} // shift sym: raw_x83
+ ,{140,(State*)&S34_Cbad_char_set} // shift sym: raw_x84
+ ,{141,(State*)&S35_Cbad_char_set} // shift sym: raw_x85
+ ,{142,(State*)&S36_Cbad_char_set} // shift sym: raw_x86
+ ,{143,(State*)&S37_Cbad_char_set} // shift sym: raw_x87
+ ,{144,(State*)&S38_Cbad_char_set} // shift sym: raw_x88
+ ,{145,(State*)&S39_Cbad_char_set} // shift sym: raw_x89
+ ,{146,(State*)&S40_Cbad_char_set} // shift sym: raw_x8a
+ ,{147,(State*)&S41_Cbad_char_set} // shift sym: raw_x8b
+ ,{148,(State*)&S42_Cbad_char_set} // shift sym: raw_x8c
+ ,{149,(State*)&S43_Cbad_char_set} // shift sym: raw_x8d
+ ,{150,(State*)&S44_Cbad_char_set} // shift sym: raw_x8e
+ ,{151,(State*)&S45_Cbad_char_set} // shift sym: raw_x8f
+ ,{152,(State*)&S46_Cbad_char_set} // shift sym: raw_x90
+ ,{153,(State*)&S47_Cbad_char_set} // shift sym: raw_x91
+ ,{154,(State*)&S48_Cbad_char_set} // shift sym: raw_x92
+ ,{155,(State*)&S49_Cbad_char_set} // shift sym: raw_x93
+ ,{156,(State*)&S50_Cbad_char_set} // shift sym: raw_x94
+ ,{157,(State*)&S51_Cbad_char_set} // shift sym: raw_x95
+ ,{158,(State*)&S52_Cbad_char_set} // shift sym: raw_x96
+ ,{159,(State*)&S53_Cbad_char_set} // shift sym: raw_x97
+ ,{160,(State*)&S54_Cbad_char_set} // shift sym: raw_x98
+ ,{161,(State*)&S55_Cbad_char_set} // shift sym: raw_x99
+ ,{162,(State*)&S56_Cbad_char_set} // shift sym: raw_x9a
+ ,{163,(State*)&S57_Cbad_char_set} // shift sym: raw_x9b
+ ,{164,(State*)&S58_Cbad_char_set} // shift sym: raw_x9c
+ ,{165,(State*)&S59_Cbad_char_set} // shift sym: raw_x9d
+ ,{166,(State*)&S60_Cbad_char_set} // shift sym: raw_x9e
+ ,{167,(State*)&S61_Cbad_char_set} // shift sym: raw_x9f
+ ,{168,(State*)&S62_Cbad_char_set} // shift sym: raw_xa0
+ ,{169,(State*)&S63_Cbad_char_set} // shift sym: raw_xa1
+ ,{170,(State*)&S64_Cbad_char_set} // shift sym: raw_xa2
+ ,{171,(State*)&S65_Cbad_char_set} // shift sym: raw_xa3
+ ,{172,(State*)&S66_Cbad_char_set} // shift sym: raw_xa4
+ ,{173,(State*)&S67_Cbad_char_set} // shift sym: raw_xa5
+ ,{174,(State*)&S68_Cbad_char_set} // shift sym: raw_xa6
+ ,{175,(State*)&S69_Cbad_char_set} // shift sym: raw_xa7
+ ,{176,(State*)&S70_Cbad_char_set} // shift sym: raw_xa8
+ ,{177,(State*)&S71_Cbad_char_set} // shift sym: raw_xa9
+ ,{178,(State*)&S72_Cbad_char_set} // shift sym: raw_xaa
+ ,{179,(State*)&S73_Cbad_char_set} // shift sym: raw_xab
+ ,{180,(State*)&S74_Cbad_char_set} // shift sym: raw_xac
+ ,{181,(State*)&S75_Cbad_char_set} // shift sym: raw_xad
+ ,{182,(State*)&S76_Cbad_char_set} // shift sym: raw_xae
+ ,{183,(State*)&S77_Cbad_char_set} // shift sym: raw_xaf
+ ,{184,(State*)&S78_Cbad_char_set} // shift sym: raw_xb0
+ ,{185,(State*)&S79_Cbad_char_set} // shift sym: raw_xb1
+ ,{186,(State*)&S80_Cbad_char_set} // shift sym: raw_xb2
+ ,{187,(State*)&S81_Cbad_char_set} // shift sym: raw_xb3
+ ,{188,(State*)&S82_Cbad_char_set} // shift sym: raw_xb4
+ ,{189,(State*)&S83_Cbad_char_set} // shift sym: raw_xb5
+ ,{190,(State*)&S84_Cbad_char_set} // shift sym: raw_xb6
+ ,{191,(State*)&S85_Cbad_char_set} // shift sym: raw_xb7
+ ,{192,(State*)&S86_Cbad_char_set} // shift sym: raw_xb8
+ ,{193,(State*)&S87_Cbad_char_set} // shift sym: raw_xb9
+ ,{194,(State*)&S88_Cbad_char_set} // shift sym: raw_xba
+ ,{195,(State*)&S89_Cbad_char_set} // shift sym: raw_xbb
+ ,{196,(State*)&S90_Cbad_char_set} // shift sym: raw_xbc
+ ,{197,(State*)&S91_Cbad_char_set} // shift sym: raw_xbd
+ ,{198,(State*)&S92_Cbad_char_set} // shift sym: raw_xbe
+ ,{199,(State*)&S93_Cbad_char_set} // shift sym: raw_xbf
+ ,{200,(State*)&S94_Cbad_char_set} // shift sym: raw_xc0
+ ,{201,(State*)&S95_Cbad_char_set} // shift sym: raw_xc1
+ ,{202,(State*)&S96_Cbad_char_set} // shift sym: raw_xc2
+ ,{203,(State*)&S97_Cbad_char_set} // shift sym: raw_xc3
+ ,{204,(State*)&S98_Cbad_char_set} // shift sym: raw_xc4
+ ,{205,(State*)&S99_Cbad_char_set} // shift sym: raw_xc5
+ ,{206,(State*)&S100_Cbad_char_set} // shift sym: raw_xc6
+ ,{207,(State*)&S101_Cbad_char_set} // shift sym: raw_xc7
+ ,{208,(State*)&S102_Cbad_char_set} // shift sym: raw_xc8
+ ,{209,(State*)&S103_Cbad_char_set} // shift sym: raw_xc9
+ ,{210,(State*)&S104_Cbad_char_set} // shift sym: raw_xca
+ ,{211,(State*)&S105_Cbad_char_set} // shift sym: raw_xcb
+ ,{212,(State*)&S106_Cbad_char_set} // shift sym: raw_xcc
+ ,{213,(State*)&S107_Cbad_char_set} // shift sym: raw_xcd
+ ,{214,(State*)&S108_Cbad_char_set} // shift sym: raw_xce
+ ,{215,(State*)&S109_Cbad_char_set} // shift sym: raw_xcf
+ ,{216,(State*)&S110_Cbad_char_set} // shift sym: raw_xd0
+ ,{217,(State*)&S111_Cbad_char_set} // shift sym: raw_xd1
+ ,{218,(State*)&S112_Cbad_char_set} // shift sym: raw_xd2
+ ,{219,(State*)&S113_Cbad_char_set} // shift sym: raw_xd3
+ ,{220,(State*)&S114_Cbad_char_set} // shift sym: raw_xd4
+ ,{221,(State*)&S115_Cbad_char_set} // shift sym: raw_xd5
+ ,{222,(State*)&S116_Cbad_char_set} // shift sym: raw_xd6
+ ,{223,(State*)&S117_Cbad_char_set} // shift sym: raw_xd7
+ ,{224,(State*)&S118_Cbad_char_set} // shift sym: raw_xd8
+ ,{225,(State*)&S119_Cbad_char_set} // shift sym: raw_xd9
+ ,{226,(State*)&S120_Cbad_char_set} // shift sym: raw_xda
+ ,{227,(State*)&S121_Cbad_char_set} // shift sym: raw_xdb
+ ,{228,(State*)&S122_Cbad_char_set} // shift sym: raw_xdc
+ ,{229,(State*)&S123_Cbad_char_set} // shift sym: raw_xdd
+ ,{230,(State*)&S124_Cbad_char_set} // shift sym: raw_xde
+ ,{231,(State*)&S125_Cbad_char_set} // shift sym: raw_xdf
+ ,{232,(State*)&S126_Cbad_char_set} // shift sym: raw_xe0
+ ,{233,(State*)&S127_Cbad_char_set} // shift sym: raw_xe1
+ ,{234,(State*)&S128_Cbad_char_set} // shift sym: raw_xe2
+ ,{235,(State*)&S129_Cbad_char_set} // shift sym: raw_xe3
+ ,{236,(State*)&S130_Cbad_char_set} // shift sym: raw_xe4
+ ,{237,(State*)&S131_Cbad_char_set} // shift sym: raw_xe5
+ ,{238,(State*)&S132_Cbad_char_set} // shift sym: raw_xe6
+ ,{239,(State*)&S133_Cbad_char_set} // shift sym: raw_xe7
+ ,{240,(State*)&S134_Cbad_char_set} // shift sym: raw_xe8
+ ,{241,(State*)&S135_Cbad_char_set} // shift sym: raw_xe9
+ ,{242,(State*)&S136_Cbad_char_set} // shift sym: raw_xea
+ ,{243,(State*)&S137_Cbad_char_set} // shift sym: raw_xeb
+ ,{244,(State*)&S138_Cbad_char_set} // shift sym: raw_xec
+ ,{245,(State*)&S139_Cbad_char_set} // shift sym: raw_xed
+ ,{246,(State*)&S140_Cbad_char_set} // shift sym: raw_xee
+ ,{247,(State*)&S141_Cbad_char_set} // shift sym: raw_xef
+ ,{248,(State*)&S142_Cbad_char_set} // shift sym: raw_xf0
+ ,{249,(State*)&S143_Cbad_char_set} // shift sym: raw_xf1
+ ,{250,(State*)&S144_Cbad_char_set} // shift sym: raw_xf2
+ ,{251,(State*)&S145_Cbad_char_set} // shift sym: raw_xf3
+ ,{252,(State*)&S146_Cbad_char_set} // shift sym: raw_xf4
+ ,{253,(State*)&S147_Cbad_char_set} // shift sym: raw_xf5
+ ,{254,(State*)&S148_Cbad_char_set} // shift sym: raw_xf6
+ ,{255,(State*)&S149_Cbad_char_set} // shift sym: raw_xf7
+ ,{256,(State*)&S150_Cbad_char_set} // shift sym: raw_xf8
+ ,{257,(State*)&S151_Cbad_char_set} // shift sym: raw_xf9
+ ,{258,(State*)&S152_Cbad_char_set} // shift sym: raw_xfa
+ ,{259,(State*)&S153_Cbad_char_set} // shift sym: raw_xfb
+ ,{260,(State*)&S154_Cbad_char_set} // shift sym: raw_xfc
+ ,{261,(State*)&S155_Cbad_char_set} // shift sym: raw_xfd
+ ,{262,(State*)&S156_Cbad_char_set} // shift sym: raw_xfe
+ ,{263,(State*)&S157_Cbad_char_set} // shift sym: raw_xff
+ ,{569,(State*)&S1_Cbad_char_set} // accept sym: Rbad_char_set
+ ,{570,(State*)&S158_Cbad_char_set} // shift sym: Rbad_char_00_0f
+ ,{571,(State*)&S159_Cbad_char_set} // shift sym: Rbad_char_10_7f
+ ,{572,(State*)&S160_Cbad_char_set} // shift sym: Rbad_char_80_8f
+ ,{573,(State*)&S161_Cbad_char_set} // shift sym: Rbad_char_90_9f
+ ,{574,(State*)&S162_Cbad_char_set} // shift sym: Rbad_char_a0_af
+ ,{575,(State*)&S163_Cbad_char_set} // shift sym: Rbad_char_b0_bf
+ ,{576,(State*)&S164_Cbad_char_set} // shift sym: Rbad_char_c0_cf
+ ,{577,(State*)&S165_Cbad_char_set} // shift sym: Rbad_char_d0_df
+ ,{578,(State*)&S166_Cbad_char_set} // shift sym: Rbad_char_e0_ef
+ ,{579,(State*)&S167_Cbad_char_set} // shift sym: Rbad_char_f0_ff
+ }// end of shift table
+};
+yacco2::State S1_Cbad_char_set = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cbad_char_set,0,0,0,0};
+struct S2rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cbad_char_set S2rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S2_Cbad_char_set = //State's vectored into symbol: "x00"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cbad_char_set,0,0,0};
+struct S3rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cbad_char_set S3rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S3_Cbad_char_set = //State's vectored into symbol: "x01"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cbad_char_set,0,0,0};
+struct S4rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cbad_char_set S4rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S4_Cbad_char_set = //State's vectored into symbol: "x02"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cbad_char_set,0,0,0};
+struct S5rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cbad_char_set S5rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S5_Cbad_char_set = //State's vectored into symbol: "x03"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cbad_char_set,0,0,0};
+struct S6rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cbad_char_set S6rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S6_Cbad_char_set = //State's vectored into symbol: "x04"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cbad_char_set,0,0,0};
+struct S7rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cbad_char_set S7rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S7_Cbad_char_set = //State's vectored into symbol: "x05"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cbad_char_set,0,0,0};
+struct S8rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cbad_char_set S8rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S8_Cbad_char_set = //State's vectored into symbol: "x06"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cbad_char_set,0,0,0};
+struct S9rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cbad_char_set S9rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S9_Cbad_char_set = //State's vectored into symbol: "x07"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cbad_char_set,0,0,0};
+struct S10rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cbad_char_set S10rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S10_Cbad_char_set = //State's vectored into symbol: "x08"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cbad_char_set,0,0,0};
+struct S11rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cbad_char_set S11rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S11_Cbad_char_set = //State's vectored into symbol: "x0e"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cbad_char_set,0,0,0};
+struct S12rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cbad_char_set S12rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_00_0f_}
+ }// end of reduce table
+};
+yacco2::State S12_Cbad_char_set = //State's vectored into symbol: "x0f"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cbad_char_set,0,0,0};
+struct S13rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cbad_char_set S13rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S13_Cbad_char_set = //State's vectored into symbol: "x10"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cbad_char_set,0,0,0};
+struct S14rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cbad_char_set S14rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S14_Cbad_char_set = //State's vectored into symbol: "x11"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cbad_char_set,0,0,0};
+struct S15rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cbad_char_set S15rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S15_Cbad_char_set = //State's vectored into symbol: "x12"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cbad_char_set,0,0,0};
+struct S16rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cbad_char_set S16rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S16_Cbad_char_set = //State's vectored into symbol: "x13"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cbad_char_set,0,0,0};
+struct S17rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cbad_char_set S17rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S17_Cbad_char_set = //State's vectored into symbol: "x14"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cbad_char_set,0,0,0};
+struct S18rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cbad_char_set S18rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S18_Cbad_char_set = //State's vectored into symbol: "x15"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cbad_char_set,0,0,0};
+struct S19rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cbad_char_set S19rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S19_Cbad_char_set = //State's vectored into symbol: "x16"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cbad_char_set,0,0,0};
+struct S20rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cbad_char_set S20rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S20_Cbad_char_set = //State's vectored into symbol: "x17"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cbad_char_set,0,0,0};
+struct S21rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cbad_char_set S21rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S21_Cbad_char_set = //State's vectored into symbol: "x18"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cbad_char_set,0,0,0};
+struct S22rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cbad_char_set S22rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S22_Cbad_char_set = //State's vectored into symbol: "x19"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cbad_char_set,0,0,0};
+struct S23rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cbad_char_set S23rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S23_Cbad_char_set = //State's vectored into symbol: "x1a"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cbad_char_set,0,0,0};
+struct S24rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cbad_char_set S24rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S24_Cbad_char_set = //State's vectored into symbol: "x1b"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cbad_char_set,0,0,0};
+struct S25rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cbad_char_set S25rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S25_Cbad_char_set = //State's vectored into symbol: "x1c"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cbad_char_set,0,0,0};
+struct S26rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cbad_char_set S26rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S26_Cbad_char_set = //State's vectored into symbol: "x1d"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cbad_char_set,0,0,0};
+struct S27rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cbad_char_set S27rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S27_Cbad_char_set = //State's vectored into symbol: "x1e"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cbad_char_set,0,0,0};
+struct S28rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cbad_char_set S28rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S28_Cbad_char_set = //State's vectored into symbol: "x1f"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cbad_char_set,0,0,0};
+struct S29rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cbad_char_set S29rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs17_Rbad_char_10_7f_}
+ }// end of reduce table
+};
+yacco2::State S29_Cbad_char_set = //State's vectored into symbol: "x7f"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cbad_char_set,0,0,0};
+struct S30rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cbad_char_set S30rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S30_Cbad_char_set = //State's vectored into symbol: "x80"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cbad_char_set,0,0,0};
+struct S31rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cbad_char_set S31rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S31_Cbad_char_set = //State's vectored into symbol: "x81"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cbad_char_set,0,0,0};
+struct S32rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cbad_char_set S32rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S32_Cbad_char_set = //State's vectored into symbol: "x82"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cbad_char_set,0,0,0};
+struct S33rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cbad_char_set S33rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S33_Cbad_char_set = //State's vectored into symbol: "x83"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cbad_char_set,0,0,0};
+struct S34rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cbad_char_set S34rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S34_Cbad_char_set = //State's vectored into symbol: "x84"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Cbad_char_set,0,0,0};
+struct S35rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cbad_char_set S35rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S35_Cbad_char_set = //State's vectored into symbol: "x85"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cbad_char_set,0,0,0};
+struct S36rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cbad_char_set S36rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S36_Cbad_char_set = //State's vectored into symbol: "x86"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cbad_char_set,0,0,0};
+struct S37rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cbad_char_set S37rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S37_Cbad_char_set = //State's vectored into symbol: "x87"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cbad_char_set,0,0,0};
+struct S38rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cbad_char_set S38rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S38_Cbad_char_set = //State's vectored into symbol: "x88"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cbad_char_set,0,0,0};
+struct S39rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cbad_char_set S39rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S39_Cbad_char_set = //State's vectored into symbol: "x89"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cbad_char_set,0,0,0};
+struct S40rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cbad_char_set S40rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S40_Cbad_char_set = //State's vectored into symbol: "x8a"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cbad_char_set,0,0,0};
+struct S41rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cbad_char_set S41rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S41_Cbad_char_set = //State's vectored into symbol: "x8b"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cbad_char_set,0,0,0};
+struct S42rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cbad_char_set S42rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S42_Cbad_char_set = //State's vectored into symbol: "x8c"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cbad_char_set,0,0,0};
+struct S43rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cbad_char_set S43rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S43_Cbad_char_set = //State's vectored into symbol: "x8d"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cbad_char_set,0,0,0};
+struct S44rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cbad_char_set S44rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S44_Cbad_char_set = //State's vectored into symbol: "x8e"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cbad_char_set,0,0,0};
+struct S45rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cbad_char_set S45rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_80_8f_}
+ }// end of reduce table
+};
+yacco2::State S45_Cbad_char_set = //State's vectored into symbol: "x8f"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cbad_char_set,0,0,0};
+struct S46rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cbad_char_set S46rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S46_Cbad_char_set = //State's vectored into symbol: "x90"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cbad_char_set,0,0,0};
+struct S47rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cbad_char_set S47rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S47_Cbad_char_set = //State's vectored into symbol: "x91"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cbad_char_set,0,0,0};
+struct S48rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cbad_char_set S48rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S48_Cbad_char_set = //State's vectored into symbol: "x92"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cbad_char_set,0,0,0};
+struct S49rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cbad_char_set S49rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S49_Cbad_char_set = //State's vectored into symbol: "x93"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cbad_char_set,0,0,0};
+struct S50rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cbad_char_set S50rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S50_Cbad_char_set = //State's vectored into symbol: "x94"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cbad_char_set,0,0,0};
+struct S51rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cbad_char_set S51rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S51_Cbad_char_set = //State's vectored into symbol: "x95"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cbad_char_set,0,0,0};
+struct S52rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cbad_char_set S52rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S52_Cbad_char_set = //State's vectored into symbol: "x96"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cbad_char_set,0,0,0};
+struct S53rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cbad_char_set S53rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S53_Cbad_char_set = //State's vectored into symbol: "x97"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cbad_char_set,0,0,0};
+struct S54rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cbad_char_set S54rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S54_Cbad_char_set = //State's vectored into symbol: "x98"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Cbad_char_set,0,0,0};
+struct S55rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cbad_char_set S55rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S55_Cbad_char_set = //State's vectored into symbol: "x99"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cbad_char_set,0,0,0};
+struct S56rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cbad_char_set S56rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S56_Cbad_char_set = //State's vectored into symbol: "x9a"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cbad_char_set,0,0,0};
+struct S57rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cbad_char_set S57rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S57_Cbad_char_set = //State's vectored into symbol: "x9b"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cbad_char_set,0,0,0};
+struct S58rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cbad_char_set S58rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S58_Cbad_char_set = //State's vectored into symbol: "x9c"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Cbad_char_set,0,0,0};
+struct S59rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cbad_char_set S59rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S59_Cbad_char_set = //State's vectored into symbol: "x9d"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cbad_char_set,0,0,0};
+struct S60rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cbad_char_set S60rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S60_Cbad_char_set = //State's vectored into symbol: "x9e"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Cbad_char_set,0,0,0};
+struct S61rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cbad_char_set S61rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_90_9f_}
+ }// end of reduce table
+};
+yacco2::State S61_Cbad_char_set = //State's vectored into symbol: "x9f"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cbad_char_set,0,0,0};
+struct S62rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cbad_char_set S62rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S62_Cbad_char_set = //State's vectored into symbol: "xa0"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cbad_char_set,0,0,0};
+struct S63rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cbad_char_set S63rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S63_Cbad_char_set = //State's vectored into symbol: "xa1"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cbad_char_set,0,0,0};
+struct S64rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cbad_char_set S64rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S64_Cbad_char_set = //State's vectored into symbol: "xa2"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Cbad_char_set,0,0,0};
+struct S65rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cbad_char_set S65rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S65_Cbad_char_set = //State's vectored into symbol: "xa3"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Cbad_char_set,0,0,0};
+struct S66rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Cbad_char_set S66rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S66_Cbad_char_set = //State's vectored into symbol: "xa4"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Cbad_char_set,0,0,0};
+struct S67rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Cbad_char_set S67rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S67_Cbad_char_set = //State's vectored into symbol: "xa5"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Cbad_char_set,0,0,0};
+struct S68rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cbad_char_set S68rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S68_Cbad_char_set = //State's vectored into symbol: "xa6"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cbad_char_set,0,0,0};
+struct S69rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cbad_char_set S69rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S69_Cbad_char_set = //State's vectored into symbol: "xa7"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Cbad_char_set,0,0,0};
+struct S70rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Cbad_char_set S70rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S70_Cbad_char_set = //State's vectored into symbol: "xa8"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Cbad_char_set,0,0,0};
+struct S71rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Cbad_char_set S71rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S71_Cbad_char_set = //State's vectored into symbol: "xa9"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Cbad_char_set,0,0,0};
+struct S72rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Cbad_char_set S72rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S72_Cbad_char_set = //State's vectored into symbol: "xaa"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Cbad_char_set,0,0,0};
+struct S73rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Cbad_char_set S73rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S73_Cbad_char_set = //State's vectored into symbol: "xab"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Cbad_char_set,0,0,0};
+struct S74rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Cbad_char_set S74rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S74_Cbad_char_set = //State's vectored into symbol: "xac"
+{74
+,0,0,0,0,0,(Reduce_tbl*)&S74rt_Cbad_char_set,0,0,0};
+struct S75rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Cbad_char_set S75rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S75_Cbad_char_set = //State's vectored into symbol: "xad"
+{75
+,0,0,0,0,0,(Reduce_tbl*)&S75rt_Cbad_char_set,0,0,0};
+struct S76rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Cbad_char_set S76rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S76_Cbad_char_set = //State's vectored into symbol: "xae"
+{76
+,0,0,0,0,0,(Reduce_tbl*)&S76rt_Cbad_char_set,0,0,0};
+struct S77rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Cbad_char_set S77rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_a0_af_}
+ }// end of reduce table
+};
+yacco2::State S77_Cbad_char_set = //State's vectored into symbol: "xaf"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Cbad_char_set,0,0,0};
+struct S78rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Cbad_char_set S78rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S78_Cbad_char_set = //State's vectored into symbol: "xb0"
+{78
+,0,0,0,0,0,(Reduce_tbl*)&S78rt_Cbad_char_set,0,0,0};
+struct S79rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Cbad_char_set S79rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S79_Cbad_char_set = //State's vectored into symbol: "xb1"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Cbad_char_set,0,0,0};
+struct S80rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Cbad_char_set S80rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S80_Cbad_char_set = //State's vectored into symbol: "xb2"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Cbad_char_set,0,0,0};
+struct S81rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Cbad_char_set S81rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S81_Cbad_char_set = //State's vectored into symbol: "xb3"
+{81
+,0,0,0,0,0,(Reduce_tbl*)&S81rt_Cbad_char_set,0,0,0};
+struct S82rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Cbad_char_set S82rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S82_Cbad_char_set = //State's vectored into symbol: "xb4"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Cbad_char_set,0,0,0};
+struct S83rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Cbad_char_set S83rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S83_Cbad_char_set = //State's vectored into symbol: "xb5"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Cbad_char_set,0,0,0};
+struct S84rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S84rtd_Cbad_char_set S84rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S84_Cbad_char_set = //State's vectored into symbol: "xb6"
+{84
+,0,0,0,0,0,(Reduce_tbl*)&S84rt_Cbad_char_set,0,0,0};
+struct S85rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Cbad_char_set S85rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S85_Cbad_char_set = //State's vectored into symbol: "xb7"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Cbad_char_set,0,0,0};
+struct S86rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S86rtd_Cbad_char_set S86rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S86_Cbad_char_set = //State's vectored into symbol: "xb8"
+{86
+,0,0,0,0,0,(Reduce_tbl*)&S86rt_Cbad_char_set,0,0,0};
+struct S87rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Cbad_char_set S87rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S87_Cbad_char_set = //State's vectored into symbol: "xb9"
+{87
+,0,0,0,0,0,(Reduce_tbl*)&S87rt_Cbad_char_set,0,0,0};
+struct S88rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S88rtd_Cbad_char_set S88rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S88_Cbad_char_set = //State's vectored into symbol: "xba"
+{88
+,0,0,0,0,0,(Reduce_tbl*)&S88rt_Cbad_char_set,0,0,0};
+struct S89rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S89rtd_Cbad_char_set S89rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S89_Cbad_char_set = //State's vectored into symbol: "xbb"
+{89
+,0,0,0,0,0,(Reduce_tbl*)&S89rt_Cbad_char_set,0,0,0};
+struct S90rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S90rtd_Cbad_char_set S90rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S90_Cbad_char_set = //State's vectored into symbol: "xbc"
+{90
+,0,0,0,0,0,(Reduce_tbl*)&S90rt_Cbad_char_set,0,0,0};
+struct S91rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S91rtd_Cbad_char_set S91rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S91_Cbad_char_set = //State's vectored into symbol: "xbd"
+{91
+,0,0,0,0,0,(Reduce_tbl*)&S91rt_Cbad_char_set,0,0,0};
+struct S92rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S92rtd_Cbad_char_set S92rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S92_Cbad_char_set = //State's vectored into symbol: "xbe"
+{92
+,0,0,0,0,0,(Reduce_tbl*)&S92rt_Cbad_char_set,0,0,0};
+struct S93rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S93rtd_Cbad_char_set S93rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_b0_bf_}
+ }// end of reduce table
+};
+yacco2::State S93_Cbad_char_set = //State's vectored into symbol: "xbf"
+{93
+,0,0,0,0,0,(Reduce_tbl*)&S93rt_Cbad_char_set,0,0,0};
+struct S94rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S94rtd_Cbad_char_set S94rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S94_Cbad_char_set = //State's vectored into symbol: "xc0"
+{94
+,0,0,0,0,0,(Reduce_tbl*)&S94rt_Cbad_char_set,0,0,0};
+struct S95rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S95rtd_Cbad_char_set S95rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S95_Cbad_char_set = //State's vectored into symbol: "xc1"
+{95
+,0,0,0,0,0,(Reduce_tbl*)&S95rt_Cbad_char_set,0,0,0};
+struct S96rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S96rtd_Cbad_char_set S96rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S96_Cbad_char_set = //State's vectored into symbol: "xc2"
+{96
+,0,0,0,0,0,(Reduce_tbl*)&S96rt_Cbad_char_set,0,0,0};
+struct S97rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S97rtd_Cbad_char_set S97rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S97_Cbad_char_set = //State's vectored into symbol: "xc3"
+{97
+,0,0,0,0,0,(Reduce_tbl*)&S97rt_Cbad_char_set,0,0,0};
+struct S98rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S98rtd_Cbad_char_set S98rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S98_Cbad_char_set = //State's vectored into symbol: "xc4"
+{98
+,0,0,0,0,0,(Reduce_tbl*)&S98rt_Cbad_char_set,0,0,0};
+struct S99rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S99rtd_Cbad_char_set S99rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S99_Cbad_char_set = //State's vectored into symbol: "xc5"
+{99
+,0,0,0,0,0,(Reduce_tbl*)&S99rt_Cbad_char_set,0,0,0};
+struct S100rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S100rtd_Cbad_char_set S100rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S100_Cbad_char_set = //State's vectored into symbol: "xc6"
+{100
+,0,0,0,0,0,(Reduce_tbl*)&S100rt_Cbad_char_set,0,0,0};
+struct S101rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S101rtd_Cbad_char_set S101rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S101_Cbad_char_set = //State's vectored into symbol: "xc7"
+{101
+,0,0,0,0,0,(Reduce_tbl*)&S101rt_Cbad_char_set,0,0,0};
+struct S102rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S102rtd_Cbad_char_set S102rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S102_Cbad_char_set = //State's vectored into symbol: "xc8"
+{102
+,0,0,0,0,0,(Reduce_tbl*)&S102rt_Cbad_char_set,0,0,0};
+struct S103rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S103rtd_Cbad_char_set S103rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S103_Cbad_char_set = //State's vectored into symbol: "xc9"
+{103
+,0,0,0,0,0,(Reduce_tbl*)&S103rt_Cbad_char_set,0,0,0};
+struct S104rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S104rtd_Cbad_char_set S104rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S104_Cbad_char_set = //State's vectored into symbol: "xca"
+{104
+,0,0,0,0,0,(Reduce_tbl*)&S104rt_Cbad_char_set,0,0,0};
+struct S105rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S105rtd_Cbad_char_set S105rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S105_Cbad_char_set = //State's vectored into symbol: "xcb"
+{105
+,0,0,0,0,0,(Reduce_tbl*)&S105rt_Cbad_char_set,0,0,0};
+struct S106rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S106rtd_Cbad_char_set S106rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S106_Cbad_char_set = //State's vectored into symbol: "xcc"
+{106
+,0,0,0,0,0,(Reduce_tbl*)&S106rt_Cbad_char_set,0,0,0};
+struct S107rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S107rtd_Cbad_char_set S107rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S107_Cbad_char_set = //State's vectored into symbol: "xcd"
+{107
+,0,0,0,0,0,(Reduce_tbl*)&S107rt_Cbad_char_set,0,0,0};
+struct S108rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S108rtd_Cbad_char_set S108rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S108_Cbad_char_set = //State's vectored into symbol: "xce"
+{108
+,0,0,0,0,0,(Reduce_tbl*)&S108rt_Cbad_char_set,0,0,0};
+struct S109rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S109rtd_Cbad_char_set S109rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_c0_cf_}
+ }// end of reduce table
+};
+yacco2::State S109_Cbad_char_set = //State's vectored into symbol: "xcf"
+{109
+,0,0,0,0,0,(Reduce_tbl*)&S109rt_Cbad_char_set,0,0,0};
+struct S110rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S110rtd_Cbad_char_set S110rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S110_Cbad_char_set = //State's vectored into symbol: "xd0"
+{110
+,0,0,0,0,0,(Reduce_tbl*)&S110rt_Cbad_char_set,0,0,0};
+struct S111rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S111rtd_Cbad_char_set S111rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S111_Cbad_char_set = //State's vectored into symbol: "xd1"
+{111
+,0,0,0,0,0,(Reduce_tbl*)&S111rt_Cbad_char_set,0,0,0};
+struct S112rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S112rtd_Cbad_char_set S112rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S112_Cbad_char_set = //State's vectored into symbol: "xd2"
+{112
+,0,0,0,0,0,(Reduce_tbl*)&S112rt_Cbad_char_set,0,0,0};
+struct S113rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S113rtd_Cbad_char_set S113rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S113_Cbad_char_set = //State's vectored into symbol: "xd3"
+{113
+,0,0,0,0,0,(Reduce_tbl*)&S113rt_Cbad_char_set,0,0,0};
+struct S114rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S114rtd_Cbad_char_set S114rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S114_Cbad_char_set = //State's vectored into symbol: "xd4"
+{114
+,0,0,0,0,0,(Reduce_tbl*)&S114rt_Cbad_char_set,0,0,0};
+struct S115rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S115rtd_Cbad_char_set S115rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S115_Cbad_char_set = //State's vectored into symbol: "xd5"
+{115
+,0,0,0,0,0,(Reduce_tbl*)&S115rt_Cbad_char_set,0,0,0};
+struct S116rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S116rtd_Cbad_char_set S116rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S116_Cbad_char_set = //State's vectored into symbol: "xd6"
+{116
+,0,0,0,0,0,(Reduce_tbl*)&S116rt_Cbad_char_set,0,0,0};
+struct S117rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S117rtd_Cbad_char_set S117rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S117_Cbad_char_set = //State's vectored into symbol: "xd7"
+{117
+,0,0,0,0,0,(Reduce_tbl*)&S117rt_Cbad_char_set,0,0,0};
+struct S118rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S118rtd_Cbad_char_set S118rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S118_Cbad_char_set = //State's vectored into symbol: "xd8"
+{118
+,0,0,0,0,0,(Reduce_tbl*)&S118rt_Cbad_char_set,0,0,0};
+struct S119rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S119rtd_Cbad_char_set S119rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S119_Cbad_char_set = //State's vectored into symbol: "xd9"
+{119
+,0,0,0,0,0,(Reduce_tbl*)&S119rt_Cbad_char_set,0,0,0};
+struct S120rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S120rtd_Cbad_char_set S120rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S120_Cbad_char_set = //State's vectored into symbol: "xda"
+{120
+,0,0,0,0,0,(Reduce_tbl*)&S120rt_Cbad_char_set,0,0,0};
+struct S121rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S121rtd_Cbad_char_set S121rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S121_Cbad_char_set = //State's vectored into symbol: "xdb"
+{121
+,0,0,0,0,0,(Reduce_tbl*)&S121rt_Cbad_char_set,0,0,0};
+struct S122rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S122rtd_Cbad_char_set S122rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S122_Cbad_char_set = //State's vectored into symbol: "xdc"
+{122
+,0,0,0,0,0,(Reduce_tbl*)&S122rt_Cbad_char_set,0,0,0};
+struct S123rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S123rtd_Cbad_char_set S123rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S123_Cbad_char_set = //State's vectored into symbol: "xdd"
+{123
+,0,0,0,0,0,(Reduce_tbl*)&S123rt_Cbad_char_set,0,0,0};
+struct S124rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S124rtd_Cbad_char_set S124rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S124_Cbad_char_set = //State's vectored into symbol: "xde"
+{124
+,0,0,0,0,0,(Reduce_tbl*)&S124rt_Cbad_char_set,0,0,0};
+struct S125rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S125rtd_Cbad_char_set S125rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_d0_df_}
+ }// end of reduce table
+};
+yacco2::State S125_Cbad_char_set = //State's vectored into symbol: "xdf"
+{125
+,0,0,0,0,0,(Reduce_tbl*)&S125rt_Cbad_char_set,0,0,0};
+struct S126rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S126rtd_Cbad_char_set S126rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S126_Cbad_char_set = //State's vectored into symbol: "xe0"
+{126
+,0,0,0,0,0,(Reduce_tbl*)&S126rt_Cbad_char_set,0,0,0};
+struct S127rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S127rtd_Cbad_char_set S127rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S127_Cbad_char_set = //State's vectored into symbol: "xe1"
+{127
+,0,0,0,0,0,(Reduce_tbl*)&S127rt_Cbad_char_set,0,0,0};
+struct S128rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S128rtd_Cbad_char_set S128rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S128_Cbad_char_set = //State's vectored into symbol: "xe2"
+{128
+,0,0,0,0,0,(Reduce_tbl*)&S128rt_Cbad_char_set,0,0,0};
+struct S129rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S129rtd_Cbad_char_set S129rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S129_Cbad_char_set = //State's vectored into symbol: "xe3"
+{129
+,0,0,0,0,0,(Reduce_tbl*)&S129rt_Cbad_char_set,0,0,0};
+struct S130rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S130rtd_Cbad_char_set S130rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S130_Cbad_char_set = //State's vectored into symbol: "xe4"
+{130
+,0,0,0,0,0,(Reduce_tbl*)&S130rt_Cbad_char_set,0,0,0};
+struct S131rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S131rtd_Cbad_char_set S131rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S131_Cbad_char_set = //State's vectored into symbol: "xe5"
+{131
+,0,0,0,0,0,(Reduce_tbl*)&S131rt_Cbad_char_set,0,0,0};
+struct S132rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S132rtd_Cbad_char_set S132rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S132_Cbad_char_set = //State's vectored into symbol: "xe6"
+{132
+,0,0,0,0,0,(Reduce_tbl*)&S132rt_Cbad_char_set,0,0,0};
+struct S133rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S133rtd_Cbad_char_set S133rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S133_Cbad_char_set = //State's vectored into symbol: "xe7"
+{133
+,0,0,0,0,0,(Reduce_tbl*)&S133rt_Cbad_char_set,0,0,0};
+struct S134rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S134rtd_Cbad_char_set S134rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S134_Cbad_char_set = //State's vectored into symbol: "xe8"
+{134
+,0,0,0,0,0,(Reduce_tbl*)&S134rt_Cbad_char_set,0,0,0};
+struct S135rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S135rtd_Cbad_char_set S135rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S135_Cbad_char_set = //State's vectored into symbol: "xe9"
+{135
+,0,0,0,0,0,(Reduce_tbl*)&S135rt_Cbad_char_set,0,0,0};
+struct S136rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S136rtd_Cbad_char_set S136rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S136_Cbad_char_set = //State's vectored into symbol: "xea"
+{136
+,0,0,0,0,0,(Reduce_tbl*)&S136rt_Cbad_char_set,0,0,0};
+struct S137rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S137rtd_Cbad_char_set S137rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S137_Cbad_char_set = //State's vectored into symbol: "xeb"
+{137
+,0,0,0,0,0,(Reduce_tbl*)&S137rt_Cbad_char_set,0,0,0};
+struct S138rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S138rtd_Cbad_char_set S138rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S138_Cbad_char_set = //State's vectored into symbol: "xec"
+{138
+,0,0,0,0,0,(Reduce_tbl*)&S138rt_Cbad_char_set,0,0,0};
+struct S139rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S139rtd_Cbad_char_set S139rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S139_Cbad_char_set = //State's vectored into symbol: "xed"
+{139
+,0,0,0,0,0,(Reduce_tbl*)&S139rt_Cbad_char_set,0,0,0};
+struct S140rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S140rtd_Cbad_char_set S140rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S140_Cbad_char_set = //State's vectored into symbol: "xee"
+{140
+,0,0,0,0,0,(Reduce_tbl*)&S140rt_Cbad_char_set,0,0,0};
+struct S141rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S141rtd_Cbad_char_set S141rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_e0_ef_}
+ }// end of reduce table
+};
+yacco2::State S141_Cbad_char_set = //State's vectored into symbol: "xef"
+{141
+,0,0,0,0,0,(Reduce_tbl*)&S141rt_Cbad_char_set,0,0,0};
+struct S142rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S142rtd_Cbad_char_set S142rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S142_Cbad_char_set = //State's vectored into symbol: "xf0"
+{142
+,0,0,0,0,0,(Reduce_tbl*)&S142rt_Cbad_char_set,0,0,0};
+struct S143rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S143rtd_Cbad_char_set S143rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S143_Cbad_char_set = //State's vectored into symbol: "xf1"
+{143
+,0,0,0,0,0,(Reduce_tbl*)&S143rt_Cbad_char_set,0,0,0};
+struct S144rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S144rtd_Cbad_char_set S144rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S144_Cbad_char_set = //State's vectored into symbol: "xf2"
+{144
+,0,0,0,0,0,(Reduce_tbl*)&S144rt_Cbad_char_set,0,0,0};
+struct S145rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S145rtd_Cbad_char_set S145rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S145_Cbad_char_set = //State's vectored into symbol: "xf3"
+{145
+,0,0,0,0,0,(Reduce_tbl*)&S145rt_Cbad_char_set,0,0,0};
+struct S146rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S146rtd_Cbad_char_set S146rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S146_Cbad_char_set = //State's vectored into symbol: "xf4"
+{146
+,0,0,0,0,0,(Reduce_tbl*)&S146rt_Cbad_char_set,0,0,0};
+struct S147rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S147rtd_Cbad_char_set S147rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S147_Cbad_char_set = //State's vectored into symbol: "xf5"
+{147
+,0,0,0,0,0,(Reduce_tbl*)&S147rt_Cbad_char_set,0,0,0};
+struct S148rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S148rtd_Cbad_char_set S148rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S148_Cbad_char_set = //State's vectored into symbol: "xf6"
+{148
+,0,0,0,0,0,(Reduce_tbl*)&S148rt_Cbad_char_set,0,0,0};
+struct S149rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S149rtd_Cbad_char_set S149rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S149_Cbad_char_set = //State's vectored into symbol: "xf7"
+{149
+,0,0,0,0,0,(Reduce_tbl*)&S149rt_Cbad_char_set,0,0,0};
+struct S150rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S150rtd_Cbad_char_set S150rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S150_Cbad_char_set = //State's vectored into symbol: "xf8"
+{150
+,0,0,0,0,0,(Reduce_tbl*)&S150rt_Cbad_char_set,0,0,0};
+struct S151rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S151rtd_Cbad_char_set S151rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S151_Cbad_char_set = //State's vectored into symbol: "xf9"
+{151
+,0,0,0,0,0,(Reduce_tbl*)&S151rt_Cbad_char_set,0,0,0};
+struct S152rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S152rtd_Cbad_char_set S152rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs11_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S152_Cbad_char_set = //State's vectored into symbol: "xfa"
+{152
+,0,0,0,0,0,(Reduce_tbl*)&S152rt_Cbad_char_set,0,0,0};
+struct S153rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S153rtd_Cbad_char_set S153rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs12_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S153_Cbad_char_set = //State's vectored into symbol: "xfb"
+{153
+,0,0,0,0,0,(Reduce_tbl*)&S153rt_Cbad_char_set,0,0,0};
+struct S154rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S154rtd_Cbad_char_set S154rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs13_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S154_Cbad_char_set = //State's vectored into symbol: "xfc"
+{154
+,0,0,0,0,0,(Reduce_tbl*)&S154rt_Cbad_char_set,0,0,0};
+struct S155rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S155rtd_Cbad_char_set S155rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs14_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S155_Cbad_char_set = //State's vectored into symbol: "xfd"
+{155
+,0,0,0,0,0,(Reduce_tbl*)&S155rt_Cbad_char_set,0,0,0};
+struct S156rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S156rtd_Cbad_char_set S156rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs15_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S156_Cbad_char_set = //State's vectored into symbol: "xfe"
+{156
+,0,0,0,0,0,(Reduce_tbl*)&S156rt_Cbad_char_set,0,0,0};
+struct S157rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S157rtd_Cbad_char_set S157rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs16_Rbad_char_f0_ff_}
+ }// end of reduce table
+};
+yacco2::State S157_Cbad_char_set = //State's vectored into symbol: "xff"
+{157
+,0,0,0,0,0,(Reduce_tbl*)&S157rt_Cbad_char_set,0,0,0};
+struct S158rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S158rtd_Cbad_char_set S158rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs1_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S158_Cbad_char_set = //State's vectored into symbol: "Rbad_char_00_0f"
+{158
+,0,0,0,0,0,(Reduce_tbl*)&S158rt_Cbad_char_set,0,0,0};
+struct S159rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S159rtd_Cbad_char_set S159rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs2_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S159_Cbad_char_set = //State's vectored into symbol: "Rbad_char_10_7f"
+{159
+,0,0,0,0,0,(Reduce_tbl*)&S159rt_Cbad_char_set,0,0,0};
+struct S160rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S160rtd_Cbad_char_set S160rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs3_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S160_Cbad_char_set = //State's vectored into symbol: "Rbad_char_80_8f"
+{160
+,0,0,0,0,0,(Reduce_tbl*)&S160rt_Cbad_char_set,0,0,0};
+struct S161rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S161rtd_Cbad_char_set S161rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs4_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S161_Cbad_char_set = //State's vectored into symbol: "Rbad_char_90_9f"
+{161
+,0,0,0,0,0,(Reduce_tbl*)&S161rt_Cbad_char_set,0,0,0};
+struct S162rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S162rtd_Cbad_char_set S162rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs5_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S162_Cbad_char_set = //State's vectored into symbol: "Rbad_char_a0_af"
+{162
+,0,0,0,0,0,(Reduce_tbl*)&S162rt_Cbad_char_set,0,0,0};
+struct S163rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S163rtd_Cbad_char_set S163rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs6_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S163_Cbad_char_set = //State's vectored into symbol: "Rbad_char_b0_bf"
+{163
+,0,0,0,0,0,(Reduce_tbl*)&S163rt_Cbad_char_set,0,0,0};
+struct S164rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S164rtd_Cbad_char_set S164rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs7_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S164_Cbad_char_set = //State's vectored into symbol: "Rbad_char_c0_cf"
+{164
+,0,0,0,0,0,(Reduce_tbl*)&S164rt_Cbad_char_set,0,0,0};
+struct S165rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S165rtd_Cbad_char_set S165rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs8_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S165_Cbad_char_set = //State's vectored into symbol: "Rbad_char_d0_df"
+{165
+,0,0,0,0,0,(Reduce_tbl*)&S165rt_Cbad_char_set,0,0,0};
+struct S166rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S166rtd_Cbad_char_set S166rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs9_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S166_Cbad_char_set = //State's vectored into symbol: "Rbad_char_e0_ef"
+{166
+,0,0,0,0,0,(Reduce_tbl*)&S166rt_Cbad_char_set,0,0,0};
+struct S167rtd_Cbad_char_set{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S167rtd_Cbad_char_set S167rt_Cbad_char_set = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cbad_char_set,Cbad_char_set::rhs10_Rbad_char_set_}
+ }// end of reduce table
+};
+yacco2::State S167_Cbad_char_set = //State's vectored into symbol: "Rbad_char_f0_ff"
+{167
+,0,0,0,0,0,(Reduce_tbl*)&S167rt_Cbad_char_set,0,0,0};
diff --git a/web/yacco2/compiler/grammars/c_comments.cpp b/web/yacco2/compiler/grammars/c_comments.cpp
new file mode 100644
index 0000000000..12d266fbb3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_comments.cpp
@@ -0,0 +1,163 @@
+/*
+ File: c_comments.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_comments.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_comments;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Cc_comments::
+ Cc_comments()
+ :yacco2::CAbs_fsm
+ ("c_comments.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"C++ type comments lexer."
+ ,"Fri Jan 30 18:55:05 2015 "
+ ,S1_Cc_comments){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cc_comments::~Cc_comments(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cc_comments::failed(){
+ return false;
+ }
+ void Cc_comments::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cc_comments::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+};
+
+ void Cc_comments::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+ void Cc_comments::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rc_comments::Rc_comments(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc_comments",0,Cc_comments::R_Rc_comments_,P,false,false){
+}
+
+void Rc_comments::op(){
+ sstrace_rulesss
+
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+
+}
+Rslash_asterisk::Rslash_asterisk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rslash_asterisk",0,Cc_comments::R_Rslash_asterisk_,P,false,false){
+}
+
+void Rslash_asterisk::sr1(){
+
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");// due to lex scanner
+ fsm->copy_kstr_into_buffer("*");
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_asteric_: goto aster;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ };
+ aster:{ // end of k?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_) goto loop;// false eok
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
+R2slash::R2slash(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("R2slash",0,Cc_comments::R_R2slash_,P,false,false){
+}
+
+void R2slash::sr1(){
+
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");
+ fsm->copy_kstr_into_buffer("/");
+ for(;;){
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: {
+ return;
+ }
+ case T_Enum::T_raw_cr_:{
+ return;
+ }
+ case T_Enum::T_LR1_eog_: return;
+ }
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/c_comments.fsc b/web/yacco2/compiler/grammars/c_comments.fsc
new file mode 100644
index 0000000000..09cdc73356
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_comments.fsc
@@ -0,0 +1,20 @@
+/*
+ File: c_comments.fsc
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+transitive n
+grammar-name "c_comments"
+name-space "NS_c_comments"
+thread-name "TH_c_comments"
+monolithic n
+file-name "c_comments.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_slash
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"C++ type comments lexer."
diff --git a/web/yacco2/compiler/grammars/c_comments.h b/web/yacco2/compiler/grammars/c_comments.h
new file mode 100644
index 0000000000..269e4f7835
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_comments.h
@@ -0,0 +1,81 @@
+/*
+ File: c_comments.h
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#ifndef __c_comments_h__
+#define __c_comments_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_c_comments;
+
+extern yacco2::State S1_Cc_comments;
+namespace NS_c_comments {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_c_comments(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_c_comments(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Cc_comments: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rc_comments_ = 569//start_of_rule_list + 0
+ ,rhs1_Rc_comments_ = 1
+ ,rhs2_Rc_comments_ = 2
+ ,R_Rslash_asterisk_ = 570//start_of_rule_list + 2
+ ,rhs1_Rslash_asterisk_ = 3
+ ,R_R2slash_ = 571//start_of_rule_list + 4
+ ,rhs1_R2slash_ = 4
+ };
+ //no of la sets = 2
+ //no of states = 8
+ Cc_comments();
+ ~Cc_comments();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rc_comments;
+struct Rslash_asterisk;
+struct R2slash;
+struct Rc_comments:public yacco2::CAbs_lr1_sym {
+ Rc_comments(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rslash_asterisk:public yacco2::CAbs_lr1_sym {
+ Rslash_asterisk(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct R2slash:public yacco2::CAbs_lr1_sym {
+ R2slash(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/c_comments.lex b/web/yacco2/compiler/grammars/c_comments.lex
new file mode 100644
index 0000000000..32da01574a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_comments.lex
@@ -0,0 +1,156 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: c_comments.lex
+Dates: 17 Juin 2003
+Test file: c_comments.dat
+Purpose: "C++" styled comments
+Returned: comment
+ Err_comment_overrun
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |c_comments| Thread.\fbreak
+Handles both flavours of c++ comments.\fbreak
+\ptindent{1) // single line type comment}
+\ptindent{2) /* ... */ type comment}
+To speed things up, i'm using a finite-state approach to lower the
+pushdown deterministic rule push / pop cycles.
+@/
+fsm
+(fsm-id "c_comments.lex",fsm-filename c_comments,fsm-namespace NS_c_comments
+,fsm-class Cc_comments {
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Cc_comments::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+ void Cc_comments::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "C++ type comments lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_c_comments
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rc_comments (
+lhs {
+ op
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+ ***
+ }
+){
+ -> Rslash_asterisk |.|
+ -> R2slash |.|
+}
+
+Rslash_asterisk (){
+ -> "/" "*" {
+ op
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");// due to lex scanner
+ fsm->copy_kstr_into_buffer("*");
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_asteric_: goto aster;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ };
+ aster:{ // end of k?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_) goto loop;// false eok
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+
+R2slash (){
+ -> "/" "/" {
+ op
+ Cc_comments* fsm = (Cc_comments*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");
+ fsm->copy_kstr_into_buffer("/");
+ for(;;){
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: {
+ return;
+ }
+ case T_Enum::T_raw_cr_:{
+ return;
+ }
+ case T_Enum::T_LR1_eog_: return;
+ }
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ }
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/c_commentssym.cpp b/web/yacco2/compiler/grammars/c_commentssym.cpp
new file mode 100644
index 0000000000..76319612fd
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_commentssym.cpp
@@ -0,0 +1,108 @@
+/*
+ File: c_commentssym.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_comments.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_comments;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_c_comments::TH_c_comments(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_c_comments;
+ NS_c_comments::Cc_comments Cc_comments_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cc_comments_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_c_comments::PROC_TH_c_comments(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_c_comments";
+ static bool one_time(false);
+ static NS_c_comments::Cc_comments* NS_c_comments_Cc_comments_(0);// parallel-parser's fsm table
+ static Parser* NS_c_comments_Cc_comments_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_c_comments_Cc_comments_ = new NS_c_comments::Cc_comments();// parallel-parser's fsm table
+ NS_c_comments_Cc_comments_parser = new Parser(*NS_c_comments_Cc_comments_,Caller_pp);
+ }
+ proc_parser = NS_c_comments_Cc_comments_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cc_comments::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rc_comments_:{
+ Rc_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rc_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rc_comments_:{
+ Rc_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rc_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rslash_asterisk_:{
+ Rslash_asterisk* sym;
+ if(re->rule_ == 0){
+ sym = new Rslash_asterisk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rslash_asterisk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_R2slash_:{
+ R2slash* sym;
+ if(re->rule_ == 0){
+ sym = new R2slash(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R2slash*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/c_commentstbl.cpp b/web/yacco2/compiler/grammars/c_commentstbl.cpp
new file mode 100644
index 0000000000..69413b5847
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_commentstbl.cpp
@@ -0,0 +1,151 @@
+/*
+ File: c_commentstbl.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_comments.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_comments;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cc_comments[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cc_comments[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cc_comments;
+extern yacco2::State S2_Cc_comments;
+extern yacco2::State S3_Cc_comments;
+extern yacco2::State S4_Cc_comments;
+extern yacco2::State S5_Cc_comments;
+extern yacco2::State S6_Cc_comments;
+extern yacco2::State S7_Cc_comments;
+extern yacco2::State S8_Cc_comments;
+struct S1std_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cc_comments S1st_Cc_comments = {
+ 4
+ ,
+ {// start of table
+ {55,(State*)&S2_Cc_comments} // shift sym: raw_slash
+ ,{569,(State*)&S1_Cc_comments} // accept sym: Rc_comments
+ ,{570,(State*)&S5_Cc_comments} // shift sym: Rslash_asterisk
+ ,{571,(State*)&S7_Cc_comments} // shift sym: R2slash
+ }// end of shift table
+};
+yacco2::State S1_Cc_comments = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cc_comments,0,0,0,0};
+struct S2std_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cc_comments S2st_Cc_comments = {
+ 2
+ ,
+ {// start of table
+ {50,(State*)&S3_Cc_comments} // shift sym: raw_asteric
+ ,{55,(State*)&S4_Cc_comments} // shift sym: raw_slash
+ }// end of shift table
+};
+yacco2::State S2_Cc_comments = //State's vectored into symbol: "/"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cc_comments,0,0,0,0};
+struct S3rtd_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cc_comments S3rt_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cc_comments,Cc_comments::rhs1_Rslash_asterisk_}
+ }// end of reduce table
+};
+yacco2::State S3_Cc_comments = //State's vectored into symbol: "*"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cc_comments,0,0,0};
+struct S4rtd_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cc_comments S4rt_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cc_comments,Cc_comments::rhs1_R2slash_}
+ }// end of reduce table
+};
+yacco2::State S4_Cc_comments = //State's vectored into symbol: "/"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cc_comments,0,0,0};
+struct S5std_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cc_comments S5st_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S6_Cc_comments} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S5ise_Cc_comments = {5,(State*)&S6_Cc_comments};
+yacco2::State S5_Cc_comments = //State's vectored into symbol: "Rslash_asterisk"
+{5
+,0,0,(Shift_entry*)&S5ise_Cc_comments
+,0,(Shift_tbl*)&S5st_Cc_comments,0,0,0,0};
+struct S6rtd_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cc_comments S6rt_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cc_comments,Cc_comments::rhs1_Rc_comments_}
+ }// end of reduce table
+};
+yacco2::State S6_Cc_comments = //State's vectored into symbol: "|.|"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cc_comments,0,0,0};
+struct S7std_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cc_comments S7st_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S8_Cc_comments} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S7ise_Cc_comments = {5,(State*)&S8_Cc_comments};
+yacco2::State S7_Cc_comments = //State's vectored into symbol: "R2slash"
+{7
+,0,0,(Shift_entry*)&S7ise_Cc_comments
+,0,(Shift_tbl*)&S7st_Cc_comments,0,0,0,0};
+struct S8rtd_Cc_comments{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cc_comments S8rt_Cc_comments = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cc_comments,Cc_comments::rhs2_Rc_comments_}
+ }// end of reduce table
+};
+yacco2::State S8_Cc_comments = //State's vectored into symbol: "|.|"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cc_comments,0,0,0};
diff --git a/web/yacco2/compiler/grammars/c_literal.cpp b/web/yacco2/compiler/grammars/c_literal.cpp
new file mode 100644
index 0000000000..8fc1ca123a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literal.cpp
@@ -0,0 +1,150 @@
+/*
+ File: c_literal.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_literal.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_literal;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cc_literal::
+ Cc_literal()
+ :yacco2::CAbs_fsm
+ ("c_literal.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"C literal lexer."
+ ,"Fri Jan 30 18:55:05 2015 "
+ ,S1_Cc_literal){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cc_literal::~Cc_literal(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cc_literal::failed(){
+ return false;
+ }
+ void Cc_literal::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cc_literal::rhs_to_rules_mapping_[3] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+};
+
+ void Cc_literal::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+ void Cc_literal::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rc_literal::Rc_literal(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc_literal",0,Cc_literal::R_Rc_literal_,P,false,false){
+}
+
+void Rc_literal::op(){
+ sstrace_rulesss
+
+ Cc_literal* fsm = (Cc_literal*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_c_literal((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+Rquote::Rquote(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rquote",0,Cc_literal::R_Rquote_,P,false,false){
+}
+
+void Rquote::sr1(){
+
+ Cc_literal* fsm = (Cc_literal*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_right_quote_: goto rtquote;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ rtquote:{ // end of literal?
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_right_quote_){
+ fsm->copy_kstr_into_buffer("''");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of literal
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{// what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/c_literal.fsc b/web/yacco2/compiler/grammars/c_literal.fsc
new file mode 100644
index 0000000000..a125eb0bb6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literal.fsc
@@ -0,0 +1,20 @@
+/*
+ File: c_literal.fsc
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+transitive n
+grammar-name "c_literal"
+name-space "NS_c_literal"
+thread-name "TH_c_literal"
+monolithic n
+file-name "c_literal.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_right_quote
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"C literal lexer."
diff --git a/web/yacco2/compiler/grammars/c_literal.h b/web/yacco2/compiler/grammars/c_literal.h
new file mode 100644
index 0000000000..d7e3511af5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literal.h
@@ -0,0 +1,74 @@
+/*
+ File: c_literal.h
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#ifndef __c_literal_h__
+#define __c_literal_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "esc_seq.h"
+
+extern yacco2::Thread_entry ITH_c_literal;
+
+extern yacco2::State S1_Cc_literal;
+namespace NS_c_literal {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_c_literal(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_c_literal(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cc_literal: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rc_literal_ = 569//start_of_rule_list + 0
+ ,rhs1_Rc_literal_ = 1
+ ,R_Rquote_ = 570//start_of_rule_list + 2
+ ,rhs1_Rquote_ = 2
+ };
+ //no of la sets = 2
+ //no of states = 4
+ Cc_literal();
+ ~Cc_literal();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[3];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rc_literal;
+struct Rquote;
+struct Rc_literal:public yacco2::CAbs_lr1_sym {
+ Rc_literal(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rquote:public yacco2::CAbs_lr1_sym {
+ Rquote(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/c_literal.lex b/web/yacco2/compiler/grammars/c_literal.lex
new file mode 100644
index 0000000000..3c0d73bcb4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literal.lex
@@ -0,0 +1,167 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: c_literal.lex
+Dates: 17 Juin 2003
+Purpose: c string recognizer : single quoted strings Eg. 'hi'
+Returned: T_c_literal
+ Err_bad_eos - meta terminal indicating an improper end-of-string
+ this occurs on eof,eog, or an eol terminal ending the string
+ Err_bad_esc - bad escape sequence.
+Note: Stripped of its single quotes for ease of use
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |c_literal| Thread.\fbreak
+It recognizes single quoted c++ literal strings with embeded
+escape sequences. The single quoted sequence
+accepts 2 single ' within the
+ embeded character sequence without any conversion
+--- the 2nd ' is not dropped.
+Escape sequences are just concatenated to the string.
+No conversion is done at present; just recognize
+the embeded character sequence.
+See comments in |angled_string| thread regarding
+badly terminated strings and escape sequences.
+
+Returned data is the chacacter string without
+ the bounding single quotes.\fbreak
+\fbreak
+Errors:\fbreak
+|Err_bad_esc| and |Err_bad_eos|.\fbreak
+\fbreak
+Returned T: |T_literal|\fbreak
+@/
+fsm
+(fsm-id "c_literal.lex",fsm-filename c_literal,fsm-namespace NS_c_literal
+,fsm-class Cc_literal {
+ user-prefix-declaration
+#include "esc_seq.h"
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Cc_literal::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+ void Cc_literal::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+}
+,fsm-version "1.0" ,fsm-date "17 Juin 2003"
+,fsm-debug "false" ,fsm-comments "C literal lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_c_literal
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+//
+rules{
+Rc_literal (
+lhs{
+ op
+ Cc_literal* fsm = (Cc_literal*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_c_literal((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+)
+{
+ -> Rquote |.|
+}
+
+Rquote (){
+ -> "'" {
+ op
+ Cc_literal* fsm = (Cc_literal*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_right_quote_: goto rtquote;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ rtquote:{ // end of literal?
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_right_quote_){
+ fsm->copy_kstr_into_buffer("''");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of literal
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{// what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/c_literalsym.cpp b/web/yacco2/compiler/grammars/c_literalsym.cpp
new file mode 100644
index 0000000000..b5cf63ee82
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literalsym.cpp
@@ -0,0 +1,78 @@
+/*
+ File: c_literalsym.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_literal.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_literal;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_c_literal::TH_c_literal(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_c_literal;
+ NS_c_literal::Cc_literal Cc_literal_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cc_literal_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_c_literal::PROC_TH_c_literal(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_c_literal";
+ static bool one_time(false);
+ static NS_c_literal::Cc_literal* NS_c_literal_Cc_literal_(0);// parallel-parser's fsm table
+ static Parser* NS_c_literal_Cc_literal_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_c_literal_Cc_literal_ = new NS_c_literal::Cc_literal();// parallel-parser's fsm table
+ NS_c_literal_Cc_literal_parser = new Parser(*NS_c_literal_Cc_literal_,Caller_pp);
+ }
+ proc_parser = NS_c_literal_Cc_literal_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cc_literal::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rc_literal_:{
+ Rc_literal* sym;
+ if(re->rule_ == 0){
+ sym = new Rc_literal(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc_literal*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rquote_:{
+ Rquote* sym;
+ if(re->rule_ == 0){
+ sym = new Rquote(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rquote*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/c_literaltbl.cpp b/web/yacco2/compiler/grammars/c_literaltbl.cpp
new file mode 100644
index 0000000000..5a4b7ad729
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_literaltbl.cpp
@@ -0,0 +1,87 @@
+/*
+ File: c_literaltbl.cpp
+ Date and Time: Fri Jan 30 18:55:05 2015
+*/
+#include "c_literal.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_literal;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cc_literal[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cc_literal[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cc_literal;
+extern yacco2::State S2_Cc_literal;
+extern yacco2::State S3_Cc_literal;
+extern yacco2::State S4_Cc_literal;
+struct S1std_Cc_literal{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cc_literal S1st_Cc_literal = {
+ 3
+ ,
+ {// start of table
+ {47,(State*)&S2_Cc_literal} // shift sym: raw_right_quote
+ ,{569,(State*)&S1_Cc_literal} // accept sym: Rc_literal
+ ,{570,(State*)&S3_Cc_literal} // shift sym: Rquote
+ }// end of shift table
+};
+yacco2::State S1_Cc_literal = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cc_literal,0,0,0,0};
+struct S2rtd_Cc_literal{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cc_literal S2rt_Cc_literal = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cc_literal,Cc_literal::rhs1_Rquote_}
+ }// end of reduce table
+};
+yacco2::State S2_Cc_literal = //State's vectored into symbol: "'"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cc_literal,0,0,0};
+struct S3std_Cc_literal{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cc_literal S3st_Cc_literal = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S4_Cc_literal} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Cc_literal = {5,(State*)&S4_Cc_literal};
+yacco2::State S3_Cc_literal = //State's vectored into symbol: "Rquote"
+{3
+,0,0,(Shift_entry*)&S3ise_Cc_literal
+,0,(Shift_tbl*)&S3st_Cc_literal,0,0,0,0};
+struct S4rtd_Cc_literal{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cc_literal S4rt_Cc_literal = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cc_literal,Cc_literal::rhs1_Rc_literal_}
+ }// end of reduce table
+};
+yacco2::State S4_Cc_literal = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cc_literal,0,0,0};
diff --git a/web/yacco2/compiler/grammars/c_string.cpp b/web/yacco2/compiler/grammars/c_string.cpp
new file mode 100644
index 0000000000..a490ef12ab
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_string.cpp
@@ -0,0 +1,151 @@
+/*
+ File: c_string.cpp
+ Date and Time: Fri Jan 30 18:55:06 2015
+*/
+#include "c_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_string;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cc_string::
+ Cc_string()
+ :yacco2::CAbs_fsm
+ ("c_string.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"C string lexer."
+ ,"Fri Jan 30 18:55:06 2015 "
+ ,S1_Cc_string){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cc_string::~Cc_string(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cc_string::failed(){
+ return false;
+ }
+ void Cc_string::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cc_string::rhs_to_rules_mapping_[3] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+};
+
+ void Cc_string::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+ void Cc_string::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rc_string::Rc_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc_string",0,Cc_string::R_Rc_string_,P,false,false){
+}
+
+void Rc_string::op(){
+ sstrace_rulesss
+
+ Cc_string* fsm = (Cc_string*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_c_string((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+Rquote::Rquote(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rquote",0,Cc_string::R_Rquote_,P,false,false){
+}
+
+void Rquote::sr1(){
+
+ Cc_string* fsm = (Cc_string*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_dbl_quote_: goto dblquote;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ dblquote:{ // end of string
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_dbl_quote_){
+ fsm->copy_kstr_into_buffer("\"");// due to lex scanner
+ fsm->copy_kstr_into_buffer("\"");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of c string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{// what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/c_string.fsc b/web/yacco2/compiler/grammars/c_string.fsc
new file mode 100644
index 0000000000..b135381dd0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_string.fsc
@@ -0,0 +1,20 @@
+/*
+ File: c_string.fsc
+ Date and Time: Fri Jan 30 18:55:06 2015
+*/
+transitive n
+grammar-name "c_string"
+name-space "NS_c_string"
+thread-name "TH_c_string"
+monolithic n
+file-name "c_string.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_dbl_quote
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"C string lexer."
diff --git a/web/yacco2/compiler/grammars/c_string.h b/web/yacco2/compiler/grammars/c_string.h
new file mode 100644
index 0000000000..7dd1b67a4b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_string.h
@@ -0,0 +1,74 @@
+/*
+ File: c_string.h
+ Date and Time: Fri Jan 30 18:55:06 2015
+*/
+#ifndef __c_string_h__
+#define __c_string_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "esc_seq.h"
+
+extern yacco2::Thread_entry ITH_c_string;
+
+extern yacco2::State S1_Cc_string;
+namespace NS_c_string {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_c_string(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_c_string(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cc_string: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rc_string_ = 569//start_of_rule_list + 0
+ ,rhs1_Rc_string_ = 1
+ ,R_Rquote_ = 570//start_of_rule_list + 2
+ ,rhs1_Rquote_ = 2
+ };
+ //no of la sets = 2
+ //no of states = 4
+ Cc_string();
+ ~Cc_string();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[3];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rc_string;
+struct Rquote;
+struct Rc_string:public yacco2::CAbs_lr1_sym {
+ Rc_string(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rquote:public yacco2::CAbs_lr1_sym {
+ Rquote(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/c_string.lex b/web/yacco2/compiler/grammars/c_string.lex
new file mode 100644
index 0000000000..e5a625cb6a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_string.lex
@@ -0,0 +1,173 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: c_string.lex
+Dates: 17 Juin 2003
+Purpose: c string recognizer : double quoted strings Eg. "hi"
+Returned: T_c_string
+ Err_bad_eos - meta terminal indicating an improper end-of-string
+ this occurs on eof,eog, or an eol terminal ending the string
+ Err_bad_esc - bad escape sequence.
+Note: Stripped of its double quotes for ease of use
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |c_string| Thread.\fbreak
+It recognizes double quoted c++ strings with embeded
+escape sequences. The double quoted sequence
+accepts 2 double " within the
+ embeded character sequence without any conversion
+--- the 2nd " is not dropped.
+Escape sequences are just concatenated to the string.
+No conversion is done at present; just recognize
+the embeded character sequence.
+See comments in |angled_string| thread regarding
+badly terminated strings and escape sequences.\fbreak
+
+Returned data is the chacacter string without
+the bounding " quotes.\fbreak
+\fbreak
+Errors:\fbreak
+|Err_bad_esc| and |Err_bad_eos|.\fbreak
+\fbreak
+Returned T: |T_c_string|\fbreak
+@/
+fsm
+(fsm-id "c_string.lex",fsm-filename c_string,fsm-namespace NS_c_string
+,fsm-class Cc_string {
+ user-prefix-declaration
+#include "esc_seq.h"
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Cc_string::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+ void Cc_string::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+}
+,fsm-version "1.0" ,fsm-date "17 Juin 2003"
+,fsm-debug "false" ,fsm-comments "C string lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_c_string
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rc_string (
+lhs{
+ op
+ Cc_string* fsm = (Cc_string*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_c_string((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+)
+{
+ -> Rquote |.|
+}
+
+Rquote (){
+ -> "\"" {
+/@
+Caveat: Due to Mpost's literal not accepting an escape sequence for ",
+i substitute the " for char(34). It was my weak attempt
+to try to draw it.
+@/
+ op
+ Cc_string* fsm = (Cc_string*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_dbl_quote_: goto dblquote;
+ case T_Enum::T_raw_back_slash_: goto escseq;
+ default: goto other;
+ }
+ dblquote:{ // end of string
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_dbl_quote_){
+ fsm->copy_kstr_into_buffer("\"");// due to lex scanner
+ fsm->copy_kstr_into_buffer("\"");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of c string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ escseq:{// what type of escape
+ using namespace NS_esc_seq;
+ Parser::parse_result result =
+ rule_info__.parser__->start_manually_parallel_parsing(ITH_esc_seq.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm = *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id != T_Enum::T_T_esc_seq_) {
+ RSVP(rtn_tok);
+ return;
+ }
+ T_esc_seq* finc = (T_esc_seq*)(rtn_tok);
+ fsm->copy_str_into_buffer(finc->esc_data());
+ rule_info__.parser__->override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ delete finc;
+goto loop;
+ };
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/c_stringsym.cpp b/web/yacco2/compiler/grammars/c_stringsym.cpp
new file mode 100644
index 0000000000..ca1041abdd
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_stringsym.cpp
@@ -0,0 +1,78 @@
+/*
+ File: c_stringsym.cpp
+ Date and Time: Fri Jan 30 18:55:06 2015
+*/
+#include "c_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_string;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_c_string::TH_c_string(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_c_string;
+ NS_c_string::Cc_string Cc_string_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cc_string_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_c_string::PROC_TH_c_string(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_c_string";
+ static bool one_time(false);
+ static NS_c_string::Cc_string* NS_c_string_Cc_string_(0);// parallel-parser's fsm table
+ static Parser* NS_c_string_Cc_string_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_c_string_Cc_string_ = new NS_c_string::Cc_string();// parallel-parser's fsm table
+ NS_c_string_Cc_string_parser = new Parser(*NS_c_string_Cc_string_,Caller_pp);
+ }
+ proc_parser = NS_c_string_Cc_string_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cc_string::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rc_string_:{
+ Rc_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rc_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rquote_:{
+ Rquote* sym;
+ if(re->rule_ == 0){
+ sym = new Rquote(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rquote*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/c_stringtbl.cpp b/web/yacco2/compiler/grammars/c_stringtbl.cpp
new file mode 100644
index 0000000000..3719df6893
--- /dev/null
+++ b/web/yacco2/compiler/grammars/c_stringtbl.cpp
@@ -0,0 +1,87 @@
+/*
+ File: c_stringtbl.cpp
+ Date and Time: Fri Jan 30 18:55:06 2015
+*/
+#include "c_string.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_c_string;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cc_string[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cc_string[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cc_string;
+extern yacco2::State S2_Cc_string;
+extern yacco2::State S3_Cc_string;
+extern yacco2::State S4_Cc_string;
+struct S1std_Cc_string{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cc_string S1st_Cc_string = {
+ 3
+ ,
+ {// start of table
+ {42,(State*)&S2_Cc_string} // shift sym: raw_dbl_quote
+ ,{569,(State*)&S1_Cc_string} // accept sym: Rc_string
+ ,{570,(State*)&S3_Cc_string} // shift sym: Rquote
+ }// end of shift table
+};
+yacco2::State S1_Cc_string = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cc_string,0,0,0,0};
+struct S2rtd_Cc_string{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cc_string S2rt_Cc_string = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cc_string,Cc_string::rhs1_Rquote_}
+ }// end of reduce table
+};
+yacco2::State S2_Cc_string = //State's vectored into symbol: "\""
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cc_string,0,0,0};
+struct S3std_Cc_string{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cc_string S3st_Cc_string = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S4_Cc_string} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Cc_string = {5,(State*)&S4_Cc_string};
+yacco2::State S3_Cc_string = //State's vectored into symbol: "Rquote"
+{3
+,0,0,(Shift_entry*)&S3ise_Cc_string
+,0,(Shift_tbl*)&S3st_Cc_string,0,0,0,0};
+struct S4rtd_Cc_string{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cc_string S4rt_Cc_string = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cc_string,Cc_string::rhs1_Rc_string_}
+ }// end of reduce table
+};
+yacco2::State S4_Cc_string = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cc_string,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdc.cpp b/web/yacco2/compiler/grammars/cweave_T_sdc.cpp
new file mode 100644
index 0000000000..405a8eea59
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdc.cpp
@@ -0,0 +1,223 @@
+/*
+ File: cweave_T_sdc.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweave_T_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_T_sdc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Ccweave_T_sdc::
+ Ccweave_T_sdc()
+ :yacco2::CAbs_fsm
+ ("cweave_T_sdc.lex"
+ ,"1.0"
+ ,"5 Jan. 2006"
+ ,false
+ ,"Write out cweave Terminals' sdc directives."
+ ,"Fri Jan 30 18:55:08 2015 "
+ ,S1_Ccweave_T_sdc){
+
+ }
+
+Ccweave_T_sdc::~Ccweave_T_sdc(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweave_T_sdc::failed(){
+ return false;
+ }
+ void Ccweave_T_sdc::op(){
+}
+int Ccweave_T_sdc::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+};
+
+ void Ccweave_T_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP T_name){
+ cweave_file_ = Cweave_file;
+ T_name_ = T_name;
+ }
+
+ void Ccweave_T_sdc::wrt_directive(yacco2::KCHARP Directive,T_syntax_code* Sdc){
+ output_sr_sdcode_title(Directive);
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+
+ void Ccweave_T_sdc::output_sr_sdcode(yacco2::KCHARP Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (T_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+ void Ccweave_T_sdc::output_sr_sdcode_title(yacco2::KCHARP Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (T_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+Rweave_sdc::Rweave_sdc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rweave_sdc",0,Ccweave_T_sdc::R_Rweave_sdc_,P,false,false){
+}
+
+Rdirectives::Rdirectives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirectives",0,Ccweave_T_sdc::R_Rdirectives_,P,false,false){
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Ccweave_T_sdc::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::sr1(){
+ struct SF{
+ T_user_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ T_constructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ T_destructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ T_op* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ T_user_implementation* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdc.fsc b/web/yacco2/compiler/grammars/cweave_T_sdc.fsc
new file mode 100644
index 0000000000..02ed7c5d70
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdc.fsc
@@ -0,0 +1,24 @@
+/*
+ File: cweave_T_sdc.fsc
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+transitive n
+grammar-name "cweave_T_sdc"
+name-space "NS_cweave_T_sdc"
+thread-name "Ccweave_T_sdc"
+monolithic y
+file-name "cweave_T_sdc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 5
+ T_user_declaration
+ T_constructor
+ T_destructor
+ T_op
+ T_user_implementation
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Write out cweave Terminals' sdc directives."
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdc.h b/web/yacco2/compiler/grammars/cweave_T_sdc.h
new file mode 100644
index 0000000000..19522af792
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdc.h
@@ -0,0 +1,89 @@
+/*
+ File: cweave_T_sdc.h
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#ifndef __cweave_T_sdc_h__
+#define __cweave_T_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ccweave_T_sdc;
+namespace NS_cweave_T_sdc {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Ccweave_T_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rweave_sdc_ = 569//start_of_rule_list + 0
+ ,rhs1_Rweave_sdc_ = 1
+ ,R_Rdirectives_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdirectives_ = 2
+ ,rhs2_Rdirectives_ = 3
+ ,R_Rdirective_ = 571//start_of_rule_list + 4
+ ,rhs1_Rdirective_ = 4
+ ,rhs2_Rdirective_ = 5
+ ,rhs3_Rdirective_ = 6
+ ,rhs4_Rdirective_ = 7
+ ,rhs5_Rdirective_ = 8
+ };
+ //no of la sets = 2
+ //no of states = 10
+ Ccweave_T_sdc();
+ ~Ccweave_T_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+
+ public:
+ std::ofstream* cweave_file_;
+ KCHARP T_name_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP T_name);
+ void output_sr_sdcode(yacco2::KCHARP Directive);
+ void output_sr_sdcode_title(yacco2::KCHARP Directive);
+ void wrt_directive(yacco2::KCHARP Directive,T_syntax_code* Sdc);
+
+ };
+struct Rweave_sdc;
+struct Rdirectives;
+struct Rdirective;
+struct Rweave_sdc:public yacco2::CAbs_lr1_sym {
+ Rweave_sdc(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirectives:public yacco2::CAbs_lr1_sym {
+ Rdirectives(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdc.lex b/web/yacco2/compiler/grammars/cweave_T_sdc.lex
new file mode 100644
index 0000000000..eab522109e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdc.lex
@@ -0,0 +1,173 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweave_T_sdc.lex
+Dates: 26 Jan. 2006
+Purpose: write out cweave sentence for
+ syntax directed directives of terminals.
+ This is common to all T types:
+ error, rc, lrk, and T
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweave_T_sdc| grammar.\fbreak
+Write out cweave Terminals' syntax directed directives sentences.
+@/
+fsm
+(fsm-id "cweave_T_sdc.lex"
+,fsm-filename cweave_T_sdc
+,fsm-namespace NS_cweave_T_sdc
+,fsm-class Ccweave_T_sdc{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ std::ofstream* cweave_file_;
+ KCHARP T_name_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP T_name);
+ void output_sr_sdcode(yacco2::KCHARP Directive);
+ void output_sr_sdcode_title(yacco2::KCHARP Directive);
+ void wrt_directive(yacco2::KCHARP Directive,T_syntax_code* Sdc);
+ ***
+ user-implementation
+ void Ccweave_T_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP T_name){
+ cweave_file_ = Cweave_file;
+ T_name_ = T_name;
+ }
+/@
+@*3 |wrt_directive|.
+@/
+ void Ccweave_T_sdc::wrt_directive(yacco2::KCHARP Directive,T_syntax_code* Sdc){
+ output_sr_sdcode_title(Directive);
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+/@
+@*3 |output_sr_sdcode|.
+@/
+ void Ccweave_T_sdc::output_sr_sdcode(yacco2::KCHARP Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (T_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+/@
+@*3 |output_sr_sdcode_title|.
+@/
+ void Ccweave_T_sdc::output_sr_sdcode_title(yacco2::KCHARP Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (T_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "5 Jan. 2006",fsm-debug "false"
+,fsm-comments "Write out cweave Terminals' sdc directives.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rweave_sdc (){
+ -> Rdirectives eog
+}
+
+Rdirectives (){
+ -> Rdirective
+ -> Rdirectives Rdirective
+}
+
+Rdirective (){
+ -> "#user-declaration" {
+ op
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#constructor" {
+ op
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#destructor" {
+ op
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#op" {
+ op
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-implementation" {
+ op
+ Ccweave_T_sdc* fsm = (Ccweave_T_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdcsym.cpp b/web/yacco2/compiler/grammars/cweave_T_sdcsym.cpp
new file mode 100644
index 0000000000..65ae5c7b55
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdcsym.cpp
@@ -0,0 +1,144 @@
+/*
+ File: cweave_T_sdcsym.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweave_T_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_T_sdc;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ccweave_T_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rweave_sdc_:{
+ Rweave_sdc* sym;
+ if(re->rule_ == 0){
+ sym = new Rweave_sdc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rweave_sdc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweave_T_sdctbl.cpp b/web/yacco2/compiler/grammars/cweave_T_sdctbl.cpp
new file mode 100644
index 0000000000..3ae1901943
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_T_sdctbl.cpp
@@ -0,0 +1,193 @@
+/*
+ File: cweave_T_sdctbl.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweave_T_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_T_sdc;// grammar's ns
+// first set terminals
+// LR1_eog
+// T_user_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_user_implementation
+yacco2::UCHAR LA1_Ccweave_T_sdc[] ={
+3
+,0,2
+,38,144
+,39,11
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ccweave_T_sdc[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweave_T_sdc;
+extern yacco2::State S2_Ccweave_T_sdc;
+extern yacco2::State S3_Ccweave_T_sdc;
+extern yacco2::State S4_Ccweave_T_sdc;
+extern yacco2::State S5_Ccweave_T_sdc;
+extern yacco2::State S6_Ccweave_T_sdc;
+extern yacco2::State S7_Ccweave_T_sdc;
+extern yacco2::State S8_Ccweave_T_sdc;
+extern yacco2::State S9_Ccweave_T_sdc;
+extern yacco2::State S10_Ccweave_T_sdc;
+struct S1std_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[8];
+};
+S1std_Ccweave_T_sdc S1st_Ccweave_T_sdc = {
+ 8
+ ,
+ {// start of table
+ {308,(State*)&S2_Ccweave_T_sdc} // shift sym: T_user_declaration
+ ,{311,(State*)&S3_Ccweave_T_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S4_Ccweave_T_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S5_Ccweave_T_sdc} // shift sym: T_op
+ ,{315,(State*)&S6_Ccweave_T_sdc} // shift sym: T_user_implementation
+ ,{569,(State*)&S1_Ccweave_T_sdc} // accept sym: Rweave_sdc
+ ,{570,(State*)&S7_Ccweave_T_sdc} // shift sym: Rdirectives
+ ,{571,(State*)&S10_Ccweave_T_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S1_Ccweave_T_sdc = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweave_T_sdc,0,0,0,0};
+struct S2rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ccweave_T_sdc S2rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S2_Ccweave_T_sdc = //State's vectored into symbol: "#user-declaration"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ccweave_T_sdc,0,0,0};
+struct S3rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweave_T_sdc S3rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweave_T_sdc = //State's vectored into symbol: "#constructor"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweave_T_sdc,0,0,0};
+struct S4rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweave_T_sdc S4rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweave_T_sdc = //State's vectored into symbol: "#destructor"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweave_T_sdc,0,0,0};
+struct S5rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweave_T_sdc S5rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweave_T_sdc = //State's vectored into symbol: "#op"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweave_T_sdc,0,0,0};
+struct S6rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ccweave_T_sdc S6rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S6_Ccweave_T_sdc = //State's vectored into symbol: "#user-implementation"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ccweave_T_sdc,0,0,0};
+struct S7std_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S7std_Ccweave_T_sdc S7st_Ccweave_T_sdc = {
+ 7
+ ,
+ {// start of table
+ {1,(State*)&S8_Ccweave_T_sdc} // shift sym: LR1_eog
+ ,{308,(State*)&S2_Ccweave_T_sdc} // shift sym: T_user_declaration
+ ,{311,(State*)&S3_Ccweave_T_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S4_Ccweave_T_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S5_Ccweave_T_sdc} // shift sym: T_op
+ ,{315,(State*)&S6_Ccweave_T_sdc} // shift sym: T_user_implementation
+ ,{571,(State*)&S9_Ccweave_T_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S7_Ccweave_T_sdc = //State's vectored into symbol: "Rdirectives"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Ccweave_T_sdc,0,0,0,0};
+struct S8rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ccweave_T_sdc S8rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweave_T_sdc,Ccweave_T_sdc::rhs1_Rweave_sdc_}
+ }// end of reduce table
+};
+yacco2::State S8_Ccweave_T_sdc = //State's vectored into symbol: "eog"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ccweave_T_sdc,0,0,0};
+struct S9rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweave_T_sdc S9rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs2_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweave_T_sdc = //State's vectored into symbol: "Rdirective"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweave_T_sdc,0,0,0};
+struct S10rtd_Ccweave_T_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ccweave_T_sdc S10rt_Ccweave_T_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_T_sdc,Ccweave_T_sdc::rhs1_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S10_Ccweave_T_sdc = //State's vectored into symbol: "Rdirective"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ccweave_T_sdc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdc.cpp b/web/yacco2/compiler/grammars/cweave_fsm_sdc.cpp
new file mode 100644
index 0000000000..c5790ba836
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdc.cpp
@@ -0,0 +1,303 @@
+/*
+ File: cweave_fsm_sdc.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_fsm_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_fsm_sdc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Ccweave_fsm_sdc::
+ Ccweave_fsm_sdc()
+ :yacco2::CAbs_fsm
+ ("cweave_fsm_sdc.lex"
+ ,"1.0"
+ ,"5 Jan. 2006"
+ ,false
+ ,"Write out cweave fsm directives sentences."
+ ,"Fri Jan 30 18:55:07 2015 "
+ ,S1_Ccweave_fsm_sdc){
+
+ }
+
+Ccweave_fsm_sdc::~Ccweave_fsm_sdc(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweave_fsm_sdc::failed(){
+ return false;
+ }
+ void Ccweave_fsm_sdc::op(){
+}
+int Ccweave_fsm_sdc::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+};
+
+ void Ccweave_fsm_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,T_fsm_phrase* Fsm_phrase){
+ cweave_file_ = Cweave_file;
+ fsm_phrase_ = Fsm_phrase;
+ }
+
+ void Ccweave_fsm_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ output_sr_sdcode_title(Directive);
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+
+ void Ccweave_fsm_sdc::output_sr_sdcode(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (fsm_phrase_->fsm_class_phrase()->identifier()->identifier()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+ void Ccweave_fsm_sdc::output_sr_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (fsm_phrase_->fsm_class_phrase()->identifier()->identifier()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+Rweave_fsm_sdc::Rweave_fsm_sdc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rweave_fsm_sdc",0,Ccweave_fsm_sdc::R_Rweave_fsm_sdc_,P,false,false){
+}
+
+Rdirectives::Rdirectives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirectives",0,Ccweave_fsm_sdc::R_Rdirectives_,P,false,false){
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Ccweave_fsm_sdc::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::sr1(){
+ struct SF{
+ T_user_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ T_user_prefix_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-prefix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ T_user_suffix_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-suffix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ T_constructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ T_destructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ T_op* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr7(){
+ struct SF{
+ T_failed* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "failed";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr8(){
+ struct SF{
+ T_user_implementation* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr9(){
+ struct SF{
+ T_user_imp_tbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-tbl";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr10(){
+ struct SF{
+ T_user_imp_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-sym";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdc.fsc b/web/yacco2/compiler/grammars/cweave_fsm_sdc.fsc
new file mode 100644
index 0000000000..52876203e1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdc.fsc
@@ -0,0 +1,29 @@
+/*
+ File: cweave_fsm_sdc.fsc
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+transitive n
+grammar-name "cweave_fsm_sdc"
+name-space "NS_cweave_fsm_sdc"
+thread-name "Ccweave_fsm_sdc"
+monolithic y
+file-name "cweave_fsm_sdc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 10
+ T_user_declaration
+ T_user_prefix_declaration
+ T_user_suffix_declaration
+ T_constructor
+ T_destructor
+ T_op
+ T_failed
+ T_user_implementation
+ T_user_imp_tbl
+ T_user_imp_sym
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Write out cweave fsm directives sentences."
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdc.h b/web/yacco2/compiler/grammars/cweave_fsm_sdc.h
new file mode 100644
index 0000000000..8b0edb2edf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdc.h
@@ -0,0 +1,99 @@
+/*
+ File: cweave_fsm_sdc.h
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#ifndef __cweave_fsm_sdc_h__
+#define __cweave_fsm_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ccweave_fsm_sdc;
+namespace NS_cweave_fsm_sdc {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Ccweave_fsm_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rweave_fsm_sdc_ = 569//start_of_rule_list + 0
+ ,rhs1_Rweave_fsm_sdc_ = 1
+ ,R_Rdirectives_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdirectives_ = 2
+ ,rhs2_Rdirectives_ = 3
+ ,R_Rdirective_ = 571//start_of_rule_list + 4
+ ,rhs1_Rdirective_ = 4
+ ,rhs2_Rdirective_ = 5
+ ,rhs3_Rdirective_ = 6
+ ,rhs4_Rdirective_ = 7
+ ,rhs5_Rdirective_ = 8
+ ,rhs6_Rdirective_ = 9
+ ,rhs7_Rdirective_ = 10
+ ,rhs8_Rdirective_ = 11
+ ,rhs9_Rdirective_ = 12
+ ,rhs10_Rdirective_ = 13
+ };
+ //no of la sets = 2
+ //no of states = 15
+ Ccweave_fsm_sdc();
+ ~Ccweave_fsm_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+
+ public:
+ std::ofstream* cweave_file_;
+ T_fsm_phrase* fsm_phrase_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,T_fsm_phrase* Fsm_phrase);
+ void output_sr_sdcode(const char* Directive);
+ void output_sr_sdcode_title(const char* Directive);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+
+ };
+struct Rweave_fsm_sdc;
+struct Rdirectives;
+struct Rdirective;
+struct Rweave_fsm_sdc:public yacco2::CAbs_lr1_sym {
+ Rweave_fsm_sdc(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirectives:public yacco2::CAbs_lr1_sym {
+ Rdirectives(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdc.lex b/web/yacco2/compiler/grammars/cweave_fsm_sdc.lex
new file mode 100644
index 0000000000..27eb812b46
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdc.lex
@@ -0,0 +1,206 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweave_fsm_sdc.lex
+Dates: 13 Jan. 2006
+Purpose: write out cweave sentence for
+ syntax directed directives of fsm
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweave_fsm_sdc| grammar.\fbreak
+Write out cweave fsm directives sentences.
+@/
+fsm
+(fsm-id "cweave_fsm_sdc.lex"
+,fsm-filename cweave_fsm_sdc
+,fsm-namespace NS_cweave_fsm_sdc
+,fsm-class Ccweave_fsm_sdc{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ std::ofstream* cweave_file_;
+ T_fsm_phrase* fsm_phrase_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,T_fsm_phrase* Fsm_phrase);
+ void output_sr_sdcode(const char* Directive);
+ void output_sr_sdcode_title(const char* Directive);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+ ***
+ user-implementation
+ void Ccweave_fsm_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,T_fsm_phrase* Fsm_phrase){
+ cweave_file_ = Cweave_file;
+ fsm_phrase_ = Fsm_phrase;
+ }
+/@
+@*3 |wrt_directive|.
+@/
+ void Ccweave_fsm_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ output_sr_sdcode_title(Directive);
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+/@
+@*3 |output_sr_sdcode|.
+@/
+ void Ccweave_fsm_sdc::output_sr_sdcode(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (fsm_phrase_->fsm_class_phrase()->identifier()->identifier()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+/@
+@*3 |output_sr_sdcode_title|.
+@/
+ void Ccweave_fsm_sdc::output_sr_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (fsm_phrase_->fsm_class_phrase()->identifier()->identifier()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "5 Jan. 2006",fsm-debug "false"
+,fsm-comments "Write out cweave fsm directives sentences.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+//
+rules{
+Rweave_fsm_sdc (){
+ -> Rdirectives eog
+}
+
+Rdirectives (){
+ -> Rdirective
+ -> Rdirectives Rdirective
+}
+
+Rdirective (){
+ -> "#user-declaration" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-prefix-declaration" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-prefix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-suffix-declaration" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-suffix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#constructor" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#destructor" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#op" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#failed" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "failed";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-implementation" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ const char* sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-imp-tbl" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-tbl";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-imp-sym" {
+ op
+ Ccweave_fsm_sdc* fsm = (Ccweave_fsm_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-sym";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdcsym.cpp b/web/yacco2/compiler/grammars/cweave_fsm_sdcsym.cpp
new file mode 100644
index 0000000000..5cbcc9315b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdcsym.cpp
@@ -0,0 +1,219 @@
+/*
+ File: cweave_fsm_sdcsym.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_fsm_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_fsm_sdc;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ccweave_fsm_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rweave_fsm_sdc_:{
+ Rweave_fsm_sdc* sym;
+ if(re->rule_ == 0){
+ sym = new Rweave_fsm_sdc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rweave_fsm_sdc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweave_fsm_sdctbl.cpp b/web/yacco2/compiler/grammars/cweave_fsm_sdctbl.cpp
new file mode 100644
index 0000000000..ee89371501
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_fsm_sdctbl.cpp
@@ -0,0 +1,283 @@
+/*
+ File: cweave_fsm_sdctbl.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_fsm_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_fsm_sdc;// grammar's ns
+// first set terminals
+// LR1_eog
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+yacco2::UCHAR LA1_Ccweave_fsm_sdc[] ={
+3
+,0,2
+,38,240
+,39,63
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ccweave_fsm_sdc[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweave_fsm_sdc;
+extern yacco2::State S2_Ccweave_fsm_sdc;
+extern yacco2::State S3_Ccweave_fsm_sdc;
+extern yacco2::State S4_Ccweave_fsm_sdc;
+extern yacco2::State S5_Ccweave_fsm_sdc;
+extern yacco2::State S6_Ccweave_fsm_sdc;
+extern yacco2::State S7_Ccweave_fsm_sdc;
+extern yacco2::State S8_Ccweave_fsm_sdc;
+extern yacco2::State S9_Ccweave_fsm_sdc;
+extern yacco2::State S10_Ccweave_fsm_sdc;
+extern yacco2::State S11_Ccweave_fsm_sdc;
+extern yacco2::State S12_Ccweave_fsm_sdc;
+extern yacco2::State S13_Ccweave_fsm_sdc;
+extern yacco2::State S14_Ccweave_fsm_sdc;
+extern yacco2::State S15_Ccweave_fsm_sdc;
+struct S1std_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[13];
+};
+S1std_Ccweave_fsm_sdc S1st_Ccweave_fsm_sdc = {
+ 13
+ ,
+ {// start of table
+ {308,(State*)&S2_Ccweave_fsm_sdc} // shift sym: T_user_declaration
+ ,{309,(State*)&S3_Ccweave_fsm_sdc} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S4_Ccweave_fsm_sdc} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S5_Ccweave_fsm_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S6_Ccweave_fsm_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S7_Ccweave_fsm_sdc} // shift sym: T_op
+ ,{314,(State*)&S8_Ccweave_fsm_sdc} // shift sym: T_failed
+ ,{315,(State*)&S9_Ccweave_fsm_sdc} // shift sym: T_user_implementation
+ ,{316,(State*)&S10_Ccweave_fsm_sdc} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S11_Ccweave_fsm_sdc} // shift sym: T_user_imp_sym
+ ,{569,(State*)&S1_Ccweave_fsm_sdc} // accept sym: Rweave_fsm_sdc
+ ,{570,(State*)&S12_Ccweave_fsm_sdc} // shift sym: Rdirectives
+ ,{571,(State*)&S15_Ccweave_fsm_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S1_Ccweave_fsm_sdc = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweave_fsm_sdc,0,0,0,0};
+struct S2rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ccweave_fsm_sdc S2rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S2_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-declaration"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ccweave_fsm_sdc,0,0,0};
+struct S3rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweave_fsm_sdc S3rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-prefix-declaration"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweave_fsm_sdc,0,0,0};
+struct S4rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweave_fsm_sdc S4rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-suffix-declaration"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweave_fsm_sdc,0,0,0};
+struct S5rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweave_fsm_sdc S5rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweave_fsm_sdc = //State's vectored into symbol: "#constructor"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweave_fsm_sdc,0,0,0};
+struct S6rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ccweave_fsm_sdc S6rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S6_Ccweave_fsm_sdc = //State's vectored into symbol: "#destructor"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ccweave_fsm_sdc,0,0,0};
+struct S7rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ccweave_fsm_sdc S7rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S7_Ccweave_fsm_sdc = //State's vectored into symbol: "#op"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ccweave_fsm_sdc,0,0,0};
+struct S8rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ccweave_fsm_sdc S8rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs7_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S8_Ccweave_fsm_sdc = //State's vectored into symbol: "#failed"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ccweave_fsm_sdc,0,0,0};
+struct S9rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweave_fsm_sdc S9rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs8_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-implementation"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweave_fsm_sdc,0,0,0};
+struct S10rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ccweave_fsm_sdc S10rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs9_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S10_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-imp-tbl"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ccweave_fsm_sdc,0,0,0};
+struct S11rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ccweave_fsm_sdc S11rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs10_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S11_Ccweave_fsm_sdc = //State's vectored into symbol: "#user-imp-sym"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ccweave_fsm_sdc,0,0,0};
+struct S12std_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[12];
+};
+S12std_Ccweave_fsm_sdc S12st_Ccweave_fsm_sdc = {
+ 12
+ ,
+ {// start of table
+ {1,(State*)&S13_Ccweave_fsm_sdc} // shift sym: LR1_eog
+ ,{308,(State*)&S2_Ccweave_fsm_sdc} // shift sym: T_user_declaration
+ ,{309,(State*)&S3_Ccweave_fsm_sdc} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S4_Ccweave_fsm_sdc} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S5_Ccweave_fsm_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S6_Ccweave_fsm_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S7_Ccweave_fsm_sdc} // shift sym: T_op
+ ,{314,(State*)&S8_Ccweave_fsm_sdc} // shift sym: T_failed
+ ,{315,(State*)&S9_Ccweave_fsm_sdc} // shift sym: T_user_implementation
+ ,{316,(State*)&S10_Ccweave_fsm_sdc} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S11_Ccweave_fsm_sdc} // shift sym: T_user_imp_sym
+ ,{571,(State*)&S14_Ccweave_fsm_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S12_Ccweave_fsm_sdc = //State's vectored into symbol: "Rdirectives"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Ccweave_fsm_sdc,0,0,0,0};
+struct S13rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ccweave_fsm_sdc S13rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs1_Rweave_fsm_sdc_}
+ }// end of reduce table
+};
+yacco2::State S13_Ccweave_fsm_sdc = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ccweave_fsm_sdc,0,0,0};
+struct S14rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ccweave_fsm_sdc S14rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs2_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S14_Ccweave_fsm_sdc = //State's vectored into symbol: "Rdirective"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ccweave_fsm_sdc,0,0,0};
+struct S15rtd_Ccweave_fsm_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Ccweave_fsm_sdc S15rt_Ccweave_fsm_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_fsm_sdc,Ccweave_fsm_sdc::rhs1_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S15_Ccweave_fsm_sdc = //State's vectored into symbol: "Rdirective"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Ccweave_fsm_sdc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdc.cpp b/web/yacco2/compiler/grammars/cweave_lhs_sdc.cpp
new file mode 100644
index 0000000000..fcc708525f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdc.cpp
@@ -0,0 +1,240 @@
+/*
+ File: cweave_lhs_sdc.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_lhs_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_lhs_sdc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Ccweave_lhs_sdc::
+ Ccweave_lhs_sdc()
+ :yacco2::CAbs_fsm
+ ("cweave_lhs_sdc.lex"
+ ,"1.0"
+ ,"5 Jan. 2006"
+ ,false
+ ,"Write out cweave rule's lhs directives sentences"
+ ,"Fri Jan 30 18:55:07 2015 "
+ ,S1_Ccweave_lhs_sdc){
+
+ }
+
+Ccweave_lhs_sdc::~Ccweave_lhs_sdc(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweave_lhs_sdc::failed(){
+ return false;
+ }
+ void Ccweave_lhs_sdc::op(){
+}
+int Ccweave_lhs_sdc::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+};
+
+ void Ccweave_lhs_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP Rule_name){
+ cweave_file_ = Cweave_file;
+ rule_name_ = Rule_name;
+ }
+
+ void Ccweave_lhs_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+
+ KCHARP cweave_sentence = "@< %s %s directive@>=\n";
+ output_sdcode_title(Directive);
+ if(Sdc == 0){
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ sprintf(big_buf_,cweave_sentence,xa,Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ sprintf(big_buf_,cweave_sentence,xa,Directive);
+ (*cweave_file_) << big_buf_;
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+
+ void Ccweave_lhs_sdc::output_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+ char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+Rweave_sdc::Rweave_sdc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rweave_sdc",0,Ccweave_lhs_sdc::R_Rweave_sdc_,P,false,false){
+}
+
+Rdirectives::Rdirectives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirectives",0,Ccweave_lhs_sdc::R_Rdirectives_,P,false,false){
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Ccweave_lhs_sdc::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::sr1(){
+ struct SF{
+ T_arbitrator_code* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ string include_war_code;
+ include_war_code.append("#include \"war_begin_code.h\"\n");
+ include_war_code.append(sf->p1__->syntax_code()->syntax_code()->c_str());
+ include_war_code.append("#include \"war_end_code.h\"\n");
+ sf->p1__->syntax_code()->syntax_code()->clear();
+ sf->p1__->syntax_code()->syntax_code()->append(include_war_code.c_str());
+
+ KCHARP sdc = "arbitrator-code";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ T_user_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ T_user_implementation* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ T_constructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ T_destructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ T_op* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdc.fsc b/web/yacco2/compiler/grammars/cweave_lhs_sdc.fsc
new file mode 100644
index 0000000000..6ad454c4c0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdc.fsc
@@ -0,0 +1,25 @@
+/*
+ File: cweave_lhs_sdc.fsc
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+transitive n
+grammar-name "cweave_lhs_sdc"
+name-space "NS_cweave_lhs_sdc"
+thread-name "Ccweave_lhs_sdc"
+monolithic y
+file-name "cweave_lhs_sdc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 6
+ T_arbitrator_code
+ T_user_declaration
+ T_constructor
+ T_destructor
+ T_op
+ T_user_implementation
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Write out cweave rule's lhs directives sentences"
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdc.h b/web/yacco2/compiler/grammars/cweave_lhs_sdc.h
new file mode 100644
index 0000000000..e4a706669f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdc.h
@@ -0,0 +1,90 @@
+/*
+ File: cweave_lhs_sdc.h
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#ifndef __cweave_lhs_sdc_h__
+#define __cweave_lhs_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ccweave_lhs_sdc;
+namespace NS_cweave_lhs_sdc {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Ccweave_lhs_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rweave_sdc_ = 569//start_of_rule_list + 0
+ ,rhs1_Rweave_sdc_ = 1
+ ,R_Rdirectives_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdirectives_ = 2
+ ,rhs2_Rdirectives_ = 3
+ ,R_Rdirective_ = 571//start_of_rule_list + 4
+ ,rhs1_Rdirective_ = 4
+ ,rhs2_Rdirective_ = 5
+ ,rhs3_Rdirective_ = 6
+ ,rhs4_Rdirective_ = 7
+ ,rhs5_Rdirective_ = 8
+ ,rhs6_Rdirective_ = 9
+ };
+ //no of la sets = 2
+ //no of states = 11
+ Ccweave_lhs_sdc();
+ ~Ccweave_lhs_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+
+ public:
+ std::ofstream* cweave_file_;
+ KCHARP rule_name_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP Rule_name);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+ void output_sdcode_title(const char* Directive);
+
+ };
+struct Rweave_sdc;
+struct Rdirectives;
+struct Rdirective;
+struct Rweave_sdc:public yacco2::CAbs_lr1_sym {
+ Rweave_sdc(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirectives:public yacco2::CAbs_lr1_sym {
+ Rdirectives(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdc.lex b/web/yacco2/compiler/grammars/cweave_lhs_sdc.lex
new file mode 100644
index 0000000000..6b0aa6a5c4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdc.lex
@@ -0,0 +1,176 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweave_lhs_sdc.lex
+Dates: 16 Jan. 2006
+Purpose: write out cweave sentence for
+ rule's lhs syntax directed directives
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweave_lhs_sdc| grammar.\fbreak
+Write out cweave rule's lhs directives sentences.
+@/
+fsm
+(fsm-id "cweave_lhs_sdc.lex"
+,fsm-filename cweave_lhs_sdc
+,fsm-namespace NS_cweave_lhs_sdc
+,fsm-class Ccweave_lhs_sdc{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ std::ofstream* cweave_file_;
+ KCHARP rule_name_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP Rule_name);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+ void output_sdcode_title(const char* Directive);
+ ***
+ user-implementation
+ void Ccweave_lhs_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,yacco2::KCHARP Rule_name){
+ cweave_file_ = Cweave_file;
+ rule_name_ = Rule_name;
+ }
+/@
+@*3 |wrt_directive|.
+@/
+ void Ccweave_lhs_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+
+ KCHARP cweave_sentence = "@< %s %s directive@>=\n";
+ output_sdcode_title(Directive);
+ if(Sdc == 0){
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ sprintf(big_buf_,cweave_sentence,xa,Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ sprintf(big_buf_,cweave_sentence,xa,Directive);
+ (*cweave_file_) << big_buf_;
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+/@
+@*3 |output_sdcode_title|.
+@/
+ void Ccweave_lhs_sdc::output_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+ char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (rule_name_
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*3 %s %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "5 Jan. 2006",fsm-debug "false"
+,fsm-comments "Write out cweave rule's lhs directives sentences")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+//
+rules{
+Rweave_sdc (){
+ -> Rdirectives eog
+}
+
+Rdirectives (){
+ -> Rdirective
+ -> Rdirectives Rdirective
+}
+
+Rdirective (){
+ -> "#arbitrator-code" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ string include_war_code;
+ include_war_code.append("#include \"war_begin_code.h\"\n");
+ include_war_code.append(sf->p1__->syntax_code()->syntax_code()->c_str());
+ include_war_code.append("#include \"war_end_code.h\"\n");
+ sf->p1__->syntax_code()->syntax_code()->clear();
+ sf->p1__->syntax_code()->syntax_code()->append(include_war_code.c_str());
+
+ KCHARP sdc = "arbitrator-code";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-declaration" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-implementation" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#constructor" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#destructor" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#op" {
+ op
+ Ccweave_lhs_sdc* fsm = (Ccweave_lhs_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdcsym.cpp b/web/yacco2/compiler/grammars/cweave_lhs_sdcsym.cpp
new file mode 100644
index 0000000000..dce48ab0c5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdcsym.cpp
@@ -0,0 +1,159 @@
+/*
+ File: cweave_lhs_sdcsym.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_lhs_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_lhs_sdc;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ccweave_lhs_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rweave_sdc_:{
+ Rweave_sdc* sym;
+ if(re->rule_ == 0){
+ sym = new Rweave_sdc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rweave_sdc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweave_lhs_sdctbl.cpp b/web/yacco2/compiler/grammars/cweave_lhs_sdctbl.cpp
new file mode 100644
index 0000000000..642cae2d2b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_lhs_sdctbl.cpp
@@ -0,0 +1,212 @@
+/*
+ File: cweave_lhs_sdctbl.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_lhs_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_lhs_sdc;// grammar's ns
+// first set terminals
+// LR1_eog
+// T_arbitrator_code
+// T_user_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_user_implementation
+yacco2::UCHAR LA1_Ccweave_lhs_sdc[] ={
+4
+,0,2
+,36,1
+,38,144
+,39,11
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ccweave_lhs_sdc[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweave_lhs_sdc;
+extern yacco2::State S2_Ccweave_lhs_sdc;
+extern yacco2::State S3_Ccweave_lhs_sdc;
+extern yacco2::State S4_Ccweave_lhs_sdc;
+extern yacco2::State S5_Ccweave_lhs_sdc;
+extern yacco2::State S6_Ccweave_lhs_sdc;
+extern yacco2::State S7_Ccweave_lhs_sdc;
+extern yacco2::State S8_Ccweave_lhs_sdc;
+extern yacco2::State S9_Ccweave_lhs_sdc;
+extern yacco2::State S10_Ccweave_lhs_sdc;
+extern yacco2::State S11_Ccweave_lhs_sdc;
+struct S1std_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S1std_Ccweave_lhs_sdc S1st_Ccweave_lhs_sdc = {
+ 9
+ ,
+ {// start of table
+ {288,(State*)&S2_Ccweave_lhs_sdc} // shift sym: T_arbitrator_code
+ ,{308,(State*)&S3_Ccweave_lhs_sdc} // shift sym: T_user_declaration
+ ,{311,(State*)&S4_Ccweave_lhs_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S5_Ccweave_lhs_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S6_Ccweave_lhs_sdc} // shift sym: T_op
+ ,{315,(State*)&S7_Ccweave_lhs_sdc} // shift sym: T_user_implementation
+ ,{569,(State*)&S1_Ccweave_lhs_sdc} // accept sym: Rweave_sdc
+ ,{570,(State*)&S8_Ccweave_lhs_sdc} // shift sym: Rdirectives
+ ,{571,(State*)&S11_Ccweave_lhs_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S1_Ccweave_lhs_sdc = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweave_lhs_sdc,0,0,0,0};
+struct S2rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ccweave_lhs_sdc S2rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S2_Ccweave_lhs_sdc = //State's vectored into symbol: "#arbitrator-code"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ccweave_lhs_sdc,0,0,0};
+struct S3rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweave_lhs_sdc S3rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweave_lhs_sdc = //State's vectored into symbol: "#user-declaration"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweave_lhs_sdc,0,0,0};
+struct S4rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweave_lhs_sdc S4rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweave_lhs_sdc = //State's vectored into symbol: "#constructor"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweave_lhs_sdc,0,0,0};
+struct S5rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweave_lhs_sdc S5rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweave_lhs_sdc = //State's vectored into symbol: "#destructor"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweave_lhs_sdc,0,0,0};
+struct S6rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ccweave_lhs_sdc S6rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S6_Ccweave_lhs_sdc = //State's vectored into symbol: "#op"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ccweave_lhs_sdc,0,0,0};
+struct S7rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ccweave_lhs_sdc S7rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S7_Ccweave_lhs_sdc = //State's vectored into symbol: "#user-implementation"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ccweave_lhs_sdc,0,0,0};
+struct S8std_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[8];
+};
+S8std_Ccweave_lhs_sdc S8st_Ccweave_lhs_sdc = {
+ 8
+ ,
+ {// start of table
+ {1,(State*)&S9_Ccweave_lhs_sdc} // shift sym: LR1_eog
+ ,{288,(State*)&S2_Ccweave_lhs_sdc} // shift sym: T_arbitrator_code
+ ,{308,(State*)&S3_Ccweave_lhs_sdc} // shift sym: T_user_declaration
+ ,{311,(State*)&S4_Ccweave_lhs_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S5_Ccweave_lhs_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S6_Ccweave_lhs_sdc} // shift sym: T_op
+ ,{315,(State*)&S7_Ccweave_lhs_sdc} // shift sym: T_user_implementation
+ ,{571,(State*)&S10_Ccweave_lhs_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S8_Ccweave_lhs_sdc = //State's vectored into symbol: "Rdirectives"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Ccweave_lhs_sdc,0,0,0,0};
+struct S9rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweave_lhs_sdc S9rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs1_Rweave_sdc_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweave_lhs_sdc = //State's vectored into symbol: "eog"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweave_lhs_sdc,0,0,0};
+struct S10rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ccweave_lhs_sdc S10rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs2_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S10_Ccweave_lhs_sdc = //State's vectored into symbol: "Rdirective"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ccweave_lhs_sdc,0,0,0};
+struct S11rtd_Ccweave_lhs_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ccweave_lhs_sdc S11rt_Ccweave_lhs_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_lhs_sdc,Ccweave_lhs_sdc::rhs1_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S11_Ccweave_lhs_sdc = //State's vectored into symbol: "Rdirective"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ccweave_lhs_sdc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweave_sdc.cpp b/web/yacco2/compiler/grammars/cweave_sdc.cpp
new file mode 100644
index 0000000000..6351773590
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdc.cpp
@@ -0,0 +1,306 @@
+/*
+ File: cweave_sdc.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_sdc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Ccweave_sdc::
+ Ccweave_sdc()
+ :yacco2::CAbs_fsm
+ ("cweave_sdc.lex"
+ ,"1.0"
+ ,"5 Jan. 2006"
+ ,false
+ ,"Write out cweave subrule's sdc irectives sentences"
+ ,"Fri Jan 30 18:55:07 2015 "
+ ,S1_Ccweave_sdc){
+
+ }
+
+Ccweave_sdc::~Ccweave_sdc(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweave_sdc::failed(){
+ return false;
+ }
+ void Ccweave_sdc::op(){
+}
+int Ccweave_sdc::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+};
+
+ void Ccweave_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,T_subrule_def* Subrule_def
+ ,int Subrule_no){
+ cweave_file_ = Cweave_file;
+ subrule_def_ = Subrule_def;
+ subrule_no_ = Subrule_no;
+ }
+
+ void Ccweave_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+
+ void Ccweave_sdc::output_sr_sdcode(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (subrule_def_->its_rule_def()->rule_name()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s subrule %i %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,subrule_no_
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+ void Ccweave_sdc::output_sr_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (subrule_def_->its_rule_def()->rule_name()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*4 %s subrule %i %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,subrule_no_
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+
+Rweave_sdc::Rweave_sdc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rweave_sdc",0,Ccweave_sdc::R_Rweave_sdc_,P,false,false){
+}
+
+Rdirectives::Rdirectives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirectives",0,Ccweave_sdc::R_Rdirectives_,P,false,false){
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Ccweave_sdc::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::sr1(){
+ struct SF{
+ T_op* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ T_arbitrator_code* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "arbitrator-code";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ T_user_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ T_user_prefix_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-prefix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ T_user_suffix_declaration* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-suffix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ T_constructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr7(){
+ struct SF{
+ T_destructor* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr8(){
+ struct SF{
+ T_user_implementation* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr9(){
+ struct SF{
+ T_user_imp_tbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-tbl";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
+void Rdirective::sr10(){
+ struct SF{
+ T_user_imp_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-sym";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweave_sdc.fsc b/web/yacco2/compiler/grammars/cweave_sdc.fsc
new file mode 100644
index 0000000000..0408caff01
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdc.fsc
@@ -0,0 +1,29 @@
+/*
+ File: cweave_sdc.fsc
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+transitive n
+grammar-name "cweave_sdc"
+name-space "NS_cweave_sdc"
+thread-name "Ccweave_sdc"
+monolithic y
+file-name "cweave_sdc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 10
+ T_arbitrator_code
+ T_user_declaration
+ T_user_prefix_declaration
+ T_user_suffix_declaration
+ T_constructor
+ T_destructor
+ T_op
+ T_user_implementation
+ T_user_imp_tbl
+ T_user_imp_sym
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Write out cweave subrule's sdc irectives sentences"
diff --git a/web/yacco2/compiler/grammars/cweave_sdc.h b/web/yacco2/compiler/grammars/cweave_sdc.h
new file mode 100644
index 0000000000..370db718b4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdc.h
@@ -0,0 +1,102 @@
+/*
+ File: cweave_sdc.h
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#ifndef __cweave_sdc_h__
+#define __cweave_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ccweave_sdc;
+namespace NS_cweave_sdc {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Ccweave_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rweave_sdc_ = 569//start_of_rule_list + 0
+ ,rhs1_Rweave_sdc_ = 1
+ ,R_Rdirectives_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdirectives_ = 2
+ ,rhs2_Rdirectives_ = 3
+ ,R_Rdirective_ = 571//start_of_rule_list + 4
+ ,rhs1_Rdirective_ = 4
+ ,rhs2_Rdirective_ = 5
+ ,rhs3_Rdirective_ = 6
+ ,rhs4_Rdirective_ = 7
+ ,rhs5_Rdirective_ = 8
+ ,rhs6_Rdirective_ = 9
+ ,rhs7_Rdirective_ = 10
+ ,rhs8_Rdirective_ = 11
+ ,rhs9_Rdirective_ = 12
+ ,rhs10_Rdirective_ = 13
+ };
+ //no of la sets = 2
+ //no of states = 15
+ Ccweave_sdc();
+ ~Ccweave_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+
+ public:
+ std::ofstream* cweave_file_;
+ T_subrule_def* subrule_def_;
+ int subrule_no_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,T_subrule_def* Subrule_def
+ ,int Subrule_no);
+ void output_sr_sdcode(const char* Directive);
+ void output_sr_sdcode_title(const char* Directive);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+ void deal_with_cweave_atsign(const char* Directive,T_syntax_code* Sdc);
+
+ };
+struct Rweave_sdc;
+struct Rdirectives;
+struct Rdirective;
+struct Rweave_sdc:public yacco2::CAbs_lr1_sym {
+ Rweave_sdc(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirectives:public yacco2::CAbs_lr1_sym {
+ Rdirectives(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweave_sdc.lex b/web/yacco2/compiler/grammars/cweave_sdc.lex
new file mode 100644
index 0000000000..6efe4ef832
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdc.lex
@@ -0,0 +1,212 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweave_sdc.lex
+Dates: 5 Jan. 2006
+Purpose: write out cweave sentence for
+ syntax directed directives
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweave_sdc| grammar.\fbreak
+Write out cweave subrule's syntax directed directives sentences.
+@/
+fsm
+(fsm-id "cweave_sdc.lex"
+,fsm-filename cweave_sdc
+,fsm-namespace NS_cweave_sdc
+,fsm-class Ccweave_sdc{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ std::ofstream* cweave_file_;
+ T_subrule_def* subrule_def_;
+ int subrule_no_;
+ void initialize
+ (std::ofstream* Cweave_file
+ ,T_subrule_def* Subrule_def
+ ,int Subrule_no);
+ void output_sr_sdcode(const char* Directive);
+ void output_sr_sdcode_title(const char* Directive);
+ void wrt_directive(const char* Directive,T_syntax_code* Sdc);
+ void deal_with_cweave_atsign(const char* Directive,T_syntax_code* Sdc);
+ ***
+ user-implementation
+ void Ccweave_sdc::initialize
+ (std::ofstream* Cweave_file
+ ,T_subrule_def* Subrule_def
+ ,int Subrule_no){
+ cweave_file_ = Cweave_file;
+ subrule_def_ = Subrule_def;
+ subrule_no_ = Subrule_no;
+ }
+/@
+@*3 |wrt_directive|.
+@/
+ void Ccweave_sdc::wrt_directive(const char* Directive,T_syntax_code* Sdc){
+ if(Sdc == 0){
+ output_sr_sdcode(Directive);
+ (*cweave_file_) << "/";
+ (*cweave_file_) << "/ no sdcode" << endl;
+ return;
+ }
+ if(Sdc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(cweave_file_,Sdc->cweb_marker());
+ }
+ output_sr_sdcode(Directive);
+ string xlate;
+ int len = Sdc->syntax_code()->length();
+ string& sdc=*Sdc->syntax_code();
+ // prescan @ due to cweave reqmts
+ for(int x=0;x<len;++x){
+ char nc = sdc[x];
+ if(nc=='@'){
+ // check next char for cweave type directives
+ char nnc = sdc[x+1];
+ if((nnc == '*') || (nnc == '<') || (nnc == '>')){
+ xlate += nc;
+ continue;
+ }else{
+ xlate += "@@";
+ continue;
+ }
+ }else{
+ xlate += nc;
+ continue;
+ }
+ }
+ (*cweave_file_) << xlate.c_str() << endl;
+ }
+/@
+@*3 |output_sr_sdcode|.
+@/
+ void Ccweave_sdc::output_sr_sdcode(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (subrule_def_->its_rule_def()->rule_name()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@<%s subrule %i %s directive@>=\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,subrule_no_
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+/@
+@*3 |output_sr_sdcode_title|.
+@/
+ void Ccweave_sdc::output_sr_sdcode_title(const char* Directive){
+ char big_buf_[BIG_BUFFER_32K];
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (subrule_def_->its_rule_def()->rule_name()->c_str()
+ ,xa);
+ KCHARP cweave_sentence =
+ "@*4 %s subrule %i %s directive.\n";
+
+ sprintf(big_buf_
+ ,cweave_sentence
+ ,xa
+ ,subrule_no_
+ ,Directive
+ );
+ (*cweave_file_) << big_buf_;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "5 Jan. 2006",fsm-debug "false"
+,fsm-comments "Write out cweave subrule's sdc irectives sentences")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+//
+rules{
+Rweave_sdc (){
+ -> Rdirectives eog
+}
+
+Rdirectives (){
+ -> Rdirective
+ -> Rdirectives Rdirective
+}
+
+Rdirective (){
+ -> "#op" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "op";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#arbitrator-code" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "arbitrator-code";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-declaration" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-prefix-declaration" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-prefix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-suffix-declaration" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-suffix-declaration";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#constructor" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "constructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#destructor" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "destructor";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-implementation" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-implementation";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-imp-tbl" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-tbl";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+ -> "#user-imp-sym" {
+ op
+ Ccweave_sdc* fsm = (Ccweave_sdc*)rule_info__.parser__->fsm_tbl__;
+ KCHARP sdc = "user-imp-sym";
+ fsm->wrt_directive(sdc,sf->p1__->syntax_code());
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweave_sdcsym.cpp b/web/yacco2/compiler/grammars/cweave_sdcsym.cpp
new file mode 100644
index 0000000000..854970d4f4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdcsym.cpp
@@ -0,0 +1,219 @@
+/*
+ File: cweave_sdcsym.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_sdc;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ccweave_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rweave_sdc_:{
+ Rweave_sdc* sym;
+ if(re->rule_ == 0){
+ sym = new Rweave_sdc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rweave_sdc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweave_sdctbl.cpp b/web/yacco2/compiler/grammars/cweave_sdctbl.cpp
new file mode 100644
index 0000000000..0cd431ab92
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweave_sdctbl.cpp
@@ -0,0 +1,284 @@
+/*
+ File: cweave_sdctbl.cpp
+ Date and Time: Fri Jan 30 18:55:07 2015
+*/
+#include "cweave_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweave_sdc;// grammar's ns
+// first set terminals
+// T_arbitrator_code
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// LR1_eog
+yacco2::UCHAR LA1_Ccweave_sdc[] ={
+4
+,0,2
+,36,1
+,38,240
+,39,59
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ccweave_sdc[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweave_sdc;
+extern yacco2::State S2_Ccweave_sdc;
+extern yacco2::State S3_Ccweave_sdc;
+extern yacco2::State S4_Ccweave_sdc;
+extern yacco2::State S5_Ccweave_sdc;
+extern yacco2::State S6_Ccweave_sdc;
+extern yacco2::State S7_Ccweave_sdc;
+extern yacco2::State S8_Ccweave_sdc;
+extern yacco2::State S9_Ccweave_sdc;
+extern yacco2::State S10_Ccweave_sdc;
+extern yacco2::State S11_Ccweave_sdc;
+extern yacco2::State S12_Ccweave_sdc;
+extern yacco2::State S13_Ccweave_sdc;
+extern yacco2::State S14_Ccweave_sdc;
+extern yacco2::State S15_Ccweave_sdc;
+struct S1std_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[13];
+};
+S1std_Ccweave_sdc S1st_Ccweave_sdc = {
+ 13
+ ,
+ {// start of table
+ {288,(State*)&S2_Ccweave_sdc} // shift sym: T_arbitrator_code
+ ,{308,(State*)&S3_Ccweave_sdc} // shift sym: T_user_declaration
+ ,{309,(State*)&S4_Ccweave_sdc} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S5_Ccweave_sdc} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S6_Ccweave_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S7_Ccweave_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S8_Ccweave_sdc} // shift sym: T_op
+ ,{315,(State*)&S9_Ccweave_sdc} // shift sym: T_user_implementation
+ ,{316,(State*)&S10_Ccweave_sdc} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S11_Ccweave_sdc} // shift sym: T_user_imp_sym
+ ,{569,(State*)&S1_Ccweave_sdc} // accept sym: Rweave_sdc
+ ,{570,(State*)&S12_Ccweave_sdc} // shift sym: Rdirectives
+ ,{571,(State*)&S15_Ccweave_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S1_Ccweave_sdc = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweave_sdc,0,0,0,0};
+struct S2rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ccweave_sdc S2rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S2_Ccweave_sdc = //State's vectored into symbol: "#arbitrator-code"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ccweave_sdc,0,0,0};
+struct S3rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweave_sdc S3rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweave_sdc = //State's vectored into symbol: "#user-declaration"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweave_sdc,0,0,0};
+struct S4rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweave_sdc S4rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweave_sdc = //State's vectored into symbol: "#user-prefix-declaration"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweave_sdc,0,0,0};
+struct S5rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweave_sdc S5rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweave_sdc = //State's vectored into symbol: "#user-suffix-declaration"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweave_sdc,0,0,0};
+struct S6rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ccweave_sdc S6rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S6_Ccweave_sdc = //State's vectored into symbol: "#constructor"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ccweave_sdc,0,0,0};
+struct S7rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ccweave_sdc S7rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs7_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S7_Ccweave_sdc = //State's vectored into symbol: "#destructor"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ccweave_sdc,0,0,0};
+struct S8rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ccweave_sdc S8rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S8_Ccweave_sdc = //State's vectored into symbol: "#op"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ccweave_sdc,0,0,0};
+struct S9rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweave_sdc S9rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs8_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweave_sdc = //State's vectored into symbol: "#user-implementation"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweave_sdc,0,0,0};
+struct S10rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ccweave_sdc S10rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs9_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S10_Ccweave_sdc = //State's vectored into symbol: "#user-imp-tbl"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ccweave_sdc,0,0,0};
+struct S11rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ccweave_sdc S11rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs10_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S11_Ccweave_sdc = //State's vectored into symbol: "#user-imp-sym"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ccweave_sdc,0,0,0};
+struct S12std_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[12];
+};
+S12std_Ccweave_sdc S12st_Ccweave_sdc = {
+ 12
+ ,
+ {// start of table
+ {1,(State*)&S13_Ccweave_sdc} // shift sym: LR1_eog
+ ,{288,(State*)&S2_Ccweave_sdc} // shift sym: T_arbitrator_code
+ ,{308,(State*)&S3_Ccweave_sdc} // shift sym: T_user_declaration
+ ,{309,(State*)&S4_Ccweave_sdc} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S5_Ccweave_sdc} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S6_Ccweave_sdc} // shift sym: T_constructor
+ ,{312,(State*)&S7_Ccweave_sdc} // shift sym: T_destructor
+ ,{313,(State*)&S8_Ccweave_sdc} // shift sym: T_op
+ ,{315,(State*)&S9_Ccweave_sdc} // shift sym: T_user_implementation
+ ,{316,(State*)&S10_Ccweave_sdc} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S11_Ccweave_sdc} // shift sym: T_user_imp_sym
+ ,{571,(State*)&S14_Ccweave_sdc} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::State S12_Ccweave_sdc = //State's vectored into symbol: "Rdirectives"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Ccweave_sdc,0,0,0,0};
+struct S13rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ccweave_sdc S13rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweave_sdc,Ccweave_sdc::rhs1_Rweave_sdc_}
+ }// end of reduce table
+};
+yacco2::State S13_Ccweave_sdc = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ccweave_sdc,0,0,0};
+struct S14rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ccweave_sdc S14rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs2_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S14_Ccweave_sdc = //State's vectored into symbol: "Rdirective"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ccweave_sdc,0,0,0};
+struct S15rtd_Ccweave_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Ccweave_sdc S15rt_Ccweave_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweave_sdc,Ccweave_sdc::rhs1_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S15_Ccweave_sdc = //State's vectored into symbol: "Rdirective"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Ccweave_sdc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_k.cpp b/web/yacco2/compiler/grammars/cweb_or_c_k.cpp
new file mode 100644
index 0000000000..926e504032
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_k.cpp
@@ -0,0 +1,238 @@
+/*
+ File: cweb_or_c_k.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweb_or_c_k.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_or_c_k;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Ccweb_or_c_k::
+ Ccweb_or_c_k()
+ :yacco2::CAbs_fsm
+ ("cweb_or_c_k.lex"
+ ,"1.0"
+ ,"10 feb. 2008"
+ ,false
+ ,"C++ or cweb type comments lexer."
+ ,"Fri Jan 30 18:55:08 2015 "
+ ,S1_Ccweb_or_c_k){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Ccweb_or_c_k::~Ccweb_or_c_k(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweb_or_c_k::failed(){
+ return false;
+ }
+ void Ccweb_or_c_k::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Ccweb_or_c_k::rhs_to_rules_mapping_[7] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+};
+
+ void Ccweb_or_c_k::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+ void Ccweb_or_c_k::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rcweb_or_c_k::Rcweb_or_c_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_or_c_k",0,Ccweb_or_c_k::R_Rcweb_or_c_k_,P,false,false){
+}
+
+void Rcweb_or_c_k::sr1(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+
+
+}
+
+void Rcweb_or_c_k::sr2(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+
+}
+
+void Rcweb_or_c_k::sr3(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* com = new T_cweb_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);// file marker
+ RSVP(com);
+
+
+}
+
+Rslash_at::Rslash_at(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rslash_at",0,Ccweb_or_c_k::R_Rslash_at_,P,false,false){
+}
+
+void Rslash_at::sr1(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_at_sign_: goto atsign;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ };
+ atsign:{ // end of k?
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_){
+ fsm->copy_kstr_into_buffer("@");
+ goto loop;// false eok
+ }
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
+Rslash_asterisk::Rslash_asterisk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rslash_asterisk",0,Ccweb_or_c_k::R_Rslash_asterisk_,P,false,false){
+}
+
+void Rslash_asterisk::sr1(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");// due to lex scanner
+ fsm->copy_kstr_into_buffer("*");
+
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_asteric_: goto aster;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ };
+ aster:{ // end of k?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_) goto loop;// false eok
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
+R2slash::R2slash(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("R2slash",0,Ccweb_or_c_k::R_R2slash_,P,false,false){
+}
+
+void R2slash::sr1(){
+
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");
+ fsm->copy_kstr_into_buffer("/");
+ for(;;){
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: {
+ return;
+ }
+ case T_Enum::T_raw_cr_:{
+ return;
+ }
+ case T_Enum::T_LR1_eog_: return;
+ }
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_k.fsc b/web/yacco2/compiler/grammars/cweb_or_c_k.fsc
new file mode 100644
index 0000000000..66d21937d6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_k.fsc
@@ -0,0 +1,20 @@
+/*
+ File: cweb_or_c_k.fsc
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+transitive n
+grammar-name "cweb_or_c_k"
+name-space "NS_cweb_or_c_k"
+thread-name "TH_cweb_or_c_k"
+monolithic n
+file-name "cweb_or_c_k.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_slash
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"C++ or cweb type comments lexer."
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_k.h b/web/yacco2/compiler/grammars/cweb_or_c_k.h
new file mode 100644
index 0000000000..2a1611acfe
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_k.h
@@ -0,0 +1,93 @@
+/*
+ File: cweb_or_c_k.h
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#ifndef __cweb_or_c_k_h__
+#define __cweb_or_c_k_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_cweb_or_c_k;
+
+extern yacco2::State S1_Ccweb_or_c_k;
+namespace NS_cweb_or_c_k {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_cweb_or_c_k(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_cweb_or_c_k(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Ccweb_or_c_k: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rcweb_or_c_k_ = 569//start_of_rule_list + 0
+ ,rhs1_Rcweb_or_c_k_ = 1
+ ,rhs2_Rcweb_or_c_k_ = 2
+ ,rhs3_Rcweb_or_c_k_ = 3
+ ,R_Rslash_at_ = 570//start_of_rule_list + 2
+ ,rhs1_Rslash_at_ = 4
+ ,R_Rslash_asterisk_ = 571//start_of_rule_list + 4
+ ,rhs1_Rslash_asterisk_ = 5
+ ,R_R2slash_ = 572//start_of_rule_list + 6
+ ,rhs1_R2slash_ = 6
+ };
+ //no of la sets = 2
+ //no of states = 11
+ Ccweb_or_c_k();
+ ~Ccweb_or_c_k();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[7];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rcweb_or_c_k;
+struct Rslash_at;
+struct Rslash_asterisk;
+struct R2slash;
+struct Rcweb_or_c_k:public yacco2::CAbs_lr1_sym {
+ Rcweb_or_c_k(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rslash_at:public yacco2::CAbs_lr1_sym {
+ Rslash_at(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rslash_asterisk:public yacco2::CAbs_lr1_sym {
+ Rslash_asterisk(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct R2slash:public yacco2::CAbs_lr1_sym {
+ R2slash(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_k.lex b/web/yacco2/compiler/grammars/cweb_or_c_k.lex
new file mode 100644
index 0000000000..6dd7ce64d8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_k.lex
@@ -0,0 +1,233 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweb_or_c_k.lex
+Dates: 10 Feb. 2008
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweb_or_c_k| combined ``c++ '' or my ``cweb'' comment Thread.\fbreak
+Why? To eliminate the non-determinism
+between these 2 threads due to their common prefix: ``/''.
+Why again? Speed and stop the confusion across the threads address space
+when called by procedure instead of by thread. The thread gets called singlely
+and hence the speed versus parallel threads competing where only one will win.
+Some interesting debuging issues where found when using
+Sun's superb ``mdb'' and ``dtrace'' tools.
+@*2 Cpp comments.\fbreak
+Handles both flavours of c++ comments.\fbreak
+\ptindent{1) // single line type comment}
+\ptindent{2) /* ... */ type comment}
+To speed things up, i'm using a finite-state approach to lower the
+pushdown deterministic rule push / pop cycles.
+@*2 Cweb type comments.\fbreak
+Recognize |cweb| comments buried within a grammar.
+These comments start with ``/@@''
+followed by the comments
+and closed off by ``@@'' and a forward slash --- can't declare
+it as this will prematurely end this comment.
+The enclosing comment prefix / suffix are not appended to the data
+as only its contents that are outputed in the various documents.
+
+Note: Use of the \invisibleshift{} symbol to lower the Lookahead set members.
+@/
+fsm
+(fsm-id "cweb_or_c_k.lex",fsm-filename cweb_or_c_k,fsm-namespace NS_cweb_or_c_k
+,fsm-class Ccweb_or_c_k {
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Ccweb_or_c_k::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+ void Ccweb_or_c_k::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ }
+,fsm-version "1.0",fsm-date "10 feb. 2008",fsm-debug "false"
+,fsm-comments "C++ or cweb type comments lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_cweb_or_c_k
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rcweb_or_c_k (){
+ -> Rslash_asterisk |.| {
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+
+ ***
+ }
+ -> R2slash |.| {
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_comment* com = new T_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(com);
+ ***
+ }
+ -> Rslash_at |.| {
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* com = new T_cweb_comment((const char*)&fsm->ddd_);
+ com->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);// file marker
+ RSVP(com);
+
+ ***
+ }
+}
+Rslash_at (){
+ -> "/" "@" {// exclude the /@ and @/ from cweb comment
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_at_sign_: goto atsign;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ };
+ atsign:{ // end of k?
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_){
+ fsm->copy_kstr_into_buffer("@");
+ goto loop;// false eok
+ }
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+
+Rslash_asterisk (){
+ -> "/" "*" {
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");// due to lex scanner
+ fsm->copy_kstr_into_buffer("*");
+
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto other;
+ case T_Enum::T_raw_cr_: goto cr;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_asteric_: goto aster;
+ default: goto other;
+ }
+ cr:{// cr lf?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_lf_) goto loop;// not cr lf
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ };
+ aster:{ // end of k?
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ != T_Enum::T_raw_slash_) goto loop;// false eok
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ return;
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_comment_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+
+R2slash (){
+ -> "/" "/" {
+ op
+ Ccweb_or_c_k* fsm = (Ccweb_or_c_k*) rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer("/");
+ fsm->copy_kstr_into_buffer("/");
+ for(;;){
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: {
+ return;
+ }
+ case T_Enum::T_raw_cr_:{
+ return;
+ }
+ case T_Enum::T_LR1_eog_: return;
+ }
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+ }
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_ksym.cpp b/web/yacco2/compiler/grammars/cweb_or_c_ksym.cpp
new file mode 100644
index 0000000000..d1d4a33598
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_ksym.cpp
@@ -0,0 +1,138 @@
+/*
+ File: cweb_or_c_ksym.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweb_or_c_k.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_or_c_k;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_cweb_or_c_k::TH_cweb_or_c_k(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_cweb_or_c_k;
+ NS_cweb_or_c_k::Ccweb_or_c_k Ccweb_or_c_k_;// parallel-parser's parse table
+#define ssPARSE_TABLE Ccweb_or_c_k_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_cweb_or_c_k::PROC_TH_cweb_or_c_k(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_cweb_or_c_k";
+ static bool one_time(false);
+ static NS_cweb_or_c_k::Ccweb_or_c_k* NS_cweb_or_c_k_Ccweb_or_c_k_(0);// parallel-parser's fsm table
+ static Parser* NS_cweb_or_c_k_Ccweb_or_c_k_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_cweb_or_c_k_Ccweb_or_c_k_ = new NS_cweb_or_c_k::Ccweb_or_c_k();// parallel-parser's fsm table
+ NS_cweb_or_c_k_Ccweb_or_c_k_parser = new Parser(*NS_cweb_or_c_k_Ccweb_or_c_k_,Caller_pp);
+ }
+ proc_parser = NS_cweb_or_c_k_Ccweb_or_c_k_parser;
+#include "wproc_pp_core.h"
+}
+void
+Ccweb_or_c_k::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rcweb_or_c_k_:{
+ Rcweb_or_c_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_or_c_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_or_c_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_or_c_k_:{
+ Rcweb_or_c_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_or_c_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_or_c_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rcweb_or_c_k_:{
+ Rcweb_or_c_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_or_c_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_or_c_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rslash_at_:{
+ Rslash_at* sym;
+ if(re->rule_ == 0){
+ sym = new Rslash_at(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rslash_at*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rslash_asterisk_:{
+ Rslash_asterisk* sym;
+ if(re->rule_ == 0){
+ sym = new Rslash_asterisk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rslash_asterisk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_R2slash_:{
+ R2slash* sym;
+ if(re->rule_ == 0){
+ sym = new R2slash(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R2slash*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweb_or_c_ktbl.cpp b/web/yacco2/compiler/grammars/cweb_or_c_ktbl.cpp
new file mode 100644
index 0000000000..0c67284263
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_or_c_ktbl.cpp
@@ -0,0 +1,200 @@
+/*
+ File: cweb_or_c_ktbl.cpp
+ Date and Time: Fri Jan 30 18:55:08 2015
+*/
+#include "cweb_or_c_k.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_or_c_k;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Ccweb_or_c_k[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ccweb_or_c_k[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweb_or_c_k;
+extern yacco2::State S2_Ccweb_or_c_k;
+extern yacco2::State S3_Ccweb_or_c_k;
+extern yacco2::State S4_Ccweb_or_c_k;
+extern yacco2::State S5_Ccweb_or_c_k;
+extern yacco2::State S6_Ccweb_or_c_k;
+extern yacco2::State S7_Ccweb_or_c_k;
+extern yacco2::State S8_Ccweb_or_c_k;
+extern yacco2::State S9_Ccweb_or_c_k;
+extern yacco2::State S10_Ccweb_or_c_k;
+extern yacco2::State S11_Ccweb_or_c_k;
+struct S1std_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Ccweb_or_c_k S1st_Ccweb_or_c_k = {
+ 5
+ ,
+ {// start of table
+ {55,(State*)&S2_Ccweb_or_c_k} // shift sym: raw_slash
+ ,{569,(State*)&S1_Ccweb_or_c_k} // accept sym: Rcweb_or_c_k
+ ,{570,(State*)&S6_Ccweb_or_c_k} // shift sym: Rslash_at
+ ,{571,(State*)&S8_Ccweb_or_c_k} // shift sym: Rslash_asterisk
+ ,{572,(State*)&S10_Ccweb_or_c_k} // shift sym: R2slash
+ }// end of shift table
+};
+yacco2::State S1_Ccweb_or_c_k = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweb_or_c_k,0,0,0,0};
+struct S2std_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Ccweb_or_c_k S2st_Ccweb_or_c_k = {
+ 3
+ ,
+ {// start of table
+ {50,(State*)&S3_Ccweb_or_c_k} // shift sym: raw_asteric
+ ,{55,(State*)&S4_Ccweb_or_c_k} // shift sym: raw_slash
+ ,{72,(State*)&S5_Ccweb_or_c_k} // shift sym: raw_at_sign
+ }// end of shift table
+};
+yacco2::State S2_Ccweb_or_c_k = //State's vectored into symbol: "/"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Ccweb_or_c_k,0,0,0,0};
+struct S3rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweb_or_c_k S3rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_or_c_k,Ccweb_or_c_k::rhs1_Rslash_asterisk_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweb_or_c_k = //State's vectored into symbol: "*"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweb_or_c_k,0,0,0};
+struct S4rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweb_or_c_k S4rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_or_c_k,Ccweb_or_c_k::rhs1_R2slash_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweb_or_c_k = //State's vectored into symbol: "/"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweb_or_c_k,0,0,0};
+struct S5rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweb_or_c_k S5rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_or_c_k,Ccweb_or_c_k::rhs1_Rslash_at_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweb_or_c_k = //State's vectored into symbol: "@"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweb_or_c_k,0,0,0};
+struct S6std_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S6std_Ccweb_or_c_k S6st_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S7_Ccweb_or_c_k} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S6ise_Ccweb_or_c_k = {5,(State*)&S7_Ccweb_or_c_k};
+yacco2::State S6_Ccweb_or_c_k = //State's vectored into symbol: "Rslash_at"
+{6
+,0,0,(Shift_entry*)&S6ise_Ccweb_or_c_k
+,0,(Shift_tbl*)&S6st_Ccweb_or_c_k,0,0,0,0};
+struct S7rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ccweb_or_c_k S7rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweb_or_c_k,Ccweb_or_c_k::rhs3_Rcweb_or_c_k_}
+ }// end of reduce table
+};
+yacco2::State S7_Ccweb_or_c_k = //State's vectored into symbol: "|.|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ccweb_or_c_k,0,0,0};
+struct S8std_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Ccweb_or_c_k S8st_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S9_Ccweb_or_c_k} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S8ise_Ccweb_or_c_k = {5,(State*)&S9_Ccweb_or_c_k};
+yacco2::State S8_Ccweb_or_c_k = //State's vectored into symbol: "Rslash_asterisk"
+{8
+,0,0,(Shift_entry*)&S8ise_Ccweb_or_c_k
+,0,(Shift_tbl*)&S8st_Ccweb_or_c_k,0,0,0,0};
+struct S9rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweb_or_c_k S9rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweb_or_c_k,Ccweb_or_c_k::rhs1_Rcweb_or_c_k_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweb_or_c_k = //State's vectored into symbol: "|.|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweb_or_c_k,0,0,0};
+struct S10std_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Ccweb_or_c_k S10st_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S11_Ccweb_or_c_k} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S10ise_Ccweb_or_c_k = {5,(State*)&S11_Ccweb_or_c_k};
+yacco2::State S10_Ccweb_or_c_k = //State's vectored into symbol: "R2slash"
+{10
+,0,0,(Shift_entry*)&S10ise_Ccweb_or_c_k
+,0,(Shift_tbl*)&S10st_Ccweb_or_c_k,0,0,0,0};
+struct S11rtd_Ccweb_or_c_k{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ccweb_or_c_k S11rt_Ccweb_or_c_k = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ccweb_or_c_k,Ccweb_or_c_k::rhs2_Rcweb_or_c_k_}
+ }// end of reduce table
+};
+yacco2::State S11_Ccweb_or_c_k = //State's vectored into symbol: "|.|"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ccweb_or_c_k,0,0,0};
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_ph.cpp b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.cpp
new file mode 100644
index 0000000000..bbf4208413
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.cpp
@@ -0,0 +1,186 @@
+/*
+ File: cweb_put_k_into_ph.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "cweb_put_k_into_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_put_k_into_ph;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Ccweb_put_k_into_ph::
+ Ccweb_put_k_into_ph()
+ :yacco2::CAbs_fsm
+ ("cweb_put_k_into_ph.lex"
+ ,"1.0"
+ ,"22 dec. 2005"
+ ,false
+ ,"Extract CWEB comments."
+ ,"Fri Jan 30 18:55:09 2015 "
+ ,S1_Ccweb_put_k_into_ph){
+
+ }
+
+Ccweb_put_k_into_ph::~Ccweb_put_k_into_ph(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ccweb_put_k_into_ph::failed(){
+ return false;
+ }
+ void Ccweb_put_k_into_ph::op(){
+}
+int Ccweb_put_k_into_ph::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,0 // subrule 6 for rule 1
+ ,0 // subrule 7 for rule 1
+ ,0 // subrule 8 for rule 1
+};
+
+ void Ccweb_put_k_into_ph::
+ initialize(AST* Cweb_marker_t,bool* Rules_phrase_seen){
+ cweb_marker_t_ = Cweb_marker_t;
+ rules_phrase_seen_ = Rules_phrase_seen;
+ }
+
+Rcweb_put_k_into_phrase::Rcweb_put_k_into_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_put_k_into_phrase",0,Ccweb_put_k_into_ph::R_Rcweb_put_k_into_phrase_,P,false,false){
+}
+
+void Rcweb_put_k_into_phrase::sr1(){
+ struct SF{
+ T_fsm_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr2(){
+ struct SF{
+ T_parallel_parser_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr3(){
+ struct SF{
+ T_terminals_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr4(){
+ struct SF{
+ T_error_symbols_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr5(){
+ struct SF{
+ T_rc_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr6(){
+ struct SF{
+ T_lr1_k_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
+void Rcweb_put_k_into_phrase::sr7(){
+ struct SF{
+ T_rules_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ (*fsm->rules_phrase_seen_) = true;
+
+}
+
+void Rcweb_put_k_into_phrase::sr8(){
+ struct SF{
+ T_enum_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc
new file mode 100644
index 0000000000..912ff44566
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc
@@ -0,0 +1,27 @@
+/*
+ File: cweb_put_k_into_ph.fsc
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+transitive n
+grammar-name "cweb_put_k_into_ph"
+name-space "NS_cweb_put_k_into_ph"
+thread-name "Ccweb_put_k_into_ph"
+monolithic y
+file-name "cweb_put_k_into_ph.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 8
+ T_fsm_phrase
+ T_parallel_parser_phrase
+ T_enum_phrase
+ T_terminals_phrase
+ T_error_symbols_phrase
+ T_lr1_k_phrase
+ T_rc_phrase
+ T_rules_phrase
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Extract CWEB comments."
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_ph.h b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.h
new file mode 100644
index 0000000000..226625f516
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.h
@@ -0,0 +1,70 @@
+/*
+ File: cweb_put_k_into_ph.h
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#ifndef __cweb_put_k_into_ph_h__
+#define __cweb_put_k_into_ph_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Ccweb_put_k_into_ph;
+namespace NS_cweb_put_k_into_ph {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Ccweb_put_k_into_ph: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rcweb_put_k_into_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rcweb_put_k_into_phrase_ = 1
+ ,rhs2_Rcweb_put_k_into_phrase_ = 2
+ ,rhs3_Rcweb_put_k_into_phrase_ = 3
+ ,rhs4_Rcweb_put_k_into_phrase_ = 4
+ ,rhs5_Rcweb_put_k_into_phrase_ = 5
+ ,rhs6_Rcweb_put_k_into_phrase_ = 6
+ ,rhs7_Rcweb_put_k_into_phrase_ = 7
+ ,rhs8_Rcweb_put_k_into_phrase_ = 8
+ };
+ //no of la sets = 1
+ //no of states = 9
+ Ccweb_put_k_into_ph();
+ ~Ccweb_put_k_into_ph();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+
+ public:
+ AST* cweb_marker_t_;
+ bool* rules_phrase_seen_;
+ void initialize(AST* Cweb_marker_t,bool* Rules_phrase_seen);
+
+ };
+struct Rcweb_put_k_into_phrase;
+struct Rcweb_put_k_into_phrase:public yacco2::CAbs_lr1_sym {
+ Rcweb_put_k_into_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_ph.lex b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.lex
new file mode 100644
index 0000000000..5d1510a900
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_ph.lex
@@ -0,0 +1,97 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: cweb_put_k_into_ph.lex
+Dates: 31 Jan. 2006
+Purpose: Put the prefix cweb comment into its phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |cweb_put_k_into_ph| grammar.\fbreak
+Puts the |cweb| comments into the appropriate parse phrase.
+@/
+fsm
+(fsm-id "cweb_put_k_into_ph.lex",fsm-filename cweb_put_k_into_ph,fsm-namespace NS_cweb_put_k_into_ph
+,fsm-class Ccweb_put_k_into_ph
+{
+ user-declaration
+ public:
+ AST* cweb_marker_t_;
+ bool* rules_phrase_seen_;
+ void initialize(AST* Cweb_marker_t,bool* Rules_phrase_seen);
+ ***
+ user-implementation
+ void Ccweb_put_k_into_ph::
+ initialize(AST* Cweb_marker_t,bool* Rules_phrase_seen){
+ cweb_marker_t_ = Cweb_marker_t;
+ rules_phrase_seen_ = Rules_phrase_seen;
+ }
+ ***
+}
+,fsm-version "1.0" ,fsm-date "22 dec. 2005",fsm-debug "false"
+,fsm-comments "Extract CWEB comments.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+
+Rcweb_put_k_into_phrase (){
+ -> "fsm-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "parallel-parser-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "terminals-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "error-symbols-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "rc-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "lr1-k-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+ -> "rules-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ (*fsm->rules_phrase_seen_) = true;
+ ***
+ }
+ -> "T-enum-phrase" {
+ op
+ Ccweb_put_k_into_ph* fsm =
+ (Ccweb_put_k_into_ph*)rule_info__.parser__->fsm_tbl__;
+ sf->p1__->add_cweb_marker(fsm->cweb_marker_t_);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_phsym.cpp b/web/yacco2/compiler/grammars/cweb_put_k_into_phsym.cpp
new file mode 100644
index 0000000000..07ce82c039
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_phsym.cpp
@@ -0,0 +1,147 @@
+/*
+ File: cweb_put_k_into_phsym.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "cweb_put_k_into_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_put_k_into_ph;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ccweb_put_k_into_ph::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rcweb_put_k_into_phrase_:{
+ Rcweb_put_k_into_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_put_k_into_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_put_k_into_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr8();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/cweb_put_k_into_phtbl.cpp b/web/yacco2/compiler/grammars/cweb_put_k_into_phtbl.cpp
new file mode 100644
index 0000000000..aab5f34425
--- /dev/null
+++ b/web/yacco2/compiler/grammars/cweb_put_k_into_phtbl.cpp
@@ -0,0 +1,161 @@
+/*
+ File: cweb_put_k_into_phtbl.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "cweb_put_k_into_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_cweb_put_k_into_ph;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Ccweb_put_k_into_ph[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ccweb_put_k_into_ph;
+extern yacco2::State S2_Ccweb_put_k_into_ph;
+extern yacco2::State S3_Ccweb_put_k_into_ph;
+extern yacco2::State S4_Ccweb_put_k_into_ph;
+extern yacco2::State S5_Ccweb_put_k_into_ph;
+extern yacco2::State S6_Ccweb_put_k_into_ph;
+extern yacco2::State S7_Ccweb_put_k_into_ph;
+extern yacco2::State S8_Ccweb_put_k_into_ph;
+extern yacco2::State S9_Ccweb_put_k_into_ph;
+struct S1std_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S1std_Ccweb_put_k_into_ph S1st_Ccweb_put_k_into_ph = {
+ 9
+ ,
+ {// start of table
+ {328,(State*)&S2_Ccweb_put_k_into_ph} // shift sym: T_fsm_phrase
+ ,{329,(State*)&S3_Ccweb_put_k_into_ph} // shift sym: T_parallel_parser_phrase
+ ,{330,(State*)&S4_Ccweb_put_k_into_ph} // shift sym: T_enum_phrase
+ ,{334,(State*)&S5_Ccweb_put_k_into_ph} // shift sym: T_terminals_phrase
+ ,{335,(State*)&S6_Ccweb_put_k_into_ph} // shift sym: T_error_symbols_phrase
+ ,{336,(State*)&S7_Ccweb_put_k_into_ph} // shift sym: T_lr1_k_phrase
+ ,{337,(State*)&S8_Ccweb_put_k_into_ph} // shift sym: T_rc_phrase
+ ,{341,(State*)&S9_Ccweb_put_k_into_ph} // shift sym: T_rules_phrase
+ ,{569,(State*)&S1_Ccweb_put_k_into_ph} // accept sym: Rcweb_put_k_into_phrase
+ }// end of shift table
+};
+yacco2::State S1_Ccweb_put_k_into_ph = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ccweb_put_k_into_ph,0,0,0,0};
+struct S2rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ccweb_put_k_into_ph S2rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs1_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Ccweb_put_k_into_ph = //State's vectored into symbol: "fsm-phrase"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ccweb_put_k_into_ph,0,0,0};
+struct S3rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ccweb_put_k_into_ph S3rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs2_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S3_Ccweb_put_k_into_ph = //State's vectored into symbol: "parallel-parser-phrase"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ccweb_put_k_into_ph,0,0,0};
+struct S4rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ccweb_put_k_into_ph S4rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs8_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Ccweb_put_k_into_ph = //State's vectored into symbol: "T-enum-phrase"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ccweb_put_k_into_ph,0,0,0};
+struct S5rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ccweb_put_k_into_ph S5rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs3_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Ccweb_put_k_into_ph = //State's vectored into symbol: "terminals-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ccweb_put_k_into_ph,0,0,0};
+struct S6rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ccweb_put_k_into_ph S6rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs4_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Ccweb_put_k_into_ph = //State's vectored into symbol: "error-symbols-phrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ccweb_put_k_into_ph,0,0,0};
+struct S7rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ccweb_put_k_into_ph S7rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs6_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S7_Ccweb_put_k_into_ph = //State's vectored into symbol: "lr1-k-phrase"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ccweb_put_k_into_ph,0,0,0};
+struct S8rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ccweb_put_k_into_ph S8rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs5_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S8_Ccweb_put_k_into_ph = //State's vectored into symbol: "rc-phrase"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ccweb_put_k_into_ph,0,0,0};
+struct S9rtd_Ccweb_put_k_into_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ccweb_put_k_into_ph S9rt_Ccweb_put_k_into_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ccweb_put_k_into_ph,Ccweb_put_k_into_ph::rhs7_Rcweb_put_k_into_phrase_}
+ }// end of reduce table
+};
+yacco2::State S9_Ccweb_put_k_into_ph = //State's vectored into symbol: "rules-phrase"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ccweb_put_k_into_ph,0,0,0};
diff --git a/web/yacco2/compiler/grammars/dbl_colon.cpp b/web/yacco2/compiler/grammars/dbl_colon.cpp
new file mode 100644
index 0000000000..3d94625dbe
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colon.cpp
@@ -0,0 +1,65 @@
+/*
+ File: dbl_colon.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "dbl_colon.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dbl_colon;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Cdbl_colon::
+ Cdbl_colon()
+ :yacco2::CAbs_fsm
+ ("dbl_colon.lex"
+ ,"1.0"
+ ,"8 Jun 2004"
+ ,false
+ ,"This one's for the thread's name :: lexer."
+ ,"Fri Jan 30 18:55:09 2015 "
+ ,S1_Cdbl_colon){
+
+ }
+
+Cdbl_colon::~Cdbl_colon(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cdbl_colon::failed(){
+ return false;
+ }
+ void Cdbl_colon::op(){
+}
+int Cdbl_colon::rhs_to_rules_mapping_[2] = {
+ -1
+ ,0 // subrule 1 for rule 1
+};
+Rdbl_colon::Rdbl_colon(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdbl_colon",0,Cdbl_colon::R_Rdbl_colon_,P,false,false){
+}
+
+void Rdbl_colon::op(){
+ sstrace_rulesss
+
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+
+}
+void Rdbl_colon::sr1(){
+
+ rtn_sym_ = new T_2colon;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/dbl_colon.fsc b/web/yacco2/compiler/grammars/dbl_colon.fsc
new file mode 100644
index 0000000000..e127a02863
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colon.fsc
@@ -0,0 +1,20 @@
+/*
+ File: dbl_colon.fsc
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+transitive n
+grammar-name "dbl_colon"
+name-space "NS_dbl_colon"
+thread-name "TH_dbl_colon"
+monolithic n
+file-name "dbl_colon.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_colon
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"This one's for the thread's name :: lexer."
diff --git a/web/yacco2/compiler/grammars/dbl_colon.h b/web/yacco2/compiler/grammars/dbl_colon.h
new file mode 100644
index 0000000000..fee1df020b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colon.h
@@ -0,0 +1,60 @@
+/*
+ File: dbl_colon.h
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#ifndef __dbl_colon_h__
+#define __dbl_colon_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_dbl_colon;
+
+extern yacco2::State S1_Cdbl_colon;
+namespace NS_dbl_colon {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_dbl_colon(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_dbl_colon(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Cdbl_colon: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rdbl_colon_ = 569//start_of_rule_list + 0
+ ,rhs1_Rdbl_colon_ = 1
+ };
+ //no of la sets = 1
+ //no of states = 3
+ Cdbl_colon();
+ ~Cdbl_colon();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[2];
+ };
+struct Rdbl_colon;
+struct Rdbl_colon:public yacco2::CAbs_lr1_sym {
+ Rdbl_colon(yacco2::Parser* P);
+ void op();
+
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/dbl_colon.lex b/web/yacco2/compiler/grammars/dbl_colon.lex
new file mode 100644
index 0000000000..7d48013e9a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colon.lex
@@ -0,0 +1,62 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: dbl_colon.lex
+Dates: 23 Mar 2004
+Purpose: part of a C++ thread's name
+ NS_xxx::TH_xxx
+Output: "::"
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |dbl_colon| grammar.\fbreak
+Recognizes the double colon sequence in
+the subrule's thread call.
+Why does it exist?
+Cuz of my distinction between regular grammar expressions
+and the thread calling type.
+So this is a word that is outside of identifier thread
+jurisdiction. i did generalize keywords a long time ago
+but refined it thru development.
+@/
+fsm
+(fsm-id "dbl_colon.lex"
+,fsm-filename dbl_colon
+,fsm-namespace NS_dbl_colon
+,fsm-class Cdbl_colon
+,fsm-version "1.0",fsm-date "8 Jun 2004",fsm-debug "false"
+,fsm-comments "This one's for the thread's name :: lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_dbl_colon
+ ***
+ parallel-la-boundary
+ eolr - ":"
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rdbl_colon (
+ lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+ ***
+ op
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+ ***
+ }
+){
+ -> ":" ":" {
+ op
+ rtn_sym_ = new T_2colon;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/dbl_colonsym.cpp b/web/yacco2/compiler/grammars/dbl_colonsym.cpp
new file mode 100644
index 0000000000..e9601c1634
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colonsym.cpp
@@ -0,0 +1,64 @@
+/*
+ File: dbl_colonsym.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "dbl_colon.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dbl_colon;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_dbl_colon::TH_dbl_colon(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_dbl_colon;
+ NS_dbl_colon::Cdbl_colon Cdbl_colon_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cdbl_colon_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_dbl_colon::PROC_TH_dbl_colon(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_dbl_colon";
+ static bool one_time(false);
+ static NS_dbl_colon::Cdbl_colon* NS_dbl_colon_Cdbl_colon_(0);// parallel-parser's fsm table
+ static Parser* NS_dbl_colon_Cdbl_colon_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_dbl_colon_Cdbl_colon_ = new NS_dbl_colon::Cdbl_colon();// parallel-parser's fsm table
+ NS_dbl_colon_Cdbl_colon_parser = new Parser(*NS_dbl_colon_Cdbl_colon_,Caller_pp);
+ }
+ proc_parser = NS_dbl_colon_Cdbl_colon_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cdbl_colon::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rdbl_colon_:{
+ Rdbl_colon* sym;
+ if(re->rule_ == 0){
+ sym = new Rdbl_colon(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdbl_colon*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/dbl_colontbl.cpp b/web/yacco2/compiler/grammars/dbl_colontbl.cpp
new file mode 100644
index 0000000000..0b5d1a08a5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/dbl_colontbl.cpp
@@ -0,0 +1,695 @@
+/*
+ File: dbl_colontbl.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "dbl_colon.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dbl_colon;// grammar's ns
+// first set terminals
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// LR1_eog
+yacco2::UCHAR LA1_Cdbl_colon[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,251
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Cdbl_colon;
+extern yacco2::State S2_Cdbl_colon;
+extern yacco2::State S3_Cdbl_colon;
+struct S1std_Cdbl_colon{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cdbl_colon S1st_Cdbl_colon = {
+ 2
+ ,
+ {// start of table
+ {66,(State*)&S2_Cdbl_colon} // shift sym: raw_colon
+ ,{569,(State*)&S1_Cdbl_colon} // accept sym: Rdbl_colon
+ }// end of shift table
+};
+yacco2::State S1_Cdbl_colon = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cdbl_colon,0,0,0,0};
+struct S2std_Cdbl_colon{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cdbl_colon S2st_Cdbl_colon = {
+ 1
+ ,
+ {// start of table
+ {66,(State*)&S3_Cdbl_colon} // shift sym: raw_colon
+ }// end of shift table
+};
+yacco2::State S2_Cdbl_colon = //State's vectored into symbol: ":"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cdbl_colon,0,0,0,0};
+struct S3rtd_Cdbl_colon{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cdbl_colon S3rt_Cdbl_colon = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdbl_colon,Cdbl_colon::rhs1_Rdbl_colon_}
+ }// end of reduce table
+};
+yacco2::State S3_Cdbl_colon = //State's vectored into symbol: ":"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cdbl_colon,0,0,0};
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabet.cpp b/web/yacco2/compiler/grammars/enumerate_T_alphabet.cpp
new file mode 100644
index 0000000000..e1cf89d517
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabet.cpp
@@ -0,0 +1,241 @@
+/*
+ File: enumerate_T_alphabet.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_T_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_T_alphabet;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 5;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+}
+ Cenumerate_T_alphabet::
+ Cenumerate_T_alphabet()
+ :yacco2::CAbs_fsm
+ ("enumerate_T_alphabet.lex"
+ ,"1.0"
+ ,"9 Aug. 2005"
+ ,false
+ ,"Enumerate grammar's terminal symbols: \na 0 and a 1, ... the oracle for parsing lookups."
+ ,"Fri Jan 30 18:55:09 2015 "
+ ,S1_Cenumerate_T_alphabet){
+
+ START_OF_RULES_ENUM = 0;
+ enum_phrase_ = 0;
+
+ }
+
+Cenumerate_T_alphabet::~Cenumerate_T_alphabet(){
+
+ for(int x = 0;x < 5;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cenumerate_T_alphabet::failed(){
+ return false;
+ }
+ void Cenumerate_T_alphabet::op(){
+ START_OF_RULES_ENUM = 0;
+ CAbs_lr1_sym* gps = O2_FSM_PHASE;
+ CAbs_lr1_sym* esym(0);
+ CAbs_lr1_sym* ph = O2_T_ENUM_PHASE;
+
+ if(ph == 0){
+ esym = new ERR_no_T_enum_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_ERROR_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_errors_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_RC_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_rc_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_LRK_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_lrk_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_T_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_terminals_phrase;
+ goto error_fnd;
+ }
+ all_phases_ok:
+ enum_phrase_ = O2_T_ENUM_PHASE;
+ return;
+ error_fnd:
+ parser__->add_token_to_error_queue(*esym);
+ if(gps != 0) // anchor error against previously good phase
+ esym->set_rc(*gps,__FILE__,__LINE__);
+ parser__->set_abort_parse(true);
+ return;
+
+}
+int Cenumerate_T_alphabet::rhs_to_rules_mapping_[6] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,3 // subrule 4 for rule 4
+ ,4 // subrule 5 for rule 5
+};
+Renumerate_T_alphabet::Renumerate_T_alphabet(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Renumerate_T_alphabet",0,Cenumerate_T_alphabet::R_Renumerate_T_alphabet_,P,false,false){
+}
+
+void Renumerate_T_alphabet::sr1(){
+
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->total_enumerate(START_OF_RULES_ENUM);
+ lrclog << "Total symbols: " << START_OF_RULES_ENUM << std::endl;
+
+}
+
+Renum_lrk::Renum_lrk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Renum_lrk",0,Cenumerate_T_alphabet::R_Renum_lrk_,P,false,false){
+}
+
+void Renum_lrk::sr1(){
+
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_lrk_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_lrk_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_lrk_enumerate
+ (fsm->enum_phrase_->stop_lrk_enumerate()
+ - fsm->enum_phrase_->start_lrk_enumerate() + 1);
+ lrclog << "Total lrk symbols: "
+ << fsm->enum_phrase_->total_lrk_enumerate() << std::endl;
+ lrclog << "Start lrk symbol: "
+ << fsm->enum_phrase_->start_lrk_enumerate()
+ << " Stop lrk symbol: "
+ << fsm->enum_phrase_->stop_lrk_enumerate() << std::endl;
+
+}
+
+Renum_rc::Renum_rc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Renum_rc",0,Cenumerate_T_alphabet::R_Renum_rc_,P,false,false){
+}
+
+void Renum_rc::sr1(){
+
+ Cenumerate_T_alphabet* fsm =
+ (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_rc_phrase* lr_ph = O2_RC_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_rc_enumerate
+ (START_OF_RULES_ENUM);i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_rc_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_rc_enumerate
+ (fsm->enum_phrase_->stop_rc_enumerate()
+ - fsm->enum_phrase_->start_rc_enumerate() + 1);
+ lrclog << "Total rc symbols: "
+ << fsm->enum_phrase_->total_rc_enumerate() << std::endl;
+ lrclog << "Start rc symbol: "
+ << fsm->enum_phrase_->start_rc_enumerate()
+ << " Stop rc symbol: "
+ << fsm->enum_phrase_->stop_rc_enumerate() << std::endl;
+
+}
+
+Renum_T::Renum_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Renum_T",0,Cenumerate_T_alphabet::R_Renum_T_,P,false,false){
+}
+
+void Renum_T::sr1(){
+
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_terminals_phrase* lr_ph = O2_T_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_T_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_T_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_T_enumerate
+ (fsm->enum_phrase_->stop_T_enumerate()
+ - fsm->enum_phrase_->start_T_enumerate() + 1);
+ lrclog << "Total T symbols: "
+ << fsm->enum_phrase_->total_T_enumerate() << std::endl;
+ lrclog << "Start T symbol: "
+ << fsm->enum_phrase_->start_T_enumerate()
+ << " Stop T symbol: "
+ << fsm->enum_phrase_->stop_T_enumerate() << std::endl;
+
+}
+
+Renum_err::Renum_err(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Renum_err",0,Cenumerate_T_alphabet::R_Renum_err_,P,false,false){
+}
+
+void Renum_err::sr1(){
+
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_error_symbols_phrase* lr_ph = O2_ERROR_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_err_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_err_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_err_enumerate
+ (fsm->enum_phrase_->stop_err_enumerate()
+ - fsm->enum_phrase_->start_err_enumerate() + 1);
+ lrclog << "Total error symbols: "
+ << fsm->enum_phrase_->total_err_enumerate() << std::endl;
+ lrclog << "Start error symbol: "
+ << fsm->enum_phrase_->start_err_enumerate()
+ << " Stop error symbol: "
+ << fsm->enum_phrase_->stop_err_enumerate() << std::endl;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabet.fsc b/web/yacco2/compiler/grammars/enumerate_T_alphabet.fsc
new file mode 100644
index 0000000000..427ab2dd8c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabet.fsc
@@ -0,0 +1,19 @@
+/*
+ File: enumerate_T_alphabet.fsc
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+transitive n
+grammar-name "enumerate_T_alphabet"
+name-space "NS_enumerate_T_alphabet"
+thread-name "Cenumerate_T_alphabet"
+monolithic y
+file-name "enumerate_T_alphabet.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Enumerate grammar's terminal symbols: \na 0 and a 1, ... the oracle for parsing lookups."
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabet.h b/web/yacco2/compiler/grammars/enumerate_T_alphabet.h
new file mode 100644
index 0000000000..ba1bd4aa4c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabet.h
@@ -0,0 +1,93 @@
+/*
+ File: enumerate_T_alphabet.h
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#ifndef __enumerate_T_alphabet_h__
+#define __enumerate_T_alphabet_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cenumerate_T_alphabet;
+namespace NS_enumerate_T_alphabet {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[5];
+};
+class Cenumerate_T_alphabet: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Renumerate_T_alphabet_ = 569//start_of_rule_list + 0
+ ,rhs1_Renumerate_T_alphabet_ = 1
+ ,R_Renum_lrk_ = 570//start_of_rule_list + 2
+ ,rhs1_Renum_lrk_ = 2
+ ,R_Renum_rc_ = 571//start_of_rule_list + 4
+ ,rhs1_Renum_rc_ = 3
+ ,R_Renum_T_ = 572//start_of_rule_list + 6
+ ,rhs1_Renum_T_ = 4
+ ,R_Renum_err_ = 573//start_of_rule_list + 8
+ ,rhs1_Renum_err_ = 5
+ };
+ //no of la sets = 1
+ //no of states = 5
+ Cenumerate_T_alphabet();
+ ~Cenumerate_T_alphabet();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[6];
+
+ public:
+ NS_yacco2_terminals::T_enum_phrase* enum_phrase_;
+
+ };
+struct Renumerate_T_alphabet;
+struct Renum_lrk;
+struct Renum_rc;
+struct Renum_T;
+struct Renum_err;
+struct Renumerate_T_alphabet:public yacco2::CAbs_lr1_sym {
+ Renumerate_T_alphabet(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Renum_lrk:public yacco2::CAbs_lr1_sym {
+ Renum_lrk(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Renum_rc:public yacco2::CAbs_lr1_sym {
+ Renum_rc(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Renum_T:public yacco2::CAbs_lr1_sym {
+ Renum_T(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Renum_err:public yacco2::CAbs_lr1_sym {
+ Renum_err(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabet.lex b/web/yacco2/compiler/grammars/enumerate_T_alphabet.lex
new file mode 100644
index 0000000000..128ede118b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabet.lex
@@ -0,0 +1,263 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: enumerate_T_alphabet.lex
+Dates: 9 Aug. 2005
+Purpose: enumerate terminal symbols.
+How: Each terminal phase contains its mapped symbols and create order list.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |enumerate_T_alphabet| grammar.\fbreak
+Enumerate the Terminal symbols starting at
+zero and going positively outward.
+When the enumeration is finished,
+the global |START_OF_RULES_ENUM| becomes the starting enumerate of the
+grammar's rules.
+This is the cut off boundary for shift / reduce LR1 compatibilty.
+Why?
+As a state is composed of shift vectors using their
+enumerates, only terminals up to but not including
+the start rule's enumerate are needed.
+The exception to this is the ``eosubrule'' terminal that
+represents the reducing subrule situation is not included in the shift set.
+So it is easy to iterate thru the state's vectors
+in building up the shift set for the lr1 compatibility check: as the
+state's vector map is sorted by enumerate value, just
+stop when the current vector's enumerate is part of
+the rule's domain.
+
+In this grammar, each rule is a logic sequencer fetching
+its phase's batch of symbols
+for the baptism.
+This grammar demonstrates zero token consumption.\fbreak
+\fbreak
+How:\fbreak
+Each terminal phase contains its mapped symbols and create order list.
+Global Phase table:\fbreak
+|O2_xxx| are the individual phases.\fbreak
+Grammar Phases:\fbreak
+\ptindent{0 - O2\_FSM\_PHASE : T\_fsm\_phrase}
+\ptindent{1 - O2\_PP\_PHASE : T\_parallel\_parser\_phrase}
+\ptindent{2 - O2\_T\_ENUM\_PHASE : T\_enum\_phrase}
+\ptindent{3 - O2\_ERROR\_PHASE : T\_error\_symbols\_phrase}
+\ptindent{4 - O2\_RC\_PHASE : T\_rc\_phrase}
+\ptindent{5 - O2\_LRK\_PHASE : T\_lr1\_k\_phrase}
+\ptindent{6 - O2\_T\_PHASE : T\_terminals\_phrase}
+\ptindent{7 - O2\_RULES\_PHASE : T\_rules\_phrase}
+Within each rule is the symbol iteration.\fbreak
+The enumeration starts with the |lr k|
+symbols followed by
+raw characters, Terminals, and Errors.
+Why is zero the start point?
+Glad u asked as i use modulo 32 on the terminal enumerate
+to arrive at its set number and bit position within the set.
+See set discussion in \O2's library documentation as to the
+reasons.\fbreak
+Caveat:\fbreak
+As i used a keyword descent trigger parse phases, i must
+check here if all my phrases are present before the enumeration
+can take place.
+Why here? This grammar frontends the triggered rule phase parse
+due to its related grammars using symbol enumeration as edit checks.
+So dot the Ts and Is before the ruling!
+@/
+fsm
+(fsm-id "enumerate_T_alphabet.lex"
+,fsm-filename enumerate_T_alphabet
+,fsm-namespace NS_enumerate_T_alphabet
+,fsm-class Cenumerate_T_alphabet{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ NS_yacco2_terminals::T_enum_phrase* enum_phrase_;
+ ***
+ op
+ START_OF_RULES_ENUM = 0;
+ CAbs_lr1_sym* gps = O2_FSM_PHASE;
+ CAbs_lr1_sym* esym(0);
+ CAbs_lr1_sym* ph = O2_T_ENUM_PHASE;
+
+ if(ph == 0){
+ esym = new ERR_no_T_enum_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_ERROR_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_errors_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_RC_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_rc_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_LRK_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_lrk_phrase;
+ goto error_fnd;
+ }
+ gps = ph;
+ ph = O2_T_PHASE;
+ if(ph == 0){
+ esym = new ERR_no_terminals_phrase;
+ goto error_fnd;
+ }
+ all_phases_ok:
+ enum_phrase_ = O2_T_ENUM_PHASE;
+ return;
+ error_fnd:
+ parser__->add_token_to_error_queue(*esym);
+ if(gps != 0) // anchor error against previously good phase
+ esym->set_rc(*gps,__FILE__,__LINE__);
+ parser__->set_abort_parse(true);
+ return;
+ ***
+ constructor
+ START_OF_RULES_ENUM = 0;
+ enum_phrase_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "9 Aug. 2005",fsm-debug "false"
+,fsm-comments "Enumerate grammar's terminal symbols: \na 0 and a 1, ... the oracle for parsing lookups.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Renumerate_T_alphabet (){
+ -> Renum_lrk Renum_rc Renum_T Renum_err{
+/@
+ As START\_OF\_RULES\_ENUM is the next enumerate value to use
+ and the enumeration starts from 0,
+ it is more efficient to use this value instead of
+ suming all the totals per terminal type: lrk, rc, err, T
+ now if i was paranoid, maybe the comparison of the calculated against
+ the traversal value would be asserted
+@/
+ op
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ fsm->enum_phrase_->total_enumerate(START_OF_RULES_ENUM);
+ lrclog << "Total symbols: " << START_OF_RULES_ENUM << std::endl;
+ ***
+ }
+}
+
+Renum_lrk (){
+ -> {
+ op
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_lrk_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_lrk_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_lrk_enumerate
+ (fsm->enum_phrase_->stop_lrk_enumerate()
+ - fsm->enum_phrase_->start_lrk_enumerate() + 1);
+ lrclog << "Total lrk symbols: "
+ << fsm->enum_phrase_->total_lrk_enumerate() << std::endl;
+ lrclog << "Start lrk symbol: "
+ << fsm->enum_phrase_->start_lrk_enumerate()
+ << " Stop lrk symbol: "
+ << fsm->enum_phrase_->stop_lrk_enumerate() << std::endl;
+ ***
+ }
+}
+Renum_rc (){
+ -> {
+ op
+ Cenumerate_T_alphabet* fsm =
+ (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_rc_phrase* lr_ph = O2_RC_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_rc_enumerate
+ (START_OF_RULES_ENUM);i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_rc_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_rc_enumerate
+ (fsm->enum_phrase_->stop_rc_enumerate()
+ - fsm->enum_phrase_->start_rc_enumerate() + 1);
+ lrclog << "Total rc symbols: "
+ << fsm->enum_phrase_->total_rc_enumerate() << std::endl;
+ lrclog << "Start rc symbol: "
+ << fsm->enum_phrase_->start_rc_enumerate()
+ << " Stop rc symbol: "
+ << fsm->enum_phrase_->stop_rc_enumerate() << std::endl;
+ ***
+ }
+}
+Renum_T (){
+ -> {
+ op
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_terminals_phrase* lr_ph = O2_T_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_T_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_T_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_T_enumerate
+ (fsm->enum_phrase_->stop_T_enumerate()
+ - fsm->enum_phrase_->start_T_enumerate() + 1);
+ lrclog << "Total T symbols: "
+ << fsm->enum_phrase_->total_T_enumerate() << std::endl;
+ lrclog << "Start T symbol: "
+ << fsm->enum_phrase_->start_T_enumerate()
+ << " Stop T symbol: "
+ << fsm->enum_phrase_->stop_T_enumerate() << std::endl;
+ ***
+ }
+}
+Renum_err (){
+ -> {
+ op
+ Cenumerate_T_alphabet* fsm = (Cenumerate_T_alphabet*)rule_info__.parser__->fsm_tbl__;
+ T_error_symbols_phrase* lr_ph = O2_ERROR_PHASE;
+
+ std::vector<T_terminal_def*>* order = lr_ph->crt_order();
+ std::vector<T_terminal_def*>::iterator i = order->begin();
+ std::vector<T_terminal_def*>::iterator ie = order->end();
+ for(fsm->enum_phrase_->start_err_enumerate(START_OF_RULES_ENUM);
+ i!=ie;++i,++START_OF_RULES_ENUM){
+ T_terminal_def* tdef = *i;
+ tdef->enum_id(START_OF_RULES_ENUM);
+ }
+ fsm->enum_phrase_->stop_err_enumerate(START_OF_RULES_ENUM-1);
+ fsm->enum_phrase_->
+ total_err_enumerate
+ (fsm->enum_phrase_->stop_err_enumerate()
+ - fsm->enum_phrase_->start_err_enumerate() + 1);
+ lrclog << "Total error symbols: "
+ << fsm->enum_phrase_->total_err_enumerate() << std::endl;
+ lrclog << "Start error symbol: "
+ << fsm->enum_phrase_->start_err_enumerate()
+ << " Stop error symbol: "
+ << fsm->enum_phrase_->stop_err_enumerate() << std::endl;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabetsym.cpp b/web/yacco2/compiler/grammars/enumerate_T_alphabetsym.cpp
new file mode 100644
index 0000000000..8ddef20f45
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabetsym.cpp
@@ -0,0 +1,102 @@
+/*
+ File: enumerate_T_alphabetsym.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_T_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_T_alphabet;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cenumerate_T_alphabet::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Renumerate_T_alphabet_:{
+ Renumerate_T_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new Renumerate_T_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Renumerate_T_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Renum_lrk_:{
+ Renum_lrk* sym;
+ if(re->rule_ == 0){
+ sym = new Renum_lrk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Renum_lrk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Renum_rc_:{
+ Renum_rc* sym;
+ if(re->rule_ == 0){
+ sym = new Renum_rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Renum_rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Renum_T_:{
+ Renum_T* sym;
+ if(re->rule_ == 0){
+ sym = new Renum_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Renum_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Renum_err_:{
+ Renum_err* sym;
+ if(re->rule_ == 0){
+ sym = new Renum_err(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Renum_err*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/enumerate_T_alphabettbl.cpp b/web/yacco2/compiler/grammars/enumerate_T_alphabettbl.cpp
new file mode 100644
index 0000000000..7b471371f5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_T_alphabettbl.cpp
@@ -0,0 +1,138 @@
+/*
+ File: enumerate_T_alphabettbl.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_T_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_T_alphabet;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cenumerate_T_alphabet[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cenumerate_T_alphabet;
+extern yacco2::State S2_Cenumerate_T_alphabet;
+extern yacco2::State S3_Cenumerate_T_alphabet;
+extern yacco2::State S4_Cenumerate_T_alphabet;
+extern yacco2::State S5_Cenumerate_T_alphabet;
+struct S1std_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cenumerate_T_alphabet S1st_Cenumerate_T_alphabet = {
+ 2
+ ,
+ {// start of table
+ {569,(State*)&S1_Cenumerate_T_alphabet} // accept sym: Renumerate_T_alphabet
+ ,{570,(State*)&S2_Cenumerate_T_alphabet} // shift sym: Renum_lrk
+ }// end of shift table
+};
+struct S1rtd_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cenumerate_T_alphabet S1rt_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_T_alphabet,Cenumerate_T_alphabet::rhs1_Renum_lrk_}
+ }// end of reduce table
+};
+yacco2::State S1_Cenumerate_T_alphabet = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cenumerate_T_alphabet,(Reduce_tbl*)&S1rt_Cenumerate_T_alphabet,0,0,0};
+struct S2std_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cenumerate_T_alphabet S2st_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {571,(State*)&S3_Cenumerate_T_alphabet} // shift sym: Renum_rc
+ }// end of shift table
+};
+struct S2rtd_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cenumerate_T_alphabet S2rt_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_T_alphabet,Cenumerate_T_alphabet::rhs1_Renum_rc_}
+ }// end of reduce table
+};
+yacco2::State S2_Cenumerate_T_alphabet = //State's vectored into symbol: "Renum_lrk"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cenumerate_T_alphabet,(Reduce_tbl*)&S2rt_Cenumerate_T_alphabet,0,0,0};
+struct S3std_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cenumerate_T_alphabet S3st_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {572,(State*)&S4_Cenumerate_T_alphabet} // shift sym: Renum_T
+ }// end of shift table
+};
+struct S3rtd_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cenumerate_T_alphabet S3rt_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_T_alphabet,Cenumerate_T_alphabet::rhs1_Renum_T_}
+ }// end of reduce table
+};
+yacco2::State S3_Cenumerate_T_alphabet = //State's vectored into symbol: "Renum_rc"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cenumerate_T_alphabet,(Reduce_tbl*)&S3rt_Cenumerate_T_alphabet,0,0,0};
+struct S4std_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Cenumerate_T_alphabet S4st_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {573,(State*)&S5_Cenumerate_T_alphabet} // shift sym: Renum_err
+ }// end of shift table
+};
+struct S4rtd_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cenumerate_T_alphabet S4rt_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_T_alphabet,Cenumerate_T_alphabet::rhs1_Renum_err_}
+ }// end of reduce table
+};
+yacco2::State S4_Cenumerate_T_alphabet = //State's vectored into symbol: "Renum_T"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cenumerate_T_alphabet,(Reduce_tbl*)&S4rt_Cenumerate_T_alphabet,0,0,0};
+struct S5rtd_Cenumerate_T_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cenumerate_T_alphabet S5rt_Cenumerate_T_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_T_alphabet,Cenumerate_T_alphabet::rhs1_Renumerate_T_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S5_Cenumerate_T_alphabet = //State's vectored into symbol: "Renum_err"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cenumerate_T_alphabet,0,0,0};
diff --git a/web/yacco2/compiler/grammars/enumerate_grammar.cpp b/web/yacco2/compiler/grammars/enumerate_grammar.cpp
new file mode 100644
index 0000000000..8ad5491278
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammar.cpp
@@ -0,0 +1,255 @@
+/*
+ File: enumerate_grammar.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_grammar.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_grammar;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 9;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+}
+ Cenumerate_grammar::
+ Cenumerate_grammar()
+ :yacco2::CAbs_fsm
+ ("enumerate_grammar.lex"
+ ,"1.0"
+ ,"26 sept. 2005"
+ ,false
+ ,"Dump aid: Enumerate grammar's components"
+ ,"Fri Jan 30 18:55:09 2015 "
+ ,S1_Cenumerate_grammar){
+
+ }
+
+Cenumerate_grammar::~Cenumerate_grammar(){
+
+ for(int x = 0;x < 9;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cenumerate_grammar::failed(){
+ return false;
+ }
+ void Cenumerate_grammar::op(){
+ rule_no_ = 0;
+ subrule_no_ = 0;
+ elem_no_ = 0;
+ enum_subrule_no_ = 0;
+
+}
+int Cenumerate_grammar::rhs_to_rules_mapping_[17] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,6 // subrule 9 for rule 7
+ ,7 // subrule 10 for rule 8
+ ,7 // subrule 11 for rule 8
+ ,8 // subrule 12 for rule 9
+ ,8 // subrule 13 for rule 9
+ ,8 // subrule 14 for rule 9
+ ,8 // subrule 15 for rule 9
+ ,8 // subrule 16 for rule 9
+};
+Rfirst_set_rules::Rfirst_set_rules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfirst_set_rules",0,Cenumerate_grammar::R_Rfirst_set_rules_,P,false,false){
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cenumerate_grammar::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Cenumerate_grammar::R_Rrule_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cenumerate_grammar::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_no_ = 0;
+ fsm->elem_no_ = 0;
+ ++fsm->rule_no_;
+ char buf[128];
+ KCHARP rule_no = "%i";
+ sprintf(buf,rule_no,fsm->rule_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Cenumerate_grammar::R_Rsubrules_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Cenumerate_grammar::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Cenumerate_grammar::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ T_subrule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ ++fsm->enum_subrule_no_;
+ sf->p1__->its_grammar_s_pos(fsm->enum_subrule_no_);
+ fsm->elem_no_ = 0;
+ char buf[128];
+ KCHARP subrule_no = "%i.%i";
+ sprintf(buf,subrule_no,fsm->rule_no_,fsm->subrule_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+
+}
+
+Relements::Relements(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relements",0,Cenumerate_grammar::R_Relements_,P,false,false){
+}
+
+Relement::Relement(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relement",0,Cenumerate_grammar::R_Relement_,P,false,false){
+}
+
+void Relement::sr1(){
+ struct SF{
+ refered_rule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+
+}
+
+void Relement::sr2(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+
+}
+
+void Relement::sr3(){
+ struct SF{
+ T_eosubrule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+
+}
+
+void Relement::sr4(){
+ struct SF{
+ T_called_thread_eosubrule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+
+}
+
+void Relement::sr5(){
+ struct SF{
+ T_null_call_thread_eosubrule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/enumerate_grammar.fsc b/web/yacco2/compiler/grammars/enumerate_grammar.fsc
new file mode 100644
index 0000000000..f624b371ca
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammar.fsc
@@ -0,0 +1,20 @@
+/*
+ File: enumerate_grammar.fsc
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+transitive n
+grammar-name "enumerate_grammar"
+name-space "NS_enumerate_grammar"
+thread-name "Cenumerate_grammar"
+monolithic y
+file-name "enumerate_grammar.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Dump aid: Enumerate grammar's components"
diff --git a/web/yacco2/compiler/grammars/enumerate_grammar.h b/web/yacco2/compiler/grammars/enumerate_grammar.h
new file mode 100644
index 0000000000..d5860f148a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammar.h
@@ -0,0 +1,137 @@
+/*
+ File: enumerate_grammar.h
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#ifndef __enumerate_grammar_h__
+#define __enumerate_grammar_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cenumerate_grammar;
+namespace NS_enumerate_grammar {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[9];
+};
+class Cenumerate_grammar: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfirst_set_rules_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfirst_set_rules_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ ,R_Rsubrules_ = 573//start_of_rule_list + 8
+ ,rhs1_Rsubrules_ = 6
+ ,rhs2_Rsubrules_ = 7
+ ,R_Rsubrule_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsubrule_ = 8
+ ,R_Rsubrule_def_ = 575//start_of_rule_list + 12
+ ,rhs1_Rsubrule_def_ = 9
+ ,R_Relements_ = 576//start_of_rule_list + 14
+ ,rhs1_Relements_ = 10
+ ,rhs2_Relements_ = 11
+ ,R_Relement_ = 577//start_of_rule_list + 16
+ ,rhs1_Relement_ = 12
+ ,rhs2_Relement_ = 13
+ ,rhs3_Relement_ = 14
+ ,rhs4_Relement_ = 15
+ ,rhs5_Relement_ = 16
+ };
+ //no of la sets = 6
+ //no of states = 20
+ Cenumerate_grammar();
+ ~Cenumerate_grammar();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[17];
+
+ public:
+ int rule_no_;
+ int subrule_no_;
+ int enum_subrule_no_;
+ int elem_no_;
+
+ };
+struct Rfirst_set_rules;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rsubrules;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Relements;
+struct Relement;
+struct Rfirst_set_rules:public yacco2::CAbs_lr1_sym {
+ Rfirst_set_rules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Relements:public yacco2::CAbs_lr1_sym {
+ Relements(yacco2::Parser* P);
+ public:
+};
+
+struct Relement:public yacco2::CAbs_lr1_sym {
+ Relement(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/enumerate_grammar.lex b/web/yacco2/compiler/grammars/enumerate_grammar.lex
new file mode 100644
index 0000000000..7ea0be8ee0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammar.lex
@@ -0,0 +1,164 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: enumerate_grammar.lex
+Dates: 23 Sept. 2005
+Purpose: determine first set per rule.
+How: Read the grammar's components in prefix order filtering out:
+ excluding ``rules-phrase''
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |enumerate_grammar| grammar.\fbreak
+Enumerate a grammar's components.
+Each component: ``rule-def'', ''subrule-def'', ``refered-rule'', ``refered-T''
+and ``eosubrule'' contains a string that receives its enumerate literal.
+This reference will be used throughout the outputed document giving
+a GPS to the reader.
+@/
+
+fsm
+(fsm-id "enumerate_grammar.lex"
+,fsm-filename enumerate_grammar
+,fsm-namespace NS_enumerate_grammar
+,fsm-class Cenumerate_grammar{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ int rule_no_;
+ int subrule_no_;
+ int enum_subrule_no_;
+ int elem_no_;
+ ***
+ op
+ rule_no_ = 0;
+ subrule_no_ = 0;
+ elem_no_ = 0;
+ enum_subrule_no_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "26 sept. 2005",fsm-debug "false"
+,fsm-comments "Dump aid: Enumerate grammar's components")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rfirst_set_rules
+(){
+ -> Rrules eog
+}
+
+Rrules (){
+ -> Rrule
+ -> Rrules Rrule
+}
+
+Rrule (){
+ -> Rrule_def Rsubrules
+}
+
+Rrule_def (){
+ -> "rule-def" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_no_ = 0;
+ fsm->elem_no_ = 0;
+ ++fsm->rule_no_;
+ char buf[128];
+ KCHARP rule_no = "%i";
+ sprintf(buf,rule_no,fsm->rule_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ ***
+ }
+}
+Rsubrules (){
+ -> Rsubrule
+ -> Rsubrules Rsubrule
+}
+
+Rsubrule (){
+ -> Rsubrule_def Relements
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ ++fsm->enum_subrule_no_;
+ sf->p1__->its_grammar_s_pos(fsm->enum_subrule_no_);
+ fsm->elem_no_ = 0;
+ char buf[128];
+ KCHARP subrule_no = "%i.%i";
+ sprintf(buf,subrule_no,fsm->rule_no_,fsm->subrule_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ ***
+ }
+}
+
+Relements (){
+ -> Relement
+ -> Relements Relement
+}
+Relement (){
+ -> "refered-rule" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+ ***
+ }
+ -> "refered-T" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+ ***
+ }
+ -> "eosubrule" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+ ***
+ }
+ -> "called thread eosubrule" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+ ***
+ }
+ -> "null call thread eosubrule" {
+ op
+ Cenumerate_grammar* fsm = (Cenumerate_grammar*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char buf[128];
+ KCHARP elem_no = "%i.%i.%i";
+ sprintf(buf,elem_no,fsm->rule_no_,fsm->subrule_no_,fsm->elem_no_);
+ sf->p1__->grammar_s_enumerate(buf);
+ sf->p1__->element_pos(fsm->elem_no_);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/enumerate_grammarsym.cpp b/web/yacco2/compiler/grammars/enumerate_grammarsym.cpp
new file mode 100644
index 0000000000..ea98b16447
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammarsym.cpp
@@ -0,0 +1,258 @@
+/*
+ File: enumerate_grammarsym.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_grammar.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_grammar;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cenumerate_grammar::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfirst_set_rules_:{
+ Rfirst_set_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Rfirst_set_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfirst_set_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/enumerate_grammartbl.cpp b/web/yacco2/compiler/grammars/enumerate_grammartbl.cpp
new file mode 100644
index 0000000000..75cb6a19e8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/enumerate_grammartbl.cpp
@@ -0,0 +1,408 @@
+/*
+ File: enumerate_grammartbl.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "enumerate_grammar.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_enumerate_grammar;// grammar's ns
+// first set terminals
+// T_subrule_def
+yacco2::UCHAR LA1_Cenumerate_grammar[] ={
+1
+,42,64
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cenumerate_grammar[] ={
+1
+,0,4
+};
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA3_Cenumerate_grammar[] ={
+2
+,0,2
+,42,16
+};
+// refered_T
+// refered_rule
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+yacco2::UCHAR LA4_Cenumerate_grammar[] ={
+2
+,43,10
+,46,14
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+yacco2::UCHAR LA5_Cenumerate_grammar[] ={
+2
+,0,2
+,42,80
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+// refered_T
+// refered_rule
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+yacco2::UCHAR LA6_Cenumerate_grammar[] ={
+4
+,0,2
+,42,80
+,43,10
+,46,14
+};
+extern yacco2::State S1_Cenumerate_grammar;
+extern yacco2::State S2_Cenumerate_grammar;
+extern yacco2::State S3_Cenumerate_grammar;
+extern yacco2::State S4_Cenumerate_grammar;
+extern yacco2::State S5_Cenumerate_grammar;
+extern yacco2::State S6_Cenumerate_grammar;
+extern yacco2::State S7_Cenumerate_grammar;
+extern yacco2::State S8_Cenumerate_grammar;
+extern yacco2::State S9_Cenumerate_grammar;
+extern yacco2::State S10_Cenumerate_grammar;
+extern yacco2::State S11_Cenumerate_grammar;
+extern yacco2::State S12_Cenumerate_grammar;
+extern yacco2::State S13_Cenumerate_grammar;
+extern yacco2::State S14_Cenumerate_grammar;
+extern yacco2::State S15_Cenumerate_grammar;
+extern yacco2::State S16_Cenumerate_grammar;
+extern yacco2::State S17_Cenumerate_grammar;
+extern yacco2::State S18_Cenumerate_grammar;
+extern yacco2::State S19_Cenumerate_grammar;
+extern yacco2::State S20_Cenumerate_grammar;
+struct S1std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cenumerate_grammar S1st_Cenumerate_grammar = {
+ 5
+ ,
+ {// start of table
+ {340,(State*)&S2_Cenumerate_grammar} // shift sym: rule_def
+ ,{569,(State*)&S1_Cenumerate_grammar} // accept sym: Rfirst_set_rules
+ ,{570,(State*)&S3_Cenumerate_grammar} // shift sym: Rrules
+ ,{571,(State*)&S20_Cenumerate_grammar} // shift sym: Rrule
+ ,{572,(State*)&S6_Cenumerate_grammar} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cenumerate_grammar = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cenumerate_grammar,0,0,0,0};
+struct S2rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cenumerate_grammar S2rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cenumerate_grammar = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cenumerate_grammar,0,0,0};
+struct S3std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Cenumerate_grammar S3st_Cenumerate_grammar = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S4_Cenumerate_grammar} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Cenumerate_grammar} // shift sym: rule_def
+ ,{571,(State*)&S5_Cenumerate_grammar} // shift sym: Rrule
+ ,{572,(State*)&S6_Cenumerate_grammar} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Cenumerate_grammar = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cenumerate_grammar,0,0,0,0};
+struct S4rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cenumerate_grammar S4rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rfirst_set_rules_}
+ }// end of reduce table
+};
+yacco2::State S4_Cenumerate_grammar = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cenumerate_grammar,0,0,0};
+struct S5rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cenumerate_grammar S5rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cenumerate_grammar,Cenumerate_grammar::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Cenumerate_grammar = //State's vectored into symbol: "Rrule"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cenumerate_grammar,0,0,0};
+struct S6std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S6std_Cenumerate_grammar S6st_Cenumerate_grammar = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S7_Cenumerate_grammar} // shift sym: T_subrule_def
+ ,{573,(State*)&S8_Cenumerate_grammar} // shift sym: Rsubrules
+ ,{574,(State*)&S19_Cenumerate_grammar} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cenumerate_grammar} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S6_Cenumerate_grammar = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cenumerate_grammar,0,0,0,0};
+struct S7rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cenumerate_grammar S7rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S7_Cenumerate_grammar = //State's vectored into symbol: "subrule-def"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cenumerate_grammar,0,0,0};
+struct S8std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Cenumerate_grammar S8st_Cenumerate_grammar = {
+ 3
+ ,
+ {// start of table
+ {342,(State*)&S7_Cenumerate_grammar} // shift sym: T_subrule_def
+ ,{574,(State*)&S9_Cenumerate_grammar} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cenumerate_grammar} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+struct S8rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cenumerate_grammar S8rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S8_Cenumerate_grammar = //State's vectored into symbol: "Rsubrules"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cenumerate_grammar,(Reduce_tbl*)&S8rt_Cenumerate_grammar,0,0,0};
+struct S9rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cenumerate_grammar S9rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cenumerate_grammar,Cenumerate_grammar::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S9_Cenumerate_grammar = //State's vectored into symbol: "Rsubrule"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cenumerate_grammar,0,0,0};
+struct S10std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S10std_Cenumerate_grammar S10st_Cenumerate_grammar = {
+ 7
+ ,
+ {// start of table
+ {345,(State*)&S11_Cenumerate_grammar} // shift sym: refered_T
+ ,{347,(State*)&S12_Cenumerate_grammar} // shift sym: refered_rule
+ ,{369,(State*)&S13_Cenumerate_grammar} // shift sym: T_eosubrule
+ ,{370,(State*)&S14_Cenumerate_grammar} // shift sym: T_called_thread_eosubrule
+ ,{371,(State*)&S15_Cenumerate_grammar} // shift sym: T_null_call_thread_eosubrule
+ ,{576,(State*)&S16_Cenumerate_grammar} // shift sym: Relements
+ ,{577,(State*)&S18_Cenumerate_grammar} // shift sym: Relement
+ }// end of shift table
+};
+yacco2::State S10_Cenumerate_grammar = //State's vectored into symbol: "Rsubrule_def"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cenumerate_grammar,0,0,0,0};
+struct S11rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cenumerate_grammar S11rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs2_Relement_}
+ }// end of reduce table
+};
+yacco2::State S11_Cenumerate_grammar = //State's vectored into symbol: "refered-T"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cenumerate_grammar,0,0,0};
+struct S12rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cenumerate_grammar S12rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs1_Relement_}
+ }// end of reduce table
+};
+yacco2::State S12_Cenumerate_grammar = //State's vectored into symbol: "refered-rule"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cenumerate_grammar,0,0,0};
+struct S13rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cenumerate_grammar S13rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs3_Relement_}
+ }// end of reduce table
+};
+yacco2::State S13_Cenumerate_grammar = //State's vectored into symbol: "eosubrule"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cenumerate_grammar,0,0,0};
+struct S14rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cenumerate_grammar S14rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs4_Relement_}
+ }// end of reduce table
+};
+yacco2::State S14_Cenumerate_grammar = //State's vectored into symbol: "called thread eosubrule"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cenumerate_grammar,0,0,0};
+struct S15rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cenumerate_grammar S15rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs5_Relement_}
+ }// end of reduce table
+};
+yacco2::State S15_Cenumerate_grammar = //State's vectored into symbol: "null call thread eosubrule"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cenumerate_grammar,0,0,0};
+struct S16std_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S16std_Cenumerate_grammar S16st_Cenumerate_grammar = {
+ 6
+ ,
+ {// start of table
+ {345,(State*)&S11_Cenumerate_grammar} // shift sym: refered_T
+ ,{347,(State*)&S12_Cenumerate_grammar} // shift sym: refered_rule
+ ,{369,(State*)&S13_Cenumerate_grammar} // shift sym: T_eosubrule
+ ,{370,(State*)&S14_Cenumerate_grammar} // shift sym: T_called_thread_eosubrule
+ ,{371,(State*)&S15_Cenumerate_grammar} // shift sym: T_null_call_thread_eosubrule
+ ,{577,(State*)&S17_Cenumerate_grammar} // shift sym: Relement
+ }// end of shift table
+};
+struct S16rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cenumerate_grammar S16rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S16_Cenumerate_grammar = //State's vectored into symbol: "Relements"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cenumerate_grammar,(Reduce_tbl*)&S16rt_Cenumerate_grammar,0,0,0};
+struct S17rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cenumerate_grammar S17rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs2_Relements_}
+ }// end of reduce table
+};
+yacco2::State S17_Cenumerate_grammar = //State's vectored into symbol: "Relement"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cenumerate_grammar,0,0,0};
+struct S18rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cenumerate_grammar S18rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cenumerate_grammar,Cenumerate_grammar::rhs1_Relements_}
+ }// end of reduce table
+};
+yacco2::State S18_Cenumerate_grammar = //State's vectored into symbol: "Relement"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cenumerate_grammar,0,0,0};
+struct S19rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cenumerate_grammar S19rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S19_Cenumerate_grammar = //State's vectored into symbol: "Rsubrule"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cenumerate_grammar,0,0,0};
+struct S20rtd_Cenumerate_grammar{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cenumerate_grammar S20rt_Cenumerate_grammar = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cenumerate_grammar,Cenumerate_grammar::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S20_Cenumerate_grammar = //State's vectored into symbol: "Rrule"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cenumerate_grammar,0,0,0};
diff --git a/web/yacco2/compiler/grammars/eol.cpp b/web/yacco2/compiler/grammars/eol.cpp
new file mode 100644
index 0000000000..bb98b1208b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eol.cpp
@@ -0,0 +1,68 @@
+/*
+ File: eol.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "eol.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eol;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Ceol::
+ Ceol()
+ :yacco2::CAbs_fsm
+ ("eol.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"end-of-line recognizer --- Unix, Mac, and Microsoft supported styles."
+ ,"Fri Jan 30 18:55:09 2015 "
+ ,S1_Ceol){
+
+ }
+
+Ceol::~Ceol(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ceol::failed(){
+ return false;
+ }
+ void Ceol::op(){
+}
+int Ceol::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,Ceol::R_Reol_,P,false,false){
+}
+
+void Reol::sr1(){
+
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_eol__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,Ceol::R_Rdelimiters_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/eol.fsc b/web/yacco2/compiler/grammars/eol.fsc
new file mode 100644
index 0000000000..a73904886b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eol.fsc
@@ -0,0 +1,21 @@
+/*
+ File: eol.fsc
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+transitive n
+grammar-name "eol"
+name-space "NS_eol"
+thread-name "TH_eol"
+monolithic n
+file-name "eol.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer --- Unix, Mac, and Microsoft supported styles."
diff --git a/web/yacco2/compiler/grammars/eol.h b/web/yacco2/compiler/grammars/eol.h
new file mode 100644
index 0000000000..2062f55e35
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eol.h
@@ -0,0 +1,65 @@
+/*
+ File: eol.h
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#ifndef __eol_h__
+#define __eol_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_eol;
+
+extern yacco2::State S1_Ceol;
+namespace NS_eol {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_eol(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_eol(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Ceol: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Ceol();
+ ~Ceol();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/eol.lex b/web/yacco2/compiler/grammars/eol.lex
new file mode 100644
index 0000000000..5e10045e86
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eol.lex
@@ -0,0 +1,98 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: eol.lex
+Dates: 17 Juin 2003
+Purpose: end-of-line recognizer
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** Eol Thread.\fbreak
+This thread's claim-to-fame is its end-of-line matching for
+ Unix, Mac, or Windows variants.
+ See |Rdelimiters| rule for the variant in end-of-line recognition.
+The other thing of interest is its use of the meta terminal \invisibleshift.
+Without it in the subrule, the traditional way is to subtract ``x0a''
+from |eolr| representing ``all terminals'' in the Terminal alphabet within the lookahead
+expression of ``parallel-thread-function''
+ to prevent a shift / reduce conflict due to the ``xod'' common prefix subrules.
+ This works but is very inefficient in the size of the lookahead set
+ generated caused by the number of terminals in the Terminal alphabet.
+ The \invisibleshift approach adds a shift in the subrule
+ but only ``eolr'' in its reduce set whereas the traditional way has to binary search thru
+ the lookahead set of approximately .5k terminals to see if the current token is a member.
+ Under current set implementation, this is expensive as the partition number
+ is binary searched first followed by the element within the 8 member set.
+
+ How does \invisibleshift work? Being a meta-terminal, it is not part of
+ the token stream. It is one of the parsing conditionals tested for by its presence within
+ the finite automaton's current state. \allshift is another such meta terminal example.
+
+Use a global pointer to it as it is just an indicator.
+The new / delete cycle is too expensive.
+
+@/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol (){
+ -> Rdelimiters {
+ /@
+ Return the |eol| token back to the caller.
+ @/
+ op
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_eol__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+}
+
+/@
+@** |Rdelimiters| rule.\fbreak
+@/
+
+Rdelimiters
+/@The comments indicate the associated end-of-line variants.
+The Mac subrule shows the use of the \invisibleshift to
+escape from a shift / reduce conflict due to the common prefix ``x0d''.
+As it is not in the token stream, it is a very effective way to
+deal with this type of conflict.
+@/
+()
+{
+ ->
+/@ lf: Unix\fbreak@/
+"x0a"
+ ->
+ /@ cr: Mac.
+ Note use of the \invisibleshift to remove the shift / reduce
+ conflict.
+ This is caused by the general lookahead boundary of |eolr|.
+ \fbreak
+ @/
+
+"x0d" |.|
+ -> /@ cr:lf Windows\fbreak@/ "x0d" "x0a"
+}
+}// end of rules
+
diff --git a/web/yacco2/compiler/grammars/eolsym.cpp b/web/yacco2/compiler/grammars/eolsym.cpp
new file mode 100644
index 0000000000..24de1965d3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eolsym.cpp
@@ -0,0 +1,105 @@
+/*
+ File: eolsym.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "eol.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eol;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_eol::TH_eol(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_eol;
+ NS_eol::Ceol Ceol_;// parallel-parser's parse table
+#define ssPARSE_TABLE Ceol_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_eol::PROC_TH_eol(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_eol";
+ static bool one_time(false);
+ static NS_eol::Ceol* NS_eol_Ceol_(0);// parallel-parser's fsm table
+ static Parser* NS_eol_Ceol_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_eol_Ceol_ = new NS_eol::Ceol();// parallel-parser's fsm table
+ NS_eol_Ceol_parser = new Parser(*NS_eol_Ceol_,Caller_pp);
+ }
+ proc_parser = NS_eol_Ceol_parser;
+#include "wproc_pp_core.h"
+}
+void
+Ceol::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/eoltbl.cpp b/web/yacco2/compiler/grammars/eoltbl.cpp
new file mode 100644
index 0000000000..2e22aaf77b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eoltbl.cpp
@@ -0,0 +1,114 @@
+/*
+ File: eoltbl.cpp
+ Date and Time: Fri Jan 30 18:55:09 2015
+*/
+#include "eol.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eol;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Ceol[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ceol;
+extern yacco2::State S2_Ceol;
+extern yacco2::State S3_Ceol;
+extern yacco2::State S4_Ceol;
+extern yacco2::State S5_Ceol;
+extern yacco2::State S6_Ceol;
+struct S1std_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Ceol S1st_Ceol = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_Ceol} // shift sym: raw_lf
+ ,{21,(State*)&S3_Ceol} // shift sym: raw_cr
+ ,{569,(State*)&S1_Ceol} // accept sym: Reol
+ ,{570,(State*)&S6_Ceol} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_Ceol = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ceol,0,0,0,0};
+struct S2rtd_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ceol S2rt_Ceol = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceol,Ceol::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_Ceol = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ceol,0,0,0};
+struct S3std_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Ceol S3st_Ceol = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_Ceol} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_Ceol} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Ceol = {5,(State*)&S4_Ceol};
+yacco2::State S3_Ceol = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_Ceol
+,0,(Shift_tbl*)&S3st_Ceol,0,0,0,0};
+struct S4rtd_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ceol S4rt_Ceol = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceol,Ceol::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_Ceol = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ceol,0,0,0};
+struct S5rtd_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ceol S5rt_Ceol = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceol,Ceol::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_Ceol = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ceol,0,0,0};
+struct S6rtd_Ceol{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ceol S6rt_Ceol = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceol,Ceol::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_Ceol = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ceol,0,0,0};
diff --git a/web/yacco2/compiler/grammars/epsilon_rules.cpp b/web/yacco2/compiler/grammars/epsilon_rules.cpp
new file mode 100644
index 0000000000..d8eecf98a3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rules.cpp
@@ -0,0 +1,283 @@
+/*
+ File: epsilon_rules.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "epsilon_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_epsilon_rules;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 7;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+}
+ Cepsilon_rules::
+ Cepsilon_rules()
+ :yacco2::CAbs_fsm
+ ("epsilon_rules.lex"
+ ,"1.0"
+ ,"26 sept. 2005"
+ ,false
+ ,"Determine whether rules are epsilon, derive T, or are pathological."
+ ,"Fri Jan 30 18:55:10 2015 "
+ ,S1_Cepsilon_rules){
+
+ }
+
+Cepsilon_rules::~Cepsilon_rules(){
+
+ for(int x = 0;x < 7;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cepsilon_rules::failed(){
+ return false;
+ }
+ void Cepsilon_rules::op(){
+ rule_def_ = 0;
+ subrule_def_ = 0;
+ elem_t_ = 0;
+ ip_can_ = (tok_can< AST* >*)parser__->token_supplier__;
+
+}
+int Cepsilon_rules::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,6 // subrule 9 for rule 7
+};
+
+ AST* Cepsilon_rules::advance_element(AST* Elemt){
+ AST* nxt_t = AST::brother(*Elemt);// next element
+ for(;;){// bypass thread expression: go to jail ... eosubrule
+ using namespace NS_yacco2_T_enum;
+ CAbs_lr1_sym* sym = AST::content(*nxt_t);
+ switch(sym->enumerated_id__){
+ case T_Enum::T_T_identifier_: break;
+ case T_Enum::T_T_2colon_: break;
+ case T_Enum::T_T_NULL_: break;
+ case T_Enum::T_T_cweb_marker_: break;
+ case T_Enum::T_T_cweb_comment_: break;
+ default: return nxt_t;
+ }
+ nxt_t = AST::brother(*nxt_t);// skip thread expr: next element
+ }
+ }
+ void Cepsilon_rules::deal_with_derives_list(){
+ // force cweave to
+ using namespace NS_yacco2_T_enum;
+ bool has_list_chged(false);
+ std::list<elem_list_type >::iterator i;
+ Read_list:;
+ i = derives_list_.begin();
+ if(i == derives_list_.end()) return;
+ for(;i != derives_list_.end();){ // force cweave
+ elem_list_type& el = *i;
+ CAbs_lr1_sym* rteos = AST::content(*el.elem_t_);// force cweave
+ switch(rteos->enumerated_id__){// force cweave
+ case T_Enum::T_refered_rule_:{
+ refered_rule* rr = (refered_rule*)rteos;
+ rule_in_stbl* rstbl = rr->Rule_in_stbl();
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ get_sym_entry_by_sub(report_card,rstbl->stbl_idx());
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ report_card.err_entry_->set_rc(*rr,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*report_card.err_entry_);
+ return;// caused by problem with sym. tbl
+ }
+ if(report_card.tbl_entry_->defined_ == false){
+ CAbs_lr1_sym* sym = new Err_used_rule_but_undefined;
+ sym->set_rc(*rr,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ // keep pouring them into the error queue
+ has_list_chged = true;// go to next element
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ break;
+ }
+ rule_def* r = rr->Rule_in_stbl()->r_def();
+ if(r->epsilon() == YES){
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ if(el.gen_epsilon_ != EPSILON_NO){
+ el.gen_epsilon_ = EPSILON_MAYBE;
+ }
+ break;
+ }
+ if(r->derive_t() == YES){
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ el.gen_epsilon_ = EPSILON_NO;
+ ++i;// next sr in derive list
+ break;
+ }
+ ++i;// indeterminate spot: next pass might free it up so next sr
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ if(el.gen_epsilon_!= EPSILON_NO){
+ el.rule_->epsilon(YES);
+ el.subrule_->epsilon(YES);
+ }else{
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ }
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ refered_T* rt = (refered_T*)rteos;
+ break;
+ }
+ default:{ // lr k
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ break;
+ }
+ }
+
+ }
+ if(derives_list_.empty() == true) return;// kosher grammar
+ if(has_list_chged == true){// still o/s but going forward
+ has_list_chged = false;
+ goto Read_list;
+ }
+}
+ void Cepsilon_rules::deal_with_undecided_derives_list(){
+ // chk if undefined rules were found: yes out damn spot
+ if(parser__->error_queue()->empty() != true) return;
+ // errors: pathological grammar
+ std::list<elem_list_type >::iterator
+ i = derives_list_.begin();
+ if(i == derives_list_.end()) return;
+ for(;i != derives_list_.end();++i){
+ elem_list_type& el = *i;
+ CAbs_lr1_sym* elem = AST::content(*el.elem_t_);
+ CAbs_lr1_sym* sym = new ERR_sick_grammar;
+ sym->set_rc(*elem,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ }
+ }
+
+
+Repsilon_rules::Repsilon_rules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Repsilon_rules",0,Cepsilon_rules::R_Repsilon_rules_,P,false,false){
+}
+
+void Repsilon_rules::sr1(){
+
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->deal_with_derives_list();
+ if(fsm->derives_list_.empty() != true){
+ fsm->deal_with_undecided_derives_list();
+ }
+
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cepsilon_rules::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Cepsilon_rules::R_Rrule_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cepsilon_rules::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Cepsilon_rules::R_Rsubrules_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Cepsilon_rules::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Cepsilon_rules::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ T_subrule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_ = sf->p1__;
+ AST* sr_t = fsm->subrule_def_->subrule_s_tree();
+ AST* et = AST::get_spec_child(*sr_t,1);
+ fsm->derives_list_.push_back
+ (elem_list_type(fsm->rule_def_,fsm->subrule_def_,et));
+
+}
+
diff --git a/web/yacco2/compiler/grammars/epsilon_rules.fsc b/web/yacco2/compiler/grammars/epsilon_rules.fsc
new file mode 100644
index 0000000000..04a18a9cde
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rules.fsc
@@ -0,0 +1,20 @@
+/*
+ File: epsilon_rules.fsc
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+transitive n
+grammar-name "epsilon_rules"
+name-space "NS_epsilon_rules"
+thread-name "Cepsilon_rules"
+monolithic y
+file-name "epsilon_rules.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Determine whether rules are epsilon, derive T, or are pathological."
diff --git a/web/yacco2/compiler/grammars/epsilon_rules.h b/web/yacco2/compiler/grammars/epsilon_rules.h
new file mode 100644
index 0000000000..8b1d918e28
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rules.h
@@ -0,0 +1,146 @@
+/*
+ File: epsilon_rules.h
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#ifndef __epsilon_rules_h__
+#define __epsilon_rules_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "yacco2_stbl.h"
+using namespace NS_yacco2_terminals;
+#define EPSILON_YES 0
+#define EPSILON_NO 1
+#define EPSILON_DONT_KNOW 2
+#define EPSILON_MAYBE 3
+
+struct elem_list_type{
+ rule_def* rule_;
+ T_subrule_def* subrule_;
+ AST* elem_t_;
+ int gen_epsilon_;
+ int gen_t_;
+ elem_list_type
+ (rule_def* Rule
+ ,T_subrule_def* Subrule
+ ,AST* Elem_t){
+ rule_ = Rule;
+ subrule_ = Subrule;
+ elem_t_ = Elem_t;
+ gen_epsilon_ = EPSILON_DONT_KNOW;
+ gen_t_ = false;
+ };
+ elem_list_type(){
+ rule_ = 0;
+ subrule_ = 0;
+ elem_t_ = 0;
+ gen_epsilon_ = false;
+ gen_t_ = false;
+ };
+};
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cepsilon_rules;
+namespace NS_epsilon_rules {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[7];
+};
+class Cepsilon_rules: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Repsilon_rules_ = 569//start_of_rule_list + 0
+ ,rhs1_Repsilon_rules_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ ,R_Rsubrules_ = 573//start_of_rule_list + 8
+ ,rhs1_Rsubrules_ = 6
+ ,rhs2_Rsubrules_ = 7
+ ,R_Rsubrule_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsubrule_ = 8
+ ,R_Rsubrule_def_ = 575//start_of_rule_list + 12
+ ,rhs1_Rsubrule_def_ = 9
+ };
+ //no of la sets = 4
+ //no of states = 12
+ Cepsilon_rules();
+ ~Cepsilon_rules();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+
+ public:
+ std::list<elem_list_type > derives_list_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ AST* elem_t_;
+ tok_can< AST* > * ip_can_;
+ void deal_with_derives_list();
+ void deal_with_undecided_derives_list();
+ AST* advance_element(AST* Elemt);
+
+ };
+struct Repsilon_rules;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rsubrules;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Repsilon_rules:public yacco2::CAbs_lr1_sym {
+ Repsilon_rules(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/epsilon_rules.lex b/web/yacco2/compiler/grammars/epsilon_rules.lex
new file mode 100644
index 0000000000..73b8c73c42
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rules.lex
@@ -0,0 +1,414 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: epsilon_rules.lex
+Dates: 23 Sept. 2005
+Purpose: determine epsilon rules.
+How: Read the rules' tree in prefix order filtering out:
+ ::, rules-phrase, identifier, NULL
+ adding rules to yes or no piles or maybe list
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |epsilon_rules| grammar.\fbreak
+Determine and check for the following:\fbreak
+\ptindent{1: epsilon rules}
+\ptindent{2: rules not deriving any string}
+\ptindent{3: referenced rules are defined}
+\ptindent{4: recursion cycling deriving only epsilon}
+\ptindent{5: ambiguous subrules caused by multiple recursion cycling}
+\fbreak
+Epsilon definition:\fbreak
+A rule having a subrule with no grammar symbols present:
+ie, it derives an empty symbol string.
+This is explicit epsilon.
+A second condition is when a rule's subrule
+has all its symbols as rules and they are
+all epsiloned. I call this transient epsilon. It doesn't matter
+how the condition is arrived at.
+Now a third condition is the ``invisible-shift'' operator usuage.
+Though it's not part of the token stream per say it is normally used
+to get out of ambigous situations and so is part of the lookahead set.
+Once apon a time i thought this was an implicit epsilon: IT IS NOT.\fbreak
+\fbreak
+Some epsilon terminalogy:\fbreak
+Noun: epsilon represents the empty string of symbols.
+The Greek flavour ($\epsilon$) represents it visually.\fbreak
+Adjective: epsilonable - has the empty symbol string condition
+and non-epsilonable generates terminal strings.\fbreak
+Verb: shake and bake the tenses.\fbreak
+Verbal: epsiloned.\fbreak
+\fbreak
+This grammar demonstrates the elegance of flow control.
+Review of a grammar's flow control:\fbreak
+This depends on how the grammar tree
+is walked. This grammar receives its
+tokens in prefix formation:
+a ``rule-def'' token is processed before
+its ``subrule-def''.
+Using sentences, a subrule's expression will be processed before its left-handside rule.
+This means the dependencies are in bottom-up left-to-right order of
+token recognition.
+One can use the prefix order to initialize the various conditions, and
+postfix the results from the bottom-up order.
+A grammar of no tokens can be programmed using all epsiloned rules
+whereby the rules act as logic triggers.
+In this paricular example, the grammar was originally
+written to detect ``epsilon'' rules.
+Now it detects whether all rules derive T. The grammar recognition
+just loads up into a 2 dimensional list the rule x subrule x element.
+Once the language is accepted, it then traverses the list to derive
+the terminal strings per subrule.\fbreak
+\fbreak
+The Algorithm.\fbreak
+Pass one: fill up the derives list\fbreak
+Fill up the triplet list of all subrules: rule $\otimes$ subrule $\otimes$ element.
+One can view it as a 2 dimensional array where the row is subrule dominent
+with its subordinent element columns. The rule just tags along providing
+the parental anchor.
+The grammar tree is walked top-down (prefix order) to
+load up the derives list.
+Only the ``rule-def'' and ``subrule-def'' come in as tokens
+while the elements are filtered out.
+This was done for efficiency reasons.
+Within the grammar at the ``subrule-def'' logic point,
+the ``subrule-def'' start element is fetched by
+syntax directed code.
+\fbreak
+\fbreak
+Pass 2: derive T for each subrule\fbreak
+Try to derive terminal strings for each indeterminate subrule.
+This stage does multilpe passes thru the derives list
+whereby each
+pass is predicated on the fact that the previous pass
+has a change in the status of a subrule
+--- advance to the next element or
+the subrule's elements have been consumed.
+How is this a 2 dimensional walk?
+The subrules in the list are the dominant axis while its elements are the
+secondary axis. This is a dynamic grid of points being consumned.
+The final outcome is either the grammar's subrules all derive
+terminal strings and the derives list is empty
+or the remainder of items are
+the pathological subrules.\fbreak
+\fbreak
+Examples of Pathological conditions:\fbreak
+Rule {\bf A} calls itself or
+a variation of {\bf A} calls {\bf B} calls {\bf A} without
+any terminal strings in their subrules.\fbreak
+\fbreak
+Please look at the following test grammars that exercise the pathos...\fbreak
+\ptindent{1: |ts_path1.lex|}
+\ptindent{2: |ts_path1a.lex|}
+\ptindent{3: |ts_path2.lex|}
+\ptindent{4: |ts_path3.lex|}
+\ptindent{5: |ts_path4.lex|}
+\ptindent{6: |ts_path5.lex|}
+\ptindent{7: |ts_path6.lex|}
+\ptindent{8: |ts_path7.lex|}
+They are exercised by |qa_alltests.bat| batch command file.
+@*2 Recursion and derives a string.\fbreak
+Derives:\fbreak
+Greek symbols are used to denote a mixed string of symbol(s) drawn from
+the nonterminal, terminal vocabularies. The empty string is
+represented by $\epsilon$.
+Derives is a relationship that starts with a string of symbols and substitutes
+ equivalent strings of symbols until eventually nomore substitutions can take place.
+ The resulting string is either empty or a string of terminals.
+ The order of substitution will be from left to right.
+The $\longrightarrow$ symbol represents the derives relation.
+Sometimes i will subscript the greek symbol
+with $\epsilon$ denoting that it derives the empty string.
+The $\not\longrightarrow$\ symbol represents ``no derives'' takes place.
+I use this where a specific subrule pattern is being
+discussed and the greek symbol is not present.
+
+
+\fbreak
+Left recursion: A \subrule \ A $\beta${} \fbreak
+As shown, the rule {\bf A} calls itself from the left part of its subrule.
+$\beta${} represents strings of Rules and Terminals\fbreak
+\fbreak
+Right recursion: A \subrule \ $\alpha${} \ A \fbreak
+The rule {\bf A} calls itself from the end of the subrule as shown.
+$\alpha${} represents strings of Rules and Terminals.\fbreak
+
+@*2 Pathological Grammars.\fbreak
+The below pictures grids the good the bad and the ugly.
+\fbreak
+Note: the emitted code contains some imperfections caused by |cweave|.
+When i have time i'll deal with |cweave|. Reader beware.
+\fbreak
+\fbreak
+@/
+
+fsm
+(fsm-id "epsilon_rules.lex"
+,fsm-filename epsilon_rules
+,fsm-namespace NS_epsilon_rules
+,fsm-class Cepsilon_rules{
+ user-prefix-declaration
+#include "yacco2_stbl.h"
+using namespace NS_yacco2_terminals;
+#define EPSILON_YES 0
+#define EPSILON_NO 1
+#define EPSILON_DONT_KNOW 2
+#define EPSILON_MAYBE 3
+
+struct elem_list_type{
+ rule_def* rule_;
+ T_subrule_def* subrule_;
+ AST* elem_t_;
+ int gen_epsilon_;
+ int gen_t_;
+ elem_list_type
+ (rule_def* Rule
+ ,T_subrule_def* Subrule
+ ,AST* Elem_t){
+ rule_ = Rule;
+ subrule_ = Subrule;
+ elem_t_ = Elem_t;
+ gen_epsilon_ = EPSILON_DONT_KNOW;
+ gen_t_ = false;
+ };
+ elem_list_type(){
+ rule_ = 0;
+ subrule_ = 0;
+ elem_t_ = 0;
+ gen_epsilon_ = false;
+ gen_t_ = false;
+ };
+};
+ ***
+ user-declaration
+ public:
+ std::list<elem_list_type > derives_list_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ AST* elem_t_;
+ tok_can< AST* > * ip_can_;
+ void deal_with_derives_list();
+ void deal_with_undecided_derives_list();
+ AST* advance_element(AST* Elemt);
+ ***
+ user-implementation
+ AST* Cepsilon_rules::advance_element(AST* Elemt){
+ AST* nxt_t = AST::brother(*Elemt);// next element
+ for(;;){// bypass thread expression: go to jail ... eosubrule
+ using namespace NS_yacco2_T_enum;
+ CAbs_lr1_sym* sym = AST::content(*nxt_t);
+ switch(sym->enumerated_id__){
+ case T_Enum::T_T_identifier_: break;
+ case T_Enum::T_T_2colon_: break;
+ case T_Enum::T_T_NULL_: break;
+ case T_Enum::T_T_cweb_marker_: break;
+ case T_Enum::T_T_cweb_comment_: break;
+ default: return nxt_t;
+ }
+ nxt_t = AST::brother(*nxt_t);// skip thread expr: next element
+ }
+ }
+ void Cepsilon_rules::deal_with_derives_list(){
+ // force cweave to
+ using namespace NS_yacco2_T_enum;
+ bool has_list_chged(false);
+ std::list<elem_list_type >::iterator i;
+ Read_list:;
+ i = derives_list_.begin();
+ if(i == derives_list_.end()) return;
+ for(;i != derives_list_.end();){ // force cweave
+ elem_list_type& el = *i;
+ CAbs_lr1_sym* rteos = AST::content(*el.elem_t_);// force cweave
+ switch(rteos->enumerated_id__){// force cweave
+ case T_Enum::T_refered_rule_:{
+ refered_rule* rr = (refered_rule*)rteos;
+ rule_in_stbl* rstbl = rr->Rule_in_stbl();
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ get_sym_entry_by_sub(report_card,rstbl->stbl_idx());
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ report_card.err_entry_->set_rc(*rr,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*report_card.err_entry_);
+ return;// caused by problem with sym. tbl
+ }
+ if(report_card.tbl_entry_->defined_ == false){
+ CAbs_lr1_sym* sym = new Err_used_rule_but_undefined;
+ sym->set_rc(*rr,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ // keep pouring them into the error queue
+ has_list_chged = true;// go to next element
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ break;
+ }
+ rule_def* r = rr->Rule_in_stbl()->r_def();
+ if(r->epsilon() == YES){
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ if(el.gen_epsilon_ != EPSILON_NO){
+ el.gen_epsilon_ = EPSILON_MAYBE;
+ }
+ break;
+ }
+ if(r->derive_t() == YES){
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ el.gen_epsilon_ = EPSILON_NO;
+ ++i;// next sr in derive list
+ break;
+ }
+ ++i;// indeterminate spot: next pass might free it up so next sr
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ if(el.gen_epsilon_!= EPSILON_NO){
+ el.rule_->epsilon(YES);
+ el.subrule_->epsilon(YES);
+ }else{
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ }
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ el.rule_->derive_t(YES);
+ has_list_chged = true;
+ i = derives_list_.erase(i);// finished with sr
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ refered_T* rt = (refered_T*)rteos;
+ break;
+ }
+ default:{ // lr k
+ el.gen_epsilon_ = EPSILON_NO;
+ el.subrule_->epsilon(NO);
+ has_list_chged = true;
+ el.elem_t_ = advance_element(el.elem_t_);
+ ++i;// next sr in derive list
+ break;
+ }
+ }
+
+ }
+ if(derives_list_.empty() == true) return;// kosher grammar
+ if(has_list_chged == true){// still o/s but going forward
+ has_list_chged = false;
+ goto Read_list;
+ }
+}
+ void Cepsilon_rules::deal_with_undecided_derives_list(){
+ // chk if undefined rules were found: yes out damn spot
+ if(parser__->error_queue()->empty() != true) return;
+ // errors: pathological grammar
+ std::list<elem_list_type >::iterator
+ i = derives_list_.begin();
+ if(i == derives_list_.end()) return;
+ for(;i != derives_list_.end();++i){
+ elem_list_type& el = *i;
+ CAbs_lr1_sym* elem = AST::content(*el.elem_t_);
+ CAbs_lr1_sym* sym = new ERR_sick_grammar;
+ sym->set_rc(*elem,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ }
+ }
+
+ ***
+ op
+ rule_def_ = 0;
+ subrule_def_ = 0;
+ elem_t_ = 0;
+ ip_can_ = (tok_can< AST* >*)parser__->token_supplier__;
+ ***
+}
+,fsm-version "1.0",fsm-date "26 sept. 2005",fsm-debug "false"
+,fsm-comments "Determine whether rules are epsilon, derive T, or are pathological.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Repsilon_rules
+(){
+ -> Rrules eog {
+/@
+Pass 2 and greater.
+@/
+ op
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->deal_with_derives_list();
+ if(fsm->derives_list_.empty() != true){
+ fsm->deal_with_undecided_derives_list();
+ }
+ ***
+ }
+}
+
+Rrules (){
+ -> Rrule
+ -> Rrules Rrule
+}
+
+Rrule (){
+ -> Rrule_def Rsubrules
+}
+
+Rrule_def (){
+ -> "rule-def" {
+ /@
+ Initialize for its subrule findings.
+ @/
+ op
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ ***
+ }
+}
+
+Rsubrules (){
+ -> Rsubrule
+ -> Rsubrules Rsubrule
+}
+
+Rsubrule (){
+ -> Rsubrule_def
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ /@
+ Create the entry within the |derives_list_|.
+ This will be walked until either
+ all the subrules' elements are derived or they are pathological.
+ @/
+
+ op
+ Cepsilon_rules* fsm = (Cepsilon_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_ = sf->p1__;
+ AST* sr_t = fsm->subrule_def_->subrule_s_tree();
+ AST* et = AST::get_spec_child(*sr_t,1);
+ fsm->derives_list_.push_back
+ (elem_list_type(fsm->rule_def_,fsm->subrule_def_,et));
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/epsilon_rulessym.cpp b/web/yacco2/compiler/grammars/epsilon_rulessym.cpp
new file mode 100644
index 0000000000..ef828463b5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rulessym.cpp
@@ -0,0 +1,156 @@
+/*
+ File: epsilon_rulessym.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "epsilon_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_epsilon_rules;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cepsilon_rules::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Repsilon_rules_:{
+ Repsilon_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Repsilon_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repsilon_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/epsilon_rulestbl.cpp b/web/yacco2/compiler/grammars/epsilon_rulestbl.cpp
new file mode 100644
index 0000000000..e93715da20
--- /dev/null
+++ b/web/yacco2/compiler/grammars/epsilon_rulestbl.cpp
@@ -0,0 +1,241 @@
+/*
+ File: epsilon_rulestbl.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "epsilon_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_epsilon_rules;// grammar's ns
+// first set terminals
+// T_subrule_def
+yacco2::UCHAR LA1_Cepsilon_rules[] ={
+1
+,42,64
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cepsilon_rules[] ={
+1
+,0,4
+};
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA3_Cepsilon_rules[] ={
+2
+,0,2
+,42,16
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+yacco2::UCHAR LA4_Cepsilon_rules[] ={
+2
+,0,2
+,42,80
+};
+extern yacco2::State S1_Cepsilon_rules;
+extern yacco2::State S2_Cepsilon_rules;
+extern yacco2::State S3_Cepsilon_rules;
+extern yacco2::State S4_Cepsilon_rules;
+extern yacco2::State S5_Cepsilon_rules;
+extern yacco2::State S6_Cepsilon_rules;
+extern yacco2::State S7_Cepsilon_rules;
+extern yacco2::State S8_Cepsilon_rules;
+extern yacco2::State S9_Cepsilon_rules;
+extern yacco2::State S10_Cepsilon_rules;
+extern yacco2::State S11_Cepsilon_rules;
+extern yacco2::State S12_Cepsilon_rules;
+struct S1std_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cepsilon_rules S1st_Cepsilon_rules = {
+ 5
+ ,
+ {// start of table
+ {340,(State*)&S2_Cepsilon_rules} // shift sym: rule_def
+ ,{569,(State*)&S1_Cepsilon_rules} // accept sym: Repsilon_rules
+ ,{570,(State*)&S3_Cepsilon_rules} // shift sym: Rrules
+ ,{571,(State*)&S12_Cepsilon_rules} // shift sym: Rrule
+ ,{572,(State*)&S6_Cepsilon_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cepsilon_rules = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cepsilon_rules,0,0,0,0};
+struct S2rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cepsilon_rules S2rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cepsilon_rules,Cepsilon_rules::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cepsilon_rules = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cepsilon_rules,0,0,0};
+struct S3std_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Cepsilon_rules S3st_Cepsilon_rules = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S4_Cepsilon_rules} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Cepsilon_rules} // shift sym: rule_def
+ ,{571,(State*)&S5_Cepsilon_rules} // shift sym: Rrule
+ ,{572,(State*)&S6_Cepsilon_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Cepsilon_rules = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cepsilon_rules,0,0,0,0};
+struct S4rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cepsilon_rules S4rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cepsilon_rules,Cepsilon_rules::rhs1_Repsilon_rules_}
+ }// end of reduce table
+};
+yacco2::State S4_Cepsilon_rules = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cepsilon_rules,0,0,0};
+struct S5rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cepsilon_rules S5rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cepsilon_rules,Cepsilon_rules::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Cepsilon_rules = //State's vectored into symbol: "Rrule"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cepsilon_rules,0,0,0};
+struct S6std_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S6std_Cepsilon_rules S6st_Cepsilon_rules = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S7_Cepsilon_rules} // shift sym: T_subrule_def
+ ,{573,(State*)&S8_Cepsilon_rules} // shift sym: Rsubrules
+ ,{574,(State*)&S11_Cepsilon_rules} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cepsilon_rules} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S6_Cepsilon_rules = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cepsilon_rules,0,0,0,0};
+struct S7rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cepsilon_rules S7rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cepsilon_rules,Cepsilon_rules::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S7_Cepsilon_rules = //State's vectored into symbol: "subrule-def"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cepsilon_rules,0,0,0};
+struct S8std_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Cepsilon_rules S8st_Cepsilon_rules = {
+ 3
+ ,
+ {// start of table
+ {342,(State*)&S7_Cepsilon_rules} // shift sym: T_subrule_def
+ ,{574,(State*)&S9_Cepsilon_rules} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cepsilon_rules} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+struct S8rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cepsilon_rules S8rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cepsilon_rules,Cepsilon_rules::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S8_Cepsilon_rules = //State's vectored into symbol: "Rsubrules"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cepsilon_rules,(Reduce_tbl*)&S8rt_Cepsilon_rules,0,0,0};
+struct S9rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cepsilon_rules S9rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cepsilon_rules,Cepsilon_rules::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S9_Cepsilon_rules = //State's vectored into symbol: "Rsubrule"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cepsilon_rules,0,0,0};
+struct S10rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cepsilon_rules S10rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cepsilon_rules,Cepsilon_rules::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S10_Cepsilon_rules = //State's vectored into symbol: "Rsubrule_def"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cepsilon_rules,0,0,0};
+struct S11rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cepsilon_rules S11rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cepsilon_rules,Cepsilon_rules::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S11_Cepsilon_rules = //State's vectored into symbol: "Rsubrule"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cepsilon_rules,0,0,0};
+struct S12rtd_Cepsilon_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cepsilon_rules S12rt_Cepsilon_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cepsilon_rules,Cepsilon_rules::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S12_Cepsilon_rules = //State's vectored into symbol: "Rrule"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cepsilon_rules,0,0,0};
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph.cpp b/web/yacco2/compiler/grammars/err_symbols_ph.cpp
new file mode 100644
index 0000000000..fbd542ea79
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph.cpp
@@ -0,0 +1,109 @@
+/*
+ File: err_symbols_ph.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cerr_symbols_ph::
+ Cerr_symbols_ph()
+ :yacco2::CAbs_fsm
+ ("err_symbols_ph.lex"
+ ,"1.0"
+ ,"23 mar 2004"
+ ,false
+ ,"Dispatcher to parse ``error-symbols'' vocabulary."
+ ,"Fri Jan 30 18:55:10 2015 "
+ ,S1_Cerr_symbols_ph){
+
+ cweb_marker__ = 0;
+
+ }
+
+Cerr_symbols_ph::~Cerr_symbols_ph(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cerr_symbols_ph::failed(){
+ return false;
+ }
+ void Cerr_symbols_ph::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Cerr_symbols_ph::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rerror_symbols_phrase::Rerror_symbols_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerror_symbols_phrase",0,Cerr_symbols_ph::R_Rerror_symbols_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Cerr_symbols_ph::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_error_symbols_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph.fsc b/web/yacco2/compiler/grammars/err_symbols_ph.fsc
new file mode 100644
index 0000000000..12c901b71f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph.fsc
@@ -0,0 +1,22 @@
+/*
+ File: err_symbols_ph.fsc
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+transitive y
+grammar-name "err_symbols_ph"
+name-space "NS_err_symbols_ph"
+thread-name "Cerr_symbols_ph"
+monolithic y
+file-name "err_symbols_ph.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_err_symbols_ph_th::TH_err_symbols_ph_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_err_symbols_ph_th::TH_err_symbols_ph_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse ``error-symbols'' vocabulary."
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph.h b/web/yacco2/compiler/grammars/err_symbols_ph.h
new file mode 100644
index 0000000000..0d7d80727a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph.h
@@ -0,0 +1,70 @@
+/*
+ File: err_symbols_ph.h
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#ifndef __err_symbols_ph_h__
+#define __err_symbols_ph_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "err_symbols_ph_th.h"
+#include "o2_externs.h"
+using namespace NS_yacco2_terminals;
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cerr_symbols_ph;
+namespace NS_err_symbols_ph {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cerr_symbols_ph: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rerror_symbols_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rerror_symbols_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Cerr_symbols_ph();
+ ~Cerr_symbols_ph();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rerror_symbols_phrase;
+struct Rphrase;
+struct Rerror_symbols_phrase:public yacco2::CAbs_lr1_sym {
+ Rerror_symbols_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph.lex b/web/yacco2/compiler/grammars/err_symbols_ph.lex
new file mode 100644
index 0000000000..9d360b17f6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph.lex
@@ -0,0 +1,78 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: err_symbols_ph.lex
+Dates: 23 Mar 2004
+Purpose: parse error-symbols alphabet
+Grammar being parsed:
+ error-symbols
+ (file-name yacco2_error_symbols
+ ,name-space NS_yacco2_error_symbols)
+ {
+ 1+ terminal definitions where def is
+ terminal-key [AD AB attributes](sym-class C++ name)
+ or
+ terminal-key [AD AB attributes]
+ (sym-class C++ name {C++ directives block} )
+ }
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |err_symbols_ph| grammar.\fbreak
+Dispatcher to parse the Error vocabulary.
+@/
+fsm
+(fsm-id "err_symbols_ph.lex"
+,fsm-filename err_symbols_ph
+,fsm-namespace NS_err_symbols_ph
+,fsm-class Cerr_symbols_ph{
+ user-prefix-declaration
+#include "err_symbols_ph_th.h"
+#include "o2_externs.h"
+using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "23 mar 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse ``error-symbols'' vocabulary.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rerror_symbols_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "error-symbols-phrase"
+ NS_err_symbols_ph_th::TH_err_symbols_ph_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_th.cpp b/web/yacco2/compiler/grammars/err_symbols_ph_th.cpp
new file mode 100644
index 0000000000..b5454bef39
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_th.cpp
@@ -0,0 +1,624 @@
+/*
+ File: err_symbols_ph_th.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 17;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+}
+ Cerr_symbols_ph_th::
+ Cerr_symbols_ph_th()
+ :yacco2::CAbs_fsm
+ ("err_symbols_ph_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Parse Error vocabulary."
+ ,"Fri Jan 30 18:55:10 2015 "
+ ,S1_Cerr_symbols_ph_th){
+
+ error_symbols_phrase_ = 0;
+
+ }
+
+Cerr_symbols_ph_th::~Cerr_symbols_ph_th(){
+
+ for(int x = 0;x < 17;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cerr_symbols_ph_th::failed(){
+ return false;
+ }
+ void Cerr_symbols_ph_th::op(){
+ if(error_symbols_phrase_ != 0){
+ delete error_symbols_phrase_;
+ error_symbols_phrase_ = 0;
+ }
+ error_symbols_phrase_ = new T_error_symbols_phrase;
+ error_symbols_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*error_symbols_phrase_);
+ error_symbols_phrase_->phrase_tree(t);
+
+}
+int Cerr_symbols_ph_th::rhs_to_rules_mapping_[42] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,9 // subrule 21 for rule 10
+ ,10 // subrule 22 for rule 11
+ ,11 // subrule 23 for rule 12
+ ,11 // subrule 24 for rule 12
+ ,12 // subrule 25 for rule 13
+ ,12 // subrule 26 for rule 13
+ ,12 // subrule 27 for rule 13
+ ,12 // subrule 28 for rule 13
+ ,12 // subrule 29 for rule 13
+ ,12 // subrule 30 for rule 13
+ ,13 // subrule 31 for rule 14
+ ,13 // subrule 32 for rule 14
+ ,13 // subrule 33 for rule 14
+ ,13 // subrule 34 for rule 14
+ ,13 // subrule 35 for rule 14
+ ,14 // subrule 36 for rule 15
+ ,14 // subrule 37 for rule 15
+ ,15 // subrule 38 for rule 16
+ ,15 // subrule 39 for rule 16
+ ,16 // subrule 40 for rule 17
+ ,16 // subrule 41 for rule 17
+};
+Rerror_symbols_phrase::Rerror_symbols_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerror_symbols_phrase",0,Cerr_symbols_ph_th::R_Rerror_symbols_phrase_,P,false,false){
+}
+
+void Rerror_symbols_phrase::sr1(){
+
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->error_symbols_phrase_);
+ fsm->error_symbols_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Cerr_symbols_ph_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Cerr_symbols_ph_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Cerr_symbols_ph_th::R_Rparameters_,P,false,false){
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,Cerr_symbols_ph_th::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,Cerr_symbols_ph_th::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_id::Rfilename_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_id",0,Cerr_symbols_ph_th::R_Rfilename_id_,P,false,false){
+}
+
+void Rfilename_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->error_symbols_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfilename_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,Cerr_symbols_ph_th::R_Rnamespace_phrase_,P,false,false){
+}
+
+void Rnamespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,Cerr_symbols_ph_th::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_id::Rnamespace_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_id",0,Cerr_symbols_ph_th::R_Rnamespace_id_,P,false,false){
+}
+
+void Rnamespace_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->error_symbols_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rnamespace_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_defs_phrase::Rsym_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs_phrase",0,Cerr_symbols_ph_th::R_Rsym_defs_phrase_,P,false,false){
+}
+
+Rsym_defs::Rsym_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs",0,Cerr_symbols_ph_th::R_Rsym_defs_,P,false,false){
+}
+
+Rsym_def::Rsym_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def",0,Cerr_symbols_ph_th::R_Rsym_def_,P,false,false){
+}
+
+void Rsym_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::err);
+ CAbs_lr1_sym* r =
+ fsm->error_symbols_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr6(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_def1::Rsym_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1",0,Cerr_symbols_ph_th::R_Rsym_def1_,P,false,false){
+}
+
+void Rsym_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::err);
+ CAbs_lr1_sym* r =
+ fsm->error_symbols_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Cerr_symbols_ph_th::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Cerr_symbols_ph_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cerr_symbols_ph_th::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_th.fsc b/web/yacco2/compiler/grammars/err_symbols_ph_th.fsc
new file mode 100644
index 0000000000..abcb79af72
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_th.fsc
@@ -0,0 +1,25 @@
+/*
+ File: err_symbols_ph_th.fsc
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+transitive y
+grammar-name "err_symbols_ph_th"
+name-space "NS_err_symbols_ph_th"
+thread-name "TH_err_symbols_ph_th"
+monolithic n
+file-name "err_symbols_ph_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_term_def_ph::TH_term_def_ph
+end-list-of-used-threads
+fsm-comments
+"Parse Error vocabulary."
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_th.h b/web/yacco2/compiler/grammars/err_symbols_ph_th.h
new file mode 100644
index 0000000000..c469dc1acb
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_th.h
@@ -0,0 +1,247 @@
+/*
+ File: err_symbols_ph_th.h
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#ifndef __err_symbols_ph_th_h__
+#define __err_symbols_ph_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+
+extern yacco2::Thread_entry ITH_err_symbols_ph_th;
+
+extern yacco2::State S1_Cerr_symbols_ph_th;
+namespace NS_err_symbols_ph_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_err_symbols_ph_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_err_symbols_ph_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[17];
+};
+class Cerr_symbols_ph_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rerror_symbols_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rerror_symbols_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfilename_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfilename_phrase_ = 7
+ ,R_Rfilename_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfilename_ = 8
+ ,rhs2_Rfilename_ = 9
+ ,rhs3_Rfilename_ = 10
+ ,R_Rfilename_id_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfilename_id_ = 11
+ ,rhs2_Rfilename_id_ = 12
+ ,rhs3_Rfilename_id_ = 13
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 14
+ ,rhs2_Rnamespace_phrase_ = 15
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 16
+ ,rhs2_Rnamespace_ = 17
+ ,rhs3_Rnamespace_ = 18
+ ,R_Rnamespace_id_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_id_ = 19
+ ,rhs2_Rnamespace_id_ = 20
+ ,rhs3_Rnamespace_id_ = 21
+ ,R_Rsym_defs_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rsym_defs_phrase_ = 22
+ ,R_Rsym_defs_ = 580//start_of_rule_list + 22
+ ,rhs1_Rsym_defs_ = 23
+ ,rhs2_Rsym_defs_ = 24
+ ,R_Rsym_def_ = 581//start_of_rule_list + 24
+ ,rhs1_Rsym_def_ = 25
+ ,rhs2_Rsym_def_ = 26
+ ,rhs3_Rsym_def_ = 27
+ ,rhs4_Rsym_def_ = 28
+ ,rhs5_Rsym_def_ = 29
+ ,rhs6_Rsym_def_ = 30
+ ,R_Rsym_def1_ = 582//start_of_rule_list + 26
+ ,rhs1_Rsym_def1_ = 31
+ ,rhs2_Rsym_def1_ = 32
+ ,rhs3_Rsym_def1_ = 33
+ ,rhs4_Rsym_def1_ = 34
+ ,rhs5_Rsym_def1_ = 35
+ ,R_Ropen_brace_ = 583//start_of_rule_list + 28
+ ,rhs1_Ropen_brace_ = 36
+ ,rhs2_Ropen_brace_ = 37
+ ,R_Rclose_brace_ = 584//start_of_rule_list + 30
+ ,rhs1_Rclose_brace_ = 38
+ ,rhs2_Rclose_brace_ = 39
+ ,R_Rlint_ = 585//start_of_rule_list + 32
+ ,rhs1_Rlint_ = 40
+ ,rhs2_Rlint_ = 41
+ };
+ //no of la sets = 9
+ //no of states = 69
+ Cerr_symbols_ph_th();
+ ~Cerr_symbols_ph_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[42];
+
+ public:
+ T_error_symbols_phrase* error_symbols_phrase_;
+
+ };
+struct Rerror_symbols_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_id;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_id;
+struct Rsym_defs_phrase;
+struct Rsym_defs;
+struct Rsym_def;
+struct Rsym_def1;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint;
+struct Rerror_symbols_phrase:public yacco2::CAbs_lr1_sym {
+ Rerror_symbols_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+
+public:T_file_name* filename_;
+
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfilename_id:public yacco2::CAbs_lr1_sym {
+ Rfilename_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_id:public yacco2::CAbs_lr1_sym {
+ Rnamespace_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rsym_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_defs:public yacco2::CAbs_lr1_sym {
+ Rsym_defs(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_def:public yacco2::CAbs_lr1_sym {
+ Rsym_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rsym_def1:public yacco2::CAbs_lr1_sym {
+ Rsym_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_th.lex b/web/yacco2/compiler/grammars/err_symbols_ph_th.lex
new file mode 100644
index 0000000000..b7573b4ba6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_th.lex
@@ -0,0 +1,380 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: err_symbols_ph_th.lex
+Dates: 23 Mar 2004
+Purpose: parse error-symbols phrase
+ The keeps its own local symbol table: map and list.
+ The term_def_ph adds symbol to Yacco2's
+ global symbol table.
+Output: error_symbols_phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |err_symbols_ph_th| Thread.\fbreak
+Parse the error terminal definitions.
+As all terminal vocabulary symbols have the same source template,
+|TH_term_def_ph| is used to parse
+individually each symbol.
+\fbreak
+Example of an error vocabulary to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/errsym.txt"}
+
+@/
+fsm
+(fsm-id "err_symbols_ph_th.lex"
+,fsm-filename err_symbols_ph_th
+,fsm-namespace NS_err_symbols_ph_th
+,fsm-class Cerr_symbols_ph_th{
+ user-prefix-declaration
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+ ***
+ user-declaration
+ public:
+ T_error_symbols_phrase* error_symbols_phrase_;
+ ***
+ constructor
+ error_symbols_phrase_ = 0;
+ ***
+ op
+ if(error_symbols_phrase_ != 0){
+ delete error_symbols_phrase_;
+ error_symbols_phrase_ = 0;
+ }
+ error_symbols_phrase_ = new T_error_symbols_phrase;
+ error_symbols_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*error_symbols_phrase_);
+ error_symbols_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Parse Error vocabulary.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_err_symbols_ph_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rerror_symbols_phrase (){
+ -> Rlint
+ Ropen_par
+ Rparameters
+ Rclose_par
+ Rlint
+ Rsym_defs_phrase
+ Rlint {
+ op
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->error_symbols_phrase_);
+ fsm->error_symbols_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rlint
+ Rfilename_phrase Rlint
+ Rnamespace_phrase Rlint
+}
+
+Rfilename_phrase (
+lhs{
+user-declaration
+public:T_file_name* filename_;
+***
+}
+){
+ -> Rfilename Rlint Rfilename_id
+}
+
+Rfilename (){
+ -> ||| "#file-name" NS_identifier::TH_identifier
+ -> ||| |+| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->error_symbols_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (
+lhs
+){
+ -> "," Rlint Rnamespace Rlint Rnamespace_id
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace (){
+ -> ||| "#name-space" NS_identifier::TH_identifier
+ -> ||| |+| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->error_symbols_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_defs_phrase (){
+ -> Ropen_brace Rlint
+ Rsym_defs
+ Rclose_brace
+}
+
+Rsym_defs (){
+ -> Rsym_def Rlint
+ -> Rsym_defs Rsym_def1 Rlint
+}
+
+Rsym_def
+/@
+Note: trapped explicitly are directives that are improper
+within this context.
+@/
+(){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::err);
+ CAbs_lr1_sym* r =
+ fsm->error_symbols_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_def1 (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Cerr_symbols_ph_th* fsm = (Cerr_symbols_ph_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::err);
+ CAbs_lr1_sym* r =
+ fsm->error_symbols_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_thsym.cpp b/web/yacco2/compiler/grammars/err_symbols_ph_thsym.cpp
new file mode 100644
index 0000000000..ed46cd7228
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_thsym.cpp
@@ -0,0 +1,649 @@
+/*
+ File: err_symbols_ph_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_err_symbols_ph_th::TH_err_symbols_ph_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_err_symbols_ph_th;
+ NS_err_symbols_ph_th::Cerr_symbols_ph_th Cerr_symbols_ph_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cerr_symbols_ph_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_err_symbols_ph_th::PROC_TH_err_symbols_ph_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_err_symbols_ph_th";
+ static bool one_time(false);
+ static NS_err_symbols_ph_th::Cerr_symbols_ph_th* NS_err_symbols_ph_th_Cerr_symbols_ph_th_(0);// parallel-parser's fsm table
+ static Parser* NS_err_symbols_ph_th_Cerr_symbols_ph_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_err_symbols_ph_th_Cerr_symbols_ph_th_ = new NS_err_symbols_ph_th::Cerr_symbols_ph_th();// parallel-parser's fsm table
+ NS_err_symbols_ph_th_Cerr_symbols_ph_th_parser = new Parser(*NS_err_symbols_ph_th_Cerr_symbols_ph_th_,Caller_pp);
+ }
+ proc_parser = NS_err_symbols_ph_th_Cerr_symbols_ph_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cerr_symbols_ph_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rerror_symbols_phrase_:{
+ Rerror_symbols_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror_symbols_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror_symbols_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 7;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_defs_phrase_:{
+ Rsym_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rsym_defs_:{
+ Rsym_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsym_defs_:{
+ Rsym_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/err_symbols_ph_thtbl.cpp b/web/yacco2/compiler/grammars/err_symbols_ph_thtbl.cpp
new file mode 100644
index 0000000000..39e31931ff
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_ph_thtbl.cpp
@@ -0,0 +1,1429 @@
+/*
+ File: err_symbols_ph_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph_th;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cerr_symbols_ph_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cerr_symbols_ph_th[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA3_Cerr_symbols_ph_th[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA4_Cerr_symbols_ph_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_comma
+yacco2::UCHAR LA5_Cerr_symbols_ph_th[] ={
+2
+,0,1
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA6_Cerr_symbols_ph_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA7_Cerr_symbols_ph_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA8_Cerr_symbols_ph_th[] ={
+2
+,0,17
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_comma
+yacco2::UCHAR LA9_Cerr_symbols_ph_th[] ={
+2
+,0,17
+,6,16
+};
+extern yacco2::State S1_Cerr_symbols_ph_th;
+extern yacco2::State S2_Cerr_symbols_ph_th;
+struct S2ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Cerr_symbols_ph_th S2tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Cerr_symbols_ph_th;
+extern yacco2::State S4_Cerr_symbols_ph_th;
+extern yacco2::State S5_Cerr_symbols_ph_th;
+extern yacco2::State S6_Cerr_symbols_ph_th;
+extern yacco2::State S7_Cerr_symbols_ph_th;
+extern yacco2::State S8_Cerr_symbols_ph_th;
+extern yacco2::State S9_Cerr_symbols_ph_th;
+extern yacco2::State S10_Cerr_symbols_ph_th;
+extern yacco2::State S11_Cerr_symbols_ph_th;
+extern yacco2::State S12_Cerr_symbols_ph_th;
+extern yacco2::State S13_Cerr_symbols_ph_th;
+extern yacco2::State S14_Cerr_symbols_ph_th;
+extern yacco2::State S15_Cerr_symbols_ph_th;
+extern yacco2::State S16_Cerr_symbols_ph_th;
+extern yacco2::State S17_Cerr_symbols_ph_th;
+struct S17ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S17ttd_Cerr_symbols_ph_th S17tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S18_Cerr_symbols_ph_th;
+extern yacco2::State S19_Cerr_symbols_ph_th;
+extern yacco2::State S20_Cerr_symbols_ph_th;
+extern yacco2::State S21_Cerr_symbols_ph_th;
+extern yacco2::State S22_Cerr_symbols_ph_th;
+extern yacco2::State S23_Cerr_symbols_ph_th;
+extern yacco2::State S24_Cerr_symbols_ph_th;
+extern yacco2::State S25_Cerr_symbols_ph_th;
+extern yacco2::State S26_Cerr_symbols_ph_th;
+extern yacco2::State S27_Cerr_symbols_ph_th;
+extern yacco2::State S28_Cerr_symbols_ph_th;
+extern yacco2::State S29_Cerr_symbols_ph_th;
+extern yacco2::State S30_Cerr_symbols_ph_th;
+extern yacco2::State S31_Cerr_symbols_ph_th;
+extern yacco2::State S32_Cerr_symbols_ph_th;
+extern yacco2::State S33_Cerr_symbols_ph_th;
+extern yacco2::State S34_Cerr_symbols_ph_th;
+extern yacco2::State S35_Cerr_symbols_ph_th;
+extern yacco2::State S36_Cerr_symbols_ph_th;
+struct S36ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S36ttd_Cerr_symbols_ph_th S36tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S37_Cerr_symbols_ph_th;
+extern yacco2::State S38_Cerr_symbols_ph_th;
+extern yacco2::State S39_Cerr_symbols_ph_th;
+extern yacco2::State S40_Cerr_symbols_ph_th;
+extern yacco2::State S41_Cerr_symbols_ph_th;
+extern yacco2::State S42_Cerr_symbols_ph_th;
+extern yacco2::State S43_Cerr_symbols_ph_th;
+extern yacco2::State S44_Cerr_symbols_ph_th;
+extern yacco2::State S45_Cerr_symbols_ph_th;
+struct S45ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S45ttd_Cerr_symbols_ph_th S45tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S46_Cerr_symbols_ph_th;
+extern yacco2::State S47_Cerr_symbols_ph_th;
+extern yacco2::State S48_Cerr_symbols_ph_th;
+extern yacco2::State S49_Cerr_symbols_ph_th;
+extern yacco2::State S50_Cerr_symbols_ph_th;
+extern yacco2::State S51_Cerr_symbols_ph_th;
+extern yacco2::State S52_Cerr_symbols_ph_th;
+extern yacco2::State S53_Cerr_symbols_ph_th;
+extern yacco2::State S54_Cerr_symbols_ph_th;
+extern yacco2::State S55_Cerr_symbols_ph_th;
+extern yacco2::State S56_Cerr_symbols_ph_th;
+struct S56ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S56ttd_Cerr_symbols_ph_th S56tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S57_Cerr_symbols_ph_th;
+extern yacco2::State S58_Cerr_symbols_ph_th;
+extern yacco2::State S59_Cerr_symbols_ph_th;
+extern yacco2::State S60_Cerr_symbols_ph_th;
+extern yacco2::State S61_Cerr_symbols_ph_th;
+extern yacco2::State S62_Cerr_symbols_ph_th;
+struct S62ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S62ttd_Cerr_symbols_ph_th S62tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S63_Cerr_symbols_ph_th;
+extern yacco2::State S64_Cerr_symbols_ph_th;
+extern yacco2::State S65_Cerr_symbols_ph_th;
+extern yacco2::State S66_Cerr_symbols_ph_th;
+extern yacco2::State S67_Cerr_symbols_ph_th;
+struct S67ttd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S67ttd_Cerr_symbols_ph_th S67tt_Cerr_symbols_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S68_Cerr_symbols_ph_th;
+extern yacco2::State S69_Cerr_symbols_ph_th;
+struct S1std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cerr_symbols_ph_th S1st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cerr_symbols_ph_th} // accept sym: Rerror_symbols_phrase
+ ,{585,(State*)&S4_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S1rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cerr_symbols_ph_th S1rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Cerr_symbols_ph_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S1st_Cerr_symbols_ph_th,(Reduce_tbl*)&S1rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S2std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cerr_symbols_ph_th S2st_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Cerr_symbols_ph_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cerr_symbols_ph_th,0,0,0,0};
+struct S3rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cerr_symbols_ph_th S3rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Cerr_symbols_ph_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cerr_symbols_ph_th,0,0,0};
+struct S4std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cerr_symbols_ph_th S4st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S25_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S26_Cerr_symbols_ph_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_Cerr_symbols_ph_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Cerr_symbols_ph_th = {0,(State*)&S25_Cerr_symbols_ph_th};
+yacco2::State S4_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cerr_symbols_ph_th,0,0,0,(Shift_entry*)&S4qse_Cerr_symbols_ph_th
+};
+struct S5std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Cerr_symbols_ph_th S5st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_Cerr_symbols_ph_th} // shift sym: Rparameters
+ ,{585,(State*)&S27_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S5rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cerr_symbols_ph_th S5rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Cerr_symbols_ph_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S5st_Cerr_symbols_ph_th,(Reduce_tbl*)&S5rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S6std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cerr_symbols_ph_th S6st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S42_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S43_Cerr_symbols_ph_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S7_Cerr_symbols_ph_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Cerr_symbols_ph_th = {0,(State*)&S42_Cerr_symbols_ph_th};
+yacco2::State S6_Cerr_symbols_ph_th = //State's vectored into symbol: "Rparameters"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cerr_symbols_ph_th,0,0,0,(Shift_entry*)&S6qse_Cerr_symbols_ph_th
+};
+struct S7std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Cerr_symbols_ph_th S7st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S8_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S7rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cerr_symbols_ph_th S7rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Cerr_symbols_ph_th = //State's vectored into symbol: "Rclose_par"
+{7
+,(Shift_entry*)&S7pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S7st_Cerr_symbols_ph_th,(Reduce_tbl*)&S7rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S8std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Cerr_symbols_ph_th S8st_Cerr_symbols_ph_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S9_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S10_Cerr_symbols_ph_th} // shift sym: raw_open_brace
+ ,{579,(State*)&S11_Cerr_symbols_ph_th} // shift sym: Rsym_defs_phrase
+ ,{583,(State*)&S13_Cerr_symbols_ph_th} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Cerr_symbols_ph_th = {0,(State*)&S9_Cerr_symbols_ph_th};
+yacco2::State S8_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cerr_symbols_ph_th,0,0,0,(Shift_entry*)&S8qse_Cerr_symbols_ph_th
+};
+struct S9rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cerr_symbols_ph_th S9rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S9_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cerr_symbols_ph_th,0,0,0};
+struct S10rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cerr_symbols_ph_th S10rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S10_Cerr_symbols_ph_th = //State's vectored into symbol: "{"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cerr_symbols_ph_th,0,0,0};
+struct S11std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Cerr_symbols_ph_th S11st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S12_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S11rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cerr_symbols_ph_th S11rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Cerr_symbols_ph_th = //State's vectored into symbol: "Rsym_defs_phrase"
+{11
+,(Shift_entry*)&S11pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S11st_Cerr_symbols_ph_th,(Reduce_tbl*)&S11rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S12rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cerr_symbols_ph_th S12rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rerror_symbols_phrase_}
+ }// end of reduce table
+};
+yacco2::State S12_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cerr_symbols_ph_th,0,0,0};
+struct S13std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S13std_Cerr_symbols_ph_th S13st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S14_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S13pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S13rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cerr_symbols_ph_th S13rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S13_Cerr_symbols_ph_th = //State's vectored into symbol: "Ropen_brace"
+{13
+,(Shift_entry*)&S13pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S13st_Cerr_symbols_ph_th,(Reduce_tbl*)&S13rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S14std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S14std_Cerr_symbols_ph_th S14st_Cerr_symbols_ph_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S44_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S45_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S15_Cerr_symbols_ph_th} // shift sym: Rsym_defs
+ ,{581,(State*)&S53_Cerr_symbols_ph_th} // shift sym: Rsym_def
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Cerr_symbols_ph_th = {3,(State*)&S45_Cerr_symbols_ph_th};
+yacco2::Shift_entry S14qse_Cerr_symbols_ph_th = {0,(State*)&S44_Cerr_symbols_ph_th};
+yacco2::State S14_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{14
+,(Shift_entry*)&S14pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S14st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S45tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S14qse_Cerr_symbols_ph_th
+};
+struct S15std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S15std_Cerr_symbols_ph_th S15st_Cerr_symbols_ph_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S16_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S17_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{133,(State*)&S23_Cerr_symbols_ph_th} // shift sym: raw_close_brace
+ ,{582,(State*)&S51_Cerr_symbols_ph_th} // shift sym: Rsym_def1
+ ,{584,(State*)&S24_Cerr_symbols_ph_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Cerr_symbols_ph_th = {3,(State*)&S17_Cerr_symbols_ph_th};
+yacco2::Shift_entry S15qse_Cerr_symbols_ph_th = {0,(State*)&S16_Cerr_symbols_ph_th};
+yacco2::State S15_Cerr_symbols_ph_th = //State's vectored into symbol: "Rsym_defs"
+{15
+,(Shift_entry*)&S15pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S15st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S17tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S15qse_Cerr_symbols_ph_th
+};
+struct S16rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cerr_symbols_ph_th S16rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S16_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cerr_symbols_ph_th,0,0,0};
+struct S17std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S17std_Cerr_symbols_ph_th S17st_Cerr_symbols_ph_th = {
+ 5
+ ,
+ {// start of table
+ {6,(State*)&S18_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{319,(State*)&S19_Cerr_symbols_ph_th} // shift sym: T_terminals_refs
+ ,{320,(State*)&S20_Cerr_symbols_ph_th} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S21_Cerr_symbols_ph_th} // shift sym: T_lrk_sufx
+ ,{331,(State*)&S22_Cerr_symbols_ph_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S17ase_Cerr_symbols_ph_th = {6,(State*)&S18_Cerr_symbols_ph_th};
+yacco2::State S17_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{17
+,0,(Shift_entry*)&S17ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S17st_Cerr_symbols_ph_th,0,0,0,0};
+struct S18rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cerr_symbols_ph_th S18rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs5_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S18_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cerr_symbols_ph_th,0,0,0};
+struct S19rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cerr_symbols_ph_th S19rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S19_Cerr_symbols_ph_th = //State's vectored into symbol: "#terminals-refs"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cerr_symbols_ph_th,0,0,0};
+struct S20rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cerr_symbols_ph_th S20rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs4_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S20_Cerr_symbols_ph_th = //State's vectored into symbol: "#terminals-sufx"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cerr_symbols_ph_th,0,0,0};
+struct S21rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cerr_symbols_ph_th S21rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S21_Cerr_symbols_ph_th = //State's vectored into symbol: "#lrk-sufx"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cerr_symbols_ph_th,0,0,0};
+struct S22rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cerr_symbols_ph_th S22rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S22_Cerr_symbols_ph_th = //State's vectored into symbol: "terminal-def"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cerr_symbols_ph_th,0,0,0};
+struct S23rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cerr_symbols_ph_th S23rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S23_Cerr_symbols_ph_th = //State's vectored into symbol: "}"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cerr_symbols_ph_th,0,0,0};
+struct S24rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cerr_symbols_ph_th S24rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rsym_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S24_Cerr_symbols_ph_th = //State's vectored into symbol: "Rclose_brace"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cerr_symbols_ph_th,0,0,0};
+struct S25rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cerr_symbols_ph_th S25rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S25_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cerr_symbols_ph_th,0,0,0};
+struct S26rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cerr_symbols_ph_th S26rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S26_Cerr_symbols_ph_th = //State's vectored into symbol: "("
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cerr_symbols_ph_th,0,0,0};
+struct S27std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S27std_Cerr_symbols_ph_th S27st_Cerr_symbols_ph_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S55_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S56_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S28_Cerr_symbols_ph_th} // shift sym: Rfilename_phrase
+ ,{574,(State*)&S59_Cerr_symbols_ph_th} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S27pse_Cerr_symbols_ph_th = {3,(State*)&S56_Cerr_symbols_ph_th};
+yacco2::Shift_entry S27qse_Cerr_symbols_ph_th = {0,(State*)&S55_Cerr_symbols_ph_th};
+yacco2::State S27_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{27
+,(Shift_entry*)&S27pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S27st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S56tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S27qse_Cerr_symbols_ph_th
+};
+struct S28std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Cerr_symbols_ph_th S28st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S29_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S28rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cerr_symbols_ph_th S28rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S28_Cerr_symbols_ph_th = //State's vectored into symbol: "Rfilename_phrase"
+{28
+,(Shift_entry*)&S28pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S28st_Cerr_symbols_ph_th,(Reduce_tbl*)&S28rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S29std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S29std_Cerr_symbols_ph_th S29st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S30_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S31_Cerr_symbols_ph_th} // shift sym: raw_comma
+ ,{576,(State*)&S40_Cerr_symbols_ph_th} // shift sym: Rnamespace_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S29qse_Cerr_symbols_ph_th = {0,(State*)&S30_Cerr_symbols_ph_th};
+yacco2::State S29_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cerr_symbols_ph_th,0,0,0,(Shift_entry*)&S29qse_Cerr_symbols_ph_th
+};
+struct S30rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cerr_symbols_ph_th S30rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S30_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cerr_symbols_ph_th,0,0,0};
+struct S31std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S31std_Cerr_symbols_ph_th S31st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S32_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S31pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S31rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cerr_symbols_ph_th S31rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S31_Cerr_symbols_ph_th = //State's vectored into symbol: ","
+{31
+,(Shift_entry*)&S31pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S31st_Cerr_symbols_ph_th,(Reduce_tbl*)&S31rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S32std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S32std_Cerr_symbols_ph_th S32st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S66_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S67_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S33_Cerr_symbols_ph_th} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_Cerr_symbols_ph_th = {3,(State*)&S67_Cerr_symbols_ph_th};
+yacco2::Shift_entry S32qse_Cerr_symbols_ph_th = {0,(State*)&S66_Cerr_symbols_ph_th};
+yacco2::State S32_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{32
+,(Shift_entry*)&S32pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S32st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S67tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S32qse_Cerr_symbols_ph_th
+};
+struct S33std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S33std_Cerr_symbols_ph_th S33st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S34_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S33rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cerr_symbols_ph_th S33rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S33_Cerr_symbols_ph_th = //State's vectored into symbol: "Rnamespace"
+{33
+,(Shift_entry*)&S33pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S33st_Cerr_symbols_ph_th,(Reduce_tbl*)&S33rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S34std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Cerr_symbols_ph_th S34st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S35_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S36_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S39_Cerr_symbols_ph_th} // shift sym: Rnamespace_id
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Cerr_symbols_ph_th = {3,(State*)&S36_Cerr_symbols_ph_th};
+yacco2::Shift_entry S34qse_Cerr_symbols_ph_th = {0,(State*)&S35_Cerr_symbols_ph_th};
+yacco2::State S34_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{34
+,(Shift_entry*)&S34pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S34st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S36tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S34qse_Cerr_symbols_ph_th
+};
+struct S35rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cerr_symbols_ph_th S35rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S35_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cerr_symbols_ph_th,0,0,0};
+struct S36std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S36std_Cerr_symbols_ph_th S36st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S37_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{279,(State*)&S38_Cerr_symbols_ph_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S36ase_Cerr_symbols_ph_th = {6,(State*)&S37_Cerr_symbols_ph_th};
+yacco2::State S36_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{36
+,0,(Shift_entry*)&S36ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S36st_Cerr_symbols_ph_th,0,0,0,0};
+struct S37rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cerr_symbols_ph_th S37rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S37_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cerr_symbols_ph_th,0,0,0};
+struct S38rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cerr_symbols_ph_th S38rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S38_Cerr_symbols_ph_th = //State's vectored into symbol: "identifier"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cerr_symbols_ph_th,0,0,0};
+struct S39rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cerr_symbols_ph_th S39rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S39_Cerr_symbols_ph_th = //State's vectored into symbol: "Rnamespace_id"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cerr_symbols_ph_th,0,0,0};
+struct S40std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S40std_Cerr_symbols_ph_th S40st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S41_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S40pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S40rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cerr_symbols_ph_th S40rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S40_Cerr_symbols_ph_th = //State's vectored into symbol: "Rnamespace_phrase"
+{40
+,(Shift_entry*)&S40pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S40st_Cerr_symbols_ph_th,(Reduce_tbl*)&S40rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S41rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cerr_symbols_ph_th S41rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S41_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cerr_symbols_ph_th,0,0,0};
+struct S42rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cerr_symbols_ph_th S42rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S42_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cerr_symbols_ph_th,0,0,0};
+struct S43rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cerr_symbols_ph_th S43rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S43_Cerr_symbols_ph_th = //State's vectored into symbol: ")"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cerr_symbols_ph_th,0,0,0};
+struct S44rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cerr_symbols_ph_th S44rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs6_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S44_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cerr_symbols_ph_th,0,0,0};
+struct S45std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S45std_Cerr_symbols_ph_th S45st_Cerr_symbols_ph_th = {
+ 5
+ ,
+ {// start of table
+ {6,(State*)&S46_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{319,(State*)&S47_Cerr_symbols_ph_th} // shift sym: T_terminals_refs
+ ,{320,(State*)&S48_Cerr_symbols_ph_th} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S49_Cerr_symbols_ph_th} // shift sym: T_lrk_sufx
+ ,{331,(State*)&S50_Cerr_symbols_ph_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S45ase_Cerr_symbols_ph_th = {6,(State*)&S46_Cerr_symbols_ph_th};
+yacco2::State S45_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{45
+,0,(Shift_entry*)&S45ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S45st_Cerr_symbols_ph_th,0,0,0,0};
+struct S46rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cerr_symbols_ph_th S46rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S46_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cerr_symbols_ph_th,0,0,0};
+struct S47rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cerr_symbols_ph_th S47rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs4_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S47_Cerr_symbols_ph_th = //State's vectored into symbol: "#terminals-refs"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cerr_symbols_ph_th,0,0,0};
+struct S48rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cerr_symbols_ph_th S48rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs5_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S48_Cerr_symbols_ph_th = //State's vectored into symbol: "#terminals-sufx"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cerr_symbols_ph_th,0,0,0};
+struct S49rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cerr_symbols_ph_th S49rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S49_Cerr_symbols_ph_th = //State's vectored into symbol: "#lrk-sufx"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cerr_symbols_ph_th,0,0,0};
+struct S50rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cerr_symbols_ph_th S50rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S50_Cerr_symbols_ph_th = //State's vectored into symbol: "terminal-def"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cerr_symbols_ph_th,0,0,0};
+struct S51std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S51std_Cerr_symbols_ph_th S51st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S52_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S51pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S51rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cerr_symbols_ph_th S51rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S51_Cerr_symbols_ph_th = //State's vectored into symbol: "Rsym_def1"
+{51
+,(Shift_entry*)&S51pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S51st_Cerr_symbols_ph_th,(Reduce_tbl*)&S51rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S52rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cerr_symbols_ph_th S52rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rsym_defs_}
+ }// end of reduce table
+};
+yacco2::State S52_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cerr_symbols_ph_th,0,0,0};
+struct S53std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S53std_Cerr_symbols_ph_th S53st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S54_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S53pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S53rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cerr_symbols_ph_th S53rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S53_Cerr_symbols_ph_th = //State's vectored into symbol: "Rsym_def"
+{53
+,(Shift_entry*)&S53pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S53st_Cerr_symbols_ph_th,(Reduce_tbl*)&S53rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S54rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cerr_symbols_ph_th S54rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rsym_defs_}
+ }// end of reduce table
+};
+yacco2::State S54_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Cerr_symbols_ph_th,0,0,0};
+struct S55rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cerr_symbols_ph_th S55rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S55_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cerr_symbols_ph_th,0,0,0};
+struct S56std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S56std_Cerr_symbols_ph_th S56st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S57_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{303,(State*)&S58_Cerr_symbols_ph_th} // shift sym: T_file_name
+ }// end of shift table
+};
+yacco2::Shift_entry S56ase_Cerr_symbols_ph_th = {6,(State*)&S57_Cerr_symbols_ph_th};
+yacco2::State S56_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{56
+,0,(Shift_entry*)&S56ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S56st_Cerr_symbols_ph_th,0,0,0,0};
+struct S57rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cerr_symbols_ph_th S57rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S57_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cerr_symbols_ph_th,0,0,0};
+struct S58rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cerr_symbols_ph_th S58rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S58_Cerr_symbols_ph_th = //State's vectored into symbol: "#file-name"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Cerr_symbols_ph_th,0,0,0};
+struct S59std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S59std_Cerr_symbols_ph_th S59st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S60_Cerr_symbols_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S59pse_Cerr_symbols_ph_th = {3,(State*)&S2_Cerr_symbols_ph_th};
+struct S59rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cerr_symbols_ph_th S59rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S59_Cerr_symbols_ph_th = //State's vectored into symbol: "Rfilename"
+{59
+,(Shift_entry*)&S59pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S59st_Cerr_symbols_ph_th,(Reduce_tbl*)&S59rt_Cerr_symbols_ph_th,(State_s_thread_tbl*)&S2tt_Cerr_symbols_ph_th,0,0};
+struct S60std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S60std_Cerr_symbols_ph_th S60st_Cerr_symbols_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S61_Cerr_symbols_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S62_Cerr_symbols_ph_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S65_Cerr_symbols_ph_th} // shift sym: Rfilename_id
+ }// end of shift table
+};
+yacco2::Shift_entry S60pse_Cerr_symbols_ph_th = {3,(State*)&S62_Cerr_symbols_ph_th};
+yacco2::Shift_entry S60qse_Cerr_symbols_ph_th = {0,(State*)&S61_Cerr_symbols_ph_th};
+yacco2::State S60_Cerr_symbols_ph_th = //State's vectored into symbol: "Rlint"
+{60
+,(Shift_entry*)&S60pse_Cerr_symbols_ph_th,0,0,0,(Shift_tbl*)&S60st_Cerr_symbols_ph_th,0,(State_s_thread_tbl*)&S62tt_Cerr_symbols_ph_th,0,(Shift_entry*)&S60qse_Cerr_symbols_ph_th
+};
+struct S61rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cerr_symbols_ph_th S61rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S61_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cerr_symbols_ph_th,0,0,0};
+struct S62std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S62std_Cerr_symbols_ph_th S62st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S63_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{279,(State*)&S64_Cerr_symbols_ph_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S62ase_Cerr_symbols_ph_th = {6,(State*)&S63_Cerr_symbols_ph_th};
+yacco2::State S62_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{62
+,0,(Shift_entry*)&S62ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S62st_Cerr_symbols_ph_th,0,0,0,0};
+struct S63rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cerr_symbols_ph_th S63rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S63_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cerr_symbols_ph_th,0,0,0};
+struct S64rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cerr_symbols_ph_th S64rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S64_Cerr_symbols_ph_th = //State's vectored into symbol: "identifier"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Cerr_symbols_ph_th,0,0,0};
+struct S65rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cerr_symbols_ph_th S65rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S65_Cerr_symbols_ph_th = //State's vectored into symbol: "Rfilename_id"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Cerr_symbols_ph_th,0,0,0};
+struct S66rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Cerr_symbols_ph_th S66rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs3_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S66_Cerr_symbols_ph_th = //State's vectored into symbol: "|?|"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Cerr_symbols_ph_th,0,0,0};
+struct S67std_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S67std_Cerr_symbols_ph_th S67st_Cerr_symbols_ph_th = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S68_Cerr_symbols_ph_th} // shift sym: LR1_all_shift_operator
+ ,{304,(State*)&S69_Cerr_symbols_ph_th} // shift sym: T_name_space
+ }// end of shift table
+};
+yacco2::Shift_entry S67ase_Cerr_symbols_ph_th = {6,(State*)&S68_Cerr_symbols_ph_th};
+yacco2::State S67_Cerr_symbols_ph_th = //State's vectored into symbol: "|||"
+{67
+,0,(Shift_entry*)&S67ase_Cerr_symbols_ph_th
+,0,0,(Shift_tbl*)&S67st_Cerr_symbols_ph_th,0,0,0,0};
+struct S68rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cerr_symbols_ph_th S68rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S68_Cerr_symbols_ph_th = //State's vectored into symbol: "|+|"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cerr_symbols_ph_th,0,0,0};
+struct S69rtd_Cerr_symbols_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cerr_symbols_ph_th S69rt_Cerr_symbols_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cerr_symbols_ph_th,Cerr_symbols_ph_th::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S69_Cerr_symbols_ph_th = //State's vectored into symbol: "#name-space"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Cerr_symbols_ph_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/err_symbols_phsym.cpp b/web/yacco2/compiler/grammars/err_symbols_phsym.cpp
new file mode 100644
index 0000000000..c206022556
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_phsym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: err_symbols_phsym.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cerr_symbols_ph::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rerror_symbols_phrase_:{
+ Rerror_symbols_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror_symbols_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror_symbols_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/err_symbols_phtbl.cpp b/web/yacco2/compiler/grammars/err_symbols_phtbl.cpp
new file mode 100644
index 0000000000..b705a7eebd
--- /dev/null
+++ b/web/yacco2/compiler/grammars/err_symbols_phtbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: err_symbols_phtbl.cpp
+ Date and Time: Fri Jan 30 18:55:10 2015
+*/
+#include "err_symbols_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_err_symbols_ph;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cerr_symbols_ph[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cerr_symbols_ph;
+extern yacco2::State S2_Cerr_symbols_ph;
+extern yacco2::State S3_Cerr_symbols_ph;
+struct S3ttd_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Cerr_symbols_ph S3tt_Cerr_symbols_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_err_symbols_ph_th
+};
+extern yacco2::State S4_Cerr_symbols_ph;
+extern yacco2::State S5_Cerr_symbols_ph;
+extern yacco2::State S6_Cerr_symbols_ph;
+struct S1std_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cerr_symbols_ph S1st_Cerr_symbols_ph = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Cerr_symbols_ph} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Cerr_symbols_ph} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cerr_symbols_ph} // accept sym: Rerror_symbols_phrase
+ ,{570,(State*)&S6_Cerr_symbols_ph} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cerr_symbols_ph = {3,(State*)&S3_Cerr_symbols_ph};
+yacco2::Shift_entry S1qse_Cerr_symbols_ph = {0,(State*)&S2_Cerr_symbols_ph};
+yacco2::State S1_Cerr_symbols_ph = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cerr_symbols_ph,0,0,0,(Shift_tbl*)&S1st_Cerr_symbols_ph,0,(State_s_thread_tbl*)&S3tt_Cerr_symbols_ph,0,(Shift_entry*)&S1qse_Cerr_symbols_ph
+};
+struct S2rtd_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cerr_symbols_ph S2rt_Cerr_symbols_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph,Cerr_symbols_ph::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Cerr_symbols_ph = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cerr_symbols_ph,0,0,0};
+struct S3std_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cerr_symbols_ph S3st_Cerr_symbols_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Cerr_symbols_ph} // shift sym: LR1_questionable_shift_operator
+ ,{335,(State*)&S5_Cerr_symbols_ph} // shift sym: T_error_symbols_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cerr_symbols_ph = {0,(State*)&S4_Cerr_symbols_ph};
+yacco2::State S3_Cerr_symbols_ph = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cerr_symbols_ph,0,0,0,(Shift_entry*)&S3qse_Cerr_symbols_ph
+};
+struct S4rtd_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cerr_symbols_ph S4rt_Cerr_symbols_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph,Cerr_symbols_ph::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Cerr_symbols_ph = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cerr_symbols_ph,0,0,0};
+struct S5rtd_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cerr_symbols_ph S5rt_Cerr_symbols_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph,Cerr_symbols_ph::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Cerr_symbols_ph = //State's vectored into symbol: "error-symbols-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cerr_symbols_ph,0,0,0};
+struct S6rtd_Cerr_symbols_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cerr_symbols_ph S6rt_Cerr_symbols_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cerr_symbols_ph,Cerr_symbols_ph::rhs1_Rerror_symbols_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Cerr_symbols_ph = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cerr_symbols_ph,0,0,0};
diff --git a/web/yacco2/compiler/grammars/esc_seq.cpp b/web/yacco2/compiler/grammars/esc_seq.cpp
new file mode 100644
index 0000000000..7fed3a7ac2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seq.cpp
@@ -0,0 +1,432 @@
+/*
+ File: esc_seq.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "esc_seq.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_esc_seq;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 17;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+}
+ Cesc_seq::
+ Cesc_seq()
+ :yacco2::CAbs_fsm
+ ("esc_seq.lex"
+ ,"1.0"
+ ,"25 Juin 2003"
+ ,false
+ ,"C type escape sequence recognizer."
+ ,"Fri Jan 30 18:55:11 2015 "
+ ,S1_Cesc_seq){
+
+ }
+
+Cesc_seq::~Cesc_seq(){
+
+ for(int x = 0;x < 17;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cesc_seq::failed(){
+ return false;
+ }
+ void Cesc_seq::op(){
+ parser__->set_use_all_shift_on();
+ data_.clear();
+
+}
+int Cesc_seq::rhs_to_rules_mapping_[65] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,1 // subrule 6 for rule 2
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,3 // subrule 19 for rule 4
+ ,4 // subrule 20 for rule 5
+ ,5 // subrule 21 for rule 6
+ ,6 // subrule 22 for rule 7
+ ,7 // subrule 23 for rule 8
+ ,8 // subrule 24 for rule 9
+ ,8 // subrule 25 for rule 9
+ ,9 // subrule 26 for rule 10
+ ,10 // subrule 27 for rule 11
+ ,11 // subrule 28 for rule 12
+ ,11 // subrule 29 for rule 12
+ ,12 // subrule 30 for rule 13
+ ,12 // subrule 31 for rule 13
+ ,13 // subrule 32 for rule 14
+ ,13 // subrule 33 for rule 14
+ ,13 // subrule 34 for rule 14
+ ,13 // subrule 35 for rule 14
+ ,13 // subrule 36 for rule 14
+ ,13 // subrule 37 for rule 14
+ ,13 // subrule 38 for rule 14
+ ,13 // subrule 39 for rule 14
+ ,13 // subrule 40 for rule 14
+ ,13 // subrule 41 for rule 14
+ ,14 // subrule 42 for rule 15
+ ,14 // subrule 43 for rule 15
+ ,14 // subrule 44 for rule 15
+ ,14 // subrule 45 for rule 15
+ ,14 // subrule 46 for rule 15
+ ,14 // subrule 47 for rule 15
+ ,14 // subrule 48 for rule 15
+ ,14 // subrule 49 for rule 15
+ ,14 // subrule 50 for rule 15
+ ,14 // subrule 51 for rule 15
+ ,14 // subrule 52 for rule 15
+ ,14 // subrule 53 for rule 15
+ ,15 // subrule 54 for rule 16
+ ,15 // subrule 55 for rule 16
+ ,15 // subrule 56 for rule 16
+ ,16 // subrule 57 for rule 17
+ ,16 // subrule 58 for rule 17
+ ,16 // subrule 59 for rule 17
+ ,16 // subrule 60 for rule 17
+ ,16 // subrule 61 for rule 17
+ ,16 // subrule 62 for rule 17
+ ,16 // subrule 63 for rule 17
+ ,16 // subrule 64 for rule 17
+};
+
+ yacco2::CAbs_lr1_sym* Cesc_seq::chk_for_overrun(){
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: break;
+ case T_Enum::T_raw_cr_: break;
+ case T_Enum::T_T_eol_: break;
+ case T_Enum::T_LR1_eog_: break;
+ default: return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_off();
+ return sym;
+ }
+
+Resc_seq::Resc_seq(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Resc_seq",0,Cesc_seq::R_Resc_seq_,P,false,false){
+}
+
+void Resc_seq::op(){
+ sstrace_rulesss
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_esc_seq(fsm->data_.c_str());
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+
+}
+void Resc_seq::sr2(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += '\\';
+ fsm->data_ += fsm->octal_data_.c_str();
+
+}
+
+void Resc_seq::sr3(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += fsm->hex_data_.c_str();
+
+}
+
+Rslash::Rslash(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rslash",0,Cesc_seq::R_Rslash_,P,false,false){
+}
+
+void Rslash::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = fsm->chk_for_overrun();
+ if(sym == 0) return;
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rliteral::Rliteral(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rliteral",0,Cesc_seq::R_Rliteral_,P,false,false){
+}
+
+void Rliteral::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_ += 'n';
+
+}
+
+void Rliteral::sr2(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='t';
+
+}
+
+void Rliteral::sr3(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='v';
+
+}
+
+void Rliteral::sr4(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='b';
+
+}
+
+void Rliteral::sr5(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='r';
+
+}
+
+void Rliteral::sr6(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='f';
+
+}
+
+void Rliteral::sr7(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='a';
+
+}
+
+void Rliteral::sr8(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+="\\";
+
+}
+
+void Rliteral::sr9(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='?';
+
+}
+
+void Rliteral::sr10(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+="'";
+
+}
+
+void Rliteral::sr11(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='"';
+
+}
+
+void Rliteral::sr12(){
+
+ CAbs_lr1_sym* sym = new Err_bad_esc;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ruhex::Ruhex(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ruhex",0,Cesc_seq::R_Ruhex_,P,false,false){
+}
+
+Ru::Ru(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ru",0,Cesc_seq::R_Ru_,P,false,false){
+}
+
+void Ru::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'u';
+
+}
+
+RU::RU(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RU",0,Cesc_seq::R_RU_,P,false,false){
+}
+
+void RU::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'U';
+
+}
+
+Rx::Rx(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rx",0,Cesc_seq::R_Rx_,P,false,false){
+}
+
+void Rx::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'x';
+
+}
+
+RUhex::RUhex(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUhex",0,Cesc_seq::R_RUhex_,P,false,false){
+}
+
+Rmhex_no::Rmhex_no(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmhex_no",0,Cesc_seq::R_Rmhex_no_,P,false,false){
+}
+
+void Rmhex_no::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_bad_esc;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rcalc_hex_char::Rcalc_hex_char(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalc_hex_char",0,Cesc_seq::R_Rcalc_hex_char_,P,false,false){
+}
+
+void Rcalc_hex_char::sr1(){
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ unsigned long usl = strtoul(fsm->hex_data_.c_str(),0,16);
+ unsigned char c = usl;
+ fsm->data_ += "\\x";
+ fsm->data_ += c;
+ fsm->hex_data_.clear();
+
+}
+
+Rhex::Rhex(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rhex",0,Cesc_seq::R_Rhex_,P,false,false){
+}
+
+Rhex_nos::Rhex_nos(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rhex_nos",0,Cesc_seq::R_Rhex_nos_,P,false,false){
+}
+
+Rhex_no::Rhex_no(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rhex_no",0,Cesc_seq::R_Rhex_no_,P,false,false){
+}
+
+Rhex_no_digit::Rhex_no_digit(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rhex_no_digit",0,Cesc_seq::R_Rhex_no_digit_,P,false,false){
+}
+
+void Rhex_no_digit::op(){
+ sstrace_rulesss
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->hex_data_ += sym->id__;
+
+}
+Rhex_no_letter::Rhex_no_letter(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rhex_no_letter",0,Cesc_seq::R_Rhex_no_letter_,P,false,false){
+}
+
+void Rhex_no_letter::op(){
+ sstrace_rulesss
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->hex_data_ += sym->id__;
+
+}
+Roctal::Roctal(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Roctal",0,Cesc_seq::R_Roctal_,P,false,false){
+}
+
+Roctal_no::Roctal_no(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Roctal_no",0,Cesc_seq::R_Roctal_no_,P,false,false){
+}
+
+void Roctal_no::op(){
+ sstrace_rulesss
+
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->octal_data_ += sym->id__;
+
+}
diff --git a/web/yacco2/compiler/grammars/esc_seq.fsc b/web/yacco2/compiler/grammars/esc_seq.fsc
new file mode 100644
index 0000000000..4c513da3ed
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seq.fsc
@@ -0,0 +1,20 @@
+/*
+ File: esc_seq.fsc
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+transitive n
+grammar-name "esc_seq"
+name-space "NS_esc_seq"
+thread-name "TH_esc_seq"
+monolithic n
+file-name "esc_seq.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_back_slash
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"C type escape sequence recognizer."
diff --git a/web/yacco2/compiler/grammars/esc_seq.h b/web/yacco2/compiler/grammars/esc_seq.h
new file mode 100644
index 0000000000..ea249f188a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seq.h
@@ -0,0 +1,263 @@
+/*
+ File: esc_seq.h
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#ifndef __esc_seq_h__
+#define __esc_seq_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "stdlib.h"
+
+extern yacco2::Thread_entry ITH_esc_seq;
+
+extern yacco2::State S1_Cesc_seq;
+namespace NS_esc_seq {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_esc_seq(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_esc_seq(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[17];
+};
+class Cesc_seq: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Resc_seq_ = 569//start_of_rule_list + 0
+ ,rhs1_Resc_seq_ = 1
+ ,rhs2_Resc_seq_ = 2
+ ,rhs3_Resc_seq_ = 3
+ ,rhs4_Resc_seq_ = 4
+ ,rhs5_Resc_seq_ = 5
+ ,R_Rslash_ = 570//start_of_rule_list + 2
+ ,rhs1_Rslash_ = 6
+ ,R_Rliteral_ = 571//start_of_rule_list + 4
+ ,rhs1_Rliteral_ = 7
+ ,rhs2_Rliteral_ = 8
+ ,rhs3_Rliteral_ = 9
+ ,rhs4_Rliteral_ = 10
+ ,rhs5_Rliteral_ = 11
+ ,rhs6_Rliteral_ = 12
+ ,rhs7_Rliteral_ = 13
+ ,rhs8_Rliteral_ = 14
+ ,rhs9_Rliteral_ = 15
+ ,rhs10_Rliteral_ = 16
+ ,rhs11_Rliteral_ = 17
+ ,rhs12_Rliteral_ = 18
+ ,R_Ruhex_ = 572//start_of_rule_list + 6
+ ,rhs1_Ruhex_ = 19
+ ,R_Ru_ = 573//start_of_rule_list + 8
+ ,rhs1_Ru_ = 20
+ ,R_RU_ = 574//start_of_rule_list + 10
+ ,rhs1_RU_ = 21
+ ,R_Rx_ = 575//start_of_rule_list + 12
+ ,rhs1_Rx_ = 22
+ ,R_RUhex_ = 576//start_of_rule_list + 14
+ ,rhs1_RUhex_ = 23
+ ,R_Rmhex_no_ = 577//start_of_rule_list + 16
+ ,rhs1_Rmhex_no_ = 24
+ ,rhs2_Rmhex_no_ = 25
+ ,R_Rcalc_hex_char_ = 578//start_of_rule_list + 18
+ ,rhs1_Rcalc_hex_char_ = 26
+ ,R_Rhex_ = 579//start_of_rule_list + 20
+ ,rhs1_Rhex_ = 27
+ ,R_Rhex_nos_ = 580//start_of_rule_list + 22
+ ,rhs1_Rhex_nos_ = 28
+ ,rhs2_Rhex_nos_ = 29
+ ,R_Rhex_no_ = 581//start_of_rule_list + 24
+ ,rhs1_Rhex_no_ = 30
+ ,rhs2_Rhex_no_ = 31
+ ,R_Rhex_no_digit_ = 582//start_of_rule_list + 26
+ ,rhs1_Rhex_no_digit_ = 32
+ ,rhs2_Rhex_no_digit_ = 33
+ ,rhs3_Rhex_no_digit_ = 34
+ ,rhs4_Rhex_no_digit_ = 35
+ ,rhs5_Rhex_no_digit_ = 36
+ ,rhs6_Rhex_no_digit_ = 37
+ ,rhs7_Rhex_no_digit_ = 38
+ ,rhs8_Rhex_no_digit_ = 39
+ ,rhs9_Rhex_no_digit_ = 40
+ ,rhs10_Rhex_no_digit_ = 41
+ ,R_Rhex_no_letter_ = 583//start_of_rule_list + 28
+ ,rhs1_Rhex_no_letter_ = 42
+ ,rhs2_Rhex_no_letter_ = 43
+ ,rhs3_Rhex_no_letter_ = 44
+ ,rhs4_Rhex_no_letter_ = 45
+ ,rhs5_Rhex_no_letter_ = 46
+ ,rhs6_Rhex_no_letter_ = 47
+ ,rhs7_Rhex_no_letter_ = 48
+ ,rhs8_Rhex_no_letter_ = 49
+ ,rhs9_Rhex_no_letter_ = 50
+ ,rhs10_Rhex_no_letter_ = 51
+ ,rhs11_Rhex_no_letter_ = 52
+ ,rhs12_Rhex_no_letter_ = 53
+ ,R_Roctal_ = 584//start_of_rule_list + 30
+ ,rhs1_Roctal_ = 54
+ ,rhs2_Roctal_ = 55
+ ,rhs3_Roctal_ = 56
+ ,R_Roctal_no_ = 585//start_of_rule_list + 32
+ ,rhs1_Roctal_no_ = 57
+ ,rhs2_Roctal_no_ = 58
+ ,rhs3_Roctal_no_ = 59
+ ,rhs4_Roctal_no_ = 60
+ ,rhs5_Roctal_no_ = 61
+ ,rhs6_Roctal_no_ = 62
+ ,rhs7_Roctal_no_ = 63
+ ,rhs8_Roctal_no_ = 64
+ };
+ //no of la sets = 7
+ //no of states = 88
+ Cesc_seq();
+ ~Cesc_seq();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[65];
+
+ public:
+ yacco2::CAbs_lr1_sym* chk_for_overrun();
+ std::string data_;
+ std::string hex_data_;
+ std::string octal_data_;
+
+ };
+struct Resc_seq;
+struct Rslash;
+struct Rliteral;
+struct Ruhex;
+struct Ru;
+struct RU;
+struct Rx;
+struct RUhex;
+struct Rmhex_no;
+struct Rcalc_hex_char;
+struct Rhex;
+struct Rhex_nos;
+struct Rhex_no;
+struct Rhex_no_digit;
+struct Rhex_no_letter;
+struct Roctal;
+struct Roctal_no;
+struct Resc_seq:public yacco2::CAbs_lr1_sym {
+ Resc_seq(yacco2::Parser* P);
+ void op();
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rslash:public yacco2::CAbs_lr1_sym {
+ Rslash(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rliteral:public yacco2::CAbs_lr1_sym {
+ Rliteral(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+};
+
+struct Ruhex:public yacco2::CAbs_lr1_sym {
+ Ruhex(yacco2::Parser* P);
+ public:
+};
+
+struct Ru:public yacco2::CAbs_lr1_sym {
+ Ru(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RU:public yacco2::CAbs_lr1_sym {
+ RU(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rx:public yacco2::CAbs_lr1_sym {
+ Rx(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RUhex:public yacco2::CAbs_lr1_sym {
+ RUhex(yacco2::Parser* P);
+ public:
+};
+
+struct Rmhex_no:public yacco2::CAbs_lr1_sym {
+ Rmhex_no(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rcalc_hex_char:public yacco2::CAbs_lr1_sym {
+ Rcalc_hex_char(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rhex:public yacco2::CAbs_lr1_sym {
+ Rhex(yacco2::Parser* P);
+ public:
+};
+
+struct Rhex_nos:public yacco2::CAbs_lr1_sym {
+ Rhex_nos(yacco2::Parser* P);
+ public:
+};
+
+struct Rhex_no:public yacco2::CAbs_lr1_sym {
+ Rhex_no(yacco2::Parser* P);
+ public:
+};
+
+struct Rhex_no_digit:public yacco2::CAbs_lr1_sym {
+ Rhex_no_digit(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rhex_no_letter:public yacco2::CAbs_lr1_sym {
+ Rhex_no_letter(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Roctal:public yacco2::CAbs_lr1_sym {
+ Roctal(yacco2::Parser* P);
+ public:
+};
+
+struct Roctal_no:public yacco2::CAbs_lr1_sym {
+ Roctal_no(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/esc_seq.lex b/web/yacco2/compiler/grammars/esc_seq.lex
new file mode 100644
index 0000000000..91f7389177
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seq.lex
@@ -0,0 +1,361 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: esc_seq.lex
+Dates: 25 Juin 2003
+Purpose: escape sequence
+ Eg. \n or octal escape \127 or hex escape \xhhh... where h is a hex digit.
+Modified: 13 June 2005 - fully array of escape sequences including
+ \uhhhh, and \Uhhhhhhhh
+Returned: T_esc_seq
+ Err_bad_esc - bad escape sequence.
+ See Stroustrup - The C++ Programming Language P. 830
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |esc_seq| Thread.\fbreak
+Evaluates escape sequences but does not convert
+them into their binary form.
+The data is passed back as text for the caller to deal with it.
+For myself i'm dealing in text format not binary.
+The finite state tables are also
+emitted in c++ text form for a c++ compiler to digest.
+The variants cover the normal c++ backslash character literal like
+n or b, the octal and hexidecimal variations, and the unicode types.
+@/
+fsm
+(fsm-id "esc_seq.lex",fsm-filename esc_seq,fsm-namespace NS_esc_seq
+,fsm-class Cesc_seq {
+ user-prefix-declaration
+#include "stdlib.h"
+ ***
+ user-declaration
+ public:
+ yacco2::CAbs_lr1_sym* chk_for_overrun();
+ std::string data_;
+ std::string hex_data_;
+ std::string octal_data_;
+ ***
+ user-implementation
+ yacco2::CAbs_lr1_sym* Cesc_seq::chk_for_overrun(){
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: break;
+ case T_Enum::T_raw_cr_: break;
+ case T_Enum::T_T_eol_: break;
+ case T_Enum::T_LR1_eog_: break;
+ default: return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_off();
+ return sym;
+ }
+ ***
+ op
+ parser__->set_use_all_shift_on();
+ data_.clear();
+ ***
+}
+,fsm-version "1.0" ,fsm-date "25 Juin 2003"
+,fsm-debug "false" ,fsm-comments "C type escape sequence recognizer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_esc_seq
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Resc_seq (
+lhs{
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_esc_seq(fsm->data_.c_str());
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ ***
+ }
+){
+ -> Rslash Rliteral
+ -> Rslash Roctal |.| {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += '\\';
+ fsm->data_ += fsm->octal_data_.c_str();
+ ***
+ }
+ -> Rslash Rhex |.| {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += fsm->hex_data_.c_str();
+ ***
+ }
+ -> Rslash Ruhex |.|
+ -> Rslash RUhex |.|
+}
+
+Rslash () {
+ -> "\\" {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = fsm->chk_for_overrun();
+ if(sym == 0) return;
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rliteral (){
+ -> "n" {
+ /@
+ New line.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_ += 'n';
+ ***
+ }
+ -> "t" {
+ /@
+ Horizontal tab.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='t';
+ ***
+ }
+ -> "v" {
+ /@
+ Vertical tab.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='v';
+ ***
+ }
+ -> "b" {
+ /@
+ Backspace.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='b';
+ ***
+ }
+ -> "r" {
+ /@
+ Carriage return.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='r';
+ ***
+ }
+ -> "f" {
+ /@
+ Form feed.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='f';
+ ***
+ }
+ -> "a" {
+ /@
+ Alert or bell.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='a';
+ ***
+ }
+ -> "\\" {
+ /@
+ Backslash --- escaping the escape.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+="\\";
+ ***
+ }
+ -> "?" {
+ /@
+ Question mark.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='?';
+ ***
+ }
+ -> "'" {
+ /@
+ Single quote.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+="'";
+ ***
+ }
+ -> "\"" {
+ /@
+ Double quote.
+ @/
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+='"';
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_bad_esc;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ruhex () {
+ -> Ru Rmhex_no Rmhex_no Rcalc_hex_char
+ Rmhex_no Rmhex_no Rcalc_hex_char
+}
+
+Ru () {
+ -> "u" {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'u';
+ ***
+ }
+}
+
+RU () {
+ -> "U" {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'U';
+ ***
+ }
+}
+
+Rx () {
+ -> "x" {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += "\\";
+ fsm->data_+= 'x';
+ ***
+ }
+}
+
+RUhex () {
+ -> RU Rmhex_no Rmhex_no Rcalc_hex_char
+ Rmhex_no Rmhex_no Rcalc_hex_char
+ Rmhex_no Rmhex_no Rcalc_hex_char
+ Rmhex_no Rmhex_no Rcalc_hex_char
+}
+Rmhex_no () {
+ -> Rhex_no
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_bad_esc;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+Rcalc_hex_char () {
+ -> {
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ unsigned long usl = strtoul(fsm->hex_data_.c_str(),0,16);
+ unsigned char c = usl;
+ fsm->data_ += "\\x";
+ fsm->data_ += c;
+ fsm->hex_data_.clear();
+ ***
+ }
+}
+
+Rhex () {
+ -> Rx Rhex_nos
+}
+
+Rhex_nos () {
+ -> Rmhex_no
+ -> Rhex_nos Rhex_no
+}
+
+Rhex_no () {
+ -> Rhex_no_digit
+ -> Rhex_no_letter
+}
+
+Rhex_no_digit (
+lhs{
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->hex_data_ += sym->id__;
+ ***
+}
+) {
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+Rhex_no_letter (
+lhs{
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->hex_data_ += sym->id__;
+ ***
+}
+) {
+ -> a -> b -> c -> d -> e -> f
+ -> A -> B -> C -> D -> E -> F
+}
+
+Roctal () {
+ -> Roctal_no
+ -> Roctal_no Roctal_no
+ -> Roctal_no Roctal_no Roctal_no
+}
+
+Roctal_no (
+lhs{
+ op
+ Cesc_seq* fsm = (Cesc_seq*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->octal_data_ += sym->id__;
+ ***
+}
+) {
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/esc_seqsym.cpp b/web/yacco2/compiler/grammars/esc_seqsym.cpp
new file mode 100644
index 0000000000..0c843270ba
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seqsym.cpp
@@ -0,0 +1,999 @@
+/*
+ File: esc_seqsym.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "esc_seq.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_esc_seq;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_esc_seq::TH_esc_seq(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_esc_seq;
+ NS_esc_seq::Cesc_seq Cesc_seq_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cesc_seq_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_esc_seq::PROC_TH_esc_seq(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_esc_seq";
+ static bool one_time(false);
+ static NS_esc_seq::Cesc_seq* NS_esc_seq_Cesc_seq_(0);// parallel-parser's fsm table
+ static Parser* NS_esc_seq_Cesc_seq_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_esc_seq_Cesc_seq_ = new NS_esc_seq::Cesc_seq();// parallel-parser's fsm table
+ NS_esc_seq_Cesc_seq_parser = new Parser(*NS_esc_seq_Cesc_seq_,Caller_pp);
+ }
+ proc_parser = NS_esc_seq_Cesc_seq_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cesc_seq::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Resc_seq_:{
+ Resc_seq* sym;
+ if(re->rule_ == 0){
+ sym = new Resc_seq(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Resc_seq*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs2_Resc_seq_:{
+ Resc_seq* sym;
+ if(re->rule_ == 0){
+ sym = new Resc_seq(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Resc_seq*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Resc_seq_:{
+ Resc_seq* sym;
+ if(re->rule_ == 0){
+ sym = new Resc_seq(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Resc_seq*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Resc_seq_:{
+ Resc_seq* sym;
+ if(re->rule_ == 0){
+ sym = new Resc_seq(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Resc_seq*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs5_Resc_seq_:{
+ Resc_seq* sym;
+ if(re->rule_ == 0){
+ sym = new Resc_seq(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Resc_seq*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rslash_:{
+ Rslash* sym;
+ if(re->rule_ == 0){
+ sym = new Rslash(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rslash*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rliteral_:{
+ Rliteral* sym;
+ if(re->rule_ == 0){
+ sym = new Rliteral(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rliteral*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr12();
+ return;}
+ case rhs1_Ruhex_:{
+ Ruhex* sym;
+ if(re->rule_ == 0){
+ sym = new Ruhex(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ruhex*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 7;
+
+
+ return;}
+ case rhs1_Ru_:{
+ Ru* sym;
+ if(re->rule_ == 0){
+ sym = new Ru(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ru*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_RU_:{
+ RU* sym;
+ if(re->rule_ == 0){
+ sym = new RU(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RU*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rx_:{
+ Rx* sym;
+ if(re->rule_ == 0){
+ sym = new Rx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_RUhex_:{
+ RUhex* sym;
+ if(re->rule_ == 0){
+ sym = new RUhex(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUhex*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 13;
+
+
+ return;}
+ case rhs1_Rmhex_no_:{
+ Rmhex_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rmhex_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmhex_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmhex_no_:{
+ Rmhex_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rmhex_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmhex_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rcalc_hex_char_:{
+ Rcalc_hex_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalc_hex_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalc_hex_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rhex_:{
+ Rhex* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rhex_nos_:{
+ Rhex_nos* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_nos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_nos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rhex_nos_:{
+ Rhex_nos* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_nos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_nos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rhex_no_:{
+ Rhex_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rhex_no_:{
+ Rhex_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rhex_no_digit_:{
+ Rhex_no_digit* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_digit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_digit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_Rhex_no_letter_:{
+ Rhex_no_letter* sym;
+ if(re->rule_ == 0){
+ sym = new Rhex_no_letter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rhex_no_letter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Roctal_:{
+ Roctal* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Roctal_:{
+ Roctal* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Roctal_:{
+ Roctal* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Roctal_no_:{
+ Roctal_no* sym;
+ if(re->rule_ == 0){
+ sym = new Roctal_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Roctal_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/esc_seqtbl.cpp b/web/yacco2/compiler/grammars/esc_seqtbl.cpp
new file mode 100644
index 0000000000..9ca5928b4a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/esc_seqtbl.cpp
@@ -0,0 +1,2034 @@
+/*
+ File: esc_seqtbl.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "esc_seq.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_esc_seq;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// raw_dbl_quote
+// raw_right_quote
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_question_mark
+// raw_U
+// raw_back_slash
+// raw_a
+// raw_b
+// raw_f
+// raw_n
+// raw_r
+// raw_t
+// raw_u
+// raw_v
+// raw_x
+yacco2::UCHAR LA1_Cesc_seq[] ={
+10
+,0,1
+,5,132
+,7,255
+,8,128
+,11,32
+,12,16
+,13,70
+,14,64
+,15,116
+,16,1
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cesc_seq[] ={
+1
+,0,4
+};
+// LR1_invisible_shift_operator
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+yacco2::UCHAR LA3_Cesc_seq[] ={
+2
+,0,32
+,7,255
+};
+// LR1_questionable_shift_operator
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+yacco2::UCHAR LA4_Cesc_seq[] ={
+5
+,0,1
+,7,255
+,8,3
+,9,126
+,13,126
+};
+// LR1_questionable_shift_operator
+// LR1_invisible_shift_operator
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+yacco2::UCHAR LA5_Cesc_seq[] ={
+5
+,0,33
+,7,255
+,8,3
+,9,126
+,13,126
+};
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA6_Cesc_seq[] ={
+1
+,0,32
+};
+// LR1_invisible_shift_operator
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+yacco2::UCHAR LA7_Cesc_seq[] ={
+5
+,0,32
+,7,255
+,8,3
+,9,126
+,13,126
+};
+extern yacco2::State S1_Cesc_seq;
+extern yacco2::State S2_Cesc_seq;
+extern yacco2::State S3_Cesc_seq;
+extern yacco2::State S4_Cesc_seq;
+extern yacco2::State S5_Cesc_seq;
+extern yacco2::State S6_Cesc_seq;
+extern yacco2::State S7_Cesc_seq;
+extern yacco2::State S8_Cesc_seq;
+extern yacco2::State S9_Cesc_seq;
+extern yacco2::State S10_Cesc_seq;
+extern yacco2::State S11_Cesc_seq;
+extern yacco2::State S12_Cesc_seq;
+extern yacco2::State S13_Cesc_seq;
+extern yacco2::State S14_Cesc_seq;
+extern yacco2::State S15_Cesc_seq;
+extern yacco2::State S16_Cesc_seq;
+extern yacco2::State S17_Cesc_seq;
+extern yacco2::State S18_Cesc_seq;
+extern yacco2::State S19_Cesc_seq;
+extern yacco2::State S20_Cesc_seq;
+extern yacco2::State S21_Cesc_seq;
+extern yacco2::State S22_Cesc_seq;
+extern yacco2::State S23_Cesc_seq;
+extern yacco2::State S24_Cesc_seq;
+extern yacco2::State S25_Cesc_seq;
+extern yacco2::State S26_Cesc_seq;
+extern yacco2::State S27_Cesc_seq;
+extern yacco2::State S28_Cesc_seq;
+extern yacco2::State S29_Cesc_seq;
+extern yacco2::State S30_Cesc_seq;
+extern yacco2::State S31_Cesc_seq;
+extern yacco2::State S32_Cesc_seq;
+extern yacco2::State S33_Cesc_seq;
+extern yacco2::State S34_Cesc_seq;
+extern yacco2::State S35_Cesc_seq;
+extern yacco2::State S36_Cesc_seq;
+extern yacco2::State S37_Cesc_seq;
+extern yacco2::State S38_Cesc_seq;
+extern yacco2::State S39_Cesc_seq;
+extern yacco2::State S40_Cesc_seq;
+extern yacco2::State S41_Cesc_seq;
+extern yacco2::State S42_Cesc_seq;
+extern yacco2::State S43_Cesc_seq;
+extern yacco2::State S44_Cesc_seq;
+extern yacco2::State S45_Cesc_seq;
+extern yacco2::State S46_Cesc_seq;
+extern yacco2::State S47_Cesc_seq;
+extern yacco2::State S48_Cesc_seq;
+extern yacco2::State S49_Cesc_seq;
+extern yacco2::State S50_Cesc_seq;
+extern yacco2::State S51_Cesc_seq;
+extern yacco2::State S52_Cesc_seq;
+extern yacco2::State S53_Cesc_seq;
+extern yacco2::State S54_Cesc_seq;
+extern yacco2::State S55_Cesc_seq;
+extern yacco2::State S56_Cesc_seq;
+extern yacco2::State S57_Cesc_seq;
+extern yacco2::State S58_Cesc_seq;
+extern yacco2::State S59_Cesc_seq;
+extern yacco2::State S60_Cesc_seq;
+extern yacco2::State S61_Cesc_seq;
+extern yacco2::State S62_Cesc_seq;
+extern yacco2::State S63_Cesc_seq;
+extern yacco2::State S64_Cesc_seq;
+extern yacco2::State S65_Cesc_seq;
+extern yacco2::State S66_Cesc_seq;
+extern yacco2::State S67_Cesc_seq;
+extern yacco2::State S68_Cesc_seq;
+extern yacco2::State S69_Cesc_seq;
+extern yacco2::State S70_Cesc_seq;
+extern yacco2::State S71_Cesc_seq;
+extern yacco2::State S72_Cesc_seq;
+extern yacco2::State S73_Cesc_seq;
+extern yacco2::State S74_Cesc_seq;
+extern yacco2::State S75_Cesc_seq;
+extern yacco2::State S76_Cesc_seq;
+extern yacco2::State S77_Cesc_seq;
+extern yacco2::State S78_Cesc_seq;
+extern yacco2::State S79_Cesc_seq;
+extern yacco2::State S80_Cesc_seq;
+extern yacco2::State S81_Cesc_seq;
+extern yacco2::State S82_Cesc_seq;
+extern yacco2::State S83_Cesc_seq;
+extern yacco2::State S84_Cesc_seq;
+extern yacco2::State S85_Cesc_seq;
+extern yacco2::State S86_Cesc_seq;
+extern yacco2::State S87_Cesc_seq;
+extern yacco2::State S88_Cesc_seq;
+struct S1std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cesc_seq S1st_Cesc_seq = {
+ 3
+ ,
+ {// start of table
+ {100,(State*)&S2_Cesc_seq} // shift sym: raw_back_slash
+ ,{569,(State*)&S1_Cesc_seq} // accept sym: Resc_seq
+ ,{570,(State*)&S3_Cesc_seq} // shift sym: Rslash
+ }// end of shift table
+};
+yacco2::State S1_Cesc_seq = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cesc_seq,0,0,0,0};
+struct S2rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cesc_seq S2rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cesc_seq,Cesc_seq::rhs1_Rslash_}
+ }// end of reduce table
+};
+yacco2::State S2_Cesc_seq = //State's vectored into symbol: "\\"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cesc_seq,0,0,0};
+struct S3std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[32];
+};
+S3std_Cesc_seq S3st_Cesc_seq = {
+ 32
+ ,
+ {// start of table
+ {0,(State*)&S4_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{42,(State*)&S5_Cesc_seq} // shift sym: raw_dbl_quote
+ ,{47,(State*)&S6_Cesc_seq} // shift sym: raw_right_quote
+ ,{56,(State*)&S7_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S8_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S9_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S10_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S11_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S12_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S13_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S14_Cesc_seq} // shift sym: raw_7
+ ,{71,(State*)&S15_Cesc_seq} // shift sym: raw_question_mark
+ ,{93,(State*)&S16_Cesc_seq} // shift sym: raw_U
+ ,{100,(State*)&S17_Cesc_seq} // shift sym: raw_back_slash
+ ,{105,(State*)&S18_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S19_Cesc_seq} // shift sym: raw_b
+ ,{110,(State*)&S20_Cesc_seq} // shift sym: raw_f
+ ,{118,(State*)&S21_Cesc_seq} // shift sym: raw_n
+ ,{122,(State*)&S22_Cesc_seq} // shift sym: raw_r
+ ,{124,(State*)&S23_Cesc_seq} // shift sym: raw_t
+ ,{125,(State*)&S24_Cesc_seq} // shift sym: raw_u
+ ,{126,(State*)&S25_Cesc_seq} // shift sym: raw_v
+ ,{128,(State*)&S26_Cesc_seq} // shift sym: raw_x
+ ,{571,(State*)&S27_Cesc_seq} // shift sym: Rliteral
+ ,{572,(State*)&S28_Cesc_seq} // shift sym: Ruhex
+ ,{573,(State*)&S30_Cesc_seq} // shift sym: Ru
+ ,{574,(State*)&S63_Cesc_seq} // shift sym: RU
+ ,{575,(State*)&S76_Cesc_seq} // shift sym: Rx
+ ,{576,(State*)&S80_Cesc_seq} // shift sym: RUhex
+ ,{579,(State*)&S82_Cesc_seq} // shift sym: Rhex
+ ,{584,(State*)&S84_Cesc_seq} // shift sym: Roctal
+ ,{585,(State*)&S86_Cesc_seq} // shift sym: Roctal_no
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cesc_seq = {0,(State*)&S4_Cesc_seq};
+yacco2::State S3_Cesc_seq = //State's vectored into symbol: "Rslash"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cesc_seq,0,0,0,(Shift_entry*)&S3qse_Cesc_seq
+};
+struct S4rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cesc_seq S4rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs12_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S4_Cesc_seq = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cesc_seq,0,0,0};
+struct S5rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cesc_seq S5rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs11_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S5_Cesc_seq = //State's vectored into symbol: "\""
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cesc_seq,0,0,0};
+struct S6rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cesc_seq S6rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs10_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S6_Cesc_seq = //State's vectored into symbol: "'"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cesc_seq,0,0,0};
+struct S7rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cesc_seq S7rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs1_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S7_Cesc_seq = //State's vectored into symbol: "0"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cesc_seq,0,0,0};
+struct S8rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cesc_seq S8rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs2_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S8_Cesc_seq = //State's vectored into symbol: "1"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cesc_seq,0,0,0};
+struct S9rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cesc_seq S9rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs3_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S9_Cesc_seq = //State's vectored into symbol: "2"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cesc_seq,0,0,0};
+struct S10rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cesc_seq S10rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs4_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S10_Cesc_seq = //State's vectored into symbol: "3"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cesc_seq,0,0,0};
+struct S11rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cesc_seq S11rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs5_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S11_Cesc_seq = //State's vectored into symbol: "4"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cesc_seq,0,0,0};
+struct S12rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cesc_seq S12rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs6_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S12_Cesc_seq = //State's vectored into symbol: "5"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cesc_seq,0,0,0};
+struct S13rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cesc_seq S13rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs7_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S13_Cesc_seq = //State's vectored into symbol: "6"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cesc_seq,0,0,0};
+struct S14rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cesc_seq S14rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cesc_seq,Cesc_seq::rhs8_Roctal_no_}
+ }// end of reduce table
+};
+yacco2::State S14_Cesc_seq = //State's vectored into symbol: "7"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cesc_seq,0,0,0};
+struct S15rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cesc_seq S15rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs9_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S15_Cesc_seq = //State's vectored into symbol: "?"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cesc_seq,0,0,0};
+struct S16rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cesc_seq S16rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_RU_}
+ }// end of reduce table
+};
+yacco2::State S16_Cesc_seq = //State's vectored into symbol: "U"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cesc_seq,0,0,0};
+struct S17rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cesc_seq S17rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs8_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S17_Cesc_seq = //State's vectored into symbol: "\\"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cesc_seq,0,0,0};
+struct S18rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cesc_seq S18rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs7_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S18_Cesc_seq = //State's vectored into symbol: "a"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cesc_seq,0,0,0};
+struct S19rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cesc_seq S19rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs4_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S19_Cesc_seq = //State's vectored into symbol: "b"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cesc_seq,0,0,0};
+struct S20rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cesc_seq S20rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs6_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S20_Cesc_seq = //State's vectored into symbol: "f"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cesc_seq,0,0,0};
+struct S21rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cesc_seq S21rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs1_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S21_Cesc_seq = //State's vectored into symbol: "n"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cesc_seq,0,0,0};
+struct S22rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cesc_seq S22rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs5_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S22_Cesc_seq = //State's vectored into symbol: "r"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cesc_seq,0,0,0};
+struct S23rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cesc_seq S23rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs2_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S23_Cesc_seq = //State's vectored into symbol: "t"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cesc_seq,0,0,0};
+struct S24rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cesc_seq S24rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Ru_}
+ }// end of reduce table
+};
+yacco2::State S24_Cesc_seq = //State's vectored into symbol: "u"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cesc_seq,0,0,0};
+struct S25rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cesc_seq S25rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs3_Rliteral_}
+ }// end of reduce table
+};
+yacco2::State S25_Cesc_seq = //State's vectored into symbol: "v"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cesc_seq,0,0,0};
+struct S26rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cesc_seq S26rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Rx_}
+ }// end of reduce table
+};
+yacco2::State S26_Cesc_seq = //State's vectored into symbol: "x"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cesc_seq,0,0,0};
+struct S27rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cesc_seq S27rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs1_Resc_seq_}
+ }// end of reduce table
+};
+yacco2::State S27_Cesc_seq = //State's vectored into symbol: "Rliteral"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cesc_seq,0,0,0};
+struct S28std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S28std_Cesc_seq S28st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S29_Cesc_seq} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S28ise_Cesc_seq = {5,(State*)&S29_Cesc_seq};
+yacco2::State S28_Cesc_seq = //State's vectored into symbol: "Ruhex"
+{28
+,0,0,(Shift_entry*)&S28ise_Cesc_seq
+,0,(Shift_tbl*)&S28st_Cesc_seq,0,0,0,0};
+struct S29rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cesc_seq S29rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs4_Resc_seq_}
+ }// end of reduce table
+};
+yacco2::State S29_Cesc_seq = //State's vectored into symbol: "|.|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cesc_seq,0,0,0};
+struct S30std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S30std_Cesc_seq S30st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S31_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S30qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S30_Cesc_seq = //State's vectored into symbol: "Ru"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Cesc_seq,0,0,0,(Shift_entry*)&S30qse_Cesc_seq
+};
+struct S31std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S31std_Cesc_seq S31st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S32_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S31qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S31_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Cesc_seq,0,0,0,(Shift_entry*)&S31qse_Cesc_seq
+};
+struct S32std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S32std_Cesc_seq S32st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S33_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S32rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cesc_seq S32rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S32_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{32
+,0,0,0,0,(Shift_tbl*)&S32st_Cesc_seq,(Reduce_tbl*)&S32rt_Cesc_seq,0,0,0};
+struct S33std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S33std_Cesc_seq S33st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S34_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S33qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S33_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{33
+,0,0,0,0,(Shift_tbl*)&S33st_Cesc_seq,0,0,0,(Shift_entry*)&S33qse_Cesc_seq
+};
+struct S34std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S34std_Cesc_seq S34st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S58_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S34qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S34_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Cesc_seq,0,0,0,(Shift_entry*)&S34qse_Cesc_seq
+};
+struct S35rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cesc_seq S35rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs2_Rmhex_no_}
+ }// end of reduce table
+};
+yacco2::State S35_Cesc_seq = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cesc_seq,0,0,0};
+struct S36rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cesc_seq S36rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs1_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S36_Cesc_seq = //State's vectored into symbol: "0"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cesc_seq,0,0,0};
+struct S37rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cesc_seq S37rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs2_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S37_Cesc_seq = //State's vectored into symbol: "1"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cesc_seq,0,0,0};
+struct S38rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cesc_seq S38rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs3_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S38_Cesc_seq = //State's vectored into symbol: "2"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cesc_seq,0,0,0};
+struct S39rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cesc_seq S39rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs4_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S39_Cesc_seq = //State's vectored into symbol: "3"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cesc_seq,0,0,0};
+struct S40rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cesc_seq S40rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs5_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S40_Cesc_seq = //State's vectored into symbol: "4"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cesc_seq,0,0,0};
+struct S41rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cesc_seq S41rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs6_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S41_Cesc_seq = //State's vectored into symbol: "5"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cesc_seq,0,0,0};
+struct S42rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cesc_seq S42rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs7_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S42_Cesc_seq = //State's vectored into symbol: "6"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cesc_seq,0,0,0};
+struct S43rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cesc_seq S43rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs8_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S43_Cesc_seq = //State's vectored into symbol: "7"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cesc_seq,0,0,0};
+struct S44rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cesc_seq S44rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs9_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S44_Cesc_seq = //State's vectored into symbol: "8"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cesc_seq,0,0,0};
+struct S45rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cesc_seq S45rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs10_Rhex_no_digit_}
+ }// end of reduce table
+};
+yacco2::State S45_Cesc_seq = //State's vectored into symbol: "9"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cesc_seq,0,0,0};
+struct S46rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cesc_seq S46rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs7_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S46_Cesc_seq = //State's vectored into symbol: "A"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cesc_seq,0,0,0};
+struct S47rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cesc_seq S47rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs8_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S47_Cesc_seq = //State's vectored into symbol: "B"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cesc_seq,0,0,0};
+struct S48rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cesc_seq S48rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs9_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S48_Cesc_seq = //State's vectored into symbol: "C"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cesc_seq,0,0,0};
+struct S49rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cesc_seq S49rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs10_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S49_Cesc_seq = //State's vectored into symbol: "D"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cesc_seq,0,0,0};
+struct S50rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cesc_seq S50rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs11_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S50_Cesc_seq = //State's vectored into symbol: "E"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cesc_seq,0,0,0};
+struct S51rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cesc_seq S51rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs12_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S51_Cesc_seq = //State's vectored into symbol: "F"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cesc_seq,0,0,0};
+struct S52rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cesc_seq S52rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs1_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S52_Cesc_seq = //State's vectored into symbol: "a"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cesc_seq,0,0,0};
+struct S53rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cesc_seq S53rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs2_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S53_Cesc_seq = //State's vectored into symbol: "b"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cesc_seq,0,0,0};
+struct S54rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cesc_seq S54rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs3_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S54_Cesc_seq = //State's vectored into symbol: "c"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Cesc_seq,0,0,0};
+struct S55rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cesc_seq S55rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs4_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S55_Cesc_seq = //State's vectored into symbol: "d"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cesc_seq,0,0,0};
+struct S56rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cesc_seq S56rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs5_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S56_Cesc_seq = //State's vectored into symbol: "e"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cesc_seq,0,0,0};
+struct S57rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cesc_seq S57rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs6_Rhex_no_letter_}
+ }// end of reduce table
+};
+yacco2::State S57_Cesc_seq = //State's vectored into symbol: "f"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cesc_seq,0,0,0};
+struct S58std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S58std_Cesc_seq S58st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S59_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S58rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cesc_seq S58rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S58_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{58
+,0,0,0,0,(Shift_tbl*)&S58st_Cesc_seq,(Reduce_tbl*)&S58rt_Cesc_seq,0,0,0};
+struct S59rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cesc_seq S59rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_Ruhex_}
+ }// end of reduce table
+};
+yacco2::State S59_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cesc_seq,0,0,0};
+struct S60rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cesc_seq S60rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs1_Rmhex_no_}
+ }// end of reduce table
+};
+yacco2::State S60_Cesc_seq = //State's vectored into symbol: "Rhex_no"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Cesc_seq,0,0,0};
+struct S61rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cesc_seq S61rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs1_Rhex_no_}
+ }// end of reduce table
+};
+yacco2::State S61_Cesc_seq = //State's vectored into symbol: "Rhex_no_digit"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cesc_seq,0,0,0};
+struct S62rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cesc_seq S62rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cesc_seq,Cesc_seq::rhs2_Rhex_no_}
+ }// end of reduce table
+};
+yacco2::State S62_Cesc_seq = //State's vectored into symbol: "Rhex_no_letter"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cesc_seq,0,0,0};
+struct S63std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S63std_Cesc_seq S63st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S64_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S63qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S63_Cesc_seq = //State's vectored into symbol: "RU"
+{63
+,0,0,0,0,(Shift_tbl*)&S63st_Cesc_seq,0,0,0,(Shift_entry*)&S63qse_Cesc_seq
+};
+struct S64std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S64std_Cesc_seq S64st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S65_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S64qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S64_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{64
+,0,0,0,0,(Shift_tbl*)&S64st_Cesc_seq,0,0,0,(Shift_entry*)&S64qse_Cesc_seq
+};
+struct S65std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S65std_Cesc_seq S65st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S66_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S65rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cesc_seq S65rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S65_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{65
+,0,0,0,0,(Shift_tbl*)&S65st_Cesc_seq,(Reduce_tbl*)&S65rt_Cesc_seq,0,0,0};
+struct S66std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S66std_Cesc_seq S66st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S67_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S66qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S66_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{66
+,0,0,0,0,(Shift_tbl*)&S66st_Cesc_seq,0,0,0,(Shift_entry*)&S66qse_Cesc_seq
+};
+struct S67std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S67std_Cesc_seq S67st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S68_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S67qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S67_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{67
+,0,0,0,0,(Shift_tbl*)&S67st_Cesc_seq,0,0,0,(Shift_entry*)&S67qse_Cesc_seq
+};
+struct S68std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S68std_Cesc_seq S68st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S69_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S68rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cesc_seq S68rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S68_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{68
+,0,0,0,0,(Shift_tbl*)&S68st_Cesc_seq,(Reduce_tbl*)&S68rt_Cesc_seq,0,0,0};
+struct S69std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S69std_Cesc_seq S69st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S70_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S69qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S69_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{69
+,0,0,0,0,(Shift_tbl*)&S69st_Cesc_seq,0,0,0,(Shift_entry*)&S69qse_Cesc_seq
+};
+struct S70std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S70std_Cesc_seq S70st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S71_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S70qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S70_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{70
+,0,0,0,0,(Shift_tbl*)&S70st_Cesc_seq,0,0,0,(Shift_entry*)&S70qse_Cesc_seq
+};
+struct S71std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S71std_Cesc_seq S71st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S72_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S71rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Cesc_seq S71rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S71_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{71
+,0,0,0,0,(Shift_tbl*)&S71st_Cesc_seq,(Reduce_tbl*)&S71rt_Cesc_seq,0,0,0};
+struct S72std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S72std_Cesc_seq S72st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S73_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S72qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S72_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{72
+,0,0,0,0,(Shift_tbl*)&S72st_Cesc_seq,0,0,0,(Shift_entry*)&S72qse_Cesc_seq
+};
+struct S73std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[27];
+};
+S73std_Cesc_seq S73st_Cesc_seq = {
+ 27
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S74_Cesc_seq} // shift sym: Rmhex_no
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S73qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S73_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{73
+,0,0,0,0,(Shift_tbl*)&S73st_Cesc_seq,0,0,0,(Shift_entry*)&S73qse_Cesc_seq
+};
+struct S74std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S74std_Cesc_seq S74st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {578,(State*)&S75_Cesc_seq} // shift sym: Rcalc_hex_char
+ }// end of shift table
+};
+struct S74rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Cesc_seq S74rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_Rcalc_hex_char_}
+ }// end of reduce table
+};
+yacco2::State S74_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{74
+,0,0,0,0,(Shift_tbl*)&S74st_Cesc_seq,(Reduce_tbl*)&S74rt_Cesc_seq,0,0,0};
+struct S75rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Cesc_seq S75rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_RUhex_}
+ }// end of reduce table
+};
+yacco2::State S75_Cesc_seq = //State's vectored into symbol: "Rcalc_hex_char"
+{75
+,0,0,0,0,0,(Reduce_tbl*)&S75rt_Cesc_seq,0,0,0};
+struct S76std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[28];
+};
+S76std_Cesc_seq S76st_Cesc_seq = {
+ 28
+ ,
+ {// start of table
+ {0,(State*)&S35_Cesc_seq} // shift sym: LR1_questionable_shift_operator
+ ,{56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{577,(State*)&S77_Cesc_seq} // shift sym: Rmhex_no
+ ,{580,(State*)&S78_Cesc_seq} // shift sym: Rhex_nos
+ ,{581,(State*)&S60_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+yacco2::Shift_entry S76qse_Cesc_seq = {0,(State*)&S35_Cesc_seq};
+yacco2::State S76_Cesc_seq = //State's vectored into symbol: "Rx"
+{76
+,0,0,0,0,(Shift_tbl*)&S76st_Cesc_seq,0,0,0,(Shift_entry*)&S76qse_Cesc_seq
+};
+struct S77rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Cesc_seq S77rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cesc_seq,Cesc_seq::rhs1_Rhex_nos_}
+ }// end of reduce table
+};
+yacco2::State S77_Cesc_seq = //State's vectored into symbol: "Rmhex_no"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Cesc_seq,0,0,0};
+struct S78std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[25];
+};
+S78std_Cesc_seq S78st_Cesc_seq = {
+ 25
+ ,
+ {// start of table
+ {56,(State*)&S36_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S37_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S38_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S39_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S40_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S41_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S42_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S43_Cesc_seq} // shift sym: raw_7
+ ,{64,(State*)&S44_Cesc_seq} // shift sym: raw_8
+ ,{65,(State*)&S45_Cesc_seq} // shift sym: raw_9
+ ,{73,(State*)&S46_Cesc_seq} // shift sym: raw_A
+ ,{74,(State*)&S47_Cesc_seq} // shift sym: raw_B
+ ,{75,(State*)&S48_Cesc_seq} // shift sym: raw_C
+ ,{76,(State*)&S49_Cesc_seq} // shift sym: raw_D
+ ,{77,(State*)&S50_Cesc_seq} // shift sym: raw_E
+ ,{78,(State*)&S51_Cesc_seq} // shift sym: raw_F
+ ,{105,(State*)&S52_Cesc_seq} // shift sym: raw_a
+ ,{106,(State*)&S53_Cesc_seq} // shift sym: raw_b
+ ,{107,(State*)&S54_Cesc_seq} // shift sym: raw_c
+ ,{108,(State*)&S55_Cesc_seq} // shift sym: raw_d
+ ,{109,(State*)&S56_Cesc_seq} // shift sym: raw_e
+ ,{110,(State*)&S57_Cesc_seq} // shift sym: raw_f
+ ,{581,(State*)&S79_Cesc_seq} // shift sym: Rhex_no
+ ,{582,(State*)&S61_Cesc_seq} // shift sym: Rhex_no_digit
+ ,{583,(State*)&S62_Cesc_seq} // shift sym: Rhex_no_letter
+ }// end of shift table
+};
+struct S78rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Cesc_seq S78rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_Rhex_}
+ }// end of reduce table
+};
+yacco2::State S78_Cesc_seq = //State's vectored into symbol: "Rhex_nos"
+{78
+,0,0,0,0,(Shift_tbl*)&S78st_Cesc_seq,(Reduce_tbl*)&S78rt_Cesc_seq,0,0,0};
+struct S79rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Cesc_seq S79rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cesc_seq,Cesc_seq::rhs2_Rhex_nos_}
+ }// end of reduce table
+};
+yacco2::State S79_Cesc_seq = //State's vectored into symbol: "Rhex_no"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Cesc_seq,0,0,0};
+struct S80std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S80std_Cesc_seq S80st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S81_Cesc_seq} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S80ise_Cesc_seq = {5,(State*)&S81_Cesc_seq};
+yacco2::State S80_Cesc_seq = //State's vectored into symbol: "RUhex"
+{80
+,0,0,(Shift_entry*)&S80ise_Cesc_seq
+,0,(Shift_tbl*)&S80st_Cesc_seq,0,0,0,0};
+struct S81rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Cesc_seq S81rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs5_Resc_seq_}
+ }// end of reduce table
+};
+yacco2::State S81_Cesc_seq = //State's vectored into symbol: "|.|"
+{81
+,0,0,0,0,0,(Reduce_tbl*)&S81rt_Cesc_seq,0,0,0};
+struct S82std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S82std_Cesc_seq S82st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S83_Cesc_seq} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S82ise_Cesc_seq = {5,(State*)&S83_Cesc_seq};
+yacco2::State S82_Cesc_seq = //State's vectored into symbol: "Rhex"
+{82
+,0,0,(Shift_entry*)&S82ise_Cesc_seq
+,0,(Shift_tbl*)&S82st_Cesc_seq,0,0,0,0};
+struct S83rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Cesc_seq S83rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs3_Resc_seq_}
+ }// end of reduce table
+};
+yacco2::State S83_Cesc_seq = //State's vectored into symbol: "|.|"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Cesc_seq,0,0,0};
+struct S84std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S84std_Cesc_seq S84st_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S85_Cesc_seq} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S84ise_Cesc_seq = {5,(State*)&S85_Cesc_seq};
+yacco2::State S84_Cesc_seq = //State's vectored into symbol: "Roctal"
+{84
+,0,0,(Shift_entry*)&S84ise_Cesc_seq
+,0,(Shift_tbl*)&S84st_Cesc_seq,0,0,0,0};
+struct S85rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Cesc_seq S85rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cesc_seq,Cesc_seq::rhs2_Resc_seq_}
+ }// end of reduce table
+};
+yacco2::State S85_Cesc_seq = //State's vectored into symbol: "|.|"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Cesc_seq,0,0,0};
+struct S86std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S86std_Cesc_seq S86st_Cesc_seq = {
+ 9
+ ,
+ {// start of table
+ {56,(State*)&S7_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S8_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S9_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S10_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S11_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S12_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S13_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S14_Cesc_seq} // shift sym: raw_7
+ ,{585,(State*)&S87_Cesc_seq} // shift sym: Roctal_no
+ }// end of shift table
+};
+struct S86rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S86rtd_Cesc_seq S86rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs1_Roctal_}
+ }// end of reduce table
+};
+yacco2::State S86_Cesc_seq = //State's vectored into symbol: "Roctal_no"
+{86
+,0,0,0,0,(Shift_tbl*)&S86st_Cesc_seq,(Reduce_tbl*)&S86rt_Cesc_seq,0,0,0};
+struct S87std_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S87std_Cesc_seq S87st_Cesc_seq = {
+ 9
+ ,
+ {// start of table
+ {56,(State*)&S7_Cesc_seq} // shift sym: raw_0
+ ,{57,(State*)&S8_Cesc_seq} // shift sym: raw_1
+ ,{58,(State*)&S9_Cesc_seq} // shift sym: raw_2
+ ,{59,(State*)&S10_Cesc_seq} // shift sym: raw_3
+ ,{60,(State*)&S11_Cesc_seq} // shift sym: raw_4
+ ,{61,(State*)&S12_Cesc_seq} // shift sym: raw_5
+ ,{62,(State*)&S13_Cesc_seq} // shift sym: raw_6
+ ,{63,(State*)&S14_Cesc_seq} // shift sym: raw_7
+ ,{585,(State*)&S88_Cesc_seq} // shift sym: Roctal_no
+ }// end of shift table
+};
+struct S87rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Cesc_seq S87rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs2_Roctal_}
+ }// end of reduce table
+};
+yacco2::State S87_Cesc_seq = //State's vectored into symbol: "Roctal_no"
+{87
+,0,0,0,0,(Shift_tbl*)&S87st_Cesc_seq,(Reduce_tbl*)&S87rt_Cesc_seq,0,0,0};
+struct S88rtd_Cesc_seq{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S88rtd_Cesc_seq S88rt_Cesc_seq = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cesc_seq,Cesc_seq::rhs3_Roctal_}
+ }// end of reduce table
+};
+yacco2::State S88_Cesc_seq = //State's vectored into symbol: "Roctal_no"
+{88
+,0,0,0,0,0,(Reduce_tbl*)&S88rt_Cesc_seq,0,0,0};
diff --git a/web/yacco2/compiler/grammars/eval_phrases.cpp b/web/yacco2/compiler/grammars/eval_phrases.cpp
new file mode 100644
index 0000000000..22047b9e3f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrases.cpp
@@ -0,0 +1,365 @@
+/*
+ File: eval_phrases.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "eval_phrases.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eval_phrases;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 9;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+}
+ Ceval_phrases::
+ Ceval_phrases()
+ :yacco2::CAbs_fsm
+ ("eval_phrases.lex"
+ ,"1.0"
+ ,"8 Mar. 2006"
+ ,true
+ ,"Evaluate parse phrase sequencer: \n as i use a top / down approach to dispatching the various phrases."
+ ,"Fri Jan 30 18:55:11 2015 "
+ ,S1_Ceval_phrases){
+
+ }
+
+Ceval_phrases::~Ceval_phrases(){
+
+ for(int x = 0;x < 9;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ceval_phrases::failed(){
+ return false;
+ }
+ void Ceval_phrases::op(){
+ gps_=0;
+
+}
+int Ceval_phrases::rhs_to_rules_mapping_[19] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,5 // subrule 11 for rule 6
+ ,5 // subrule 12 for rule 6
+ ,6 // subrule 13 for rule 7
+ ,6 // subrule 14 for rule 7
+ ,7 // subrule 15 for rule 8
+ ,7 // subrule 16 for rule 8
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+};
+
+ void Ceval_phrases::post_error(CAbs_lr1_sym* Err){
+ using namespace NS_yacco2_T_enum;
+ Err->set_rc(*gps_,__FILE__,__LINE__);
+ if(gps_->enumerated_id__ == T_Enum::T_LR1_eog_){
+ Err->set_line_no_and_pos_in_line(1,1);
+ }
+ parser__->add_token_to_error_queue(*Err);
+ parser__->set_abort_parse(true);
+ }
+
+ void Ceval_phrases::post_gps(CAbs_lr1_sym* Sym){
+ gps_ = Sym;
+ }
+
+Reval_phrases::Reval_phrases(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reval_phrases",0,Ceval_phrases::R_Reval_phrases_,P,false,false){
+}
+
+void Reval_phrases::sr2(){
+ struct SF{
+ LR1_eog* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_error(new Err_empty_file);
+ fsm->post_gps(sf->p1__);
+
+}
+
+Rfsm_phrase::Rfsm_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_phrase",0,Ceval_phrases::R_Rfsm_phrase_,P,false,false){
+}
+
+void Rfsm_phrase::sr1(){
+ struct SF{
+ T_fsm_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rfsm_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_fsm_phrase);
+
+}
+
+Rparallel_phrase::Rparallel_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_phrase",0,Ceval_phrases::R_Rparallel_phrase_,P,false,false){
+}
+
+void Rparallel_phrase::sr1(){
+ struct SF{
+ T_parallel_parser_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+RT_enum_phrase::RT_enum_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_enum_phrase",0,Ceval_phrases::R_RT_enum_phrase_,P,false,false){
+}
+
+void RT_enum_phrase::sr1(){
+ struct SF{
+ T_enum_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void RT_enum_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_T_enum_phrase);
+
+}
+
+Rerr_sym_phrase::Rerr_sym_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerr_sym_phrase",0,Ceval_phrases::R_Rerr_sym_phrase_,P,false,false){
+}
+
+void Rerr_sym_phrase::sr1(){
+ struct SF{
+ T_error_symbols_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rerr_sym_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_errors_phrase);
+
+}
+
+Rrc_phrase::Rrc_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrc_phrase",0,Ceval_phrases::R_Rrc_phrase_,P,false,false){
+}
+
+void Rrc_phrase::sr1(){
+ struct SF{
+ T_rc_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rrc_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_rc_phrase);
+
+}
+
+Rlr1_k_phrase::Rlr1_k_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_k_phrase",0,Ceval_phrases::R_Rlr1_k_phrase_,P,false,false){
+}
+
+void Rlr1_k_phrase::sr1(){
+ struct SF{
+ T_lr1_k_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rlr1_k_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_lrk_phrase);
+
+}
+
+Rterms_phrase::Rterms_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterms_phrase",0,Ceval_phrases::R_Rterms_phrase_,P,false,false){
+}
+
+void Rterms_phrase::sr1(){
+ struct SF{
+ T_terminals_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rterms_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_terminals_phrase);
+
+}
+
+Rrules_phrase::Rrules_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules_phrase",0,Ceval_phrases::R_Rrules_phrase_,P,false,false){
+}
+
+void Rrules_phrase::sr1(){
+ struct SF{
+ T_rules_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+
+}
+
+void Rrules_phrase::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_rules_phrase);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/eval_phrases.fsc b/web/yacco2/compiler/grammars/eval_phrases.fsc
new file mode 100644
index 0000000000..be6b86cbf5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrases.fsc
@@ -0,0 +1,22 @@
+/*
+ File: eval_phrases.fsc
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+transitive n
+grammar-name "eval_phrases"
+name-space "NS_eval_phrases"
+thread-name "Ceval_phrases"
+monolithic y
+file-name "eval_phrases.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ LR1_questionable_shift_operator
+ LR1_eog
+ T_fsm_phrase
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Evaluate parse phrase sequencer: \n as i use a top / down approach to dispatching the various phrases."
diff --git a/web/yacco2/compiler/grammars/eval_phrases.h b/web/yacco2/compiler/grammars/eval_phrases.h
new file mode 100644
index 0000000000..19697c1c18
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrases.h
@@ -0,0 +1,144 @@
+/*
+ File: eval_phrases.h
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#ifndef __eval_phrases_h__
+#define __eval_phrases_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Ceval_phrases;
+namespace NS_eval_phrases {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[9];
+};
+class Ceval_phrases: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reval_phrases_ = 569//start_of_rule_list + 0
+ ,rhs1_Reval_phrases_ = 1
+ ,rhs2_Reval_phrases_ = 2
+ ,R_Rfsm_phrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rfsm_phrase_ = 3
+ ,rhs2_Rfsm_phrase_ = 4
+ ,R_Rparallel_phrase_ = 571//start_of_rule_list + 4
+ ,rhs1_Rparallel_phrase_ = 5
+ ,rhs2_Rparallel_phrase_ = 6
+ ,R_RT_enum_phrase_ = 572//start_of_rule_list + 6
+ ,rhs1_RT_enum_phrase_ = 7
+ ,rhs2_RT_enum_phrase_ = 8
+ ,R_Rerr_sym_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rerr_sym_phrase_ = 9
+ ,rhs2_Rerr_sym_phrase_ = 10
+ ,R_Rrc_phrase_ = 574//start_of_rule_list + 10
+ ,rhs1_Rrc_phrase_ = 11
+ ,rhs2_Rrc_phrase_ = 12
+ ,R_Rlr1_k_phrase_ = 575//start_of_rule_list + 12
+ ,rhs1_Rlr1_k_phrase_ = 13
+ ,rhs2_Rlr1_k_phrase_ = 14
+ ,R_Rterms_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rterms_phrase_ = 15
+ ,rhs2_Rterms_phrase_ = 16
+ ,R_Rrules_phrase_ = 577//start_of_rule_list + 16
+ ,rhs1_Rrules_phrase_ = 17
+ ,rhs2_Rrules_phrase_ = 18
+ };
+ //no of la sets = 9
+ //no of states = 26
+ Ceval_phrases();
+ ~Ceval_phrases();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[19];
+
+ public:
+ CAbs_lr1_sym* gps_;
+ void post_error(CAbs_lr1_sym* Err);
+ void post_gps(CAbs_lr1_sym* Sym);
+
+ };
+struct Reval_phrases;
+struct Rfsm_phrase;
+struct Rparallel_phrase;
+struct RT_enum_phrase;
+struct Rerr_sym_phrase;
+struct Rrc_phrase;
+struct Rlr1_k_phrase;
+struct Rterms_phrase;
+struct Rrules_phrase;
+struct Reval_phrases:public yacco2::CAbs_lr1_sym {
+ Reval_phrases(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rparallel_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RT_enum_phrase:public yacco2::CAbs_lr1_sym {
+ RT_enum_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rerr_sym_phrase:public yacco2::CAbs_lr1_sym {
+ Rerr_sym_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rrc_phrase:public yacco2::CAbs_lr1_sym {
+ Rrc_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlr1_k_phrase:public yacco2::CAbs_lr1_sym {
+ Rlr1_k_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rterms_phrase:public yacco2::CAbs_lr1_sym {
+ Rterms_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rrules_phrase:public yacco2::CAbs_lr1_sym {
+ Rrules_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/eval_phrases.lex b/web/yacco2/compiler/grammars/eval_phrases.lex
new file mode 100644
index 0000000000..7411397142
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrases.lex
@@ -0,0 +1,214 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: eval_phrases.lex
+Dates: 7 Mar. 2006
+Purpose: Make sure all the phrases are properly parsed.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |eval_phrases| Grammar.\fbreak
+Make sure all the grammar phases are properly parsed.
+This is due to my not programming a grammar sequencer
+to explicitly define the syntax of a grammar.
+I wanted to parse each phrase separately
+by keyword triggering a descent procedure.\fbreak
+\fbreak
+Question: What source GPS do u align the error against?
+i just place it to the beginning of the grammar file
+if there is no
+previous phase seen.
+A previous phase becomes the reference point to
+the source file. If i was energetic, i should
+get the last token of that phase
+to be more accurate but today i'm lazy.
+The message is adequate to correct the problem.
+@/
+fsm
+(fsm-id "eval_phrases.lex",fsm-filename eval_phrases,fsm-namespace NS_eval_phrases
+,fsm-class Ceval_phrases{
+ user-declaration
+ public:
+ CAbs_lr1_sym* gps_;
+ void post_error(CAbs_lr1_sym* Err);
+ void post_gps(CAbs_lr1_sym* Sym);
+ ***
+ user-implementation
+ void Ceval_phrases::post_error(CAbs_lr1_sym* Err){
+ using namespace NS_yacco2_T_enum;
+ Err->set_rc(*gps_,__FILE__,__LINE__);
+ if(gps_->enumerated_id__ == T_Enum::T_LR1_eog_){
+ Err->set_line_no_and_pos_in_line(1,1);
+ }
+ parser__->add_token_to_error_queue(*Err);
+ parser__->set_abort_parse(true);
+ }
+/@
+@*3 |post_gps|.
+@/
+ void Ceval_phrases::post_gps(CAbs_lr1_sym* Sym){
+ gps_ = Sym;
+ }
+ ***
+ op
+ gps_=0;
+ ***
+}
+,fsm-version "1.0",fsm-date "8 Mar. 2006",fsm-debug "true"
+,fsm-comments "Evaluate parse phrase sequencer: \n as i use a top / down approach to dispatching the various phrases.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reval_phrases
+
+/@
+Use the property of Rule's sequencing
+within a production to determine whether the
+parsed phrases were missed or out of sequence.
+Report them as errors.
+@/
+(){
+ ->
+ Rfsm_phrase
+ Rparallel_phrase
+ RT_enum_phrase
+ Rlr1_k_phrase
+ Rrc_phrase
+ Rterms_phrase
+ Rerr_sym_phrase
+ Rrules_phrase
+ eog
+ -> eog{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_error(new Err_empty_file);
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+}
+
+
+Rfsm_phrase (){
+ -> "fsm-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_fsm_phrase);
+ ***
+ }
+}
+
+Rparallel_phrase (){
+ -> "parallel-parser-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ ->
+}
+
+RT_enum_phrase (){
+ -> "T-enum-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_T_enum_phrase);
+ ***
+ }
+}
+
+Rerr_sym_phrase (){
+ -> "error-symbols-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_errors_phrase);
+ ***
+ }
+}
+
+Rrc_phrase (){
+ -> "rc-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_rc_phrase);
+ ***
+ }
+}
+
+Rlr1_k_phrase (){
+ -> "lr1-k-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_lrk_phrase);
+ ***
+ }
+}
+
+Rterms_phrase (){
+ -> "terminals-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?|{
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_terminals_phrase);
+ ***
+ }
+}
+
+Rrules_phrase (){
+ -> "rules-phrase" {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ ***
+ }
+ -> |?| {
+ op
+ Ceval_phrases* fsm = (Ceval_phrases*) rule_info__.parser__->fsm_tbl__;
+ fsm->post_gps(sf->p1__);
+ fsm->post_error(new ERR_no_rules_phrase);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/eval_phrasessym.cpp b/web/yacco2/compiler/grammars/eval_phrasessym.cpp
new file mode 100644
index 0000000000..51ccdf2173
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrasessym.cpp
@@ -0,0 +1,295 @@
+/*
+ File: eval_phrasessym.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "eval_phrases.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eval_phrases;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ceval_phrases::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reval_phrases_:{
+ Reval_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Reval_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reval_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 9;
+
+
+ return;}
+ case rhs2_Reval_phrases_:{
+ Reval_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Reval_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reval_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_phrase_:{
+ Rfsm_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_phrase_:{
+ Rfsm_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rparallel_phrase_:{
+ Rparallel_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rparallel_phrase_:{
+ Rparallel_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_RT_enum_phrase_:{
+ RT_enum_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new RT_enum_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_enum_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_RT_enum_phrase_:{
+ RT_enum_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new RT_enum_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_enum_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rerr_sym_phrase_:{
+ Rerr_sym_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rerr_sym_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerr_sym_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rerr_sym_phrase_:{
+ Rerr_sym_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rerr_sym_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerr_sym_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rrc_phrase_:{
+ Rrc_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrc_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrc_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrc_phrase_:{
+ Rrc_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrc_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrc_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlr1_k_phrase_:{
+ Rlr1_k_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_k_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_k_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rlr1_k_phrase_:{
+ Rlr1_k_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_k_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_k_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rterms_phrase_:{
+ Rterms_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterms_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterms_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rterms_phrase_:{
+ Rterms_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterms_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterms_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rrules_phrase_:{
+ Rrules_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrules_phrase_:{
+ Rrules_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/eval_phrasestbl.cpp b/web/yacco2/compiler/grammars/eval_phrasestbl.cpp
new file mode 100644
index 0000000000..d27d237dd8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/eval_phrasestbl.cpp
@@ -0,0 +1,505 @@
+/*
+ File: eval_phrasestbl.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "eval_phrases.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_eval_phrases;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// T_parallel_parser_phrase
+// T_enum_phrase
+yacco2::UCHAR LA1_Ceval_phrases[] ={
+2
+,0,1
+,41,6
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Ceval_phrases[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// T_enum_phrase
+yacco2::UCHAR LA3_Ceval_phrases[] ={
+2
+,0,1
+,41,4
+};
+// LR1_questionable_shift_operator
+// T_lr1_k_phrase
+yacco2::UCHAR LA4_Ceval_phrases[] ={
+2
+,0,1
+,42,1
+};
+// LR1_questionable_shift_operator
+// T_rc_phrase
+yacco2::UCHAR LA5_Ceval_phrases[] ={
+2
+,0,1
+,42,2
+};
+// LR1_questionable_shift_operator
+// T_terminals_phrase
+yacco2::UCHAR LA6_Ceval_phrases[] ={
+2
+,0,1
+,41,64
+};
+// LR1_questionable_shift_operator
+// T_error_symbols_phrase
+yacco2::UCHAR LA7_Ceval_phrases[] ={
+2
+,0,1
+,41,128
+};
+// LR1_questionable_shift_operator
+// T_rules_phrase
+yacco2::UCHAR LA8_Ceval_phrases[] ={
+2
+,0,1
+,42,32
+};
+// LR1_eog
+yacco2::UCHAR LA9_Ceval_phrases[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Ceval_phrases;
+extern yacco2::State S2_Ceval_phrases;
+extern yacco2::State S3_Ceval_phrases;
+extern yacco2::State S4_Ceval_phrases;
+extern yacco2::State S5_Ceval_phrases;
+extern yacco2::State S6_Ceval_phrases;
+extern yacco2::State S7_Ceval_phrases;
+extern yacco2::State S8_Ceval_phrases;
+extern yacco2::State S9_Ceval_phrases;
+extern yacco2::State S10_Ceval_phrases;
+extern yacco2::State S11_Ceval_phrases;
+extern yacco2::State S12_Ceval_phrases;
+extern yacco2::State S13_Ceval_phrases;
+extern yacco2::State S14_Ceval_phrases;
+extern yacco2::State S15_Ceval_phrases;
+extern yacco2::State S16_Ceval_phrases;
+extern yacco2::State S17_Ceval_phrases;
+extern yacco2::State S18_Ceval_phrases;
+extern yacco2::State S19_Ceval_phrases;
+extern yacco2::State S20_Ceval_phrases;
+extern yacco2::State S21_Ceval_phrases;
+extern yacco2::State S22_Ceval_phrases;
+extern yacco2::State S23_Ceval_phrases;
+extern yacco2::State S24_Ceval_phrases;
+extern yacco2::State S25_Ceval_phrases;
+extern yacco2::State S26_Ceval_phrases;
+struct S1std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Ceval_phrases S1st_Ceval_phrases = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S2_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S3_Ceval_phrases} // shift sym: LR1_eog
+ ,{328,(State*)&S4_Ceval_phrases} // shift sym: T_fsm_phrase
+ ,{569,(State*)&S1_Ceval_phrases} // accept sym: Reval_phrases
+ ,{570,(State*)&S5_Ceval_phrases} // shift sym: Rfsm_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1qse_Ceval_phrases = {0,(State*)&S2_Ceval_phrases};
+yacco2::State S1_Ceval_phrases = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ceval_phrases,0,0,0,(Shift_entry*)&S1qse_Ceval_phrases
+};
+struct S2rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ceval_phrases S2rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceval_phrases,Ceval_phrases::rhs2_Rfsm_phrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Ceval_phrases = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ceval_phrases,0,0,0};
+struct S3rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ceval_phrases S3rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ceval_phrases,Ceval_phrases::rhs2_Reval_phrases_}
+ }// end of reduce table
+};
+yacco2::State S3_Ceval_phrases = //State's vectored into symbol: "eog"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ceval_phrases,0,0,0};
+struct S4rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ceval_phrases S4rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ceval_phrases,Ceval_phrases::rhs1_Rfsm_phrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Ceval_phrases = //State's vectored into symbol: "fsm-phrase"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ceval_phrases,0,0,0};
+struct S5std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Ceval_phrases S5st_Ceval_phrases = {
+ 2
+ ,
+ {// start of table
+ {329,(State*)&S14_Ceval_phrases} // shift sym: T_parallel_parser_phrase
+ ,{571,(State*)&S6_Ceval_phrases} // shift sym: Rparallel_phrase
+ }// end of shift table
+};
+struct S5rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ceval_phrases S5rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ceval_phrases,Ceval_phrases::rhs2_Rparallel_phrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Ceval_phrases = //State's vectored into symbol: "Rfsm_phrase"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Ceval_phrases,(Reduce_tbl*)&S5rt_Ceval_phrases,0,0,0};
+struct S6std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Ceval_phrases S6st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S15_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{330,(State*)&S16_Ceval_phrases} // shift sym: T_enum_phrase
+ ,{572,(State*)&S7_Ceval_phrases} // shift sym: RT_enum_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Ceval_phrases = {0,(State*)&S15_Ceval_phrases};
+yacco2::State S6_Ceval_phrases = //State's vectored into symbol: "Rparallel_phrase"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Ceval_phrases,0,0,0,(Shift_entry*)&S6qse_Ceval_phrases
+};
+struct S7std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Ceval_phrases S7st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S17_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{336,(State*)&S18_Ceval_phrases} // shift sym: T_lr1_k_phrase
+ ,{575,(State*)&S8_Ceval_phrases} // shift sym: Rlr1_k_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S7qse_Ceval_phrases = {0,(State*)&S17_Ceval_phrases};
+yacco2::State S7_Ceval_phrases = //State's vectored into symbol: "RT_enum_phrase"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Ceval_phrases,0,0,0,(Shift_entry*)&S7qse_Ceval_phrases
+};
+struct S8std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Ceval_phrases S8st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S19_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{337,(State*)&S20_Ceval_phrases} // shift sym: T_rc_phrase
+ ,{574,(State*)&S9_Ceval_phrases} // shift sym: Rrc_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Ceval_phrases = {0,(State*)&S19_Ceval_phrases};
+yacco2::State S8_Ceval_phrases = //State's vectored into symbol: "Rlr1_k_phrase"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Ceval_phrases,0,0,0,(Shift_entry*)&S8qse_Ceval_phrases
+};
+struct S9std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Ceval_phrases S9st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S21_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{334,(State*)&S22_Ceval_phrases} // shift sym: T_terminals_phrase
+ ,{576,(State*)&S10_Ceval_phrases} // shift sym: Rterms_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S9qse_Ceval_phrases = {0,(State*)&S21_Ceval_phrases};
+yacco2::State S9_Ceval_phrases = //State's vectored into symbol: "Rrc_phrase"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Ceval_phrases,0,0,0,(Shift_entry*)&S9qse_Ceval_phrases
+};
+struct S10std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Ceval_phrases S10st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S23_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{335,(State*)&S24_Ceval_phrases} // shift sym: T_error_symbols_phrase
+ ,{573,(State*)&S11_Ceval_phrases} // shift sym: Rerr_sym_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S10qse_Ceval_phrases = {0,(State*)&S23_Ceval_phrases};
+yacco2::State S10_Ceval_phrases = //State's vectored into symbol: "Rterms_phrase"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Ceval_phrases,0,0,0,(Shift_entry*)&S10qse_Ceval_phrases
+};
+struct S11std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S11std_Ceval_phrases S11st_Ceval_phrases = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S25_Ceval_phrases} // shift sym: LR1_questionable_shift_operator
+ ,{341,(State*)&S26_Ceval_phrases} // shift sym: T_rules_phrase
+ ,{577,(State*)&S12_Ceval_phrases} // shift sym: Rrules_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S11qse_Ceval_phrases = {0,(State*)&S25_Ceval_phrases};
+yacco2::State S11_Ceval_phrases = //State's vectored into symbol: "Rerr_sym_phrase"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Ceval_phrases,0,0,0,(Shift_entry*)&S11qse_Ceval_phrases
+};
+struct S12std_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Ceval_phrases S12st_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Ceval_phrases} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Ceval_phrases = //State's vectored into symbol: "Rrules_phrase"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Ceval_phrases,0,0,0,0};
+struct S13rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ceval_phrases S13rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ceval_phrases,Ceval_phrases::rhs1_Reval_phrases_}
+ }// end of reduce table
+};
+yacco2::State S13_Ceval_phrases = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ceval_phrases,0,0,0};
+struct S14rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ceval_phrases S14rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ceval_phrases,Ceval_phrases::rhs1_Rparallel_phrase_}
+ }// end of reduce table
+};
+yacco2::State S14_Ceval_phrases = //State's vectored into symbol: "parallel-parser-phrase"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ceval_phrases,0,0,0};
+struct S15rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Ceval_phrases S15rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ceval_phrases,Ceval_phrases::rhs2_RT_enum_phrase_}
+ }// end of reduce table
+};
+yacco2::State S15_Ceval_phrases = //State's vectored into symbol: "|?|"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Ceval_phrases,0,0,0};
+struct S16rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Ceval_phrases S16rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ceval_phrases,Ceval_phrases::rhs1_RT_enum_phrase_}
+ }// end of reduce table
+};
+yacco2::State S16_Ceval_phrases = //State's vectored into symbol: "T-enum-phrase"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Ceval_phrases,0,0,0};
+struct S17rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Ceval_phrases S17rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Ceval_phrases,Ceval_phrases::rhs2_Rlr1_k_phrase_}
+ }// end of reduce table
+};
+yacco2::State S17_Ceval_phrases = //State's vectored into symbol: "|?|"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Ceval_phrases,0,0,0};
+struct S18rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Ceval_phrases S18rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Ceval_phrases,Ceval_phrases::rhs1_Rlr1_k_phrase_}
+ }// end of reduce table
+};
+yacco2::State S18_Ceval_phrases = //State's vectored into symbol: "lr1-k-phrase"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Ceval_phrases,0,0,0};
+struct S19rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Ceval_phrases S19rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Ceval_phrases,Ceval_phrases::rhs2_Rrc_phrase_}
+ }// end of reduce table
+};
+yacco2::State S19_Ceval_phrases = //State's vectored into symbol: "|?|"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Ceval_phrases,0,0,0};
+struct S20rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Ceval_phrases S20rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Ceval_phrases,Ceval_phrases::rhs1_Rrc_phrase_}
+ }// end of reduce table
+};
+yacco2::State S20_Ceval_phrases = //State's vectored into symbol: "rc-phrase"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Ceval_phrases,0,0,0};
+struct S21rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Ceval_phrases S21rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Ceval_phrases,Ceval_phrases::rhs2_Rterms_phrase_}
+ }// end of reduce table
+};
+yacco2::State S21_Ceval_phrases = //State's vectored into symbol: "|?|"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Ceval_phrases,0,0,0};
+struct S22rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Ceval_phrases S22rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Ceval_phrases,Ceval_phrases::rhs1_Rterms_phrase_}
+ }// end of reduce table
+};
+yacco2::State S22_Ceval_phrases = //State's vectored into symbol: "terminals-phrase"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Ceval_phrases,0,0,0};
+struct S23rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Ceval_phrases S23rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Ceval_phrases,Ceval_phrases::rhs2_Rerr_sym_phrase_}
+ }// end of reduce table
+};
+yacco2::State S23_Ceval_phrases = //State's vectored into symbol: "|?|"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Ceval_phrases,0,0,0};
+struct S24rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Ceval_phrases S24rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Ceval_phrases,Ceval_phrases::rhs1_Rerr_sym_phrase_}
+ }// end of reduce table
+};
+yacco2::State S24_Ceval_phrases = //State's vectored into symbol: "error-symbols-phrase"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Ceval_phrases,0,0,0};
+struct S25rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Ceval_phrases S25rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Ceval_phrases,Ceval_phrases::rhs2_Rrules_phrase_}
+ }// end of reduce table
+};
+yacco2::State S25_Ceval_phrases = //State's vectored into symbol: "|?|"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Ceval_phrases,0,0,0};
+struct S26rtd_Ceval_phrases{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Ceval_phrases S26rt_Ceval_phrases = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Ceval_phrases,Ceval_phrases::rhs1_Rrules_phrase_}
+ }// end of reduce table
+};
+yacco2::State S26_Ceval_phrases = //State's vectored into symbol: "rules-phrase"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Ceval_phrases,0,0,0};
diff --git a/web/yacco2/compiler/grammars/first_set_rules.cpp b/web/yacco2/compiler/grammars/first_set_rules.cpp
new file mode 100644
index 0000000000..d0f4cab1ab
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rules.cpp
@@ -0,0 +1,96 @@
+/*
+ File: first_set_rules.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "first_set_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_first_set_rules;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cfirst_set_rules::
+ Cfirst_set_rules()
+ :yacco2::CAbs_fsm
+ ("first_set_rules.lex"
+ ,"1.0"
+ ,"26 sept. 2005"
+ ,false
+ ,"Determine first set per rule."
+ ,"Fri Jan 30 18:55:11 2015 "
+ ,S1_Cfirst_set_rules){
+
+ }
+
+Cfirst_set_rules::~Cfirst_set_rules(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cfirst_set_rules::failed(){
+ return false;
+ }
+ void Cfirst_set_rules::op(){
+ rule_def_ = 0;
+
+}
+int Cfirst_set_rules::rhs_to_rules_mapping_[6] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+};
+Rfirst_set_rules::Rfirst_set_rules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfirst_set_rules",0,Cfirst_set_rules::R_Rfirst_set_rules_,P,false,false){
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cfirst_set_rules::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Cfirst_set_rules::R_Rrule_,P,false,false){
+}
+
+void Rrule::sr1(){
+
+ Cfirst_set_rules* fsm = (Cfirst_set_rules*)rule_info__.parser__->fsm_tbl__;
+ GEN_FS_OF_RULE(fsm->rule_def_);
+
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cfirst_set_rules::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfirst_set_rules* fsm = (Cfirst_set_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/first_set_rules.fsc b/web/yacco2/compiler/grammars/first_set_rules.fsc
new file mode 100644
index 0000000000..a06adaa286
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rules.fsc
@@ -0,0 +1,20 @@
+/*
+ File: first_set_rules.fsc
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+transitive n
+grammar-name "first_set_rules"
+name-space "NS_first_set_rules"
+thread-name "Cfirst_set_rules"
+monolithic y
+file-name "first_set_rules.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Determine first set per rule."
diff --git a/web/yacco2/compiler/grammars/first_set_rules.h b/web/yacco2/compiler/grammars/first_set_rules.h
new file mode 100644
index 0000000000..77246bcbe8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rules.h
@@ -0,0 +1,83 @@
+/*
+ File: first_set_rules.h
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#ifndef __first_set_rules_h__
+#define __first_set_rules_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cfirst_set_rules;
+namespace NS_first_set_rules {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cfirst_set_rules: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfirst_set_rules_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfirst_set_rules_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ };
+ //no of la sets = 2
+ //no of states = 7
+ Cfirst_set_rules();
+ ~Cfirst_set_rules();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[6];
+
+ public:
+ rule_def* rule_def_;
+
+ };
+struct Rfirst_set_rules;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rfirst_set_rules:public yacco2::CAbs_lr1_sym {
+ Rfirst_set_rules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/first_set_rules.lex b/web/yacco2/compiler/grammars/first_set_rules.lex
new file mode 100644
index 0000000000..c88119b719
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rules.lex
@@ -0,0 +1,158 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: first_set_rules.lex
+Dates: 23 Sept. 2005
+Purpose: determine first set per rule.
+How: Read the rules' tree in prefix order filtering out:
+ accepting only rule-def and subrule-def tokens.
+ all other tokens with the grammar tree are bypassed
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |first_set_rules| grammar.\fbreak
+Create a rule's first set by building a closure-only
+state. The terminals within this state are its first set.
+Each rule's first set within the grammar is built this way including the ``start rule''
+of the grammar and possibly rules used only in a
+ ``parallel-la-boundary'' expression.
+
+The difference between this first set calculation and the one described in
+``The Theory of Parsing, Translation,
+and Compiling Volume 1: Parsing'' by Aho and Ullman on
+Page 300 is mine only evaluates the terminal(s) within
+the state while theirs ``derives'' the terminal string with all their
+ substitutions
+to arrive at a set of terminals.
+{\bf Theirs is correct} as i did not completely walk
+the rule's subsubrules when evaluating a partially epsiloned string
+at follow set calculation --- it assumed that the rule's first set was already
+calculated: $\alpha$ string is made up of an epsiloned rule Ra$_{\epsilon}$
+ followed by $\beta$ string of rules or terminals.
+The first set was not filled in properly composed of FS($\alpha$) and FS($\beta$)
+but only the first string FS($\alpha$).
+When the follow set was calculated, it did not
+explode the follow set string into its symbol composites.
+Boy i'm dumb. Lets look at the short of it: the original
+first set calculation was for efficiency at the expense (when viewed now)
+to explode per follow string its composite first sets.
+What a dumb idea --- as all mistakes are!
+So now its a closure only state with interior symbols added due to epsilon rules.
+The first set view is all the terminals brought in from the rule's subrules.
+As other rules can be brought in due to closure, their subrules are added to the state.
+Now epsilon rules that start the subrule's symbol string
+are the camillions. They add their own teminals
+ to the first set but also disappear
+and allow their next right symbol to be included in the state.
+This is recursive as these partially consumed subrules are then evaluated
+as above.
+
+Below is my then thought process and its assumptions:\fbreak
+So what's the difference on k = 1 symbol lookahead? Epsilon rules.
+I do not pursue the lookahead terminal string that would be derived.
+For the record, this gets done when the {\bf follow set} of a
+symbol string is calculated.
+The First set of a rule is used with an epsilon check to determine whether
+the next symbol in the string should be followed.
+Why advance if it is an epsilon rule?
+Epsilon is like a window where u see past the rule into its neighbour's setting;
+one can view it another way, an epsilon rule plays 2 parts: it provides
+its first set and provides its to-its-right string.
+When the follow set calculation hits the end-of-the-string --- i call this right-bounded condition,
+the remaining follow set is found from the Follow set of its spawning rule(s).
+This is transitive as the spawning rule's follow set calculation could
+also hit the end-of-string condition.
+Now where are these follow set strings found? --- in the state that spawned them.
+Each state contains the rule's follow set graph.
+\fbreak
+\fbreak
+Definition of First set:\fbreak
+Terminals that start all substrings generated by the rule's productions.
+The grammar tree
+is walked in prefix formation accepting only ``rule-def'' followed by its
+``subrule-def'' terminals.
+Each rule within the grammar follows this pattern:
+ ie, the start-rule is the first to be evaluated.
+ Though it is never referenced in a subrule i still create its first set.
+\fbreak
+\fbreak
+The Algorithm.\fbreak
+ The grammar reads each individual rule-def and all its subrule-def(s).
+ Using its bottom-up recognition, |Rsubrule_def| adds the 1st element
+ of the subrule
+ into the |fs_list_|.
+ |Rrule| processes the |fs_list_|
+ as a closure-only state
+ generating the rule's first set.
+ In generating the first set, the elements in |fs_list_| are consumed
+ as they are evaluated by removal from the list.
+ Referenced terminals are added to the rule's
+ first set.
+ For 1st time referenced rules, their subrules are added at the end of |fs_list_|
+ for eventual consumption.
+ The neat thing about this algorithm is the 1st element in the |fs_list_| is
+ only visited!
+ It's a singular point of evaluation that is thrown out to be replaced by its
+ next in line element: ahh the bank queue and the teller.\fbreak
+ \fbreak
+ Due to |cweave| irregularities in formatting C++ code of this grammar,
+ please see |o2externs| documentation
+ where the routines |GEN_FS_OF_RULE| is coded an external
+to overcome this deficiency.
+@/
+
+fsm
+(fsm-id "first_set_rules.lex"
+,fsm-filename first_set_rules
+,fsm-namespace NS_first_set_rules
+,fsm-class Cfirst_set_rules{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ rule_def* rule_def_;
+ ***
+ op
+ rule_def_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "26 sept. 2005",fsm-debug "false"
+,fsm-comments "Determine first set per rule.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rfirst_set_rules
+(){
+ -> Rrules eog
+}
+
+Rrules (){
+ -> Rrule
+ -> Rrules Rrule
+}
+
+Rrule (){
+ -> Rrule_def {
+ op
+ Cfirst_set_rules* fsm = (Cfirst_set_rules*)rule_info__.parser__->fsm_tbl__;
+ GEN_FS_OF_RULE(fsm->rule_def_);
+ ***
+ }
+}
+
+Rrule_def (){
+ -> "rule-def" {
+ /@
+ Initialize for its subrule findings.
+ @/
+ op
+ Cfirst_set_rules* fsm = (Cfirst_set_rules*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/first_set_rulessym.cpp b/web/yacco2/compiler/grammars/first_set_rulessym.cpp
new file mode 100644
index 0000000000..fdde41f2d1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rulessym.cpp
@@ -0,0 +1,99 @@
+/*
+ File: first_set_rulessym.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "first_set_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_first_set_rules;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cfirst_set_rules::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfirst_set_rules_:{
+ Rfirst_set_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Rfirst_set_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfirst_set_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/first_set_rulestbl.cpp b/web/yacco2/compiler/grammars/first_set_rulestbl.cpp
new file mode 100644
index 0000000000..b9bce1c2f2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/first_set_rulestbl.cpp
@@ -0,0 +1,137 @@
+/*
+ File: first_set_rulestbl.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "first_set_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_first_set_rules;// grammar's ns
+// first set terminals
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA1_Cfirst_set_rules[] ={
+2
+,0,2
+,42,16
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cfirst_set_rules[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cfirst_set_rules;
+extern yacco2::State S2_Cfirst_set_rules;
+extern yacco2::State S3_Cfirst_set_rules;
+extern yacco2::State S4_Cfirst_set_rules;
+extern yacco2::State S5_Cfirst_set_rules;
+extern yacco2::State S6_Cfirst_set_rules;
+extern yacco2::State S7_Cfirst_set_rules;
+struct S1std_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cfirst_set_rules S1st_Cfirst_set_rules = {
+ 5
+ ,
+ {// start of table
+ {340,(State*)&S2_Cfirst_set_rules} // shift sym: rule_def
+ ,{569,(State*)&S1_Cfirst_set_rules} // accept sym: Rfirst_set_rules
+ ,{570,(State*)&S3_Cfirst_set_rules} // shift sym: Rrules
+ ,{571,(State*)&S7_Cfirst_set_rules} // shift sym: Rrule
+ ,{572,(State*)&S6_Cfirst_set_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cfirst_set_rules = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cfirst_set_rules,0,0,0,0};
+struct S2rtd_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cfirst_set_rules S2rt_Cfirst_set_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfirst_set_rules,Cfirst_set_rules::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cfirst_set_rules = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cfirst_set_rules,0,0,0};
+struct S3std_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Cfirst_set_rules S3st_Cfirst_set_rules = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S4_Cfirst_set_rules} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Cfirst_set_rules} // shift sym: rule_def
+ ,{571,(State*)&S5_Cfirst_set_rules} // shift sym: Rrule
+ ,{572,(State*)&S6_Cfirst_set_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Cfirst_set_rules = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cfirst_set_rules,0,0,0,0};
+struct S4rtd_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cfirst_set_rules S4rt_Cfirst_set_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfirst_set_rules,Cfirst_set_rules::rhs1_Rfirst_set_rules_}
+ }// end of reduce table
+};
+yacco2::State S4_Cfirst_set_rules = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cfirst_set_rules,0,0,0};
+struct S5rtd_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cfirst_set_rules S5rt_Cfirst_set_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfirst_set_rules,Cfirst_set_rules::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Cfirst_set_rules = //State's vectored into symbol: "Rrule"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cfirst_set_rules,0,0,0};
+struct S6rtd_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cfirst_set_rules S6rt_Cfirst_set_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfirst_set_rules,Cfirst_set_rules::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S6_Cfirst_set_rules = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cfirst_set_rules,0,0,0};
+struct S7rtd_Cfirst_set_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cfirst_set_rules S7rt_Cfirst_set_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfirst_set_rules,Cfirst_set_rules::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S7_Cfirst_set_rules = //State's vectored into symbol: "Rrule"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cfirst_set_rules,0,0,0};
diff --git a/web/yacco2/compiler/grammars/fsc_file.cpp b/web/yacco2/compiler/grammars/fsc_file.cpp
new file mode 100644
index 0000000000..e4585d0f9b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_file.cpp
@@ -0,0 +1,1227 @@
+/*
+ File: fsc_file.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "fsc_file.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsc_file;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 46;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[21] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[22] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[23] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[24] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[25] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[26] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[27] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[28] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[29] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[30] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[31] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[32] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[33] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[34] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[35] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[36] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[37] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[38] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[39] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[40] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[41] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[42] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[43] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[44] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[45] = new Per_rule_s_reuse_table();
+}
+ Cfsc_file::
+ Cfsc_file()
+ :yacco2::CAbs_fsm
+ ("fsc_file.lex"
+ ,"1.0"
+ ,"11 Mar 2005"
+ ,false
+ ,"\\Olinker's ``fsc'' control file parser."
+ ,"Fri Jan 30 18:55:11 2015 "
+ ,S1_Cfsc_file){
+
+ }
+
+Cfsc_file::~Cfsc_file(){
+
+ for(int x = 0;x < 46;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cfsc_file::failed(){
+ return false;
+ }
+ void Cfsc_file::op(){
+}
+int Cfsc_file::rhs_to_rules_mapping_[79] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,6 // subrule 10 for rule 7
+ ,6 // subrule 11 for rule 7
+ ,7 // subrule 12 for rule 8
+ ,8 // subrule 13 for rule 9
+ ,8 // subrule 14 for rule 9
+ ,9 // subrule 15 for rule 10
+ ,9 // subrule 16 for rule 10
+ ,10 // subrule 17 for rule 11
+ ,11 // subrule 18 for rule 12
+ ,11 // subrule 19 for rule 12
+ ,12 // subrule 20 for rule 13
+ ,12 // subrule 21 for rule 13
+ ,13 // subrule 22 for rule 14
+ ,14 // subrule 23 for rule 15
+ ,14 // subrule 24 for rule 15
+ ,15 // subrule 25 for rule 16
+ ,15 // subrule 26 for rule 16
+ ,16 // subrule 27 for rule 17
+ ,17 // subrule 28 for rule 18
+ ,17 // subrule 29 for rule 18
+ ,18 // subrule 30 for rule 19
+ ,18 // subrule 31 for rule 19
+ ,19 // subrule 32 for rule 20
+ ,20 // subrule 33 for rule 21
+ ,20 // subrule 34 for rule 21
+ ,21 // subrule 35 for rule 22
+ ,21 // subrule 36 for rule 22
+ ,22 // subrule 37 for rule 23
+ ,23 // subrule 38 for rule 24
+ ,23 // subrule 39 for rule 24
+ ,24 // subrule 40 for rule 25
+ ,24 // subrule 41 for rule 25
+ ,25 // subrule 42 for rule 26
+ ,25 // subrule 43 for rule 26
+ ,26 // subrule 44 for rule 27
+ ,26 // subrule 45 for rule 27
+ ,27 // subrule 46 for rule 28
+ ,27 // subrule 47 for rule 28
+ ,28 // subrule 48 for rule 29
+ ,28 // subrule 49 for rule 29
+ ,29 // subrule 50 for rule 30
+ ,30 // subrule 51 for rule 31
+ ,30 // subrule 52 for rule 31
+ ,31 // subrule 53 for rule 32
+ ,31 // subrule 54 for rule 32
+ ,32 // subrule 55 for rule 33
+ ,32 // subrule 56 for rule 33
+ ,33 // subrule 57 for rule 34
+ ,33 // subrule 58 for rule 34
+ ,34 // subrule 59 for rule 35
+ ,34 // subrule 60 for rule 35
+ ,35 // subrule 61 for rule 36
+ ,35 // subrule 62 for rule 36
+ ,36 // subrule 63 for rule 37
+ ,37 // subrule 64 for rule 38
+ ,37 // subrule 65 for rule 38
+ ,38 // subrule 66 for rule 39
+ ,38 // subrule 67 for rule 39
+ ,39 // subrule 68 for rule 40
+ ,39 // subrule 69 for rule 40
+ ,40 // subrule 70 for rule 41
+ ,40 // subrule 71 for rule 41
+ ,41 // subrule 72 for rule 42
+ ,41 // subrule 73 for rule 42
+ ,42 // subrule 74 for rule 43
+ ,42 // subrule 75 for rule 43
+ ,43 // subrule 76 for rule 44
+ ,44 // subrule 77 for rule 45
+ ,45 // subrule 78 for rule 46
+};
+Rfsc_file::Rfsc_file(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsc_file",0,Cfsc_file::R_Rfsc_file_,P,false,false){
+}
+
+void Rfsc_file::op(){
+ sstrace_rulesss
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ using namespace NS_yacco2_k_symbols;
+ int no_T = fsm->no_native_T_->no();
+ int sze_T = fsm->list_of_Ts_.size();
+ if(sze_T !=no_T){
+ CAbs_lr1_sym* sym = new Err_no_of_native_Ts_in_list_not_equal(sze_T);
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ return;
+ }
+ int no_th = fsm->no_threads_->no();
+ int sze_th = fsm->list_of_transitive_threads_.size();
+ if(sze_th != no_th){
+ CAbs_lr1_sym* sym = new Err_no_of_threads_in_list_not_equal(sze_th);
+ sym->set_rc(*fsm->no_threads_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ return;
+ }
+ if(fsm->monolithic_ == 'n'){// pass epsilon pass thru: thread grammar only
+ if((no_T == 0) && (no_th == 0)){
+ CAbs_lr1_sym* sym = new Err_epsilon_pass_thru;
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if((no_T == 1) && (no_th == 0)){
+ int transience = fsm->list_of_Ts_[0];
+ if(transience == 7){// \transienceoperator operator
+ CAbs_lr1_sym* sym = new Err_epsilon_pass_thru_no_Ts;
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ }
+ }
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*fsm->fully_qualified_th_name_.c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){// crted by another fsc file
+ if(report_card.tbl_entry_->defined_ == true){// probably dup fsc file
+ CAbs_lr1_sym* sym = new Err_already_defined_in_fsc_file;
+ sym->set_rc(*fsm->thread_name_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->defined_ = true;
+ th_in_stbl* th_in_tbl = (th_in_stbl*)report_card.tbl_entry_->symbol_;
+ thread_attributes* th_entry = th_in_tbl->thread_in_stbl();
+ th_entry->transitive_ = fsm->transitive_;
+ th_entry->grammar_file_name_ = fsm->grammar_file_name_;
+ th_entry->name_space_name_ = fsm->name_space_name_;
+ th_entry->thread_name_ = fsm->thread_name_;
+ th_entry->monolithic_ = fsm->monolithic_;
+ th_entry->file_name_ = fsm->file_name_;
+ th_entry->fsm_comments_ = fsm->fsm_comments_;
+ if(!fsm->list_of_Ts_.empty())
+ copy(fsm->list_of_Ts_.begin()
+ ,fsm->list_of_Ts_.end()
+ ,back_inserter(th_entry->list_of_Ts_));
+ if(!fsm->list_of_transitive_threads_.empty())
+ copy(fsm->list_of_transitive_threads_.begin()
+ ,fsm->list_of_transitive_threads_.end()
+ ,back_inserter(th_entry->list_of_transitive_threads_));
+ return;
+ }
+ thread_attributes* th_id =
+ new thread_attributes(fsm->fully_qualified_th_name_.c_str()
+ ,fsm->transitive_
+ ,fsm->grammar_file_name_
+ ,fsm->name_space_name_
+ ,fsm->thread_name_
+ ,fsm->monolithic_
+ ,fsm->file_name_
+ ,fsm->list_of_Ts_
+ ,fsm->list_of_transitive_threads_
+ ,fsm->fsm_comments_);
+ th_in_stbl* t = new th_in_stbl(th_id);
+ add_sym_to_stbl(report_card
+ ,*fsm->fully_qualified_th_name_.c_str()
+ ,*t
+ ,table_entry::defed
+ ,table_entry::thread);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ t->stbl_idx(report_card.pos_);
+ report_card.err_entry_->set_rc(*th_id,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ GRAMMAR_DICTIONARY.push_back(report_card.tbl_entry_);
+ th_id->th_enum_ = GRAMMAR_DICTIONARY.size()-1;
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+Rtransitive_phrase::Rtransitive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtransitive_phrase",0,Cfsc_file::R_Rtransitive_phrase_,P,false,false){
+}
+
+Rtransitive::Rtransitive(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtransitive",0,Cfsc_file::R_Rtransitive_,P,false,false){
+}
+
+void Rtransitive::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_transitive_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rtransitive_value::Rtransitive_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtransitive_value",0,Cfsc_file::R_Rtransitive_value_,P,false,false){
+}
+
+void Rtransitive_value::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ if(k->identifier()->size() != 1){
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ char c = (*k->identifier())[0];
+ if(c == 'n' || c == 'y'){
+ fsm->transitive_ = c;
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rtransitive_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rgrammar_name_phrase::Rgrammar_name_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rgrammar_name_phrase",0,Cfsc_file::R_Rgrammar_name_phrase_,P,false,false){
+}
+
+Rgrammar_name::Rgrammar_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rgrammar_name",0,Cfsc_file::R_Rgrammar_name_,P,false,false){
+}
+
+void Rgrammar_name::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_grammar_name_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rgrammar_name_value::Rgrammar_name_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rgrammar_name_value",0,Cfsc_file::R_Rgrammar_name_value_,P,false,false){
+}
+
+void Rgrammar_name_value::sr1(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->grammar_file_name_ = sf->p1__;
+
+}
+
+void Rgrammar_name_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_grammar_name_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,Cfsc_file::R_Rnamespace_phrase_,P,false,false){
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,Cfsc_file::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_namespace_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_value::Rnamespace_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_value",0,Cfsc_file::R_Rnamespace_value_,P,false,false){
+}
+
+void Rnamespace_value::sr1(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->name_space_name_ = sf->p1__;
+
+}
+
+void Rnamespace_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_namespace_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rthreadname_phrase::Rthreadname_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rthreadname_phrase",0,Cfsc_file::R_Rthreadname_phrase_,P,false,false){
+}
+
+Rthreadname::Rthreadname(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rthreadname",0,Cfsc_file::R_Rthreadname_,P,false,false){
+}
+
+void Rthreadname::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_threadname_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rthreadname_value::Rthreadname_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rthreadname_value",0,Cfsc_file::R_Rthreadname_value_,P,false,false){
+}
+
+void Rthreadname_value::sr1(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->thread_name_ = sf->p1__;
+ fsm->fully_qualified_th_name_+= fsm->name_space_name_->c_string()->c_str();
+ fsm->fully_qualified_th_name_ += "::";
+ fsm->fully_qualified_th_name_ += fsm->thread_name_->c_string()->c_str();
+ T_identifier* th_id = new T_identifier(fsm->fully_qualified_th_name_.c_str());
+ th_id->set_rc(*fsm->thread_name_,__FILE__,__LINE__);
+ string gnm(sf->p1__->c_string()->c_str());
+ USED_THREADS_LIST[gnm] = std::vector<string>();
+ std::map<std::string, std::vector<std::string> >::iterator i = USED_THREADS_LIST.find(gnm);
+ fsm->used_threads_ = &i->second;
+
+}
+
+void Rthreadname_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_threadname_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmonolithic_phrase::Rmonolithic_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmonolithic_phrase",0,Cfsc_file::R_Rmonolithic_phrase_,P,false,false){
+}
+
+Rmonolithic::Rmonolithic(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmonolithic",0,Cfsc_file::R_Rmonolithic_,P,false,false){
+}
+
+void Rmonolithic::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_monolithic_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmonolithic_value::Rmonolithic_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmonolithic_value",0,Cfsc_file::R_Rmonolithic_value_,P,false,false){
+}
+
+void Rmonolithic_value::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ if(k->identifier()->size() != 1){
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ char c = (*k->identifier())[0];
+ if(c == 'n' || c == 'y'){
+ fsm->monolithic_ = c;
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rmonolithic_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,Cfsc_file::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,Cfsc_file::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_filename_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_value::Rfilename_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_value",0,Cfsc_file::R_Rfilename_value_,P,false,false){
+}
+
+void Rfilename_value::sr1(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->file_name_ = sf->p1__;
+
+}
+
+void Rfilename_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_filename_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rno_of_T_phrase::Rno_of_T_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_T_phrase",0,Cfsc_file::R_Rno_of_T_phrase_,P,false,false){
+}
+
+Rno_of_T::Rno_of_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_T",0,Cfsc_file::R_Rno_of_T_,P,false,false){
+}
+
+void Rno_of_T::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_of_T_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rno_of_T_value::Rno_of_T_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_T_value",0,Cfsc_file::R_Rno_of_T_value_,P,false,false){
+}
+
+void Rno_of_T_value::sr1(){
+ struct SF{
+ T_int_no* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_of_T_ = sf->p1__;
+ // not eq make as a warning but continue parsing
+ if(T_DICTIONARY.size() != sf->p1__->no()){
+ CAbs_lr1_sym* sym = new Err_bad_T_alphabet;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+
+void Rno_of_T_value::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_of_T_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlist_of_native_terminals_phrase::Rlist_of_native_terminals_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_native_terminals_phrase",0,Cfsc_file::R_Rlist_of_native_terminals_phrase_,P,false,false){
+}
+
+Rlist_of_native_fset_terminals::Rlist_of_native_fset_terminals(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_native_fset_terminals",0,Cfsc_file::R_Rlist_of_native_fset_terminals_,P,false,false){
+}
+
+void Rlist_of_native_fset_terminals::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_list_of_terminals_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rno_of_native_fset_terminals::Rno_of_native_fset_terminals(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_native_fset_terminals",0,Cfsc_file::R_Rno_of_native_fset_terminals_,P,false,false){
+}
+
+void Rno_of_native_fset_terminals::sr1(){
+ struct SF{
+ T_int_no* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_native_T_ = sf->p1__;
+
+}
+
+void Rno_of_native_fset_terminals::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_of_terminals_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfset_terminals_epi::Rfset_terminals_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfset_terminals_epi",0,Cfsc_file::R_Rfset_terminals_epi_,P,false,false){
+}
+
+Rfset_terminals::Rfset_terminals(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfset_terminals",0,Cfsc_file::R_Rfset_terminals_,P,false,false){
+}
+
+Ra_T::Ra_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra_T",0,Cfsc_file::R_Ra_T_,P,false,false){
+}
+
+void Ra_T::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ T_identifier* k = sf->p1__;
+ CAbs_lr1_sym* sym = new Err_bad_T_in_list;
+ sym->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Ra_T::sr2(){
+ struct SF{
+ tth_in_stbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ tth_in_stbl* k = sf->p1__;
+ T_attributes* T_att = k->t_in_stbl();
+ fsm->list_of_Ts_.push_back(T_att->T_enum_);
+
+}
+
+Rend_list_of_native_fset_terminals::Rend_list_of_native_fset_terminals(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rend_list_of_native_fset_terminals",0,Cfsc_file::R_Rend_list_of_native_fset_terminals_,P,false,false){
+}
+
+void Rend_list_of_native_fset_terminals::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_end_list_native_T_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlist_of_transitive_threads_phrase::Rlist_of_transitive_threads_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_transitive_threads_phrase",0,Cfsc_file::R_Rlist_of_transitive_threads_phrase_,P,false,false){
+}
+
+Rlist_of_transitive_threads::Rlist_of_transitive_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_transitive_threads",0,Cfsc_file::R_Rlist_of_transitive_threads_,P,false,false){
+}
+
+void Rlist_of_transitive_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_list_of_trans_threads_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rno_of_transitive_threads::Rno_of_transitive_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_transitive_threads",0,Cfsc_file::R_Rno_of_transitive_threads_,P,false,false){
+}
+
+void Rno_of_transitive_threads::sr1(){
+ struct SF{
+ T_int_no* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_threads_ = sf->p1__;
+
+}
+
+void Rno_of_transitive_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_of_threads_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rtransitive_threads_epi::Rtransitive_threads_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtransitive_threads_epi",0,Cfsc_file::R_Rtransitive_threads_epi_,P,false,false){
+}
+
+Rtransitive_threads::Rtransitive_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtransitive_threads",0,Cfsc_file::R_Rtransitive_threads_,P,false,false){
+}
+
+Ra_th::Ra_th(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra_th",0,Cfsc_file::R_Ra_th_,P,false,false){
+}
+
+void Ra_th::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ thread_attributes* th = new thread_attributes(k->identifier()->c_str());
+ th->set_rc(*k,__FILE__,__LINE__);
+ fsm->list_of_transitive_threads_.push_back(th);
+ th_in_stbl* t = new th_in_stbl(th);
+ add_sym_to_stbl(report_card
+ ,*k->identifier()->c_str()
+ ,*t
+ ,table_entry::used
+ ,table_entry::thread);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ t->stbl_idx(report_card.pos_);
+ report_card.err_entry_->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ GRAMMAR_DICTIONARY.push_back(report_card.tbl_entry_);
+ th->th_enum_ = GRAMMAR_DICTIONARY.size()-1;
+
+
+}
+
+void Ra_th::sr2(){
+ struct SF{
+ th_in_stbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ th_in_stbl* k = sf->p1__;
+ thread_attributes* th = k->thread_in_stbl();
+ fsm->list_of_transitive_threads_.push_back(th);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*th->fully_qualified_th_name_.c_str());
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){// crted by another fsc file
+ report_card.tbl_entry_->used_ = true;
+ return;
+ }
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+
+}
+
+Rend_list_of_transitive_threads::Rend_list_of_transitive_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rend_list_of_transitive_threads",0,Cfsc_file::R_Rend_list_of_transitive_threads_,P,false,false){
+}
+
+void Rend_list_of_transitive_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_end_list_of_transitive_threads_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlist_of_used_threads_phrase::Rlist_of_used_threads_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_used_threads_phrase",0,Cfsc_file::R_Rlist_of_used_threads_phrase_,P,false,false){
+}
+
+Rlist_of_used_threads::Rlist_of_used_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_used_threads",0,Cfsc_file::R_Rlist_of_used_threads_,P,false,false){
+}
+
+void Rlist_of_used_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_list_of_trans_threads_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rno_of_used_threads::Rno_of_used_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_of_used_threads",0,Cfsc_file::R_Rno_of_used_threads_,P,false,false){
+}
+
+void Rno_of_used_threads::sr1(){
+ struct SF{
+ T_int_no* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->used_no_threads_ = sf->p1__;
+
+}
+
+void Rno_of_used_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_of_threads_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rused_threads_epi::Rused_threads_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rused_threads_epi",0,Cfsc_file::R_Rused_threads_epi_,P,false,false){
+}
+
+Rused_threads::Rused_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rused_threads",0,Cfsc_file::R_Rused_threads_,P,false,false){
+}
+
+Rb_th::Rb_th(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb_th",0,Cfsc_file::R_Rb_th_,P,false,false){
+}
+
+void Rb_th::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ thread_attributes* th = new thread_attributes(k->identifier()->c_str());
+ th->set_rc(*k,__FILE__,__LINE__);
+ fsm->list_of_used_threads_.push_back(th);
+ std::string::size_type x = th->fully_qualified_th_name_.find("::");
+ string tnm;
+ string& fqn = th->fully_qualified_th_name_;
+ for(int xx=x+2;xx< fqn.size();++xx){
+ tnm += fqn[xx];
+ }
+ fsm->used_threads_->push_back(tnm);
+
+}
+
+void Rb_th::sr2(){
+ struct SF{
+ th_in_stbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ th_in_stbl* k = sf->p1__;
+ thread_attributes* th = k->thread_in_stbl();
+ fsm->list_of_used_threads_.push_back(th);
+ std::string::size_type x = th->fully_qualified_th_name_.find("::");
+ string tnm;
+ string& fqn = th->fully_qualified_th_name_;
+ for(int xx=x+2;xx< fqn.size();++xx){
+ tnm += fqn[xx];
+ }
+ fsm->used_threads_->push_back(tnm);
+
+}
+
+Rend_list_of_used_threads::Rend_list_of_used_threads(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rend_list_of_used_threads",0,Cfsc_file::R_Rend_list_of_used_threads_,P,false,false){
+}
+
+void Rend_list_of_used_threads::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_end_list_of_transitive_threads_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_comments_phrase::Rfsm_comments_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments_phrase",0,Cfsc_file::R_Rfsm_comments_phrase_,P,false,false){
+}
+
+Rfsm_comments::Rfsm_comments(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments",0,Cfsc_file::R_Rfsm_comments_,P,false,false){
+}
+
+Rfsm_comments_value::Rfsm_comments_value(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments_value",0,Cfsc_file::R_Rfsm_comments_value_,P,false,false){
+}
+
+void Rfsm_comments_value::sr1(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_comments_ = sf->p1__;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/fsc_file.fsc b/web/yacco2/compiler/grammars/fsc_file.fsc
new file mode 100644
index 0000000000..d47651a325
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_file.fsc
@@ -0,0 +1,21 @@
+/*
+ File: fsc_file.fsc
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+transitive n
+grammar-name "fsc_file"
+name-space "NS_fsc_file"
+thread-name "Cfsc_file"
+monolithic y
+file-name "fsc_file.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ T_transitive
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"\\Olinker's ``fsc'' control file parser."
diff --git a/web/yacco2/compiler/grammars/fsc_file.h b/web/yacco2/compiler/grammars/fsc_file.h
new file mode 100644
index 0000000000..abe990dbea
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_file.h
@@ -0,0 +1,507 @@
+/*
+ File: fsc_file.h
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#ifndef __fsc_file_h__
+#define __fsc_file_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "yacco2_stbl.h"
+extern std::vector<NS_yacco2_terminals::table_entry*> GRAMMAR_DICTIONARY;
+extern std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
+extern std::map<std::string, std::vector<std::string> > USED_THREADS_LIST;
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cfsc_file;
+namespace NS_fsc_file {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[46];
+};
+class Cfsc_file: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfsc_file_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfsc_file_ = 1
+ ,R_Rtransitive_phrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rtransitive_phrase_ = 2
+ ,R_Rtransitive_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtransitive_ = 3
+ ,rhs2_Rtransitive_ = 4
+ ,R_Rtransitive_value_ = 572//start_of_rule_list + 6
+ ,rhs1_Rtransitive_value_ = 5
+ ,rhs2_Rtransitive_value_ = 6
+ ,R_Rgrammar_name_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rgrammar_name_phrase_ = 7
+ ,R_Rgrammar_name_ = 574//start_of_rule_list + 10
+ ,rhs1_Rgrammar_name_ = 8
+ ,rhs2_Rgrammar_name_ = 9
+ ,R_Rgrammar_name_value_ = 575//start_of_rule_list + 12
+ ,rhs1_Rgrammar_name_value_ = 10
+ ,rhs2_Rgrammar_name_value_ = 11
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 12
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 13
+ ,rhs2_Rnamespace_ = 14
+ ,R_Rnamespace_value_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_value_ = 15
+ ,rhs2_Rnamespace_value_ = 16
+ ,R_Rthreadname_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rthreadname_phrase_ = 17
+ ,R_Rthreadname_ = 580//start_of_rule_list + 22
+ ,rhs1_Rthreadname_ = 18
+ ,rhs2_Rthreadname_ = 19
+ ,R_Rthreadname_value_ = 581//start_of_rule_list + 24
+ ,rhs1_Rthreadname_value_ = 20
+ ,rhs2_Rthreadname_value_ = 21
+ ,R_Rmonolithic_phrase_ = 582//start_of_rule_list + 26
+ ,rhs1_Rmonolithic_phrase_ = 22
+ ,R_Rmonolithic_ = 583//start_of_rule_list + 28
+ ,rhs1_Rmonolithic_ = 23
+ ,rhs2_Rmonolithic_ = 24
+ ,R_Rmonolithic_value_ = 584//start_of_rule_list + 30
+ ,rhs1_Rmonolithic_value_ = 25
+ ,rhs2_Rmonolithic_value_ = 26
+ ,R_Rfilename_phrase_ = 585//start_of_rule_list + 32
+ ,rhs1_Rfilename_phrase_ = 27
+ ,R_Rfilename_ = 586//start_of_rule_list + 34
+ ,rhs1_Rfilename_ = 28
+ ,rhs2_Rfilename_ = 29
+ ,R_Rfilename_value_ = 587//start_of_rule_list + 36
+ ,rhs1_Rfilename_value_ = 30
+ ,rhs2_Rfilename_value_ = 31
+ ,R_Rno_of_T_phrase_ = 588//start_of_rule_list + 38
+ ,rhs1_Rno_of_T_phrase_ = 32
+ ,R_Rno_of_T_ = 589//start_of_rule_list + 40
+ ,rhs1_Rno_of_T_ = 33
+ ,rhs2_Rno_of_T_ = 34
+ ,R_Rno_of_T_value_ = 590//start_of_rule_list + 42
+ ,rhs1_Rno_of_T_value_ = 35
+ ,rhs2_Rno_of_T_value_ = 36
+ ,R_Rlist_of_native_terminals_phrase_ = 591//start_of_rule_list + 44
+ ,rhs1_Rlist_of_native_terminals_phrase_ = 37
+ ,R_Rlist_of_native_fset_terminals_ = 592//start_of_rule_list + 46
+ ,rhs1_Rlist_of_native_fset_terminals_ = 38
+ ,rhs2_Rlist_of_native_fset_terminals_ = 39
+ ,R_Rno_of_native_fset_terminals_ = 593//start_of_rule_list + 48
+ ,rhs1_Rno_of_native_fset_terminals_ = 40
+ ,rhs2_Rno_of_native_fset_terminals_ = 41
+ ,R_Rfset_terminals_epi_ = 594//start_of_rule_list + 50
+ ,rhs1_Rfset_terminals_epi_ = 42
+ ,rhs2_Rfset_terminals_epi_ = 43
+ ,R_Rfset_terminals_ = 595//start_of_rule_list + 52
+ ,rhs1_Rfset_terminals_ = 44
+ ,rhs2_Rfset_terminals_ = 45
+ ,R_Ra_T_ = 596//start_of_rule_list + 54
+ ,rhs1_Ra_T_ = 46
+ ,rhs2_Ra_T_ = 47
+ ,R_Rend_list_of_native_fset_terminals_ = 597//start_of_rule_list + 56
+ ,rhs1_Rend_list_of_native_fset_terminals_ = 48
+ ,rhs2_Rend_list_of_native_fset_terminals_ = 49
+ ,R_Rlist_of_transitive_threads_phrase_ = 598//start_of_rule_list + 58
+ ,rhs1_Rlist_of_transitive_threads_phrase_ = 50
+ ,R_Rlist_of_transitive_threads_ = 599//start_of_rule_list + 60
+ ,rhs1_Rlist_of_transitive_threads_ = 51
+ ,rhs2_Rlist_of_transitive_threads_ = 52
+ ,R_Rno_of_transitive_threads_ = 600//start_of_rule_list + 62
+ ,rhs1_Rno_of_transitive_threads_ = 53
+ ,rhs2_Rno_of_transitive_threads_ = 54
+ ,R_Rtransitive_threads_epi_ = 601//start_of_rule_list + 64
+ ,rhs1_Rtransitive_threads_epi_ = 55
+ ,rhs2_Rtransitive_threads_epi_ = 56
+ ,R_Rtransitive_threads_ = 602//start_of_rule_list + 66
+ ,rhs1_Rtransitive_threads_ = 57
+ ,rhs2_Rtransitive_threads_ = 58
+ ,R_Ra_th_ = 603//start_of_rule_list + 68
+ ,rhs1_Ra_th_ = 59
+ ,rhs2_Ra_th_ = 60
+ ,R_Rend_list_of_transitive_threads_ = 604//start_of_rule_list + 70
+ ,rhs1_Rend_list_of_transitive_threads_ = 61
+ ,rhs2_Rend_list_of_transitive_threads_ = 62
+ ,R_Rlist_of_used_threads_phrase_ = 605//start_of_rule_list + 72
+ ,rhs1_Rlist_of_used_threads_phrase_ = 63
+ ,R_Rlist_of_used_threads_ = 606//start_of_rule_list + 74
+ ,rhs1_Rlist_of_used_threads_ = 64
+ ,rhs2_Rlist_of_used_threads_ = 65
+ ,R_Rno_of_used_threads_ = 607//start_of_rule_list + 76
+ ,rhs1_Rno_of_used_threads_ = 66
+ ,rhs2_Rno_of_used_threads_ = 67
+ ,R_Rused_threads_epi_ = 608//start_of_rule_list + 78
+ ,rhs1_Rused_threads_epi_ = 68
+ ,rhs2_Rused_threads_epi_ = 69
+ ,R_Rused_threads_ = 609//start_of_rule_list + 80
+ ,rhs1_Rused_threads_ = 70
+ ,rhs2_Rused_threads_ = 71
+ ,R_Rb_th_ = 610//start_of_rule_list + 82
+ ,rhs1_Rb_th_ = 72
+ ,rhs2_Rb_th_ = 73
+ ,R_Rend_list_of_used_threads_ = 611//start_of_rule_list + 84
+ ,rhs1_Rend_list_of_used_threads_ = 74
+ ,rhs2_Rend_list_of_used_threads_ = 75
+ ,R_Rfsm_comments_phrase_ = 612//start_of_rule_list + 86
+ ,rhs1_Rfsm_comments_phrase_ = 76
+ ,R_Rfsm_comments_ = 613//start_of_rule_list + 88
+ ,rhs1_Rfsm_comments_ = 77
+ ,R_Rfsm_comments_value_ = 614//start_of_rule_list + 90
+ ,rhs1_Rfsm_comments_value_ = 78
+ };
+ //no of la sets = 22
+ //no of states = 104
+ Cfsc_file();
+ ~Cfsc_file();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[79];
+
+ public:
+ std::string fully_qualified_th_name_;
+ char transitive_;
+ char monolithic_;
+ NS_yacco2_terminals::T_c_string* grammar_file_name_;
+ NS_yacco2_terminals::T_c_string* name_space_name_;
+ NS_yacco2_terminals::T_c_string* thread_name_;
+ NS_yacco2_terminals::T_c_string* file_name_;
+ NS_yacco2_terminals::T_c_string* fsm_comments_;
+ NS_yacco2_terminals::T_int_no* no_of_T_;
+ std::vector<int> list_of_Ts_;
+ NS_yacco2_terminals::T_int_no* no_native_T_;
+ std::vector<NS_yacco2_terminals::thread_attributes*> list_of_transitive_threads_;
+ std::vector<NS_yacco2_terminals::thread_attributes*> list_of_used_threads_;
+ NS_yacco2_terminals::T_int_no* no_threads_;
+ NS_yacco2_terminals::T_int_no* used_no_threads_;
+ std::vector<std::string>* used_threads_;
+
+ };
+struct Rfsc_file;
+struct Rtransitive_phrase;
+struct Rtransitive;
+struct Rtransitive_value;
+struct Rgrammar_name_phrase;
+struct Rgrammar_name;
+struct Rgrammar_name_value;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_value;
+struct Rthreadname_phrase;
+struct Rthreadname;
+struct Rthreadname_value;
+struct Rmonolithic_phrase;
+struct Rmonolithic;
+struct Rmonolithic_value;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_value;
+struct Rno_of_T_phrase;
+struct Rno_of_T;
+struct Rno_of_T_value;
+struct Rlist_of_native_terminals_phrase;
+struct Rlist_of_native_fset_terminals;
+struct Rno_of_native_fset_terminals;
+struct Rfset_terminals_epi;
+struct Rfset_terminals;
+struct Ra_T;
+struct Rend_list_of_native_fset_terminals;
+struct Rlist_of_transitive_threads_phrase;
+struct Rlist_of_transitive_threads;
+struct Rno_of_transitive_threads;
+struct Rtransitive_threads_epi;
+struct Rtransitive_threads;
+struct Ra_th;
+struct Rend_list_of_transitive_threads;
+struct Rlist_of_used_threads_phrase;
+struct Rlist_of_used_threads;
+struct Rno_of_used_threads;
+struct Rused_threads_epi;
+struct Rused_threads;
+struct Rb_th;
+struct Rend_list_of_used_threads;
+struct Rfsm_comments_phrase;
+struct Rfsm_comments;
+struct Rfsm_comments_value;
+struct Rfsc_file:public yacco2::CAbs_lr1_sym {
+ Rfsc_file(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rtransitive_phrase:public yacco2::CAbs_lr1_sym {
+ Rtransitive_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rtransitive:public yacco2::CAbs_lr1_sym {
+ Rtransitive(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rtransitive_value:public yacco2::CAbs_lr1_sym {
+ Rtransitive_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rgrammar_name_phrase:public yacco2::CAbs_lr1_sym {
+ Rgrammar_name_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rgrammar_name:public yacco2::CAbs_lr1_sym {
+ Rgrammar_name(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rgrammar_name_value:public yacco2::CAbs_lr1_sym {
+ Rgrammar_name_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace_value:public yacco2::CAbs_lr1_sym {
+ Rnamespace_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rthreadname_phrase:public yacco2::CAbs_lr1_sym {
+ Rthreadname_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rthreadname:public yacco2::CAbs_lr1_sym {
+ Rthreadname(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rthreadname_value:public yacco2::CAbs_lr1_sym {
+ Rthreadname_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rmonolithic_phrase:public yacco2::CAbs_lr1_sym {
+ Rmonolithic_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rmonolithic:public yacco2::CAbs_lr1_sym {
+ Rmonolithic(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rmonolithic_value:public yacco2::CAbs_lr1_sym {
+ Rmonolithic_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfilename_value:public yacco2::CAbs_lr1_sym {
+ Rfilename_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rno_of_T_phrase:public yacco2::CAbs_lr1_sym {
+ Rno_of_T_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rno_of_T:public yacco2::CAbs_lr1_sym {
+ Rno_of_T(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rno_of_T_value:public yacco2::CAbs_lr1_sym {
+ Rno_of_T_value(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlist_of_native_terminals_phrase:public yacco2::CAbs_lr1_sym {
+ Rlist_of_native_terminals_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rlist_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
+ Rlist_of_native_fset_terminals(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rno_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
+ Rno_of_native_fset_terminals(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rfset_terminals_epi:public yacco2::CAbs_lr1_sym {
+ Rfset_terminals_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rfset_terminals:public yacco2::CAbs_lr1_sym {
+ Rfset_terminals(yacco2::Parser* P);
+ public:
+};
+
+struct Ra_T:public yacco2::CAbs_lr1_sym {
+ Ra_T(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rend_list_of_native_fset_terminals:public yacco2::CAbs_lr1_sym {
+ Rend_list_of_native_fset_terminals(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rlist_of_transitive_threads_phrase:public yacco2::CAbs_lr1_sym {
+ Rlist_of_transitive_threads_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rlist_of_transitive_threads:public yacco2::CAbs_lr1_sym {
+ Rlist_of_transitive_threads(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rno_of_transitive_threads:public yacco2::CAbs_lr1_sym {
+ Rno_of_transitive_threads(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rtransitive_threads_epi:public yacco2::CAbs_lr1_sym {
+ Rtransitive_threads_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rtransitive_threads:public yacco2::CAbs_lr1_sym {
+ Rtransitive_threads(yacco2::Parser* P);
+ public:
+};
+
+struct Ra_th:public yacco2::CAbs_lr1_sym {
+ Ra_th(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rend_list_of_transitive_threads:public yacco2::CAbs_lr1_sym {
+ Rend_list_of_transitive_threads(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rlist_of_used_threads_phrase:public yacco2::CAbs_lr1_sym {
+ Rlist_of_used_threads_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rlist_of_used_threads:public yacco2::CAbs_lr1_sym {
+ Rlist_of_used_threads(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rno_of_used_threads:public yacco2::CAbs_lr1_sym {
+ Rno_of_used_threads(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rused_threads_epi:public yacco2::CAbs_lr1_sym {
+ Rused_threads_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rused_threads:public yacco2::CAbs_lr1_sym {
+ Rused_threads(yacco2::Parser* P);
+ public:
+};
+
+struct Rb_th:public yacco2::CAbs_lr1_sym {
+ Rb_th(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rend_list_of_used_threads:public yacco2::CAbs_lr1_sym {
+ Rend_list_of_used_threads(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_comments_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfsm_comments:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments(yacco2::Parser* P);
+ public:
+};
+
+struct Rfsm_comments_value:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments_value(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/fsc_file.lex b/web/yacco2/compiler/grammars/fsc_file.lex
new file mode 100644
index 0000000000..e386257c88
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_file.lex
@@ -0,0 +1,782 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: fsc_file.lex
+dates: 11 mar. 2005
+Purpose: grammar's fsc file syntax
+ puts grammar's attributes into yacco2's symbol table
+ and into a global dictionary of threads for consolidated processing.
+Note: use of |?| to trap errors: even overruns.
+Possible Errors:
+Err_no_of_native_Ts_in_list_not_equal LR1_err_no_of_threads_in_list_not_equal
+Err_epsilon_pass_thru LR1_err_epsilon_pass_thru_no_Ts
+Err_already_defined_in_fsc_file
+Err_transitive_kw_not_present LR1_err_transitive_value_bad
+symbol table errors
+
+Err_grammar_name_kw_not_present LR1_err_grammar_name_value_not_present
+Err_namespace_kw_not_present LR1_err_namespace_value_not_present
+Err_threadname_kw_not_present LR1_err_threadname_value_not_present
+Err_monolithic_kw_not_present LR1_err_monolithic_value_bad
+Err_filename_kw_not_present LR1_err_filename_value_not_present
+Err_no_of_T_kw_not_present LR1_err_no_of_T_does_not_match_T_alphabet
+Err_no_of_T_value_not_present LR1_err_list_of_terminals_kw_not_present
+Err_no_of_terminals_not_present
+Err_bad_T_in_list LR1_err_end_list_native_T_kw_not_present
+Err_list_of_transitive_threads_kw_not_present
+Err_no_of_threads_not_present
+Err_no_sym_defs_present LR1_err_end_list_of_transitive_threads_kw_not_present
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |fsc_file| stand alone Grammar.\fbreak
+Parses the ``first set control'' files outputed from each grammar.
+This is the fodder of \O2's linker to generate the first sets per thread.
+It puts the grammar's attributes into yacco2's symbol table
+and into a global dictionary of threads for consolidation processing.
+See \O2{}linker documentation on the real lowdown.\fbreak
+\fbreak
+\fbreak
+Linker's control language.\fbreak
+\let\setuplistinghook = \relax
+\listing{"/usr/local/yacco2/diagrams+etc/intro4.txt"}
+\fbreak
+@/
+fsm
+(fsm-id "fsc_file.lex",fsm-filename fsc_file,fsm-namespace NS_fsc_file
+,fsm-class Cfsc_file{
+ user-prefix-declaration
+#include "yacco2_stbl.h"
+extern std::vector<NS_yacco2_terminals::table_entry*> GRAMMAR_DICTIONARY;
+extern std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
+extern std::map<std::string, std::vector<std::string> > USED_THREADS_LIST;
+ ***
+ user-declaration
+ public:
+ std::string fully_qualified_th_name_;
+ char transitive_;
+ char monolithic_;
+ NS_yacco2_terminals::T_c_string* grammar_file_name_;
+ NS_yacco2_terminals::T_c_string* name_space_name_;
+ NS_yacco2_terminals::T_c_string* thread_name_;
+ NS_yacco2_terminals::T_c_string* file_name_;
+ NS_yacco2_terminals::T_c_string* fsm_comments_;
+ NS_yacco2_terminals::T_int_no* no_of_T_;
+ std::vector<int> list_of_Ts_;
+ NS_yacco2_terminals::T_int_no* no_native_T_;
+ std::vector<NS_yacco2_terminals::thread_attributes*> list_of_transitive_threads_;
+ std::vector<NS_yacco2_terminals::thread_attributes*> list_of_used_threads_;
+ NS_yacco2_terminals::T_int_no* no_threads_;
+ NS_yacco2_terminals::T_int_no* used_no_threads_;
+ std::vector<std::string>* used_threads_;
+ ***
+}
+,fsm-version "1.0",fsm-date "11 Mar 2005",fsm-debug "false"
+,fsm-comments "\\Olinker's ``fsc'' control file parser.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rfsc_file (
+lhs{
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ using namespace NS_yacco2_k_symbols;
+ int no_T = fsm->no_native_T_->no();
+ int sze_T = fsm->list_of_Ts_.size();
+ if(sze_T !=no_T){
+ CAbs_lr1_sym* sym = new Err_no_of_native_Ts_in_list_not_equal(sze_T);
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ return;
+ }
+ int no_th = fsm->no_threads_->no();
+ int sze_th = fsm->list_of_transitive_threads_.size();
+ if(sze_th != no_th){
+ CAbs_lr1_sym* sym = new Err_no_of_threads_in_list_not_equal(sze_th);
+ sym->set_rc(*fsm->no_threads_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ return;
+ }
+ if(fsm->monolithic_ == 'n'){// pass epsilon pass thru: thread grammar only
+ if((no_T == 0) && (no_th == 0)){
+ CAbs_lr1_sym* sym = new Err_epsilon_pass_thru;
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if((no_T == 1) && (no_th == 0)){
+ int transience = fsm->list_of_Ts_[0];
+ if(transience == 7){// \transienceoperator operator
+ CAbs_lr1_sym* sym = new Err_epsilon_pass_thru_no_Ts;
+ sym->set_rc(*fsm->no_native_T_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ }
+ }
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*fsm->fully_qualified_th_name_.c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){// crted by another fsc file
+ if(report_card.tbl_entry_->defined_ == true){// probably dup fsc file
+ CAbs_lr1_sym* sym = new Err_already_defined_in_fsc_file;
+ sym->set_rc(*fsm->thread_name_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->defined_ = true;
+ th_in_stbl* th_in_tbl = (th_in_stbl*)report_card.tbl_entry_->symbol_;
+ thread_attributes* th_entry = th_in_tbl->thread_in_stbl();
+ th_entry->transitive_ = fsm->transitive_;
+ th_entry->grammar_file_name_ = fsm->grammar_file_name_;
+ th_entry->name_space_name_ = fsm->name_space_name_;
+ th_entry->thread_name_ = fsm->thread_name_;
+ th_entry->monolithic_ = fsm->monolithic_;
+ th_entry->file_name_ = fsm->file_name_;
+ th_entry->fsm_comments_ = fsm->fsm_comments_;
+ if(!fsm->list_of_Ts_.empty())
+ copy(fsm->list_of_Ts_.begin()
+ ,fsm->list_of_Ts_.end()
+ ,back_inserter(th_entry->list_of_Ts_));
+ if(!fsm->list_of_transitive_threads_.empty())
+ copy(fsm->list_of_transitive_threads_.begin()
+ ,fsm->list_of_transitive_threads_.end()
+ ,back_inserter(th_entry->list_of_transitive_threads_));
+ return;
+ }
+ thread_attributes* th_id =
+ new thread_attributes(fsm->fully_qualified_th_name_.c_str()
+ ,fsm->transitive_
+ ,fsm->grammar_file_name_
+ ,fsm->name_space_name_
+ ,fsm->thread_name_
+ ,fsm->monolithic_
+ ,fsm->file_name_
+ ,fsm->list_of_Ts_
+ ,fsm->list_of_transitive_threads_
+ ,fsm->fsm_comments_);
+ th_in_stbl* t = new th_in_stbl(th_id);
+ add_sym_to_stbl(report_card
+ ,*fsm->fully_qualified_th_name_.c_str()
+ ,*t
+ ,table_entry::defed
+ ,table_entry::thread);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ t->stbl_idx(report_card.pos_);
+ report_card.err_entry_->set_rc(*th_id,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ GRAMMAR_DICTIONARY.push_back(report_card.tbl_entry_);
+ th_id->th_enum_ = GRAMMAR_DICTIONARY.size()-1;
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> Rtransitive_phrase
+ Rgrammar_name_phrase
+ Rnamespace_phrase
+ Rthreadname_phrase
+ Rmonolithic_phrase
+ Rfilename_phrase
+ Rno_of_T_phrase
+ Rlist_of_native_terminals_phrase
+ Rlist_of_transitive_threads_phrase
+ Rlist_of_used_threads_phrase
+ Rfsm_comments_phrase
+ eog
+}
+
+Rtransitive_phrase (){
+ -> Rtransitive Rtransitive_value
+}
+Rtransitive (){
+ -> "transitive"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_transitive_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rtransitive_value (){
+ -> identifier {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ if(k->identifier()->size() != 1){
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ char c = (*k->identifier())[0];
+ if(c == 'n' || c == 'y'){
+ fsm->transitive_ = c;
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_transitive_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rgrammar_name_phrase (){
+ -> Rgrammar_name Rgrammar_name_value
+}
+
+Rgrammar_name (){
+ -> "grammar-name"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_grammar_name_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rgrammar_name_value (){
+ -> "c-string" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->grammar_file_name_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_grammar_name_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (){
+ -> Rnamespace Rnamespace_value
+}
+
+Rnamespace (){
+ -> "#name-space"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_namespace_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_value (){
+ -> "c-string" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->name_space_name_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_namespace_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rthreadname_phrase (){
+ -> Rthreadname Rthreadname_value
+}
+
+Rthreadname (){
+ -> "thread-name"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_threadname_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rthreadname_value (){
+ -> "c-string" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->thread_name_ = sf->p1__;
+ fsm->fully_qualified_th_name_+= fsm->name_space_name_->c_string()->c_str();
+ fsm->fully_qualified_th_name_ += "::";
+ fsm->fully_qualified_th_name_ += fsm->thread_name_->c_string()->c_str();
+ T_identifier* th_id = new T_identifier(fsm->fully_qualified_th_name_.c_str());
+ th_id->set_rc(*fsm->thread_name_,__FILE__,__LINE__);
+ string gnm(sf->p1__->c_string()->c_str());
+ USED_THREADS_LIST[gnm] = std::vector<string>();
+ std::map<std::string, std::vector<std::string> >::iterator i = USED_THREADS_LIST.find(gnm);
+ fsm->used_threads_ = &i->second;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_threadname_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rmonolithic_phrase (){
+ -> Rmonolithic Rmonolithic_value
+}
+
+Rmonolithic (){
+ -> "monolithic"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_monolithic_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rmonolithic_value (){
+ -> identifier {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ if(k->identifier()->size() != 1){
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ char c = (*k->identifier())[0];
+ if(c == 'n' || c == 'y'){
+ fsm->monolithic_ = c;
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_monolithic_value_bad;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_phrase (){
+ -> Rfilename Rfilename_value
+}
+
+Rfilename (){
+ -> "#file-name"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_filename_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_value (){
+ -> "c-string" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->file_name_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_filename_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rno_of_T_phrase (){
+ -> Rno_of_T Rno_of_T_value
+}
+
+Rno_of_T (){
+ -> "no-of-T"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_of_T_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rno_of_T_value (){
+ -> "int-no" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_of_T_ = sf->p1__;
+ // not eq make as a warning but continue parsing
+ if(T_DICTIONARY.size() != sf->p1__->no()){
+ CAbs_lr1_sym* sym = new Err_bad_T_alphabet;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_of_T_value_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlist_of_native_terminals_phrase (){
+ -> Rlist_of_native_fset_terminals
+ Rno_of_native_fset_terminals
+ Rfset_terminals_epi
+ Rend_list_of_native_fset_terminals
+}
+
+Rlist_of_native_fset_terminals (){
+ -> "list-of-native-first-set-terminals"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_list_of_terminals_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rno_of_native_fset_terminals (){
+ -> "int-no" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_native_T_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_of_terminals_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfset_terminals_epi (){
+ -> Rfset_terminals
+ ->
+}
+
+Rfset_terminals (){
+ -> Ra_T
+ -> Rfset_terminals Ra_T
+}
+
+Ra_T (){
+ -> identifier{
+ op
+ T_identifier* k = sf->p1__;
+ CAbs_lr1_sym* sym = new Err_bad_T_in_list;
+ sym->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "tth-in-stbl" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ tth_in_stbl* k = sf->p1__;
+ T_attributes* T_att = k->t_in_stbl();
+ fsm->list_of_Ts_.push_back(T_att->T_enum_);
+ ***
+ }
+}
+
+Rend_list_of_native_fset_terminals (){
+ -> "end-list-of-native-first-set-terminals"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_end_list_native_T_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlist_of_transitive_threads_phrase (){
+ -> Rlist_of_transitive_threads
+ Rno_of_transitive_threads
+ Rtransitive_threads_epi
+ Rend_list_of_transitive_threads
+}
+
+Rlist_of_transitive_threads (){
+ -> "list-of-transitive-threads"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_list_of_trans_threads_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rno_of_transitive_threads (){
+ -> "int-no" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->no_threads_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_of_threads_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rtransitive_threads_epi (){
+ -> Rtransitive_threads
+ ->
+}
+
+Rtransitive_threads (){
+ -> Ra_th
+ -> Rtransitive_threads Ra_th
+}
+
+Ra_th (){
+ -> identifier{
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ thread_attributes* th = new thread_attributes(k->identifier()->c_str());
+ th->set_rc(*k,__FILE__,__LINE__);
+ fsm->list_of_transitive_threads_.push_back(th);
+ th_in_stbl* t = new th_in_stbl(th);
+ add_sym_to_stbl(report_card
+ ,*k->identifier()->c_str()
+ ,*t
+ ,table_entry::used
+ ,table_entry::thread);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ t->stbl_idx(report_card.pos_);
+ report_card.err_entry_->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ GRAMMAR_DICTIONARY.push_back(report_card.tbl_entry_);
+ th->th_enum_ = GRAMMAR_DICTIONARY.size()-1;
+
+ ***
+ }
+ -> "th-in-stbl"{
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ th_in_stbl* k = sf->p1__;
+ thread_attributes* th = k->thread_in_stbl();
+ fsm->list_of_transitive_threads_.push_back(th);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*th->fully_qualified_th_name_.c_str());
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){// crted by another fsc file
+ report_card.tbl_entry_->used_ = true;
+ return;
+ }
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*k,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ***
+ }
+}
+
+Rend_list_of_transitive_threads (){
+ -> "end-list-of-transitive-threads"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_end_list_of_transitive_threads_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+Rlist_of_used_threads_phrase (){
+ -> Rlist_of_used_threads
+ Rno_of_used_threads
+ Rused_threads_epi
+ Rend_list_of_used_threads
+}
+
+Rlist_of_used_threads (){
+ -> "list-of-used-threads"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_list_of_trans_threads_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rno_of_used_threads (){
+ -> "int-no" {
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->used_no_threads_ = sf->p1__;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_of_threads_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rused_threads_epi (){
+ -> Rused_threads
+ ->
+}
+
+Rused_threads (){
+ -> Rb_th
+ -> Rused_threads Rb_th
+}
+
+Rb_th (){
+ -> identifier{
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ thread_attributes* th = new thread_attributes(k->identifier()->c_str());
+ th->set_rc(*k,__FILE__,__LINE__);
+ fsm->list_of_used_threads_.push_back(th);
+ std::string::size_type x = th->fully_qualified_th_name_.find("::");
+ string tnm;
+ string& fqn = th->fully_qualified_th_name_;
+ for(int xx=x+2;xx< fqn.size();++xx){
+ tnm += fqn[xx];
+ }
+ fsm->used_threads_->push_back(tnm);
+ ***
+ }
+ -> "th-in-stbl"{
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ th_in_stbl* k = sf->p1__;
+ thread_attributes* th = k->thread_in_stbl();
+ fsm->list_of_used_threads_.push_back(th);
+ std::string::size_type x = th->fully_qualified_th_name_.find("::");
+ string tnm;
+ string& fqn = th->fully_qualified_th_name_;
+ for(int xx=x+2;xx< fqn.size();++xx){
+ tnm += fqn[xx];
+ }
+ fsm->used_threads_->push_back(tnm);
+ ***
+ }
+}
+
+Rend_list_of_used_threads (){
+ -> "end-list-of-used-threads"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_end_list_of_transitive_threads_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_comments_phrase (){
+ -> Rfsm_comments Rfsm_comments_value
+}
+Rfsm_comments (){
+ -> "#fsm-comments"
+}
+Rfsm_comments_value (){
+ -> "c-string" {// drain the comment swamp
+ op
+ Cfsc_file* fsm = (Cfsc_file*) rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_comments_ = sf->p1__;
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/fsc_filesym.cpp b/web/yacco2/compiler/grammars/fsc_filesym.cpp
new file mode 100644
index 0000000000..668e2c11d1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_filesym.cpp
@@ -0,0 +1,1160 @@
+/*
+ File: fsc_filesym.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "fsc_file.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsc_file;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cfsc_file::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfsc_file_:{
+ Rfsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 12;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rtransitive_phrase_:{
+ Rtransitive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtransitive_:{
+ Rtransitive* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtransitive_:{
+ Rtransitive* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rtransitive_value_:{
+ Rtransitive_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtransitive_value_:{
+ Rtransitive_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rgrammar_name_phrase_:{
+ Rgrammar_name_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_name_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_name_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rgrammar_name_:{
+ Rgrammar_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rgrammar_name_:{
+ Rgrammar_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rgrammar_name_value_:{
+ Rgrammar_name_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_name_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_name_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rgrammar_name_value_:{
+ Rgrammar_name_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_name_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_name_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_value_:{
+ Rnamespace_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_value_:{
+ Rnamespace_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rthreadname_phrase_:{
+ Rthreadname_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rthreadname_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rthreadname_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rthreadname_:{
+ Rthreadname* sym;
+ if(re->rule_ == 0){
+ sym = new Rthreadname(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rthreadname*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rthreadname_:{
+ Rthreadname* sym;
+ if(re->rule_ == 0){
+ sym = new Rthreadname(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rthreadname*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rthreadname_value_:{
+ Rthreadname_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rthreadname_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rthreadname_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rthreadname_value_:{
+ Rthreadname_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rthreadname_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rthreadname_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rmonolithic_phrase_:{
+ Rmonolithic_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmonolithic_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmonolithic_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rmonolithic_:{
+ Rmonolithic* sym;
+ if(re->rule_ == 0){
+ sym = new Rmonolithic(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmonolithic*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmonolithic_:{
+ Rmonolithic* sym;
+ if(re->rule_ == 0){
+ sym = new Rmonolithic(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmonolithic*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rmonolithic_value_:{
+ Rmonolithic_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rmonolithic_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmonolithic_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmonolithic_value_:{
+ Rmonolithic_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rmonolithic_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmonolithic_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfilename_value_:{
+ Rfilename_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_value_:{
+ Rfilename_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rno_of_T_phrase_:{
+ Rno_of_T_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_T_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_T_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rno_of_T_:{
+ Rno_of_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rno_of_T_:{
+ Rno_of_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rno_of_T_value_:{
+ Rno_of_T_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_T_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_T_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rno_of_T_value_:{
+ Rno_of_T_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_T_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_T_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlist_of_native_terminals_phrase_:{
+ Rlist_of_native_terminals_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_native_terminals_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_native_terminals_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rlist_of_native_fset_terminals_:{
+ Rlist_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlist_of_native_fset_terminals_:{
+ Rlist_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rno_of_native_fset_terminals_:{
+ Rno_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rno_of_native_fset_terminals_:{
+ Rno_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfset_terminals_epi_:{
+ Rfset_terminals_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rfset_terminals_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfset_terminals_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rfset_terminals_epi_:{
+ Rfset_terminals_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rfset_terminals_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfset_terminals_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rfset_terminals_:{
+ Rfset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rfset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rfset_terminals_:{
+ Rfset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rfset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Ra_T_:{
+ Ra_T* sym;
+ if(re->rule_ == 0){
+ sym = new Ra_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ra_T_:{
+ Ra_T* sym;
+ if(re->rule_ == 0){
+ sym = new Ra_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rend_list_of_native_fset_terminals_:{
+ Rend_list_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rend_list_of_native_fset_terminals_:{
+ Rend_list_of_native_fset_terminals* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_native_fset_terminals(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_native_fset_terminals*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlist_of_transitive_threads_phrase_:{
+ Rlist_of_transitive_threads_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_transitive_threads_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_transitive_threads_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rlist_of_transitive_threads_:{
+ Rlist_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlist_of_transitive_threads_:{
+ Rlist_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rno_of_transitive_threads_:{
+ Rno_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rno_of_transitive_threads_:{
+ Rno_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rtransitive_threads_epi_:{
+ Rtransitive_threads_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_threads_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_threads_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtransitive_threads_epi_:{
+ Rtransitive_threads_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_threads_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_threads_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rtransitive_threads_:{
+ Rtransitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtransitive_threads_:{
+ Rtransitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rtransitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtransitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Ra_th_:{
+ Ra_th* sym;
+ if(re->rule_ == 0){
+ sym = new Ra_th(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra_th*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ra_th_:{
+ Ra_th* sym;
+ if(re->rule_ == 0){
+ sym = new Ra_th(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra_th*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rend_list_of_transitive_threads_:{
+ Rend_list_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rend_list_of_transitive_threads_:{
+ Rend_list_of_transitive_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_transitive_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_transitive_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlist_of_used_threads_phrase_:{
+ Rlist_of_used_threads_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_used_threads_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_used_threads_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rlist_of_used_threads_:{
+ Rlist_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlist_of_used_threads_:{
+ Rlist_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rno_of_used_threads_:{
+ Rno_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rno_of_used_threads_:{
+ Rno_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rused_threads_epi_:{
+ Rused_threads_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rused_threads_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rused_threads_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rused_threads_epi_:{
+ Rused_threads_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rused_threads_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rused_threads_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rused_threads_:{
+ Rused_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rused_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rused_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rused_threads_:{
+ Rused_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rused_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rused_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rb_th_:{
+ Rb_th* sym;
+ if(re->rule_ == 0){
+ sym = new Rb_th(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb_th*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rb_th_:{
+ Rb_th* sym;
+ if(re->rule_ == 0){
+ sym = new Rb_th(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb_th*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rend_list_of_used_threads_:{
+ Rend_list_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rend_list_of_used_threads_:{
+ Rend_list_of_used_threads* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_list_of_used_threads(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_list_of_used_threads*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_comments_phrase_:{
+ Rfsm_comments_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfsm_comments_:{
+ Rfsm_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rfsm_comments_value_:{
+ Rfsm_comments_value* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_value(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_value*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/fsc_filetbl.cpp b/web/yacco2/compiler/grammars/fsc_filetbl.cpp
new file mode 100644
index 0000000000..36fcb24451
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsc_filetbl.cpp
@@ -0,0 +1,1921 @@
+/*
+ File: fsc_filetbl.cpp
+ Date and Time: Fri Jan 30 18:55:11 2015
+*/
+#include "fsc_file.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsc_file;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// T_identifier
+yacco2::UCHAR LA1_Cfsc_file[] ={
+2
+,0,1
+,34,128
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cfsc_file[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// T_grammar_name
+yacco2::UCHAR LA3_Cfsc_file[] ={
+2
+,0,1
+,43,32
+};
+// LR1_questionable_shift_operator
+// T_c_string
+yacco2::UCHAR LA4_Cfsc_file[] ={
+2
+,0,1
+,34,8
+};
+// LR1_questionable_shift_operator
+// T_name_space
+yacco2::UCHAR LA5_Cfsc_file[] ={
+2
+,0,1
+,38,1
+};
+// LR1_questionable_shift_operator
+// T_thread_name
+yacco2::UCHAR LA6_Cfsc_file[] ={
+2
+,0,1
+,43,64
+};
+// LR1_questionable_shift_operator
+// T_monolithic
+yacco2::UCHAR LA7_Cfsc_file[] ={
+2
+,0,1
+,43,128
+};
+// LR1_questionable_shift_operator
+// T_file_name
+yacco2::UCHAR LA8_Cfsc_file[] ={
+2
+,0,1
+,37,128
+};
+// LR1_questionable_shift_operator
+// T_no_of_T
+yacco2::UCHAR LA9_Cfsc_file[] ={
+2
+,0,1
+,44,1
+};
+// LR1_questionable_shift_operator
+// T_int_no
+yacco2::UCHAR LA10_Cfsc_file[] ={
+2
+,0,1
+,35,1
+};
+// LR1_questionable_shift_operator
+// T_list_of_native_first_set_terminals
+yacco2::UCHAR LA11_Cfsc_file[] ={
+2
+,0,1
+,44,2
+};
+// LR1_questionable_shift_operator
+// T_end_list_of_native_first_set_terminals
+yacco2::UCHAR LA12_Cfsc_file[] ={
+2
+,0,1
+,44,4
+};
+// LR1_questionable_shift_operator
+// T_list_of_transitive_threads
+yacco2::UCHAR LA13_Cfsc_file[] ={
+2
+,0,1
+,44,8
+};
+// LR1_questionable_shift_operator
+// T_end_list_of_transitive_threads
+yacco2::UCHAR LA14_Cfsc_file[] ={
+2
+,0,1
+,44,16
+};
+// LR1_questionable_shift_operator
+// T_list_of_used_threads
+yacco2::UCHAR LA15_Cfsc_file[] ={
+2
+,0,1
+,47,1
+};
+// LR1_questionable_shift_operator
+// T_end_list_of_used_threads
+yacco2::UCHAR LA16_Cfsc_file[] ={
+2
+,0,1
+,47,2
+};
+// T_fsm_comments
+yacco2::UCHAR LA17_Cfsc_file[] ={
+1
+,37,16
+};
+// T_c_string
+yacco2::UCHAR LA18_Cfsc_file[] ={
+1
+,34,8
+};
+// LR1_eog
+yacco2::UCHAR LA19_Cfsc_file[] ={
+1
+,0,2
+};
+// LR1_questionable_shift_operator
+// T_identifier
+// T_end_list_of_native_first_set_terminals
+// tth_in_stbl
+yacco2::UCHAR LA20_Cfsc_file[] ={
+4
+,0,1
+,34,128
+,44,4
+,45,16
+};
+// LR1_questionable_shift_operator
+// T_identifier
+// T_end_list_of_transitive_threads
+// th_in_stbl
+yacco2::UCHAR LA21_Cfsc_file[] ={
+4
+,0,1
+,34,128
+,44,16
+,45,64
+};
+// LR1_questionable_shift_operator
+// T_identifier
+// th_in_stbl
+// T_end_list_of_used_threads
+yacco2::UCHAR LA22_Cfsc_file[] ={
+4
+,0,1
+,34,128
+,45,64
+,47,2
+};
+extern yacco2::State S1_Cfsc_file;
+extern yacco2::State S2_Cfsc_file;
+extern yacco2::State S3_Cfsc_file;
+extern yacco2::State S4_Cfsc_file;
+extern yacco2::State S5_Cfsc_file;
+extern yacco2::State S6_Cfsc_file;
+extern yacco2::State S7_Cfsc_file;
+extern yacco2::State S8_Cfsc_file;
+extern yacco2::State S9_Cfsc_file;
+extern yacco2::State S10_Cfsc_file;
+extern yacco2::State S11_Cfsc_file;
+extern yacco2::State S12_Cfsc_file;
+extern yacco2::State S13_Cfsc_file;
+extern yacco2::State S14_Cfsc_file;
+extern yacco2::State S15_Cfsc_file;
+extern yacco2::State S16_Cfsc_file;
+extern yacco2::State S17_Cfsc_file;
+extern yacco2::State S18_Cfsc_file;
+extern yacco2::State S19_Cfsc_file;
+extern yacco2::State S20_Cfsc_file;
+extern yacco2::State S21_Cfsc_file;
+extern yacco2::State S22_Cfsc_file;
+extern yacco2::State S23_Cfsc_file;
+extern yacco2::State S24_Cfsc_file;
+extern yacco2::State S25_Cfsc_file;
+extern yacco2::State S26_Cfsc_file;
+extern yacco2::State S27_Cfsc_file;
+extern yacco2::State S28_Cfsc_file;
+extern yacco2::State S29_Cfsc_file;
+extern yacco2::State S30_Cfsc_file;
+extern yacco2::State S31_Cfsc_file;
+extern yacco2::State S32_Cfsc_file;
+extern yacco2::State S33_Cfsc_file;
+extern yacco2::State S34_Cfsc_file;
+extern yacco2::State S35_Cfsc_file;
+extern yacco2::State S36_Cfsc_file;
+extern yacco2::State S37_Cfsc_file;
+extern yacco2::State S38_Cfsc_file;
+extern yacco2::State S39_Cfsc_file;
+extern yacco2::State S40_Cfsc_file;
+extern yacco2::State S41_Cfsc_file;
+extern yacco2::State S42_Cfsc_file;
+extern yacco2::State S43_Cfsc_file;
+extern yacco2::State S44_Cfsc_file;
+extern yacco2::State S45_Cfsc_file;
+extern yacco2::State S46_Cfsc_file;
+extern yacco2::State S47_Cfsc_file;
+extern yacco2::State S48_Cfsc_file;
+extern yacco2::State S49_Cfsc_file;
+extern yacco2::State S50_Cfsc_file;
+extern yacco2::State S51_Cfsc_file;
+extern yacco2::State S52_Cfsc_file;
+extern yacco2::State S53_Cfsc_file;
+extern yacco2::State S54_Cfsc_file;
+extern yacco2::State S55_Cfsc_file;
+extern yacco2::State S56_Cfsc_file;
+extern yacco2::State S57_Cfsc_file;
+extern yacco2::State S58_Cfsc_file;
+extern yacco2::State S59_Cfsc_file;
+extern yacco2::State S60_Cfsc_file;
+extern yacco2::State S61_Cfsc_file;
+extern yacco2::State S62_Cfsc_file;
+extern yacco2::State S63_Cfsc_file;
+extern yacco2::State S64_Cfsc_file;
+extern yacco2::State S65_Cfsc_file;
+extern yacco2::State S66_Cfsc_file;
+extern yacco2::State S67_Cfsc_file;
+extern yacco2::State S68_Cfsc_file;
+extern yacco2::State S69_Cfsc_file;
+extern yacco2::State S70_Cfsc_file;
+extern yacco2::State S71_Cfsc_file;
+extern yacco2::State S72_Cfsc_file;
+extern yacco2::State S73_Cfsc_file;
+extern yacco2::State S74_Cfsc_file;
+extern yacco2::State S75_Cfsc_file;
+extern yacco2::State S76_Cfsc_file;
+extern yacco2::State S77_Cfsc_file;
+extern yacco2::State S78_Cfsc_file;
+extern yacco2::State S79_Cfsc_file;
+extern yacco2::State S80_Cfsc_file;
+extern yacco2::State S81_Cfsc_file;
+extern yacco2::State S82_Cfsc_file;
+extern yacco2::State S83_Cfsc_file;
+extern yacco2::State S84_Cfsc_file;
+extern yacco2::State S85_Cfsc_file;
+extern yacco2::State S86_Cfsc_file;
+extern yacco2::State S87_Cfsc_file;
+extern yacco2::State S88_Cfsc_file;
+extern yacco2::State S89_Cfsc_file;
+extern yacco2::State S90_Cfsc_file;
+extern yacco2::State S91_Cfsc_file;
+extern yacco2::State S92_Cfsc_file;
+extern yacco2::State S93_Cfsc_file;
+extern yacco2::State S94_Cfsc_file;
+extern yacco2::State S95_Cfsc_file;
+extern yacco2::State S96_Cfsc_file;
+extern yacco2::State S97_Cfsc_file;
+extern yacco2::State S98_Cfsc_file;
+extern yacco2::State S99_Cfsc_file;
+extern yacco2::State S100_Cfsc_file;
+extern yacco2::State S101_Cfsc_file;
+extern yacco2::State S102_Cfsc_file;
+extern yacco2::State S103_Cfsc_file;
+extern yacco2::State S104_Cfsc_file;
+struct S1std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cfsc_file S1st_Cfsc_file = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S2_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{348,(State*)&S3_Cfsc_file} // shift sym: T_transitive
+ ,{569,(State*)&S1_Cfsc_file} // accept sym: Rfsc_file
+ ,{570,(State*)&S4_Cfsc_file} // shift sym: Rtransitive_phrase
+ ,{571,(State*)&S16_Cfsc_file} // shift sym: Rtransitive
+ }// end of shift table
+};
+yacco2::Shift_entry S1qse_Cfsc_file = {0,(State*)&S2_Cfsc_file};
+yacco2::State S1_Cfsc_file = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cfsc_file,0,0,0,(Shift_entry*)&S1qse_Cfsc_file
+};
+struct S2rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cfsc_file S2rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsc_file,Cfsc_file::rhs2_Rtransitive_}
+ }// end of reduce table
+};
+yacco2::State S2_Cfsc_file = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cfsc_file,0,0,0};
+struct S3rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cfsc_file S3rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsc_file,Cfsc_file::rhs1_Rtransitive_}
+ }// end of reduce table
+};
+yacco2::State S3_Cfsc_file = //State's vectored into symbol: "transitive"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cfsc_file,0,0,0};
+struct S4std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S4std_Cfsc_file S4st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S20_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{349,(State*)&S21_Cfsc_file} // shift sym: T_grammar_name
+ ,{573,(State*)&S5_Cfsc_file} // shift sym: Rgrammar_name_phrase
+ ,{574,(State*)&S22_Cfsc_file} // shift sym: Rgrammar_name
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Cfsc_file = {0,(State*)&S20_Cfsc_file};
+yacco2::State S4_Cfsc_file = //State's vectored into symbol: "Rtransitive_phrase"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cfsc_file,0,0,0,(Shift_entry*)&S4qse_Cfsc_file
+};
+struct S5std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S5std_Cfsc_file S5st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S26_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{304,(State*)&S27_Cfsc_file} // shift sym: T_name_space
+ ,{576,(State*)&S6_Cfsc_file} // shift sym: Rnamespace_phrase
+ ,{577,(State*)&S28_Cfsc_file} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S5qse_Cfsc_file = {0,(State*)&S26_Cfsc_file};
+yacco2::State S5_Cfsc_file = //State's vectored into symbol: "Rgrammar_name_phrase"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cfsc_file,0,0,0,(Shift_entry*)&S5qse_Cfsc_file
+};
+struct S6std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S6std_Cfsc_file S6st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S32_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{350,(State*)&S33_Cfsc_file} // shift sym: T_thread_name
+ ,{579,(State*)&S7_Cfsc_file} // shift sym: Rthreadname_phrase
+ ,{580,(State*)&S34_Cfsc_file} // shift sym: Rthreadname
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Cfsc_file = {0,(State*)&S32_Cfsc_file};
+yacco2::State S6_Cfsc_file = //State's vectored into symbol: "Rnamespace_phrase"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cfsc_file,0,0,0,(Shift_entry*)&S6qse_Cfsc_file
+};
+struct S7std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S7std_Cfsc_file S7st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S38_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{351,(State*)&S39_Cfsc_file} // shift sym: T_monolithic
+ ,{582,(State*)&S8_Cfsc_file} // shift sym: Rmonolithic_phrase
+ ,{583,(State*)&S40_Cfsc_file} // shift sym: Rmonolithic
+ }// end of shift table
+};
+yacco2::Shift_entry S7qse_Cfsc_file = {0,(State*)&S38_Cfsc_file};
+yacco2::State S7_Cfsc_file = //State's vectored into symbol: "Rthreadname_phrase"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cfsc_file,0,0,0,(Shift_entry*)&S7qse_Cfsc_file
+};
+struct S8std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Cfsc_file S8st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S44_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{303,(State*)&S45_Cfsc_file} // shift sym: T_file_name
+ ,{585,(State*)&S9_Cfsc_file} // shift sym: Rfilename_phrase
+ ,{586,(State*)&S46_Cfsc_file} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Cfsc_file = {0,(State*)&S44_Cfsc_file};
+yacco2::State S8_Cfsc_file = //State's vectored into symbol: "Rmonolithic_phrase"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cfsc_file,0,0,0,(Shift_entry*)&S8qse_Cfsc_file
+};
+struct S9std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S9std_Cfsc_file S9st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S50_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{352,(State*)&S51_Cfsc_file} // shift sym: T_no_of_T
+ ,{588,(State*)&S10_Cfsc_file} // shift sym: Rno_of_T_phrase
+ ,{589,(State*)&S52_Cfsc_file} // shift sym: Rno_of_T
+ }// end of shift table
+};
+yacco2::Shift_entry S9qse_Cfsc_file = {0,(State*)&S50_Cfsc_file};
+yacco2::State S9_Cfsc_file = //State's vectored into symbol: "Rfilename_phrase"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cfsc_file,0,0,0,(Shift_entry*)&S9qse_Cfsc_file
+};
+struct S10std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S10std_Cfsc_file S10st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S56_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{353,(State*)&S57_Cfsc_file} // shift sym: T_list_of_native_first_set_terminals
+ ,{591,(State*)&S11_Cfsc_file} // shift sym: Rlist_of_native_terminals_phrase
+ ,{592,(State*)&S58_Cfsc_file} // shift sym: Rlist_of_native_fset_terminals
+ }// end of shift table
+};
+yacco2::Shift_entry S10qse_Cfsc_file = {0,(State*)&S56_Cfsc_file};
+yacco2::State S10_Cfsc_file = //State's vectored into symbol: "Rno_of_T_phrase"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cfsc_file,0,0,0,(Shift_entry*)&S10qse_Cfsc_file
+};
+struct S11std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S11std_Cfsc_file S11st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S64_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{355,(State*)&S65_Cfsc_file} // shift sym: T_list_of_transitive_threads
+ ,{598,(State*)&S12_Cfsc_file} // shift sym: Rlist_of_transitive_threads_phrase
+ ,{599,(State*)&S66_Cfsc_file} // shift sym: Rlist_of_transitive_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S11qse_Cfsc_file = {0,(State*)&S64_Cfsc_file};
+yacco2::State S11_Cfsc_file = //State's vectored into symbol: "Rlist_of_native_terminals_phrase"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Cfsc_file,0,0,0,(Shift_entry*)&S11qse_Cfsc_file
+};
+struct S12std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S12std_Cfsc_file S12st_Cfsc_file = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S72_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{376,(State*)&S73_Cfsc_file} // shift sym: T_list_of_used_threads
+ ,{605,(State*)&S13_Cfsc_file} // shift sym: Rlist_of_used_threads_phrase
+ ,{606,(State*)&S74_Cfsc_file} // shift sym: Rlist_of_used_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S12qse_Cfsc_file = {0,(State*)&S72_Cfsc_file};
+yacco2::State S12_Cfsc_file = //State's vectored into symbol: "Rlist_of_transitive_threads_phrase"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cfsc_file,0,0,0,(Shift_entry*)&S12qse_Cfsc_file
+};
+struct S13std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Cfsc_file S13st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {300,(State*)&S80_Cfsc_file} // shift sym: T_fsm_comments
+ ,{612,(State*)&S14_Cfsc_file} // shift sym: Rfsm_comments_phrase
+ ,{613,(State*)&S81_Cfsc_file} // shift sym: Rfsm_comments
+ }// end of shift table
+};
+yacco2::State S13_Cfsc_file = //State's vectored into symbol: "Rlist_of_used_threads_phrase"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cfsc_file,0,0,0,0};
+struct S14std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Cfsc_file S14st_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S15_Cfsc_file} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S14_Cfsc_file = //State's vectored into symbol: "Rfsm_comments_phrase"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cfsc_file,0,0,0,0};
+struct S15rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cfsc_file S15rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsc_file,Cfsc_file::rhs1_Rfsc_file_}
+ }// end of reduce table
+};
+yacco2::State S15_Cfsc_file = //State's vectored into symbol: "eog"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cfsc_file,0,0,0};
+struct S16std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S16std_Cfsc_file S16st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S17_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S18_Cfsc_file} // shift sym: T_identifier
+ ,{572,(State*)&S19_Cfsc_file} // shift sym: Rtransitive_value
+ }// end of shift table
+};
+yacco2::Shift_entry S16qse_Cfsc_file = {0,(State*)&S17_Cfsc_file};
+yacco2::State S16_Cfsc_file = //State's vectored into symbol: "Rtransitive"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cfsc_file,0,0,0,(Shift_entry*)&S16qse_Cfsc_file
+};
+struct S17rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cfsc_file S17rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsc_file,Cfsc_file::rhs2_Rtransitive_value_}
+ }// end of reduce table
+};
+yacco2::State S17_Cfsc_file = //State's vectored into symbol: "|?|"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cfsc_file,0,0,0};
+struct S18rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cfsc_file S18rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsc_file,Cfsc_file::rhs1_Rtransitive_value_}
+ }// end of reduce table
+};
+yacco2::State S18_Cfsc_file = //State's vectored into symbol: "identifier"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cfsc_file,0,0,0};
+struct S19rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cfsc_file S19rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsc_file,Cfsc_file::rhs1_Rtransitive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S19_Cfsc_file = //State's vectored into symbol: "Rtransitive_value"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cfsc_file,0,0,0};
+struct S20rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cfsc_file S20rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs2_Rgrammar_name_}
+ }// end of reduce table
+};
+yacco2::State S20_Cfsc_file = //State's vectored into symbol: "|?|"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cfsc_file,0,0,0};
+struct S21rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cfsc_file S21rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs1_Rgrammar_name_}
+ }// end of reduce table
+};
+yacco2::State S21_Cfsc_file = //State's vectored into symbol: "grammar-name"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cfsc_file,0,0,0};
+struct S22std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S22std_Cfsc_file S22st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S23_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S24_Cfsc_file} // shift sym: T_c_string
+ ,{575,(State*)&S25_Cfsc_file} // shift sym: Rgrammar_name_value
+ }// end of shift table
+};
+yacco2::Shift_entry S22qse_Cfsc_file = {0,(State*)&S23_Cfsc_file};
+yacco2::State S22_Cfsc_file = //State's vectored into symbol: "Rgrammar_name"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Cfsc_file,0,0,0,(Shift_entry*)&S22qse_Cfsc_file
+};
+struct S23rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cfsc_file S23rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsc_file,Cfsc_file::rhs2_Rgrammar_name_value_}
+ }// end of reduce table
+};
+yacco2::State S23_Cfsc_file = //State's vectored into symbol: "|?|"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cfsc_file,0,0,0};
+struct S24rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cfsc_file S24rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsc_file,Cfsc_file::rhs1_Rgrammar_name_value_}
+ }// end of reduce table
+};
+yacco2::State S24_Cfsc_file = //State's vectored into symbol: "c-string"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cfsc_file,0,0,0};
+struct S25rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cfsc_file S25rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsc_file,Cfsc_file::rhs1_Rgrammar_name_phrase_}
+ }// end of reduce table
+};
+yacco2::State S25_Cfsc_file = //State's vectored into symbol: "Rgrammar_name_value"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cfsc_file,0,0,0};
+struct S26rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cfsc_file S26rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S26_Cfsc_file = //State's vectored into symbol: "|?|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cfsc_file,0,0,0};
+struct S27rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cfsc_file S27rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S27_Cfsc_file = //State's vectored into symbol: "#name-space"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cfsc_file,0,0,0};
+struct S28std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S28std_Cfsc_file S28st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S29_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S30_Cfsc_file} // shift sym: T_c_string
+ ,{578,(State*)&S31_Cfsc_file} // shift sym: Rnamespace_value
+ }// end of shift table
+};
+yacco2::Shift_entry S28qse_Cfsc_file = {0,(State*)&S29_Cfsc_file};
+yacco2::State S28_Cfsc_file = //State's vectored into symbol: "Rnamespace"
+{28
+,0,0,0,0,(Shift_tbl*)&S28st_Cfsc_file,0,0,0,(Shift_entry*)&S28qse_Cfsc_file
+};
+struct S29rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cfsc_file S29rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsc_file,Cfsc_file::rhs2_Rnamespace_value_}
+ }// end of reduce table
+};
+yacco2::State S29_Cfsc_file = //State's vectored into symbol: "|?|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cfsc_file,0,0,0};
+struct S30rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cfsc_file S30rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsc_file,Cfsc_file::rhs1_Rnamespace_value_}
+ }// end of reduce table
+};
+yacco2::State S30_Cfsc_file = //State's vectored into symbol: "c-string"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cfsc_file,0,0,0};
+struct S31rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cfsc_file S31rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsc_file,Cfsc_file::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S31_Cfsc_file = //State's vectored into symbol: "Rnamespace_value"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cfsc_file,0,0,0};
+struct S32rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cfsc_file S32rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs2_Rthreadname_}
+ }// end of reduce table
+};
+yacco2::State S32_Cfsc_file = //State's vectored into symbol: "|?|"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cfsc_file,0,0,0};
+struct S33rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cfsc_file S33rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs1_Rthreadname_}
+ }// end of reduce table
+};
+yacco2::State S33_Cfsc_file = //State's vectored into symbol: "thread-name"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cfsc_file,0,0,0};
+struct S34std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Cfsc_file S34st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S35_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S36_Cfsc_file} // shift sym: T_c_string
+ ,{581,(State*)&S37_Cfsc_file} // shift sym: Rthreadname_value
+ }// end of shift table
+};
+yacco2::Shift_entry S34qse_Cfsc_file = {0,(State*)&S35_Cfsc_file};
+yacco2::State S34_Cfsc_file = //State's vectored into symbol: "Rthreadname"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Cfsc_file,0,0,0,(Shift_entry*)&S34qse_Cfsc_file
+};
+struct S35rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cfsc_file S35rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsc_file,Cfsc_file::rhs2_Rthreadname_value_}
+ }// end of reduce table
+};
+yacco2::State S35_Cfsc_file = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cfsc_file,0,0,0};
+struct S36rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cfsc_file S36rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsc_file,Cfsc_file::rhs1_Rthreadname_value_}
+ }// end of reduce table
+};
+yacco2::State S36_Cfsc_file = //State's vectored into symbol: "c-string"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cfsc_file,0,0,0};
+struct S37rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cfsc_file S37rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsc_file,Cfsc_file::rhs1_Rthreadname_phrase_}
+ }// end of reduce table
+};
+yacco2::State S37_Cfsc_file = //State's vectored into symbol: "Rthreadname_value"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cfsc_file,0,0,0};
+struct S38rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cfsc_file S38rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsc_file,Cfsc_file::rhs2_Rmonolithic_}
+ }// end of reduce table
+};
+yacco2::State S38_Cfsc_file = //State's vectored into symbol: "|?|"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cfsc_file,0,0,0};
+struct S39rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cfsc_file S39rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsc_file,Cfsc_file::rhs1_Rmonolithic_}
+ }// end of reduce table
+};
+yacco2::State S39_Cfsc_file = //State's vectored into symbol: "monolithic"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cfsc_file,0,0,0};
+struct S40std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S40std_Cfsc_file S40st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S41_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S42_Cfsc_file} // shift sym: T_identifier
+ ,{584,(State*)&S43_Cfsc_file} // shift sym: Rmonolithic_value
+ }// end of shift table
+};
+yacco2::Shift_entry S40qse_Cfsc_file = {0,(State*)&S41_Cfsc_file};
+yacco2::State S40_Cfsc_file = //State's vectored into symbol: "Rmonolithic"
+{40
+,0,0,0,0,(Shift_tbl*)&S40st_Cfsc_file,0,0,0,(Shift_entry*)&S40qse_Cfsc_file
+};
+struct S41rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cfsc_file S41rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsc_file,Cfsc_file::rhs2_Rmonolithic_value_}
+ }// end of reduce table
+};
+yacco2::State S41_Cfsc_file = //State's vectored into symbol: "|?|"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cfsc_file,0,0,0};
+struct S42rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cfsc_file S42rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsc_file,Cfsc_file::rhs1_Rmonolithic_value_}
+ }// end of reduce table
+};
+yacco2::State S42_Cfsc_file = //State's vectored into symbol: "identifier"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cfsc_file,0,0,0};
+struct S43rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cfsc_file S43rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsc_file,Cfsc_file::rhs1_Rmonolithic_phrase_}
+ }// end of reduce table
+};
+yacco2::State S43_Cfsc_file = //State's vectored into symbol: "Rmonolithic_value"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cfsc_file,0,0,0};
+struct S44rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cfsc_file S44rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S44_Cfsc_file = //State's vectored into symbol: "|?|"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cfsc_file,0,0,0};
+struct S45rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cfsc_file S45rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsc_file,Cfsc_file::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S45_Cfsc_file = //State's vectored into symbol: "#file-name"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cfsc_file,0,0,0};
+struct S46std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S46std_Cfsc_file S46st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S47_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S48_Cfsc_file} // shift sym: T_c_string
+ ,{587,(State*)&S49_Cfsc_file} // shift sym: Rfilename_value
+ }// end of shift table
+};
+yacco2::Shift_entry S46qse_Cfsc_file = {0,(State*)&S47_Cfsc_file};
+yacco2::State S46_Cfsc_file = //State's vectored into symbol: "Rfilename"
+{46
+,0,0,0,0,(Shift_tbl*)&S46st_Cfsc_file,0,0,0,(Shift_entry*)&S46qse_Cfsc_file
+};
+struct S47rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cfsc_file S47rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cfsc_file,Cfsc_file::rhs2_Rfilename_value_}
+ }// end of reduce table
+};
+yacco2::State S47_Cfsc_file = //State's vectored into symbol: "|?|"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cfsc_file,0,0,0};
+struct S48rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cfsc_file S48rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cfsc_file,Cfsc_file::rhs1_Rfilename_value_}
+ }// end of reduce table
+};
+yacco2::State S48_Cfsc_file = //State's vectored into symbol: "c-string"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cfsc_file,0,0,0};
+struct S49rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cfsc_file S49rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cfsc_file,Cfsc_file::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S49_Cfsc_file = //State's vectored into symbol: "Rfilename_value"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cfsc_file,0,0,0};
+struct S50rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cfsc_file S50rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs2_Rno_of_T_}
+ }// end of reduce table
+};
+yacco2::State S50_Cfsc_file = //State's vectored into symbol: "|?|"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cfsc_file,0,0,0};
+struct S51rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cfsc_file S51rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs1_Rno_of_T_}
+ }// end of reduce table
+};
+yacco2::State S51_Cfsc_file = //State's vectored into symbol: "no-of-T"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cfsc_file,0,0,0};
+struct S52std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S52std_Cfsc_file S52st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S53_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{280,(State*)&S54_Cfsc_file} // shift sym: T_int_no
+ ,{590,(State*)&S55_Cfsc_file} // shift sym: Rno_of_T_value
+ }// end of shift table
+};
+yacco2::Shift_entry S52qse_Cfsc_file = {0,(State*)&S53_Cfsc_file};
+yacco2::State S52_Cfsc_file = //State's vectored into symbol: "Rno_of_T"
+{52
+,0,0,0,0,(Shift_tbl*)&S52st_Cfsc_file,0,0,0,(Shift_entry*)&S52qse_Cfsc_file
+};
+struct S53rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cfsc_file S53rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Cfsc_file,Cfsc_file::rhs2_Rno_of_T_value_}
+ }// end of reduce table
+};
+yacco2::State S53_Cfsc_file = //State's vectored into symbol: "|?|"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cfsc_file,0,0,0};
+struct S54rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cfsc_file S54rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Cfsc_file,Cfsc_file::rhs1_Rno_of_T_value_}
+ }// end of reduce table
+};
+yacco2::State S54_Cfsc_file = //State's vectored into symbol: "int-no"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Cfsc_file,0,0,0};
+struct S55rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cfsc_file S55rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Cfsc_file,Cfsc_file::rhs1_Rno_of_T_phrase_}
+ }// end of reduce table
+};
+yacco2::State S55_Cfsc_file = //State's vectored into symbol: "Rno_of_T_value"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cfsc_file,0,0,0};
+struct S56rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cfsc_file S56rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs2_Rlist_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S56_Cfsc_file = //State's vectored into symbol: "|?|"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cfsc_file,0,0,0};
+struct S57rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cfsc_file S57rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs1_Rlist_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S57_Cfsc_file = //State's vectored into symbol: "list-of-native-first-set-terminals"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cfsc_file,0,0,0};
+struct S58std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S58std_Cfsc_file S58st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S84_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{280,(State*)&S85_Cfsc_file} // shift sym: T_int_no
+ ,{593,(State*)&S59_Cfsc_file} // shift sym: Rno_of_native_fset_terminals
+ }// end of shift table
+};
+yacco2::Shift_entry S58qse_Cfsc_file = {0,(State*)&S84_Cfsc_file};
+yacco2::State S58_Cfsc_file = //State's vectored into symbol: "Rlist_of_native_fset_terminals"
+{58
+,0,0,0,0,(Shift_tbl*)&S58st_Cfsc_file,0,0,0,(Shift_entry*)&S58qse_Cfsc_file
+};
+struct S59std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S59std_Cfsc_file S59st_Cfsc_file = {
+ 5
+ ,
+ {// start of table
+ {279,(State*)&S86_Cfsc_file} // shift sym: T_identifier
+ ,{364,(State*)&S87_Cfsc_file} // shift sym: tth_in_stbl
+ ,{594,(State*)&S60_Cfsc_file} // shift sym: Rfset_terminals_epi
+ ,{595,(State*)&S88_Cfsc_file} // shift sym: Rfset_terminals
+ ,{596,(State*)&S90_Cfsc_file} // shift sym: Ra_T
+ }// end of shift table
+};
+struct S59rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cfsc_file S59rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Cfsc_file,Cfsc_file::rhs2_Rfset_terminals_epi_}
+ }// end of reduce table
+};
+yacco2::State S59_Cfsc_file = //State's vectored into symbol: "Rno_of_native_fset_terminals"
+{59
+,0,0,0,0,(Shift_tbl*)&S59st_Cfsc_file,(Reduce_tbl*)&S59rt_Cfsc_file,0,0,0};
+struct S60std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S60std_Cfsc_file S60st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S61_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{354,(State*)&S62_Cfsc_file} // shift sym: T_end_list_of_native_first_set_terminals
+ ,{597,(State*)&S63_Cfsc_file} // shift sym: Rend_list_of_native_fset_terminals
+ }// end of shift table
+};
+yacco2::Shift_entry S60qse_Cfsc_file = {0,(State*)&S61_Cfsc_file};
+yacco2::State S60_Cfsc_file = //State's vectored into symbol: "Rfset_terminals_epi"
+{60
+,0,0,0,0,(Shift_tbl*)&S60st_Cfsc_file,0,0,0,(Shift_entry*)&S60qse_Cfsc_file
+};
+struct S61rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cfsc_file S61rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA13_Cfsc_file,Cfsc_file::rhs2_Rend_list_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S61_Cfsc_file = //State's vectored into symbol: "|?|"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cfsc_file,0,0,0};
+struct S62rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cfsc_file S62rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA13_Cfsc_file,Cfsc_file::rhs1_Rend_list_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S62_Cfsc_file = //State's vectored into symbol: "end-list-of-native-first-set-terminals"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cfsc_file,0,0,0};
+struct S63rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cfsc_file S63rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA13_Cfsc_file,Cfsc_file::rhs1_Rlist_of_native_terminals_phrase_}
+ }// end of reduce table
+};
+yacco2::State S63_Cfsc_file = //State's vectored into symbol: "Rend_list_of_native_fset_terminals"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cfsc_file,0,0,0};
+struct S64rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cfsc_file S64rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs2_Rlist_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S64_Cfsc_file = //State's vectored into symbol: "|?|"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Cfsc_file,0,0,0};
+struct S65rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cfsc_file S65rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs1_Rlist_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S65_Cfsc_file = //State's vectored into symbol: "list-of-transitive-threads"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Cfsc_file,0,0,0};
+struct S66std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S66std_Cfsc_file S66st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S91_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{280,(State*)&S92_Cfsc_file} // shift sym: T_int_no
+ ,{600,(State*)&S67_Cfsc_file} // shift sym: Rno_of_transitive_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S66qse_Cfsc_file = {0,(State*)&S91_Cfsc_file};
+yacco2::State S66_Cfsc_file = //State's vectored into symbol: "Rlist_of_transitive_threads"
+{66
+,0,0,0,0,(Shift_tbl*)&S66st_Cfsc_file,0,0,0,(Shift_entry*)&S66qse_Cfsc_file
+};
+struct S67std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S67std_Cfsc_file S67st_Cfsc_file = {
+ 5
+ ,
+ {// start of table
+ {279,(State*)&S93_Cfsc_file} // shift sym: T_identifier
+ ,{366,(State*)&S94_Cfsc_file} // shift sym: th_in_stbl
+ ,{601,(State*)&S68_Cfsc_file} // shift sym: Rtransitive_threads_epi
+ ,{602,(State*)&S95_Cfsc_file} // shift sym: Rtransitive_threads
+ ,{603,(State*)&S97_Cfsc_file} // shift sym: Ra_th
+ }// end of shift table
+};
+struct S67rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Cfsc_file S67rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA14_Cfsc_file,Cfsc_file::rhs2_Rtransitive_threads_epi_}
+ }// end of reduce table
+};
+yacco2::State S67_Cfsc_file = //State's vectored into symbol: "Rno_of_transitive_threads"
+{67
+,0,0,0,0,(Shift_tbl*)&S67st_Cfsc_file,(Reduce_tbl*)&S67rt_Cfsc_file,0,0,0};
+struct S68std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S68std_Cfsc_file S68st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S69_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{356,(State*)&S70_Cfsc_file} // shift sym: T_end_list_of_transitive_threads
+ ,{604,(State*)&S71_Cfsc_file} // shift sym: Rend_list_of_transitive_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S68qse_Cfsc_file = {0,(State*)&S69_Cfsc_file};
+yacco2::State S68_Cfsc_file = //State's vectored into symbol: "Rtransitive_threads_epi"
+{68
+,0,0,0,0,(Shift_tbl*)&S68st_Cfsc_file,0,0,0,(Shift_entry*)&S68qse_Cfsc_file
+};
+struct S69rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cfsc_file S69rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA15_Cfsc_file,Cfsc_file::rhs2_Rend_list_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S69_Cfsc_file = //State's vectored into symbol: "|?|"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Cfsc_file,0,0,0};
+struct S70rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Cfsc_file S70rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA15_Cfsc_file,Cfsc_file::rhs1_Rend_list_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S70_Cfsc_file = //State's vectored into symbol: "end-list-of-transitive-threads"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Cfsc_file,0,0,0};
+struct S71rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Cfsc_file S71rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA15_Cfsc_file,Cfsc_file::rhs1_Rlist_of_transitive_threads_phrase_}
+ }// end of reduce table
+};
+yacco2::State S71_Cfsc_file = //State's vectored into symbol: "Rend_list_of_transitive_threads"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Cfsc_file,0,0,0};
+struct S72rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Cfsc_file S72rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs2_Rlist_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S72_Cfsc_file = //State's vectored into symbol: "|?|"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Cfsc_file,0,0,0};
+struct S73rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Cfsc_file S73rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cfsc_file,Cfsc_file::rhs1_Rlist_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S73_Cfsc_file = //State's vectored into symbol: "list-of-used-threads"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Cfsc_file,0,0,0};
+struct S74std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S74std_Cfsc_file S74st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S98_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{280,(State*)&S99_Cfsc_file} // shift sym: T_int_no
+ ,{607,(State*)&S75_Cfsc_file} // shift sym: Rno_of_used_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S74qse_Cfsc_file = {0,(State*)&S98_Cfsc_file};
+yacco2::State S74_Cfsc_file = //State's vectored into symbol: "Rlist_of_used_threads"
+{74
+,0,0,0,0,(Shift_tbl*)&S74st_Cfsc_file,0,0,0,(Shift_entry*)&S74qse_Cfsc_file
+};
+struct S75std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S75std_Cfsc_file S75st_Cfsc_file = {
+ 5
+ ,
+ {// start of table
+ {279,(State*)&S100_Cfsc_file} // shift sym: T_identifier
+ ,{366,(State*)&S101_Cfsc_file} // shift sym: th_in_stbl
+ ,{608,(State*)&S76_Cfsc_file} // shift sym: Rused_threads_epi
+ ,{609,(State*)&S102_Cfsc_file} // shift sym: Rused_threads
+ ,{610,(State*)&S104_Cfsc_file} // shift sym: Rb_th
+ }// end of shift table
+};
+struct S75rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Cfsc_file S75rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA16_Cfsc_file,Cfsc_file::rhs2_Rused_threads_epi_}
+ }// end of reduce table
+};
+yacco2::State S75_Cfsc_file = //State's vectored into symbol: "Rno_of_used_threads"
+{75
+,0,0,0,0,(Shift_tbl*)&S75st_Cfsc_file,(Reduce_tbl*)&S75rt_Cfsc_file,0,0,0};
+struct S76std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S76std_Cfsc_file S76st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S77_Cfsc_file} // shift sym: LR1_questionable_shift_operator
+ ,{377,(State*)&S78_Cfsc_file} // shift sym: T_end_list_of_used_threads
+ ,{611,(State*)&S79_Cfsc_file} // shift sym: Rend_list_of_used_threads
+ }// end of shift table
+};
+yacco2::Shift_entry S76qse_Cfsc_file = {0,(State*)&S77_Cfsc_file};
+yacco2::State S76_Cfsc_file = //State's vectored into symbol: "Rused_threads_epi"
+{76
+,0,0,0,0,(Shift_tbl*)&S76st_Cfsc_file,0,0,0,(Shift_entry*)&S76qse_Cfsc_file
+};
+struct S77rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Cfsc_file S77rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cfsc_file,Cfsc_file::rhs2_Rend_list_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S77_Cfsc_file = //State's vectored into symbol: "|?|"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Cfsc_file,0,0,0};
+struct S78rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Cfsc_file S78rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cfsc_file,Cfsc_file::rhs1_Rend_list_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S78_Cfsc_file = //State's vectored into symbol: "end-list-of-used-threads"
+{78
+,0,0,0,0,0,(Reduce_tbl*)&S78rt_Cfsc_file,0,0,0};
+struct S79rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Cfsc_file S79rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cfsc_file,Cfsc_file::rhs1_Rlist_of_used_threads_phrase_}
+ }// end of reduce table
+};
+yacco2::State S79_Cfsc_file = //State's vectored into symbol: "Rend_list_of_used_threads"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Cfsc_file,0,0,0};
+struct S80rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Cfsc_file S80rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA18_Cfsc_file,Cfsc_file::rhs1_Rfsm_comments_}
+ }// end of reduce table
+};
+yacco2::State S80_Cfsc_file = //State's vectored into symbol: "#fsm-comments"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Cfsc_file,0,0,0};
+struct S81std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S81std_Cfsc_file S81st_Cfsc_file = {
+ 2
+ ,
+ {// start of table
+ {275,(State*)&S82_Cfsc_file} // shift sym: T_c_string
+ ,{614,(State*)&S83_Cfsc_file} // shift sym: Rfsm_comments_value
+ }// end of shift table
+};
+yacco2::State S81_Cfsc_file = //State's vectored into symbol: "Rfsm_comments"
+{81
+,0,0,0,0,(Shift_tbl*)&S81st_Cfsc_file,0,0,0,0};
+struct S82rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Cfsc_file S82rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA19_Cfsc_file,Cfsc_file::rhs1_Rfsm_comments_value_}
+ }// end of reduce table
+};
+yacco2::State S82_Cfsc_file = //State's vectored into symbol: "c-string"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Cfsc_file,0,0,0};
+struct S83rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Cfsc_file S83rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA19_Cfsc_file,Cfsc_file::rhs1_Rfsm_comments_phrase_}
+ }// end of reduce table
+};
+yacco2::State S83_Cfsc_file = //State's vectored into symbol: "Rfsm_comments_value"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Cfsc_file,0,0,0};
+struct S84rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S84rtd_Cfsc_file S84rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs2_Rno_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S84_Cfsc_file = //State's vectored into symbol: "|?|"
+{84
+,0,0,0,0,0,(Reduce_tbl*)&S84rt_Cfsc_file,0,0,0};
+struct S85rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Cfsc_file S85rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs1_Rno_of_native_fset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S85_Cfsc_file = //State's vectored into symbol: "int-no"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Cfsc_file,0,0,0};
+struct S86rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S86rtd_Cfsc_file S86rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs1_Ra_T_}
+ }// end of reduce table
+};
+yacco2::State S86_Cfsc_file = //State's vectored into symbol: "identifier"
+{86
+,0,0,0,0,0,(Reduce_tbl*)&S86rt_Cfsc_file,0,0,0};
+struct S87rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Cfsc_file S87rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs2_Ra_T_}
+ }// end of reduce table
+};
+yacco2::State S87_Cfsc_file = //State's vectored into symbol: "tth-in-stbl"
+{87
+,0,0,0,0,0,(Reduce_tbl*)&S87rt_Cfsc_file,0,0,0};
+struct S88std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S88std_Cfsc_file S88st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {279,(State*)&S86_Cfsc_file} // shift sym: T_identifier
+ ,{364,(State*)&S87_Cfsc_file} // shift sym: tth_in_stbl
+ ,{596,(State*)&S89_Cfsc_file} // shift sym: Ra_T
+ }// end of shift table
+};
+struct S88rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S88rtd_Cfsc_file S88rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Cfsc_file,Cfsc_file::rhs1_Rfset_terminals_epi_}
+ }// end of reduce table
+};
+yacco2::State S88_Cfsc_file = //State's vectored into symbol: "Rfset_terminals"
+{88
+,0,0,0,0,(Shift_tbl*)&S88st_Cfsc_file,(Reduce_tbl*)&S88rt_Cfsc_file,0,0,0};
+struct S89rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S89rtd_Cfsc_file S89rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs2_Rfset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S89_Cfsc_file = //State's vectored into symbol: "Ra_T"
+{89
+,0,0,0,0,0,(Reduce_tbl*)&S89rt_Cfsc_file,0,0,0};
+struct S90rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S90rtd_Cfsc_file S90rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cfsc_file,Cfsc_file::rhs1_Rfset_terminals_}
+ }// end of reduce table
+};
+yacco2::State S90_Cfsc_file = //State's vectored into symbol: "Ra_T"
+{90
+,0,0,0,0,0,(Reduce_tbl*)&S90rt_Cfsc_file,0,0,0};
+struct S91rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S91rtd_Cfsc_file S91rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs2_Rno_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S91_Cfsc_file = //State's vectored into symbol: "|?|"
+{91
+,0,0,0,0,0,(Reduce_tbl*)&S91rt_Cfsc_file,0,0,0};
+struct S92rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S92rtd_Cfsc_file S92rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs1_Rno_of_transitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S92_Cfsc_file = //State's vectored into symbol: "int-no"
+{92
+,0,0,0,0,0,(Reduce_tbl*)&S92rt_Cfsc_file,0,0,0};
+struct S93rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S93rtd_Cfsc_file S93rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs1_Ra_th_}
+ }// end of reduce table
+};
+yacco2::State S93_Cfsc_file = //State's vectored into symbol: "identifier"
+{93
+,0,0,0,0,0,(Reduce_tbl*)&S93rt_Cfsc_file,0,0,0};
+struct S94rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S94rtd_Cfsc_file S94rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs2_Ra_th_}
+ }// end of reduce table
+};
+yacco2::State S94_Cfsc_file = //State's vectored into symbol: "th-in-stbl"
+{94
+,0,0,0,0,0,(Reduce_tbl*)&S94rt_Cfsc_file,0,0,0};
+struct S95std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S95std_Cfsc_file S95st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {279,(State*)&S93_Cfsc_file} // shift sym: T_identifier
+ ,{366,(State*)&S94_Cfsc_file} // shift sym: th_in_stbl
+ ,{603,(State*)&S96_Cfsc_file} // shift sym: Ra_th
+ }// end of shift table
+};
+struct S95rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S95rtd_Cfsc_file S95rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA14_Cfsc_file,Cfsc_file::rhs1_Rtransitive_threads_epi_}
+ }// end of reduce table
+};
+yacco2::State S95_Cfsc_file = //State's vectored into symbol: "Rtransitive_threads"
+{95
+,0,0,0,0,(Shift_tbl*)&S95st_Cfsc_file,(Reduce_tbl*)&S95rt_Cfsc_file,0,0,0};
+struct S96rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S96rtd_Cfsc_file S96rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs2_Rtransitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S96_Cfsc_file = //State's vectored into symbol: "Ra_th"
+{96
+,0,0,0,0,0,(Reduce_tbl*)&S96rt_Cfsc_file,0,0,0};
+struct S97rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S97rtd_Cfsc_file S97rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cfsc_file,Cfsc_file::rhs1_Rtransitive_threads_}
+ }// end of reduce table
+};
+yacco2::State S97_Cfsc_file = //State's vectored into symbol: "Ra_th"
+{97
+,0,0,0,0,0,(Reduce_tbl*)&S97rt_Cfsc_file,0,0,0};
+struct S98rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S98rtd_Cfsc_file S98rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs2_Rno_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S98_Cfsc_file = //State's vectored into symbol: "|?|"
+{98
+,0,0,0,0,0,(Reduce_tbl*)&S98rt_Cfsc_file,0,0,0};
+struct S99rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S99rtd_Cfsc_file S99rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs1_Rno_of_used_threads_}
+ }// end of reduce table
+};
+yacco2::State S99_Cfsc_file = //State's vectored into symbol: "int-no"
+{99
+,0,0,0,0,0,(Reduce_tbl*)&S99rt_Cfsc_file,0,0,0};
+struct S100rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S100rtd_Cfsc_file S100rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs1_Rb_th_}
+ }// end of reduce table
+};
+yacco2::State S100_Cfsc_file = //State's vectored into symbol: "identifier"
+{100
+,0,0,0,0,0,(Reduce_tbl*)&S100rt_Cfsc_file,0,0,0};
+struct S101rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S101rtd_Cfsc_file S101rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs2_Rb_th_}
+ }// end of reduce table
+};
+yacco2::State S101_Cfsc_file = //State's vectored into symbol: "th-in-stbl"
+{101
+,0,0,0,0,0,(Reduce_tbl*)&S101rt_Cfsc_file,0,0,0};
+struct S102std_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S102std_Cfsc_file S102st_Cfsc_file = {
+ 3
+ ,
+ {// start of table
+ {279,(State*)&S100_Cfsc_file} // shift sym: T_identifier
+ ,{366,(State*)&S101_Cfsc_file} // shift sym: th_in_stbl
+ ,{610,(State*)&S103_Cfsc_file} // shift sym: Rb_th
+ }// end of shift table
+};
+struct S102rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S102rtd_Cfsc_file S102rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA16_Cfsc_file,Cfsc_file::rhs1_Rused_threads_epi_}
+ }// end of reduce table
+};
+yacco2::State S102_Cfsc_file = //State's vectored into symbol: "Rused_threads"
+{102
+,0,0,0,0,(Shift_tbl*)&S102st_Cfsc_file,(Reduce_tbl*)&S102rt_Cfsc_file,0,0,0};
+struct S103rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S103rtd_Cfsc_file S103rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs2_Rused_threads_}
+ }// end of reduce table
+};
+yacco2::State S103_Cfsc_file = //State's vectored into symbol: "Rb_th"
+{103
+,0,0,0,0,0,(Reduce_tbl*)&S103rt_Cfsc_file,0,0,0};
+struct S104rtd_Cfsc_file{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S104rtd_Cfsc_file S104rt_Cfsc_file = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cfsc_file,Cfsc_file::rhs1_Rused_threads_}
+ }// end of reduce table
+};
+yacco2::State S104_Cfsc_file = //State's vectored into symbol: "Rb_th"
+{104
+,0,0,0,0,0,(Reduce_tbl*)&S104rt_Cfsc_file,0,0,0};
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_th.cpp b/web/yacco2/compiler/grammars/fsm_class_phrase_th.cpp
new file mode 100644
index 0000000000..c7e032e40d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_th.cpp
@@ -0,0 +1,992 @@
+/*
+ File: fsm_class_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_class_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_class_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 15;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+}
+ Cfsm_class_phrase_th::
+ Cfsm_class_phrase_th()
+ :yacco2::CAbs_fsm
+ ("fsm_class_phrase_th.lex"
+ ,"1.0"
+ ,"2 mar 2004"
+ ,false
+ ,"Parse the fsm-class grammar construct."
+ ,"Fri Jan 30 18:55:12 2015 "
+ ,S1_Cfsm_class_phrase_th){
+
+ fsm_class_phrase_ = 0;
+
+ }
+
+Cfsm_class_phrase_th::~Cfsm_class_phrase_th(){
+
+ for(int x = 0;x < 15;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cfsm_class_phrase_th::failed(){
+ return false;
+ }
+ void Cfsm_class_phrase_th::op(){
+ if(fsm_class_phrase_ != 0){
+ delete fsm_class_phrase_;
+ fsm_class_phrase_ = 0;
+ }
+ fsm_class_phrase_ = new T_fsm_class_phrase;
+ fsm_class_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*fsm_class_phrase_);
+ fsm_class_phrase_->phrase_tree(t);
+
+}
+int Cfsm_class_phrase_th::rhs_to_rules_mapping_[49] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,5 // subrule 11 for rule 6
+ ,5 // subrule 12 for rule 6
+ ,5 // subrule 13 for rule 6
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+ ,5 // subrule 16 for rule 6
+ ,5 // subrule 17 for rule 6
+ ,5 // subrule 18 for rule 6
+ ,5 // subrule 19 for rule 6
+ ,5 // subrule 20 for rule 6
+ ,6 // subrule 21 for rule 7
+ ,6 // subrule 22 for rule 7
+ ,7 // subrule 23 for rule 8
+ ,7 // subrule 24 for rule 8
+ ,8 // subrule 25 for rule 9
+ ,8 // subrule 26 for rule 9
+ ,9 // subrule 27 for rule 10
+ ,9 // subrule 28 for rule 10
+ ,9 // subrule 29 for rule 10
+ ,9 // subrule 30 for rule 10
+ ,9 // subrule 31 for rule 10
+ ,9 // subrule 32 for rule 10
+ ,9 // subrule 33 for rule 10
+ ,9 // subrule 34 for rule 10
+ ,9 // subrule 35 for rule 10
+ ,9 // subrule 36 for rule 10
+ ,9 // subrule 37 for rule 10
+ ,10 // subrule 38 for rule 11
+ ,10 // subrule 39 for rule 11
+ ,11 // subrule 40 for rule 12
+ ,11 // subrule 41 for rule 12
+ ,12 // subrule 42 for rule 13
+ ,12 // subrule 43 for rule 13
+ ,13 // subrule 44 for rule 14
+ ,13 // subrule 45 for rule 14
+ ,13 // subrule 46 for rule 14
+ ,14 // subrule 47 for rule 15
+ ,14 // subrule 48 for rule 15
+};
+
+ void Cfsm_class_phrase_th::remove_directives_from_map(){
+ delete fsm_class_phrase_;
+ fsm_class_phrase_ = 0;
+ }
+
+
+ yacco2::CAbs_lr1_sym* // 0 - ok, or error
+ Cfsm_class_phrase_th::
+ add_directive_to_map(yacco2::CAbs_lr1_sym* Directive){
+ CAbs_lr1_sym* sym =
+ fsm_class_phrase_->add_directive_to_map(Directive,parser__);
+ return sym;
+ }
+
+ void Cfsm_class_phrase_th::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dr,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ int eid = Dr->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_prefix_declaration_: {
+ T_user_prefix_declaration* k = (T_user_prefix_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_suffix_declaration_: {
+ T_user_suffix_declaration* k = (T_user_suffix_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_failed_: {
+ T_failed* k = (T_failed*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_imp_tbl_: {
+ T_user_imp_tbl* k = (T_user_imp_tbl*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_imp_sym_: {
+ T_user_imp_sym* k = (T_user_imp_sym*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dr,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+
+Rfsm_class_phrase_th::Rfsm_class_phrase_th(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_class_phrase_th",0,Cfsm_class_phrase_th::R_Rfsm_class_phrase_th_,P,false,false){
+}
+
+void Rfsm_class_phrase_th::sr1(){
+
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->fsm_class_phrase_);
+ fsm->fsm_class_phrase_ = 0;
+
+}
+
+Rid::Rid(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rid",0,Cfsm_class_phrase_th::R_Rid_,P,false,false){
+}
+
+void Rid::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_class_phrase_->identifier(sf->p2__);
+
+}
+
+void Rid::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_identifier_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rid::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_identifier_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpotential_code_blk::Rpotential_code_blk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_code_blk",0,Cfsm_class_phrase_th::R_Rpotential_code_blk_,P,false,false){
+}
+
+Rpotential_directives::Rpotential_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_directives",0,Cfsm_class_phrase_th::R_Rpotential_directives_,P,false,false){
+}
+
+Rmust_directive_phrase::Rmust_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive_phrase",0,Cfsm_class_phrase_th::R_Rmust_directive_phrase_,P,false,false){
+}
+
+void Rmust_directive_phrase::sr1(){
+ struct SF{
+ Rdirective_cweb_k* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rmust_directive* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rmust_directive::Rmust_directive(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive",0,Cfsm_class_phrase_th::R_Rmust_directive_,P,false,false){
+}
+
+void Rmust_directive::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Cfsm_class_phrase_th* fsm = (
+ Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result = fsm->add_directive_to_map(directive_);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rmust_directive::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_prefix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_suffix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_failed* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_tbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rmust_directive::sr12(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ directive_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmaybe_more_directives::Rmaybe_more_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_more_directives",0,Cfsm_class_phrase_th::R_Rmaybe_more_directives_,P,false,false){
+}
+
+Rmaybe_directive_phrases::Rmaybe_directive_phrases(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrases",0,Cfsm_class_phrase_th::R_Rmaybe_directive_phrases_,P,false,false){
+}
+
+Rmaybe_directive_phrase::Rmaybe_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrase",0,Cfsm_class_phrase_th::R_Rmaybe_directive_phrase_,P,false,false){
+}
+
+void Rmaybe_directive_phrase::sr1(){
+ struct SF{
+ Rcweb_k* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rdirective* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+void Rmaybe_directive_phrase::sr2(){
+ struct SF{
+ Rdirective* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rsyntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Cfsm_class_phrase_th::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Cfsm_class_phrase_th* fsm = (
+ Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result = fsm->add_directive_to_map(directive_);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rdirective::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_prefix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_suffix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_failed* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_tbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclosing_brace::Rclosing_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclosing_brace",0,Cfsm_class_phrase_th::R_Rclosing_brace_,P,false,false){
+}
+
+void Rclosing_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsyntax_code::Rsyntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsyntax_code",0,Cfsm_class_phrase_th::R_Rsyntax_code_,P,false,false){
+}
+
+void Rsyntax_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = sf->p2__;
+
+}
+
+void Rsyntax_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cfsm_class_phrase_th::R_Rlint_,P,false,false){
+}
+
+Rdirective_cweb_k::Rdirective_cweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_cweb_k",0,Cfsm_class_phrase_th::R_Rdirective_cweb_k_,P,false,false){
+}
+
+void Rdirective_cweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rdirective_cweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rdirective_cweb_k::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rcweb_k::Rcweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_k",0,Cfsm_class_phrase_th::R_Rcweb_k_,P,false,false){
+}
+
+void Rcweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rcweb_k::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rcweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_th.fsc b/web/yacco2/compiler/grammars/fsm_class_phrase_th.fsc
new file mode 100644
index 0000000000..b6c65acc77
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_th.fsc
@@ -0,0 +1,25 @@
+/*
+ File: fsm_class_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+transitive y
+grammar-name "fsm_class_phrase_th"
+name-space "NS_fsm_class_phrase_th"
+thread-name "TH_fsm_class_phrase_th"
+monolithic n
+file-name "fsm_class_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_identifier::TH_identifier
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+end-list-of-used-threads
+fsm-comments
+"Parse the fsm-class grammar construct."
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_th.h b/web/yacco2/compiler/grammars/fsm_class_phrase_th.h
new file mode 100644
index 0000000000..7212e4336d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_th.h
@@ -0,0 +1,270 @@
+/*
+ File: fsm_class_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#ifndef __fsm_class_phrase_th_h__
+#define __fsm_class_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "o2_sdc.h"
+
+extern yacco2::Thread_entry ITH_fsm_class_phrase_th;
+
+extern yacco2::State S1_Cfsm_class_phrase_th;
+namespace NS_fsm_class_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_fsm_class_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_fsm_class_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[15];
+};
+class Cfsm_class_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfsm_class_phrase_th_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfsm_class_phrase_th_ = 1
+ ,R_Rid_ = 570//start_of_rule_list + 2
+ ,rhs1_Rid_ = 2
+ ,rhs2_Rid_ = 3
+ ,rhs3_Rid_ = 4
+ ,R_Rpotential_code_blk_ = 571//start_of_rule_list + 4
+ ,rhs1_Rpotential_code_blk_ = 5
+ ,R_Rpotential_directives_ = 572//start_of_rule_list + 6
+ ,rhs1_Rpotential_directives_ = 6
+ ,rhs2_Rpotential_directives_ = 7
+ ,R_Rmust_directive_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rmust_directive_phrase_ = 8
+ ,R_Rmust_directive_ = 574//start_of_rule_list + 10
+ ,rhs1_Rmust_directive_ = 9
+ ,rhs2_Rmust_directive_ = 10
+ ,rhs3_Rmust_directive_ = 11
+ ,rhs4_Rmust_directive_ = 12
+ ,rhs5_Rmust_directive_ = 13
+ ,rhs6_Rmust_directive_ = 14
+ ,rhs7_Rmust_directive_ = 15
+ ,rhs8_Rmust_directive_ = 16
+ ,rhs9_Rmust_directive_ = 17
+ ,rhs10_Rmust_directive_ = 18
+ ,rhs11_Rmust_directive_ = 19
+ ,rhs12_Rmust_directive_ = 20
+ ,R_Rmaybe_more_directives_ = 575//start_of_rule_list + 12
+ ,rhs1_Rmaybe_more_directives_ = 21
+ ,rhs2_Rmaybe_more_directives_ = 22
+ ,R_Rmaybe_directive_phrases_ = 576//start_of_rule_list + 14
+ ,rhs1_Rmaybe_directive_phrases_ = 23
+ ,rhs2_Rmaybe_directive_phrases_ = 24
+ ,R_Rmaybe_directive_phrase_ = 577//start_of_rule_list + 16
+ ,rhs1_Rmaybe_directive_phrase_ = 25
+ ,rhs2_Rmaybe_directive_phrase_ = 26
+ ,R_Rdirective_ = 578//start_of_rule_list + 18
+ ,rhs1_Rdirective_ = 27
+ ,rhs2_Rdirective_ = 28
+ ,rhs3_Rdirective_ = 29
+ ,rhs4_Rdirective_ = 30
+ ,rhs5_Rdirective_ = 31
+ ,rhs6_Rdirective_ = 32
+ ,rhs7_Rdirective_ = 33
+ ,rhs8_Rdirective_ = 34
+ ,rhs9_Rdirective_ = 35
+ ,rhs10_Rdirective_ = 36
+ ,rhs11_Rdirective_ = 37
+ ,R_Rclosing_brace_ = 579//start_of_rule_list + 20
+ ,rhs1_Rclosing_brace_ = 38
+ ,rhs2_Rclosing_brace_ = 39
+ ,R_Rsyntax_code_ = 580//start_of_rule_list + 22
+ ,rhs1_Rsyntax_code_ = 40
+ ,rhs2_Rsyntax_code_ = 41
+ ,R_Rlint_ = 581//start_of_rule_list + 24
+ ,rhs1_Rlint_ = 42
+ ,rhs2_Rlint_ = 43
+ ,R_Rdirective_cweb_k_ = 582//start_of_rule_list + 26
+ ,rhs1_Rdirective_cweb_k_ = 44
+ ,rhs2_Rdirective_cweb_k_ = 45
+ ,rhs3_Rdirective_cweb_k_ = 46
+ ,R_Rcweb_k_ = 583//start_of_rule_list + 28
+ ,rhs1_Rcweb_k_ = 47
+ ,rhs2_Rcweb_k_ = 48
+ };
+ //no of la sets = 7
+ //no of states = 70
+ Cfsm_class_phrase_th();
+ ~Cfsm_class_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[49];
+
+ public:
+ T_fsm_class_phrase* fsm_class_phrase_;
+ std::map<std::string,yacco2::CAbs_lr1_sym*> directives_map_;
+ void remove_directives_from_map();
+ yacco2::CAbs_lr1_sym* add_directive_to_map(yacco2::CAbs_lr1_sym* Directive);
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+
+ };
+struct Rfsm_class_phrase_th;
+struct Rid;
+struct Rpotential_code_blk;
+struct Rpotential_directives;
+struct Rmust_directive_phrase;
+struct Rmust_directive;
+struct Rmaybe_more_directives;
+struct Rmaybe_directive_phrases;
+struct Rmaybe_directive_phrase;
+struct Rdirective;
+struct Rclosing_brace;
+struct Rsyntax_code;
+struct Rlint;
+struct Rdirective_cweb_k;
+struct Rcweb_k;
+struct Rfsm_class_phrase_th:public yacco2::CAbs_lr1_sym {
+ Rfsm_class_phrase_th(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rid:public yacco2::CAbs_lr1_sym {
+ Rid(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rpotential_code_blk:public yacco2::CAbs_lr1_sym {
+ Rpotential_code_blk(yacco2::Parser* P);
+ public:
+};
+
+struct Rpotential_directives:public yacco2::CAbs_lr1_sym {
+ Rpotential_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmust_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmust_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rmust_directive:public yacco2::CAbs_lr1_sym {
+ Rmust_directive(yacco2::Parser* P);
+ void op();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+};
+
+struct Rmaybe_more_directives:public yacco2::CAbs_lr1_sym {
+ Rmaybe_more_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrases:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrases(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ void op();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+};
+
+struct Rclosing_brace:public yacco2::CAbs_lr1_sym {
+ Rclosing_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsyntax_code:public yacco2::CAbs_lr1_sym {
+ Rsyntax_code(yacco2::Parser* P);
+
+ T_syntax_code* syntax_code_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective_cweb_k:public yacco2::CAbs_lr1_sym {
+ Rdirective_cweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rcweb_k:public yacco2::CAbs_lr1_sym {
+ Rcweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_th.lex b/web/yacco2/compiler/grammars/fsm_class_phrase_th.lex
new file mode 100644
index 0000000000..e8854c013a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_th.lex
@@ -0,0 +1,509 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: fsm_class_phrase_th.lex
+Dates: 2 Mar 2004
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |fsm_class_phrase_th| Thread.\fbreak
+Parse fsm-class phrase along with its directives.\fbreak
+\fbreak
+|cweave| coughs so forgive it until i correct |cweave|.\fbreak
+\fbreak
+Example of a fsm's class to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/fsmclass.txt"}
+@/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ user-prefix-declaration
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "o2_sdc.h"
+ ***
+ user-declaration
+ public:
+ T_fsm_class_phrase* fsm_class_phrase_;
+ std::map<std::string,yacco2::CAbs_lr1_sym*> directives_map_;
+ void remove_directives_from_map();
+ yacco2::CAbs_lr1_sym* add_directive_to_map(yacco2::CAbs_lr1_sym* Directive);
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ ***
+ constructor
+ fsm_class_phrase_ = 0;
+ ***
+ user-implementation
+ void Cfsm_class_phrase_th::remove_directives_from_map(){
+ delete fsm_class_phrase_;
+ fsm_class_phrase_ = 0;
+ }
+
+/@
+@*3 |add_directive_to_map|.
+@/
+ yacco2::CAbs_lr1_sym* // 0 - ok, or error
+ Cfsm_class_phrase_th::
+ add_directive_to_map(yacco2::CAbs_lr1_sym* Directive){
+ CAbs_lr1_sym* sym =
+ fsm_class_phrase_->add_directive_to_map(Directive,parser__);
+ return sym;
+ }
+/@
+@*3 |add_sdc_to_directive|.
+@/
+ void Cfsm_class_phrase_th::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dr,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ int eid = Dr->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_prefix_declaration_: {
+ T_user_prefix_declaration* k = (T_user_prefix_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_suffix_declaration_: {
+ T_user_suffix_declaration* k = (T_user_suffix_declaration*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_failed_: {
+ T_failed* k = (T_failed*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_imp_tbl_: {
+ T_user_imp_tbl* k = (T_user_imp_tbl*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_imp_sym_: {
+ T_user_imp_sym* k = (T_user_imp_sym*)Dr;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dr,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+ ***
+ op
+ if(fsm_class_phrase_ != 0){
+ delete fsm_class_phrase_;
+ fsm_class_phrase_ = 0;
+ }
+ fsm_class_phrase_ = new T_fsm_class_phrase;
+ fsm_class_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*fsm_class_phrase_);
+ fsm_class_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "2 mar 2004",fsm-debug "false"
+,fsm-comments "Parse the fsm-class grammar construct.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_fsm_class_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rfsm_class_phrase_th (){
+ -> Rid Rlint Rpotential_code_blk {
+ op
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->fsm_class_phrase_);
+ fsm->fsm_class_phrase_ = 0;
+ ***
+ }
+}
+
+Rid (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_class_phrase_->identifier(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_identifier_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_identifier_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpotential_code_blk (){
+ -> Rpotential_directives
+}
+
+Rpotential_directives (){
+ -> |.|
+ -> "{" Rlint Rmust_directive_phrase
+ Rmaybe_more_directives Rclosing_brace Rlint
+}
+
+Rmust_directive_phrase (){
+ -> Rdirective_cweb_k Rlint Rmust_directive Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rmust_directive (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ op
+ if(directive_ == 0) return;
+ Cfsm_class_phrase_th* fsm = (
+ Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result = fsm->add_directive_to_map(directive_);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#user-declaration" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-implementation" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-prefix-declaration" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-suffix-declaration" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#constructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#destructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#op" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#failed" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-imp-tbl" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-imp-sym" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ directive_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rmaybe_more_directives (){
+ -> //|+| // force the reduce
+ -> Rmaybe_directive_phrases
+}
+
+Rmaybe_directive_phrases (){
+ -> Rmaybe_directive_phrase
+ -> Rmaybe_directive_phrases Rmaybe_directive_phrase
+}
+
+Rmaybe_directive_phrase (){
+ -> Rcweb_k Rlint Rdirective Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+ -> Rdirective Rsyntax_code Rlint {
+ op
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Cfsm_class_phrase_th* fsm =
+ (Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ op
+ if(directive_ == 0) return;
+ Cfsm_class_phrase_th* fsm = (
+ Cfsm_class_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result = fsm->add_directive_to_map(directive_);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#user-declaration" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-implementation" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-prefix-declaration" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-suffix-declaration" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#constructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#destructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#op" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#failed" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-imp-tbl" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-imp-sym" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rclosing_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rsyntax_code (
+lhs {
+ user-declaration
+ T_syntax_code* syntax_code_;
+ ***
+ }
+){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ syntax_code_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL { // catcher in the Rye? These are errors
+ op
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Rdirective_cweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rcweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_thsym.cpp b/web/yacco2/compiler/grammars/fsm_class_phrase_thsym.cpp
new file mode 100644
index 0000000000..043f7904a8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_thsym.cpp
@@ -0,0 +1,785 @@
+/*
+ File: fsm_class_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_class_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_class_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_fsm_class_phrase_th::TH_fsm_class_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_fsm_class_phrase_th;
+ NS_fsm_class_phrase_th::Cfsm_class_phrase_th Cfsm_class_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cfsm_class_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_fsm_class_phrase_th::PROC_TH_fsm_class_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_fsm_class_phrase_th";
+ static bool one_time(false);
+ static NS_fsm_class_phrase_th::Cfsm_class_phrase_th* NS_fsm_class_phrase_th_Cfsm_class_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_fsm_class_phrase_th_Cfsm_class_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_fsm_class_phrase_th_Cfsm_class_phrase_th_ = new NS_fsm_class_phrase_th::Cfsm_class_phrase_th();// parallel-parser's fsm table
+ NS_fsm_class_phrase_th_Cfsm_class_phrase_th_parser = new Parser(*NS_fsm_class_phrase_th_Cfsm_class_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_fsm_class_phrase_th_Cfsm_class_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cfsm_class_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfsm_class_phrase_th_:{
+ Rfsm_class_phrase_th* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class_phrase_th(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class_phrase_th*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rpotential_code_blk_:{
+ Rpotential_code_blk* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_code_blk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_code_blk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Rmust_directive_phrase_:{
+ Rmust_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs7_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ sym->op();
+ return;}
+ case rhs8_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ sym->op();
+ return;}
+ case rhs9_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ sym->op();
+ return;}
+ case rhs10_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ sym->op();
+ return;}
+ case rhs11_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ sym->op();
+ return;}
+ case rhs12_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr12();
+ sym->op();
+ return;}
+ case rhs1_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs7_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ sym->op();
+ return;}
+ case rhs8_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ sym->op();
+ return;}
+ case rhs9_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ sym->op();
+ return;}
+ case rhs10_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ sym->op();
+ return;}
+ case rhs11_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ sym->op();
+ return;}
+ case rhs1_Rclosing_brace_:{
+ Rclosing_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclosing_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclosing_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclosing_brace_:{
+ Rclosing_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclosing_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclosing_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/fsm_class_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/fsm_class_phrase_thtbl.cpp
new file mode 100644
index 0000000000..39e953797f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_class_phrase_thtbl.cpp
@@ -0,0 +1,1417 @@
+/*
+ File: fsm_class_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_class_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_class_phrase_th;// grammar's ns
+// first set terminals
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA1_Cfsm_class_phrase_th[] ={
+2
+,0,48
+,16,8
+};
+// LR1_invisible_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA2_Cfsm_class_phrase_th[] ={
+2
+,0,32
+,16,8
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Cfsm_class_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA4_Cfsm_class_phrase_th[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Cfsm_class_phrase_th[] ={
+2
+,0,1
+,16,32
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA6_Cfsm_class_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA7_Cfsm_class_phrase_th[] ={
+1
+,0,16
+};
+extern yacco2::State S1_Cfsm_class_phrase_th;
+extern yacco2::State S2_Cfsm_class_phrase_th;
+extern yacco2::State S3_Cfsm_class_phrase_th;
+struct S3ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Cfsm_class_phrase_th S3tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S4_Cfsm_class_phrase_th;
+extern yacco2::State S5_Cfsm_class_phrase_th;
+extern yacco2::State S6_Cfsm_class_phrase_th;
+extern yacco2::State S7_Cfsm_class_phrase_th;
+extern yacco2::State S8_Cfsm_class_phrase_th;
+extern yacco2::State S9_Cfsm_class_phrase_th;
+extern yacco2::State S10_Cfsm_class_phrase_th;
+extern yacco2::State S11_Cfsm_class_phrase_th;
+extern yacco2::State S12_Cfsm_class_phrase_th;
+extern yacco2::State S13_Cfsm_class_phrase_th;
+extern yacco2::State S14_Cfsm_class_phrase_th;
+extern yacco2::State S15_Cfsm_class_phrase_th;
+extern yacco2::State S16_Cfsm_class_phrase_th;
+struct S16ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S16ttd_Cfsm_class_phrase_th S16tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S17_Cfsm_class_phrase_th;
+extern yacco2::State S18_Cfsm_class_phrase_th;
+extern yacco2::State S19_Cfsm_class_phrase_th;
+extern yacco2::State S20_Cfsm_class_phrase_th;
+extern yacco2::State S21_Cfsm_class_phrase_th;
+struct S21ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S21ttd_Cfsm_class_phrase_th S21tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S22_Cfsm_class_phrase_th;
+extern yacco2::State S23_Cfsm_class_phrase_th;
+extern yacco2::State S24_Cfsm_class_phrase_th;
+extern yacco2::State S25_Cfsm_class_phrase_th;
+extern yacco2::State S26_Cfsm_class_phrase_th;
+extern yacco2::State S27_Cfsm_class_phrase_th;
+struct S27ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S27ttd_Cfsm_class_phrase_th S27tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S28_Cfsm_class_phrase_th;
+extern yacco2::State S29_Cfsm_class_phrase_th;
+extern yacco2::State S30_Cfsm_class_phrase_th;
+extern yacco2::State S31_Cfsm_class_phrase_th;
+extern yacco2::State S32_Cfsm_class_phrase_th;
+struct S32ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S32ttd_Cfsm_class_phrase_th S32tt_Cfsm_class_phrase_th = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S33_Cfsm_class_phrase_th;
+extern yacco2::State S34_Cfsm_class_phrase_th;
+extern yacco2::State S35_Cfsm_class_phrase_th;
+extern yacco2::State S36_Cfsm_class_phrase_th;
+extern yacco2::State S37_Cfsm_class_phrase_th;
+extern yacco2::State S38_Cfsm_class_phrase_th;
+extern yacco2::State S39_Cfsm_class_phrase_th;
+extern yacco2::State S40_Cfsm_class_phrase_th;
+extern yacco2::State S41_Cfsm_class_phrase_th;
+extern yacco2::State S42_Cfsm_class_phrase_th;
+extern yacco2::State S43_Cfsm_class_phrase_th;
+extern yacco2::State S44_Cfsm_class_phrase_th;
+extern yacco2::State S45_Cfsm_class_phrase_th;
+extern yacco2::State S46_Cfsm_class_phrase_th;
+extern yacco2::State S47_Cfsm_class_phrase_th;
+extern yacco2::State S48_Cfsm_class_phrase_th;
+extern yacco2::State S49_Cfsm_class_phrase_th;
+extern yacco2::State S50_Cfsm_class_phrase_th;
+extern yacco2::State S51_Cfsm_class_phrase_th;
+extern yacco2::State S52_Cfsm_class_phrase_th;
+extern yacco2::State S53_Cfsm_class_phrase_th;
+extern yacco2::State S54_Cfsm_class_phrase_th;
+extern yacco2::State S55_Cfsm_class_phrase_th;
+extern yacco2::State S56_Cfsm_class_phrase_th;
+extern yacco2::State S57_Cfsm_class_phrase_th;
+extern yacco2::State S58_Cfsm_class_phrase_th;
+struct S58ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S58ttd_Cfsm_class_phrase_th S58tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S59_Cfsm_class_phrase_th;
+extern yacco2::State S60_Cfsm_class_phrase_th;
+extern yacco2::State S61_Cfsm_class_phrase_th;
+extern yacco2::State S62_Cfsm_class_phrase_th;
+extern yacco2::State S63_Cfsm_class_phrase_th;
+extern yacco2::State S64_Cfsm_class_phrase_th;
+extern yacco2::State S65_Cfsm_class_phrase_th;
+extern yacco2::State S66_Cfsm_class_phrase_th;
+extern yacco2::State S67_Cfsm_class_phrase_th;
+extern yacco2::State S68_Cfsm_class_phrase_th;
+extern yacco2::State S69_Cfsm_class_phrase_th;
+extern yacco2::State S70_Cfsm_class_phrase_th;
+struct S70ttd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S70ttd_Cfsm_class_phrase_th S70tt_Cfsm_class_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+struct S1std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cfsm_class_phrase_th S1st_Cfsm_class_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cfsm_class_phrase_th} // accept sym: Rfsm_class_phrase_th
+ ,{570,(State*)&S6_Cfsm_class_phrase_th} // shift sym: Rid
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cfsm_class_phrase_th = {3,(State*)&S3_Cfsm_class_phrase_th};
+yacco2::Shift_entry S1qse_Cfsm_class_phrase_th = {0,(State*)&S2_Cfsm_class_phrase_th};
+yacco2::State S1_Cfsm_class_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S1st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S3tt_Cfsm_class_phrase_th,0,(Shift_entry*)&S1qse_Cfsm_class_phrase_th
+};
+struct S2rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cfsm_class_phrase_th S2rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs3_Rid_}
+ }// end of reduce table
+};
+yacco2::State S2_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cfsm_class_phrase_th,0,0,0};
+struct S3std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cfsm_class_phrase_th S3st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S5_Cfsm_class_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cfsm_class_phrase_th = {0,(State*)&S4_Cfsm_class_phrase_th};
+yacco2::State S3_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S3qse_Cfsm_class_phrase_th
+};
+struct S4rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cfsm_class_phrase_th S4rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rid_}
+ }// end of reduce table
+};
+yacco2::State S4_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cfsm_class_phrase_th,0,0,0};
+struct S5rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cfsm_class_phrase_th S5rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rid_}
+ }// end of reduce table
+};
+yacco2::State S5_Cfsm_class_phrase_th = //State's vectored into symbol: "identifier"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cfsm_class_phrase_th,0,0,0};
+struct S6std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S6std_Cfsm_class_phrase_th S6st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S7_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S6rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cfsm_class_phrase_th S6rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S6_Cfsm_class_phrase_th = //State's vectored into symbol: "Rid"
+{6
+,(Shift_entry*)&S6pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S6st_Cfsm_class_phrase_th,(Reduce_tbl*)&S6rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S7std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S7std_Cfsm_class_phrase_th S7st_Cfsm_class_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {5,(State*)&S8_Cfsm_class_phrase_th} // shift sym: LR1_invisible_shift_operator
+ ,{131,(State*)&S9_Cfsm_class_phrase_th} // shift sym: raw_open_brace
+ ,{571,(State*)&S19_Cfsm_class_phrase_th} // shift sym: Rpotential_code_blk
+ ,{572,(State*)&S20_Cfsm_class_phrase_th} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+yacco2::Shift_entry S7ise_Cfsm_class_phrase_th = {5,(State*)&S8_Cfsm_class_phrase_th};
+yacco2::State S7_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{7
+,0,0,(Shift_entry*)&S7ise_Cfsm_class_phrase_th
+,0,(Shift_tbl*)&S7st_Cfsm_class_phrase_th,0,0,0,0};
+struct S8rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cfsm_class_phrase_th S8rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S8_Cfsm_class_phrase_th = //State's vectored into symbol: "|.|"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cfsm_class_phrase_th,0,0,0};
+struct S9std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Cfsm_class_phrase_th S9st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S10_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S9rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cfsm_class_phrase_th S9rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Cfsm_class_phrase_th = //State's vectored into symbol: "{"
+{9
+,(Shift_entry*)&S9pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S9st_Cfsm_class_phrase_th,(Reduce_tbl*)&S9rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S10std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Cfsm_class_phrase_th S10st_Cfsm_class_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S21_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S11_Cfsm_class_phrase_th} // shift sym: Rmust_directive_phrase
+ ,{582,(State*)&S24_Cfsm_class_phrase_th} // shift sym: Rdirective_cweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Cfsm_class_phrase_th = {3,(State*)&S21_Cfsm_class_phrase_th};
+struct S10rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cfsm_class_phrase_th S10rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S10_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{10
+,(Shift_entry*)&S10pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S10st_Cfsm_class_phrase_th,(Reduce_tbl*)&S10rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S21tt_Cfsm_class_phrase_th,0,0};
+struct S11std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S11std_Cfsm_class_phrase_th S11st_Cfsm_class_phrase_th = {
+ 6
+ ,
+ {// start of table
+ {3,(State*)&S32_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S12_Cfsm_class_phrase_th} // shift sym: Rmaybe_more_directives
+ ,{576,(State*)&S46_Cfsm_class_phrase_th} // shift sym: Rmaybe_directive_phrases
+ ,{577,(State*)&S56_Cfsm_class_phrase_th} // shift sym: Rmaybe_directive_phrase
+ ,{578,(State*)&S48_Cfsm_class_phrase_th} // shift sym: Rdirective
+ ,{583,(State*)&S51_Cfsm_class_phrase_th} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Cfsm_class_phrase_th = {3,(State*)&S32_Cfsm_class_phrase_th};
+struct S11rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cfsm_class_phrase_th S11rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rmaybe_more_directives_}
+ }// end of reduce table
+};
+yacco2::State S11_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmust_directive_phrase"
+{11
+,(Shift_entry*)&S11pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S11st_Cfsm_class_phrase_th,(Reduce_tbl*)&S11rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S32tt_Cfsm_class_phrase_th,0,0};
+struct S12std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S12std_Cfsm_class_phrase_th S12st_Cfsm_class_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S13_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S14_Cfsm_class_phrase_th} // shift sym: raw_close_brace
+ ,{579,(State*)&S15_Cfsm_class_phrase_th} // shift sym: Rclosing_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S12qse_Cfsm_class_phrase_th = {0,(State*)&S13_Cfsm_class_phrase_th};
+yacco2::State S12_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmaybe_more_directives"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S12qse_Cfsm_class_phrase_th
+};
+struct S13rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cfsm_class_phrase_th S13rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rclosing_brace_}
+ }// end of reduce table
+};
+yacco2::State S13_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cfsm_class_phrase_th,0,0,0};
+struct S14rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cfsm_class_phrase_th S14rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rclosing_brace_}
+ }// end of reduce table
+};
+yacco2::State S14_Cfsm_class_phrase_th = //State's vectored into symbol: "}"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cfsm_class_phrase_th,0,0,0};
+struct S15std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Cfsm_class_phrase_th S15st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S18_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S15rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cfsm_class_phrase_th S15rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S15_Cfsm_class_phrase_th = //State's vectored into symbol: "Rclosing_brace"
+{15
+,(Shift_entry*)&S15pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S15st_Cfsm_class_phrase_th,(Reduce_tbl*)&S15rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S16std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Cfsm_class_phrase_th S16st_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S17_Cfsm_class_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S16_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cfsm_class_phrase_th,0,0,0,0};
+struct S17rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cfsm_class_phrase_th S17rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S17_Cfsm_class_phrase_th = //State's vectored into symbol: "lint"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cfsm_class_phrase_th,0,0,0};
+struct S18rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cfsm_class_phrase_th S18rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S18_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cfsm_class_phrase_th,0,0,0};
+struct S19rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cfsm_class_phrase_th S19rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rfsm_class_phrase_th_}
+ }// end of reduce table
+};
+yacco2::State S19_Cfsm_class_phrase_th = //State's vectored into symbol: "Rpotential_code_blk"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cfsm_class_phrase_th,0,0,0};
+struct S20rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cfsm_class_phrase_th S20rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rpotential_code_blk_}
+ }// end of reduce table
+};
+yacco2::State S20_Cfsm_class_phrase_th = //State's vectored into symbol: "Rpotential_directives"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cfsm_class_phrase_th,0,0,0};
+struct S21std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S21std_Cfsm_class_phrase_th S21st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {372,(State*)&S22_Cfsm_class_phrase_th} // shift sym: T_cweb_comment
+ ,{396,(State*)&S23_Cfsm_class_phrase_th} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::State S21_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cfsm_class_phrase_th,0,0,0,0};
+struct S22rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cfsm_class_phrase_th S22rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S22_Cfsm_class_phrase_th = //State's vectored into symbol: "cweb-comment"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cfsm_class_phrase_th,0,0,0};
+struct S23rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cfsm_class_phrase_th S23rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs3_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S23_Cfsm_class_phrase_th = //State's vectored into symbol: "comment-overrun"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cfsm_class_phrase_th,0,0,0};
+struct S24std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Cfsm_class_phrase_th S24st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S25_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S24rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cfsm_class_phrase_th S24rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Cfsm_class_phrase_th = //State's vectored into symbol: "Rdirective_cweb_k"
+{24
+,(Shift_entry*)&S24pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S24st_Cfsm_class_phrase_th,(Reduce_tbl*)&S24rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S25std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_Cfsm_class_phrase_th S25st_Cfsm_class_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S57_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S58_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S26_Cfsm_class_phrase_th} // shift sym: Rmust_directive
+ }// end of shift table
+};
+yacco2::Shift_entry S25pse_Cfsm_class_phrase_th = {3,(State*)&S58_Cfsm_class_phrase_th};
+yacco2::Shift_entry S25qse_Cfsm_class_phrase_th = {0,(State*)&S57_Cfsm_class_phrase_th};
+yacco2::State S25_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{25
+,(Shift_entry*)&S25pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S25st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S58tt_Cfsm_class_phrase_th,0,(Shift_entry*)&S25qse_Cfsm_class_phrase_th
+};
+struct S26std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_Cfsm_class_phrase_th S26st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S27_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S30_Cfsm_class_phrase_th} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_Cfsm_class_phrase_th = {3,(State*)&S27_Cfsm_class_phrase_th};
+yacco2::State S26_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmust_directive"
+{26
+,(Shift_entry*)&S26pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S26st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S27tt_Cfsm_class_phrase_th,0,0};
+struct S27std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S27std_Cfsm_class_phrase_th S27st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S28_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S29_Cfsm_class_phrase_th} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S27qse_Cfsm_class_phrase_th = {0,(State*)&S28_Cfsm_class_phrase_th};
+yacco2::State S27_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S27qse_Cfsm_class_phrase_th
+};
+struct S28rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cfsm_class_phrase_th S28rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S28_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cfsm_class_phrase_th,0,0,0};
+struct S29rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cfsm_class_phrase_th S29rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S29_Cfsm_class_phrase_th = //State's vectored into symbol: "syntax-code"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cfsm_class_phrase_th,0,0,0};
+struct S30std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S30std_Cfsm_class_phrase_th S30st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S31_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S30pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S30rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cfsm_class_phrase_th S30rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S30_Cfsm_class_phrase_th = //State's vectored into symbol: "Rsyntax_code"
+{30
+,(Shift_entry*)&S30pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S30st_Cfsm_class_phrase_th,(Reduce_tbl*)&S30rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S31rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cfsm_class_phrase_th S31rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rmust_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S31_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cfsm_class_phrase_th,0,0,0};
+struct S32std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[13];
+};
+S32std_Cfsm_class_phrase_th S32st_Cfsm_class_phrase_th = {
+ 13
+ ,
+ {// start of table
+ {0,(State*)&S33_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S34_Cfsm_class_phrase_th} // shift sym: T_user_declaration
+ ,{309,(State*)&S35_Cfsm_class_phrase_th} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S36_Cfsm_class_phrase_th} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S37_Cfsm_class_phrase_th} // shift sym: T_constructor
+ ,{312,(State*)&S38_Cfsm_class_phrase_th} // shift sym: T_destructor
+ ,{313,(State*)&S39_Cfsm_class_phrase_th} // shift sym: T_op
+ ,{314,(State*)&S40_Cfsm_class_phrase_th} // shift sym: T_failed
+ ,{315,(State*)&S41_Cfsm_class_phrase_th} // shift sym: T_user_implementation
+ ,{316,(State*)&S42_Cfsm_class_phrase_th} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S43_Cfsm_class_phrase_th} // shift sym: T_user_imp_sym
+ ,{372,(State*)&S44_Cfsm_class_phrase_th} // shift sym: T_cweb_comment
+ ,{396,(State*)&S45_Cfsm_class_phrase_th} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::Shift_entry S32qse_Cfsm_class_phrase_th = {0,(State*)&S33_Cfsm_class_phrase_th};
+yacco2::State S32_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{32
+,0,0,0,0,(Shift_tbl*)&S32st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S32qse_Cfsm_class_phrase_th
+};
+struct S33rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cfsm_class_phrase_th S33rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs11_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S33_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cfsm_class_phrase_th,0,0,0};
+struct S34rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cfsm_class_phrase_th S34rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S34_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-declaration"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Cfsm_class_phrase_th,0,0,0};
+struct S35rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cfsm_class_phrase_th S35rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S35_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-prefix-declaration"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cfsm_class_phrase_th,0,0,0};
+struct S36rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cfsm_class_phrase_th S36rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S36_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-suffix-declaration"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cfsm_class_phrase_th,0,0,0};
+struct S37rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cfsm_class_phrase_th S37rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S37_Cfsm_class_phrase_th = //State's vectored into symbol: "#constructor"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cfsm_class_phrase_th,0,0,0};
+struct S38rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cfsm_class_phrase_th S38rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S38_Cfsm_class_phrase_th = //State's vectored into symbol: "#destructor"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cfsm_class_phrase_th,0,0,0};
+struct S39rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cfsm_class_phrase_th S39rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs7_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S39_Cfsm_class_phrase_th = //State's vectored into symbol: "#op"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cfsm_class_phrase_th,0,0,0};
+struct S40rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cfsm_class_phrase_th S40rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs8_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S40_Cfsm_class_phrase_th = //State's vectored into symbol: "#failed"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cfsm_class_phrase_th,0,0,0};
+struct S41rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cfsm_class_phrase_th S41rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S41_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-implementation"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cfsm_class_phrase_th,0,0,0};
+struct S42rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cfsm_class_phrase_th S42rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs9_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S42_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-imp-tbl"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cfsm_class_phrase_th,0,0,0};
+struct S43rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cfsm_class_phrase_th S43rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs10_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S43_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-imp-sym"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cfsm_class_phrase_th,0,0,0};
+struct S44rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cfsm_class_phrase_th S44rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S44_Cfsm_class_phrase_th = //State's vectored into symbol: "cweb-comment"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cfsm_class_phrase_th,0,0,0};
+struct S45rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cfsm_class_phrase_th S45rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S45_Cfsm_class_phrase_th = //State's vectored into symbol: "comment-overrun"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cfsm_class_phrase_th,0,0,0};
+struct S46std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S46std_Cfsm_class_phrase_th S46st_Cfsm_class_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S32_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S47_Cfsm_class_phrase_th} // shift sym: Rmaybe_directive_phrase
+ ,{578,(State*)&S48_Cfsm_class_phrase_th} // shift sym: Rdirective
+ ,{583,(State*)&S51_Cfsm_class_phrase_th} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S46pse_Cfsm_class_phrase_th = {3,(State*)&S32_Cfsm_class_phrase_th};
+struct S46rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cfsm_class_phrase_th S46rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rmaybe_more_directives_}
+ }// end of reduce table
+};
+yacco2::State S46_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmaybe_directive_phrases"
+{46
+,(Shift_entry*)&S46pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S46st_Cfsm_class_phrase_th,(Reduce_tbl*)&S46rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S32tt_Cfsm_class_phrase_th,0,0};
+struct S47rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cfsm_class_phrase_th S47rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S47_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cfsm_class_phrase_th,0,0,0};
+struct S48std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S48std_Cfsm_class_phrase_th S48st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S27_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S49_Cfsm_class_phrase_th} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S48pse_Cfsm_class_phrase_th = {3,(State*)&S27_Cfsm_class_phrase_th};
+yacco2::State S48_Cfsm_class_phrase_th = //State's vectored into symbol: "Rdirective"
+{48
+,(Shift_entry*)&S48pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S48st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S27tt_Cfsm_class_phrase_th,0,0};
+struct S49std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S49std_Cfsm_class_phrase_th S49st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S50_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S49pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S49rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cfsm_class_phrase_th S49rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S49_Cfsm_class_phrase_th = //State's vectored into symbol: "Rsyntax_code"
+{49
+,(Shift_entry*)&S49pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S49st_Cfsm_class_phrase_th,(Reduce_tbl*)&S49rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S50rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cfsm_class_phrase_th S50rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S50_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cfsm_class_phrase_th,0,0,0};
+struct S51std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S51std_Cfsm_class_phrase_th S51st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S52_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S51pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S51rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cfsm_class_phrase_th S51rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S51_Cfsm_class_phrase_th = //State's vectored into symbol: "Rcweb_k"
+{51
+,(Shift_entry*)&S51pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S51st_Cfsm_class_phrase_th,(Reduce_tbl*)&S51rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S52std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S52std_Cfsm_class_phrase_th S52st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S70_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S53_Cfsm_class_phrase_th} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::Shift_entry S52pse_Cfsm_class_phrase_th = {3,(State*)&S70_Cfsm_class_phrase_th};
+yacco2::State S52_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{52
+,(Shift_entry*)&S52pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S52st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S70tt_Cfsm_class_phrase_th,0,0};
+struct S53std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S53std_Cfsm_class_phrase_th S53st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S27_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S54_Cfsm_class_phrase_th} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S53pse_Cfsm_class_phrase_th = {3,(State*)&S27_Cfsm_class_phrase_th};
+yacco2::State S53_Cfsm_class_phrase_th = //State's vectored into symbol: "Rdirective"
+{53
+,(Shift_entry*)&S53pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S53st_Cfsm_class_phrase_th,0,(State_s_thread_tbl*)&S27tt_Cfsm_class_phrase_th,0,0};
+struct S54std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S54std_Cfsm_class_phrase_th S54st_Cfsm_class_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S16_Cfsm_class_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S55_Cfsm_class_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S54pse_Cfsm_class_phrase_th = {3,(State*)&S16_Cfsm_class_phrase_th};
+struct S54rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cfsm_class_phrase_th S54rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S54_Cfsm_class_phrase_th = //State's vectored into symbol: "Rsyntax_code"
+{54
+,(Shift_entry*)&S54pse_Cfsm_class_phrase_th,0,0,0,(Shift_tbl*)&S54st_Cfsm_class_phrase_th,(Reduce_tbl*)&S54rt_Cfsm_class_phrase_th,(State_s_thread_tbl*)&S16tt_Cfsm_class_phrase_th,0,0};
+struct S55rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cfsm_class_phrase_th S55rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S55_Cfsm_class_phrase_th = //State's vectored into symbol: "Rlint"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cfsm_class_phrase_th,0,0,0};
+struct S56rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cfsm_class_phrase_th S56rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S56_Cfsm_class_phrase_th = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cfsm_class_phrase_th,0,0,0};
+struct S57rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cfsm_class_phrase_th S57rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs12_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S57_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cfsm_class_phrase_th,0,0,0};
+struct S58std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[11];
+};
+S58std_Cfsm_class_phrase_th S58st_Cfsm_class_phrase_th = {
+ 11
+ ,
+ {// start of table
+ {0,(State*)&S59_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S60_Cfsm_class_phrase_th} // shift sym: T_user_declaration
+ ,{309,(State*)&S61_Cfsm_class_phrase_th} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S62_Cfsm_class_phrase_th} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S63_Cfsm_class_phrase_th} // shift sym: T_constructor
+ ,{312,(State*)&S64_Cfsm_class_phrase_th} // shift sym: T_destructor
+ ,{313,(State*)&S65_Cfsm_class_phrase_th} // shift sym: T_op
+ ,{314,(State*)&S66_Cfsm_class_phrase_th} // shift sym: T_failed
+ ,{315,(State*)&S67_Cfsm_class_phrase_th} // shift sym: T_user_implementation
+ ,{316,(State*)&S68_Cfsm_class_phrase_th} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S69_Cfsm_class_phrase_th} // shift sym: T_user_imp_sym
+ }// end of shift table
+};
+yacco2::Shift_entry S58qse_Cfsm_class_phrase_th = {0,(State*)&S59_Cfsm_class_phrase_th};
+yacco2::State S58_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{58
+,0,0,0,0,(Shift_tbl*)&S58st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S58qse_Cfsm_class_phrase_th
+};
+struct S59rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cfsm_class_phrase_th S59rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs11_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S59_Cfsm_class_phrase_th = //State's vectored into symbol: "|?|"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cfsm_class_phrase_th,0,0,0};
+struct S60rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cfsm_class_phrase_th S60rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs1_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S60_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-declaration"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Cfsm_class_phrase_th,0,0,0};
+struct S61rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cfsm_class_phrase_th S61rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs3_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S61_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-prefix-declaration"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cfsm_class_phrase_th,0,0,0};
+struct S62rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cfsm_class_phrase_th S62rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs4_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S62_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-suffix-declaration"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cfsm_class_phrase_th,0,0,0};
+struct S63rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cfsm_class_phrase_th S63rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs5_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S63_Cfsm_class_phrase_th = //State's vectored into symbol: "#constructor"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cfsm_class_phrase_th,0,0,0};
+struct S64rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cfsm_class_phrase_th S64rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs6_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S64_Cfsm_class_phrase_th = //State's vectored into symbol: "#destructor"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Cfsm_class_phrase_th,0,0,0};
+struct S65rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cfsm_class_phrase_th S65rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs7_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S65_Cfsm_class_phrase_th = //State's vectored into symbol: "#op"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Cfsm_class_phrase_th,0,0,0};
+struct S66rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Cfsm_class_phrase_th S66rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs8_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S66_Cfsm_class_phrase_th = //State's vectored into symbol: "#failed"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Cfsm_class_phrase_th,0,0,0};
+struct S67rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Cfsm_class_phrase_th S67rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs2_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S67_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-implementation"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Cfsm_class_phrase_th,0,0,0};
+struct S68rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cfsm_class_phrase_th S68rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs9_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S68_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-imp-tbl"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cfsm_class_phrase_th,0,0,0};
+struct S69rtd_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cfsm_class_phrase_th S69rt_Cfsm_class_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_class_phrase_th,Cfsm_class_phrase_th::rhs10_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S69_Cfsm_class_phrase_th = //State's vectored into symbol: "#user-imp-sym"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Cfsm_class_phrase_th,0,0,0};
+struct S70std_Cfsm_class_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[11];
+};
+S70std_Cfsm_class_phrase_th S70st_Cfsm_class_phrase_th = {
+ 11
+ ,
+ {// start of table
+ {0,(State*)&S33_Cfsm_class_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S34_Cfsm_class_phrase_th} // shift sym: T_user_declaration
+ ,{309,(State*)&S35_Cfsm_class_phrase_th} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S36_Cfsm_class_phrase_th} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S37_Cfsm_class_phrase_th} // shift sym: T_constructor
+ ,{312,(State*)&S38_Cfsm_class_phrase_th} // shift sym: T_destructor
+ ,{313,(State*)&S39_Cfsm_class_phrase_th} // shift sym: T_op
+ ,{314,(State*)&S40_Cfsm_class_phrase_th} // shift sym: T_failed
+ ,{315,(State*)&S41_Cfsm_class_phrase_th} // shift sym: T_user_implementation
+ ,{316,(State*)&S42_Cfsm_class_phrase_th} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S43_Cfsm_class_phrase_th} // shift sym: T_user_imp_sym
+ }// end of shift table
+};
+yacco2::Shift_entry S70qse_Cfsm_class_phrase_th = {0,(State*)&S33_Cfsm_class_phrase_th};
+yacco2::State S70_Cfsm_class_phrase_th = //State's vectored into symbol: "|||"
+{70
+,0,0,0,0,(Shift_tbl*)&S70st_Cfsm_class_phrase_th,0,0,0,(Shift_entry*)&S70qse_Cfsm_class_phrase_th
+};
diff --git a/web/yacco2/compiler/grammars/fsm_phrase.cpp b/web/yacco2/compiler/grammars/fsm_phrase.cpp
new file mode 100644
index 0000000000..1225899a45
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase.cpp
@@ -0,0 +1,104 @@
+/*
+ File: fsm_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cfsm_phrase::
+ Cfsm_phrase()
+ :yacco2::CAbs_fsm
+ ("fsm_phrase.lex"
+ ,"1.0"
+ ,"4 mar 2004"
+ ,false
+ ,"Dispatcher to parse ``fsm'' construct."
+ ,"Fri Jan 30 18:55:12 2015 "
+ ,S1_Cfsm_phrase){
+
+ }
+
+Cfsm_phrase::~Cfsm_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cfsm_phrase::failed(){
+ return false;
+ }
+ void Cfsm_phrase::op(){
+ cweb_marker__ = 0;
+
+}
+int Cfsm_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rfsm_phrase::Rfsm_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_phrase",0,Cfsm_phrase::R_Rfsm_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Cfsm_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/fsm_phrase.fsc b/web/yacco2/compiler/grammars/fsm_phrase.fsc
new file mode 100644
index 0000000000..79491edf36
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: fsm_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+transitive y
+grammar-name "fsm_phrase"
+name-space "NS_fsm_phrase"
+thread-name "Cfsm_phrase"
+monolithic y
+file-name "fsm_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_fsm_phrase_th::TH_fsm_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_fsm_phrase_th::TH_fsm_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse ``fsm'' construct."
diff --git a/web/yacco2/compiler/grammars/fsm_phrase.h b/web/yacco2/compiler/grammars/fsm_phrase.h
new file mode 100644
index 0000000000..723c3265bb
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase.h
@@ -0,0 +1,69 @@
+/*
+ File: fsm_phrase.h
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#ifndef __fsm_phrase_h__
+#define __fsm_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "fsm_phrase_th.h"
+ using namespace NS_yacco2_terminals;
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cfsm_phrase;
+namespace NS_fsm_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cfsm_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfsm_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfsm_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Cfsm_phrase();
+ ~Cfsm_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rfsm_phrase;
+struct Rphrase;
+struct Rfsm_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/fsm_phrase.lex b/web/yacco2/compiler/grammars/fsm_phrase.lex
new file mode 100644
index 0000000000..a2487caa6f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase.lex
@@ -0,0 +1,69 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: fsm_phrase.lex
+Dates: 10 Mar 2004
+Purpose: parse fsm construct
+ Monolithic grammar that launches its thread.
+ Properly handles threads and errors. Starts
+ from a procedure using another parser's
+ token stream from a specific point.
+Note: Use of ||| |?| phrase to catch other returned terminals
+ or errors. In this case, it is errors.
+ One can be selective within various contexts:
+ 1) within arbitration
+ 2) sub-rule level
+ The symbol's enumerated id is the fodder to filter on.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |fsm_phrase| grammar.\fbreak
+Dispatch grammar to parse the fsm construct.\fbreak
+Gets launched from |PROCESS_KEYWORD_FOR_SYNTAX_CODE|
+external procedure.
+@/
+fsm
+(fsm-id "fsm_phrase.lex",fsm-filename fsm_phrase,fsm-namespace NS_fsm_phrase
+,fsm-class Cfsm_phrase{
+ user-prefix-declaration
+#include "fsm_phrase_th.h"
+ using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "4 mar 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse ``fsm'' construct.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rfsm_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "fsm-phrase" NS_fsm_phrase_th::TH_fsm_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL { // thread has stop parsing with RSVP error
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_th.cpp b/web/yacco2/compiler/grammars/fsm_phrase_th.cpp
new file mode 100644
index 0000000000..da9ee53ac4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_th.cpp
@@ -0,0 +1,1011 @@
+/*
+ File: fsm_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 30;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[21] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[22] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[23] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[24] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[25] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[26] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[27] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[28] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[29] = new Per_rule_s_reuse_table();
+}
+ Cfsm_phrase_th::
+ Cfsm_phrase_th()
+ :yacco2::CAbs_fsm
+ ("fsm_phrase_th.lex"
+ ,"1.0"
+ ,"11 mar 2004"
+ ,false
+ ,"Parse grammar's fsm phrase along with its directives."
+ ,"Fri Jan 30 18:55:12 2015 "
+ ,S1_Cfsm_phrase_th){
+
+ fsm_phrase_ = 0;
+
+ }
+
+Cfsm_phrase_th::~Cfsm_phrase_th(){
+
+ for(int x = 0;x < 30;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cfsm_phrase_th::failed(){
+ return false;
+ }
+ void Cfsm_phrase_th::op(){
+ if(fsm_phrase_ != 0){
+ delete fsm_phrase_;
+ fsm_phrase_ = 0;
+ }
+ fsm_phrase_ = new T_fsm_phrase;
+ fsm_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*fsm_phrase_);
+ fsm_phrase_->phrase_tree(t);
+ if(CWEB_MARKER != 0){
+ fsm_phrase_->add_cweb_marker(CWEB_MARKER);
+ CWEB_MARKER = 0;
+ }
+
+}
+int Cfsm_phrase_th::rhs_to_rules_mapping_[73] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,9 // subrule 21 for rule 10
+ ,10 // subrule 22 for rule 11
+ ,10 // subrule 23 for rule 11
+ ,11 // subrule 24 for rule 12
+ ,11 // subrule 25 for rule 12
+ ,11 // subrule 26 for rule 12
+ ,12 // subrule 27 for rule 13
+ ,12 // subrule 28 for rule 13
+ ,12 // subrule 29 for rule 13
+ ,13 // subrule 30 for rule 14
+ ,13 // subrule 31 for rule 14
+ ,14 // subrule 32 for rule 15
+ ,14 // subrule 33 for rule 15
+ ,14 // subrule 34 for rule 15
+ ,15 // subrule 35 for rule 16
+ ,15 // subrule 36 for rule 16
+ ,16 // subrule 37 for rule 17
+ ,16 // subrule 38 for rule 17
+ ,17 // subrule 39 for rule 18
+ ,17 // subrule 40 for rule 18
+ ,17 // subrule 41 for rule 18
+ ,18 // subrule 42 for rule 19
+ ,18 // subrule 43 for rule 19
+ ,18 // subrule 44 for rule 19
+ ,19 // subrule 45 for rule 20
+ ,19 // subrule 46 for rule 20
+ ,20 // subrule 47 for rule 21
+ ,20 // subrule 48 for rule 21
+ ,20 // subrule 49 for rule 21
+ ,21 // subrule 50 for rule 22
+ ,21 // subrule 51 for rule 22
+ ,21 // subrule 52 for rule 22
+ ,22 // subrule 53 for rule 23
+ ,22 // subrule 54 for rule 23
+ ,23 // subrule 55 for rule 24
+ ,23 // subrule 56 for rule 24
+ ,23 // subrule 57 for rule 24
+ ,24 // subrule 58 for rule 25
+ ,24 // subrule 59 for rule 25
+ ,24 // subrule 60 for rule 25
+ ,25 // subrule 61 for rule 26
+ ,25 // subrule 62 for rule 26
+ ,26 // subrule 63 for rule 27
+ ,26 // subrule 64 for rule 27
+ ,26 // subrule 65 for rule 27
+ ,27 // subrule 66 for rule 28
+ ,27 // subrule 67 for rule 28
+ ,27 // subrule 68 for rule 28
+ ,28 // subrule 69 for rule 29
+ ,28 // subrule 70 for rule 29
+ ,29 // subrule 71 for rule 30
+ ,29 // subrule 72 for rule 30
+};
+Rfsm_phrase::Rfsm_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_phrase",0,Cfsm_phrase_th::R_Rfsm_phrase_,P,false,false){
+}
+
+void Rfsm_phrase::sr1(){
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->fsm_phrase_);
+ fsm->fsm_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Cfsm_phrase_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Cfsm_phrase_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Cfsm_phrase_th::R_Rparameters_,P,false,false){
+}
+
+Rfsm_id_phrase::Rfsm_id_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_id_phrase",0,Cfsm_phrase_th::R_Rfsm_id_phrase_,P,false,false){
+}
+
+Rfsm_id::Rfsm_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_id",0,Cfsm_phrase_th::R_Rfsm_id_,P,false,false){
+}
+
+void Rfsm_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_id_name::Rfsm_id_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_id_name",0,Cfsm_phrase_th::R_Rfsm_id_name_,P,false,false){
+}
+
+void Rfsm_id_name::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->fsm_id(sf->p2__);
+
+}
+
+void Rfsm_id_name::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_id_name::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_filename_phrase::Rfsm_filename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_filename_phrase",0,Cfsm_phrase_th::R_Rfsm_filename_phrase_,P,false,false){
+}
+
+void Rfsm_filename_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_filename::Rfsm_filename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_filename",0,Cfsm_phrase_th::R_Rfsm_filename_,P,false,false){
+}
+
+void Rfsm_filename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_filename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_filename_name::Rfsm_filename_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_filename_name",0,Cfsm_phrase_th::R_Rfsm_filename_name_,P,false,false){
+}
+
+void Rfsm_filename_name::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfsm_filename_name::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_filename_name::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_namespace_phrase::Rfsm_namespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_namespace_phrase",0,Cfsm_phrase_th::R_Rfsm_namespace_phrase_,P,false,false){
+}
+
+void Rfsm_namespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_namespace::Rfsm_namespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_namespace",0,Cfsm_phrase_th::R_Rfsm_namespace_,P,false,false){
+}
+
+void Rfsm_namespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_namespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_namespace_name::Rfsm_namespace_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_namespace_name",0,Cfsm_phrase_th::R_Rfsm_namespace_name_,P,false,false){
+}
+
+void Rfsm_namespace_name::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rfsm_namespace_name::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_namespace_name::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_class_phrase::Rfsm_class_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_class_phrase",0,Cfsm_phrase_th::R_Rfsm_class_phrase_,P,false,false){
+}
+
+void Rfsm_class_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_class::Rfsm_class(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_class",0,Cfsm_phrase_th::R_Rfsm_class_,P,false,false){
+}
+
+void Rfsm_class::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_class_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_class::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_class_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_class_name::Rfsm_class_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_class_name",0,Cfsm_phrase_th::R_Rfsm_class_name_,P,false,false){
+}
+
+void Rfsm_class_name::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_class_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->fsm_class_phrase(sf->p2__);
+
+}
+
+void Rfsm_class_name::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_version_phrase::Rfsm_version_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_version_phrase",0,Cfsm_phrase_th::R_Rfsm_version_phrase_,P,false,false){
+}
+
+void Rfsm_version_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_version::Rfsm_version(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_version",0,Cfsm_phrase_th::R_Rfsm_version_,P,false,false){
+}
+
+void Rfsm_version::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_version::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_version_string::Rfsm_version_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_version_string",0,Cfsm_phrase_th::R_Rfsm_version_string_,P,false,false){
+}
+
+void Rfsm_version_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->version(sf->p2__);
+
+}
+
+void Rfsm_version_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_version_string::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_date_phrase::Rfsm_date_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_date_phrase",0,Cfsm_phrase_th::R_Rfsm_date_phrase_,P,false,false){
+}
+
+void Rfsm_date_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_date::Rfsm_date(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_date",0,Cfsm_phrase_th::R_Rfsm_date_,P,false,false){
+}
+
+void Rfsm_date::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_date::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_date_string::Rfsm_date_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_date_string",0,Cfsm_phrase_th::R_Rfsm_date_string_,P,false,false){
+}
+
+void Rfsm_date_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->date(sf->p2__);
+
+}
+
+void Rfsm_date_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_date_string::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_debug_phrase::Rfsm_debug_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_debug_phrase",0,Cfsm_phrase_th::R_Rfsm_debug_phrase_,P,false,false){
+}
+
+void Rfsm_debug_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_debug::Rfsm_debug(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_debug",0,Cfsm_phrase_th::R_Rfsm_debug_,P,false,false){
+}
+
+void Rfsm_debug::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_debug::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_debug_string::Rfsm_debug_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_debug_string",0,Cfsm_phrase_th::R_Rfsm_debug_string_,P,false,false){
+}
+
+void Rfsm_debug_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ std::string x(sf->p2__->c_string()->c_str());
+ std::string t("true");
+ if(x == t){
+ fsm->fsm_phrase_->debug(sf->p2__);
+ return;
+ }
+ std::string f("false");
+ if(x == f){
+ fsm->fsm_phrase_->debug(sf->p2__);
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_fsm_debug_string_not_true_or_false;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_debug_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_debug_string::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_comments_phrase::Rfsm_comments_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments_phrase",0,Cfsm_phrase_th::R_Rfsm_comments_phrase_,P,false,false){
+}
+
+void Rfsm_comments_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_comments::Rfsm_comments(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments",0,Cfsm_phrase_th::R_Rfsm_comments_,P,false,false){
+}
+
+void Rfsm_comments::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_comments::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfsm_comments_string::Rfsm_comments_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_comments_string",0,Cfsm_phrase_th::R_Rfsm_comments_string_,P,false,false){
+}
+
+void Rfsm_comments_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->comment(sf->p2__);
+
+}
+
+void Rfsm_comments_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfsm_comments_string::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cfsm_phrase_th::R_Rlint_,P,false,false){
+}
+
+Rlint_epi::Rlint_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint_epi",0,Cfsm_phrase_th::R_Rlint_epi_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_th.fsc b/web/yacco2/compiler/grammars/fsm_phrase_th.fsc
new file mode 100644
index 0000000000..02f8d3d152
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_th.fsc
@@ -0,0 +1,26 @@
+/*
+ File: fsm_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+transitive y
+grammar-name "fsm_phrase_th"
+name-space "NS_fsm_phrase_th"
+thread-name "TH_fsm_phrase_th"
+monolithic n
+file-name "fsm_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_c_string::TH_c_string
+ NS_fsm_class_phrase_th::TH_fsm_class_phrase_th
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+end-list-of-used-threads
+fsm-comments
+"Parse grammar's fsm phrase along with its directives."
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_th.h b/web/yacco2/compiler/grammars/fsm_phrase_th.h
new file mode 100644
index 0000000000..752b2b4e38
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_th.h
@@ -0,0 +1,388 @@
+/*
+ File: fsm_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#ifndef __fsm_phrase_th_h__
+#define __fsm_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "fsm_class_phrase_th.h"
+#include "o2_externs.h"
+
+extern yacco2::Thread_entry ITH_fsm_phrase_th;
+
+extern yacco2::State S1_Cfsm_phrase_th;
+namespace NS_fsm_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_fsm_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_fsm_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[30];
+};
+class Cfsm_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rfsm_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rfsm_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfsm_id_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfsm_id_phrase_ = 7
+ ,R_Rfsm_id_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfsm_id_ = 8
+ ,rhs2_Rfsm_id_ = 9
+ ,rhs3_Rfsm_id_ = 10
+ ,R_Rfsm_id_name_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfsm_id_name_ = 11
+ ,rhs2_Rfsm_id_name_ = 12
+ ,rhs3_Rfsm_id_name_ = 13
+ ,R_Rfsm_filename_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rfsm_filename_phrase_ = 14
+ ,rhs2_Rfsm_filename_phrase_ = 15
+ ,R_Rfsm_filename_ = 577//start_of_rule_list + 16
+ ,rhs1_Rfsm_filename_ = 16
+ ,rhs2_Rfsm_filename_ = 17
+ ,rhs3_Rfsm_filename_ = 18
+ ,R_Rfsm_filename_name_ = 578//start_of_rule_list + 18
+ ,rhs1_Rfsm_filename_name_ = 19
+ ,rhs2_Rfsm_filename_name_ = 20
+ ,rhs3_Rfsm_filename_name_ = 21
+ ,R_Rfsm_namespace_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rfsm_namespace_phrase_ = 22
+ ,rhs2_Rfsm_namespace_phrase_ = 23
+ ,R_Rfsm_namespace_ = 580//start_of_rule_list + 22
+ ,rhs1_Rfsm_namespace_ = 24
+ ,rhs2_Rfsm_namespace_ = 25
+ ,rhs3_Rfsm_namespace_ = 26
+ ,R_Rfsm_namespace_name_ = 581//start_of_rule_list + 24
+ ,rhs1_Rfsm_namespace_name_ = 27
+ ,rhs2_Rfsm_namespace_name_ = 28
+ ,rhs3_Rfsm_namespace_name_ = 29
+ ,R_Rfsm_class_phrase_ = 582//start_of_rule_list + 26
+ ,rhs1_Rfsm_class_phrase_ = 30
+ ,rhs2_Rfsm_class_phrase_ = 31
+ ,R_Rfsm_class_ = 583//start_of_rule_list + 28
+ ,rhs1_Rfsm_class_ = 32
+ ,rhs2_Rfsm_class_ = 33
+ ,rhs3_Rfsm_class_ = 34
+ ,R_Rfsm_class_name_ = 584//start_of_rule_list + 30
+ ,rhs1_Rfsm_class_name_ = 35
+ ,rhs2_Rfsm_class_name_ = 36
+ ,R_Rfsm_version_phrase_ = 585//start_of_rule_list + 32
+ ,rhs1_Rfsm_version_phrase_ = 37
+ ,rhs2_Rfsm_version_phrase_ = 38
+ ,R_Rfsm_version_ = 586//start_of_rule_list + 34
+ ,rhs1_Rfsm_version_ = 39
+ ,rhs2_Rfsm_version_ = 40
+ ,rhs3_Rfsm_version_ = 41
+ ,R_Rfsm_version_string_ = 587//start_of_rule_list + 36
+ ,rhs1_Rfsm_version_string_ = 42
+ ,rhs2_Rfsm_version_string_ = 43
+ ,rhs3_Rfsm_version_string_ = 44
+ ,R_Rfsm_date_phrase_ = 588//start_of_rule_list + 38
+ ,rhs1_Rfsm_date_phrase_ = 45
+ ,rhs2_Rfsm_date_phrase_ = 46
+ ,R_Rfsm_date_ = 589//start_of_rule_list + 40
+ ,rhs1_Rfsm_date_ = 47
+ ,rhs2_Rfsm_date_ = 48
+ ,rhs3_Rfsm_date_ = 49
+ ,R_Rfsm_date_string_ = 590//start_of_rule_list + 42
+ ,rhs1_Rfsm_date_string_ = 50
+ ,rhs2_Rfsm_date_string_ = 51
+ ,rhs3_Rfsm_date_string_ = 52
+ ,R_Rfsm_debug_phrase_ = 591//start_of_rule_list + 44
+ ,rhs1_Rfsm_debug_phrase_ = 53
+ ,rhs2_Rfsm_debug_phrase_ = 54
+ ,R_Rfsm_debug_ = 592//start_of_rule_list + 46
+ ,rhs1_Rfsm_debug_ = 55
+ ,rhs2_Rfsm_debug_ = 56
+ ,rhs3_Rfsm_debug_ = 57
+ ,R_Rfsm_debug_string_ = 593//start_of_rule_list + 48
+ ,rhs1_Rfsm_debug_string_ = 58
+ ,rhs2_Rfsm_debug_string_ = 59
+ ,rhs3_Rfsm_debug_string_ = 60
+ ,R_Rfsm_comments_phrase_ = 594//start_of_rule_list + 50
+ ,rhs1_Rfsm_comments_phrase_ = 61
+ ,rhs2_Rfsm_comments_phrase_ = 62
+ ,R_Rfsm_comments_ = 595//start_of_rule_list + 52
+ ,rhs1_Rfsm_comments_ = 63
+ ,rhs2_Rfsm_comments_ = 64
+ ,rhs3_Rfsm_comments_ = 65
+ ,R_Rfsm_comments_string_ = 596//start_of_rule_list + 54
+ ,rhs1_Rfsm_comments_string_ = 66
+ ,rhs2_Rfsm_comments_string_ = 67
+ ,rhs3_Rfsm_comments_string_ = 68
+ ,R_Rlint_ = 597//start_of_rule_list + 56
+ ,rhs1_Rlint_ = 69
+ ,rhs2_Rlint_ = 70
+ ,R_Rlint_epi_ = 598//start_of_rule_list + 58
+ ,rhs1_Rlint_epi_ = 71
+ ,rhs2_Rlint_epi_ = 72
+ };
+ //no of la sets = 8
+ //no of states = 139
+ Cfsm_phrase_th();
+ ~Cfsm_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[73];
+
+ public:
+ T_fsm_phrase* fsm_phrase_;
+
+ };
+struct Rfsm_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfsm_id_phrase;
+struct Rfsm_id;
+struct Rfsm_id_name;
+struct Rfsm_filename_phrase;
+struct Rfsm_filename;
+struct Rfsm_filename_name;
+struct Rfsm_namespace_phrase;
+struct Rfsm_namespace;
+struct Rfsm_namespace_name;
+struct Rfsm_class_phrase;
+struct Rfsm_class;
+struct Rfsm_class_name;
+struct Rfsm_version_phrase;
+struct Rfsm_version;
+struct Rfsm_version_string;
+struct Rfsm_date_phrase;
+struct Rfsm_date;
+struct Rfsm_date_string;
+struct Rfsm_debug_phrase;
+struct Rfsm_debug;
+struct Rfsm_debug_string;
+struct Rfsm_comments_phrase;
+struct Rfsm_comments;
+struct Rfsm_comments_string;
+struct Rlint;
+struct Rlint_epi;
+struct Rfsm_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfsm_id_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_id_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfsm_id:public yacco2::CAbs_lr1_sym {
+ Rfsm_id(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_id_name:public yacco2::CAbs_lr1_sym {
+ Rfsm_id_name(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_filename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_filename_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_filename:public yacco2::CAbs_lr1_sym {
+ Rfsm_filename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_filename_name:public yacco2::CAbs_lr1_sym {
+ Rfsm_filename_name(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_namespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_namespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_namespace:public yacco2::CAbs_lr1_sym {
+ Rfsm_namespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_namespace_name:public yacco2::CAbs_lr1_sym {
+ Rfsm_namespace_name(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_class_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_class_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_class:public yacco2::CAbs_lr1_sym {
+ Rfsm_class(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_class_name:public yacco2::CAbs_lr1_sym {
+ Rfsm_class_name(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rfsm_version_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_version_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_version:public yacco2::CAbs_lr1_sym {
+ Rfsm_version(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_version_string:public yacco2::CAbs_lr1_sym {
+ Rfsm_version_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_date_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_date_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_date:public yacco2::CAbs_lr1_sym {
+ Rfsm_date(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_date_string:public yacco2::CAbs_lr1_sym {
+ Rfsm_date_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_debug_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_debug_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_debug:public yacco2::CAbs_lr1_sym {
+ Rfsm_debug(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_debug_string:public yacco2::CAbs_lr1_sym {
+ Rfsm_debug_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_comments_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rfsm_comments:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfsm_comments_string:public yacco2::CAbs_lr1_sym {
+ Rfsm_comments_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rlint_epi:public yacco2::CAbs_lr1_sym {
+ Rlint_epi(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_th.lex b/web/yacco2/compiler/grammars/fsm_phrase_th.lex
new file mode 100644
index 0000000000..4c9e3ae6c9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_th.lex
@@ -0,0 +1,580 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: fsm_phrase_th.lex
+Dates: 11 Mar 2004
+Purpose: parse fsm phrase
+Output: fsm-phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |fsm_phrase_th| Thread.\fbreak
+Parse fsm phrase along with its directives.\fbreak
+\fbreak
+Example of a fsm construct to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/fsm.txt"}
+
+@/
+fsm
+(fsm-id "fsm_phrase_th.lex",fsm-filename fsm_phrase_th,fsm-namespace NS_fsm_phrase_th
+,fsm-class Cfsm_phrase_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "fsm_class_phrase_th.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ T_fsm_phrase* fsm_phrase_;
+ ***
+ constructor
+ fsm_phrase_ = 0;
+ ***
+ op
+ if(fsm_phrase_ != 0){
+ delete fsm_phrase_;
+ fsm_phrase_ = 0;
+ }
+ fsm_phrase_ = new T_fsm_phrase;
+ fsm_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*fsm_phrase_);
+ fsm_phrase_->phrase_tree(t);
+ if(CWEB_MARKER != 0){
+ fsm_phrase_->add_cweb_marker(CWEB_MARKER);
+ CWEB_MARKER = 0;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "11 mar 2004",fsm-debug "false"
+,fsm-comments "Parse grammar's fsm phrase along with its directives.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_fsm_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rfsm_phrase (){
+ -> Rlint_epi
+ Ropen_par
+ Rparameters
+ Rclose_par
+ Rlint {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->fsm_phrase_);
+ fsm->fsm_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rlint
+ Rfsm_id_phrase Rlint
+ Rfsm_filename_phrase Rlint
+ Rfsm_namespace_phrase Rlint
+ Rfsm_class_phrase Rlint
+ Rfsm_version_phrase Rlint
+ Rfsm_date_phrase Rlint
+ Rfsm_debug_phrase Rlint
+ Rfsm_comments_phrase Rlint
+}
+
+Rfsm_id_phrase (){
+ -> Rfsm_id Rlint Rfsm_id_name
+}
+
+Rfsm_id (){
+ -> ||| "#fsm-id" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_id_name (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->fsm_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_id_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_filename_phrase (){
+ -> "," Rlint Rfsm_filename Rlint Rfsm_filename_name
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_filename (){
+ -> ||| "#fsm-filename" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_filename_name (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ /@
+Determine if file name properly formed as the
+filename witout the extension
+is used in generating the emitted files and
+the header guard signal.
+ @/
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_namespace_phrase (){
+ -> "," Rlint Rfsm_namespace Rlint Rfsm_namespace_name
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_namespace (){
+ -> ||| "#fsm-namespace" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_namespace_name (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_class_phrase (){
+ -> "," Rlint Rfsm_class Rlint Rfsm_class_name
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_class (){
+ -> ||| "#fsm-class" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_class_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_class_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_class_name (){
+ -> ||| "fsm-class-phrase" NS_fsm_class_phrase_th::TH_fsm_class_phrase_th {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->fsm_class_phrase(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {// catcher of what?
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_version_phrase (){
+ -> "," Rlint Rfsm_version Rlint Rfsm_version_string
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_version (){
+ -> ||| "#fsm-version" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_version_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->version(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_version_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_date_phrase (){
+ -> "," Rlint Rfsm_date Rlint Rfsm_date_string
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_date (){
+ -> ||| "#fsm-date" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_date_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->date(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_date_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_debug_phrase (){
+ -> "," Rlint Rfsm_debug Rlint Rfsm_debug_string
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_debug (){
+ -> ||| "#fsm-debug" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_debug_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ std::string x(sf->p2__->c_string()->c_str());
+ std::string t("true");
+ if(x == t){
+ fsm->fsm_phrase_->debug(sf->p2__);
+ return;
+ }
+ std::string f("false");
+ if(x == f){
+ fsm->fsm_phrase_->debug(sf->p2__);
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_fsm_debug_string_not_true_or_false;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_debug_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_comments_phrase (){
+ -> "," Rlint Rfsm_comments Rlint Rfsm_comments_string
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_comments (){
+ -> ||| "#fsm-comments" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfsm_comments_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cfsm_phrase_th* fsm = (Cfsm_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->fsm_phrase_->comment(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_fsm_comments_string;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ -> // force reduce and let other rules determine possible error
+}
+Rlint_epi (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ -> // make sure thread's first set sees (
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_thsym.cpp b/web/yacco2/compiler/grammars/fsm_phrase_thsym.cpp
new file mode 100644
index 0000000000..fd997d6b44
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_thsym.cpp
@@ -0,0 +1,1105 @@
+/*
+ File: fsm_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_fsm_phrase_th::TH_fsm_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_fsm_phrase_th;
+ NS_fsm_phrase_th::Cfsm_phrase_th Cfsm_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cfsm_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_fsm_phrase_th::PROC_TH_fsm_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_fsm_phrase_th";
+ static bool one_time(false);
+ static NS_fsm_phrase_th::Cfsm_phrase_th* NS_fsm_phrase_th_Cfsm_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_fsm_phrase_th_Cfsm_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_fsm_phrase_th_Cfsm_phrase_th_ = new NS_fsm_phrase_th::Cfsm_phrase_th();// parallel-parser's fsm table
+ NS_fsm_phrase_th_Cfsm_phrase_th_parser = new Parser(*NS_fsm_phrase_th_Cfsm_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_fsm_phrase_th_Cfsm_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cfsm_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfsm_phrase_:{
+ Rfsm_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 17;
+
+
+ return;}
+ case rhs1_Rfsm_id_phrase_:{
+ Rfsm_id_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfsm_id_:{
+ Rfsm_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_id_:{
+ Rfsm_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_id_:{
+ Rfsm_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_id_name_:{
+ Rfsm_id_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_id_name_:{
+ Rfsm_id_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_id_name_:{
+ Rfsm_id_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_id_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_id_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_filename_phrase_:{
+ Rfsm_filename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_filename_phrase_:{
+ Rfsm_filename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_filename_:{
+ Rfsm_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_filename_:{
+ Rfsm_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_filename_:{
+ Rfsm_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_filename_name_:{
+ Rfsm_filename_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_filename_name_:{
+ Rfsm_filename_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_filename_name_:{
+ Rfsm_filename_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_filename_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_filename_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_namespace_phrase_:{
+ Rfsm_namespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_namespace_phrase_:{
+ Rfsm_namespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_namespace_:{
+ Rfsm_namespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_namespace_:{
+ Rfsm_namespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_namespace_:{
+ Rfsm_namespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_namespace_name_:{
+ Rfsm_namespace_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_namespace_name_:{
+ Rfsm_namespace_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_namespace_name_:{
+ Rfsm_namespace_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_namespace_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_namespace_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_class_phrase_:{
+ Rfsm_class_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_class_phrase_:{
+ Rfsm_class_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_class_:{
+ Rfsm_class* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_class_:{
+ Rfsm_class* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_class_:{
+ Rfsm_class* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_class_name_:{
+ Rfsm_class_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_class_name_:{
+ Rfsm_class_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_class_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_class_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_version_phrase_:{
+ Rfsm_version_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_version_phrase_:{
+ Rfsm_version_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_version_:{
+ Rfsm_version* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_version_:{
+ Rfsm_version* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_version_:{
+ Rfsm_version* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_version_string_:{
+ Rfsm_version_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_version_string_:{
+ Rfsm_version_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_version_string_:{
+ Rfsm_version_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_version_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_version_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_date_phrase_:{
+ Rfsm_date_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_date_phrase_:{
+ Rfsm_date_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_date_:{
+ Rfsm_date* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_date_:{
+ Rfsm_date* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_date_:{
+ Rfsm_date* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_date_string_:{
+ Rfsm_date_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_date_string_:{
+ Rfsm_date_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_date_string_:{
+ Rfsm_date_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_date_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_date_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_debug_phrase_:{
+ Rfsm_debug_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_debug_phrase_:{
+ Rfsm_debug_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_debug_:{
+ Rfsm_debug* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_debug_:{
+ Rfsm_debug* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_debug_:{
+ Rfsm_debug* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_debug_string_:{
+ Rfsm_debug_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_debug_string_:{
+ Rfsm_debug_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_debug_string_:{
+ Rfsm_debug_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_debug_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_debug_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_comments_phrase_:{
+ Rfsm_comments_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rfsm_comments_phrase_:{
+ Rfsm_comments_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rfsm_comments_:{
+ Rfsm_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfsm_comments_:{
+ Rfsm_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_comments_:{
+ Rfsm_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfsm_comments_string_:{
+ Rfsm_comments_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfsm_comments_string_:{
+ Rfsm_comments_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfsm_comments_string_:{
+ Rfsm_comments_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_comments_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_comments_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rlint_epi_:{
+ Rlint_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_epi_:{
+ Rlint_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/fsm_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/fsm_phrase_thtbl.cpp
new file mode 100644
index 0000000000..74e40a1407
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrase_thtbl.cpp
@@ -0,0 +1,2869 @@
+/*
+ File: fsm_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase_th;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// raw_open_bracket
+yacco2::UCHAR LA1_Cfsm_phrase_th[] ={
+2
+,0,1
+,6,1
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cfsm_phrase_th[] ={
+1
+,0,17
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Cfsm_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// raw_comma
+yacco2::UCHAR LA4_Cfsm_phrase_th[] ={
+2
+,0,1
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA5_Cfsm_phrase_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA6_Cfsm_phrase_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_comma
+yacco2::UCHAR LA7_Cfsm_phrase_th[] ={
+2
+,0,17
+,6,16
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA8_Cfsm_phrase_th[] ={
+1
+,0,16
+};
+extern yacco2::State S1_Cfsm_phrase_th;
+extern yacco2::State S2_Cfsm_phrase_th;
+struct S2ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Cfsm_phrase_th S2tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Cfsm_phrase_th;
+extern yacco2::State S4_Cfsm_phrase_th;
+extern yacco2::State S5_Cfsm_phrase_th;
+extern yacco2::State S6_Cfsm_phrase_th;
+extern yacco2::State S7_Cfsm_phrase_th;
+extern yacco2::State S8_Cfsm_phrase_th;
+extern yacco2::State S9_Cfsm_phrase_th;
+extern yacco2::State S10_Cfsm_phrase_th;
+struct S10ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S10ttd_Cfsm_phrase_th S10tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S11_Cfsm_phrase_th;
+extern yacco2::State S12_Cfsm_phrase_th;
+extern yacco2::State S13_Cfsm_phrase_th;
+extern yacco2::State S14_Cfsm_phrase_th;
+extern yacco2::State S15_Cfsm_phrase_th;
+extern yacco2::State S16_Cfsm_phrase_th;
+extern yacco2::State S17_Cfsm_phrase_th;
+extern yacco2::State S18_Cfsm_phrase_th;
+extern yacco2::State S19_Cfsm_phrase_th;
+extern yacco2::State S20_Cfsm_phrase_th;
+extern yacco2::State S21_Cfsm_phrase_th;
+extern yacco2::State S22_Cfsm_phrase_th;
+extern yacco2::State S23_Cfsm_phrase_th;
+extern yacco2::State S24_Cfsm_phrase_th;
+extern yacco2::State S25_Cfsm_phrase_th;
+extern yacco2::State S26_Cfsm_phrase_th;
+extern yacco2::State S27_Cfsm_phrase_th;
+extern yacco2::State S28_Cfsm_phrase_th;
+extern yacco2::State S29_Cfsm_phrase_th;
+extern yacco2::State S30_Cfsm_phrase_th;
+extern yacco2::State S31_Cfsm_phrase_th;
+extern yacco2::State S32_Cfsm_phrase_th;
+extern yacco2::State S33_Cfsm_phrase_th;
+extern yacco2::State S34_Cfsm_phrase_th;
+extern yacco2::State S35_Cfsm_phrase_th;
+extern yacco2::State S36_Cfsm_phrase_th;
+struct S36ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S36ttd_Cfsm_phrase_th S36tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S37_Cfsm_phrase_th;
+extern yacco2::State S38_Cfsm_phrase_th;
+extern yacco2::State S39_Cfsm_phrase_th;
+extern yacco2::State S40_Cfsm_phrase_th;
+extern yacco2::State S41_Cfsm_phrase_th;
+extern yacco2::State S42_Cfsm_phrase_th;
+extern yacco2::State S43_Cfsm_phrase_th;
+struct S43ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S43ttd_Cfsm_phrase_th S43tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S44_Cfsm_phrase_th;
+extern yacco2::State S45_Cfsm_phrase_th;
+extern yacco2::State S46_Cfsm_phrase_th;
+extern yacco2::State S47_Cfsm_phrase_th;
+extern yacco2::State S48_Cfsm_phrase_th;
+extern yacco2::State S49_Cfsm_phrase_th;
+struct S49ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S49ttd_Cfsm_phrase_th S49tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S50_Cfsm_phrase_th;
+extern yacco2::State S51_Cfsm_phrase_th;
+extern yacco2::State S52_Cfsm_phrase_th;
+extern yacco2::State S53_Cfsm_phrase_th;
+extern yacco2::State S54_Cfsm_phrase_th;
+extern yacco2::State S55_Cfsm_phrase_th;
+extern yacco2::State S56_Cfsm_phrase_th;
+extern yacco2::State S57_Cfsm_phrase_th;
+extern yacco2::State S58_Cfsm_phrase_th;
+extern yacco2::State S59_Cfsm_phrase_th;
+struct S59ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S59ttd_Cfsm_phrase_th S59tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S60_Cfsm_phrase_th;
+extern yacco2::State S61_Cfsm_phrase_th;
+extern yacco2::State S62_Cfsm_phrase_th;
+extern yacco2::State S63_Cfsm_phrase_th;
+extern yacco2::State S64_Cfsm_phrase_th;
+extern yacco2::State S65_Cfsm_phrase_th;
+extern yacco2::State S66_Cfsm_phrase_th;
+extern yacco2::State S67_Cfsm_phrase_th;
+extern yacco2::State S68_Cfsm_phrase_th;
+extern yacco2::State S69_Cfsm_phrase_th;
+struct S69ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S69ttd_Cfsm_phrase_th S69tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S70_Cfsm_phrase_th;
+extern yacco2::State S71_Cfsm_phrase_th;
+extern yacco2::State S72_Cfsm_phrase_th;
+extern yacco2::State S73_Cfsm_phrase_th;
+extern yacco2::State S74_Cfsm_phrase_th;
+extern yacco2::State S75_Cfsm_phrase_th;
+extern yacco2::State S76_Cfsm_phrase_th;
+extern yacco2::State S77_Cfsm_phrase_th;
+extern yacco2::State S78_Cfsm_phrase_th;
+struct S78ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S78ttd_Cfsm_phrase_th S78tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_fsm_class_phrase_th
+};
+extern yacco2::State S79_Cfsm_phrase_th;
+extern yacco2::State S80_Cfsm_phrase_th;
+extern yacco2::State S81_Cfsm_phrase_th;
+extern yacco2::State S82_Cfsm_phrase_th;
+extern yacco2::State S83_Cfsm_phrase_th;
+extern yacco2::State S84_Cfsm_phrase_th;
+extern yacco2::State S85_Cfsm_phrase_th;
+extern yacco2::State S86_Cfsm_phrase_th;
+extern yacco2::State S87_Cfsm_phrase_th;
+extern yacco2::State S88_Cfsm_phrase_th;
+struct S88ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S88ttd_Cfsm_phrase_th S88tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S89_Cfsm_phrase_th;
+extern yacco2::State S90_Cfsm_phrase_th;
+extern yacco2::State S91_Cfsm_phrase_th;
+extern yacco2::State S92_Cfsm_phrase_th;
+extern yacco2::State S93_Cfsm_phrase_th;
+extern yacco2::State S94_Cfsm_phrase_th;
+extern yacco2::State S95_Cfsm_phrase_th;
+extern yacco2::State S96_Cfsm_phrase_th;
+extern yacco2::State S97_Cfsm_phrase_th;
+extern yacco2::State S98_Cfsm_phrase_th;
+struct S98ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S98ttd_Cfsm_phrase_th S98tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S99_Cfsm_phrase_th;
+extern yacco2::State S100_Cfsm_phrase_th;
+extern yacco2::State S101_Cfsm_phrase_th;
+extern yacco2::State S102_Cfsm_phrase_th;
+extern yacco2::State S103_Cfsm_phrase_th;
+extern yacco2::State S104_Cfsm_phrase_th;
+extern yacco2::State S105_Cfsm_phrase_th;
+extern yacco2::State S106_Cfsm_phrase_th;
+extern yacco2::State S107_Cfsm_phrase_th;
+extern yacco2::State S108_Cfsm_phrase_th;
+struct S108ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S108ttd_Cfsm_phrase_th S108tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S109_Cfsm_phrase_th;
+extern yacco2::State S110_Cfsm_phrase_th;
+extern yacco2::State S111_Cfsm_phrase_th;
+extern yacco2::State S112_Cfsm_phrase_th;
+extern yacco2::State S113_Cfsm_phrase_th;
+struct S113ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S113ttd_Cfsm_phrase_th S113tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S114_Cfsm_phrase_th;
+extern yacco2::State S115_Cfsm_phrase_th;
+extern yacco2::State S116_Cfsm_phrase_th;
+extern yacco2::State S117_Cfsm_phrase_th;
+struct S117ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S117ttd_Cfsm_phrase_th S117tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S118_Cfsm_phrase_th;
+extern yacco2::State S119_Cfsm_phrase_th;
+extern yacco2::State S120_Cfsm_phrase_th;
+extern yacco2::State S121_Cfsm_phrase_th;
+struct S121ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S121ttd_Cfsm_phrase_th S121tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S122_Cfsm_phrase_th;
+extern yacco2::State S123_Cfsm_phrase_th;
+extern yacco2::State S124_Cfsm_phrase_th;
+extern yacco2::State S125_Cfsm_phrase_th;
+struct S125ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S125ttd_Cfsm_phrase_th S125tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S126_Cfsm_phrase_th;
+extern yacco2::State S127_Cfsm_phrase_th;
+extern yacco2::State S128_Cfsm_phrase_th;
+extern yacco2::State S129_Cfsm_phrase_th;
+struct S129ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S129ttd_Cfsm_phrase_th S129tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S130_Cfsm_phrase_th;
+extern yacco2::State S131_Cfsm_phrase_th;
+extern yacco2::State S132_Cfsm_phrase_th;
+extern yacco2::State S133_Cfsm_phrase_th;
+struct S133ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S133ttd_Cfsm_phrase_th S133tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S134_Cfsm_phrase_th;
+extern yacco2::State S135_Cfsm_phrase_th;
+extern yacco2::State S136_Cfsm_phrase_th;
+extern yacco2::State S137_Cfsm_phrase_th;
+struct S137ttd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S137ttd_Cfsm_phrase_th S137tt_Cfsm_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S138_Cfsm_phrase_th;
+extern yacco2::State S139_Cfsm_phrase_th;
+struct S1std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cfsm_phrase_th S1st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cfsm_phrase_th} // accept sym: Rfsm_phrase
+ ,{598,(State*)&S4_Cfsm_phrase_th} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cfsm_phrase_th = {3,(State*)&S2_Cfsm_phrase_th};
+struct S1rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cfsm_phrase_th S1rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_epi_}
+ }// end of reduce table
+};
+yacco2::State S1_Cfsm_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S1st_Cfsm_phrase_th,(Reduce_tbl*)&S1rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S2tt_Cfsm_phrase_th,0,0};
+struct S2std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cfsm_phrase_th S2st_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Cfsm_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cfsm_phrase_th,0,0,0,0};
+struct S3rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cfsm_phrase_th S3rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rlint_epi_}
+ }// end of reduce table
+};
+yacco2::State S3_Cfsm_phrase_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cfsm_phrase_th,0,0,0};
+struct S4std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cfsm_phrase_th S4st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S13_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S14_Cfsm_phrase_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_Cfsm_phrase_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Cfsm_phrase_th = {0,(State*)&S13_Cfsm_phrase_th};
+yacco2::State S4_Cfsm_phrase_th = //State's vectored into symbol: "Rlint_epi"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S4qse_Cfsm_phrase_th
+};
+struct S5std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Cfsm_phrase_th S5st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_Cfsm_phrase_th} // shift sym: Rparameters
+ ,{597,(State*)&S15_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S5rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cfsm_phrase_th S5rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Cfsm_phrase_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S5st_Cfsm_phrase_th,(Reduce_tbl*)&S5rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S6std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cfsm_phrase_th S6st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S7_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S8_Cfsm_phrase_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S9_Cfsm_phrase_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Cfsm_phrase_th = {0,(State*)&S7_Cfsm_phrase_th};
+yacco2::State S6_Cfsm_phrase_th = //State's vectored into symbol: "Rparameters"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S6qse_Cfsm_phrase_th
+};
+struct S7rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cfsm_phrase_th S7rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S7_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cfsm_phrase_th,0,0,0};
+struct S8rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cfsm_phrase_th S8rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S8_Cfsm_phrase_th = //State's vectored into symbol: ")"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cfsm_phrase_th,0,0,0};
+struct S9std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Cfsm_phrase_th S9st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S12_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S9rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cfsm_phrase_th S9rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Cfsm_phrase_th = //State's vectored into symbol: "Rclose_par"
+{9
+,(Shift_entry*)&S9pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S9st_Cfsm_phrase_th,(Reduce_tbl*)&S9rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S10std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cfsm_phrase_th S10st_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S11_Cfsm_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S10_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cfsm_phrase_th,0,0,0,0};
+struct S11rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cfsm_phrase_th S11rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Cfsm_phrase_th = //State's vectored into symbol: "lint"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cfsm_phrase_th,0,0,0};
+struct S12rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cfsm_phrase_th S12rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_phrase_}
+ }// end of reduce table
+};
+yacco2::State S12_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cfsm_phrase_th,0,0,0};
+struct S13rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cfsm_phrase_th S13rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S13_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cfsm_phrase_th,0,0,0};
+struct S14rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cfsm_phrase_th S14rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S14_Cfsm_phrase_th = //State's vectored into symbol: "("
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cfsm_phrase_th,0,0,0};
+struct S15std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S15std_Cfsm_phrase_th S15st_Cfsm_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S42_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S43_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S16_Cfsm_phrase_th} // shift sym: Rfsm_id_phrase
+ ,{574,(State*)&S46_Cfsm_phrase_th} // shift sym: Rfsm_id
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Cfsm_phrase_th = {3,(State*)&S43_Cfsm_phrase_th};
+yacco2::Shift_entry S15qse_Cfsm_phrase_th = {0,(State*)&S42_Cfsm_phrase_th};
+yacco2::State S15_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{15
+,(Shift_entry*)&S15pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S15st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S43tt_Cfsm_phrase_th,0,(Shift_entry*)&S15qse_Cfsm_phrase_th
+};
+struct S16std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_Cfsm_phrase_th S16st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S17_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S16rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cfsm_phrase_th S16rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S16_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_id_phrase"
+{16
+,(Shift_entry*)&S16pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S16st_Cfsm_phrase_th,(Reduce_tbl*)&S16rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S17std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Cfsm_phrase_th S17st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S53_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S54_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{576,(State*)&S18_Cfsm_phrase_th} // shift sym: Rfsm_filename_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S17qse_Cfsm_phrase_th = {0,(State*)&S53_Cfsm_phrase_th};
+yacco2::State S17_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S17qse_Cfsm_phrase_th
+};
+struct S18std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S18std_Cfsm_phrase_th S18st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S19_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S18rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cfsm_phrase_th S18rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S18_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_filename_phrase"
+{18
+,(Shift_entry*)&S18pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S18st_Cfsm_phrase_th,(Reduce_tbl*)&S18rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S19std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S19std_Cfsm_phrase_th S19st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S63_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S64_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{579,(State*)&S20_Cfsm_phrase_th} // shift sym: Rfsm_namespace_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S19qse_Cfsm_phrase_th = {0,(State*)&S63_Cfsm_phrase_th};
+yacco2::State S19_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S19qse_Cfsm_phrase_th
+};
+struct S20std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S20std_Cfsm_phrase_th S20st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S21_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S20rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cfsm_phrase_th S20rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S20_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_namespace_phrase"
+{20
+,(Shift_entry*)&S20pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S20st_Cfsm_phrase_th,(Reduce_tbl*)&S20rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S21std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S21std_Cfsm_phrase_th S21st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S73_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S74_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{582,(State*)&S22_Cfsm_phrase_th} // shift sym: Rfsm_class_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S21qse_Cfsm_phrase_th = {0,(State*)&S73_Cfsm_phrase_th};
+yacco2::State S21_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S21qse_Cfsm_phrase_th
+};
+struct S22std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S22std_Cfsm_phrase_th S22st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S23_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S22pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S22rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cfsm_phrase_th S22rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S22_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_class_phrase"
+{22
+,(Shift_entry*)&S22pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S22st_Cfsm_phrase_th,(Reduce_tbl*)&S22rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S23std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S23std_Cfsm_phrase_th S23st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S82_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S83_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{585,(State*)&S24_Cfsm_phrase_th} // shift sym: Rfsm_version_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S23qse_Cfsm_phrase_th = {0,(State*)&S82_Cfsm_phrase_th};
+yacco2::State S23_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S23qse_Cfsm_phrase_th
+};
+struct S24std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Cfsm_phrase_th S24st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S25_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S24rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cfsm_phrase_th S24rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_version_phrase"
+{24
+,(Shift_entry*)&S24pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S24st_Cfsm_phrase_th,(Reduce_tbl*)&S24rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S25std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_Cfsm_phrase_th S25st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S92_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S93_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{588,(State*)&S26_Cfsm_phrase_th} // shift sym: Rfsm_date_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S25qse_Cfsm_phrase_th = {0,(State*)&S92_Cfsm_phrase_th};
+yacco2::State S25_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S25qse_Cfsm_phrase_th
+};
+struct S26std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_Cfsm_phrase_th S26st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S27_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S26rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cfsm_phrase_th S26rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S26_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_date_phrase"
+{26
+,(Shift_entry*)&S26pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S26st_Cfsm_phrase_th,(Reduce_tbl*)&S26rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S27std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S27std_Cfsm_phrase_th S27st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S102_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S103_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{591,(State*)&S28_Cfsm_phrase_th} // shift sym: Rfsm_debug_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S27qse_Cfsm_phrase_th = {0,(State*)&S102_Cfsm_phrase_th};
+yacco2::State S27_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S27qse_Cfsm_phrase_th
+};
+struct S28std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Cfsm_phrase_th S28st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S29_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S28rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cfsm_phrase_th S28rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S28_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_debug_phrase"
+{28
+,(Shift_entry*)&S28pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S28st_Cfsm_phrase_th,(Reduce_tbl*)&S28rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S29std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S29std_Cfsm_phrase_th S29st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S30_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S31_Cfsm_phrase_th} // shift sym: raw_comma
+ ,{594,(State*)&S40_Cfsm_phrase_th} // shift sym: Rfsm_comments_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S29qse_Cfsm_phrase_th = {0,(State*)&S30_Cfsm_phrase_th};
+yacco2::State S29_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S29qse_Cfsm_phrase_th
+};
+struct S30rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cfsm_phrase_th S30rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_comments_phrase_}
+ }// end of reduce table
+};
+yacco2::State S30_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cfsm_phrase_th,0,0,0};
+struct S31std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S31std_Cfsm_phrase_th S31st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S32_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S31pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S31rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cfsm_phrase_th S31rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S31_Cfsm_phrase_th = //State's vectored into symbol: ","
+{31
+,(Shift_entry*)&S31pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S31st_Cfsm_phrase_th,(Reduce_tbl*)&S31rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S32std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S32std_Cfsm_phrase_th S32st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S112_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S113_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S33_Cfsm_phrase_th} // shift sym: Rfsm_comments
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_Cfsm_phrase_th = {3,(State*)&S113_Cfsm_phrase_th};
+yacco2::Shift_entry S32qse_Cfsm_phrase_th = {0,(State*)&S112_Cfsm_phrase_th};
+yacco2::State S32_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{32
+,(Shift_entry*)&S32pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S32st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S113tt_Cfsm_phrase_th,0,(Shift_entry*)&S32qse_Cfsm_phrase_th
+};
+struct S33std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S33std_Cfsm_phrase_th S33st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S34_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S33rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cfsm_phrase_th S33rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S33_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_comments"
+{33
+,(Shift_entry*)&S33pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S33st_Cfsm_phrase_th,(Reduce_tbl*)&S33rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S34std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Cfsm_phrase_th S34st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S35_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S36_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{596,(State*)&S39_Cfsm_phrase_th} // shift sym: Rfsm_comments_string
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Cfsm_phrase_th = {3,(State*)&S36_Cfsm_phrase_th};
+yacco2::Shift_entry S34qse_Cfsm_phrase_th = {0,(State*)&S35_Cfsm_phrase_th};
+yacco2::State S34_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{34
+,(Shift_entry*)&S34pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S34st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S36tt_Cfsm_phrase_th,0,(Shift_entry*)&S34qse_Cfsm_phrase_th
+};
+struct S35rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cfsm_phrase_th S35rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_comments_string_}
+ }// end of reduce table
+};
+yacco2::State S35_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cfsm_phrase_th,0,0,0};
+struct S36std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S36std_Cfsm_phrase_th S36st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S37_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S38_Cfsm_phrase_th} // shift sym: T_c_string
+ }// end of shift table
+};
+yacco2::Shift_entry S36qse_Cfsm_phrase_th = {0,(State*)&S37_Cfsm_phrase_th};
+yacco2::State S36_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{36
+,0,0,0,0,(Shift_tbl*)&S36st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S36qse_Cfsm_phrase_th
+};
+struct S37rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cfsm_phrase_th S37rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_comments_string_}
+ }// end of reduce table
+};
+yacco2::State S37_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cfsm_phrase_th,0,0,0};
+struct S38rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cfsm_phrase_th S38rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_comments_string_}
+ }// end of reduce table
+};
+yacco2::State S38_Cfsm_phrase_th = //State's vectored into symbol: "c-string"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cfsm_phrase_th,0,0,0};
+struct S39rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cfsm_phrase_th S39rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_comments_phrase_}
+ }// end of reduce table
+};
+yacco2::State S39_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_comments_string"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cfsm_phrase_th,0,0,0};
+struct S40std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S40std_Cfsm_phrase_th S40st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S41_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S40pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S40rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cfsm_phrase_th S40rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S40_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_comments_phrase"
+{40
+,(Shift_entry*)&S40pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S40st_Cfsm_phrase_th,(Reduce_tbl*)&S40rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S41rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cfsm_phrase_th S41rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S41_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cfsm_phrase_th,0,0,0};
+struct S42rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cfsm_phrase_th S42rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_id_}
+ }// end of reduce table
+};
+yacco2::State S42_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cfsm_phrase_th,0,0,0};
+struct S43std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S43std_Cfsm_phrase_th S43st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S44_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{293,(State*)&S45_Cfsm_phrase_th} // shift sym: T_fsm_id
+ }// end of shift table
+};
+yacco2::Shift_entry S43qse_Cfsm_phrase_th = {0,(State*)&S44_Cfsm_phrase_th};
+yacco2::State S43_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{43
+,0,0,0,0,(Shift_tbl*)&S43st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S43qse_Cfsm_phrase_th
+};
+struct S44rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cfsm_phrase_th S44rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_id_}
+ }// end of reduce table
+};
+yacco2::State S44_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cfsm_phrase_th,0,0,0};
+struct S45rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cfsm_phrase_th S45rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_id_}
+ }// end of reduce table
+};
+yacco2::State S45_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-id"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cfsm_phrase_th,0,0,0};
+struct S46std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S46std_Cfsm_phrase_th S46st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S47_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S46pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S46rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cfsm_phrase_th S46rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S46_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_id"
+{46
+,(Shift_entry*)&S46pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S46st_Cfsm_phrase_th,(Reduce_tbl*)&S46rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S47std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S47std_Cfsm_phrase_th S47st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S48_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S49_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S52_Cfsm_phrase_th} // shift sym: Rfsm_id_name
+ }// end of shift table
+};
+yacco2::Shift_entry S47pse_Cfsm_phrase_th = {3,(State*)&S49_Cfsm_phrase_th};
+yacco2::Shift_entry S47qse_Cfsm_phrase_th = {0,(State*)&S48_Cfsm_phrase_th};
+yacco2::State S47_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{47
+,(Shift_entry*)&S47pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S47st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S49tt_Cfsm_phrase_th,0,(Shift_entry*)&S47qse_Cfsm_phrase_th
+};
+struct S48rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cfsm_phrase_th S48rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_id_name_}
+ }// end of reduce table
+};
+yacco2::State S48_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cfsm_phrase_th,0,0,0};
+struct S49std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S49std_Cfsm_phrase_th S49st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S50_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S51_Cfsm_phrase_th} // shift sym: T_c_string
+ }// end of shift table
+};
+yacco2::Shift_entry S49qse_Cfsm_phrase_th = {0,(State*)&S50_Cfsm_phrase_th};
+yacco2::State S49_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{49
+,0,0,0,0,(Shift_tbl*)&S49st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S49qse_Cfsm_phrase_th
+};
+struct S50rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cfsm_phrase_th S50rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_id_name_}
+ }// end of reduce table
+};
+yacco2::State S50_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cfsm_phrase_th,0,0,0};
+struct S51rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cfsm_phrase_th S51rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_id_name_}
+ }// end of reduce table
+};
+yacco2::State S51_Cfsm_phrase_th = //State's vectored into symbol: "c-string"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cfsm_phrase_th,0,0,0};
+struct S52rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cfsm_phrase_th S52rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_id_phrase_}
+ }// end of reduce table
+};
+yacco2::State S52_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_id_name"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cfsm_phrase_th,0,0,0};
+struct S53rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cfsm_phrase_th S53rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_filename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S53_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cfsm_phrase_th,0,0,0};
+struct S54std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S54std_Cfsm_phrase_th S54st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S55_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S54pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S54rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cfsm_phrase_th S54rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S54_Cfsm_phrase_th = //State's vectored into symbol: ","
+{54
+,(Shift_entry*)&S54pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S54st_Cfsm_phrase_th,(Reduce_tbl*)&S54rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S55std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S55std_Cfsm_phrase_th S55st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S116_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S117_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S56_Cfsm_phrase_th} // shift sym: Rfsm_filename
+ }// end of shift table
+};
+yacco2::Shift_entry S55pse_Cfsm_phrase_th = {3,(State*)&S117_Cfsm_phrase_th};
+yacco2::Shift_entry S55qse_Cfsm_phrase_th = {0,(State*)&S116_Cfsm_phrase_th};
+yacco2::State S55_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{55
+,(Shift_entry*)&S55pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S55st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S117tt_Cfsm_phrase_th,0,(Shift_entry*)&S55qse_Cfsm_phrase_th
+};
+struct S56std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S56std_Cfsm_phrase_th S56st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S57_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S56pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S56rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cfsm_phrase_th S56rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S56_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_filename"
+{56
+,(Shift_entry*)&S56pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S56st_Cfsm_phrase_th,(Reduce_tbl*)&S56rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S57std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S57std_Cfsm_phrase_th S57st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S58_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S59_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S62_Cfsm_phrase_th} // shift sym: Rfsm_filename_name
+ }// end of shift table
+};
+yacco2::Shift_entry S57pse_Cfsm_phrase_th = {3,(State*)&S59_Cfsm_phrase_th};
+yacco2::Shift_entry S57qse_Cfsm_phrase_th = {0,(State*)&S58_Cfsm_phrase_th};
+yacco2::State S57_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{57
+,(Shift_entry*)&S57pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S57st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S59tt_Cfsm_phrase_th,0,(Shift_entry*)&S57qse_Cfsm_phrase_th
+};
+struct S58rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cfsm_phrase_th S58rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_filename_name_}
+ }// end of reduce table
+};
+yacco2::State S58_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Cfsm_phrase_th,0,0,0};
+struct S59std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S59std_Cfsm_phrase_th S59st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S60_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S61_Cfsm_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S59qse_Cfsm_phrase_th = {0,(State*)&S60_Cfsm_phrase_th};
+yacco2::State S59_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{59
+,0,0,0,0,(Shift_tbl*)&S59st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S59qse_Cfsm_phrase_th
+};
+struct S60rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cfsm_phrase_th S60rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_filename_name_}
+ }// end of reduce table
+};
+yacco2::State S60_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Cfsm_phrase_th,0,0,0};
+struct S61rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cfsm_phrase_th S61rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_filename_name_}
+ }// end of reduce table
+};
+yacco2::State S61_Cfsm_phrase_th = //State's vectored into symbol: "identifier"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cfsm_phrase_th,0,0,0};
+struct S62rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cfsm_phrase_th S62rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_filename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S62_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_filename_name"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cfsm_phrase_th,0,0,0};
+struct S63rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cfsm_phrase_th S63rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_namespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S63_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cfsm_phrase_th,0,0,0};
+struct S64std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S64std_Cfsm_phrase_th S64st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S65_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S64pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S64rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cfsm_phrase_th S64rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S64_Cfsm_phrase_th = //State's vectored into symbol: ","
+{64
+,(Shift_entry*)&S64pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S64st_Cfsm_phrase_th,(Reduce_tbl*)&S64rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S65std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S65std_Cfsm_phrase_th S65st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S120_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S121_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S66_Cfsm_phrase_th} // shift sym: Rfsm_namespace
+ }// end of shift table
+};
+yacco2::Shift_entry S65pse_Cfsm_phrase_th = {3,(State*)&S121_Cfsm_phrase_th};
+yacco2::Shift_entry S65qse_Cfsm_phrase_th = {0,(State*)&S120_Cfsm_phrase_th};
+yacco2::State S65_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{65
+,(Shift_entry*)&S65pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S65st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S121tt_Cfsm_phrase_th,0,(Shift_entry*)&S65qse_Cfsm_phrase_th
+};
+struct S66std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S66std_Cfsm_phrase_th S66st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S67_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S66pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S66rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Cfsm_phrase_th S66rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S66_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_namespace"
+{66
+,(Shift_entry*)&S66pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S66st_Cfsm_phrase_th,(Reduce_tbl*)&S66rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S67std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S67std_Cfsm_phrase_th S67st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S68_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S69_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S72_Cfsm_phrase_th} // shift sym: Rfsm_namespace_name
+ }// end of shift table
+};
+yacco2::Shift_entry S67pse_Cfsm_phrase_th = {3,(State*)&S69_Cfsm_phrase_th};
+yacco2::Shift_entry S67qse_Cfsm_phrase_th = {0,(State*)&S68_Cfsm_phrase_th};
+yacco2::State S67_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{67
+,(Shift_entry*)&S67pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S67st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S69tt_Cfsm_phrase_th,0,(Shift_entry*)&S67qse_Cfsm_phrase_th
+};
+struct S68rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cfsm_phrase_th S68rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_namespace_name_}
+ }// end of reduce table
+};
+yacco2::State S68_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cfsm_phrase_th,0,0,0};
+struct S69std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S69std_Cfsm_phrase_th S69st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S70_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S71_Cfsm_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S69qse_Cfsm_phrase_th = {0,(State*)&S70_Cfsm_phrase_th};
+yacco2::State S69_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{69
+,0,0,0,0,(Shift_tbl*)&S69st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S69qse_Cfsm_phrase_th
+};
+struct S70rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Cfsm_phrase_th S70rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_namespace_name_}
+ }// end of reduce table
+};
+yacco2::State S70_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Cfsm_phrase_th,0,0,0};
+struct S71rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Cfsm_phrase_th S71rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_namespace_name_}
+ }// end of reduce table
+};
+yacco2::State S71_Cfsm_phrase_th = //State's vectored into symbol: "identifier"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Cfsm_phrase_th,0,0,0};
+struct S72rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Cfsm_phrase_th S72rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_namespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S72_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_namespace_name"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Cfsm_phrase_th,0,0,0};
+struct S73rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Cfsm_phrase_th S73rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_class_phrase_}
+ }// end of reduce table
+};
+yacco2::State S73_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Cfsm_phrase_th,0,0,0};
+struct S74std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S74std_Cfsm_phrase_th S74st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S75_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S74pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S74rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Cfsm_phrase_th S74rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S74_Cfsm_phrase_th = //State's vectored into symbol: ","
+{74
+,(Shift_entry*)&S74pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S74st_Cfsm_phrase_th,(Reduce_tbl*)&S74rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S75std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S75std_Cfsm_phrase_th S75st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S124_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S125_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S76_Cfsm_phrase_th} // shift sym: Rfsm_class
+ }// end of shift table
+};
+yacco2::Shift_entry S75pse_Cfsm_phrase_th = {3,(State*)&S125_Cfsm_phrase_th};
+yacco2::Shift_entry S75qse_Cfsm_phrase_th = {0,(State*)&S124_Cfsm_phrase_th};
+yacco2::State S75_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{75
+,(Shift_entry*)&S75pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S75st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S125tt_Cfsm_phrase_th,0,(Shift_entry*)&S75qse_Cfsm_phrase_th
+};
+struct S76std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S76std_Cfsm_phrase_th S76st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S77_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S76pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S76rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Cfsm_phrase_th S76rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S76_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_class"
+{76
+,(Shift_entry*)&S76pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S76st_Cfsm_phrase_th,(Reduce_tbl*)&S76rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S77std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S77std_Cfsm_phrase_th S77st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S78_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S81_Cfsm_phrase_th} // shift sym: Rfsm_class_name
+ }// end of shift table
+};
+yacco2::Shift_entry S77pse_Cfsm_phrase_th = {3,(State*)&S78_Cfsm_phrase_th};
+yacco2::State S77_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{77
+,(Shift_entry*)&S77pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S77st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S78tt_Cfsm_phrase_th,0,0};
+struct S78std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S78std_Cfsm_phrase_th S78st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S79_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{327,(State*)&S80_Cfsm_phrase_th} // shift sym: T_fsm_class_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S78qse_Cfsm_phrase_th = {0,(State*)&S79_Cfsm_phrase_th};
+yacco2::State S78_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{78
+,0,0,0,0,(Shift_tbl*)&S78st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S78qse_Cfsm_phrase_th
+};
+struct S79rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Cfsm_phrase_th S79rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_class_name_}
+ }// end of reduce table
+};
+yacco2::State S79_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Cfsm_phrase_th,0,0,0};
+struct S80rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Cfsm_phrase_th S80rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_class_name_}
+ }// end of reduce table
+};
+yacco2::State S80_Cfsm_phrase_th = //State's vectored into symbol: "fsm-class-phrase"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Cfsm_phrase_th,0,0,0};
+struct S81rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Cfsm_phrase_th S81rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_class_phrase_}
+ }// end of reduce table
+};
+yacco2::State S81_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_class_name"
+{81
+,0,0,0,0,0,(Reduce_tbl*)&S81rt_Cfsm_phrase_th,0,0,0};
+struct S82rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Cfsm_phrase_th S82rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_version_phrase_}
+ }// end of reduce table
+};
+yacco2::State S82_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Cfsm_phrase_th,0,0,0};
+struct S83std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S83std_Cfsm_phrase_th S83st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S84_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S83pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S83rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Cfsm_phrase_th S83rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S83_Cfsm_phrase_th = //State's vectored into symbol: ","
+{83
+,(Shift_entry*)&S83pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S83st_Cfsm_phrase_th,(Reduce_tbl*)&S83rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S84std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S84std_Cfsm_phrase_th S84st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S128_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S129_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{586,(State*)&S85_Cfsm_phrase_th} // shift sym: Rfsm_version
+ }// end of shift table
+};
+yacco2::Shift_entry S84pse_Cfsm_phrase_th = {3,(State*)&S129_Cfsm_phrase_th};
+yacco2::Shift_entry S84qse_Cfsm_phrase_th = {0,(State*)&S128_Cfsm_phrase_th};
+yacco2::State S84_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{84
+,(Shift_entry*)&S84pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S84st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S129tt_Cfsm_phrase_th,0,(Shift_entry*)&S84qse_Cfsm_phrase_th
+};
+struct S85std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S85std_Cfsm_phrase_th S85st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S86_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S85pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S85rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Cfsm_phrase_th S85rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S85_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_version"
+{85
+,(Shift_entry*)&S85pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S85st_Cfsm_phrase_th,(Reduce_tbl*)&S85rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S86std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S86std_Cfsm_phrase_th S86st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S87_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S88_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S91_Cfsm_phrase_th} // shift sym: Rfsm_version_string
+ }// end of shift table
+};
+yacco2::Shift_entry S86pse_Cfsm_phrase_th = {3,(State*)&S88_Cfsm_phrase_th};
+yacco2::Shift_entry S86qse_Cfsm_phrase_th = {0,(State*)&S87_Cfsm_phrase_th};
+yacco2::State S86_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{86
+,(Shift_entry*)&S86pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S86st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S88tt_Cfsm_phrase_th,0,(Shift_entry*)&S86qse_Cfsm_phrase_th
+};
+struct S87rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Cfsm_phrase_th S87rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_version_string_}
+ }// end of reduce table
+};
+yacco2::State S87_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{87
+,0,0,0,0,0,(Reduce_tbl*)&S87rt_Cfsm_phrase_th,0,0,0};
+struct S88std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S88std_Cfsm_phrase_th S88st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S89_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S90_Cfsm_phrase_th} // shift sym: T_c_string
+ }// end of shift table
+};
+yacco2::Shift_entry S88qse_Cfsm_phrase_th = {0,(State*)&S89_Cfsm_phrase_th};
+yacco2::State S88_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{88
+,0,0,0,0,(Shift_tbl*)&S88st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S88qse_Cfsm_phrase_th
+};
+struct S89rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S89rtd_Cfsm_phrase_th S89rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_version_string_}
+ }// end of reduce table
+};
+yacco2::State S89_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{89
+,0,0,0,0,0,(Reduce_tbl*)&S89rt_Cfsm_phrase_th,0,0,0};
+struct S90rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S90rtd_Cfsm_phrase_th S90rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_version_string_}
+ }// end of reduce table
+};
+yacco2::State S90_Cfsm_phrase_th = //State's vectored into symbol: "c-string"
+{90
+,0,0,0,0,0,(Reduce_tbl*)&S90rt_Cfsm_phrase_th,0,0,0};
+struct S91rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S91rtd_Cfsm_phrase_th S91rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_version_phrase_}
+ }// end of reduce table
+};
+yacco2::State S91_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_version_string"
+{91
+,0,0,0,0,0,(Reduce_tbl*)&S91rt_Cfsm_phrase_th,0,0,0};
+struct S92rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S92rtd_Cfsm_phrase_th S92rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_date_phrase_}
+ }// end of reduce table
+};
+yacco2::State S92_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{92
+,0,0,0,0,0,(Reduce_tbl*)&S92rt_Cfsm_phrase_th,0,0,0};
+struct S93std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S93std_Cfsm_phrase_th S93st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S94_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S93pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S93rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S93rtd_Cfsm_phrase_th S93rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S93_Cfsm_phrase_th = //State's vectored into symbol: ","
+{93
+,(Shift_entry*)&S93pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S93st_Cfsm_phrase_th,(Reduce_tbl*)&S93rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S94std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S94std_Cfsm_phrase_th S94st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S132_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S133_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{589,(State*)&S95_Cfsm_phrase_th} // shift sym: Rfsm_date
+ }// end of shift table
+};
+yacco2::Shift_entry S94pse_Cfsm_phrase_th = {3,(State*)&S133_Cfsm_phrase_th};
+yacco2::Shift_entry S94qse_Cfsm_phrase_th = {0,(State*)&S132_Cfsm_phrase_th};
+yacco2::State S94_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{94
+,(Shift_entry*)&S94pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S94st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S133tt_Cfsm_phrase_th,0,(Shift_entry*)&S94qse_Cfsm_phrase_th
+};
+struct S95std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S95std_Cfsm_phrase_th S95st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S96_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S95pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S95rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S95rtd_Cfsm_phrase_th S95rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S95_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_date"
+{95
+,(Shift_entry*)&S95pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S95st_Cfsm_phrase_th,(Reduce_tbl*)&S95rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S96std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S96std_Cfsm_phrase_th S96st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S97_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S98_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S101_Cfsm_phrase_th} // shift sym: Rfsm_date_string
+ }// end of shift table
+};
+yacco2::Shift_entry S96pse_Cfsm_phrase_th = {3,(State*)&S98_Cfsm_phrase_th};
+yacco2::Shift_entry S96qse_Cfsm_phrase_th = {0,(State*)&S97_Cfsm_phrase_th};
+yacco2::State S96_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{96
+,(Shift_entry*)&S96pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S96st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S98tt_Cfsm_phrase_th,0,(Shift_entry*)&S96qse_Cfsm_phrase_th
+};
+struct S97rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S97rtd_Cfsm_phrase_th S97rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_date_string_}
+ }// end of reduce table
+};
+yacco2::State S97_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{97
+,0,0,0,0,0,(Reduce_tbl*)&S97rt_Cfsm_phrase_th,0,0,0};
+struct S98std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S98std_Cfsm_phrase_th S98st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S99_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S100_Cfsm_phrase_th} // shift sym: T_c_string
+ }// end of shift table
+};
+yacco2::Shift_entry S98qse_Cfsm_phrase_th = {0,(State*)&S99_Cfsm_phrase_th};
+yacco2::State S98_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{98
+,0,0,0,0,(Shift_tbl*)&S98st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S98qse_Cfsm_phrase_th
+};
+struct S99rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S99rtd_Cfsm_phrase_th S99rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_date_string_}
+ }// end of reduce table
+};
+yacco2::State S99_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{99
+,0,0,0,0,0,(Reduce_tbl*)&S99rt_Cfsm_phrase_th,0,0,0};
+struct S100rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S100rtd_Cfsm_phrase_th S100rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_date_string_}
+ }// end of reduce table
+};
+yacco2::State S100_Cfsm_phrase_th = //State's vectored into symbol: "c-string"
+{100
+,0,0,0,0,0,(Reduce_tbl*)&S100rt_Cfsm_phrase_th,0,0,0};
+struct S101rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S101rtd_Cfsm_phrase_th S101rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_date_phrase_}
+ }// end of reduce table
+};
+yacco2::State S101_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_date_string"
+{101
+,0,0,0,0,0,(Reduce_tbl*)&S101rt_Cfsm_phrase_th,0,0,0};
+struct S102rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S102rtd_Cfsm_phrase_th S102rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_debug_phrase_}
+ }// end of reduce table
+};
+yacco2::State S102_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{102
+,0,0,0,0,0,(Reduce_tbl*)&S102rt_Cfsm_phrase_th,0,0,0};
+struct S103std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S103std_Cfsm_phrase_th S103st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S104_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S103pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S103rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S103rtd_Cfsm_phrase_th S103rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S103_Cfsm_phrase_th = //State's vectored into symbol: ","
+{103
+,(Shift_entry*)&S103pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S103st_Cfsm_phrase_th,(Reduce_tbl*)&S103rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S104std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S104std_Cfsm_phrase_th S104st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S136_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S137_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{592,(State*)&S105_Cfsm_phrase_th} // shift sym: Rfsm_debug
+ }// end of shift table
+};
+yacco2::Shift_entry S104pse_Cfsm_phrase_th = {3,(State*)&S137_Cfsm_phrase_th};
+yacco2::Shift_entry S104qse_Cfsm_phrase_th = {0,(State*)&S136_Cfsm_phrase_th};
+yacco2::State S104_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{104
+,(Shift_entry*)&S104pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S104st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S137tt_Cfsm_phrase_th,0,(Shift_entry*)&S104qse_Cfsm_phrase_th
+};
+struct S105std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S105std_Cfsm_phrase_th S105st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{597,(State*)&S106_Cfsm_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S105pse_Cfsm_phrase_th = {3,(State*)&S10_Cfsm_phrase_th};
+struct S105rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S105rtd_Cfsm_phrase_th S105rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S105_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_debug"
+{105
+,(Shift_entry*)&S105pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S105st_Cfsm_phrase_th,(Reduce_tbl*)&S105rt_Cfsm_phrase_th,(State_s_thread_tbl*)&S10tt_Cfsm_phrase_th,0,0};
+struct S106std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S106std_Cfsm_phrase_th S106st_Cfsm_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S107_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S108_Cfsm_phrase_th} // shift sym: LR1_parallel_operator
+ ,{593,(State*)&S111_Cfsm_phrase_th} // shift sym: Rfsm_debug_string
+ }// end of shift table
+};
+yacco2::Shift_entry S106pse_Cfsm_phrase_th = {3,(State*)&S108_Cfsm_phrase_th};
+yacco2::Shift_entry S106qse_Cfsm_phrase_th = {0,(State*)&S107_Cfsm_phrase_th};
+yacco2::State S106_Cfsm_phrase_th = //State's vectored into symbol: "Rlint"
+{106
+,(Shift_entry*)&S106pse_Cfsm_phrase_th,0,0,0,(Shift_tbl*)&S106st_Cfsm_phrase_th,0,(State_s_thread_tbl*)&S108tt_Cfsm_phrase_th,0,(Shift_entry*)&S106qse_Cfsm_phrase_th
+};
+struct S107rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S107rtd_Cfsm_phrase_th S107rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_debug_string_}
+ }// end of reduce table
+};
+yacco2::State S107_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{107
+,0,0,0,0,0,(Reduce_tbl*)&S107rt_Cfsm_phrase_th,0,0,0};
+struct S108std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S108std_Cfsm_phrase_th S108st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S109_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S110_Cfsm_phrase_th} // shift sym: T_c_string
+ }// end of shift table
+};
+yacco2::Shift_entry S108qse_Cfsm_phrase_th = {0,(State*)&S109_Cfsm_phrase_th};
+yacco2::State S108_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{108
+,0,0,0,0,(Shift_tbl*)&S108st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S108qse_Cfsm_phrase_th
+};
+struct S109rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S109rtd_Cfsm_phrase_th S109rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_debug_string_}
+ }// end of reduce table
+};
+yacco2::State S109_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{109
+,0,0,0,0,0,(Reduce_tbl*)&S109rt_Cfsm_phrase_th,0,0,0};
+struct S110rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S110rtd_Cfsm_phrase_th S110rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_debug_string_}
+ }// end of reduce table
+};
+yacco2::State S110_Cfsm_phrase_th = //State's vectored into symbol: "c-string"
+{110
+,0,0,0,0,0,(Reduce_tbl*)&S110rt_Cfsm_phrase_th,0,0,0};
+struct S111rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S111rtd_Cfsm_phrase_th S111rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_debug_phrase_}
+ }// end of reduce table
+};
+yacco2::State S111_Cfsm_phrase_th = //State's vectored into symbol: "Rfsm_debug_string"
+{111
+,0,0,0,0,0,(Reduce_tbl*)&S111rt_Cfsm_phrase_th,0,0,0};
+struct S112rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S112rtd_Cfsm_phrase_th S112rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_comments_}
+ }// end of reduce table
+};
+yacco2::State S112_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{112
+,0,0,0,0,0,(Reduce_tbl*)&S112rt_Cfsm_phrase_th,0,0,0};
+struct S113std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S113std_Cfsm_phrase_th S113st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S114_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{300,(State*)&S115_Cfsm_phrase_th} // shift sym: T_fsm_comments
+ }// end of shift table
+};
+yacco2::Shift_entry S113qse_Cfsm_phrase_th = {0,(State*)&S114_Cfsm_phrase_th};
+yacco2::State S113_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{113
+,0,0,0,0,(Shift_tbl*)&S113st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S113qse_Cfsm_phrase_th
+};
+struct S114rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S114rtd_Cfsm_phrase_th S114rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_comments_}
+ }// end of reduce table
+};
+yacco2::State S114_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{114
+,0,0,0,0,0,(Reduce_tbl*)&S114rt_Cfsm_phrase_th,0,0,0};
+struct S115rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S115rtd_Cfsm_phrase_th S115rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_comments_}
+ }// end of reduce table
+};
+yacco2::State S115_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-comments"
+{115
+,0,0,0,0,0,(Reduce_tbl*)&S115rt_Cfsm_phrase_th,0,0,0};
+struct S116rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S116rtd_Cfsm_phrase_th S116rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_filename_}
+ }// end of reduce table
+};
+yacco2::State S116_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{116
+,0,0,0,0,0,(Reduce_tbl*)&S116rt_Cfsm_phrase_th,0,0,0};
+struct S117std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S117std_Cfsm_phrase_th S117st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S118_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{294,(State*)&S119_Cfsm_phrase_th} // shift sym: T_fsm_filename
+ }// end of shift table
+};
+yacco2::Shift_entry S117qse_Cfsm_phrase_th = {0,(State*)&S118_Cfsm_phrase_th};
+yacco2::State S117_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{117
+,0,0,0,0,(Shift_tbl*)&S117st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S117qse_Cfsm_phrase_th
+};
+struct S118rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S118rtd_Cfsm_phrase_th S118rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_filename_}
+ }// end of reduce table
+};
+yacco2::State S118_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{118
+,0,0,0,0,0,(Reduce_tbl*)&S118rt_Cfsm_phrase_th,0,0,0};
+struct S119rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S119rtd_Cfsm_phrase_th S119rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_filename_}
+ }// end of reduce table
+};
+yacco2::State S119_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-filename"
+{119
+,0,0,0,0,0,(Reduce_tbl*)&S119rt_Cfsm_phrase_th,0,0,0};
+struct S120rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S120rtd_Cfsm_phrase_th S120rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_namespace_}
+ }// end of reduce table
+};
+yacco2::State S120_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{120
+,0,0,0,0,0,(Reduce_tbl*)&S120rt_Cfsm_phrase_th,0,0,0};
+struct S121std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S121std_Cfsm_phrase_th S121st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S122_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{295,(State*)&S123_Cfsm_phrase_th} // shift sym: T_fsm_namespace
+ }// end of shift table
+};
+yacco2::Shift_entry S121qse_Cfsm_phrase_th = {0,(State*)&S122_Cfsm_phrase_th};
+yacco2::State S121_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{121
+,0,0,0,0,(Shift_tbl*)&S121st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S121qse_Cfsm_phrase_th
+};
+struct S122rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S122rtd_Cfsm_phrase_th S122rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_namespace_}
+ }// end of reduce table
+};
+yacco2::State S122_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{122
+,0,0,0,0,0,(Reduce_tbl*)&S122rt_Cfsm_phrase_th,0,0,0};
+struct S123rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S123rtd_Cfsm_phrase_th S123rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_namespace_}
+ }// end of reduce table
+};
+yacco2::State S123_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-namespace"
+{123
+,0,0,0,0,0,(Reduce_tbl*)&S123rt_Cfsm_phrase_th,0,0,0};
+struct S124rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S124rtd_Cfsm_phrase_th S124rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_class_}
+ }// end of reduce table
+};
+yacco2::State S124_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{124
+,0,0,0,0,0,(Reduce_tbl*)&S124rt_Cfsm_phrase_th,0,0,0};
+struct S125std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S125std_Cfsm_phrase_th S125st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S126_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{296,(State*)&S127_Cfsm_phrase_th} // shift sym: T_fsm_class
+ }// end of shift table
+};
+yacco2::Shift_entry S125qse_Cfsm_phrase_th = {0,(State*)&S126_Cfsm_phrase_th};
+yacco2::State S125_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{125
+,0,0,0,0,(Shift_tbl*)&S125st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S125qse_Cfsm_phrase_th
+};
+struct S126rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S126rtd_Cfsm_phrase_th S126rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_class_}
+ }// end of reduce table
+};
+yacco2::State S126_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{126
+,0,0,0,0,0,(Reduce_tbl*)&S126rt_Cfsm_phrase_th,0,0,0};
+struct S127rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S127rtd_Cfsm_phrase_th S127rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_class_}
+ }// end of reduce table
+};
+yacco2::State S127_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-class"
+{127
+,0,0,0,0,0,(Reduce_tbl*)&S127rt_Cfsm_phrase_th,0,0,0};
+struct S128rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S128rtd_Cfsm_phrase_th S128rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_version_}
+ }// end of reduce table
+};
+yacco2::State S128_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{128
+,0,0,0,0,0,(Reduce_tbl*)&S128rt_Cfsm_phrase_th,0,0,0};
+struct S129std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S129std_Cfsm_phrase_th S129st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S130_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{297,(State*)&S131_Cfsm_phrase_th} // shift sym: T_fsm_version
+ }// end of shift table
+};
+yacco2::Shift_entry S129qse_Cfsm_phrase_th = {0,(State*)&S130_Cfsm_phrase_th};
+yacco2::State S129_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{129
+,0,0,0,0,(Shift_tbl*)&S129st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S129qse_Cfsm_phrase_th
+};
+struct S130rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S130rtd_Cfsm_phrase_th S130rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_version_}
+ }// end of reduce table
+};
+yacco2::State S130_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{130
+,0,0,0,0,0,(Reduce_tbl*)&S130rt_Cfsm_phrase_th,0,0,0};
+struct S131rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S131rtd_Cfsm_phrase_th S131rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_version_}
+ }// end of reduce table
+};
+yacco2::State S131_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-version"
+{131
+,0,0,0,0,0,(Reduce_tbl*)&S131rt_Cfsm_phrase_th,0,0,0};
+struct S132rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S132rtd_Cfsm_phrase_th S132rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_date_}
+ }// end of reduce table
+};
+yacco2::State S132_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{132
+,0,0,0,0,0,(Reduce_tbl*)&S132rt_Cfsm_phrase_th,0,0,0};
+struct S133std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S133std_Cfsm_phrase_th S133st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S134_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{298,(State*)&S135_Cfsm_phrase_th} // shift sym: T_fsm_date
+ }// end of shift table
+};
+yacco2::Shift_entry S133qse_Cfsm_phrase_th = {0,(State*)&S134_Cfsm_phrase_th};
+yacco2::State S133_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{133
+,0,0,0,0,(Shift_tbl*)&S133st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S133qse_Cfsm_phrase_th
+};
+struct S134rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S134rtd_Cfsm_phrase_th S134rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_date_}
+ }// end of reduce table
+};
+yacco2::State S134_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{134
+,0,0,0,0,0,(Reduce_tbl*)&S134rt_Cfsm_phrase_th,0,0,0};
+struct S135rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S135rtd_Cfsm_phrase_th S135rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_date_}
+ }// end of reduce table
+};
+yacco2::State S135_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-date"
+{135
+,0,0,0,0,0,(Reduce_tbl*)&S135rt_Cfsm_phrase_th,0,0,0};
+struct S136rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S136rtd_Cfsm_phrase_th S136rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs3_Rfsm_debug_}
+ }// end of reduce table
+};
+yacco2::State S136_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{136
+,0,0,0,0,0,(Reduce_tbl*)&S136rt_Cfsm_phrase_th,0,0,0};
+struct S137std_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S137std_Cfsm_phrase_th S137st_Cfsm_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S138_Cfsm_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{299,(State*)&S139_Cfsm_phrase_th} // shift sym: T_fsm_debug
+ }// end of shift table
+};
+yacco2::Shift_entry S137qse_Cfsm_phrase_th = {0,(State*)&S138_Cfsm_phrase_th};
+yacco2::State S137_Cfsm_phrase_th = //State's vectored into symbol: "|||"
+{137
+,0,0,0,0,(Shift_tbl*)&S137st_Cfsm_phrase_th,0,0,0,(Shift_entry*)&S137qse_Cfsm_phrase_th
+};
+struct S138rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S138rtd_Cfsm_phrase_th S138rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs2_Rfsm_debug_}
+ }// end of reduce table
+};
+yacco2::State S138_Cfsm_phrase_th = //State's vectored into symbol: "|?|"
+{138
+,0,0,0,0,0,(Reduce_tbl*)&S138rt_Cfsm_phrase_th,0,0,0};
+struct S139rtd_Cfsm_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S139rtd_Cfsm_phrase_th S139rt_Cfsm_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cfsm_phrase_th,Cfsm_phrase_th::rhs1_Rfsm_debug_}
+ }// end of reduce table
+};
+yacco2::State S139_Cfsm_phrase_th = //State's vectored into symbol: "#fsm-debug"
+{139
+,0,0,0,0,0,(Reduce_tbl*)&S139rt_Cfsm_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/fsm_phrasesym.cpp b/web/yacco2/compiler/grammars/fsm_phrasesym.cpp
new file mode 100644
index 0000000000..1a5f22c1c2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: fsm_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cfsm_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rfsm_phrase_:{
+ Rfsm_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/fsm_phrasetbl.cpp b/web/yacco2/compiler/grammars/fsm_phrasetbl.cpp
new file mode 100644
index 0000000000..174a0acb64
--- /dev/null
+++ b/web/yacco2/compiler/grammars/fsm_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: fsm_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "fsm_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_fsm_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cfsm_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cfsm_phrase;
+extern yacco2::State S2_Cfsm_phrase;
+extern yacco2::State S3_Cfsm_phrase;
+struct S3ttd_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Cfsm_phrase S3tt_Cfsm_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_fsm_phrase_th
+};
+extern yacco2::State S4_Cfsm_phrase;
+extern yacco2::State S5_Cfsm_phrase;
+extern yacco2::State S6_Cfsm_phrase;
+struct S1std_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cfsm_phrase S1st_Cfsm_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Cfsm_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Cfsm_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cfsm_phrase} // accept sym: Rfsm_phrase
+ ,{570,(State*)&S6_Cfsm_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cfsm_phrase = {3,(State*)&S3_Cfsm_phrase};
+yacco2::Shift_entry S1qse_Cfsm_phrase = {0,(State*)&S2_Cfsm_phrase};
+yacco2::State S1_Cfsm_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cfsm_phrase,0,0,0,(Shift_tbl*)&S1st_Cfsm_phrase,0,(State_s_thread_tbl*)&S3tt_Cfsm_phrase,0,(Shift_entry*)&S1qse_Cfsm_phrase
+};
+struct S2rtd_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cfsm_phrase S2rt_Cfsm_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase,Cfsm_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Cfsm_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cfsm_phrase,0,0,0};
+struct S3std_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cfsm_phrase S3st_Cfsm_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Cfsm_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{328,(State*)&S5_Cfsm_phrase} // shift sym: T_fsm_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cfsm_phrase = {0,(State*)&S4_Cfsm_phrase};
+yacco2::State S3_Cfsm_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cfsm_phrase,0,0,0,(Shift_entry*)&S3qse_Cfsm_phrase
+};
+struct S4rtd_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cfsm_phrase S4rt_Cfsm_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase,Cfsm_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Cfsm_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cfsm_phrase,0,0,0};
+struct S5rtd_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cfsm_phrase S5rt_Cfsm_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase,Cfsm_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Cfsm_phrase = //State's vectored into symbol: "fsm-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cfsm_phrase,0,0,0};
+struct S6rtd_Cfsm_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cfsm_phrase S6rt_Cfsm_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cfsm_phrase,Cfsm_phrase::rhs1_Rfsm_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Cfsm_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cfsm_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/gen1grammar.sh b/web/yacco2/compiler/grammars/gen1grammar.sh
new file mode 100755
index 0000000000..45111be7a8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/gen1grammar.sh
@@ -0,0 +1,140 @@
+#! /bin/sh
+#file: gen1grammar.bat
+# compile 1 grammar
+# parm 1) grammar name to compile
+# Example:
+# 0) cd /usr/local/yacco2/compiler/grammars
+# 1) . gen1grammar.bat eol.lex # gen c++ for eol.lex
+
+
+#
+# p1 possible switches with grammar file to work with
+# p2 grammar file without the extension
+#
+delete_files=1 # set to delete the various gened files
+parm=""
+cc_lex()
+{
+ echo "==========> Grammar to compile with switches: $1"
+ file_name_only="`basename $2`"
+ if ! eval "$o2 $1"
+ then
+ echo "grammar in error --- exiting";
+ return 1;
+ fi
+ for j in $1
+ do
+ case $j in
+ *p)
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ eval "pdftex $file_name_only.tex"
+ xref="$file_name_only""_idx"
+ echo "%%%%%%%%%%%%%%%%% index file: $xref to cweave and pdftex"
+ eval "cweave $xref.w"
+ eval "pdftex $xref.tex"
+ ###pdftops "$file_name_only.pdf"
+ ###pdftops "$xref"".pdf"
+ eval "cp $xref\.pdf* $dir_only"; #copy gened docs to its gening folder
+ ###eval "cp $xref\.ps* $dir_only"; #copy gened docs to its gening folder
+ return
+ esac
+ done
+if test $delete_files -eq 1; then
+ for k in `ls -1 * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ echo "-----Copying--------> $k to $dir_only/$k"
+ eval "cp $k $dir_only/$k";
+ eval "rm -f $k"
+ ;;
+ *.fsc)
+ echo "-----Copying--------> $k to $dir_only/$k"
+ eval "cp $k $dir_only/$k";
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ echo "-----Copying--------> $k to $dir_only/$k"
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+ ;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.[1-9])
+ echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ *.[1-9][0-9]*)
+ echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+
+file_no_ext=${1%%.*}
+echo "==========> Grammar to compile: $1; file name without extension: $file_no_ext"
+echo "Parameters to use"
+echo " 0) exit script"
+echo " 1) just compile grammar: $1"
+echo " 2) also gen $1 and Tes and Errors vocabularies: -t -err"
+echo " 3) gen $1 documents: -p"
+dir_only=`pwd`
+cd $tmp
+while true; do
+ echo -n "Choose selection no: "
+ read no
+ case $no in
+ 0 )
+ echo "exiting script";
+ break;;
+ 1 )
+ parm=" $dir_only/$1";
+ ;;
+ 2 )
+ parm=" -t -err $dir_only/$1";
+ ;;
+ 3 )
+ parm=" -p $dir_only/$1";
+ ;;
+ * )
+ echo "Please answer 0..3";
+ continue;;
+ esac
+ echo "parm: $parm"
+ if test "$parm" ;
+ then
+ cc_lex "$parm" "$dir_only/$file_no_ext"
+ cd $dir_only
+ break
+ fi
+done
+
diff --git a/web/yacco2/compiler/grammars/identifier.cpp b/web/yacco2/compiler/grammars/identifier.cpp
new file mode 100644
index 0000000000..dac8c04c01
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifier.cpp
@@ -0,0 +1,374 @@
+/*
+ File: identifier.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "identifier.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_identifier;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 8;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+}
+ Cidentifier::
+ Cidentifier()
+ :yacco2::CAbs_fsm
+ ("identifier.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"Yacco2 identifiers lexer with symbol table lookup."
+ ,"Fri Jan 30 18:55:12 2015 "
+ ,S1_Cidentifier){
+
+ hyphen_pos_ = -1;
+ hyphen_ = 0;
+ hyphen_idx_ = -1;
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cidentifier::~Cidentifier(){
+
+ for(int x = 0;x < 8;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cidentifier::failed(){
+ return false;
+ }
+ void Cidentifier::op(){
+ hyphen_pos_ = -1;
+ hyphen_ = 0;
+ hyphen_idx_ = -1;
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cidentifier::rhs_to_rules_mapping_[70] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+ ,3 // subrule 11 for rule 4
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,3 // subrule 14 for rule 4
+ ,3 // subrule 15 for rule 4
+ ,3 // subrule 16 for rule 4
+ ,3 // subrule 17 for rule 4
+ ,3 // subrule 18 for rule 4
+ ,3 // subrule 19 for rule 4
+ ,3 // subrule 20 for rule 4
+ ,4 // subrule 21 for rule 5
+ ,4 // subrule 22 for rule 5
+ ,4 // subrule 23 for rule 5
+ ,4 // subrule 24 for rule 5
+ ,4 // subrule 25 for rule 5
+ ,4 // subrule 26 for rule 5
+ ,4 // subrule 27 for rule 5
+ ,4 // subrule 28 for rule 5
+ ,4 // subrule 29 for rule 5
+ ,4 // subrule 30 for rule 5
+ ,4 // subrule 31 for rule 5
+ ,4 // subrule 32 for rule 5
+ ,4 // subrule 33 for rule 5
+ ,5 // subrule 34 for rule 6
+ ,5 // subrule 35 for rule 6
+ ,5 // subrule 36 for rule 6
+ ,5 // subrule 37 for rule 6
+ ,5 // subrule 38 for rule 6
+ ,5 // subrule 39 for rule 6
+ ,5 // subrule 40 for rule 6
+ ,5 // subrule 41 for rule 6
+ ,5 // subrule 42 for rule 6
+ ,5 // subrule 43 for rule 6
+ ,5 // subrule 44 for rule 6
+ ,5 // subrule 45 for rule 6
+ ,5 // subrule 46 for rule 6
+ ,6 // subrule 47 for rule 7
+ ,6 // subrule 48 for rule 7
+ ,6 // subrule 49 for rule 7
+ ,6 // subrule 50 for rule 7
+ ,6 // subrule 51 for rule 7
+ ,6 // subrule 52 for rule 7
+ ,6 // subrule 53 for rule 7
+ ,6 // subrule 54 for rule 7
+ ,6 // subrule 55 for rule 7
+ ,6 // subrule 56 for rule 7
+ ,6 // subrule 57 for rule 7
+ ,6 // subrule 58 for rule 7
+ ,6 // subrule 59 for rule 7
+ ,7 // subrule 60 for rule 8
+ ,7 // subrule 61 for rule 8
+ ,7 // subrule 62 for rule 8
+ ,7 // subrule 63 for rule 8
+ ,7 // subrule 64 for rule 8
+ ,7 // subrule 65 for rule 8
+ ,7 // subrule 66 for rule 8
+ ,7 // subrule 67 for rule 8
+ ,7 // subrule 68 for rule 8
+ ,7 // subrule 69 for rule 8
+};
+Ridentifier::Ridentifier(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ridentifier",0,Cidentifier::R_Ridentifier_,P,false,false){
+}
+
+void Ridentifier::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2_stbl;
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*fsm->ddd_);
+ if(report_card.action_ == T_sym_tbl_report_card::fnd) goto item_in_stbl;
+ // strip out - suffix as in a-b where suffix -b is bktracked
+ if(fsm->hyphen_ != 0){// re-align to - as lookahead
+ rule_info__.parser__->override_current_token(*fsm->hyphen_,fsm->hyphen_pos_);
+ fsm->ddd_[fsm->hyphen_idx_] = 0;
+ }else{
+ sym = new T_identifier((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+ }
+ find_sym_in_stbl(report_card,*fsm->ddd_);// relook up id without "-" sufx
+ if(report_card.action_ == T_sym_tbl_report_card::fnd) goto item_in_stbl;
+ sym = new T_identifier((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+
+item_in_stbl:
+ if(report_card.tbl_entry_->type_ != table_entry::keyword){
+ // return xxx-in-stbl where xxx one of rule, T
+ sym = report_card.tbl_entry_->symbol_;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+ }
+kw_handling:
+ kw_in_stbl* kw_in = (kw_in_stbl*)report_card.tbl_entry_->symbol_;
+ CAbs_lr1_sym* kw = kw_in->keyword_in_stbl();
+ CAbs_lr1_sym* nkw;
+ switch(kw->enumerated_id__){
+ case T_Enum::T_T_raw_characters_:{nkw = new T_raw_characters;break;}
+ case T_Enum::T_T_lr1_constant_symbols_:
+ {nkw = new T_lr1_constant_symbols;break;}
+ case T_Enum::T_T_error_symbols_:{nkw = new T_error_symbols;break;}
+ case T_Enum::T_T_eocode_:{nkw = new T_eocode;break;}
+
+ case T_Enum::T_T_AD_:{nkw = new T_AD;break;}
+ case T_Enum::T_T_AB_:{nkw = new T_AB;break;}
+ case T_Enum::T_T_parallel_la_boundary_:
+ {nkw = new T_parallel_la_boundary;break;}
+ case T_Enum::T_T_arbitrator_code_:{nkw = new T_arbitrator_code;break;}
+
+ case T_Enum::T_T_parallel_parser_:{nkw = new T_parallel_parser;break;}
+ case T_Enum::T_T_parallel_thread_function_:
+ {nkw = new T_parallel_thread_function;break;}
+ case T_Enum::T_T_parallel_control_monitor_:
+ {nkw = new T_parallel_control_monitor;break;}
+ case T_Enum::T_T_fsm_:{nkw = new T_fsm;break;}
+ case T_Enum::T_T_fsm_id_:{nkw = new T_fsm_id;break;}
+ case T_Enum::T_T_fsm_filename_:{nkw = new T_fsm_filename;break;}
+ case T_Enum::T_T_fsm_namespace_:{nkw = new T_fsm_namespace;break;}
+ case T_Enum::T_T_fsm_class_:{nkw = new T_fsm_class;break;}
+ case T_Enum::T_T_fsm_version_:{nkw = new T_fsm_version;break;}
+ case T_Enum::T_T_fsm_date_:{nkw = new T_fsm_date;break;}
+ case T_Enum::T_T_fsm_debug_:{nkw = new T_fsm_debug;break;}
+ case T_Enum::T_T_fsm_comments_:{nkw = new T_fsm_comments;break;}
+ case T_Enum::T_T_terminals_:{nkw = new T_terminals;break;}
+ case T_Enum::T_T_enumeration_:{nkw = new T_enumeration;break;}
+ case T_Enum::T_T_file_name_:{nkw = new T_file_name;break;}
+ case T_Enum::T_T_name_space_:{nkw = new T_name_space;break;}
+ case T_Enum::T_T_sym_class_:{nkw = new T_sym_class;break;}
+ case T_Enum::T_T_rules_:{nkw = new T_rules;break;}
+ case T_Enum::T_T_lhs_:{nkw = new T_lhs;break;}
+ case T_Enum::T_T_user_declaration_:{nkw = new T_user_declaration;break;}
+ case T_Enum::T_T_user_prefix_declaration_:
+ {nkw = new T_user_prefix_declaration;break;}
+ case T_Enum::T_T_user_suffix_declaration_:
+ {nkw = new T_user_suffix_declaration;break;}
+ case T_Enum::T_T_constructor_:{nkw = new T_constructor;break;}
+ case T_Enum::T_T_destructor_:{nkw = new T_destructor;break;}
+ case T_Enum::T_T_op_:{nkw = new T_op;break;}
+ case T_Enum::T_T_failed_:{nkw = new T_failed;break;}
+ case T_Enum::T_T_user_implementation_:
+ {nkw = new T_user_implementation;break;}
+ case T_Enum::T_T_user_imp_tbl_:{nkw = new T_user_imp_tbl;break;}
+ case T_Enum::T_T_user_imp_sym_:{nkw = new T_user_imp_sym;break;}
+ case T_Enum::T_T_constant_defs_:{nkw = new T_constant_defs;break;}
+ case T_Enum::T_T_terminals_refs_:{nkw = new T_terminals_refs;break;}
+ case T_Enum::T_T_terminals_sufx_:{nkw = new T_terminals_sufx;break;}
+ case T_Enum::T_T_lrk_sufx_:{nkw = new T_lrk_sufx;break;}
+ case T_Enum::T_LR1_eog_:{nkw = new LR1_eog;break;}
+ case T_Enum::T_LR1_eolr_:{nkw = new LR1_eolr;break;}
+ case T_Enum::T_T_NULL_:{nkw = new T_NULL;break;}
+ }
+ nkw->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(nkw);
+ return;
+
+}
+Rid_suffix::Rid_suffix(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rid_suffix",0,Cidentifier::R_Rid_suffix_,P,false,false){
+}
+
+void Rid_suffix::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = sf->p1__;
+ parser()->reset_current_token(parser()->current_token_pos()-1);// bk trk to previous chr which is on stack
+ int id;
+filter_char:
+ id = sym->enumerated_id();
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_a_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_z_)) goto bld_str;
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_A_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_Z_)) goto bld_str;
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_0_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_9_)) goto bld_str;
+ if(id == NS_yacco2_T_enum::T_Enum::T_raw_under_score_) goto bld_str;
+ if(id == NS_yacco2_T_enum::T_Enum::T_raw_minus_){
+ if(fsm->hyphen_ == 0){
+ fsm->hyphen_pos_ = rule_info__.parser__->current_token_pos__-1;
+ fsm->hyphen_ = sym;
+ // note: len rel 1, idx rel 0: "-" not added yet to str, this will be its idx value
+ fsm->hyphen_idx_ = fsm->ddd_idx_;
+ }
+ goto bld_str;
+ }
+ return; // end-of-identifier
+bld_str:
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+ parser()->get_next_token();// as current token
+ sym = parser()->current_token__;
+ goto filter_char;
+
+}
+
+Rstart_char::Rstart_char(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart_char",0,Cidentifier::R_Rstart_char_,P,false,false){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,Cidentifier::R_RUPPER_A_M_,P,false,false){
+}
+
+void RUPPER_A_M::op(){
+ sstrace_rulesss
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,Cidentifier::R_RUPPER_N_Z_,P,false,false){
+}
+
+void RUPPER_N_Z::op(){
+ sstrace_rulesss
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,Cidentifier::R_Rlower_a_m_,P,false,false){
+}
+
+void Rlower_a_m::op(){
+ sstrace_rulesss
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,Cidentifier::R_Rlower_n_z_,P,false,false){
+}
+
+void Rlower_n_z::op(){
+ sstrace_rulesss
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,Cidentifier::R_RNUMBERS_,P,false,false){
+}
+
+void RNUMBERS::op(){
+ sstrace_rulesss
+
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
diff --git a/web/yacco2/compiler/grammars/identifier.fsc b/web/yacco2/compiler/grammars/identifier.fsc
new file mode 100644
index 0000000000..c7942c87ad
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifier.fsc
@@ -0,0 +1,71 @@
+/*
+ File: identifier.fsc
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+transitive n
+grammar-name "identifier"
+name-space "NS_identifier"
+thread-name "TH_identifier"
+monolithic n
+file-name "identifier.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 52
+ raw_A
+ raw_B
+ raw_C
+ raw_D
+ raw_E
+ raw_F
+ raw_G
+ raw_H
+ raw_I
+ raw_J
+ raw_K
+ raw_L
+ raw_M
+ raw_N
+ raw_O
+ raw_P
+ raw_Q
+ raw_R
+ raw_S
+ raw_T
+ raw_U
+ raw_V
+ raw_W
+ raw_X
+ raw_Y
+ raw_Z
+ raw_a
+ raw_b
+ raw_c
+ raw_d
+ raw_e
+ raw_f
+ raw_g
+ raw_h
+ raw_i
+ raw_j
+ raw_k
+ raw_l
+ raw_m
+ raw_n
+ raw_o
+ raw_p
+ raw_q
+ raw_r
+ raw_s
+ raw_t
+ raw_u
+ raw_v
+ raw_w
+ raw_x
+ raw_y
+ raw_z
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Yacco2 identifiers lexer with symbol table lookup."
diff --git a/web/yacco2/compiler/grammars/identifier.h b/web/yacco2/compiler/grammars/identifier.h
new file mode 100644
index 0000000000..3cd55c5a08
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifier.h
@@ -0,0 +1,189 @@
+/*
+ File: identifier.h
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#ifndef __identifier_h__
+#define __identifier_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "yacco2_stbl.h"
+
+extern yacco2::Thread_entry ITH_identifier;
+
+extern yacco2::State S1_Cidentifier;
+namespace NS_identifier {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_identifier(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_identifier(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[8];
+};
+class Cidentifier: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ridentifier_ = 569//start_of_rule_list + 0
+ ,rhs1_Ridentifier_ = 1
+ ,rhs2_Ridentifier_ = 2
+ ,R_Rid_suffix_ = 570//start_of_rule_list + 2
+ ,rhs1_Rid_suffix_ = 3
+ ,R_Rstart_char_ = 571//start_of_rule_list + 4
+ ,rhs1_Rstart_char_ = 4
+ ,rhs2_Rstart_char_ = 5
+ ,rhs3_Rstart_char_ = 6
+ ,rhs4_Rstart_char_ = 7
+ ,R_RUPPER_A_M_ = 572//start_of_rule_list + 6
+ ,rhs1_RUPPER_A_M_ = 8
+ ,rhs2_RUPPER_A_M_ = 9
+ ,rhs3_RUPPER_A_M_ = 10
+ ,rhs4_RUPPER_A_M_ = 11
+ ,rhs5_RUPPER_A_M_ = 12
+ ,rhs6_RUPPER_A_M_ = 13
+ ,rhs7_RUPPER_A_M_ = 14
+ ,rhs8_RUPPER_A_M_ = 15
+ ,rhs9_RUPPER_A_M_ = 16
+ ,rhs10_RUPPER_A_M_ = 17
+ ,rhs11_RUPPER_A_M_ = 18
+ ,rhs12_RUPPER_A_M_ = 19
+ ,rhs13_RUPPER_A_M_ = 20
+ ,R_RUPPER_N_Z_ = 573//start_of_rule_list + 8
+ ,rhs1_RUPPER_N_Z_ = 21
+ ,rhs2_RUPPER_N_Z_ = 22
+ ,rhs3_RUPPER_N_Z_ = 23
+ ,rhs4_RUPPER_N_Z_ = 24
+ ,rhs5_RUPPER_N_Z_ = 25
+ ,rhs6_RUPPER_N_Z_ = 26
+ ,rhs7_RUPPER_N_Z_ = 27
+ ,rhs8_RUPPER_N_Z_ = 28
+ ,rhs9_RUPPER_N_Z_ = 29
+ ,rhs10_RUPPER_N_Z_ = 30
+ ,rhs11_RUPPER_N_Z_ = 31
+ ,rhs12_RUPPER_N_Z_ = 32
+ ,rhs13_RUPPER_N_Z_ = 33
+ ,R_Rlower_a_m_ = 574//start_of_rule_list + 10
+ ,rhs1_Rlower_a_m_ = 34
+ ,rhs2_Rlower_a_m_ = 35
+ ,rhs3_Rlower_a_m_ = 36
+ ,rhs4_Rlower_a_m_ = 37
+ ,rhs5_Rlower_a_m_ = 38
+ ,rhs6_Rlower_a_m_ = 39
+ ,rhs7_Rlower_a_m_ = 40
+ ,rhs8_Rlower_a_m_ = 41
+ ,rhs9_Rlower_a_m_ = 42
+ ,rhs10_Rlower_a_m_ = 43
+ ,rhs11_Rlower_a_m_ = 44
+ ,rhs12_Rlower_a_m_ = 45
+ ,rhs13_Rlower_a_m_ = 46
+ ,R_Rlower_n_z_ = 575//start_of_rule_list + 12
+ ,rhs1_Rlower_n_z_ = 47
+ ,rhs2_Rlower_n_z_ = 48
+ ,rhs3_Rlower_n_z_ = 49
+ ,rhs4_Rlower_n_z_ = 50
+ ,rhs5_Rlower_n_z_ = 51
+ ,rhs6_Rlower_n_z_ = 52
+ ,rhs7_Rlower_n_z_ = 53
+ ,rhs8_Rlower_n_z_ = 54
+ ,rhs9_Rlower_n_z_ = 55
+ ,rhs10_Rlower_n_z_ = 56
+ ,rhs11_Rlower_n_z_ = 57
+ ,rhs12_Rlower_n_z_ = 58
+ ,rhs13_Rlower_n_z_ = 59
+ ,R_RNUMBERS_ = 576//start_of_rule_list + 14
+ ,rhs1_RNUMBERS_ = 60
+ ,rhs2_RNUMBERS_ = 61
+ ,rhs3_RNUMBERS_ = 62
+ ,rhs4_RNUMBERS_ = 63
+ ,rhs5_RNUMBERS_ = 64
+ ,rhs6_RNUMBERS_ = 65
+ ,rhs7_RNUMBERS_ = 66
+ ,rhs8_RNUMBERS_ = 67
+ ,rhs9_RNUMBERS_ = 68
+ ,rhs10_RNUMBERS_ = 69
+ };
+ //no of la sets = 1
+ //no of states = 60
+ Cidentifier();
+ ~Cidentifier();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[70];
+
+ public:
+ int hyphen_pos_;
+ int hyphen_idx_;
+ CAbs_lr1_sym* hyphen_;
+ char ddd_[1024];
+ int ddd_idx_;
+
+ };
+struct Ridentifier;
+struct Rid_suffix;
+struct Rstart_char;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Ridentifier:public yacco2::CAbs_lr1_sym {
+ Ridentifier(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rid_suffix:public yacco2::CAbs_lr1_sym {
+ Rid_suffix(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rstart_char:public yacco2::CAbs_lr1_sym {
+ Rstart_char(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/identifier.lex b/web/yacco2/compiler/grammars/identifier.lex
new file mode 100644
index 0000000000..917d1c1847
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifier.lex
@@ -0,0 +1,345 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: identifier.lex
+dates: 17 Juin 2003
+Purpose: yacco2 identifier
+Returned: T_identifier
+Mod: include keyword handling that can have embeded "-" - 23 Mar. 2005
+Note: "-" in Rminus_la. This protects the a-b expression in the
+parallel-la-boundary from being considered bad.
+Take 2: use a bktrk strategy. If keyword then return it else see if
+the suffix of "-" needs dropping to produce a shorter identifier.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |identifier| thread.\fbreak
+Does three things:\fbreak
+1) build up strings starting with letters
+following by alphanumerics, underscore and hyphens\fbreak
+2) determines whether its an identifier, keyword,
+or xxx-in-stbl where xxx one of rule, T.\fbreak
+3) it watches for the possibility of a shortened
+identifier within the lookahead expression.\fbreak
+This is caused by the hyphen being overloaded: within
+the lookahead expression it
+is an operator.
+The default is the longest possible identifier string
+which could be a keyword.
+Barring this it is an identifier up to but excluding
+the first hyphen. This is not pure in its error checking
+as the string could be in error within the
+lookahead expression and the faulty keyword being
+stated checked to the shortened
+identifier.
+Well the undefined identifier should be caught
+when the lookahead expression is postfixed evaluated against the symbol table.
+
+To keep each drawing contained to a page, i broke the rules
+having many subrules like
+|RUPPER| into smaller rules: |RUPPER_A_M| and |RUPPER_N_Z|.
+
+An Optimization:\fbreak
+Bypass the PDA of the grammar and use a FA for the
+tail-gating characters. Dtrace exposes well optimization opportunities.
+2) Optimize: rid use of string to build up symbol name: use a raw buffer.
+Dtrace showed its inefficiencies: strlen, memcpy, and mutex locks.\fbreak
+Nov. 2008.\fbreak
+@/
+fsm
+(fsm-id "identifier.lex",fsm-filename identifier,fsm-namespace NS_identifier
+,fsm-class Cidentifier{
+ user-prefix-declaration
+#include "yacco2_stbl.h"
+ ***
+ user-declaration
+ public:
+ int hyphen_pos_;
+ int hyphen_idx_;
+ CAbs_lr1_sym* hyphen_;
+ char ddd_[1024];
+ int ddd_idx_;
+ ***
+ op
+ hyphen_pos_ = -1;
+ hyphen_ = 0;
+ hyphen_idx_ = -1;
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ constructor
+ hyphen_pos_ = -1;
+ hyphen_ = 0;
+ hyphen_idx_ = -1;
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "Yacco2 identifiers lexer with symbol table lookup.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_identifier
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ridentifier (
+lhs {
+/@
+Check if the identifier is a keyword by use of the symbol table
+and if so create the keyword and return it.
+Now return as an identifier with the prefix not containing the hyphen.
+@/
+ op
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2_stbl;
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*fsm->ddd_);
+ if(report_card.action_ == T_sym_tbl_report_card::fnd) goto item_in_stbl;
+ // strip out - suffix as in a-b where suffix -b is bktracked
+ if(fsm->hyphen_ != 0){// re-align to - as lookahead
+ rule_info__.parser__->override_current_token(*fsm->hyphen_,fsm->hyphen_pos_);
+ fsm->ddd_[fsm->hyphen_idx_] = 0;
+ }else{
+ sym = new T_identifier((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+ }
+ find_sym_in_stbl(report_card,*fsm->ddd_);// relook up id without "-" sufx
+ if(report_card.action_ == T_sym_tbl_report_card::fnd) goto item_in_stbl;
+ sym = new T_identifier((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+
+item_in_stbl:
+ if(report_card.tbl_entry_->type_ != table_entry::keyword){
+ // return xxx-in-stbl where xxx one of rule, T
+ sym = report_card.tbl_entry_->symbol_;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ return;
+ }
+kw_handling:
+ kw_in_stbl* kw_in = (kw_in_stbl*)report_card.tbl_entry_->symbol_;
+ CAbs_lr1_sym* kw = kw_in->keyword_in_stbl();
+ CAbs_lr1_sym* nkw;
+ switch(kw->enumerated_id__){
+ case T_Enum::T_T_raw_characters_:{nkw = new T_raw_characters;break;}
+ case T_Enum::T_T_lr1_constant_symbols_:
+ {nkw = new T_lr1_constant_symbols;break;}
+ case T_Enum::T_T_error_symbols_:{nkw = new T_error_symbols;break;}
+ case T_Enum::T_T_eocode_:{nkw = new T_eocode;break;}
+
+ case T_Enum::T_T_AD_:{nkw = new T_AD;break;}
+ case T_Enum::T_T_AB_:{nkw = new T_AB;break;}
+ case T_Enum::T_T_parallel_la_boundary_:
+ {nkw = new T_parallel_la_boundary;break;}
+ case T_Enum::T_T_arbitrator_code_:{nkw = new T_arbitrator_code;break;}
+
+ case T_Enum::T_T_parallel_parser_:{nkw = new T_parallel_parser;break;}
+ case T_Enum::T_T_parallel_thread_function_:
+ {nkw = new T_parallel_thread_function;break;}
+ case T_Enum::T_T_parallel_control_monitor_:
+ {nkw = new T_parallel_control_monitor;break;}
+ case T_Enum::T_T_fsm_:{nkw = new T_fsm;break;}
+ case T_Enum::T_T_fsm_id_:{nkw = new T_fsm_id;break;}
+ case T_Enum::T_T_fsm_filename_:{nkw = new T_fsm_filename;break;}
+ case T_Enum::T_T_fsm_namespace_:{nkw = new T_fsm_namespace;break;}
+ case T_Enum::T_T_fsm_class_:{nkw = new T_fsm_class;break;}
+ case T_Enum::T_T_fsm_version_:{nkw = new T_fsm_version;break;}
+ case T_Enum::T_T_fsm_date_:{nkw = new T_fsm_date;break;}
+ case T_Enum::T_T_fsm_debug_:{nkw = new T_fsm_debug;break;}
+ case T_Enum::T_T_fsm_comments_:{nkw = new T_fsm_comments;break;}
+ case T_Enum::T_T_terminals_:{nkw = new T_terminals;break;}
+ case T_Enum::T_T_enumeration_:{nkw = new T_enumeration;break;}
+ case T_Enum::T_T_file_name_:{nkw = new T_file_name;break;}
+ case T_Enum::T_T_name_space_:{nkw = new T_name_space;break;}
+ case T_Enum::T_T_sym_class_:{nkw = new T_sym_class;break;}
+ case T_Enum::T_T_rules_:{nkw = new T_rules;break;}
+ case T_Enum::T_T_lhs_:{nkw = new T_lhs;break;}
+ case T_Enum::T_T_user_declaration_:{nkw = new T_user_declaration;break;}
+ case T_Enum::T_T_user_prefix_declaration_:
+ {nkw = new T_user_prefix_declaration;break;}
+ case T_Enum::T_T_user_suffix_declaration_:
+ {nkw = new T_user_suffix_declaration;break;}
+ case T_Enum::T_T_constructor_:{nkw = new T_constructor;break;}
+ case T_Enum::T_T_destructor_:{nkw = new T_destructor;break;}
+ case T_Enum::T_T_op_:{nkw = new T_op;break;}
+ case T_Enum::T_T_failed_:{nkw = new T_failed;break;}
+ case T_Enum::T_T_user_implementation_:
+ {nkw = new T_user_implementation;break;}
+ case T_Enum::T_T_user_imp_tbl_:{nkw = new T_user_imp_tbl;break;}
+ case T_Enum::T_T_user_imp_sym_:{nkw = new T_user_imp_sym;break;}
+ case T_Enum::T_T_constant_defs_:{nkw = new T_constant_defs;break;}
+ case T_Enum::T_T_terminals_refs_:{nkw = new T_terminals_refs;break;}
+ case T_Enum::T_T_terminals_sufx_:{nkw = new T_terminals_sufx;break;}
+ case T_Enum::T_T_lrk_sufx_:{nkw = new T_lrk_sufx;break;}
+ case T_Enum::T_LR1_eog_:{nkw = new LR1_eog;break;}
+ case T_Enum::T_LR1_eolr_:{nkw = new LR1_eolr;break;}
+ case T_Enum::T_T_NULL_:{nkw = new T_NULL;break;}
+ }
+ nkw->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(nkw);
+ return;
+ ***
+ }
+){
+ -> Rstart_char
+ -> Rstart_char Rid_suffix
+}
+
+Rid_suffix () {
+ -> |+| {
+/@
+Pure finite automata for identifier suffix.\fbreak
+Capture the index of where the first hyphen is.
+As length is relative to one, this is its index
+before i add it to the being built up string.
+i could have added the character before and then
+used the length minus one to get its index:
+ahh the off by one count as the array operator is
+of course relative to zero.
+Dave u and your rants...and rolls.
+
+Note the 1st entry character into this rule is on the stack
+which is what the stack frame uses to set the specific symbols.
+The current token for the parser is now the lookahead character.
+This is why I reset the parsing character upon entry
+to the previous token.
+@/
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = sf->p1__;
+ parser()->reset_current_token(parser()->current_token_pos()-1);// bk trk to previous chr which is on stack
+ int id;
+filter_char:
+ id = sym->enumerated_id();
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_a_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_z_)) goto bld_str;
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_A_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_Z_)) goto bld_str;
+ if((id >= NS_yacco2_T_enum::T_Enum::T_raw_0_)
+ &&
+ (id <= NS_yacco2_T_enum::T_Enum::T_raw_9_)) goto bld_str;
+ if(id == NS_yacco2_T_enum::T_Enum::T_raw_under_score_) goto bld_str;
+ if(id == NS_yacco2_T_enum::T_Enum::T_raw_minus_){
+ if(fsm->hyphen_ == 0){
+ fsm->hyphen_pos_ = rule_info__.parser__->current_token_pos__-1;
+ fsm->hyphen_ = sym;
+ // note: len rel 1, idx rel 0: "-" not added yet to str, this will be its idx value
+ fsm->hyphen_idx_ = fsm->ddd_idx_;
+ }
+ goto bld_str;
+ }
+ return; // end-of-identifier
+bld_str:
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+ parser()->get_next_token();// as current token
+ sym = parser()->current_token__;
+ goto filter_char;
+ ***
+ }
+}
+
+Rstart_char () {
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+}
+
+RUPPER_A_M (
+lhs {
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z (
+lhs {
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m (
+lhs {
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z (
+lhs {
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS (
+lhs {
+ op
+ Cidentifier* fsm = (Cidentifier*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/identifiersym.cpp b/web/yacco2/compiler/grammars/identifiersym.cpp
new file mode 100644
index 0000000000..2bb668df1d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifiersym.cpp
@@ -0,0 +1,1079 @@
+/*
+ File: identifiersym.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "identifier.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_identifier;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_identifier::TH_identifier(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_identifier;
+ NS_identifier::Cidentifier Cidentifier_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cidentifier_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_identifier::PROC_TH_identifier(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_identifier";
+ static bool one_time(false);
+ static NS_identifier::Cidentifier* NS_identifier_Cidentifier_(0);// parallel-parser's fsm table
+ static Parser* NS_identifier_Cidentifier_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_identifier_Cidentifier_ = new NS_identifier::Cidentifier();// parallel-parser's fsm table
+ NS_identifier_Cidentifier_parser = new Parser(*NS_identifier_Cidentifier_,Caller_pp);
+ }
+ proc_parser = NS_identifier_Cidentifier_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cidentifier::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ridentifier_:{
+ Ridentifier* sym;
+ if(re->rule_ == 0){
+ sym = new Ridentifier(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ridentifier*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Ridentifier_:{
+ Ridentifier* sym;
+ if(re->rule_ == 0){
+ sym = new Ridentifier(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ridentifier*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rid_suffix_:{
+ Rid_suffix* sym;
+ if(re->rule_ == 0){
+ sym = new Rid_suffix(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid_suffix*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/identifiertbl.cpp b/web/yacco2/compiler/grammars/identifiertbl.cpp
new file mode 100644
index 0000000000..629509d903
--- /dev/null
+++ b/web/yacco2/compiler/grammars/identifiertbl.cpp
@@ -0,0 +1,989 @@
+/*
+ File: identifiertbl.cpp
+ Date and Time: Fri Jan 30 18:55:12 2015
+*/
+#include "identifier.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_identifier;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cidentifier[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cidentifier;
+extern yacco2::State S2_Cidentifier;
+extern yacco2::State S3_Cidentifier;
+extern yacco2::State S4_Cidentifier;
+extern yacco2::State S5_Cidentifier;
+extern yacco2::State S6_Cidentifier;
+extern yacco2::State S7_Cidentifier;
+extern yacco2::State S8_Cidentifier;
+extern yacco2::State S9_Cidentifier;
+extern yacco2::State S10_Cidentifier;
+extern yacco2::State S11_Cidentifier;
+extern yacco2::State S12_Cidentifier;
+extern yacco2::State S13_Cidentifier;
+extern yacco2::State S14_Cidentifier;
+extern yacco2::State S15_Cidentifier;
+extern yacco2::State S16_Cidentifier;
+extern yacco2::State S17_Cidentifier;
+extern yacco2::State S18_Cidentifier;
+extern yacco2::State S19_Cidentifier;
+extern yacco2::State S20_Cidentifier;
+extern yacco2::State S21_Cidentifier;
+extern yacco2::State S22_Cidentifier;
+extern yacco2::State S23_Cidentifier;
+extern yacco2::State S24_Cidentifier;
+extern yacco2::State S25_Cidentifier;
+extern yacco2::State S26_Cidentifier;
+extern yacco2::State S27_Cidentifier;
+extern yacco2::State S28_Cidentifier;
+extern yacco2::State S29_Cidentifier;
+extern yacco2::State S30_Cidentifier;
+extern yacco2::State S31_Cidentifier;
+extern yacco2::State S32_Cidentifier;
+extern yacco2::State S33_Cidentifier;
+extern yacco2::State S34_Cidentifier;
+extern yacco2::State S35_Cidentifier;
+extern yacco2::State S36_Cidentifier;
+extern yacco2::State S37_Cidentifier;
+extern yacco2::State S38_Cidentifier;
+extern yacco2::State S39_Cidentifier;
+extern yacco2::State S40_Cidentifier;
+extern yacco2::State S41_Cidentifier;
+extern yacco2::State S42_Cidentifier;
+extern yacco2::State S43_Cidentifier;
+extern yacco2::State S44_Cidentifier;
+extern yacco2::State S45_Cidentifier;
+extern yacco2::State S46_Cidentifier;
+extern yacco2::State S47_Cidentifier;
+extern yacco2::State S48_Cidentifier;
+extern yacco2::State S49_Cidentifier;
+extern yacco2::State S50_Cidentifier;
+extern yacco2::State S51_Cidentifier;
+extern yacco2::State S52_Cidentifier;
+extern yacco2::State S53_Cidentifier;
+extern yacco2::State S54_Cidentifier;
+extern yacco2::State S55_Cidentifier;
+extern yacco2::State S56_Cidentifier;
+extern yacco2::State S57_Cidentifier;
+extern yacco2::State S58_Cidentifier;
+extern yacco2::State S59_Cidentifier;
+extern yacco2::State S60_Cidentifier;
+struct S1std_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[58];
+};
+S1std_Cidentifier S1st_Cidentifier = {
+ 58
+ ,
+ {// start of table
+ {73,(State*)&S2_Cidentifier} // shift sym: raw_A
+ ,{74,(State*)&S3_Cidentifier} // shift sym: raw_B
+ ,{75,(State*)&S4_Cidentifier} // shift sym: raw_C
+ ,{76,(State*)&S5_Cidentifier} // shift sym: raw_D
+ ,{77,(State*)&S6_Cidentifier} // shift sym: raw_E
+ ,{78,(State*)&S7_Cidentifier} // shift sym: raw_F
+ ,{79,(State*)&S8_Cidentifier} // shift sym: raw_G
+ ,{80,(State*)&S9_Cidentifier} // shift sym: raw_H
+ ,{81,(State*)&S10_Cidentifier} // shift sym: raw_I
+ ,{82,(State*)&S11_Cidentifier} // shift sym: raw_J
+ ,{83,(State*)&S12_Cidentifier} // shift sym: raw_K
+ ,{84,(State*)&S13_Cidentifier} // shift sym: raw_L
+ ,{85,(State*)&S14_Cidentifier} // shift sym: raw_M
+ ,{86,(State*)&S15_Cidentifier} // shift sym: raw_N
+ ,{87,(State*)&S16_Cidentifier} // shift sym: raw_O
+ ,{88,(State*)&S17_Cidentifier} // shift sym: raw_P
+ ,{89,(State*)&S18_Cidentifier} // shift sym: raw_Q
+ ,{90,(State*)&S19_Cidentifier} // shift sym: raw_R
+ ,{91,(State*)&S20_Cidentifier} // shift sym: raw_S
+ ,{92,(State*)&S21_Cidentifier} // shift sym: raw_T
+ ,{93,(State*)&S22_Cidentifier} // shift sym: raw_U
+ ,{94,(State*)&S23_Cidentifier} // shift sym: raw_V
+ ,{95,(State*)&S24_Cidentifier} // shift sym: raw_W
+ ,{96,(State*)&S25_Cidentifier} // shift sym: raw_X
+ ,{97,(State*)&S26_Cidentifier} // shift sym: raw_Y
+ ,{98,(State*)&S27_Cidentifier} // shift sym: raw_Z
+ ,{105,(State*)&S28_Cidentifier} // shift sym: raw_a
+ ,{106,(State*)&S29_Cidentifier} // shift sym: raw_b
+ ,{107,(State*)&S30_Cidentifier} // shift sym: raw_c
+ ,{108,(State*)&S31_Cidentifier} // shift sym: raw_d
+ ,{109,(State*)&S32_Cidentifier} // shift sym: raw_e
+ ,{110,(State*)&S33_Cidentifier} // shift sym: raw_f
+ ,{111,(State*)&S34_Cidentifier} // shift sym: raw_g
+ ,{112,(State*)&S35_Cidentifier} // shift sym: raw_h
+ ,{113,(State*)&S36_Cidentifier} // shift sym: raw_i
+ ,{114,(State*)&S37_Cidentifier} // shift sym: raw_j
+ ,{115,(State*)&S38_Cidentifier} // shift sym: raw_k
+ ,{116,(State*)&S39_Cidentifier} // shift sym: raw_l
+ ,{117,(State*)&S40_Cidentifier} // shift sym: raw_m
+ ,{118,(State*)&S41_Cidentifier} // shift sym: raw_n
+ ,{119,(State*)&S42_Cidentifier} // shift sym: raw_o
+ ,{120,(State*)&S43_Cidentifier} // shift sym: raw_p
+ ,{121,(State*)&S44_Cidentifier} // shift sym: raw_q
+ ,{122,(State*)&S45_Cidentifier} // shift sym: raw_r
+ ,{123,(State*)&S46_Cidentifier} // shift sym: raw_s
+ ,{124,(State*)&S47_Cidentifier} // shift sym: raw_t
+ ,{125,(State*)&S48_Cidentifier} // shift sym: raw_u
+ ,{126,(State*)&S49_Cidentifier} // shift sym: raw_v
+ ,{127,(State*)&S50_Cidentifier} // shift sym: raw_w
+ ,{128,(State*)&S51_Cidentifier} // shift sym: raw_x
+ ,{129,(State*)&S52_Cidentifier} // shift sym: raw_y
+ ,{130,(State*)&S53_Cidentifier} // shift sym: raw_z
+ ,{569,(State*)&S1_Cidentifier} // accept sym: Ridentifier
+ ,{571,(State*)&S54_Cidentifier} // shift sym: Rstart_char
+ ,{572,(State*)&S57_Cidentifier} // shift sym: RUPPER_A_M
+ ,{573,(State*)&S58_Cidentifier} // shift sym: RUPPER_N_Z
+ ,{574,(State*)&S59_Cidentifier} // shift sym: Rlower_a_m
+ ,{575,(State*)&S60_Cidentifier} // shift sym: Rlower_n_z
+ }// end of shift table
+};
+yacco2::State S1_Cidentifier = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cidentifier,0,0,0,0};
+struct S2rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cidentifier S2rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S2_Cidentifier = //State's vectored into symbol: "A"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cidentifier,0,0,0};
+struct S3rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cidentifier S3rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S3_Cidentifier = //State's vectored into symbol: "B"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cidentifier,0,0,0};
+struct S4rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cidentifier S4rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs3_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S4_Cidentifier = //State's vectored into symbol: "C"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cidentifier,0,0,0};
+struct S5rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cidentifier S5rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs4_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S5_Cidentifier = //State's vectored into symbol: "D"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cidentifier,0,0,0};
+struct S6rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cidentifier S6rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs5_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S6_Cidentifier = //State's vectored into symbol: "E"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cidentifier,0,0,0};
+struct S7rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cidentifier S7rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs6_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S7_Cidentifier = //State's vectored into symbol: "F"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cidentifier,0,0,0};
+struct S8rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cidentifier S8rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs7_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S8_Cidentifier = //State's vectored into symbol: "G"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cidentifier,0,0,0};
+struct S9rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cidentifier S9rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs8_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S9_Cidentifier = //State's vectored into symbol: "H"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cidentifier,0,0,0};
+struct S10rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cidentifier S10rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs9_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S10_Cidentifier = //State's vectored into symbol: "I"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cidentifier,0,0,0};
+struct S11rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cidentifier S11rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs10_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S11_Cidentifier = //State's vectored into symbol: "J"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cidentifier,0,0,0};
+struct S12rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cidentifier S12rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs11_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S12_Cidentifier = //State's vectored into symbol: "K"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cidentifier,0,0,0};
+struct S13rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cidentifier S13rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs12_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S13_Cidentifier = //State's vectored into symbol: "L"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cidentifier,0,0,0};
+struct S14rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cidentifier S14rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs13_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S14_Cidentifier = //State's vectored into symbol: "M"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cidentifier,0,0,0};
+struct S15rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cidentifier S15rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S15_Cidentifier = //State's vectored into symbol: "N"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cidentifier,0,0,0};
+struct S16rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cidentifier S16rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S16_Cidentifier = //State's vectored into symbol: "O"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cidentifier,0,0,0};
+struct S17rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cidentifier S17rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs3_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S17_Cidentifier = //State's vectored into symbol: "P"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cidentifier,0,0,0};
+struct S18rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cidentifier S18rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs4_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S18_Cidentifier = //State's vectored into symbol: "Q"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cidentifier,0,0,0};
+struct S19rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cidentifier S19rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs5_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S19_Cidentifier = //State's vectored into symbol: "R"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cidentifier,0,0,0};
+struct S20rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cidentifier S20rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs6_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S20_Cidentifier = //State's vectored into symbol: "S"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cidentifier,0,0,0};
+struct S21rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cidentifier S21rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs7_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S21_Cidentifier = //State's vectored into symbol: "T"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cidentifier,0,0,0};
+struct S22rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cidentifier S22rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs8_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S22_Cidentifier = //State's vectored into symbol: "U"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cidentifier,0,0,0};
+struct S23rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cidentifier S23rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs9_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S23_Cidentifier = //State's vectored into symbol: "V"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cidentifier,0,0,0};
+struct S24rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cidentifier S24rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs10_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S24_Cidentifier = //State's vectored into symbol: "W"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cidentifier,0,0,0};
+struct S25rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cidentifier S25rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs11_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S25_Cidentifier = //State's vectored into symbol: "X"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cidentifier,0,0,0};
+struct S26rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cidentifier S26rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs12_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S26_Cidentifier = //State's vectored into symbol: "Y"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cidentifier,0,0,0};
+struct S27rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cidentifier S27rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs13_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S27_Cidentifier = //State's vectored into symbol: "Z"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cidentifier,0,0,0};
+struct S28rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cidentifier S28rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S28_Cidentifier = //State's vectored into symbol: "a"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cidentifier,0,0,0};
+struct S29rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cidentifier S29rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S29_Cidentifier = //State's vectored into symbol: "b"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cidentifier,0,0,0};
+struct S30rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cidentifier S30rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs3_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S30_Cidentifier = //State's vectored into symbol: "c"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cidentifier,0,0,0};
+struct S31rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cidentifier S31rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs4_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S31_Cidentifier = //State's vectored into symbol: "d"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cidentifier,0,0,0};
+struct S32rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cidentifier S32rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs5_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S32_Cidentifier = //State's vectored into symbol: "e"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cidentifier,0,0,0};
+struct S33rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cidentifier S33rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs6_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S33_Cidentifier = //State's vectored into symbol: "f"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cidentifier,0,0,0};
+struct S34rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cidentifier S34rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs7_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S34_Cidentifier = //State's vectored into symbol: "g"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Cidentifier,0,0,0};
+struct S35rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cidentifier S35rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs8_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S35_Cidentifier = //State's vectored into symbol: "h"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cidentifier,0,0,0};
+struct S36rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cidentifier S36rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs9_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S36_Cidentifier = //State's vectored into symbol: "i"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cidentifier,0,0,0};
+struct S37rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cidentifier S37rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs10_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S37_Cidentifier = //State's vectored into symbol: "j"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cidentifier,0,0,0};
+struct S38rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cidentifier S38rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs11_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S38_Cidentifier = //State's vectored into symbol: "k"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cidentifier,0,0,0};
+struct S39rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cidentifier S39rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs12_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S39_Cidentifier = //State's vectored into symbol: "l"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cidentifier,0,0,0};
+struct S40rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cidentifier S40rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs13_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S40_Cidentifier = //State's vectored into symbol: "m"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cidentifier,0,0,0};
+struct S41rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cidentifier S41rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S41_Cidentifier = //State's vectored into symbol: "n"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cidentifier,0,0,0};
+struct S42rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cidentifier S42rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S42_Cidentifier = //State's vectored into symbol: "o"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cidentifier,0,0,0};
+struct S43rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cidentifier S43rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs3_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S43_Cidentifier = //State's vectored into symbol: "p"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cidentifier,0,0,0};
+struct S44rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cidentifier S44rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs4_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S44_Cidentifier = //State's vectored into symbol: "q"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cidentifier,0,0,0};
+struct S45rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cidentifier S45rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs5_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S45_Cidentifier = //State's vectored into symbol: "r"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cidentifier,0,0,0};
+struct S46rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cidentifier S46rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs6_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S46_Cidentifier = //State's vectored into symbol: "s"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cidentifier,0,0,0};
+struct S47rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cidentifier S47rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs7_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S47_Cidentifier = //State's vectored into symbol: "t"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cidentifier,0,0,0};
+struct S48rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cidentifier S48rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs8_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S48_Cidentifier = //State's vectored into symbol: "u"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cidentifier,0,0,0};
+struct S49rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cidentifier S49rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs9_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S49_Cidentifier = //State's vectored into symbol: "v"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cidentifier,0,0,0};
+struct S50rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cidentifier S50rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs10_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S50_Cidentifier = //State's vectored into symbol: "w"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cidentifier,0,0,0};
+struct S51rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cidentifier S51rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs11_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S51_Cidentifier = //State's vectored into symbol: "x"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cidentifier,0,0,0};
+struct S52rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cidentifier S52rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs12_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S52_Cidentifier = //State's vectored into symbol: "y"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cidentifier,0,0,0};
+struct S53rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cidentifier S53rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs13_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S53_Cidentifier = //State's vectored into symbol: "z"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cidentifier,0,0,0};
+struct S54std_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S54std_Cidentifier S54st_Cidentifier = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S55_Cidentifier} // shift sym: LR1_all_shift_operator
+ ,{570,(State*)&S56_Cidentifier} // shift sym: Rid_suffix
+ }// end of shift table
+};
+yacco2::Shift_entry S54ase_Cidentifier = {6,(State*)&S55_Cidentifier};
+struct S54rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cidentifier S54rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_Ridentifier_}
+ }// end of reduce table
+};
+yacco2::State S54_Cidentifier = //State's vectored into symbol: "Rstart_char"
+{54
+,0,(Shift_entry*)&S54ase_Cidentifier
+,0,0,(Shift_tbl*)&S54st_Cidentifier,(Reduce_tbl*)&S54rt_Cidentifier,0,0,0};
+struct S55rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cidentifier S55rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_Rid_suffix_}
+ }// end of reduce table
+};
+yacco2::State S55_Cidentifier = //State's vectored into symbol: "|+|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cidentifier,0,0,0};
+struct S56rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cidentifier S56rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_Ridentifier_}
+ }// end of reduce table
+};
+yacco2::State S56_Cidentifier = //State's vectored into symbol: "Rid_suffix"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cidentifier,0,0,0};
+struct S57rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cidentifier S57rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs1_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S57_Cidentifier = //State's vectored into symbol: "RUPPER_A_M"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cidentifier,0,0,0};
+struct S58rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cidentifier S58rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs2_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S58_Cidentifier = //State's vectored into symbol: "RUPPER_N_Z"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Cidentifier,0,0,0};
+struct S59rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cidentifier S59rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs3_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S59_Cidentifier = //State's vectored into symbol: "Rlower_a_m"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cidentifier,0,0,0};
+struct S60rtd_Cidentifier{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cidentifier S60rt_Cidentifier = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cidentifier,Cidentifier::rhs4_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S60_Cidentifier = //State's vectored into symbol: "Rlower_n_z"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Cidentifier,0,0,0};
diff --git a/web/yacco2/compiler/grammars/int_no.cpp b/web/yacco2/compiler/grammars/int_no.cpp
new file mode 100644
index 0000000000..2f781b8a96
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_no.cpp
@@ -0,0 +1,108 @@
+/*
+ File: int_no.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "int_no.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_int_no;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Cint_no::
+ Cint_no()
+ :yacco2::CAbs_fsm
+ ("int_no.lex"
+ ,"1.0"
+ ,"3 mar 2003"
+ ,false
+ ,"Integer number lexer."
+ ,"Fri Jan 30 18:55:13 2015 "
+ ,S1_Cint_no){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cint_no::~Cint_no(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cint_no::failed(){
+ return false;
+ }
+ void Cint_no::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cint_no::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+};
+Rint_no::Rint_no(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rint_no",0,Cint_no::R_Rint_no_,P,false,false){
+}
+
+void Rint_no::sr1(){
+
+ Cint_no* fsm = (Cint_no*)rule_info__.parser__->fsm_tbl__;
+ long lno = strtol(fsm->ddd_,0,10);
+ if (errno == ERANGE){
+ Err_bad_int_no* sym = new Err_bad_int_no;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ }else{
+ T_int_no* sym = new T_int_no(lno);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ }
+
+}
+
+Rdec_no::Rdec_no(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdec_no",0,Cint_no::R_Rdec_no_,P,false,false){
+}
+
+Rdigit::Rdigit(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdigit",0,Cint_no::R_Rdigit_,P,false,false){
+}
+
+void Rdigit::op(){
+ sstrace_rulesss
+
+ Cint_no* fsm = (Cint_no*)rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
diff --git a/web/yacco2/compiler/grammars/int_no.fsc b/web/yacco2/compiler/grammars/int_no.fsc
new file mode 100644
index 0000000000..df2e5da66d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_no.fsc
@@ -0,0 +1,29 @@
+/*
+ File: int_no.fsc
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+transitive n
+grammar-name "int_no"
+name-space "NS_int_no"
+thread-name "TH_int_no"
+monolithic n
+file-name "int_no.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 10
+ raw_0
+ raw_1
+ raw_2
+ raw_3
+ raw_4
+ raw_5
+ raw_6
+ raw_7
+ raw_8
+ raw_9
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Integer number lexer."
diff --git a/web/yacco2/compiler/grammars/int_no.h b/web/yacco2/compiler/grammars/int_no.h
new file mode 100644
index 0000000000..acd03dcd82
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_no.h
@@ -0,0 +1,92 @@
+/*
+ File: int_no.h
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#ifndef __int_no_h__
+#define __int_no_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include <stdlib.h>
+#include <errno.h>
+#include <limits.h>
+
+extern yacco2::Thread_entry ITH_int_no;
+
+extern yacco2::State S1_Cint_no;
+namespace NS_int_no {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_int_no(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_int_no(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Cint_no: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rint_no_ = 569//start_of_rule_list + 0
+ ,rhs1_Rint_no_ = 1
+ ,R_Rdec_no_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdec_no_ = 2
+ ,rhs2_Rdec_no_ = 3
+ ,R_Rdigit_ = 571//start_of_rule_list + 4
+ ,rhs1_Rdigit_ = 4
+ ,rhs2_Rdigit_ = 5
+ ,rhs3_Rdigit_ = 6
+ ,rhs4_Rdigit_ = 7
+ ,rhs5_Rdigit_ = 8
+ ,rhs6_Rdigit_ = 9
+ ,rhs7_Rdigit_ = 10
+ ,rhs8_Rdigit_ = 11
+ ,rhs9_Rdigit_ = 12
+ ,rhs10_Rdigit_ = 13
+ };
+ //no of la sets = 2
+ //no of states = 15
+ Cint_no();
+ ~Cint_no();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+
+ };
+struct Rint_no;
+struct Rdec_no;
+struct Rdigit;
+struct Rint_no:public yacco2::CAbs_lr1_sym {
+ Rint_no(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdec_no:public yacco2::CAbs_lr1_sym {
+ Rdec_no(yacco2::Parser* P);
+ public:
+};
+
+struct Rdigit:public yacco2::CAbs_lr1_sym {
+ Rdigit(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/int_no.lex b/web/yacco2/compiler/grammars/int_no.lex
new file mode 100644
index 0000000000..ae21f82416
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_no.lex
@@ -0,0 +1,92 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: int_no.lex
+Dates: 3-mar-2003
+Purpose: recognize long integer
+Returned: T_int_no
+ Err_bad_int_no
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |int_no| thread.\fbreak
+Recognize long integer.
+Does a conversion for validity only.
+Data returned in text form.
+@/
+fsm
+(fsm-id "int_no.lex",fsm-filename int_no,fsm-namespace NS_int_no
+,fsm-class Cint_no{
+ user-prefix-declaration
+#include <stdlib.h>
+#include <errno.h>
+#include <limits.h>
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "3 mar 2003",fsm-debug "false"
+,fsm-comments "Integer number lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_int_no
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rint_no (){
+ -> Rdec_no |.| {
+ op
+ Cint_no* fsm = (Cint_no*)rule_info__.parser__->fsm_tbl__;
+ long lno = strtol(fsm->ddd_,0,10);
+ if (errno == ERANGE){
+ Err_bad_int_no* sym = new Err_bad_int_no;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ }else{
+ T_int_no* sym = new T_int_no(lno);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ }
+ ***
+ }
+}
+
+Rdec_no (){
+ -> Rdigit
+ -> Rdec_no Rdigit
+}
+
+Rdigit (
+lhs{
+ op
+ Cint_no* fsm = (Cint_no*)rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->ddd_[fsm->ddd_idx_] = sym->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/int_nosym.cpp b/web/yacco2/compiler/grammars/int_nosym.cpp
new file mode 100644
index 0000000000..a3e2c16387
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_nosym.cpp
@@ -0,0 +1,241 @@
+/*
+ File: int_nosym.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "int_no.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_int_no;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_int_no::TH_int_no(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_int_no;
+ NS_int_no::Cint_no Cint_no_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cint_no_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_int_no::PROC_TH_int_no(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_int_no";
+ static bool one_time(false);
+ static NS_int_no::Cint_no* NS_int_no_Cint_no_(0);// parallel-parser's fsm table
+ static Parser* NS_int_no_Cint_no_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_int_no_Cint_no_ = new NS_int_no::Cint_no();// parallel-parser's fsm table
+ NS_int_no_Cint_no_parser = new Parser(*NS_int_no_Cint_no_,Caller_pp);
+ }
+ proc_parser = NS_int_no_Cint_no_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cint_no::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rint_no_:{
+ Rint_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rint_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rint_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdec_no_:{
+ Rdec_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rdec_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdec_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdec_no_:{
+ Rdec_no* sym;
+ if(re->rule_ == 0){
+ sym = new Rdec_no(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdec_no*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rdigit_:{
+ Rdigit* sym;
+ if(re->rule_ == 0){
+ sym = new Rdigit(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdigit*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/int_notbl.cpp b/web/yacco2/compiler/grammars/int_notbl.cpp
new file mode 100644
index 0000000000..884a4aeba3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/int_notbl.cpp
@@ -0,0 +1,285 @@
+/*
+ File: int_notbl.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "int_no.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_int_no;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+yacco2::UCHAR LA1_Cint_no[] ={
+3
+,0,32
+,7,255
+,8,3
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cint_no[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cint_no;
+extern yacco2::State S2_Cint_no;
+extern yacco2::State S3_Cint_no;
+extern yacco2::State S4_Cint_no;
+extern yacco2::State S5_Cint_no;
+extern yacco2::State S6_Cint_no;
+extern yacco2::State S7_Cint_no;
+extern yacco2::State S8_Cint_no;
+extern yacco2::State S9_Cint_no;
+extern yacco2::State S10_Cint_no;
+extern yacco2::State S11_Cint_no;
+extern yacco2::State S12_Cint_no;
+extern yacco2::State S13_Cint_no;
+extern yacco2::State S14_Cint_no;
+extern yacco2::State S15_Cint_no;
+struct S1std_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[13];
+};
+S1std_Cint_no S1st_Cint_no = {
+ 13
+ ,
+ {// start of table
+ {56,(State*)&S2_Cint_no} // shift sym: raw_0
+ ,{57,(State*)&S3_Cint_no} // shift sym: raw_1
+ ,{58,(State*)&S4_Cint_no} // shift sym: raw_2
+ ,{59,(State*)&S5_Cint_no} // shift sym: raw_3
+ ,{60,(State*)&S6_Cint_no} // shift sym: raw_4
+ ,{61,(State*)&S7_Cint_no} // shift sym: raw_5
+ ,{62,(State*)&S8_Cint_no} // shift sym: raw_6
+ ,{63,(State*)&S9_Cint_no} // shift sym: raw_7
+ ,{64,(State*)&S10_Cint_no} // shift sym: raw_8
+ ,{65,(State*)&S11_Cint_no} // shift sym: raw_9
+ ,{569,(State*)&S1_Cint_no} // accept sym: Rint_no
+ ,{570,(State*)&S12_Cint_no} // shift sym: Rdec_no
+ ,{571,(State*)&S15_Cint_no} // shift sym: Rdigit
+ }// end of shift table
+};
+yacco2::State S1_Cint_no = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cint_no,0,0,0,0};
+struct S2rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cint_no S2rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs1_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S2_Cint_no = //State's vectored into symbol: "0"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cint_no,0,0,0};
+struct S3rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cint_no S3rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs2_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S3_Cint_no = //State's vectored into symbol: "1"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cint_no,0,0,0};
+struct S4rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cint_no S4rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs3_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S4_Cint_no = //State's vectored into symbol: "2"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cint_no,0,0,0};
+struct S5rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cint_no S5rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs4_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S5_Cint_no = //State's vectored into symbol: "3"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cint_no,0,0,0};
+struct S6rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cint_no S6rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs5_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S6_Cint_no = //State's vectored into symbol: "4"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cint_no,0,0,0};
+struct S7rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cint_no S7rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs6_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S7_Cint_no = //State's vectored into symbol: "5"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cint_no,0,0,0};
+struct S8rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cint_no S8rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs7_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S8_Cint_no = //State's vectored into symbol: "6"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cint_no,0,0,0};
+struct S9rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cint_no S9rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs8_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S9_Cint_no = //State's vectored into symbol: "7"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cint_no,0,0,0};
+struct S10rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cint_no S10rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs9_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S10_Cint_no = //State's vectored into symbol: "8"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cint_no,0,0,0};
+struct S11rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cint_no S11rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs10_Rdigit_}
+ }// end of reduce table
+};
+yacco2::State S11_Cint_no = //State's vectored into symbol: "9"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cint_no,0,0,0};
+struct S12std_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[12];
+};
+S12std_Cint_no S12st_Cint_no = {
+ 12
+ ,
+ {// start of table
+ {5,(State*)&S13_Cint_no} // shift sym: LR1_invisible_shift_operator
+ ,{56,(State*)&S2_Cint_no} // shift sym: raw_0
+ ,{57,(State*)&S3_Cint_no} // shift sym: raw_1
+ ,{58,(State*)&S4_Cint_no} // shift sym: raw_2
+ ,{59,(State*)&S5_Cint_no} // shift sym: raw_3
+ ,{60,(State*)&S6_Cint_no} // shift sym: raw_4
+ ,{61,(State*)&S7_Cint_no} // shift sym: raw_5
+ ,{62,(State*)&S8_Cint_no} // shift sym: raw_6
+ ,{63,(State*)&S9_Cint_no} // shift sym: raw_7
+ ,{64,(State*)&S10_Cint_no} // shift sym: raw_8
+ ,{65,(State*)&S11_Cint_no} // shift sym: raw_9
+ ,{571,(State*)&S14_Cint_no} // shift sym: Rdigit
+ }// end of shift table
+};
+yacco2::Shift_entry S12ise_Cint_no = {5,(State*)&S13_Cint_no};
+yacco2::State S12_Cint_no = //State's vectored into symbol: "Rdec_no"
+{12
+,0,0,(Shift_entry*)&S12ise_Cint_no
+,0,(Shift_tbl*)&S12st_Cint_no,0,0,0,0};
+struct S13rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cint_no S13rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cint_no,Cint_no::rhs1_Rint_no_}
+ }// end of reduce table
+};
+yacco2::State S13_Cint_no = //State's vectored into symbol: "|.|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cint_no,0,0,0};
+struct S14rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cint_no S14rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs2_Rdec_no_}
+ }// end of reduce table
+};
+yacco2::State S14_Cint_no = //State's vectored into symbol: "Rdigit"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cint_no,0,0,0};
+struct S15rtd_Cint_no{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cint_no S15rt_Cint_no = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cint_no,Cint_no::rhs1_Rdec_no_}
+ }// end of reduce table
+};
+yacco2::State S15_Cint_no = //State's vectored into symbol: "Rdigit"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cint_no,0,0,0};
diff --git a/web/yacco2/compiler/grammars/la_expr.cpp b/web/yacco2/compiler/grammars/la_expr.cpp
new file mode 100644
index 0000000000..0bf85416b8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr.cpp
@@ -0,0 +1,447 @@
+/*
+ File: la_expr.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Cla_expr::
+ Cla_expr()
+ :yacco2::CAbs_fsm
+ ("la_expr.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse the lookahead expression after chaffe removed."
+ ,"Fri Jan 30 18:55:13 2015 "
+ ,S1_Cla_expr){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ gps_for_error_reporting_ = 0;
+
+ }
+
+Cla_expr::~Cla_expr(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cla_expr::failed(){
+ return false;
+ }
+ void Cla_expr::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ gps_for_error_reporting_ = 0;
+
+}
+int Cla_expr::rhs_to_rules_mapping_[12] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+ ,4 // subrule 10 for rule 5
+ ,5 // subrule 11 for rule 6
+};
+
+ void Cla_expr::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cla_expr::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cla_expr::unionize_sets(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set,T_IN_STBL_SET_type* B_set){
+ if(A_set->find(STBL_T_ITEMS[LR1_Eolr]) !=A_set->end()){
+ Add_to_set->insert(A_set->begin(),A_set->end());
+ return;
+ }
+ if(B_set->find(STBL_T_ITEMS[LR1_Eolr]) !=B_set->end()){
+ Add_to_set->insert(B_set->begin(),B_set->end());
+ return;
+ }
+ Add_to_set->insert(A_set->begin(),A_set->end());
+ Add_to_set->insert(B_set->begin(),B_set->end());
+ }
+ void Cla_expr::explode_eolr(T_IN_STBL_SET_type* A_set){
+ A_set->clear();
+ T_enum_phrase* e_p = O2_T_ENUM_PHASE;
+ A_set->insert(STBL_T_ITEMS[LR1_Eog]);// eog
+
+ int tt = e_p->total_enumerate();
+ for(int x=8;x<tt;++x){// balance of meta Ts bypassed. Start from RC
+ A_set->insert(STBL_T_ITEMS[x]);
+ }
+ }
+ void Cla_expr::set_differences(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set){
+ if(A_set->find(STBL_T_ITEMS[LR1_Eolr]) !=A_set->end()){
+ explode_eolr(A_set);
+ }
+ if(B_set->find(STBL_T_ITEMS[LR1_Eolr]) !=B_set->end()){
+ explode_eolr(B_set);
+ }
+ if(A_set->empty() == true){
+ CAbs_lr1_sym* sym = new Err_empty_set_removal_in_la_expr;
+ sym->set_rc(*gps_for_error_reporting_,__FILE__,__LINE__);
+ parser__->set_stop_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE_FSM(*sym);
+ parser__->set_abort_parse(true);
+ }
+
+ T_IN_STBL_SET_ITER_type Ai = A_set->begin();
+ T_IN_STBL_SET_ITER_type Aie = A_set->end();
+ T_IN_STBL_SET_ITER_type Bie = B_set->end();
+
+ T_IN_STBL_SET_ITER_type AinBi;
+ for(;Ai != Aie;++Ai){
+ AinBi = B_set->find(*Ai);
+ if(AinBi != Bie){
+ continue; // bypass
+ }
+ Add_to_set->insert(*Ai);
+ }
+ }
+ void Cla_expr::add_element_to_set(T_in_stbl* Elem,T_IN_STBL_SET_type* Set_to_add_to){
+ if(Set_to_add_to->find(STBL_T_ITEMS[LR1_Eolr]) != Set_to_add_to->end()) return;
+ if(Elem == STBL_T_ITEMS[LR1_Eolr]){
+ Set_to_add_to->clear();
+ }
+ Set_to_add_to->insert(Elem);
+ }
+
+ void Cla_expr::add_rule_to_set
+ (NS_yacco2_terminals::rule_def* Rule
+ ,T_IN_STBL_SET_type* Set_to_add_to
+ ,std::set<int>* Rules_already_processed){
+ using namespace NS_yacco2_terminals;
+ int r_id = Rule->enum_id();
+ if(Rules_already_processed->find(r_id) !=Rules_already_processed->end()) return;
+ Rules_already_processed->insert(r_id);
+ AST* r_t = Rule->rule_s_tree();
+ set<yacco2::INT> elem_filter;
+ elem_filter.insert(NS_yacco2_T_enum::T_Enum::T_T_subrule_def_);
+ tok_can_ast_functor ast_functor;
+ ast_prefix_wbreadth_only pwbo(*r_t,&ast_functor,&elem_filter,true);
+ tok_can<AST*> tok_can(pwbo);
+ for (int xxx = 0;tok_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx){
+ T_subrule_def* sr_def = (T_subrule_def*)tok_can.operator[](xxx);
+ vector<CAbs_lr1_sym*>* elems_list = sr_def->subrule_elems();
+ CAbs_lr1_sym* sym = (*elems_list)[0];
+ int id = sym->enumerated_id__;
+ switch(id){
+ case NS_yacco2_T_enum::T_Enum::T_T_eosubrule_: break;
+ case NS_yacco2_T_enum::T_Enum::T_refered_T_: {
+ refered_T* rt = (refered_T*)sym;
+ add_element_to_set(rt->t_in_stbl(),Set_to_add_to);
+ break;
+ }
+ case NS_yacco2_T_enum::T_Enum::T_refered_rule_: {
+ refered_rule* rt = (refered_rule*)sym;
+ rule_def* r = rt->Rule_in_stbl()->r_def();
+ add_rule_to_set(r,Set_to_add_to,Rules_already_processed);
+ break;
+ }
+ default:{
+ }
+ }
+
+ }
+ }
+
+Rla_expr::Rla_expr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rla_expr",0,Cla_expr::R_Rla_expr_,P,false,false){
+}
+
+void Rla_expr::sr1(){
+ struct SF{
+ Re* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ LR1_eog* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ if(sf->p1__->fset_.empty() == true){
+ CAbs_lr1_sym* sym = new Err_la_expr_calc_empty_set;
+ sym->set_rc(*fsm->gps_for_error_reporting_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+ T_parallel_parser_phrase* la_ph = O2_PP_PHASE;
+ T_parallel_la_boundary* la = la_ph->la_bndry();
+ la->la_first_set(sf->p1__->fset_);
+ la->cweb_la_srce_expr((const char*)&fsm->ddd_);
+
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Cla_expr::R_Re_,P,false,false){
+}
+
+void Re::ctor(){
+
+ fset_.clear();
+
+}
+void Re::sr1(){
+ struct SF{
+ Re* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rplus* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rt* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fset_.clear();
+ fsm->unionize_sets(&fset_,&sf->p1__->fset_,&sf->p3__->fset_);
+
+}
+
+void Re::sr2(){
+ struct SF{
+ Re* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rminus* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rt* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fset_.clear();
+ fsm->set_differences(&fset_,&sf->p1__->fset_,&sf->p3__->fset_);
+
+}
+
+void Re::sr4(){
+ struct SF{
+ Rt* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ fset_.clear();
+ fset_.insert(sf->p1__->fset_.begin(),sf->p1__->fset_.end());
+
+}
+
+Rerr_bad_oper::Rerr_bad_oper(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerr_bad_oper",0,Cla_expr::R_Rerr_bad_oper_,P,false,false){
+}
+
+void Rerr_bad_oper::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_bad_operator_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+Rt::Rt(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt",0,Cla_expr::R_Rt_,P,false,false){
+}
+
+void Rt::ctor(){
+
+ fset_.clear();
+
+}
+void Rt::sr1(){
+ struct SF{
+ T_in_stbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ T_terminal_def* dt = sf->p1__->t_def();
+ fsm->copy_kstr_into_buffer(" ");
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(dt->t_name()->c_str(),xlate_file);
+ fsm->copy_kstr_into_buffer(xlate_file);
+ fset_.clear();
+ fset_.insert(sf->p1__);
+
+}
+
+void Rt::sr2(){
+ struct SF{
+ rule_in_stbl* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ rule_def* rt = sf->p1__->r_def();
+ fsm->copy_kstr_into_buffer(" ");
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(rt->rule_name()->c_str(),xlate_file);
+ fsm->copy_kstr_into_buffer(xlate_file);
+
+ std::set<int> already_processed_rules;
+ fsm->add_rule_to_set(rt,&fset_,&already_processed_rules);
+
+}
+
+void Rt::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ int id = sf->p1__->enumerated_id__;
+ switch(id){
+ case T_Enum::T_LR1_all_shift_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|+|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_invisible_shift_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|.|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_parallel_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|||$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_fset_transience_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|t|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+
+ case T_Enum::T_LR1_reduce_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|r|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ default:{
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ rule_info__.parser__->set_stop_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+ }
+
+}
+
+Rminus::Rminus(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus",0,Cla_expr::R_Rminus_,P,false,false){
+}
+
+void Rminus::sr1(){
+ struct SF{
+ raw_minus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->gps_for_error_reporting_=sf->p1__;
+ fsm->copy_kstr_into_buffer(" $-$");
+
+}
+
+Rplus::Rplus(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rplus",0,Cla_expr::R_Rplus_,P,false,false){
+}
+
+void Rplus::sr1(){
+
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $+$");
+
+}
+
diff --git a/web/yacco2/compiler/grammars/la_expr.fsc b/web/yacco2/compiler/grammars/la_expr.fsc
new file mode 100644
index 0000000000..b1cd79314d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr.fsc
@@ -0,0 +1,22 @@
+/*
+ File: la_expr.fsc
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+transitive n
+grammar-name "la_expr"
+name-space "NS_la_expr"
+thread-name "Cla_expr"
+monolithic y
+file-name "la_expr.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ LR1_all_shift_operator
+ T_in_stbl
+ rule_in_stbl
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Parse the lookahead expression after chaffe removed."
diff --git a/web/yacco2/compiler/grammars/la_expr.h b/web/yacco2/compiler/grammars/la_expr.h
new file mode 100644
index 0000000000..c574838c04
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr.h
@@ -0,0 +1,138 @@
+/*
+ File: la_expr.h
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#ifndef __la_expr_h__
+#define __la_expr_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cla_expr;
+namespace NS_la_expr {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Cla_expr: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rla_expr_ = 569//start_of_rule_list + 0
+ ,rhs1_Rla_expr_ = 1
+ ,R_Re_ = 570//start_of_rule_list + 2
+ ,rhs1_Re_ = 2
+ ,rhs2_Re_ = 3
+ ,rhs3_Re_ = 4
+ ,rhs4_Re_ = 5
+ ,R_Rerr_bad_oper_ = 571//start_of_rule_list + 4
+ ,rhs1_Rerr_bad_oper_ = 6
+ ,R_Rt_ = 572//start_of_rule_list + 6
+ ,rhs1_Rt_ = 7
+ ,rhs2_Rt_ = 8
+ ,rhs3_Rt_ = 9
+ ,R_Rminus_ = 573//start_of_rule_list + 8
+ ,rhs1_Rminus_ = 10
+ ,R_Rplus_ = 574//start_of_rule_list + 10
+ ,rhs1_Rplus_ = 11
+ };
+ //no of la sets = 3
+ //no of states = 15
+ Cla_expr();
+ ~Cla_expr();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[12];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ yacco2::CAbs_lr1_sym* gps_for_error_reporting_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ void unionize_sets(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set);
+ void set_differences(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set);
+ void explode_eolr(T_IN_STBL_SET_type* A_set);
+ void add_element_to_set(T_in_stbl* Elem,T_IN_STBL_SET_type* Set_to_add_to);
+ void add_rule_to_set
+ (NS_yacco2_terminals::rule_def* Rule
+ ,T_IN_STBL_SET_type* Set_to_add_to
+ ,std::set<int>* Rules_already_processed);
+
+ };
+struct Rla_expr;
+struct Re;
+struct Rerr_bad_oper;
+struct Rt;
+struct Rminus;
+struct Rplus;
+struct Rla_expr:public yacco2::CAbs_lr1_sym {
+ Rla_expr(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ void ctor();
+
+ public:
+ T_IN_STBL_SET_type fset_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr4();
+};
+
+struct Rerr_bad_oper:public yacco2::CAbs_lr1_sym {
+ Rerr_bad_oper(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt:public yacco2::CAbs_lr1_sym {
+ Rt(yacco2::Parser* P);
+ void ctor();
+
+ public:
+ T_IN_STBL_SET_type fset_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rminus:public yacco2::CAbs_lr1_sym {
+ Rminus(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rplus:public yacco2::CAbs_lr1_sym {
+ Rplus(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/la_expr.lex b/web/yacco2/compiler/grammars/la_expr.lex
new file mode 100644
index 0000000000..d8484a893f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr.lex
@@ -0,0 +1,443 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: la_expr.lex
+Dates: 20 May 2005
+Purpose: Grammar's look ahead boundary expression syntax
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |la_expr| grammar.\fbreak
+Evaluate the lookahead expression making sure
+that the elements are well formed.
+It's output is a set of enumerated values of Terminals
+that is deposited into |T_parallel_la_boundary|'s |la_first_set_|.
+|la_expr_lexical| creates its input token container.
+As a help to my outputting of the CWEB document,
+i rebuild the source la expression while parsing it
+and also deposit it back into |T_parallel_la_boundary|'s |cweb_la_srce_expr|.
+This source expression gets outputted as part of a thread's cweb doc's banner.
+\fbreak
+Let's review the problem:\fbreak
+There are ``+'' or ``-'' operators that add or remove elements from the set.
+How can the removal operator exist when Terminal elements are played with?
+There are 2 situations that define groups of elements:\fbreak
+\ptindent{1) eolr---a terminal representing all terminals including self}
+\ptindent{2) rule---where 1st element of each subrule is a terminal or a rule}
+The interesting part is recursion of a rule containing a rule.
+Of course recurse is devine.
+A subtlty creeps in on the use of the ``eolr'' terminal.
+It was created to lower fat-city of lookahead sets
+and to save the Carpal Tunnel Syndrome caused by typing.
+If the ``eolr'' is the only terminal present in the lookahead expression
+ then it's singular.
+When operators are applied to it, it deconsolidates all its contents
+minus itself to allow for the operators to become effective.
+For example A - eolr + B is a round about way to just have B in its set.
+This could be taken as an error but i'm in a ``benign state of mind''
+as the song goes.
+
+Let's review what ``eolr'' can stand for.
+If the lookahead boundary takes on all contexts,
+then it represents all terminals:
+no refinement to the run context is needed.
+This is a lookahead(0) context.
+This could be represented by the empty set but
+i didn't want to complicate the parsing algorithm to deal
+with this situation and so it's a xxx(1) lookahead
+where u plug in your favorite
+bottomup algo descriptin in place of the hootch.
+When refinement to the contents within the lookahead
+boundary is required,
+the ``eolr'' is followed
+by the subtraction operator to remove the ambiguous component(s)
+from the boundary: ambiguity only shows up when
+lring the grammar. The ``eolr'' coupled with the removal operator
+ is not a universal rule but is dictated by
+the amount of effort the grammar writer needs
+to declare the lookahead boundary.
+For the explicit coders, each specific terminal can be stated
+by the addition operator
+but as an aid to the grammar writer
+a rule definition can do the same thing and reduce
+the size of the written lookahead expression.
+This coding indirection can be more
+explicit by intent of a well chosen rule's name.
+It costs a bit more in coding a rule definition but it is more flexible
+in modification and in the reading of a grammar.
+A rule definition is allowed where its only purpose is use within
+a lookahead expression.
+One can still define rules and not use them: a bit
+ of junk code or dangling thoughts...
+but to each their own.
+\O2 only honks when an undefined rule is referenced in a subrule.\fbreak
+\fbreak
+Bugs:\fbreak
+The |set_difference| algorithm is buggy with MS.
+So write my own!
+The bugs are:\fbreak
+ \ptindent{1) does not work A $-$ B where B is empty}
+ \ptindent{2) A $-$ B have data and the resulting set is empty}
+Item 2 throws an error: ``map/set iterators are not incrementable'' from VS2005.
+\fbreak
+set\_difference(A\_set$\rightarrow$begin(),A\_set$\rightarrow$end()
+,B\_set$\rightarrow$begin(),B\_set$\rightarrow$end(),fset\_.begin());
+\fbreak
+Another misfortune sequential reading of a set is not gauranteed
+to be in ascending order. So use find probe to determine membership.
+\fbreak
+\fbreak
+Exploding ``eolr'':\fbreak
+It means use-all-terminals.
+What is considered a Terminal?
+Every terminal except itself and the meta terminals:
+\PARshift{}, \ALLshift,\QUEshift{}, \INVshift{}, \REDshift{}, \TRAshift{}.
+In parsing, the metaterminals represent contextual positions within the fsa state
+ that act as action triggers. They only get actioned if they are present within
+ the current fsa's parse state.
+ Their actions are ordered: shifts take precedence over reduce.
+ The first shift tried is the current token in the parse stream.
+ After this the metaterminals are tried in the following order: \fbreak
+ \ptindent{\INVshift{} acts as an epsilon}
+\ptindent{\ALLshift{} as the all shift}
+\ptindent{\REDshift{} represents in a reduced LA set the \PARshift{} operator}
+\ptindent{\TRAshift{} is the transience operator used by \O2's linker}
+\ptindent{\QUEshift{} is the wild error catching operator; the unexpected Tes}
+\fbreak
+Added support for Rule recycling as an new/delete optimization.
+
+As rules are recycled, make sure that any temporary variables are
+initialed properly or the part residues will haunt u.
+Basically cleared the temporary set variable |fset_| in |Rt| and |Ra| rules
+before its use.
+@/
+
+fsm
+(fsm-id "la_expr.lex"
+,fsm-filename la_expr
+,fsm-namespace NS_la_expr
+,fsm-class Cla_expr {
+ user-prefix-declaration
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ yacco2::CAbs_lr1_sym* gps_for_error_reporting_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ void unionize_sets(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set);
+ void set_differences(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set);
+ void explode_eolr(T_IN_STBL_SET_type* A_set);
+ void add_element_to_set(T_in_stbl* Elem,T_IN_STBL_SET_type* Set_to_add_to);
+ void add_rule_to_set
+ (NS_yacco2_terminals::rule_def* Rule
+ ,T_IN_STBL_SET_type* Set_to_add_to
+ ,std::set<int>* Rules_already_processed);
+ ***
+ user-implementation
+ void Cla_expr::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cla_expr::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cla_expr::unionize_sets(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set,T_IN_STBL_SET_type* B_set){
+ if(A_set->find(STBL_T_ITEMS[LR1_Eolr]) !=A_set->end()){
+ Add_to_set->insert(A_set->begin(),A_set->end());
+ return;
+ }
+ if(B_set->find(STBL_T_ITEMS[LR1_Eolr]) !=B_set->end()){
+ Add_to_set->insert(B_set->begin(),B_set->end());
+ return;
+ }
+ Add_to_set->insert(A_set->begin(),A_set->end());
+ Add_to_set->insert(B_set->begin(),B_set->end());
+ }
+ void Cla_expr::explode_eolr(T_IN_STBL_SET_type* A_set){
+ A_set->clear();
+ T_enum_phrase* e_p = O2_T_ENUM_PHASE;
+ A_set->insert(STBL_T_ITEMS[LR1_Eog]);// eog
+
+ int tt = e_p->total_enumerate();
+ for(int x=8;x<tt;++x){// balance of meta Ts bypassed. Start from RC
+ A_set->insert(STBL_T_ITEMS[x]);
+ }
+ }
+ void Cla_expr::set_differences(T_IN_STBL_SET_type* Add_to_set
+ ,T_IN_STBL_SET_type* A_set
+ ,T_IN_STBL_SET_type* B_set){
+ if(A_set->find(STBL_T_ITEMS[LR1_Eolr]) !=A_set->end()){
+ explode_eolr(A_set);
+ }
+ if(B_set->find(STBL_T_ITEMS[LR1_Eolr]) !=B_set->end()){
+ explode_eolr(B_set);
+ }
+ if(A_set->empty() == true){
+ CAbs_lr1_sym* sym = new Err_empty_set_removal_in_la_expr;
+ sym->set_rc(*gps_for_error_reporting_,__FILE__,__LINE__);
+ parser__->set_stop_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE_FSM(*sym);
+ parser__->set_abort_parse(true);
+ }
+
+ T_IN_STBL_SET_ITER_type Ai = A_set->begin();
+ T_IN_STBL_SET_ITER_type Aie = A_set->end();
+ T_IN_STBL_SET_ITER_type Bie = B_set->end();
+
+ T_IN_STBL_SET_ITER_type AinBi;
+ for(;Ai != Aie;++Ai){
+ AinBi = B_set->find(*Ai);
+ if(AinBi != Bie){
+ continue; // bypass
+ }
+ Add_to_set->insert(*Ai);
+ }
+ }
+ void Cla_expr::add_element_to_set(T_in_stbl* Elem,T_IN_STBL_SET_type* Set_to_add_to){
+ if(Set_to_add_to->find(STBL_T_ITEMS[LR1_Eolr]) != Set_to_add_to->end()) return;
+ if(Elem == STBL_T_ITEMS[LR1_Eolr]){
+ Set_to_add_to->clear();
+ }
+ Set_to_add_to->insert(Elem);
+ }
+
+ void Cla_expr::add_rule_to_set
+ (NS_yacco2_terminals::rule_def* Rule
+ ,T_IN_STBL_SET_type* Set_to_add_to
+ ,std::set<int>* Rules_already_processed){
+ using namespace NS_yacco2_terminals;
+ int r_id = Rule->enum_id();
+ if(Rules_already_processed->find(r_id) !=Rules_already_processed->end()) return;
+ Rules_already_processed->insert(r_id);
+ AST* r_t = Rule->rule_s_tree();
+ set<yacco2::INT> elem_filter;
+ elem_filter.insert(NS_yacco2_T_enum::T_Enum::T_T_subrule_def_);
+ tok_can_ast_functor ast_functor;
+ ast_prefix_wbreadth_only pwbo(*r_t,&ast_functor,&elem_filter,true);
+ tok_can<AST*> tok_can(pwbo);
+ for (int xxx = 0;tok_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx){
+ T_subrule_def* sr_def = (T_subrule_def*)tok_can.operator[](xxx);
+ vector<CAbs_lr1_sym*>* elems_list = sr_def->subrule_elems();
+ CAbs_lr1_sym* sym = (*elems_list)[0];
+ int id = sym->enumerated_id__;
+ switch(id){
+ case NS_yacco2_T_enum::T_Enum::T_T_eosubrule_: break;
+ case NS_yacco2_T_enum::T_Enum::T_refered_T_: {
+ refered_T* rt = (refered_T*)sym;
+ add_element_to_set(rt->t_in_stbl(),Set_to_add_to);
+ break;
+ }
+ case NS_yacco2_T_enum::T_Enum::T_refered_rule_: {
+ refered_rule* rt = (refered_rule*)sym;
+ rule_def* r = rt->Rule_in_stbl()->r_def();
+ add_rule_to_set(r,Set_to_add_to,Rules_already_processed);
+ break;
+ }
+ default:{
+ }
+ }
+
+ }
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ gps_for_error_reporting_ = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ gps_for_error_reporting_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse the lookahead expression after chaffe removed.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rla_expr (){
+ -> Re eog {
+ op
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ if(sf->p1__->fset_.empty() == true){
+ CAbs_lr1_sym* sym = new Err_la_expr_calc_empty_set;
+ sym->set_rc(*fsm->gps_for_error_reporting_,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+ T_parallel_parser_phrase* la_ph = O2_PP_PHASE;
+ T_parallel_la_boundary* la = la_ph->la_bndry();
+ la->la_first_set(sf->p1__->fset_);
+ la->cweb_la_srce_expr((const char*)&fsm->ddd_);
+ ***
+ }
+}
+
+Re (
+lhs {
+ user-declaration
+ public:
+ T_IN_STBL_SET_type fset_;
+ ***
+ constructor
+ fset_.clear();
+ ***
+ }
+ ){
+ -> Re Rplus Rt {
+ op
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fset_.clear();
+ fsm->unionize_sets(&fset_,&sf->p1__->fset_,&sf->p3__->fset_);
+ ***
+ }
+ -> Re Rminus Rt {
+ op
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fset_.clear();
+ fsm->set_differences(&fset_,&sf->p1__->fset_,&sf->p3__->fset_);
+ ***
+ }
+ -> Re Rerr_bad_oper
+ -> Rt {
+ op
+ fset_.clear();
+ fset_.insert(sf->p1__->fset_.begin(),sf->p1__->fset_.end());
+ ***
+ }
+}
+
+Rerr_bad_oper (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_bad_operator_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+}
+
+Rt (
+lhs {
+ user-declaration
+ public:
+ T_IN_STBL_SET_type fset_;
+ ***
+ constructor
+ fset_.clear();
+ ***
+ }
+){
+ -> "T-in-stbl" {
+ op
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ T_terminal_def* dt = sf->p1__->t_def();
+ fsm->copy_kstr_into_buffer(" ");
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(dt->t_name()->c_str(),xlate_file);
+ fsm->copy_kstr_into_buffer(xlate_file);
+ fset_.clear();
+ fset_.insert(sf->p1__);
+ ***
+ }
+ -> "rule-in-stbl" {
+ op
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ rule_def* rt = sf->p1__->r_def();
+ fsm->copy_kstr_into_buffer(" ");
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(rt->rule_name()->c_str(),xlate_file);
+ fsm->copy_kstr_into_buffer(xlate_file);
+
+ std::set<int> already_processed_rules;
+ fsm->add_rule_to_set(rt,&fset_,&already_processed_rules);
+ ***
+ }
+ -> |+| {
+ op
+ fset_.clear();
+ using namespace NS_yacco2_terminals;
+ int id = sf->p1__->enumerated_id__;
+ switch(id){
+ case T_Enum::T_LR1_all_shift_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|+|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_invisible_shift_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|.|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_parallel_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|||$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ case T_Enum::T_LR1_fset_transience_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|t|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+
+ case T_Enum::T_LR1_reduce_operator_:{
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $|r|$");
+ fsm->add_element_to_set(STBL_T_ITEMS[id],&fset_);
+ break;
+ }
+ default:{
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ rule_info__.parser__->set_stop_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+ }
+ ***
+ }
+}
+Rminus (){
+ -> - {
+ op
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->gps_for_error_reporting_=sf->p1__;
+ fsm->copy_kstr_into_buffer(" $-$");
+ ***
+ }
+}
+Rplus (){
+ -> + {
+ op
+ Cla_expr* fsm = (Cla_expr*)rule_info__.parser__->fsm_tbl__;
+ fsm->copy_kstr_into_buffer(" $+$");
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/la_expr_lexical.cpp b/web/yacco2/compiler/grammars/la_expr_lexical.cpp
new file mode 100644
index 0000000000..1650e70d37
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexical.cpp
@@ -0,0 +1,187 @@
+/*
+ File: la_expr_lexical.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_lexical.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_lexical;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Cla_expr_lexical::
+ Cla_expr_lexical()
+ :yacco2::CAbs_fsm
+ ("la_expr_lexical.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Lexer: 2nd stage lexing for lookahead: stripper..."
+ ,"Fri Jan 30 18:55:13 2015 "
+ ,S1_Cla_expr_lexical){
+
+ }
+
+Cla_expr_lexical::~Cla_expr_lexical(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cla_expr_lexical::failed(){
+ return false;
+ }
+ void Cla_expr_lexical::op(){
+}
+int Cla_expr_lexical::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+};
+Rstripper::Rstripper(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstripper",0,Cla_expr_lexical::R_Rstripper_,P,false,false){
+}
+
+void Rstripper::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+Rtoks::Rtoks(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoks",0,Cla_expr_lexical::R_Rtoks_,P,false,false){
+}
+
+Rtok::Rtok(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtok",0,Cla_expr_lexical::R_Rtok_,P,false,false){
+}
+
+void Rtok::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->identifier()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+
+}
+
+void Rtok::sr2(){
+ struct SF{
+ T_c_string* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->c_string()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+
+}
+
+void Rtok::sr3(){
+ struct SF{
+ T_c_literal* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->c_literal()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+
+}
+
+void Rtok::sr4(){
+ struct SF{
+ raw_plus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+
+}
+
+void Rtok::sr5(){
+ struct SF{
+ raw_minus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+
+}
+
+void Rtok::sr6(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/la_expr_lexical.fsc b/web/yacco2/compiler/grammars/la_expr_lexical.fsc
new file mode 100644
index 0000000000..86f79595e7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexical.fsc
@@ -0,0 +1,25 @@
+/*
+ File: la_expr_lexical.fsc
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+transitive n
+grammar-name "la_expr_lexical"
+name-space "NS_la_expr_lexical"
+thread-name "Cla_expr_lexical"
+monolithic y
+file-name "la_expr_lexical.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 6
+ LR1_all_shift_operator
+ raw_plus
+ raw_minus
+ T_c_literal
+ T_c_string
+ T_identifier
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Lexer: 2nd stage lexing for lookahead: stripper..."
diff --git a/web/yacco2/compiler/grammars/la_expr_lexical.h b/web/yacco2/compiler/grammars/la_expr_lexical.h
new file mode 100644
index 0000000000..2601dafd7b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexical.h
@@ -0,0 +1,81 @@
+/*
+ File: la_expr_lexical.h
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#ifndef __la_expr_lexical_h__
+#define __la_expr_lexical_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "yacco2_stbl.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cla_expr_lexical;
+namespace NS_la_expr_lexical {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Cla_expr_lexical: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstripper_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstripper_ = 1
+ ,R_Rtoks_ = 570//start_of_rule_list + 2
+ ,rhs1_Rtoks_ = 2
+ ,rhs2_Rtoks_ = 3
+ ,R_Rtok_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtok_ = 4
+ ,rhs2_Rtok_ = 5
+ ,rhs3_Rtok_ = 6
+ ,rhs4_Rtok_ = 7
+ ,rhs5_Rtok_ = 8
+ ,rhs6_Rtok_ = 9
+ };
+ //no of la sets = 2
+ //no of states = 11
+ Cla_expr_lexical();
+ ~Cla_expr_lexical();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+ };
+struct Rstripper;
+struct Rtoks;
+struct Rtok;
+struct Rstripper:public yacco2::CAbs_lr1_sym {
+ Rstripper(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rtoks:public yacco2::CAbs_lr1_sym {
+ Rtoks(yacco2::Parser* P);
+ public:
+};
+
+struct Rtok:public yacco2::CAbs_lr1_sym {
+ Rtok(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/la_expr_lexical.lex b/web/yacco2/compiler/grammars/la_expr_lexical.lex
new file mode 100644
index 0000000000..49160a2c93
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexical.lex
@@ -0,0 +1,124 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: la_expr_lexical.lex
+Dates: 20 May 2005
+Purpose: Grammar's lookahead boundary expression resolves
+ identifier, c-string and c-literal by the symbol table into
+ a T-in-stbl or rule-in-stbl.
+ The operators '+' and '-' remain as raw characters.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |la_expr_lexical| grammar.\fbreak
+Verify the tokens ``identifier'', ``c-string'', and ``c-literal''
+against the symbol table using their literal values as keys.
+The found vocabulary symbol is then put into the token container
+for |la_expr| grammar digestion.
+
+Remember, the ``parallel-parser'' construct containing the lookahead expression
+comes before the Grammar's vocabulary definitions.
+These input token scraps are raw lexems without a symbol table translation
+that now need symbol table evaluation.
+@/
+
+fsm
+(fsm-id "la_expr_lexical.lex"
+,fsm-filename la_expr_lexical
+,fsm-namespace NS_la_expr_lexical
+,fsm-class Cla_expr_lexical{
+ user-prefix-declaration
+#include "yacco2_stbl.h"
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Lexer: 2nd stage lexing for lookahead: stripper...")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rstripper (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> Rtoks eog
+}
+
+Rtoks (){
+ -> Rtok
+ -> Rtoks Rtok
+}
+
+Rtok (){
+ -> "identifier" {
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->identifier()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+ ***
+ }
+ -> "c-string" {
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->c_string()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+ ***
+ }
+ -> "c-literal" {
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p1__->c_literal()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_bad_term_in_la_expr;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*report_card.tbl_entry_->symbol_);
+ ***
+ }
+ -> "+" {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+ ***
+ }
+ -> "-" {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+ ***
+ }
+ -> |+| {
+/@
+ Drain the swamp.
+ Accept the keywords, LR k constants, and raw characters.
+@/
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/la_expr_lexicalsym.cpp b/web/yacco2/compiler/grammars/la_expr_lexicalsym.cpp
new file mode 100644
index 0000000000..1dad063360
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexicalsym.cpp
@@ -0,0 +1,160 @@
+/*
+ File: la_expr_lexicalsym.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_lexical.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_lexical;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cla_expr_lexical::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstripper_:{
+ Rstripper* sym;
+ if(re->rule_ == 0){
+ sym = new Rstripper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstripper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rtoks_:{
+ Rtoks* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtoks_:{
+ Rtoks* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/la_expr_lexicaltbl.cpp b/web/yacco2/compiler/grammars/la_expr_lexicaltbl.cpp
new file mode 100644
index 0000000000..e100e173e0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_lexicaltbl.cpp
@@ -0,0 +1,215 @@
+/*
+ File: la_expr_lexicaltbl.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_lexical.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_lexical;// grammar's ns
+// first set terminals
+// LR1_eog
+// LR1_all_shift_operator
+// raw_plus
+// raw_minus
+// T_c_literal
+// T_c_string
+// T_identifier
+yacco2::UCHAR LA1_Cla_expr_lexical[] ={
+3
+,0,66
+,6,40
+,34,140
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cla_expr_lexical[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cla_expr_lexical;
+extern yacco2::State S2_Cla_expr_lexical;
+extern yacco2::State S3_Cla_expr_lexical;
+extern yacco2::State S4_Cla_expr_lexical;
+extern yacco2::State S5_Cla_expr_lexical;
+extern yacco2::State S6_Cla_expr_lexical;
+extern yacco2::State S7_Cla_expr_lexical;
+extern yacco2::State S8_Cla_expr_lexical;
+extern yacco2::State S9_Cla_expr_lexical;
+extern yacco2::State S10_Cla_expr_lexical;
+extern yacco2::State S11_Cla_expr_lexical;
+struct S1std_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S1std_Cla_expr_lexical S1st_Cla_expr_lexical = {
+ 9
+ ,
+ {// start of table
+ {6,(State*)&S2_Cla_expr_lexical} // shift sym: LR1_all_shift_operator
+ ,{51,(State*)&S3_Cla_expr_lexical} // shift sym: raw_plus
+ ,{53,(State*)&S4_Cla_expr_lexical} // shift sym: raw_minus
+ ,{274,(State*)&S5_Cla_expr_lexical} // shift sym: T_c_literal
+ ,{275,(State*)&S6_Cla_expr_lexical} // shift sym: T_c_string
+ ,{279,(State*)&S7_Cla_expr_lexical} // shift sym: T_identifier
+ ,{569,(State*)&S1_Cla_expr_lexical} // accept sym: Rstripper
+ ,{570,(State*)&S8_Cla_expr_lexical} // shift sym: Rtoks
+ ,{571,(State*)&S11_Cla_expr_lexical} // shift sym: Rtok
+ }// end of shift table
+};
+yacco2::Shift_entry S1ase_Cla_expr_lexical = {6,(State*)&S2_Cla_expr_lexical};
+yacco2::State S1_Cla_expr_lexical = //State's vectored into symbol: " No symbol"
+{1
+,0,(Shift_entry*)&S1ase_Cla_expr_lexical
+,0,0,(Shift_tbl*)&S1st_Cla_expr_lexical,0,0,0,0};
+struct S2rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cla_expr_lexical S2rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs6_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S2_Cla_expr_lexical = //State's vectored into symbol: "|+|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cla_expr_lexical,0,0,0};
+struct S3rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cla_expr_lexical S3rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs4_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S3_Cla_expr_lexical = //State's vectored into symbol: "+"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cla_expr_lexical,0,0,0};
+struct S4rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cla_expr_lexical S4rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs5_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S4_Cla_expr_lexical = //State's vectored into symbol: "-"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cla_expr_lexical,0,0,0};
+struct S5rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cla_expr_lexical S5rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs3_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S5_Cla_expr_lexical = //State's vectored into symbol: "c-literal"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cla_expr_lexical,0,0,0};
+struct S6rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cla_expr_lexical S6rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs2_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S6_Cla_expr_lexical = //State's vectored into symbol: "c-string"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cla_expr_lexical,0,0,0};
+struct S7rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cla_expr_lexical S7rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs1_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S7_Cla_expr_lexical = //State's vectored into symbol: "identifier"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cla_expr_lexical,0,0,0};
+struct S8std_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[8];
+};
+S8std_Cla_expr_lexical S8st_Cla_expr_lexical = {
+ 8
+ ,
+ {// start of table
+ {1,(State*)&S9_Cla_expr_lexical} // shift sym: LR1_eog
+ ,{6,(State*)&S2_Cla_expr_lexical} // shift sym: LR1_all_shift_operator
+ ,{51,(State*)&S3_Cla_expr_lexical} // shift sym: raw_plus
+ ,{53,(State*)&S4_Cla_expr_lexical} // shift sym: raw_minus
+ ,{274,(State*)&S5_Cla_expr_lexical} // shift sym: T_c_literal
+ ,{275,(State*)&S6_Cla_expr_lexical} // shift sym: T_c_string
+ ,{279,(State*)&S7_Cla_expr_lexical} // shift sym: T_identifier
+ ,{571,(State*)&S10_Cla_expr_lexical} // shift sym: Rtok
+ }// end of shift table
+};
+yacco2::Shift_entry S8ase_Cla_expr_lexical = {6,(State*)&S2_Cla_expr_lexical};
+yacco2::State S8_Cla_expr_lexical = //State's vectored into symbol: "Rtoks"
+{8
+,0,(Shift_entry*)&S8ase_Cla_expr_lexical
+,0,0,(Shift_tbl*)&S8st_Cla_expr_lexical,0,0,0,0};
+struct S9rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cla_expr_lexical S9rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cla_expr_lexical,Cla_expr_lexical::rhs1_Rstripper_}
+ }// end of reduce table
+};
+yacco2::State S9_Cla_expr_lexical = //State's vectored into symbol: "eog"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cla_expr_lexical,0,0,0};
+struct S10rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cla_expr_lexical S10rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs2_Rtoks_}
+ }// end of reduce table
+};
+yacco2::State S10_Cla_expr_lexical = //State's vectored into symbol: "Rtok"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cla_expr_lexical,0,0,0};
+struct S11rtd_Cla_expr_lexical{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cla_expr_lexical S11rt_Cla_expr_lexical = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_lexical,Cla_expr_lexical::rhs1_Rtoks_}
+ }// end of reduce table
+};
+yacco2::State S11_Cla_expr_lexical = //State's vectored into symbol: "Rtok"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cla_expr_lexical,0,0,0};
diff --git a/web/yacco2/compiler/grammars/la_expr_src.cpp b/web/yacco2/compiler/grammars/la_expr_src.cpp
new file mode 100644
index 0000000000..62e67a68d1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_src.cpp
@@ -0,0 +1,303 @@
+/*
+ File: la_expr_src.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_src.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_src;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 5;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+}
+ Cla_expr_src::
+ Cla_expr_src()
+ :yacco2::CAbs_fsm
+ ("la_expr_src.lex"
+ ,"1.0"
+ ,"30 dec 2002"
+ ,false
+ ,"Lexer: 1st stage of Lookahead source expression\n converted into raw character tokens for post evaluation."
+ ,"Fri Jan 30 18:55:13 2015 "
+ ,S1_Cla_expr_src){
+
+ exp_ = 0;
+
+ }
+
+Cla_expr_src::~Cla_expr_src(){
+
+ for(int x = 0;x < 5;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cla_expr_src::failed(){
+ return false;
+ }
+ void Cla_expr_src::op(){
+ exp_ = new T_la_expr_src;
+ exp_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_on();
+
+}
+int Cla_expr_src::rhs_to_rules_mapping_[20] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,3 // subrule 16 for rule 4
+ ,3 // subrule 17 for rule 4
+ ,4 // subrule 18 for rule 5
+ ,4 // subrule 19 for rule 5
+};
+Rla_expr_src::Rla_expr_src(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rla_expr_src",0,Cla_expr_src::R_Rla_expr_src_,P,false,false){
+}
+
+Rtoks::Rtoks(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoks",0,Cla_expr_src::R_Rtoks_,P,false,false){
+}
+
+Rtok::Rtok(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtok",0,Cla_expr_src::R_Rtok_,P,false,false){
+}
+
+void Rtok::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+
+}
+
+void Rtok::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_literal* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+
+}
+
+void Rtok::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eocode* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ T_eocode* k = sf->p2__;
+ k->set_auto_delete(true);
+ rule_info__.parser__->set_use_all_shift_off();
+ fsm->exp_->la_tok_can()->push_back(*yacco2::PTR_LR1_eog__);
+ fsm->exp_->la_tok_can()->push_back(*yacco2::PTR_LR1_eog__);
+ RSVP(fsm->exp_);
+ fsm->exp_=0;
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rtok::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+
+}
+
+void Rtok::sr5(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* la_sym = sf->p1__;
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ int id = la_sym->enumerated_id__;
+ if(id == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_no_end_of_code;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->exp_->la_tok_can()->push_back(*la_sym);
+
+}
+
+void Rtok::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rtok::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rtok::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rtok::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+
+}
+
+void Rtok::sr10(){
+ struct SF{
+ raw_plus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p1__);
+
+}
+
+void Rtok::sr11(){
+ struct SF{
+ raw_minus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p1__);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cla_expr_src::R_Rlint_,P,false,false){
+}
+
+Rla_minus::Rla_minus(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rla_minus",0,Cla_expr_src::R_Rla_minus_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/la_expr_src.fsc b/web/yacco2/compiler/grammars/la_expr_src.fsc
new file mode 100644
index 0000000000..b7376abe2f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_src.fsc
@@ -0,0 +1,35 @@
+/*
+ File: la_expr_src.fsc
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+transitive y
+grammar-name "la_expr_src"
+name-space "NS_la_expr_src"
+thread-name "TH_la_expr_src"
+monolithic n
+file-name "la_expr_src.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ LR1_fset_transience_operator
+ LR1_all_shift_operator
+ raw_plus
+ raw_minus
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 6
+ NS_c_literal::TH_c_literal
+ NS_identifier::TH_identifier
+ NS_la_lrk_T::TH_la_lrk_T
+ NS_c_string::TH_c_string
+ NS_o2_code_end::TH_o2_code_end
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 6
+ NS_c_literal::TH_c_literal
+ NS_c_string::TH_c_string
+ NS_identifier::TH_identifier
+ NS_la_lrk_T::TH_la_lrk_T
+ NS_lint_balls::TH_lint_balls
+ NS_o2_code_end::TH_o2_code_end
+end-list-of-used-threads
+fsm-comments
+"Lexer: 1st stage of Lookahead source expression\n converted into raw character tokens for post evaluation."
diff --git a/web/yacco2/compiler/grammars/la_expr_src.h b/web/yacco2/compiler/grammars/la_expr_src.h
new file mode 100644
index 0000000000..13894fb854
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_src.h
@@ -0,0 +1,125 @@
+/*
+ File: la_expr_src.h
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#ifndef __la_expr_src_h__
+#define __la_expr_src_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "c_string.h"
+#include "identifier.h"
+#include "c_literal.h"
+#include "lint_balls.h"
+#include "o2_code_end.h"
+#include "la_lrk_T.h"
+#include "yacco2_stbl.h"
+using namespace NS_yacco2_terminals;
+
+extern yacco2::Thread_entry ITH_la_expr_src;
+
+extern yacco2::State S1_Cla_expr_src;
+namespace NS_la_expr_src {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_la_expr_src(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_la_expr_src(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[5];
+};
+class Cla_expr_src: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rla_expr_src_ = 569//start_of_rule_list + 0
+ ,rhs1_Rla_expr_src_ = 1
+ ,R_Rtoks_ = 570//start_of_rule_list + 2
+ ,rhs1_Rtoks_ = 2
+ ,rhs2_Rtoks_ = 3
+ ,R_Rtok_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtok_ = 4
+ ,rhs2_Rtok_ = 5
+ ,rhs3_Rtok_ = 6
+ ,rhs4_Rtok_ = 7
+ ,rhs5_Rtok_ = 8
+ ,rhs6_Rtok_ = 9
+ ,rhs7_Rtok_ = 10
+ ,rhs8_Rtok_ = 11
+ ,rhs9_Rtok_ = 12
+ ,rhs10_Rtok_ = 13
+ ,rhs11_Rtok_ = 14
+ ,rhs12_Rtok_ = 15
+ ,R_Rlint_ = 572//start_of_rule_list + 6
+ ,rhs1_Rlint_ = 16
+ ,rhs2_Rlint_ = 17
+ ,R_Rla_minus_ = 573//start_of_rule_list + 8
+ ,rhs1_Rla_minus_ = 18
+ ,rhs2_Rla_minus_ = 19
+ };
+ //no of la sets = 2
+ //no of states = 19
+ Cla_expr_src();
+ ~Cla_expr_src();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[20];
+
+ public:
+ T_la_expr_src* exp_;
+
+ };
+struct Rla_expr_src;
+struct Rtoks;
+struct Rtok;
+struct Rlint;
+struct Rla_minus;
+struct Rla_expr_src:public yacco2::CAbs_lr1_sym {
+ Rla_expr_src(yacco2::Parser* P);
+ public:
+};
+
+struct Rtoks:public yacco2::CAbs_lr1_sym {
+ Rtoks(yacco2::Parser* P);
+ public:
+};
+
+struct Rtok:public yacco2::CAbs_lr1_sym {
+ Rtok(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rla_minus:public yacco2::CAbs_lr1_sym {
+ Rla_minus(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/la_expr_src.lex b/web/yacco2/compiler/grammars/la_expr_src.lex
new file mode 100644
index 0000000000..d84cf0060c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_src.lex
@@ -0,0 +1,184 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: la_expr_src.lex
+dates: 20 May 2005
+Purpose: Extract Grammar's lookahead expression
+ chopped up into strings, literals, identifiers, operators
+ and placed into a tok_can container for post compilation.
+errors: Err_no_end_of_code
+ Err_comment_overrun
+ Err_bad_eos
+ Err_bad_esc
+ Err_no_syntax_code_present
+ Err_bad_term_in_la_expr
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |la_expr_src| Thread.\fbreak
+Extract Grammar's lookahead expression
+chopped up into strings, literals, identifiers,
+operators, lr k constants, and keywords to be
+ placed into a |tok_can| container for post compilation.
+ Apart from the keywords and lr k constants,
+ the tokens are processed before the definition of a
+ grammar's vocabulary --- Terminals and Rules.
+ It is only after the grammar is completely parsed that
+ these tokens can be verified against the symbol table.
+
+ The parsed expression is placed into a token container of |T_la_expr_src|
+by |parallel_parser_phrase_th| for post evaluation by
+|la_expr_lexical| and |la_expr| grammars.
+@/
+fsm
+(fsm-id "la_expr_src.lex",fsm-filename la_expr_src,fsm-namespace NS_la_expr_src
+,fsm-class Cla_expr_src{
+ user-prefix-declaration
+#include "c_string.h"
+#include "identifier.h"
+#include "c_literal.h"
+#include "lint_balls.h"
+#include "o2_code_end.h"
+#include "la_lrk_T.h"
+#include "yacco2_stbl.h"
+using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public:
+ T_la_expr_src* exp_;
+ ***
+ op
+ exp_ = new T_la_expr_src;
+ exp_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_on();
+ ***
+ constructor
+ exp_ = 0;
+ ***
+ }
+,fsm-version "1.0",fsm-date "30 dec 2002",fsm-debug "false"
+,fsm-comments "Lexer: 1st stage of Lookahead source expression\n converted into raw character tokens for post evaluation.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_la_expr_src
+ ***
+ parallel-la-boundary
+eog
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rla_expr_src (){
+ -> Rtoks
+}
+
+Rtoks (){
+ -> Rtok
+ -> Rtoks Rtok
+}
+
+Rtok (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+ ***
+ }
+ -> ||| "c-literal" NS_c_literal::TH_c_literal{
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+ ***
+ }
+ -> ||| "#***" NS_o2_code_end::TH_o2_code_end{
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ T_eocode* k = sf->p2__;
+ k->set_auto_delete(true);
+ rule_info__.parser__->set_use_all_shift_off();
+ fsm->exp_->la_tok_can()->push_back(*yacco2::PTR_LR1_eog__);
+ fsm->exp_->la_tok_can()->push_back(*yacco2::PTR_LR1_eog__);
+ RSVP(fsm->exp_);
+ fsm->exp_=0;
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| identifier NS_identifier::TH_identifier{
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+ ***
+ }
+ -> |+| {
+/@
+Watch out for overrun.
+@/
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* la_sym = sf->p1__;
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ int id = la_sym->enumerated_id__;
+ if(id == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_no_end_of_code;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->exp_->la_tok_can()->push_back(*la_sym);
+ ***
+ }
+ -> ||| "bad eos" NULL {// errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL {// errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {// errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NS_la_lrk_T::TH_la_lrk_T {
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p2__);
+ ***
+ }
+ -> "+" {
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p1__);
+ ***
+ }
+ -> "-" {
+ op
+ Cla_expr_src* fsm = (Cla_expr_src*)rule_info__.parser__->fsm_tbl__;
+ fsm->exp_->la_tok_can()->push_back(*sf->p1__);
+ ***
+ }
+ -> Rlint
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ -> |.|
+}
+
+Rla_minus (){
+ -> "+"
+ -> "-"
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/la_expr_srcsym.cpp b/web/yacco2/compiler/grammars/la_expr_srcsym.cpp
new file mode 100644
index 0000000000..4fe6289da5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_srcsym.cpp
@@ -0,0 +1,325 @@
+/*
+ File: la_expr_srcsym.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_src.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_src;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_la_expr_src::TH_la_expr_src(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_la_expr_src;
+ NS_la_expr_src::Cla_expr_src Cla_expr_src_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cla_expr_src_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_la_expr_src::PROC_TH_la_expr_src(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_la_expr_src";
+ static bool one_time(false);
+ static NS_la_expr_src::Cla_expr_src* NS_la_expr_src_Cla_expr_src_(0);// parallel-parser's fsm table
+ static Parser* NS_la_expr_src_Cla_expr_src_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_la_expr_src_Cla_expr_src_ = new NS_la_expr_src::Cla_expr_src();// parallel-parser's fsm table
+ NS_la_expr_src_Cla_expr_src_parser = new Parser(*NS_la_expr_src_Cla_expr_src_,Caller_pp);
+ }
+ proc_parser = NS_la_expr_src_Cla_expr_src_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cla_expr_src::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rla_expr_src_:{
+ Rla_expr_src* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_expr_src(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_expr_src*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rtoks_:{
+ Rtoks* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtoks_:{
+ Rtoks* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtok_:{
+ Rtok* sym;
+ if(re->rule_ == 0){
+ sym = new Rtok(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtok*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rla_minus_:{
+ Rla_minus* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_minus(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_minus*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rla_minus_:{
+ Rla_minus* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_minus(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_minus*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/la_expr_srctbl.cpp b/web/yacco2/compiler/grammars/la_expr_srctbl.cpp
new file mode 100644
index 0000000000..599d482b00
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_expr_srctbl.cpp
@@ -0,0 +1,376 @@
+/*
+ File: la_expr_srctbl.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr_src.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr_src;// grammar's ns
+// first set terminals
+// LR1_eog
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// LR1_all_shift_operator
+// raw_plus
+// raw_minus
+yacco2::UCHAR LA1_Cla_expr_src[] ={
+2
+,0,114
+,6,40
+};
+// LR1_eog
+yacco2::UCHAR LA2_Cla_expr_src[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Cla_expr_src;
+extern yacco2::State S2_Cla_expr_src;
+struct S2ttd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[6];
+};
+S2ttd_Cla_expr_src S2tt_Cla_expr_src = {
+ 6 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_la_lrk_T
+ ,(yacco2::Thread_entry*)&ITH_c_literal
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_o2_code_end
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Cla_expr_src;
+extern yacco2::State S4_Cla_expr_src;
+extern yacco2::State S5_Cla_expr_src;
+extern yacco2::State S6_Cla_expr_src;
+extern yacco2::State S7_Cla_expr_src;
+extern yacco2::State S8_Cla_expr_src;
+extern yacco2::State S9_Cla_expr_src;
+extern yacco2::State S10_Cla_expr_src;
+extern yacco2::State S11_Cla_expr_src;
+extern yacco2::State S12_Cla_expr_src;
+extern yacco2::State S13_Cla_expr_src;
+extern yacco2::State S14_Cla_expr_src;
+extern yacco2::State S15_Cla_expr_src;
+extern yacco2::State S16_Cla_expr_src;
+extern yacco2::State S17_Cla_expr_src;
+extern yacco2::State S18_Cla_expr_src;
+extern yacco2::State S19_Cla_expr_src;
+struct S1std_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S1std_Cla_expr_src S1st_Cla_expr_src = {
+ 9
+ ,
+ {// start of table
+ {3,(State*)&S2_Cla_expr_src} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S12_Cla_expr_src} // shift sym: LR1_invisible_shift_operator
+ ,{6,(State*)&S13_Cla_expr_src} // shift sym: LR1_all_shift_operator
+ ,{51,(State*)&S14_Cla_expr_src} // shift sym: raw_plus
+ ,{53,(State*)&S15_Cla_expr_src} // shift sym: raw_minus
+ ,{569,(State*)&S1_Cla_expr_src} // accept sym: Rla_expr_src
+ ,{570,(State*)&S16_Cla_expr_src} // shift sym: Rtoks
+ ,{571,(State*)&S19_Cla_expr_src} // shift sym: Rtok
+ ,{572,(State*)&S18_Cla_expr_src} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cla_expr_src = {3,(State*)&S2_Cla_expr_src};
+yacco2::Shift_entry S1ise_Cla_expr_src = {5,(State*)&S12_Cla_expr_src};
+yacco2::Shift_entry S1ase_Cla_expr_src = {6,(State*)&S13_Cla_expr_src};
+yacco2::State S1_Cla_expr_src = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cla_expr_src,(Shift_entry*)&S1ase_Cla_expr_src
+,(Shift_entry*)&S1ise_Cla_expr_src
+,0,(Shift_tbl*)&S1st_Cla_expr_src,0,(State_s_thread_tbl*)&S2tt_Cla_expr_src,0,0};
+struct S2std_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S2std_Cla_expr_src S2st_Cla_expr_src = {
+ 9
+ ,
+ {// start of table
+ {6,(State*)&S3_Cla_expr_src} // shift sym: LR1_all_shift_operator
+ ,{274,(State*)&S4_Cla_expr_src} // shift sym: T_c_literal
+ ,{275,(State*)&S5_Cla_expr_src} // shift sym: T_c_string
+ ,{279,(State*)&S6_Cla_expr_src} // shift sym: T_identifier
+ ,{284,(State*)&S7_Cla_expr_src} // shift sym: T_eocode
+ ,{375,(State*)&S8_Cla_expr_src} // shift sym: T_lint
+ ,{394,(State*)&S9_Cla_expr_src} // shift sym: Err_bad_eos
+ ,{395,(State*)&S10_Cla_expr_src} // shift sym: Err_bad_esc
+ ,{396,(State*)&S11_Cla_expr_src} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::Shift_entry S2ase_Cla_expr_src = {6,(State*)&S3_Cla_expr_src};
+yacco2::State S2_Cla_expr_src = //State's vectored into symbol: "|||"
+{2
+,0,(Shift_entry*)&S2ase_Cla_expr_src
+,0,0,(Shift_tbl*)&S2st_Cla_expr_src,0,0,0,0};
+struct S3rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cla_expr_src S3rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs9_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S3_Cla_expr_src = //State's vectored into symbol: "|+|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cla_expr_src,0,0,0};
+struct S4rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cla_expr_src S4rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs2_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S4_Cla_expr_src = //State's vectored into symbol: "c-literal"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cla_expr_src,0,0,0};
+struct S5rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cla_expr_src S5rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs1_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S5_Cla_expr_src = //State's vectored into symbol: "c-string"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cla_expr_src,0,0,0};
+struct S6rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cla_expr_src S6rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs4_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S6_Cla_expr_src = //State's vectored into symbol: "identifier"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cla_expr_src,0,0,0};
+struct S7rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cla_expr_src S7rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs3_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S7_Cla_expr_src = //State's vectored into symbol: "#***"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cla_expr_src,0,0,0};
+struct S8rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cla_expr_src S8rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S8_Cla_expr_src = //State's vectored into symbol: "lint"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cla_expr_src,0,0,0};
+struct S9rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cla_expr_src S9rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs6_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S9_Cla_expr_src = //State's vectored into symbol: "bad eos"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cla_expr_src,0,0,0};
+struct S10rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cla_expr_src S10rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs7_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S10_Cla_expr_src = //State's vectored into symbol: "bad esc"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cla_expr_src,0,0,0};
+struct S11rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cla_expr_src S11rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs8_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S11_Cla_expr_src = //State's vectored into symbol: "comment-overrun"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cla_expr_src,0,0,0};
+struct S12rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cla_expr_src S12rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S12_Cla_expr_src = //State's vectored into symbol: "|.|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cla_expr_src,0,0,0};
+struct S13rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cla_expr_src S13rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs5_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S13_Cla_expr_src = //State's vectored into symbol: "|+|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cla_expr_src,0,0,0};
+struct S14rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cla_expr_src S14rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs10_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S14_Cla_expr_src = //State's vectored into symbol: "+"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cla_expr_src,0,0,0};
+struct S15rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cla_expr_src S15rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs11_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S15_Cla_expr_src = //State's vectored into symbol: "-"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cla_expr_src,0,0,0};
+struct S16std_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S16std_Cla_expr_src S16st_Cla_expr_src = {
+ 7
+ ,
+ {// start of table
+ {3,(State*)&S2_Cla_expr_src} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S12_Cla_expr_src} // shift sym: LR1_invisible_shift_operator
+ ,{6,(State*)&S13_Cla_expr_src} // shift sym: LR1_all_shift_operator
+ ,{51,(State*)&S14_Cla_expr_src} // shift sym: raw_plus
+ ,{53,(State*)&S15_Cla_expr_src} // shift sym: raw_minus
+ ,{571,(State*)&S17_Cla_expr_src} // shift sym: Rtok
+ ,{572,(State*)&S18_Cla_expr_src} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Cla_expr_src = {3,(State*)&S2_Cla_expr_src};
+yacco2::Shift_entry S16ise_Cla_expr_src = {5,(State*)&S12_Cla_expr_src};
+yacco2::Shift_entry S16ase_Cla_expr_src = {6,(State*)&S13_Cla_expr_src};
+struct S16rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cla_expr_src S16rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cla_expr_src,Cla_expr_src::rhs1_Rla_expr_src_}
+ }// end of reduce table
+};
+yacco2::State S16_Cla_expr_src = //State's vectored into symbol: "Rtoks"
+{16
+,(Shift_entry*)&S16pse_Cla_expr_src,(Shift_entry*)&S16ase_Cla_expr_src
+,(Shift_entry*)&S16ise_Cla_expr_src
+,0,(Shift_tbl*)&S16st_Cla_expr_src,(Reduce_tbl*)&S16rt_Cla_expr_src,(State_s_thread_tbl*)&S2tt_Cla_expr_src,0,0};
+struct S17rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cla_expr_src S17rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs2_Rtoks_}
+ }// end of reduce table
+};
+yacco2::State S17_Cla_expr_src = //State's vectored into symbol: "Rtok"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cla_expr_src,0,0,0};
+struct S18rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cla_expr_src S18rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs12_Rtok_}
+ }// end of reduce table
+};
+yacco2::State S18_Cla_expr_src = //State's vectored into symbol: "Rlint"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cla_expr_src,0,0,0};
+struct S19rtd_Cla_expr_src{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cla_expr_src S19rt_Cla_expr_src = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr_src,Cla_expr_src::rhs1_Rtoks_}
+ }// end of reduce table
+};
+yacco2::State S19_Cla_expr_src = //State's vectored into symbol: "Rtok"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cla_expr_src,0,0,0};
diff --git a/web/yacco2/compiler/grammars/la_exprsym.cpp b/web/yacco2/compiler/grammars/la_exprsym.cpp
new file mode 100644
index 0000000000..d9bf593b20
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_exprsym.cpp
@@ -0,0 +1,198 @@
+/*
+ File: la_exprsym.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cla_expr::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rla_expr_:{
+ Rla_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs4_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rerr_bad_oper_:{
+ Rerr_bad_oper* sym;
+ if(re->rule_ == 0){
+ sym = new Rerr_bad_oper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerr_bad_oper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rt_:{
+ Rt* sym;
+ if(re->rule_ == 0){
+ sym = new Rt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_:{
+ Rt* sym;
+ if(re->rule_ == 0){
+ sym = new Rt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_:{
+ Rt* sym;
+ if(re->rule_ == 0){
+ sym = new Rt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rminus_:{
+ Rminus* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rplus_:{
+ Rplus* sym;
+ if(re->rule_ == 0){
+ sym = new Rplus(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rplus*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/la_exprtbl.cpp b/web/yacco2/compiler/grammars/la_exprtbl.cpp
new file mode 100644
index 0000000000..7bb2cee77f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_exprtbl.cpp
@@ -0,0 +1,285 @@
+/*
+ File: la_exprtbl.cpp
+ Date and Time: Fri Jan 30 18:55:13 2015
+*/
+#include "la_expr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_expr;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_eog
+// raw_plus
+// raw_minus
+yacco2::UCHAR LA1_Cla_expr[] ={
+2
+,0,3
+,6,40
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cla_expr[] ={
+1
+,0,4
+};
+// LR1_all_shift_operator
+// T_in_stbl
+// rule_in_stbl
+yacco2::UCHAR LA3_Cla_expr[] ={
+2
+,0,64
+,43,5
+};
+extern yacco2::State S1_Cla_expr;
+extern yacco2::State S2_Cla_expr;
+extern yacco2::State S3_Cla_expr;
+extern yacco2::State S4_Cla_expr;
+extern yacco2::State S5_Cla_expr;
+extern yacco2::State S6_Cla_expr;
+extern yacco2::State S7_Cla_expr;
+extern yacco2::State S8_Cla_expr;
+extern yacco2::State S9_Cla_expr;
+extern yacco2::State S10_Cla_expr;
+extern yacco2::State S11_Cla_expr;
+extern yacco2::State S12_Cla_expr;
+extern yacco2::State S13_Cla_expr;
+extern yacco2::State S14_Cla_expr;
+extern yacco2::State S15_Cla_expr;
+struct S1std_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Cla_expr S1st_Cla_expr = {
+ 6
+ ,
+ {// start of table
+ {6,(State*)&S2_Cla_expr} // shift sym: LR1_all_shift_operator
+ ,{344,(State*)&S3_Cla_expr} // shift sym: T_in_stbl
+ ,{346,(State*)&S4_Cla_expr} // shift sym: rule_in_stbl
+ ,{569,(State*)&S1_Cla_expr} // accept sym: Rla_expr
+ ,{570,(State*)&S5_Cla_expr} // shift sym: Re
+ ,{572,(State*)&S15_Cla_expr} // shift sym: Rt
+ }// end of shift table
+};
+yacco2::Shift_entry S1ase_Cla_expr = {6,(State*)&S2_Cla_expr};
+yacco2::State S1_Cla_expr = //State's vectored into symbol: " No symbol"
+{1
+,0,(Shift_entry*)&S1ase_Cla_expr
+,0,0,(Shift_tbl*)&S1st_Cla_expr,0,0,0,0};
+struct S2rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cla_expr S2rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs3_Rt_}
+ }// end of reduce table
+};
+yacco2::State S2_Cla_expr = //State's vectored into symbol: "|+|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cla_expr,0,0,0};
+struct S3rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cla_expr S3rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs1_Rt_}
+ }// end of reduce table
+};
+yacco2::State S3_Cla_expr = //State's vectored into symbol: "T-in-stbl"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cla_expr,0,0,0};
+struct S4rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cla_expr S4rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs2_Rt_}
+ }// end of reduce table
+};
+yacco2::State S4_Cla_expr = //State's vectored into symbol: "rule-in-stbl"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cla_expr,0,0,0};
+struct S5std_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S5std_Cla_expr S5st_Cla_expr = {
+ 7
+ ,
+ {// start of table
+ {0,(State*)&S6_Cla_expr} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S7_Cla_expr} // shift sym: LR1_eog
+ ,{51,(State*)&S8_Cla_expr} // shift sym: raw_plus
+ ,{53,(State*)&S9_Cla_expr} // shift sym: raw_minus
+ ,{571,(State*)&S10_Cla_expr} // shift sym: Rerr_bad_oper
+ ,{573,(State*)&S11_Cla_expr} // shift sym: Rminus
+ ,{574,(State*)&S13_Cla_expr} // shift sym: Rplus
+ }// end of shift table
+};
+yacco2::Shift_entry S5qse_Cla_expr = {0,(State*)&S6_Cla_expr};
+yacco2::State S5_Cla_expr = //State's vectored into symbol: "Re"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cla_expr,0,0,0,(Shift_entry*)&S5qse_Cla_expr
+};
+struct S6rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cla_expr S6rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs1_Rerr_bad_oper_}
+ }// end of reduce table
+};
+yacco2::State S6_Cla_expr = //State's vectored into symbol: "|?|"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cla_expr,0,0,0};
+struct S7rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cla_expr S7rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cla_expr,Cla_expr::rhs1_Rla_expr_}
+ }// end of reduce table
+};
+yacco2::State S7_Cla_expr = //State's vectored into symbol: "eog"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cla_expr,0,0,0};
+struct S8rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cla_expr S8rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cla_expr,Cla_expr::rhs1_Rplus_}
+ }// end of reduce table
+};
+yacco2::State S8_Cla_expr = //State's vectored into symbol: "+"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cla_expr,0,0,0};
+struct S9rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cla_expr S9rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cla_expr,Cla_expr::rhs1_Rminus_}
+ }// end of reduce table
+};
+yacco2::State S9_Cla_expr = //State's vectored into symbol: "-"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cla_expr,0,0,0};
+struct S10rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cla_expr S10rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs3_Re_}
+ }// end of reduce table
+};
+yacco2::State S10_Cla_expr = //State's vectored into symbol: "Rerr_bad_oper"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cla_expr,0,0,0};
+struct S11std_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S11std_Cla_expr S11st_Cla_expr = {
+ 4
+ ,
+ {// start of table
+ {6,(State*)&S2_Cla_expr} // shift sym: LR1_all_shift_operator
+ ,{344,(State*)&S3_Cla_expr} // shift sym: T_in_stbl
+ ,{346,(State*)&S4_Cla_expr} // shift sym: rule_in_stbl
+ ,{572,(State*)&S12_Cla_expr} // shift sym: Rt
+ }// end of shift table
+};
+yacco2::Shift_entry S11ase_Cla_expr = {6,(State*)&S2_Cla_expr};
+yacco2::State S11_Cla_expr = //State's vectored into symbol: "Rminus"
+{11
+,0,(Shift_entry*)&S11ase_Cla_expr
+,0,0,(Shift_tbl*)&S11st_Cla_expr,0,0,0,0};
+struct S12rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cla_expr S12rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs2_Re_}
+ }// end of reduce table
+};
+yacco2::State S12_Cla_expr = //State's vectored into symbol: "Rt"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cla_expr,0,0,0};
+struct S13std_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S13std_Cla_expr S13st_Cla_expr = {
+ 4
+ ,
+ {// start of table
+ {6,(State*)&S2_Cla_expr} // shift sym: LR1_all_shift_operator
+ ,{344,(State*)&S3_Cla_expr} // shift sym: T_in_stbl
+ ,{346,(State*)&S4_Cla_expr} // shift sym: rule_in_stbl
+ ,{572,(State*)&S14_Cla_expr} // shift sym: Rt
+ }// end of shift table
+};
+yacco2::Shift_entry S13ase_Cla_expr = {6,(State*)&S2_Cla_expr};
+yacco2::State S13_Cla_expr = //State's vectored into symbol: "Rplus"
+{13
+,0,(Shift_entry*)&S13ase_Cla_expr
+,0,0,(Shift_tbl*)&S13st_Cla_expr,0,0,0,0};
+struct S14rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cla_expr S14rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs1_Re_}
+ }// end of reduce table
+};
+yacco2::State S14_Cla_expr = //State's vectored into symbol: "Rt"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cla_expr,0,0,0};
+struct S15rtd_Cla_expr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cla_expr S15rt_Cla_expr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_expr,Cla_expr::rhs4_Re_}
+ }// end of reduce table
+};
+yacco2::State S15_Cla_expr = //State's vectored into symbol: "Rt"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cla_expr,0,0,0};
diff --git a/web/yacco2/compiler/grammars/la_lrk_T.cpp b/web/yacco2/compiler/grammars/la_lrk_T.cpp
new file mode 100644
index 0000000000..adef01ff84
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_T.cpp
@@ -0,0 +1,185 @@
+/*
+ File: la_lrk_T.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "la_lrk_T.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_lrk_T;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Cla_lrk_T::
+ Cla_lrk_T()
+ :yacco2::CAbs_fsm
+ ("la_lrk_T.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"Unquoted lookahead source symbol recognizer."
+ ,"Fri Jan 30 18:55:14 2015 "
+ ,S1_Cla_lrk_T){
+
+ }
+
+Cla_lrk_T::~Cla_lrk_T(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cla_lrk_T::failed(){
+ return false;
+ }
+ void Cla_lrk_T::op(){
+}
+int Cla_lrk_T::rhs_to_rules_mapping_[16] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,0 // subrule 6 for rule 1
+ ,0 // subrule 7 for rule 1
+ ,0 // subrule 8 for rule 1
+ ,0 // subrule 9 for rule 1
+ ,0 // subrule 10 for rule 1
+ ,0 // subrule 11 for rule 1
+ ,0 // subrule 12 for rule 1
+ ,0 // subrule 13 for rule 1
+ ,0 // subrule 14 for rule 1
+ ,0 // subrule 15 for rule 1
+};
+Rla_lrk_T::Rla_lrk_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rla_lrk_T",0,Cla_lrk_T::R_Rla_lrk_T_,P,false,false){
+}
+
+void Rla_lrk_T::sr1(){
+
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr2(){
+
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr3(){
+
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr4(){
+
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr5(){
+
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr6(){
+
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr7(){
+
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr8(){
+
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr9(){
+
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr10(){
+
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr11(){
+
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr12(){
+
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr13(){
+
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr14(){
+
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+void Rla_lrk_T::sr15(){
+
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/la_lrk_T.fsc b/web/yacco2/compiler/grammars/la_lrk_T.fsc
new file mode 100644
index 0000000000..34dc764d55
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_T.fsc
@@ -0,0 +1,22 @@
+/*
+ File: la_lrk_T.fsc
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+transitive n
+grammar-name "la_lrk_T"
+name-space "NS_la_lrk_T"
+thread-name "TH_la_lrk_T"
+monolithic n
+file-name "la_lrk_T.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ raw_dbl_quote
+ raw_right_quote
+ raw_vertical_line
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Unquoted lookahead source symbol recognizer."
diff --git a/web/yacco2/compiler/grammars/la_lrk_T.h b/web/yacco2/compiler/grammars/la_lrk_T.h
new file mode 100644
index 0000000000..5d22111076
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_T.h
@@ -0,0 +1,83 @@
+/*
+ File: la_lrk_T.h
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#ifndef __la_lrk_T_h__
+#define __la_lrk_T_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_la_lrk_T;
+
+extern yacco2::State S1_Cla_lrk_T;
+namespace NS_la_lrk_T {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_la_lrk_T(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_la_lrk_T(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Cla_lrk_T: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rla_lrk_T_ = 569//start_of_rule_list + 0
+ ,rhs1_Rla_lrk_T_ = 1
+ ,rhs2_Rla_lrk_T_ = 2
+ ,rhs3_Rla_lrk_T_ = 3
+ ,rhs4_Rla_lrk_T_ = 4
+ ,rhs5_Rla_lrk_T_ = 5
+ ,rhs6_Rla_lrk_T_ = 6
+ ,rhs7_Rla_lrk_T_ = 7
+ ,rhs8_Rla_lrk_T_ = 8
+ ,rhs9_Rla_lrk_T_ = 9
+ ,rhs10_Rla_lrk_T_ = 10
+ ,rhs11_Rla_lrk_T_ = 11
+ ,rhs12_Rla_lrk_T_ = 12
+ ,rhs13_Rla_lrk_T_ = 13
+ ,rhs14_Rla_lrk_T_ = 14
+ ,rhs15_Rla_lrk_T_ = 15
+ };
+ //no of la sets = 1
+ //no of states = 46
+ Cla_lrk_T();
+ ~Cla_lrk_T();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[16];
+ };
+struct Rla_lrk_T;
+struct Rla_lrk_T:public yacco2::CAbs_lr1_sym {
+ Rla_lrk_T(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+ void sr15();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/la_lrk_T.lex b/web/yacco2/compiler/grammars/la_lrk_T.lex
new file mode 100644
index 0000000000..5f1d11cd1c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_T.lex
@@ -0,0 +1,147 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: la_lrk_T.lex
+dates: 17 Juin 2003
+Purpose: lookahead expression lrk symbols recognizer that are unquoted
+Returned: table entry
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |la_lrk_T| Thread.\fbreak
+Recognize the meta terminals of LR K and returns them.
+These are passed backed to the
+calling grammar |la_expr_src|.
+
+Added wolf in sheep's clothing: single and double quoted lrk strings.
+|la_expr_src| corrected to arbitrate on subset / superset:
+lrk string versus its general quoted string.
+@/
+fsm
+(fsm-id "la_lrk_T.lex",fsm-filename la_lrk_T,fsm-namespace NS_la_lrk_T
+,fsm-class Cla_lrk_T
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "Unquoted lookahead source symbol recognizer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_la_lrk_T
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rla_lrk_T () {
+ -> "|" "|" "|" {
+ op
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "\"" "|" "|" "|" "\"" {
+ op
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "'" "|" "|" "|" "'" {
+ op
+ CAbs_lr1_sym* sym = new LR1_parallel_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "|" "+" "|" {
+ op
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "\"" "|" "+" "|" "\"" {
+ op
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "'" "|" "+" "|" "'" {
+ op
+ CAbs_lr1_sym* sym = new LR1_all_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "|" "." "|" {
+ op
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "\"" "|" "." "|" "\"" {
+ op
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "'" "|" "." "|" "'" {
+ op
+ CAbs_lr1_sym* sym = new LR1_invisible_shift_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "|" "r" "|" {
+ op
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "\"" "|" "r" "|" "\"" {
+ op
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "'" "|" "r" "|" "'" {
+ op
+ CAbs_lr1_sym* sym = new LR1_reduce_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+
+ -> "|" "t" "|" {
+ op
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "\"" "|" "t" "|" "\"" {
+ op
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+ -> "'" "|" "t" "|" "'" {
+ op
+ CAbs_lr1_sym* sym = new LR1_fset_transience_operator;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/la_lrk_Tsym.cpp b/web/yacco2/compiler/grammars/la_lrk_Tsym.cpp
new file mode 100644
index 0000000000..75ca280250
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_Tsym.cpp
@@ -0,0 +1,273 @@
+/*
+ File: la_lrk_Tsym.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "la_lrk_T.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_lrk_T;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_la_lrk_T::TH_la_lrk_T(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_la_lrk_T;
+ NS_la_lrk_T::Cla_lrk_T Cla_lrk_T_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cla_lrk_T_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_la_lrk_T::PROC_TH_la_lrk_T(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_la_lrk_T";
+ static bool one_time(false);
+ static NS_la_lrk_T::Cla_lrk_T* NS_la_lrk_T_Cla_lrk_T_(0);// parallel-parser's fsm table
+ static Parser* NS_la_lrk_T_Cla_lrk_T_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_la_lrk_T_Cla_lrk_T_ = new NS_la_lrk_T::Cla_lrk_T();// parallel-parser's fsm table
+ NS_la_lrk_T_Cla_lrk_T_parser = new Parser(*NS_la_lrk_T_Cla_lrk_T_,Caller_pp);
+ }
+ proc_parser = NS_la_lrk_T_Cla_lrk_T_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cla_lrk_T::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr14();
+ return;}
+ case rhs15_Rla_lrk_T_:{
+ Rla_lrk_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rla_lrk_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rla_lrk_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr15();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/la_lrk_Ttbl.cpp b/web/yacco2/compiler/grammars/la_lrk_Ttbl.cpp
new file mode 100644
index 0000000000..7b0ce02531
--- /dev/null
+++ b/web/yacco2/compiler/grammars/la_lrk_Ttbl.cpp
@@ -0,0 +1,723 @@
+/*
+ File: la_lrk_Ttbl.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "la_lrk_T.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_la_lrk_T;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cla_lrk_T[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cla_lrk_T;
+extern yacco2::State S2_Cla_lrk_T;
+extern yacco2::State S3_Cla_lrk_T;
+extern yacco2::State S4_Cla_lrk_T;
+extern yacco2::State S5_Cla_lrk_T;
+extern yacco2::State S6_Cla_lrk_T;
+extern yacco2::State S7_Cla_lrk_T;
+extern yacco2::State S8_Cla_lrk_T;
+extern yacco2::State S9_Cla_lrk_T;
+extern yacco2::State S10_Cla_lrk_T;
+extern yacco2::State S11_Cla_lrk_T;
+extern yacco2::State S12_Cla_lrk_T;
+extern yacco2::State S13_Cla_lrk_T;
+extern yacco2::State S14_Cla_lrk_T;
+extern yacco2::State S15_Cla_lrk_T;
+extern yacco2::State S16_Cla_lrk_T;
+extern yacco2::State S17_Cla_lrk_T;
+extern yacco2::State S18_Cla_lrk_T;
+extern yacco2::State S19_Cla_lrk_T;
+extern yacco2::State S20_Cla_lrk_T;
+extern yacco2::State S21_Cla_lrk_T;
+extern yacco2::State S22_Cla_lrk_T;
+extern yacco2::State S23_Cla_lrk_T;
+extern yacco2::State S24_Cla_lrk_T;
+extern yacco2::State S25_Cla_lrk_T;
+extern yacco2::State S26_Cla_lrk_T;
+extern yacco2::State S27_Cla_lrk_T;
+extern yacco2::State S28_Cla_lrk_T;
+extern yacco2::State S29_Cla_lrk_T;
+extern yacco2::State S30_Cla_lrk_T;
+extern yacco2::State S31_Cla_lrk_T;
+extern yacco2::State S32_Cla_lrk_T;
+extern yacco2::State S33_Cla_lrk_T;
+extern yacco2::State S34_Cla_lrk_T;
+extern yacco2::State S35_Cla_lrk_T;
+extern yacco2::State S36_Cla_lrk_T;
+extern yacco2::State S37_Cla_lrk_T;
+extern yacco2::State S38_Cla_lrk_T;
+extern yacco2::State S39_Cla_lrk_T;
+extern yacco2::State S40_Cla_lrk_T;
+extern yacco2::State S41_Cla_lrk_T;
+extern yacco2::State S42_Cla_lrk_T;
+extern yacco2::State S43_Cla_lrk_T;
+extern yacco2::State S44_Cla_lrk_T;
+extern yacco2::State S45_Cla_lrk_T;
+extern yacco2::State S46_Cla_lrk_T;
+struct S1std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cla_lrk_T S1st_Cla_lrk_T = {
+ 4
+ ,
+ {// start of table
+ {42,(State*)&S2_Cla_lrk_T} // shift sym: raw_dbl_quote
+ ,{47,(State*)&S19_Cla_lrk_T} // shift sym: raw_right_quote
+ ,{132,(State*)&S36_Cla_lrk_T} // shift sym: raw_vertical_line
+ ,{569,(State*)&S1_Cla_lrk_T} // accept sym: Rla_lrk_T
+ }// end of shift table
+};
+yacco2::State S1_Cla_lrk_T = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cla_lrk_T,0,0,0,0};
+struct S2std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cla_lrk_T S2st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S3_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S2_Cla_lrk_T = //State's vectored into symbol: "\""
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cla_lrk_T,0,0,0,0};
+struct S3std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S3std_Cla_lrk_T S3st_Cla_lrk_T = {
+ 5
+ ,
+ {// start of table
+ {51,(State*)&S4_Cla_lrk_T} // shift sym: raw_plus
+ ,{54,(State*)&S7_Cla_lrk_T} // shift sym: raw_period
+ ,{122,(State*)&S10_Cla_lrk_T} // shift sym: raw_r
+ ,{124,(State*)&S13_Cla_lrk_T} // shift sym: raw_t
+ ,{132,(State*)&S16_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S3_Cla_lrk_T = //State's vectored into symbol: "|"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cla_lrk_T,0,0,0,0};
+struct S4std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Cla_lrk_T S4st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S5_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S4_Cla_lrk_T = //State's vectored into symbol: "+"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cla_lrk_T,0,0,0,0};
+struct S5std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cla_lrk_T S5st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S6_Cla_lrk_T} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S5_Cla_lrk_T = //State's vectored into symbol: "|"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cla_lrk_T,0,0,0,0};
+struct S6rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cla_lrk_T S6rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs5_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S6_Cla_lrk_T = //State's vectored into symbol: "\""
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cla_lrk_T,0,0,0};
+struct S7std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cla_lrk_T S7st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S8_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S7_Cla_lrk_T = //State's vectored into symbol: "."
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cla_lrk_T,0,0,0,0};
+struct S8std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cla_lrk_T S8st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S9_Cla_lrk_T} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S8_Cla_lrk_T = //State's vectored into symbol: "|"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cla_lrk_T,0,0,0,0};
+struct S9rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cla_lrk_T S9rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs8_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S9_Cla_lrk_T = //State's vectored into symbol: "\""
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cla_lrk_T,0,0,0};
+struct S10std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cla_lrk_T S10st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S11_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S10_Cla_lrk_T = //State's vectored into symbol: "r"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cla_lrk_T,0,0,0,0};
+struct S11std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Cla_lrk_T S11st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S12_Cla_lrk_T} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S11_Cla_lrk_T = //State's vectored into symbol: "|"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Cla_lrk_T,0,0,0,0};
+struct S12rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cla_lrk_T S12rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs11_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S12_Cla_lrk_T = //State's vectored into symbol: "\""
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cla_lrk_T,0,0,0};
+struct S13std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Cla_lrk_T S13st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S14_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S13_Cla_lrk_T = //State's vectored into symbol: "t"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cla_lrk_T,0,0,0,0};
+struct S14std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Cla_lrk_T S14st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S15_Cla_lrk_T} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S14_Cla_lrk_T = //State's vectored into symbol: "|"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cla_lrk_T,0,0,0,0};
+struct S15rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cla_lrk_T S15rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs14_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S15_Cla_lrk_T = //State's vectored into symbol: "\""
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cla_lrk_T,0,0,0};
+struct S16std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Cla_lrk_T S16st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S17_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S16_Cla_lrk_T = //State's vectored into symbol: "|"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cla_lrk_T,0,0,0,0};
+struct S17std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Cla_lrk_T S17st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S18_Cla_lrk_T} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S17_Cla_lrk_T = //State's vectored into symbol: "|"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cla_lrk_T,0,0,0,0};
+struct S18rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cla_lrk_T S18rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs2_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S18_Cla_lrk_T = //State's vectored into symbol: "\""
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cla_lrk_T,0,0,0};
+struct S19std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S19std_Cla_lrk_T S19st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S20_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S19_Cla_lrk_T = //State's vectored into symbol: "'"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cla_lrk_T,0,0,0,0};
+struct S20std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S20std_Cla_lrk_T S20st_Cla_lrk_T = {
+ 5
+ ,
+ {// start of table
+ {51,(State*)&S21_Cla_lrk_T} // shift sym: raw_plus
+ ,{54,(State*)&S24_Cla_lrk_T} // shift sym: raw_period
+ ,{122,(State*)&S27_Cla_lrk_T} // shift sym: raw_r
+ ,{124,(State*)&S30_Cla_lrk_T} // shift sym: raw_t
+ ,{132,(State*)&S33_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S20_Cla_lrk_T = //State's vectored into symbol: "|"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Cla_lrk_T,0,0,0,0};
+struct S21std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S21std_Cla_lrk_T S21st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S22_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S21_Cla_lrk_T = //State's vectored into symbol: "+"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cla_lrk_T,0,0,0,0};
+struct S22std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S22std_Cla_lrk_T S22st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {47,(State*)&S23_Cla_lrk_T} // shift sym: raw_right_quote
+ }// end of shift table
+};
+yacco2::State S22_Cla_lrk_T = //State's vectored into symbol: "|"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Cla_lrk_T,0,0,0,0};
+struct S23rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cla_lrk_T S23rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs6_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S23_Cla_lrk_T = //State's vectored into symbol: "'"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cla_lrk_T,0,0,0};
+struct S24std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S24std_Cla_lrk_T S24st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S25_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S24_Cla_lrk_T = //State's vectored into symbol: "."
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Cla_lrk_T,0,0,0,0};
+struct S25std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S25std_Cla_lrk_T S25st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {47,(State*)&S26_Cla_lrk_T} // shift sym: raw_right_quote
+ }// end of shift table
+};
+yacco2::State S25_Cla_lrk_T = //State's vectored into symbol: "|"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cla_lrk_T,0,0,0,0};
+struct S26rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cla_lrk_T S26rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs9_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S26_Cla_lrk_T = //State's vectored into symbol: "'"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cla_lrk_T,0,0,0};
+struct S27std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S27std_Cla_lrk_T S27st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S28_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S27_Cla_lrk_T = //State's vectored into symbol: "r"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cla_lrk_T,0,0,0,0};
+struct S28std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S28std_Cla_lrk_T S28st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {47,(State*)&S29_Cla_lrk_T} // shift sym: raw_right_quote
+ }// end of shift table
+};
+yacco2::State S28_Cla_lrk_T = //State's vectored into symbol: "|"
+{28
+,0,0,0,0,(Shift_tbl*)&S28st_Cla_lrk_T,0,0,0,0};
+struct S29rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cla_lrk_T S29rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs12_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S29_Cla_lrk_T = //State's vectored into symbol: "'"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cla_lrk_T,0,0,0};
+struct S30std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S30std_Cla_lrk_T S30st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S31_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S30_Cla_lrk_T = //State's vectored into symbol: "t"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Cla_lrk_T,0,0,0,0};
+struct S31std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S31std_Cla_lrk_T S31st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {47,(State*)&S32_Cla_lrk_T} // shift sym: raw_right_quote
+ }// end of shift table
+};
+yacco2::State S31_Cla_lrk_T = //State's vectored into symbol: "|"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Cla_lrk_T,0,0,0,0};
+struct S32rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cla_lrk_T S32rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs15_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S32_Cla_lrk_T = //State's vectored into symbol: "'"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cla_lrk_T,0,0,0};
+struct S33std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S33std_Cla_lrk_T S33st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S34_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S33_Cla_lrk_T = //State's vectored into symbol: "|"
+{33
+,0,0,0,0,(Shift_tbl*)&S33st_Cla_lrk_T,0,0,0,0};
+struct S34std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S34std_Cla_lrk_T S34st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {47,(State*)&S35_Cla_lrk_T} // shift sym: raw_right_quote
+ }// end of shift table
+};
+yacco2::State S34_Cla_lrk_T = //State's vectored into symbol: "|"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Cla_lrk_T,0,0,0,0};
+struct S35rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cla_lrk_T S35rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs3_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S35_Cla_lrk_T = //State's vectored into symbol: "'"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cla_lrk_T,0,0,0};
+struct S36std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S36std_Cla_lrk_T S36st_Cla_lrk_T = {
+ 5
+ ,
+ {// start of table
+ {51,(State*)&S37_Cla_lrk_T} // shift sym: raw_plus
+ ,{54,(State*)&S39_Cla_lrk_T} // shift sym: raw_period
+ ,{122,(State*)&S41_Cla_lrk_T} // shift sym: raw_r
+ ,{124,(State*)&S43_Cla_lrk_T} // shift sym: raw_t
+ ,{132,(State*)&S45_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S36_Cla_lrk_T = //State's vectored into symbol: "|"
+{36
+,0,0,0,0,(Shift_tbl*)&S36st_Cla_lrk_T,0,0,0,0};
+struct S37std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S37std_Cla_lrk_T S37st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S38_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S37_Cla_lrk_T = //State's vectored into symbol: "+"
+{37
+,0,0,0,0,(Shift_tbl*)&S37st_Cla_lrk_T,0,0,0,0};
+struct S38rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cla_lrk_T S38rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs4_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S38_Cla_lrk_T = //State's vectored into symbol: "|"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cla_lrk_T,0,0,0};
+struct S39std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S39std_Cla_lrk_T S39st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S40_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S39_Cla_lrk_T = //State's vectored into symbol: "."
+{39
+,0,0,0,0,(Shift_tbl*)&S39st_Cla_lrk_T,0,0,0,0};
+struct S40rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cla_lrk_T S40rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs7_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S40_Cla_lrk_T = //State's vectored into symbol: "|"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cla_lrk_T,0,0,0};
+struct S41std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S41std_Cla_lrk_T S41st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S42_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S41_Cla_lrk_T = //State's vectored into symbol: "r"
+{41
+,0,0,0,0,(Shift_tbl*)&S41st_Cla_lrk_T,0,0,0,0};
+struct S42rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cla_lrk_T S42rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs10_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S42_Cla_lrk_T = //State's vectored into symbol: "|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cla_lrk_T,0,0,0};
+struct S43std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S43std_Cla_lrk_T S43st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S44_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S43_Cla_lrk_T = //State's vectored into symbol: "t"
+{43
+,0,0,0,0,(Shift_tbl*)&S43st_Cla_lrk_T,0,0,0,0};
+struct S44rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cla_lrk_T S44rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs13_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S44_Cla_lrk_T = //State's vectored into symbol: "|"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cla_lrk_T,0,0,0};
+struct S45std_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S45std_Cla_lrk_T S45st_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S46_Cla_lrk_T} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S45_Cla_lrk_T = //State's vectored into symbol: "|"
+{45
+,0,0,0,0,(Shift_tbl*)&S45st_Cla_lrk_T,0,0,0,0};
+struct S46rtd_Cla_lrk_T{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cla_lrk_T S46rt_Cla_lrk_T = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cla_lrk_T,Cla_lrk_T::rhs1_Rla_lrk_T_}
+ }// end of reduce table
+};
+yacco2::State S46_Cla_lrk_T = //State's vectored into symbol: "|"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cla_lrk_T,0,0,0};
diff --git a/web/yacco2/compiler/grammars/lib/Debug/info.txt b/web/yacco2/compiler/grammars/lib/Debug/info.txt
new file mode 100644
index 0000000000..8b825b8190
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lib/Debug/info.txt
@@ -0,0 +1,14 @@
+0) Debug folder used to hold a debugging library of o2grammars used by programs: o2 and o2linker
+1) U can turn on dynamic tracing facilities of Yacco2 or add your own tracing stuff within these grammars
+2) Regen the grammars using o2grammars.sh
+3) Rebuild the debug o2grammars library using bld_bash_APPLE or other platform scripts.
+ Make sure you put this debug version in this folder
+4) Then rebuild o2 and / or o2linker and link them against this debug library
+
+Please read the bld_bash* scripts where there are appropriate debug comments.
+
+If u suspect Yacco2's grammars are in trouble, then put in your own tracing facilities and rebuild them.
+Have a read of compiler/grammars/makefile_APPLE script or other platforms
+
+Please read o2book.pdf for more comments on tracing facilities.
+
diff --git a/web/yacco2/compiler/grammars/lib/Release/libo2grammars.a b/web/yacco2/compiler/grammars/lib/Release/libo2grammars.a
new file mode 100644
index 0000000000..b3931e76cf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lib/Release/libo2grammars.a
Binary files differ
diff --git a/web/yacco2/compiler/grammars/link_cleanser.cpp b/web/yacco2/compiler/grammars/link_cleanser.cpp
new file mode 100644
index 0000000000..8bd502d1e0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleanser.cpp
@@ -0,0 +1,315 @@
+/*
+ File: link_cleanser.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "link_cleanser.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_link_cleanser;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Clink_cleanser::
+ Clink_cleanser()
+ :yacco2::CAbs_fsm
+ ("link_cleanser.lex"
+ ,"1.0"
+ ,"17 Apr 2001"
+ ,false
+ ,"Lexer: \\olinker's cleanser from \n previous lexing to remove chaffe before parsing stage."
+ ,"Fri Jan 30 18:55:14 2015 "
+ ,S1_Clink_cleanser){
+
+ }
+
+Clink_cleanser::~Clink_cleanser(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clink_cleanser::failed(){
+ return false;
+ }
+ void Clink_cleanser::op(){
+}
+int Clink_cleanser::rhs_to_rules_mapping_[20] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,2 // subrule 19 for rule 3
+};
+Rpass3::Rpass3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpass3",0,Clink_cleanser::R_Rpass3_,P,false,false){
+}
+
+void Rpass3::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+Relems::Relems(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relems",0,Clink_cleanser::R_Relems_,P,false,false){
+}
+
+Rtoken::Rtoken(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken",0,Clink_cleanser::R_Rtoken_,P,false,false){
+}
+
+void Rtoken::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);
+
+}
+
+void Rtoken::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken::sr4(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+
+}
+
+void Rtoken::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_int_no* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_char* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Err_bad_char* k = sf->p2__;
+ ADD_TOKEN_TO_ERROR_QUEUE(*k);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken::sr13(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ th_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken::sr14(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ kw_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ kw_in_stbl* kw = sf->p2__;
+ CAbs_lr1_sym* sym = kw->keyword_in_stbl();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sym);
+
+}
+
+void Rtoken::sr15(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/link_cleanser.fsc b/web/yacco2/compiler/grammars/link_cleanser.fsc
new file mode 100644
index 0000000000..5021a2e9d8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleanser.fsc
@@ -0,0 +1,35 @@
+/*
+ File: link_cleanser.fsc
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+transitive y
+grammar-name "link_cleanser"
+name-space "NS_link_cleanser"
+thread-name "Clink_cleanser"
+monolithic y
+file-name "link_cleanser.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_eog
+ LR1_all_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 7
+ NS_ws::TH_ws
+ NS_linker_id::TH_linker_id
+ NS_int_no::TH_int_no
+ NS_eol::TH_eol
+ NS_c_comments::TH_c_comments
+ NS_c_string::TH_c_string
+ NS_bad_char_set::TH_bad_char_set
+end-list-of-transitive-threads
+list-of-used-threads 7
+ NS_bad_char_set::TH_bad_char_set
+ NS_c_comments::TH_c_comments
+ NS_c_string::TH_c_string
+ NS_eol::TH_eol
+ NS_int_no::TH_int_no
+ NS_linker_id::TH_linker_id
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Lexer: \\olinker's cleanser from \n previous lexing to remove chaffe before parsing stage."
diff --git a/web/yacco2/compiler/grammars/link_cleanser.h b/web/yacco2/compiler/grammars/link_cleanser.h
new file mode 100644
index 0000000000..18ab7df2fa
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleanser.h
@@ -0,0 +1,104 @@
+/*
+ File: link_cleanser.h
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#ifndef __link_cleanser_h__
+#define __link_cleanser_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "linker_id.h"
+#include "ws.h"
+#include "c_comments.h"
+#include "c_string.h"
+#include "bad_char_set.h"
+#include "eol.h"
+#include "int_no.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Clink_cleanser;
+namespace NS_link_cleanser {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Clink_cleanser: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rpass3_ = 569//start_of_rule_list + 0
+ ,rhs1_Rpass3_ = 1
+ ,rhs2_Rpass3_ = 2
+ ,R_Relems_ = 570//start_of_rule_list + 2
+ ,rhs1_Relems_ = 3
+ ,rhs2_Relems_ = 4
+ ,R_Rtoken_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtoken_ = 5
+ ,rhs2_Rtoken_ = 6
+ ,rhs3_Rtoken_ = 7
+ ,rhs4_Rtoken_ = 8
+ ,rhs5_Rtoken_ = 9
+ ,rhs6_Rtoken_ = 10
+ ,rhs7_Rtoken_ = 11
+ ,rhs8_Rtoken_ = 12
+ ,rhs9_Rtoken_ = 13
+ ,rhs10_Rtoken_ = 14
+ ,rhs11_Rtoken_ = 15
+ ,rhs12_Rtoken_ = 16
+ ,rhs13_Rtoken_ = 17
+ ,rhs14_Rtoken_ = 18
+ ,rhs15_Rtoken_ = 19
+ };
+ //no of la sets = 2
+ //no of states = 22
+ Clink_cleanser();
+ ~Clink_cleanser();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[20];
+ };
+struct Rpass3;
+struct Relems;
+struct Rtoken;
+struct Rpass3:public yacco2::CAbs_lr1_sym {
+ Rpass3(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Relems:public yacco2::CAbs_lr1_sym {
+ Relems(yacco2::Parser* P);
+ public:
+};
+
+struct Rtoken:public yacco2::CAbs_lr1_sym {
+ Rtoken(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+ void sr15();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/link_cleanser.lex b/web/yacco2/compiler/grammars/link_cleanser.lex
new file mode 100644
index 0000000000..f525852890
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleanser.lex
@@ -0,0 +1,140 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: link_cleanser.lex
+dates: 15 Mar 2005
+Purpose: Lexical Phase for Linker
+Use: throw out the chaffe like comments eol etc.
+ the downstream phase per language deals with its syntax.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |link_cleanser| grammar.\fbreak
+Lexical Phase for Linker.
+This is a front end to \O2's linker.
+It throws out the chaffe
+and puts the balance into a holding container for
+parsing.
+This is my old style of parsing
+but now the 2 stages has been brought into 1 stage like |pass3|.
+It use to be |pass1|..|pass3| grammars.
+@/
+
+fsm
+(fsm-id "link_cleanser.lex",fsm-filename link_cleanser,fsm-namespace NS_link_cleanser
+,fsm-class Clink_cleanser{
+ user-prefix-declaration
+#include "linker_id.h"
+#include "ws.h"
+#include "c_comments.h"
+#include "c_string.h"
+#include "bad_char_set.h"
+#include "eol.h"
+#include "int_no.h"
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Apr 2001",fsm-debug "false"
+,fsm-comments "Lexer: \\olinker's cleanser from \n previous lexing to remove chaffe before parsing stage.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rpass3 (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> eog
+ -> Relems eog
+}
+
+Relems (){
+ -> Rtoken
+ -> Relems Rtoken
+}
+
+Rtoken (){
+ -> ||| ws NS_ws::TH_ws
+
+ -> ||| "comment" NS_c_comments::TH_c_comments {
+ op
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |+| { // add balance of characters to queue Eg. n or y
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+ ***
+ }
+ -> ||| "bad eos" NULL { //
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "identifier" NS_linker_id::TH_linker_id{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "int-no" NS_int_no::TH_int_no{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "comment-overrun" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| eol NS_eol::TH_eol
+ -> ||| "bad char" NS_bad_char_set::TH_bad_char_set{
+ op
+ Err_bad_char* k = sf->p2__;
+ ADD_TOKEN_TO_ERROR_QUEUE(*k);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "th-in-stbl" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "kw-in-stbl" NULL{
+ op
+ kw_in_stbl* kw = sf->p2__;
+ CAbs_lr1_sym* sym = kw->keyword_in_stbl();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sym);
+ ***
+ }
+ -> ||| |+| NULL {// keywords
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/link_cleansersym.cpp b/web/yacco2/compiler/grammars/link_cleansersym.cpp
new file mode 100644
index 0000000000..6bc81159c1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleansersym.cpp
@@ -0,0 +1,308 @@
+/*
+ File: link_cleansersym.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "link_cleanser.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_link_cleanser;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clink_cleanser::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs11_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs15_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr15();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/link_cleansertbl.cpp b/web/yacco2/compiler/grammars/link_cleansertbl.cpp
new file mode 100644
index 0000000000..b7cf2a1768
--- /dev/null
+++ b/web/yacco2/compiler/grammars/link_cleansertbl.cpp
@@ -0,0 +1,402 @@
+/*
+ File: link_cleansertbl.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "link_cleanser.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_link_cleanser;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Clink_cleanser[] ={
+1
+,0,4
+};
+// LR1_eog
+// LR1_reduce_operator
+// LR1_all_shift_operator
+yacco2::UCHAR LA2_Clink_cleanser[] ={
+1
+,0,82
+};
+extern yacco2::State S1_Clink_cleanser;
+extern yacco2::State S2_Clink_cleanser;
+extern yacco2::State S3_Clink_cleanser;
+struct S3ttd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[7];
+};
+S3ttd_Clink_cleanser S3tt_Clink_cleanser = {
+ 7 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_ws
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_linker_id
+ ,(yacco2::Thread_entry*)&ITH_int_no
+ ,(yacco2::Thread_entry*)&ITH_bad_char_set
+};
+extern yacco2::State S4_Clink_cleanser;
+extern yacco2::State S5_Clink_cleanser;
+extern yacco2::State S6_Clink_cleanser;
+extern yacco2::State S7_Clink_cleanser;
+extern yacco2::State S8_Clink_cleanser;
+extern yacco2::State S9_Clink_cleanser;
+extern yacco2::State S10_Clink_cleanser;
+extern yacco2::State S11_Clink_cleanser;
+extern yacco2::State S12_Clink_cleanser;
+extern yacco2::State S13_Clink_cleanser;
+extern yacco2::State S14_Clink_cleanser;
+extern yacco2::State S15_Clink_cleanser;
+extern yacco2::State S16_Clink_cleanser;
+extern yacco2::State S17_Clink_cleanser;
+extern yacco2::State S18_Clink_cleanser;
+extern yacco2::State S19_Clink_cleanser;
+extern yacco2::State S20_Clink_cleanser;
+extern yacco2::State S21_Clink_cleanser;
+extern yacco2::State S22_Clink_cleanser;
+struct S1std_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Clink_cleanser S1st_Clink_cleanser = {
+ 6
+ ,
+ {// start of table
+ {1,(State*)&S2_Clink_cleanser} // shift sym: LR1_eog
+ ,{3,(State*)&S3_Clink_cleanser} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S18_Clink_cleanser} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Clink_cleanser} // accept sym: Rpass3
+ ,{570,(State*)&S19_Clink_cleanser} // shift sym: Relems
+ ,{571,(State*)&S22_Clink_cleanser} // shift sym: Rtoken
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clink_cleanser = {3,(State*)&S3_Clink_cleanser};
+yacco2::Shift_entry S1ase_Clink_cleanser = {6,(State*)&S18_Clink_cleanser};
+yacco2::State S1_Clink_cleanser = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clink_cleanser,(Shift_entry*)&S1ase_Clink_cleanser
+,0,0,(Shift_tbl*)&S1st_Clink_cleanser,0,(State_s_thread_tbl*)&S3tt_Clink_cleanser,0,0};
+struct S2rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Clink_cleanser S2rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clink_cleanser,Clink_cleanser::rhs1_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S2_Clink_cleanser = //State's vectored into symbol: "eog"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Clink_cleanser,0,0,0};
+struct S3std_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[14];
+};
+S3std_Clink_cleanser S3st_Clink_cleanser = {
+ 14
+ ,
+ {// start of table
+ {6,(State*)&S4_Clink_cleanser} // shift sym: LR1_all_shift_operator
+ ,{268,(State*)&S5_Clink_cleanser} // shift sym: T_eol
+ ,{271,(State*)&S6_Clink_cleanser} // shift sym: T_comment
+ ,{272,(State*)&S7_Clink_cleanser} // shift sym: T_ws
+ ,{275,(State*)&S8_Clink_cleanser} // shift sym: T_c_string
+ ,{279,(State*)&S9_Clink_cleanser} // shift sym: T_identifier
+ ,{280,(State*)&S10_Clink_cleanser} // shift sym: T_int_no
+ ,{344,(State*)&S11_Clink_cleanser} // shift sym: T_in_stbl
+ ,{366,(State*)&S12_Clink_cleanser} // shift sym: th_in_stbl
+ ,{367,(State*)&S13_Clink_cleanser} // shift sym: kw_in_stbl
+ ,{394,(State*)&S14_Clink_cleanser} // shift sym: Err_bad_eos
+ ,{395,(State*)&S15_Clink_cleanser} // shift sym: Err_bad_esc
+ ,{396,(State*)&S16_Clink_cleanser} // shift sym: Err_comment_overrun
+ ,{397,(State*)&S17_Clink_cleanser} // shift sym: Err_bad_char
+ }// end of shift table
+};
+yacco2::Shift_entry S3ase_Clink_cleanser = {6,(State*)&S4_Clink_cleanser};
+yacco2::State S3_Clink_cleanser = //State's vectored into symbol: "|||"
+{3
+,0,(Shift_entry*)&S3ase_Clink_cleanser
+,0,0,(Shift_tbl*)&S3st_Clink_cleanser,0,0,0,0};
+struct S4rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clink_cleanser S4rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs15_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S4_Clink_cleanser = //State's vectored into symbol: "|+|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clink_cleanser,0,0,0};
+struct S5rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clink_cleanser S5rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs10_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S5_Clink_cleanser = //State's vectored into symbol: "eol"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clink_cleanser,0,0,0};
+struct S6rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clink_cleanser S6rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs2_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S6_Clink_cleanser = //State's vectored into symbol: "comment"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clink_cleanser,0,0,0};
+struct S7rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clink_cleanser S7rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs1_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S7_Clink_cleanser = //State's vectored into symbol: "ws"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clink_cleanser,0,0,0};
+struct S8rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clink_cleanser S8rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs3_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S8_Clink_cleanser = //State's vectored into symbol: "c-string"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clink_cleanser,0,0,0};
+struct S9rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clink_cleanser S9rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs6_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S9_Clink_cleanser = //State's vectored into symbol: "identifier"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clink_cleanser,0,0,0};
+struct S10rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clink_cleanser S10rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs7_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S10_Clink_cleanser = //State's vectored into symbol: "int-no"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clink_cleanser,0,0,0};
+struct S11rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clink_cleanser S11rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs12_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S11_Clink_cleanser = //State's vectored into symbol: "T-in-stbl"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clink_cleanser,0,0,0};
+struct S12rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clink_cleanser S12rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs13_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S12_Clink_cleanser = //State's vectored into symbol: "th-in-stbl"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clink_cleanser,0,0,0};
+struct S13rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clink_cleanser S13rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs14_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S13_Clink_cleanser = //State's vectored into symbol: "kw-in-stbl"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clink_cleanser,0,0,0};
+struct S14rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clink_cleanser S14rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs5_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S14_Clink_cleanser = //State's vectored into symbol: "bad eos"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clink_cleanser,0,0,0};
+struct S15rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clink_cleanser S15rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs9_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S15_Clink_cleanser = //State's vectored into symbol: "bad esc"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clink_cleanser,0,0,0};
+struct S16rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clink_cleanser S16rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs8_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S16_Clink_cleanser = //State's vectored into symbol: "comment-overrun"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clink_cleanser,0,0,0};
+struct S17rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clink_cleanser S17rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs11_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S17_Clink_cleanser = //State's vectored into symbol: "bad char"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clink_cleanser,0,0,0};
+struct S18rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Clink_cleanser S18rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs4_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S18_Clink_cleanser = //State's vectored into symbol: "|+|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Clink_cleanser,0,0,0};
+struct S19std_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S19std_Clink_cleanser S19st_Clink_cleanser = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S20_Clink_cleanser} // shift sym: LR1_eog
+ ,{3,(State*)&S3_Clink_cleanser} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S18_Clink_cleanser} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S21_Clink_cleanser} // shift sym: Rtoken
+ }// end of shift table
+};
+yacco2::Shift_entry S19pse_Clink_cleanser = {3,(State*)&S3_Clink_cleanser};
+yacco2::Shift_entry S19ase_Clink_cleanser = {6,(State*)&S18_Clink_cleanser};
+yacco2::State S19_Clink_cleanser = //State's vectored into symbol: "Relems"
+{19
+,(Shift_entry*)&S19pse_Clink_cleanser,(Shift_entry*)&S19ase_Clink_cleanser
+,0,0,(Shift_tbl*)&S19st_Clink_cleanser,0,(State_s_thread_tbl*)&S3tt_Clink_cleanser,0,0};
+struct S20rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Clink_cleanser S20rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clink_cleanser,Clink_cleanser::rhs2_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S20_Clink_cleanser = //State's vectored into symbol: "eog"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clink_cleanser,0,0,0};
+struct S21rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clink_cleanser S21rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs2_Relems_}
+ }// end of reduce table
+};
+yacco2::State S21_Clink_cleanser = //State's vectored into symbol: "Rtoken"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clink_cleanser,0,0,0};
+struct S22rtd_Clink_cleanser{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clink_cleanser S22rt_Clink_cleanser = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clink_cleanser,Clink_cleanser::rhs1_Relems_}
+ }// end of reduce table
+};
+yacco2::State S22_Clink_cleanser = //State's vectored into symbol: "Rtoken"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clink_cleanser,0,0,0};
diff --git a/web/yacco2/compiler/grammars/linker_id.cpp b/web/yacco2/compiler/grammars/linker_id.cpp
new file mode 100644
index 0000000000..2be569dfce
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_id.cpp
@@ -0,0 +1,359 @@
+/*
+ File: linker_id.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_id.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_id;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 11;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+}
+ Clinker_id::
+ Clinker_id()
+ :yacco2::CAbs_fsm
+ ("linker_id.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"\\olinker identifiers recognizer: uses symbol table."
+ ,"Fri Jan 30 18:55:14 2015 "
+ ,S1_Clinker_id){
+
+ data_.erase();
+
+ }
+
+Clinker_id::~Clinker_id(){
+
+ for(int x = 0;x < 11;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clinker_id::failed(){
+ return false;
+ }
+ void Clinker_id::op(){
+ data_.erase();
+
+}
+int Clinker_id::rhs_to_rules_mapping_[87] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+ ,4 // subrule 11 for rule 5
+ ,4 // subrule 12 for rule 5
+ ,4 // subrule 13 for rule 5
+ ,4 // subrule 14 for rule 5
+ ,4 // subrule 15 for rule 5
+ ,5 // subrule 16 for rule 6
+ ,5 // subrule 17 for rule 6
+ ,5 // subrule 18 for rule 6
+ ,5 // subrule 19 for rule 6
+ ,5 // subrule 20 for rule 6
+ ,5 // subrule 21 for rule 6
+ ,5 // subrule 22 for rule 6
+ ,5 // subrule 23 for rule 6
+ ,5 // subrule 24 for rule 6
+ ,6 // subrule 25 for rule 7
+ ,6 // subrule 26 for rule 7
+ ,6 // subrule 27 for rule 7
+ ,6 // subrule 28 for rule 7
+ ,6 // subrule 29 for rule 7
+ ,6 // subrule 30 for rule 7
+ ,6 // subrule 31 for rule 7
+ ,6 // subrule 32 for rule 7
+ ,6 // subrule 33 for rule 7
+ ,6 // subrule 34 for rule 7
+ ,6 // subrule 35 for rule 7
+ ,6 // subrule 36 for rule 7
+ ,6 // subrule 37 for rule 7
+ ,7 // subrule 38 for rule 8
+ ,7 // subrule 39 for rule 8
+ ,7 // subrule 40 for rule 8
+ ,7 // subrule 41 for rule 8
+ ,7 // subrule 42 for rule 8
+ ,7 // subrule 43 for rule 8
+ ,7 // subrule 44 for rule 8
+ ,7 // subrule 45 for rule 8
+ ,7 // subrule 46 for rule 8
+ ,7 // subrule 47 for rule 8
+ ,7 // subrule 48 for rule 8
+ ,7 // subrule 49 for rule 8
+ ,7 // subrule 50 for rule 8
+ ,8 // subrule 51 for rule 9
+ ,8 // subrule 52 for rule 9
+ ,8 // subrule 53 for rule 9
+ ,8 // subrule 54 for rule 9
+ ,8 // subrule 55 for rule 9
+ ,8 // subrule 56 for rule 9
+ ,8 // subrule 57 for rule 9
+ ,8 // subrule 58 for rule 9
+ ,8 // subrule 59 for rule 9
+ ,8 // subrule 60 for rule 9
+ ,8 // subrule 61 for rule 9
+ ,8 // subrule 62 for rule 9
+ ,8 // subrule 63 for rule 9
+ ,9 // subrule 64 for rule 10
+ ,9 // subrule 65 for rule 10
+ ,9 // subrule 66 for rule 10
+ ,9 // subrule 67 for rule 10
+ ,9 // subrule 68 for rule 10
+ ,9 // subrule 69 for rule 10
+ ,9 // subrule 70 for rule 10
+ ,9 // subrule 71 for rule 10
+ ,9 // subrule 72 for rule 10
+ ,9 // subrule 73 for rule 10
+ ,9 // subrule 74 for rule 10
+ ,9 // subrule 75 for rule 10
+ ,9 // subrule 76 for rule 10
+ ,10 // subrule 77 for rule 11
+ ,10 // subrule 78 for rule 11
+ ,10 // subrule 79 for rule 11
+ ,10 // subrule 80 for rule 11
+ ,10 // subrule 81 for rule 11
+ ,10 // subrule 82 for rule 11
+ ,10 // subrule 83 for rule 11
+ ,10 // subrule 84 for rule 11
+ ,10 // subrule 85 for rule 11
+ ,10 // subrule 86 for rule 11
+};
+Rlinker_id::Rlinker_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlinker_id",0,Clinker_id::R_Rlinker_id_,P,false,false){
+}
+
+void Rlinker_id::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ kw_in_stbl* kw_in;
+ using namespace yacco2_stbl;
+
+ find_sym_in_stbl(report_card,*fsm->data_.c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ if(report_card.tbl_entry_->type_ == table_entry::keyword){
+ kw_in = (kw_in_stbl*)report_card.tbl_entry_->symbol_;
+ CAbs_lr1_sym* kw = kw_in->keyword_in_stbl();
+ CAbs_lr1_sym* nkw;
+ switch(kw->enumerated_id__){
+ case T_Enum::T_T_transitive_:{nkw = new T_transitive;break;}
+ case T_Enum::T_T_grammar_name_:{nkw = new T_grammar_name;break;}
+ case T_Enum::T_T_error_symbols_:{nkw = new T_error_symbols;break;}
+ case T_Enum::T_T_name_space_:{nkw = new T_name_space;break;}
+
+ case T_Enum::T_T_thread_name_:{nkw = new T_thread_name;break;}
+ case T_Enum::T_T_monolithic_:{nkw = new T_monolithic;break;}
+ case T_Enum::T_T_file_name_:{nkw = new T_file_name;break;}
+ case T_Enum::T_T_no_of_T_:{nkw = new T_no_of_T;break;}
+
+ case T_Enum::T_T_list_of_native_first_set_terminals_:
+ {nkw = new T_list_of_native_first_set_terminals;break;}
+ case T_Enum::T_T_end_list_of_native_first_set_terminals_:
+ {nkw = new T_end_list_of_native_first_set_terminals;break;}
+ case T_Enum::T_T_list_of_transitive_threads_:
+ {nkw = new T_list_of_transitive_threads;break;}
+ case T_Enum::T_T_end_list_of_transitive_threads_:
+ {nkw = new T_end_list_of_transitive_threads;break;}
+ case T_Enum::T_T_list_of_used_threads_:
+ {nkw = new T_list_of_used_threads;break;}
+ case T_Enum::T_T_end_list_of_used_threads_:
+ {nkw = new T_end_list_of_used_threads;break;}
+ case T_Enum::T_T_T_alphabet_:{nkw = new T_T_alphabet;break;}
+ case T_Enum::T_T_end_T_alphabet_:{nkw = new T_end_T_alphabet;break;}
+ case T_Enum::T_T_file_of_T_alphabet_:{nkw = new T_file_of_T_alphabet;break;}
+ case T_Enum::T_T_emitfile_:{nkw = new T_emitfile;break;}
+ case T_Enum::T_T_preamble_:{nkw = new T_preamble;break;}
+ case T_Enum::T_T_fsm_comments_:{nkw = new T_fsm_comments;break;}
+ case T_Enum::T_T_end_preamble_:{nkw = new T_end_preamble;break;}
+ }
+ nkw->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(nkw);
+ return;
+ }else{
+ RSVP(report_card.tbl_entry_->symbol_);
+ return;
+ }
+ }
+ T_identifier* id = new T_identifier(fsm->data_.c_str());
+ id->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(id);
+
+}
+Rtail_chars::Rtail_chars(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtail_chars",0,Clinker_id::R_Rtail_chars_,P,false,false){
+}
+
+Rstart_char::Rstart_char(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart_char",0,Clinker_id::R_Rstart_char_,P,false,false){
+}
+
+Rtail_char::Rtail_char(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtail_char",0,Clinker_id::R_Rtail_char_,P,false,false){
+}
+
+Rno_and_underscore_and_hyphen::Rno_and_underscore_and_hyphen(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rno_and_underscore_and_hyphen",0,Clinker_id::R_Rno_and_underscore_and_hyphen_,P,false,false){
+}
+
+void Rno_and_underscore_and_hyphen::sr1(){
+ struct SF{
+ raw_colon* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+
+}
+
+void Rno_and_underscore_and_hyphen::sr2(){
+ struct SF{
+ raw_period* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+
+}
+
+void Rno_and_underscore_and_hyphen::sr3(){
+ struct SF{
+ raw_under_score* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+
+}
+
+void Rno_and_underscore_and_hyphen::sr4(){
+ struct SF{
+ raw_minus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+
+}
+
+Rminus_la::Rminus_la(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus_la",0,Clinker_id::R_Rminus_la_,P,false,false){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,Clinker_id::R_RUPPER_A_M_,P,false,false){
+}
+
+void RUPPER_A_M::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+
+}
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,Clinker_id::R_RUPPER_N_Z_,P,false,false){
+}
+
+void RUPPER_N_Z::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+
+}
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,Clinker_id::R_Rlower_a_m_,P,false,false){
+}
+
+void Rlower_a_m::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+
+}
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,Clinker_id::R_Rlower_n_z_,P,false,false){
+}
+
+void Rlower_n_z::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+
+}
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,Clinker_id::R_RNUMBERS_,P,false,false){
+}
+
+void RNUMBERS::op(){
+ sstrace_rulesss
+
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+
+}
diff --git a/web/yacco2/compiler/grammars/linker_id.fsc b/web/yacco2/compiler/grammars/linker_id.fsc
new file mode 100644
index 0000000000..a02fb2966c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_id.fsc
@@ -0,0 +1,71 @@
+/*
+ File: linker_id.fsc
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+transitive n
+grammar-name "linker_id"
+name-space "NS_linker_id"
+thread-name "TH_linker_id"
+monolithic n
+file-name "linker_id.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 52
+ raw_A
+ raw_B
+ raw_C
+ raw_D
+ raw_E
+ raw_F
+ raw_G
+ raw_H
+ raw_I
+ raw_J
+ raw_K
+ raw_L
+ raw_M
+ raw_N
+ raw_O
+ raw_P
+ raw_Q
+ raw_R
+ raw_S
+ raw_T
+ raw_U
+ raw_V
+ raw_W
+ raw_X
+ raw_Y
+ raw_Z
+ raw_a
+ raw_b
+ raw_c
+ raw_d
+ raw_e
+ raw_f
+ raw_g
+ raw_h
+ raw_i
+ raw_j
+ raw_k
+ raw_l
+ raw_m
+ raw_n
+ raw_o
+ raw_p
+ raw_q
+ raw_r
+ raw_s
+ raw_t
+ raw_u
+ raw_v
+ raw_w
+ raw_x
+ raw_y
+ raw_z
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"\\olinker identifiers recognizer: uses symbol table."
diff --git a/web/yacco2/compiler/grammars/linker_id.h b/web/yacco2/compiler/grammars/linker_id.h
new file mode 100644
index 0000000000..2c4f23df68
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_id.h
@@ -0,0 +1,226 @@
+/*
+ File: linker_id.h
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#ifndef __linker_id_h__
+#define __linker_id_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "yacco2_stbl.h"
+
+extern yacco2::Thread_entry ITH_linker_id;
+
+extern yacco2::State S1_Clinker_id;
+namespace NS_linker_id {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_linker_id(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_linker_id(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[11];
+};
+class Clinker_id: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlinker_id_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlinker_id_ = 1
+ ,rhs2_Rlinker_id_ = 2
+ ,R_Rtail_chars_ = 570//start_of_rule_list + 2
+ ,rhs1_Rtail_chars_ = 3
+ ,rhs2_Rtail_chars_ = 4
+ ,R_Rstart_char_ = 571//start_of_rule_list + 4
+ ,rhs1_Rstart_char_ = 5
+ ,rhs2_Rstart_char_ = 6
+ ,rhs3_Rstart_char_ = 7
+ ,rhs4_Rstart_char_ = 8
+ ,R_Rtail_char_ = 572//start_of_rule_list + 6
+ ,rhs1_Rtail_char_ = 9
+ ,rhs2_Rtail_char_ = 10
+ ,R_Rno_and_underscore_and_hyphen_ = 573//start_of_rule_list + 8
+ ,rhs1_Rno_and_underscore_and_hyphen_ = 11
+ ,rhs2_Rno_and_underscore_and_hyphen_ = 12
+ ,rhs3_Rno_and_underscore_and_hyphen_ = 13
+ ,rhs4_Rno_and_underscore_and_hyphen_ = 14
+ ,rhs5_Rno_and_underscore_and_hyphen_ = 15
+ ,R_Rminus_la_ = 574//start_of_rule_list + 10
+ ,rhs1_Rminus_la_ = 16
+ ,rhs2_Rminus_la_ = 17
+ ,rhs3_Rminus_la_ = 18
+ ,rhs4_Rminus_la_ = 19
+ ,rhs5_Rminus_la_ = 20
+ ,rhs6_Rminus_la_ = 21
+ ,rhs7_Rminus_la_ = 22
+ ,rhs8_Rminus_la_ = 23
+ ,rhs9_Rminus_la_ = 24
+ ,R_RUPPER_A_M_ = 575//start_of_rule_list + 12
+ ,rhs1_RUPPER_A_M_ = 25
+ ,rhs2_RUPPER_A_M_ = 26
+ ,rhs3_RUPPER_A_M_ = 27
+ ,rhs4_RUPPER_A_M_ = 28
+ ,rhs5_RUPPER_A_M_ = 29
+ ,rhs6_RUPPER_A_M_ = 30
+ ,rhs7_RUPPER_A_M_ = 31
+ ,rhs8_RUPPER_A_M_ = 32
+ ,rhs9_RUPPER_A_M_ = 33
+ ,rhs10_RUPPER_A_M_ = 34
+ ,rhs11_RUPPER_A_M_ = 35
+ ,rhs12_RUPPER_A_M_ = 36
+ ,rhs13_RUPPER_A_M_ = 37
+ ,R_RUPPER_N_Z_ = 576//start_of_rule_list + 14
+ ,rhs1_RUPPER_N_Z_ = 38
+ ,rhs2_RUPPER_N_Z_ = 39
+ ,rhs3_RUPPER_N_Z_ = 40
+ ,rhs4_RUPPER_N_Z_ = 41
+ ,rhs5_RUPPER_N_Z_ = 42
+ ,rhs6_RUPPER_N_Z_ = 43
+ ,rhs7_RUPPER_N_Z_ = 44
+ ,rhs8_RUPPER_N_Z_ = 45
+ ,rhs9_RUPPER_N_Z_ = 46
+ ,rhs10_RUPPER_N_Z_ = 47
+ ,rhs11_RUPPER_N_Z_ = 48
+ ,rhs12_RUPPER_N_Z_ = 49
+ ,rhs13_RUPPER_N_Z_ = 50
+ ,R_Rlower_a_m_ = 577//start_of_rule_list + 16
+ ,rhs1_Rlower_a_m_ = 51
+ ,rhs2_Rlower_a_m_ = 52
+ ,rhs3_Rlower_a_m_ = 53
+ ,rhs4_Rlower_a_m_ = 54
+ ,rhs5_Rlower_a_m_ = 55
+ ,rhs6_Rlower_a_m_ = 56
+ ,rhs7_Rlower_a_m_ = 57
+ ,rhs8_Rlower_a_m_ = 58
+ ,rhs9_Rlower_a_m_ = 59
+ ,rhs10_Rlower_a_m_ = 60
+ ,rhs11_Rlower_a_m_ = 61
+ ,rhs12_Rlower_a_m_ = 62
+ ,rhs13_Rlower_a_m_ = 63
+ ,R_Rlower_n_z_ = 578//start_of_rule_list + 18
+ ,rhs1_Rlower_n_z_ = 64
+ ,rhs2_Rlower_n_z_ = 65
+ ,rhs3_Rlower_n_z_ = 66
+ ,rhs4_Rlower_n_z_ = 67
+ ,rhs5_Rlower_n_z_ = 68
+ ,rhs6_Rlower_n_z_ = 69
+ ,rhs7_Rlower_n_z_ = 70
+ ,rhs8_Rlower_n_z_ = 71
+ ,rhs9_Rlower_n_z_ = 72
+ ,rhs10_Rlower_n_z_ = 73
+ ,rhs11_Rlower_n_z_ = 74
+ ,rhs12_Rlower_n_z_ = 75
+ ,rhs13_Rlower_n_z_ = 76
+ ,R_RNUMBERS_ = 579//start_of_rule_list + 20
+ ,rhs1_RNUMBERS_ = 77
+ ,rhs2_RNUMBERS_ = 78
+ ,rhs3_RNUMBERS_ = 79
+ ,rhs4_RNUMBERS_ = 80
+ ,rhs5_RNUMBERS_ = 81
+ ,rhs6_RNUMBERS_ = 82
+ ,rhs7_RNUMBERS_ = 83
+ ,rhs8_RNUMBERS_ = 84
+ ,rhs9_RNUMBERS_ = 85
+ ,rhs10_RNUMBERS_ = 86
+ };
+ //no of la sets = 2
+ //no of states = 80
+ Clinker_id();
+ ~Clinker_id();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[87];
+
+ public:
+ std::string data_;
+
+ };
+struct Rlinker_id;
+struct Rtail_chars;
+struct Rstart_char;
+struct Rtail_char;
+struct Rno_and_underscore_and_hyphen;
+struct Rminus_la;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Rlinker_id:public yacco2::CAbs_lr1_sym {
+ Rlinker_id(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rtail_chars:public yacco2::CAbs_lr1_sym {
+ Rtail_chars(yacco2::Parser* P);
+ public:
+};
+
+struct Rstart_char:public yacco2::CAbs_lr1_sym {
+ Rstart_char(yacco2::Parser* P);
+ public:
+};
+
+struct Rtail_char:public yacco2::CAbs_lr1_sym {
+ Rtail_char(yacco2::Parser* P);
+ public:
+};
+
+struct Rno_and_underscore_and_hyphen:public yacco2::CAbs_lr1_sym {
+ Rno_and_underscore_and_hyphen(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rminus_la:public yacco2::CAbs_lr1_sym {
+ Rminus_la(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/linker_id.lex b/web/yacco2/compiler/grammars/linker_id.lex
new file mode 100644
index 0000000000..d6ffa24c27
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_id.lex
@@ -0,0 +1,255 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: linker_id.lex
+dates: 14 Mar 2005
+Purpose: linker identifiers
+Returned: T_identifier
+Claim-to-fame: use of yacco2's symbol table to filter out linker's keywords
+and allows the run thru of keyword "-" characters building up an id.
+There are no expressions within Linker, so this extension does not conflict
+with expressions and legitimite ids: a-b.
+
+Extend the id to include unquoted string type recognition.
+This allows the linker's ids to consume the full file name until
+Yacco2 emits these fles as quoted strings thus protecting
+against a legitimate file name having one of Linker's keywords:
+monolithic or transitive.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |linker_id| thread.\fbreak
+Recognize Linker's identifiers.
+@/
+fsm
+(fsm-id "linker_id.lex",fsm-filename linker_id,fsm-namespace NS_linker_id
+,fsm-class Clinker_id{
+ user-prefix-declaration
+#include "yacco2_stbl.h"
+ ***
+ user-declaration
+ public:
+ std::string data_;
+ ***
+ op
+ data_.erase();
+ ***
+ constructor
+ data_.erase();
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "\\olinker identifiers recognizer: uses symbol table.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_linker_id
+ ***
+ parallel-la-boundary
+ eolr - Rminus_la
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rlinker_id (
+lhs{
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ kw_in_stbl* kw_in;
+ using namespace yacco2_stbl;
+
+ find_sym_in_stbl(report_card,*fsm->data_.c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ if(report_card.tbl_entry_->type_ == table_entry::keyword){
+ kw_in = (kw_in_stbl*)report_card.tbl_entry_->symbol_;
+ CAbs_lr1_sym* kw = kw_in->keyword_in_stbl();
+ CAbs_lr1_sym* nkw;
+ switch(kw->enumerated_id__){
+ case T_Enum::T_T_transitive_:{nkw = new T_transitive;break;}
+ case T_Enum::T_T_grammar_name_:{nkw = new T_grammar_name;break;}
+ case T_Enum::T_T_error_symbols_:{nkw = new T_error_symbols;break;}
+ case T_Enum::T_T_name_space_:{nkw = new T_name_space;break;}
+
+ case T_Enum::T_T_thread_name_:{nkw = new T_thread_name;break;}
+ case T_Enum::T_T_monolithic_:{nkw = new T_monolithic;break;}
+ case T_Enum::T_T_file_name_:{nkw = new T_file_name;break;}
+ case T_Enum::T_T_no_of_T_:{nkw = new T_no_of_T;break;}
+
+ case T_Enum::T_T_list_of_native_first_set_terminals_:
+ {nkw = new T_list_of_native_first_set_terminals;break;}
+ case T_Enum::T_T_end_list_of_native_first_set_terminals_:
+ {nkw = new T_end_list_of_native_first_set_terminals;break;}
+ case T_Enum::T_T_list_of_transitive_threads_:
+ {nkw = new T_list_of_transitive_threads;break;}
+ case T_Enum::T_T_end_list_of_transitive_threads_:
+ {nkw = new T_end_list_of_transitive_threads;break;}
+ case T_Enum::T_T_list_of_used_threads_:
+ {nkw = new T_list_of_used_threads;break;}
+ case T_Enum::T_T_end_list_of_used_threads_:
+ {nkw = new T_end_list_of_used_threads;break;}
+ case T_Enum::T_T_T_alphabet_:{nkw = new T_T_alphabet;break;}
+ case T_Enum::T_T_end_T_alphabet_:{nkw = new T_end_T_alphabet;break;}
+ case T_Enum::T_T_file_of_T_alphabet_:{nkw = new T_file_of_T_alphabet;break;}
+ case T_Enum::T_T_emitfile_:{nkw = new T_emitfile;break;}
+ case T_Enum::T_T_preamble_:{nkw = new T_preamble;break;}
+ case T_Enum::T_T_fsm_comments_:{nkw = new T_fsm_comments;break;}
+ case T_Enum::T_T_end_preamble_:{nkw = new T_end_preamble;break;}
+ }
+ nkw->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(nkw);
+ return;
+ }else{
+ RSVP(report_card.tbl_entry_->symbol_);
+ return;
+ }
+ }
+ T_identifier* id = new T_identifier(fsm->data_.c_str());
+ id->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(id);
+ ***
+ }
+)
+{
+ -> Rstart_char |.|
+ -> Rstart_char Rtail_chars |.|
+}
+
+Rtail_chars (){
+ -> Rtail_char
+ -> Rtail_chars Rtail_char
+}
+Rstart_char () {
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+}
+
+Rtail_char () {
+ -> Rstart_char
+ -> Rno_and_underscore_and_hyphen
+}
+
+Rno_and_underscore_and_hyphen () {
+ -> ":" {
+ /@
+ Extend to pull in the threads.
+ @/
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+ ***
+ }
+ -> "." {
+ /@
+ Extend to pull in non-quoted file names with extension.
+ Normally this is generated by the frontend \Yacco2
+ as a quoted string but this extension
+ allows the possible tampering by
+ the compiler writer to play with things
+ when things aren't going well by the front-end.
+ It's a minor relief to help out the compiler writer.
+ @/
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+ ***
+ }
+ -> "_" {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+ ***
+ }
+ -> "-" {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ fsm->data_ += sf->p1__->id__;
+ ***
+ }
+ -> RNUMBERS
+}
+
+Rminus_la () {
+ -> "."
+ -> ":"
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS
+}
+
+RUPPER_A_M (
+lhs {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+ ***
+ }
+){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z (
+lhs {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+ ***
+ }
+){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m (
+lhs {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+ ***
+ }
+){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z (
+lhs {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+ ***
+ }
+){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS (
+lhs {
+ op
+ Clinker_id* fsm = (Clinker_id*) rule_info__.parser__->fsm_tbl__;
+ size_t pos = rule_info__.parser__->parse_stack__.top_sub__ - 1;
+ CAbs_lr1_sym* sym = rule_info__.parser__->get_spec_stack_token(pos);
+ fsm->data_ += sym->id__;
+ ***
+ }
+){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/linker_idsym.cpp b/web/yacco2/compiler/grammars/linker_idsym.cpp
new file mode 100644
index 0000000000..98ac6bf904
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_idsym.cpp
@@ -0,0 +1,1320 @@
+/*
+ File: linker_idsym.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_id.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_id;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_linker_id::TH_linker_id(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_linker_id;
+ NS_linker_id::Clinker_id Clinker_id_;// parallel-parser's parse table
+#define ssPARSE_TABLE Clinker_id_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_linker_id::PROC_TH_linker_id(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_linker_id";
+ static bool one_time(false);
+ static NS_linker_id::Clinker_id* NS_linker_id_Clinker_id_(0);// parallel-parser's fsm table
+ static Parser* NS_linker_id_Clinker_id_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_linker_id_Clinker_id_ = new NS_linker_id::Clinker_id();// parallel-parser's fsm table
+ NS_linker_id_Clinker_id_parser = new Parser(*NS_linker_id_Clinker_id_,Caller_pp);
+ }
+ proc_parser = NS_linker_id_Clinker_id_parser;
+#include "wproc_pp_core.h"
+}
+void
+Clinker_id::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlinker_id_:{
+ Rlinker_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rlinker_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlinker_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rlinker_id_:{
+ Rlinker_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rlinker_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlinker_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rtail_chars_:{
+ Rtail_chars* sym;
+ if(re->rule_ == 0){
+ sym = new Rtail_chars(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtail_chars*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtail_chars_:{
+ Rtail_chars* sym;
+ if(re->rule_ == 0){
+ sym = new Rtail_chars(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtail_chars*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rstart_char_:{
+ Rstart_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rtail_char_:{
+ Rtail_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rtail_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtail_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtail_char_:{
+ Rtail_char* sym;
+ if(re->rule_ == 0){
+ sym = new Rtail_char(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtail_char*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rno_and_underscore_and_hyphen_:{
+ Rno_and_underscore_and_hyphen* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_and_underscore_and_hyphen(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_and_underscore_and_hyphen*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rno_and_underscore_and_hyphen_:{
+ Rno_and_underscore_and_hyphen* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_and_underscore_and_hyphen(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_and_underscore_and_hyphen*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rno_and_underscore_and_hyphen_:{
+ Rno_and_underscore_and_hyphen* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_and_underscore_and_hyphen(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_and_underscore_and_hyphen*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rno_and_underscore_and_hyphen_:{
+ Rno_and_underscore_and_hyphen* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_and_underscore_and_hyphen(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_and_underscore_and_hyphen*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rno_and_underscore_and_hyphen_:{
+ Rno_and_underscore_and_hyphen* sym;
+ if(re->rule_ == 0){
+ sym = new Rno_and_underscore_and_hyphen(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rno_and_underscore_and_hyphen*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/linker_idtbl.cpp b/web/yacco2/compiler/grammars/linker_idtbl.cpp
new file mode 100644
index 0000000000..1891afa04d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_idtbl.cpp
@@ -0,0 +1,2071 @@
+/*
+ File: linker_idtbl.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_id.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_id;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+// raw_minus
+// raw_period
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_under_score
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+yacco2::UCHAR LA1_Clinker_id[] ={
+12
+,0,32
+,6,96
+,7,255
+,8,7
+,9,254
+,10,255
+,11,255
+,12,135
+,13,254
+,14,255
+,15,255
+,16,7
+};
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// LR1_eog
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_slash
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_left_quote
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+yacco2::UCHAR LA2_Clinker_id[] ={
+67
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,159
+,8,248
+,9,1
+,12,120
+,13,1
+,16,248
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Clinker_id;
+extern yacco2::State S2_Clinker_id;
+extern yacco2::State S3_Clinker_id;
+extern yacco2::State S4_Clinker_id;
+extern yacco2::State S5_Clinker_id;
+extern yacco2::State S6_Clinker_id;
+extern yacco2::State S7_Clinker_id;
+extern yacco2::State S8_Clinker_id;
+extern yacco2::State S9_Clinker_id;
+extern yacco2::State S10_Clinker_id;
+extern yacco2::State S11_Clinker_id;
+extern yacco2::State S12_Clinker_id;
+extern yacco2::State S13_Clinker_id;
+extern yacco2::State S14_Clinker_id;
+extern yacco2::State S15_Clinker_id;
+extern yacco2::State S16_Clinker_id;
+extern yacco2::State S17_Clinker_id;
+extern yacco2::State S18_Clinker_id;
+extern yacco2::State S19_Clinker_id;
+extern yacco2::State S20_Clinker_id;
+extern yacco2::State S21_Clinker_id;
+extern yacco2::State S22_Clinker_id;
+extern yacco2::State S23_Clinker_id;
+extern yacco2::State S24_Clinker_id;
+extern yacco2::State S25_Clinker_id;
+extern yacco2::State S26_Clinker_id;
+extern yacco2::State S27_Clinker_id;
+extern yacco2::State S28_Clinker_id;
+extern yacco2::State S29_Clinker_id;
+extern yacco2::State S30_Clinker_id;
+extern yacco2::State S31_Clinker_id;
+extern yacco2::State S32_Clinker_id;
+extern yacco2::State S33_Clinker_id;
+extern yacco2::State S34_Clinker_id;
+extern yacco2::State S35_Clinker_id;
+extern yacco2::State S36_Clinker_id;
+extern yacco2::State S37_Clinker_id;
+extern yacco2::State S38_Clinker_id;
+extern yacco2::State S39_Clinker_id;
+extern yacco2::State S40_Clinker_id;
+extern yacco2::State S41_Clinker_id;
+extern yacco2::State S42_Clinker_id;
+extern yacco2::State S43_Clinker_id;
+extern yacco2::State S44_Clinker_id;
+extern yacco2::State S45_Clinker_id;
+extern yacco2::State S46_Clinker_id;
+extern yacco2::State S47_Clinker_id;
+extern yacco2::State S48_Clinker_id;
+extern yacco2::State S49_Clinker_id;
+extern yacco2::State S50_Clinker_id;
+extern yacco2::State S51_Clinker_id;
+extern yacco2::State S52_Clinker_id;
+extern yacco2::State S53_Clinker_id;
+extern yacco2::State S54_Clinker_id;
+extern yacco2::State S55_Clinker_id;
+extern yacco2::State S56_Clinker_id;
+extern yacco2::State S57_Clinker_id;
+extern yacco2::State S58_Clinker_id;
+extern yacco2::State S59_Clinker_id;
+extern yacco2::State S60_Clinker_id;
+extern yacco2::State S61_Clinker_id;
+extern yacco2::State S62_Clinker_id;
+extern yacco2::State S63_Clinker_id;
+extern yacco2::State S64_Clinker_id;
+extern yacco2::State S65_Clinker_id;
+extern yacco2::State S66_Clinker_id;
+extern yacco2::State S67_Clinker_id;
+extern yacco2::State S68_Clinker_id;
+extern yacco2::State S69_Clinker_id;
+extern yacco2::State S70_Clinker_id;
+extern yacco2::State S71_Clinker_id;
+extern yacco2::State S72_Clinker_id;
+extern yacco2::State S73_Clinker_id;
+extern yacco2::State S74_Clinker_id;
+extern yacco2::State S75_Clinker_id;
+extern yacco2::State S76_Clinker_id;
+extern yacco2::State S77_Clinker_id;
+extern yacco2::State S78_Clinker_id;
+extern yacco2::State S79_Clinker_id;
+extern yacco2::State S80_Clinker_id;
+struct S1std_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[58];
+};
+S1std_Clinker_id S1st_Clinker_id = {
+ 58
+ ,
+ {// start of table
+ {73,(State*)&S2_Clinker_id} // shift sym: raw_A
+ ,{74,(State*)&S3_Clinker_id} // shift sym: raw_B
+ ,{75,(State*)&S4_Clinker_id} // shift sym: raw_C
+ ,{76,(State*)&S5_Clinker_id} // shift sym: raw_D
+ ,{77,(State*)&S6_Clinker_id} // shift sym: raw_E
+ ,{78,(State*)&S7_Clinker_id} // shift sym: raw_F
+ ,{79,(State*)&S8_Clinker_id} // shift sym: raw_G
+ ,{80,(State*)&S9_Clinker_id} // shift sym: raw_H
+ ,{81,(State*)&S10_Clinker_id} // shift sym: raw_I
+ ,{82,(State*)&S11_Clinker_id} // shift sym: raw_J
+ ,{83,(State*)&S12_Clinker_id} // shift sym: raw_K
+ ,{84,(State*)&S13_Clinker_id} // shift sym: raw_L
+ ,{85,(State*)&S14_Clinker_id} // shift sym: raw_M
+ ,{86,(State*)&S15_Clinker_id} // shift sym: raw_N
+ ,{87,(State*)&S16_Clinker_id} // shift sym: raw_O
+ ,{88,(State*)&S17_Clinker_id} // shift sym: raw_P
+ ,{89,(State*)&S18_Clinker_id} // shift sym: raw_Q
+ ,{90,(State*)&S19_Clinker_id} // shift sym: raw_R
+ ,{91,(State*)&S20_Clinker_id} // shift sym: raw_S
+ ,{92,(State*)&S21_Clinker_id} // shift sym: raw_T
+ ,{93,(State*)&S22_Clinker_id} // shift sym: raw_U
+ ,{94,(State*)&S23_Clinker_id} // shift sym: raw_V
+ ,{95,(State*)&S24_Clinker_id} // shift sym: raw_W
+ ,{96,(State*)&S25_Clinker_id} // shift sym: raw_X
+ ,{97,(State*)&S26_Clinker_id} // shift sym: raw_Y
+ ,{98,(State*)&S27_Clinker_id} // shift sym: raw_Z
+ ,{105,(State*)&S28_Clinker_id} // shift sym: raw_a
+ ,{106,(State*)&S29_Clinker_id} // shift sym: raw_b
+ ,{107,(State*)&S30_Clinker_id} // shift sym: raw_c
+ ,{108,(State*)&S31_Clinker_id} // shift sym: raw_d
+ ,{109,(State*)&S32_Clinker_id} // shift sym: raw_e
+ ,{110,(State*)&S33_Clinker_id} // shift sym: raw_f
+ ,{111,(State*)&S34_Clinker_id} // shift sym: raw_g
+ ,{112,(State*)&S35_Clinker_id} // shift sym: raw_h
+ ,{113,(State*)&S36_Clinker_id} // shift sym: raw_i
+ ,{114,(State*)&S37_Clinker_id} // shift sym: raw_j
+ ,{115,(State*)&S38_Clinker_id} // shift sym: raw_k
+ ,{116,(State*)&S39_Clinker_id} // shift sym: raw_l
+ ,{117,(State*)&S40_Clinker_id} // shift sym: raw_m
+ ,{118,(State*)&S41_Clinker_id} // shift sym: raw_n
+ ,{119,(State*)&S42_Clinker_id} // shift sym: raw_o
+ ,{120,(State*)&S43_Clinker_id} // shift sym: raw_p
+ ,{121,(State*)&S44_Clinker_id} // shift sym: raw_q
+ ,{122,(State*)&S45_Clinker_id} // shift sym: raw_r
+ ,{123,(State*)&S46_Clinker_id} // shift sym: raw_s
+ ,{124,(State*)&S47_Clinker_id} // shift sym: raw_t
+ ,{125,(State*)&S48_Clinker_id} // shift sym: raw_u
+ ,{126,(State*)&S49_Clinker_id} // shift sym: raw_v
+ ,{127,(State*)&S50_Clinker_id} // shift sym: raw_w
+ ,{128,(State*)&S51_Clinker_id} // shift sym: raw_x
+ ,{129,(State*)&S52_Clinker_id} // shift sym: raw_y
+ ,{130,(State*)&S53_Clinker_id} // shift sym: raw_z
+ ,{569,(State*)&S1_Clinker_id} // accept sym: Rlinker_id
+ ,{571,(State*)&S54_Clinker_id} // shift sym: Rstart_char
+ ,{575,(State*)&S75_Clinker_id} // shift sym: RUPPER_A_M
+ ,{576,(State*)&S76_Clinker_id} // shift sym: RUPPER_N_Z
+ ,{577,(State*)&S77_Clinker_id} // shift sym: Rlower_a_m
+ ,{578,(State*)&S78_Clinker_id} // shift sym: Rlower_n_z
+ }// end of shift table
+};
+yacco2::State S1_Clinker_id = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clinker_id,0,0,0,0};
+struct S2rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Clinker_id S2rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S2_Clinker_id = //State's vectored into symbol: "A"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Clinker_id,0,0,0};
+struct S3rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clinker_id S3rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S3_Clinker_id = //State's vectored into symbol: "B"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Clinker_id,0,0,0};
+struct S4rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clinker_id S4rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S4_Clinker_id = //State's vectored into symbol: "C"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clinker_id,0,0,0};
+struct S5rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clinker_id S5rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S5_Clinker_id = //State's vectored into symbol: "D"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clinker_id,0,0,0};
+struct S6rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clinker_id S6rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S6_Clinker_id = //State's vectored into symbol: "E"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clinker_id,0,0,0};
+struct S7rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clinker_id S7rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs6_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S7_Clinker_id = //State's vectored into symbol: "F"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clinker_id,0,0,0};
+struct S8rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clinker_id S8rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs7_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S8_Clinker_id = //State's vectored into symbol: "G"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clinker_id,0,0,0};
+struct S9rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clinker_id S9rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs8_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S9_Clinker_id = //State's vectored into symbol: "H"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clinker_id,0,0,0};
+struct S10rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clinker_id S10rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs9_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S10_Clinker_id = //State's vectored into symbol: "I"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clinker_id,0,0,0};
+struct S11rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clinker_id S11rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs10_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S11_Clinker_id = //State's vectored into symbol: "J"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clinker_id,0,0,0};
+struct S12rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clinker_id S12rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs11_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S12_Clinker_id = //State's vectored into symbol: "K"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clinker_id,0,0,0};
+struct S13rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clinker_id S13rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs12_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S13_Clinker_id = //State's vectored into symbol: "L"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clinker_id,0,0,0};
+struct S14rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clinker_id S14rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs13_RUPPER_A_M_}
+ }// end of reduce table
+};
+yacco2::State S14_Clinker_id = //State's vectored into symbol: "M"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clinker_id,0,0,0};
+struct S15rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clinker_id S15rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S15_Clinker_id = //State's vectored into symbol: "N"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clinker_id,0,0,0};
+struct S16rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clinker_id S16rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S16_Clinker_id = //State's vectored into symbol: "O"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clinker_id,0,0,0};
+struct S17rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clinker_id S17rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S17_Clinker_id = //State's vectored into symbol: "P"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clinker_id,0,0,0};
+struct S18rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Clinker_id S18rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S18_Clinker_id = //State's vectored into symbol: "Q"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Clinker_id,0,0,0};
+struct S19rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clinker_id S19rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S19_Clinker_id = //State's vectored into symbol: "R"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clinker_id,0,0,0};
+struct S20rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Clinker_id S20rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs6_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S20_Clinker_id = //State's vectored into symbol: "S"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clinker_id,0,0,0};
+struct S21rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clinker_id S21rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs7_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S21_Clinker_id = //State's vectored into symbol: "T"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clinker_id,0,0,0};
+struct S22rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clinker_id S22rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs8_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S22_Clinker_id = //State's vectored into symbol: "U"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clinker_id,0,0,0};
+struct S23rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Clinker_id S23rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs9_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S23_Clinker_id = //State's vectored into symbol: "V"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Clinker_id,0,0,0};
+struct S24rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clinker_id S24rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs10_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S24_Clinker_id = //State's vectored into symbol: "W"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clinker_id,0,0,0};
+struct S25rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Clinker_id S25rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs11_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S25_Clinker_id = //State's vectored into symbol: "X"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Clinker_id,0,0,0};
+struct S26rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Clinker_id S26rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs12_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S26_Clinker_id = //State's vectored into symbol: "Y"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Clinker_id,0,0,0};
+struct S27rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Clinker_id S27rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs13_RUPPER_N_Z_}
+ }// end of reduce table
+};
+yacco2::State S27_Clinker_id = //State's vectored into symbol: "Z"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Clinker_id,0,0,0};
+struct S28rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Clinker_id S28rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S28_Clinker_id = //State's vectored into symbol: "a"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clinker_id,0,0,0};
+struct S29rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Clinker_id S29rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S29_Clinker_id = //State's vectored into symbol: "b"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Clinker_id,0,0,0};
+struct S30rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Clinker_id S30rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S30_Clinker_id = //State's vectored into symbol: "c"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Clinker_id,0,0,0};
+struct S31rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Clinker_id S31rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S31_Clinker_id = //State's vectored into symbol: "d"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Clinker_id,0,0,0};
+struct S32rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Clinker_id S32rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S32_Clinker_id = //State's vectored into symbol: "e"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Clinker_id,0,0,0};
+struct S33rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Clinker_id S33rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs6_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S33_Clinker_id = //State's vectored into symbol: "f"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Clinker_id,0,0,0};
+struct S34rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Clinker_id S34rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs7_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S34_Clinker_id = //State's vectored into symbol: "g"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Clinker_id,0,0,0};
+struct S35rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Clinker_id S35rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs8_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S35_Clinker_id = //State's vectored into symbol: "h"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Clinker_id,0,0,0};
+struct S36rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Clinker_id S36rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs9_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S36_Clinker_id = //State's vectored into symbol: "i"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Clinker_id,0,0,0};
+struct S37rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Clinker_id S37rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs10_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S37_Clinker_id = //State's vectored into symbol: "j"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Clinker_id,0,0,0};
+struct S38rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Clinker_id S38rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs11_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S38_Clinker_id = //State's vectored into symbol: "k"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Clinker_id,0,0,0};
+struct S39rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Clinker_id S39rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs12_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S39_Clinker_id = //State's vectored into symbol: "l"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Clinker_id,0,0,0};
+struct S40rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Clinker_id S40rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs13_Rlower_a_m_}
+ }// end of reduce table
+};
+yacco2::State S40_Clinker_id = //State's vectored into symbol: "m"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Clinker_id,0,0,0};
+struct S41rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Clinker_id S41rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S41_Clinker_id = //State's vectored into symbol: "n"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Clinker_id,0,0,0};
+struct S42rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Clinker_id S42rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S42_Clinker_id = //State's vectored into symbol: "o"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Clinker_id,0,0,0};
+struct S43rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Clinker_id S43rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S43_Clinker_id = //State's vectored into symbol: "p"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Clinker_id,0,0,0};
+struct S44rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Clinker_id S44rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S44_Clinker_id = //State's vectored into symbol: "q"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Clinker_id,0,0,0};
+struct S45rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Clinker_id S45rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S45_Clinker_id = //State's vectored into symbol: "r"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Clinker_id,0,0,0};
+struct S46rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Clinker_id S46rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs6_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S46_Clinker_id = //State's vectored into symbol: "s"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Clinker_id,0,0,0};
+struct S47rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Clinker_id S47rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs7_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S47_Clinker_id = //State's vectored into symbol: "t"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Clinker_id,0,0,0};
+struct S48rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Clinker_id S48rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs8_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S48_Clinker_id = //State's vectored into symbol: "u"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Clinker_id,0,0,0};
+struct S49rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Clinker_id S49rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs9_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S49_Clinker_id = //State's vectored into symbol: "v"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Clinker_id,0,0,0};
+struct S50rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Clinker_id S50rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs10_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S50_Clinker_id = //State's vectored into symbol: "w"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Clinker_id,0,0,0};
+struct S51rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Clinker_id S51rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs11_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S51_Clinker_id = //State's vectored into symbol: "x"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Clinker_id,0,0,0};
+struct S52rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Clinker_id S52rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs12_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S52_Clinker_id = //State's vectored into symbol: "y"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Clinker_id,0,0,0};
+struct S53rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Clinker_id S53rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs13_Rlower_n_z_}
+ }// end of reduce table
+};
+yacco2::State S53_Clinker_id = //State's vectored into symbol: "z"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Clinker_id,0,0,0};
+struct S54std_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[76];
+};
+S54std_Clinker_id S54st_Clinker_id = {
+ 76
+ ,
+ {// start of table
+ {5,(State*)&S55_Clinker_id} // shift sym: LR1_invisible_shift_operator
+ ,{53,(State*)&S56_Clinker_id} // shift sym: raw_minus
+ ,{54,(State*)&S57_Clinker_id} // shift sym: raw_period
+ ,{56,(State*)&S58_Clinker_id} // shift sym: raw_0
+ ,{57,(State*)&S59_Clinker_id} // shift sym: raw_1
+ ,{58,(State*)&S60_Clinker_id} // shift sym: raw_2
+ ,{59,(State*)&S61_Clinker_id} // shift sym: raw_3
+ ,{60,(State*)&S62_Clinker_id} // shift sym: raw_4
+ ,{61,(State*)&S63_Clinker_id} // shift sym: raw_5
+ ,{62,(State*)&S64_Clinker_id} // shift sym: raw_6
+ ,{63,(State*)&S65_Clinker_id} // shift sym: raw_7
+ ,{64,(State*)&S66_Clinker_id} // shift sym: raw_8
+ ,{65,(State*)&S67_Clinker_id} // shift sym: raw_9
+ ,{66,(State*)&S68_Clinker_id} // shift sym: raw_colon
+ ,{73,(State*)&S2_Clinker_id} // shift sym: raw_A
+ ,{74,(State*)&S3_Clinker_id} // shift sym: raw_B
+ ,{75,(State*)&S4_Clinker_id} // shift sym: raw_C
+ ,{76,(State*)&S5_Clinker_id} // shift sym: raw_D
+ ,{77,(State*)&S6_Clinker_id} // shift sym: raw_E
+ ,{78,(State*)&S7_Clinker_id} // shift sym: raw_F
+ ,{79,(State*)&S8_Clinker_id} // shift sym: raw_G
+ ,{80,(State*)&S9_Clinker_id} // shift sym: raw_H
+ ,{81,(State*)&S10_Clinker_id} // shift sym: raw_I
+ ,{82,(State*)&S11_Clinker_id} // shift sym: raw_J
+ ,{83,(State*)&S12_Clinker_id} // shift sym: raw_K
+ ,{84,(State*)&S13_Clinker_id} // shift sym: raw_L
+ ,{85,(State*)&S14_Clinker_id} // shift sym: raw_M
+ ,{86,(State*)&S15_Clinker_id} // shift sym: raw_N
+ ,{87,(State*)&S16_Clinker_id} // shift sym: raw_O
+ ,{88,(State*)&S17_Clinker_id} // shift sym: raw_P
+ ,{89,(State*)&S18_Clinker_id} // shift sym: raw_Q
+ ,{90,(State*)&S19_Clinker_id} // shift sym: raw_R
+ ,{91,(State*)&S20_Clinker_id} // shift sym: raw_S
+ ,{92,(State*)&S21_Clinker_id} // shift sym: raw_T
+ ,{93,(State*)&S22_Clinker_id} // shift sym: raw_U
+ ,{94,(State*)&S23_Clinker_id} // shift sym: raw_V
+ ,{95,(State*)&S24_Clinker_id} // shift sym: raw_W
+ ,{96,(State*)&S25_Clinker_id} // shift sym: raw_X
+ ,{97,(State*)&S26_Clinker_id} // shift sym: raw_Y
+ ,{98,(State*)&S27_Clinker_id} // shift sym: raw_Z
+ ,{103,(State*)&S69_Clinker_id} // shift sym: raw_under_score
+ ,{105,(State*)&S28_Clinker_id} // shift sym: raw_a
+ ,{106,(State*)&S29_Clinker_id} // shift sym: raw_b
+ ,{107,(State*)&S30_Clinker_id} // shift sym: raw_c
+ ,{108,(State*)&S31_Clinker_id} // shift sym: raw_d
+ ,{109,(State*)&S32_Clinker_id} // shift sym: raw_e
+ ,{110,(State*)&S33_Clinker_id} // shift sym: raw_f
+ ,{111,(State*)&S34_Clinker_id} // shift sym: raw_g
+ ,{112,(State*)&S35_Clinker_id} // shift sym: raw_h
+ ,{113,(State*)&S36_Clinker_id} // shift sym: raw_i
+ ,{114,(State*)&S37_Clinker_id} // shift sym: raw_j
+ ,{115,(State*)&S38_Clinker_id} // shift sym: raw_k
+ ,{116,(State*)&S39_Clinker_id} // shift sym: raw_l
+ ,{117,(State*)&S40_Clinker_id} // shift sym: raw_m
+ ,{118,(State*)&S41_Clinker_id} // shift sym: raw_n
+ ,{119,(State*)&S42_Clinker_id} // shift sym: raw_o
+ ,{120,(State*)&S43_Clinker_id} // shift sym: raw_p
+ ,{121,(State*)&S44_Clinker_id} // shift sym: raw_q
+ ,{122,(State*)&S45_Clinker_id} // shift sym: raw_r
+ ,{123,(State*)&S46_Clinker_id} // shift sym: raw_s
+ ,{124,(State*)&S47_Clinker_id} // shift sym: raw_t
+ ,{125,(State*)&S48_Clinker_id} // shift sym: raw_u
+ ,{126,(State*)&S49_Clinker_id} // shift sym: raw_v
+ ,{127,(State*)&S50_Clinker_id} // shift sym: raw_w
+ ,{128,(State*)&S51_Clinker_id} // shift sym: raw_x
+ ,{129,(State*)&S52_Clinker_id} // shift sym: raw_y
+ ,{130,(State*)&S53_Clinker_id} // shift sym: raw_z
+ ,{570,(State*)&S70_Clinker_id} // shift sym: Rtail_chars
+ ,{571,(State*)&S72_Clinker_id} // shift sym: Rstart_char
+ ,{572,(State*)&S80_Clinker_id} // shift sym: Rtail_char
+ ,{573,(State*)&S74_Clinker_id} // shift sym: Rno_and_underscore_and_hyphen
+ ,{575,(State*)&S75_Clinker_id} // shift sym: RUPPER_A_M
+ ,{576,(State*)&S76_Clinker_id} // shift sym: RUPPER_N_Z
+ ,{577,(State*)&S77_Clinker_id} // shift sym: Rlower_a_m
+ ,{578,(State*)&S78_Clinker_id} // shift sym: Rlower_n_z
+ ,{579,(State*)&S79_Clinker_id} // shift sym: RNUMBERS
+ }// end of shift table
+};
+yacco2::Shift_entry S54ise_Clinker_id = {5,(State*)&S55_Clinker_id};
+yacco2::State S54_Clinker_id = //State's vectored into symbol: "Rstart_char"
+{54
+,0,0,(Shift_entry*)&S54ise_Clinker_id
+,0,(Shift_tbl*)&S54st_Clinker_id,0,0,0,0};
+struct S55rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Clinker_id S55rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_id,Clinker_id::rhs1_Rlinker_id_}
+ }// end of reduce table
+};
+yacco2::State S55_Clinker_id = //State's vectored into symbol: "|.|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Clinker_id,0,0,0};
+struct S56rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Clinker_id S56rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_Rno_and_underscore_and_hyphen_}
+ }// end of reduce table
+};
+yacco2::State S56_Clinker_id = //State's vectored into symbol: "-"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Clinker_id,0,0,0};
+struct S57rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Clinker_id S57rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rno_and_underscore_and_hyphen_}
+ }// end of reduce table
+};
+yacco2::State S57_Clinker_id = //State's vectored into symbol: "."
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Clinker_id,0,0,0};
+struct S58rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Clinker_id S58rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S58_Clinker_id = //State's vectored into symbol: "0"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Clinker_id,0,0,0};
+struct S59rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Clinker_id S59rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S59_Clinker_id = //State's vectored into symbol: "1"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Clinker_id,0,0,0};
+struct S60rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Clinker_id S60rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S60_Clinker_id = //State's vectored into symbol: "2"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Clinker_id,0,0,0};
+struct S61rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Clinker_id S61rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S61_Clinker_id = //State's vectored into symbol: "3"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Clinker_id,0,0,0};
+struct S62rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Clinker_id S62rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S62_Clinker_id = //State's vectored into symbol: "4"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Clinker_id,0,0,0};
+struct S63rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Clinker_id S63rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs6_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S63_Clinker_id = //State's vectored into symbol: "5"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Clinker_id,0,0,0};
+struct S64rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Clinker_id S64rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs7_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S64_Clinker_id = //State's vectored into symbol: "6"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Clinker_id,0,0,0};
+struct S65rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Clinker_id S65rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs8_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S65_Clinker_id = //State's vectored into symbol: "7"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Clinker_id,0,0,0};
+struct S66rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Clinker_id S66rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs9_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S66_Clinker_id = //State's vectored into symbol: "8"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Clinker_id,0,0,0};
+struct S67rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Clinker_id S67rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs10_RNUMBERS_}
+ }// end of reduce table
+};
+yacco2::State S67_Clinker_id = //State's vectored into symbol: "9"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Clinker_id,0,0,0};
+struct S68rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Clinker_id S68rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rno_and_underscore_and_hyphen_}
+ }// end of reduce table
+};
+yacco2::State S68_Clinker_id = //State's vectored into symbol: ":"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Clinker_id,0,0,0};
+struct S69rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Clinker_id S69rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_Rno_and_underscore_and_hyphen_}
+ }// end of reduce table
+};
+yacco2::State S69_Clinker_id = //State's vectored into symbol: "_"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Clinker_id,0,0,0};
+struct S70std_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[75];
+};
+S70std_Clinker_id S70st_Clinker_id = {
+ 75
+ ,
+ {// start of table
+ {5,(State*)&S71_Clinker_id} // shift sym: LR1_invisible_shift_operator
+ ,{53,(State*)&S56_Clinker_id} // shift sym: raw_minus
+ ,{54,(State*)&S57_Clinker_id} // shift sym: raw_period
+ ,{56,(State*)&S58_Clinker_id} // shift sym: raw_0
+ ,{57,(State*)&S59_Clinker_id} // shift sym: raw_1
+ ,{58,(State*)&S60_Clinker_id} // shift sym: raw_2
+ ,{59,(State*)&S61_Clinker_id} // shift sym: raw_3
+ ,{60,(State*)&S62_Clinker_id} // shift sym: raw_4
+ ,{61,(State*)&S63_Clinker_id} // shift sym: raw_5
+ ,{62,(State*)&S64_Clinker_id} // shift sym: raw_6
+ ,{63,(State*)&S65_Clinker_id} // shift sym: raw_7
+ ,{64,(State*)&S66_Clinker_id} // shift sym: raw_8
+ ,{65,(State*)&S67_Clinker_id} // shift sym: raw_9
+ ,{66,(State*)&S68_Clinker_id} // shift sym: raw_colon
+ ,{73,(State*)&S2_Clinker_id} // shift sym: raw_A
+ ,{74,(State*)&S3_Clinker_id} // shift sym: raw_B
+ ,{75,(State*)&S4_Clinker_id} // shift sym: raw_C
+ ,{76,(State*)&S5_Clinker_id} // shift sym: raw_D
+ ,{77,(State*)&S6_Clinker_id} // shift sym: raw_E
+ ,{78,(State*)&S7_Clinker_id} // shift sym: raw_F
+ ,{79,(State*)&S8_Clinker_id} // shift sym: raw_G
+ ,{80,(State*)&S9_Clinker_id} // shift sym: raw_H
+ ,{81,(State*)&S10_Clinker_id} // shift sym: raw_I
+ ,{82,(State*)&S11_Clinker_id} // shift sym: raw_J
+ ,{83,(State*)&S12_Clinker_id} // shift sym: raw_K
+ ,{84,(State*)&S13_Clinker_id} // shift sym: raw_L
+ ,{85,(State*)&S14_Clinker_id} // shift sym: raw_M
+ ,{86,(State*)&S15_Clinker_id} // shift sym: raw_N
+ ,{87,(State*)&S16_Clinker_id} // shift sym: raw_O
+ ,{88,(State*)&S17_Clinker_id} // shift sym: raw_P
+ ,{89,(State*)&S18_Clinker_id} // shift sym: raw_Q
+ ,{90,(State*)&S19_Clinker_id} // shift sym: raw_R
+ ,{91,(State*)&S20_Clinker_id} // shift sym: raw_S
+ ,{92,(State*)&S21_Clinker_id} // shift sym: raw_T
+ ,{93,(State*)&S22_Clinker_id} // shift sym: raw_U
+ ,{94,(State*)&S23_Clinker_id} // shift sym: raw_V
+ ,{95,(State*)&S24_Clinker_id} // shift sym: raw_W
+ ,{96,(State*)&S25_Clinker_id} // shift sym: raw_X
+ ,{97,(State*)&S26_Clinker_id} // shift sym: raw_Y
+ ,{98,(State*)&S27_Clinker_id} // shift sym: raw_Z
+ ,{103,(State*)&S69_Clinker_id} // shift sym: raw_under_score
+ ,{105,(State*)&S28_Clinker_id} // shift sym: raw_a
+ ,{106,(State*)&S29_Clinker_id} // shift sym: raw_b
+ ,{107,(State*)&S30_Clinker_id} // shift sym: raw_c
+ ,{108,(State*)&S31_Clinker_id} // shift sym: raw_d
+ ,{109,(State*)&S32_Clinker_id} // shift sym: raw_e
+ ,{110,(State*)&S33_Clinker_id} // shift sym: raw_f
+ ,{111,(State*)&S34_Clinker_id} // shift sym: raw_g
+ ,{112,(State*)&S35_Clinker_id} // shift sym: raw_h
+ ,{113,(State*)&S36_Clinker_id} // shift sym: raw_i
+ ,{114,(State*)&S37_Clinker_id} // shift sym: raw_j
+ ,{115,(State*)&S38_Clinker_id} // shift sym: raw_k
+ ,{116,(State*)&S39_Clinker_id} // shift sym: raw_l
+ ,{117,(State*)&S40_Clinker_id} // shift sym: raw_m
+ ,{118,(State*)&S41_Clinker_id} // shift sym: raw_n
+ ,{119,(State*)&S42_Clinker_id} // shift sym: raw_o
+ ,{120,(State*)&S43_Clinker_id} // shift sym: raw_p
+ ,{121,(State*)&S44_Clinker_id} // shift sym: raw_q
+ ,{122,(State*)&S45_Clinker_id} // shift sym: raw_r
+ ,{123,(State*)&S46_Clinker_id} // shift sym: raw_s
+ ,{124,(State*)&S47_Clinker_id} // shift sym: raw_t
+ ,{125,(State*)&S48_Clinker_id} // shift sym: raw_u
+ ,{126,(State*)&S49_Clinker_id} // shift sym: raw_v
+ ,{127,(State*)&S50_Clinker_id} // shift sym: raw_w
+ ,{128,(State*)&S51_Clinker_id} // shift sym: raw_x
+ ,{129,(State*)&S52_Clinker_id} // shift sym: raw_y
+ ,{130,(State*)&S53_Clinker_id} // shift sym: raw_z
+ ,{571,(State*)&S72_Clinker_id} // shift sym: Rstart_char
+ ,{572,(State*)&S73_Clinker_id} // shift sym: Rtail_char
+ ,{573,(State*)&S74_Clinker_id} // shift sym: Rno_and_underscore_and_hyphen
+ ,{575,(State*)&S75_Clinker_id} // shift sym: RUPPER_A_M
+ ,{576,(State*)&S76_Clinker_id} // shift sym: RUPPER_N_Z
+ ,{577,(State*)&S77_Clinker_id} // shift sym: Rlower_a_m
+ ,{578,(State*)&S78_Clinker_id} // shift sym: Rlower_n_z
+ ,{579,(State*)&S79_Clinker_id} // shift sym: RNUMBERS
+ }// end of shift table
+};
+yacco2::Shift_entry S70ise_Clinker_id = {5,(State*)&S71_Clinker_id};
+yacco2::State S70_Clinker_id = //State's vectored into symbol: "Rtail_chars"
+{70
+,0,0,(Shift_entry*)&S70ise_Clinker_id
+,0,(Shift_tbl*)&S70st_Clinker_id,0,0,0,0};
+struct S71rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Clinker_id S71rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_id,Clinker_id::rhs2_Rlinker_id_}
+ }// end of reduce table
+};
+yacco2::State S71_Clinker_id = //State's vectored into symbol: "|.|"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Clinker_id,0,0,0};
+struct S72rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Clinker_id S72rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rtail_char_}
+ }// end of reduce table
+};
+yacco2::State S72_Clinker_id = //State's vectored into symbol: "Rstart_char"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Clinker_id,0,0,0};
+struct S73rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Clinker_id S73rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rtail_chars_}
+ }// end of reduce table
+};
+yacco2::State S73_Clinker_id = //State's vectored into symbol: "Rtail_char"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Clinker_id,0,0,0};
+struct S74rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Clinker_id S74rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rtail_char_}
+ }// end of reduce table
+};
+yacco2::State S74_Clinker_id = //State's vectored into symbol: "Rno_and_underscore_and_hyphen"
+{74
+,0,0,0,0,0,(Reduce_tbl*)&S74rt_Clinker_id,0,0,0};
+struct S75rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Clinker_id S75rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S75_Clinker_id = //State's vectored into symbol: "RUPPER_A_M"
+{75
+,0,0,0,0,0,(Reduce_tbl*)&S75rt_Clinker_id,0,0,0};
+struct S76rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Clinker_id S76rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs2_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S76_Clinker_id = //State's vectored into symbol: "RUPPER_N_Z"
+{76
+,0,0,0,0,0,(Reduce_tbl*)&S76rt_Clinker_id,0,0,0};
+struct S77rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Clinker_id S77rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs3_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S77_Clinker_id = //State's vectored into symbol: "Rlower_a_m"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Clinker_id,0,0,0};
+struct S78rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Clinker_id S78rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs4_Rstart_char_}
+ }// end of reduce table
+};
+yacco2::State S78_Clinker_id = //State's vectored into symbol: "Rlower_n_z"
+{78
+,0,0,0,0,0,(Reduce_tbl*)&S78rt_Clinker_id,0,0,0};
+struct S79rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Clinker_id S79rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs5_Rno_and_underscore_and_hyphen_}
+ }// end of reduce table
+};
+yacco2::State S79_Clinker_id = //State's vectored into symbol: "RNUMBERS"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Clinker_id,0,0,0};
+struct S80rtd_Clinker_id{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Clinker_id S80rt_Clinker_id = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_id,Clinker_id::rhs1_Rtail_chars_}
+ }// end of reduce table
+};
+yacco2::State S80_Clinker_id = //State's vectored into symbol: "Rtail_char"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Clinker_id,0,0,0};
diff --git a/web/yacco2/compiler/grammars/linker_pass3.cpp b/web/yacco2/compiler/grammars/linker_pass3.cpp
new file mode 100644
index 0000000000..6247f64cd2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3.cpp
@@ -0,0 +1,648 @@
+/*
+ File: linker_pass3.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_pass3;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 10;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+}
+ Clinker_pass3::
+ Clinker_pass3()
+ :yacco2::CAbs_fsm
+ ("linker_pass3.lex"
+ ,"1.0"
+ ,"9 Feb. 2005"
+ ,false
+ ,"Lexer: constructing tokens for \\olinker parsing stage."
+ ,"Fri Jan 30 18:55:14 2015 "
+ ,S1_Clinker_pass3){
+
+ }
+
+Clinker_pass3::~Clinker_pass3(){
+
+ for(int x = 0;x < 10;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clinker_pass3::failed(){
+ return false;
+ }
+ void Clinker_pass3::op(){
+}
+int Clinker_pass3::rhs_to_rules_mapping_[36] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,3 // subrule 11 for rule 4
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,4 // subrule 14 for rule 5
+ ,4 // subrule 15 for rule 5
+ ,4 // subrule 16 for rule 5
+ ,4 // subrule 17 for rule 5
+ ,4 // subrule 18 for rule 5
+ ,4 // subrule 19 for rule 5
+ ,5 // subrule 20 for rule 6
+ ,5 // subrule 21 for rule 6
+ ,5 // subrule 22 for rule 6
+ ,6 // subrule 23 for rule 7
+ ,6 // subrule 24 for rule 7
+ ,6 // subrule 25 for rule 7
+ ,7 // subrule 26 for rule 8
+ ,7 // subrule 27 for rule 8
+ ,7 // subrule 28 for rule 8
+ ,8 // subrule 29 for rule 9
+ ,8 // subrule 30 for rule 9
+ ,8 // subrule 31 for rule 9
+ ,8 // subrule 32 for rule 9
+ ,8 // subrule 33 for rule 9
+ ,9 // subrule 34 for rule 10
+ ,9 // subrule 35 for rule 10
+};
+
+ bool Clinker_pass3::chk_ofilename(const char* Filename,CAbs_lr1_sym* Tok){
+ std::ofstream fle_chk;
+ fle_chk.open(Filename,ios::out);
+ if(!fle_chk.good()){
+ CAbs_lr1_sym* sym = new Err_bad_filename(Filename);
+ sym->set_rc(*Tok,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ parser__->set_stop_parse(true);
+ return false;
+ }else{
+ fle_chk.close();
+ }
+ return true;
+ }
+ bool Clinker_pass3::chk_filename(const char* Filename
+ ,CAbs_lr1_sym* Tok,CAbs_lr1_sym* Err){
+ std::ifstream fle_chk;
+ fle_chk.open(Filename);
+ if(!fle_chk.good()){
+ Err->set_rc(*Tok,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*Err);
+ parser__->set_stop_parse(true);
+ return false;
+ }else{
+ delete Err;
+ fle_chk.close();
+ }
+ return true;
+ }
+ yacco2::CAbs_lr1_sym* Clinker_pass3::chk_for_overrun(){
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_LR1_eog_: break;
+ default: return 0;
+ }
+ yacco2::CAbs_lr1_sym* sym = new Err_end_preamble_kw_not_present;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_off();
+ return sym;
+ }
+
+Rlinker_pass3::Rlinker_pass3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlinker_pass3",0,Clinker_pass3::R_Rlinker_pass3_,P,false,false){
+}
+
+void Rlinker_pass3::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+RT_alphabet::RT_alphabet(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_alphabet",0,Clinker_pass3::R_RT_alphabet_,P,false,false){
+}
+
+void RT_alphabet::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_file_of_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void RT_alphabet::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_file_of_T_alphabet_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+RT_alphabet_filename::RT_alphabet_filename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_alphabet_filename",0,Clinker_pass3::R_RT_alphabet_filename_,P,false,false){
+}
+
+void RT_alphabet_filename::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__,
+ new Err_T_alphabet_file_does_not_exist) == false) return;
+ fsm->t_alphabet_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void RT_alphabet_filename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void RT_alphabet_filename::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void RT_alphabet_filename::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void RT_alphabet_filename::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_angled_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_T_alphabet_file_does_not_exist) == false) return;
+ fsm->t_alphabet_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void RT_alphabet_filename::sr6(){
+
+ CAbs_lr1_sym* sym = new Err_T_alphabet_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Remitfile::Remitfile(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Remitfile",0,Clinker_pass3::R_Remitfile_,P,false,false){
+}
+
+void Remitfile::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_emitfile_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Remitfile::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_emitfile_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Remitfile_filename::Remitfile_filename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Remitfile_filename",0,Clinker_pass3::R_Remitfile_filename_,P,false,false){
+}
+
+void Remitfile_filename::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_ofilename(fn,sf->p2__) == false) return;
+ fsm->emitfile_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Remitfile_filename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Remitfile_filename::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Remitfile_filename::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_emitfile_file_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Remitfile_filename::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_angled_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_ofilename(fn,sf->p2__) == false) return;
+ fsm->emitfile_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Remitfile_filename::sr6(){
+
+ CAbs_lr1_sym* sym = new Err_emitfile_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpreamble::Rpreamble(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpreamble",0,Clinker_pass3::R_Rpreamble_,P,false,false){
+}
+
+void Rpreamble::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_preamble_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rpreamble::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_preamble_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpreamble_code::Rpreamble_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpreamble_code",0,Clinker_pass3::R_Rpreamble_code_,P,false,false){
+}
+
+void Rpreamble_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ fsm->preamble_srce_ = sf->p2__;
+
+}
+
+void Rpreamble_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rpreamble_code::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+R_fsc_files::R_fsc_files(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("R_fsc_files",0,Clinker_pass3::R_R_fsc_files_,P,false,false){
+}
+
+void R_fsc_files::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_fsc_cntl_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+R_fsc_file::R_fsc_file(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("R_fsc_file",0,Clinker_pass3::R_R_fsc_file_,P,false,false){
+}
+
+void R_fsc_file::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_fsc_file_does_not_exist) == false) return;
+ fsm->grammars_fsc_files_.push_back(string(fn));
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void R_fsc_file::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void R_fsc_file::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void R_fsc_file::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_angled_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_fsc_file_does_not_exist) == false) return;
+ fsm->grammars_fsc_files_.push_back(string(fn));
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void R_fsc_file::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Clinker_pass3::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/linker_pass3.fsc b/web/yacco2/compiler/grammars/linker_pass3.fsc
new file mode 100644
index 0000000000..8c4eb5c87f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3.fsc
@@ -0,0 +1,27 @@
+/*
+ File: linker_pass3.fsc
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+transitive y
+grammar-name "linker_pass3"
+name-space "NS_linker_pass3"
+thread-name "Clinker_pass3"
+monolithic y
+file-name "linker_pass3.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 2
+ NS_linker_id::TH_linker_id
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_angled_string::TH_angled_string
+ NS_c_string::TH_c_string
+ NS_linker_id::TH_linker_id
+ NS_linker_preamble_code::TH_linker_preamble_code
+ NS_lint_balls::TH_lint_balls
+end-list-of-used-threads
+fsm-comments
+"Lexer: constructing tokens for \\olinker parsing stage."
diff --git a/web/yacco2/compiler/grammars/linker_pass3.h b/web/yacco2/compiler/grammars/linker_pass3.h
new file mode 100644
index 0000000000..a0557cdb2d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3.h
@@ -0,0 +1,195 @@
+/*
+ File: linker_pass3.h
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#ifndef __linker_pass3_h__
+#define __linker_pass3_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "linker_id.h"
+#include "linker_preamble_code.h"
+#include "lint_balls.h"
+#include "c_string.h"
+#include "angled_string.h"
+#include "c_literal.h"
+#include "bad_char_set.h"
+using namespace NS_yacco2_terminals;
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Clinker_pass3;
+namespace NS_linker_pass3 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[10];
+};
+class Clinker_pass3: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlinker_pass3_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlinker_pass3_ = 1
+ ,R_RT_alphabet_ = 570//start_of_rule_list + 2
+ ,rhs1_RT_alphabet_ = 2
+ ,rhs2_RT_alphabet_ = 3
+ ,rhs3_RT_alphabet_ = 4
+ ,R_RT_alphabet_filename_ = 571//start_of_rule_list + 4
+ ,rhs1_RT_alphabet_filename_ = 5
+ ,rhs2_RT_alphabet_filename_ = 6
+ ,rhs3_RT_alphabet_filename_ = 7
+ ,rhs4_RT_alphabet_filename_ = 8
+ ,rhs5_RT_alphabet_filename_ = 9
+ ,rhs6_RT_alphabet_filename_ = 10
+ ,R_Remitfile_ = 572//start_of_rule_list + 6
+ ,rhs1_Remitfile_ = 11
+ ,rhs2_Remitfile_ = 12
+ ,rhs3_Remitfile_ = 13
+ ,R_Remitfile_filename_ = 573//start_of_rule_list + 8
+ ,rhs1_Remitfile_filename_ = 14
+ ,rhs2_Remitfile_filename_ = 15
+ ,rhs3_Remitfile_filename_ = 16
+ ,rhs4_Remitfile_filename_ = 17
+ ,rhs5_Remitfile_filename_ = 18
+ ,rhs6_Remitfile_filename_ = 19
+ ,R_Rpreamble_ = 574//start_of_rule_list + 10
+ ,rhs1_Rpreamble_ = 20
+ ,rhs2_Rpreamble_ = 21
+ ,rhs3_Rpreamble_ = 22
+ ,R_Rpreamble_code_ = 575//start_of_rule_list + 12
+ ,rhs1_Rpreamble_code_ = 23
+ ,rhs2_Rpreamble_code_ = 24
+ ,rhs3_Rpreamble_code_ = 25
+ ,R_R_fsc_files_ = 576//start_of_rule_list + 14
+ ,rhs1_R_fsc_files_ = 26
+ ,rhs2_R_fsc_files_ = 27
+ ,rhs3_R_fsc_files_ = 28
+ ,R_R_fsc_file_ = 577//start_of_rule_list + 16
+ ,rhs1_R_fsc_file_ = 29
+ ,rhs2_R_fsc_file_ = 30
+ ,rhs3_R_fsc_file_ = 31
+ ,rhs4_R_fsc_file_ = 32
+ ,rhs5_R_fsc_file_ = 33
+ ,R_Rlint_ = 578//start_of_rule_list + 18
+ ,rhs1_Rlint_ = 34
+ ,rhs2_Rlint_ = 35
+ };
+ //no of la sets = 5
+ //no of states = 60
+ Clinker_pass3();
+ ~Clinker_pass3();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[36];
+
+ public:
+ bool chk_filename(const char* Filename,CAbs_lr1_sym* Tok,CAbs_lr1_sym* Err);
+ bool chk_ofilename(const char* Filename,CAbs_lr1_sym* Tok);
+ yacco2::CAbs_lr1_sym* chk_for_overrun();
+ std::string t_alphabet_filename_;
+ std::string emitfile_filename_;
+ T_syntax_code* preamble_srce_;
+ std::vector<std::string> grammars_fsc_files_;
+ std::vector<std::string> directories_;
+
+ };
+struct Rlinker_pass3;
+struct RT_alphabet;
+struct RT_alphabet_filename;
+struct Remitfile;
+struct Remitfile_filename;
+struct Rpreamble;
+struct Rpreamble_code;
+struct R_fsc_files;
+struct R_fsc_file;
+struct Rlint;
+struct Rlinker_pass3:public yacco2::CAbs_lr1_sym {
+ Rlinker_pass3(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct RT_alphabet:public yacco2::CAbs_lr1_sym {
+ RT_alphabet(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct RT_alphabet_filename:public yacco2::CAbs_lr1_sym {
+ RT_alphabet_filename(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Remitfile:public yacco2::CAbs_lr1_sym {
+ Remitfile(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Remitfile_filename:public yacco2::CAbs_lr1_sym {
+ Remitfile_filename(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rpreamble:public yacco2::CAbs_lr1_sym {
+ Rpreamble(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rpreamble_code:public yacco2::CAbs_lr1_sym {
+ Rpreamble_code(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct R_fsc_files:public yacco2::CAbs_lr1_sym {
+ R_fsc_files(yacco2::Parser* P);
+ public:
+ void sr3();
+};
+
+struct R_fsc_file:public yacco2::CAbs_lr1_sym {
+ R_fsc_file(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/linker_pass3.lex b/web/yacco2/compiler/grammars/linker_pass3.lex
new file mode 100644
index 0000000000..6615f8068d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3.lex
@@ -0,0 +1,357 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: linker_pass3.lex
+dates: 10 feb. 2005
+Purpose: Lexical Phase for Yacco2's first set linker
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |linker_pass3| grammar.\fbreak
+Quasi lexical / syntatic Phase for Yacco2's first set linker.\fbreak
+Sample of a grammar's First set control file:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/intro3.txt"}
+
+@/
+
+fsm
+(fsm-id "linker_pass3.lex",fsm-filename linker_pass3,fsm-namespace NS_linker_pass3
+,fsm-class Clinker_pass3{
+ user-prefix-declaration
+#include "linker_id.h"
+#include "linker_preamble_code.h"
+#include "lint_balls.h"
+#include "c_string.h"
+#include "angled_string.h"
+#include "c_literal.h"
+#include "bad_char_set.h"
+using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public:
+ bool chk_filename(const char* Filename,CAbs_lr1_sym* Tok,CAbs_lr1_sym* Err);
+ bool chk_ofilename(const char* Filename,CAbs_lr1_sym* Tok);
+ yacco2::CAbs_lr1_sym* chk_for_overrun();
+ std::string t_alphabet_filename_;
+ std::string emitfile_filename_;
+ T_syntax_code* preamble_srce_;
+ std::vector<std::string> grammars_fsc_files_;
+ std::vector<std::string> directories_;
+ ***
+ user-implementation
+ bool Clinker_pass3::chk_ofilename(const char* Filename,CAbs_lr1_sym* Tok){
+ std::ofstream fle_chk;
+ fle_chk.open(Filename,ios::out);
+ if(!fle_chk.good()){
+ CAbs_lr1_sym* sym = new Err_bad_filename(Filename);
+ sym->set_rc(*Tok,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*sym);
+ parser__->set_stop_parse(true);
+ return false;
+ }else{
+ fle_chk.close();
+ }
+ return true;
+ }
+ bool Clinker_pass3::chk_filename(const char* Filename
+ ,CAbs_lr1_sym* Tok,CAbs_lr1_sym* Err){
+ std::ifstream fle_chk;
+ fle_chk.open(Filename);
+ if(!fle_chk.good()){
+ Err->set_rc(*Tok,__FILE__,__LINE__);
+ parser__->add_token_to_error_queue(*Err);
+ parser__->set_stop_parse(true);
+ return false;
+ }else{
+ delete Err;
+ fle_chk.close();
+ }
+ return true;
+ }
+ yacco2::CAbs_lr1_sym* Clinker_pass3::chk_for_overrun(){
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_LR1_eog_: break;
+ default: return 0;
+ }
+ yacco2::CAbs_lr1_sym* sym = new Err_end_preamble_kw_not_present;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ parser__->set_use_all_shift_off();
+ return sym;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "9 Feb. 2005",fsm-debug "false"
+,fsm-comments "Lexer: constructing tokens for \\olinker parsing stage.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rlinker_pass3 (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> Rlint
+ RT_alphabet Rlint RT_alphabet_filename
+ Rlint
+ Remitfile Rlint Remitfile_filename
+ Rlint
+ Rpreamble Rpreamble_code
+ Rlint
+ R_fsc_files
+ Rlint
+ eog
+}
+
+RT_alphabet (){
+ -> ||| "file-of-T-alphabet" NS_linker_id::TH_linker_id
+ -> ||| |?| NULL {//catch errors
+ op
+ CAbs_lr1_sym* sym = new Err_file_of_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_file_of_T_alphabet_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+RT_alphabet_filename (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__,
+ new Err_T_alphabet_file_does_not_exist) == false) return;
+ fsm->t_alphabet_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "bad eos" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {//catch other yacco2_linker_keywords as errors
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "angled-string" NS_angled_string::TH_angled_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_T_alphabet_file_does_not_exist) == false) return;
+ fsm->t_alphabet_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_T_alphabet_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Remitfile (){
+ -> ||| "emitfile" NS_linker_id::TH_linker_id
+ -> ||| |?| NULL {//catch other yacco2_linker_keywords as errors
+ op
+ CAbs_lr1_sym* sym = new Err_emitfile_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_emitfile_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Remitfile_filename (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_ofilename(fn,sf->p2__) == false) return;
+ fsm->emitfile_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "bad eos" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {//catch errors
+ op
+ CAbs_lr1_sym* sym = new Err_emitfile_file_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "angled-string" NS_angled_string::TH_angled_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_ofilename(fn,sf->p2__) == false) return;
+ fsm->emitfile_filename_ += fn;
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_emitfile_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpreamble (){
+ -> ||| "preamble" NS_linker_id::TH_linker_id
+ -> ||| |?| NULL {//catch other yacco2_linker_keywords as errors
+ op
+ CAbs_lr1_sym* sym = new Err_preamble_kw_not_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_preamble_kw_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpreamble_code (){
+ -> ||| "syntax-code" NS_linker_preamble_code::TH_linker_preamble_code{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ fsm->preamble_srce_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {//catch returned errors
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+R_fsc_files (){
+ -> R_fsc_file Rlint
+ -> R_fsc_files R_fsc_file Rlint
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_fsc_cntl_file_not_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+R_fsc_file (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->c_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_fsc_file_does_not_exist) == false) return;
+ fsm->grammars_fsc_files_.push_back(string(fn));
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "bad eos" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "angled-string" NS_angled_string::TH_angled_string{
+ op
+ Clinker_pass3* fsm = (Clinker_pass3*) rule_info__.parser__->fsm_tbl__;
+ const char* fn = sf->p2__->angled_string()->c_str();
+ if(fsm->chk_filename(fn,sf->p2__
+ ,new Err_fsc_file_does_not_exist) == false) return;
+ fsm->grammars_fsc_files_.push_back(string(fn));
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/linker_pass3sym.cpp b/web/yacco2/compiler/grammars/linker_pass3sym.cpp
new file mode 100644
index 0000000000..ee9011c3ce
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3sym.cpp
@@ -0,0 +1,545 @@
+/*
+ File: linker_pass3sym.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_pass3;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clinker_pass3::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlinker_pass3_:{
+ Rlinker_pass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rlinker_pass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlinker_pass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 15;
+
+
+ sym->op();
+ return;}
+ case rhs1_RT_alphabet_:{
+ RT_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RT_alphabet_:{
+ RT_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_RT_alphabet_:{
+ RT_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_RT_alphabet_filename_:{
+ RT_alphabet_filename* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Remitfile_:{
+ Remitfile* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Remitfile_:{
+ Remitfile* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Remitfile_:{
+ Remitfile* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Remitfile_filename_:{
+ Remitfile_filename* sym;
+ if(re->rule_ == 0){
+ sym = new Remitfile_filename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Remitfile_filename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Rpreamble_:{
+ Rpreamble* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rpreamble_:{
+ Rpreamble* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpreamble_:{
+ Rpreamble* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rpreamble_code_:{
+ Rpreamble_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rpreamble_code_:{
+ Rpreamble_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpreamble_code_:{
+ Rpreamble_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rpreamble_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpreamble_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_R_fsc_files_:{
+ R_fsc_files* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_files(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_files*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_R_fsc_files_:{
+ R_fsc_files* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_files(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_files*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_R_fsc_files_:{
+ R_fsc_files* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_files(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_files*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_R_fsc_file_:{
+ R_fsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_R_fsc_file_:{
+ R_fsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_R_fsc_file_:{
+ R_fsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_R_fsc_file_:{
+ R_fsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_R_fsc_file_:{
+ R_fsc_file* sym;
+ if(re->rule_ == 0){
+ sym = new R_fsc_file(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R_fsc_file*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/linker_pass3tbl.cpp b/web/yacco2/compiler/grammars/linker_pass3tbl.cpp
new file mode 100644
index 0000000000..7d34a3d8f6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_pass3tbl.cpp
@@ -0,0 +1,1247 @@
+/*
+ File: linker_pass3tbl.cpp
+ Date and Time: Fri Jan 30 18:55:14 2015
+*/
+#include "linker_pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_pass3;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_eog
+// LR1_reduce_operator
+yacco2::UCHAR LA1_Clinker_pass3[] ={
+1
+,0,19
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Clinker_pass3[] ={
+1
+,0,17
+};
+// LR1_eog
+yacco2::UCHAR LA3_Clinker_pass3[] ={
+1
+,0,2
+};
+// LR1_eog
+// LR1_reduce_operator
+yacco2::UCHAR LA4_Clinker_pass3[] ={
+1
+,0,18
+};
+// LR1_eolr
+yacco2::UCHAR LA5_Clinker_pass3[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clinker_pass3;
+extern yacco2::State S2_Clinker_pass3;
+struct S2ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Clinker_pass3 S2tt_Clinker_pass3 = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Clinker_pass3;
+extern yacco2::State S4_Clinker_pass3;
+extern yacco2::State S5_Clinker_pass3;
+extern yacco2::State S6_Clinker_pass3;
+extern yacco2::State S7_Clinker_pass3;
+extern yacco2::State S8_Clinker_pass3;
+extern yacco2::State S9_Clinker_pass3;
+extern yacco2::State S10_Clinker_pass3;
+extern yacco2::State S11_Clinker_pass3;
+extern yacco2::State S12_Clinker_pass3;
+extern yacco2::State S13_Clinker_pass3;
+extern yacco2::State S14_Clinker_pass3;
+extern yacco2::State S15_Clinker_pass3;
+extern yacco2::State S16_Clinker_pass3;
+extern yacco2::State S17_Clinker_pass3;
+struct S17ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S17ttd_Clinker_pass3 S17tt_Clinker_pass3 = {
+ 3 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_angled_string
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S18_Clinker_pass3;
+extern yacco2::State S19_Clinker_pass3;
+extern yacco2::State S20_Clinker_pass3;
+extern yacco2::State S21_Clinker_pass3;
+extern yacco2::State S22_Clinker_pass3;
+extern yacco2::State S23_Clinker_pass3;
+extern yacco2::State S24_Clinker_pass3;
+extern yacco2::State S25_Clinker_pass3;
+extern yacco2::State S26_Clinker_pass3;
+struct S26ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S26ttd_Clinker_pass3 S26tt_Clinker_pass3 = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_linker_id
+};
+extern yacco2::State S27_Clinker_pass3;
+extern yacco2::State S28_Clinker_pass3;
+extern yacco2::State S29_Clinker_pass3;
+extern yacco2::State S30_Clinker_pass3;
+struct S30ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S30ttd_Clinker_pass3 S30tt_Clinker_pass3 = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_angled_string
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S31_Clinker_pass3;
+extern yacco2::State S32_Clinker_pass3;
+extern yacco2::State S33_Clinker_pass3;
+extern yacco2::State S34_Clinker_pass3;
+extern yacco2::State S35_Clinker_pass3;
+extern yacco2::State S36_Clinker_pass3;
+extern yacco2::State S37_Clinker_pass3;
+struct S37ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S37ttd_Clinker_pass3 S37tt_Clinker_pass3 = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_linker_id
+};
+extern yacco2::State S38_Clinker_pass3;
+extern yacco2::State S39_Clinker_pass3;
+extern yacco2::State S40_Clinker_pass3;
+extern yacco2::State S41_Clinker_pass3;
+struct S41ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S41ttd_Clinker_pass3 S41tt_Clinker_pass3 = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_angled_string
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S42_Clinker_pass3;
+extern yacco2::State S43_Clinker_pass3;
+extern yacco2::State S44_Clinker_pass3;
+extern yacco2::State S45_Clinker_pass3;
+extern yacco2::State S46_Clinker_pass3;
+extern yacco2::State S47_Clinker_pass3;
+extern yacco2::State S48_Clinker_pass3;
+struct S48ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S48ttd_Clinker_pass3 S48tt_Clinker_pass3 = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_linker_id
+};
+extern yacco2::State S49_Clinker_pass3;
+extern yacco2::State S50_Clinker_pass3;
+extern yacco2::State S51_Clinker_pass3;
+extern yacco2::State S52_Clinker_pass3;
+struct S52ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S52ttd_Clinker_pass3 S52tt_Clinker_pass3 = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_linker_preamble_code
+};
+extern yacco2::State S53_Clinker_pass3;
+extern yacco2::State S54_Clinker_pass3;
+extern yacco2::State S55_Clinker_pass3;
+extern yacco2::State S56_Clinker_pass3;
+struct S56ttd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S56ttd_Clinker_pass3 S56tt_Clinker_pass3 = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_angled_string
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S57_Clinker_pass3;
+extern yacco2::State S58_Clinker_pass3;
+extern yacco2::State S59_Clinker_pass3;
+extern yacco2::State S60_Clinker_pass3;
+struct S1std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Clinker_pass3 S1st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Clinker_pass3} // accept sym: Rlinker_pass3
+ ,{578,(State*)&S4_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S1rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Clinker_pass3 S1rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Clinker_pass3 = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S1st_Clinker_pass3,(Reduce_tbl*)&S1rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S2std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Clinker_pass3 S2st_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Clinker_pass3} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Clinker_pass3 = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clinker_pass3,0,0,0,0};
+struct S3rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clinker_pass3 S3rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_pass3,Clinker_pass3::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Clinker_pass3 = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Clinker_pass3,0,0,0};
+struct S4std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Clinker_pass3 S4st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S25_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S26_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S5_Clinker_pass3} // shift sym: RT_alphabet
+ }// end of shift table
+};
+yacco2::Shift_entry S4pse_Clinker_pass3 = {3,(State*)&S26_Clinker_pass3};
+yacco2::Shift_entry S4qse_Clinker_pass3 = {0,(State*)&S25_Clinker_pass3};
+yacco2::State S4_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{4
+,(Shift_entry*)&S4pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S4st_Clinker_pass3,0,(State_s_thread_tbl*)&S26tt_Clinker_pass3,0,(Shift_entry*)&S4qse_Clinker_pass3
+};
+struct S5std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Clinker_pass3 S5st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S6_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S5rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clinker_pass3 S5rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Clinker_pass3 = //State's vectored into symbol: "RT_alphabet"
+{5
+,(Shift_entry*)&S5pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S5st_Clinker_pass3,(Reduce_tbl*)&S5rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S6std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Clinker_pass3 S6st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S29_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S30_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S7_Clinker_pass3} // shift sym: RT_alphabet_filename
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Clinker_pass3 = {3,(State*)&S30_Clinker_pass3};
+yacco2::Shift_entry S6qse_Clinker_pass3 = {0,(State*)&S29_Clinker_pass3};
+yacco2::State S6_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{6
+,(Shift_entry*)&S6pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S6st_Clinker_pass3,0,(State_s_thread_tbl*)&S30tt_Clinker_pass3,0,(Shift_entry*)&S6qse_Clinker_pass3
+};
+struct S7std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Clinker_pass3 S7st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S8_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S7rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clinker_pass3 S7rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Clinker_pass3 = //State's vectored into symbol: "RT_alphabet_filename"
+{7
+,(Shift_entry*)&S7pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S7st_Clinker_pass3,(Reduce_tbl*)&S7rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S8std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Clinker_pass3 S8st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S36_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S37_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S9_Clinker_pass3} // shift sym: Remitfile
+ }// end of shift table
+};
+yacco2::Shift_entry S8pse_Clinker_pass3 = {3,(State*)&S37_Clinker_pass3};
+yacco2::Shift_entry S8qse_Clinker_pass3 = {0,(State*)&S36_Clinker_pass3};
+yacco2::State S8_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{8
+,(Shift_entry*)&S8pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S8st_Clinker_pass3,0,(State_s_thread_tbl*)&S37tt_Clinker_pass3,0,(Shift_entry*)&S8qse_Clinker_pass3
+};
+struct S9std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Clinker_pass3 S9st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S10_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S9rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clinker_pass3 S9rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Clinker_pass3 = //State's vectored into symbol: "Remitfile"
+{9
+,(Shift_entry*)&S9pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S9st_Clinker_pass3,(Reduce_tbl*)&S9rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S10std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Clinker_pass3 S10st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S40_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S41_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S11_Clinker_pass3} // shift sym: Remitfile_filename
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Clinker_pass3 = {3,(State*)&S41_Clinker_pass3};
+yacco2::Shift_entry S10qse_Clinker_pass3 = {0,(State*)&S40_Clinker_pass3};
+yacco2::State S10_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{10
+,(Shift_entry*)&S10pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S10st_Clinker_pass3,0,(State_s_thread_tbl*)&S41tt_Clinker_pass3,0,(Shift_entry*)&S10qse_Clinker_pass3
+};
+struct S11std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Clinker_pass3 S11st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S12_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S11rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clinker_pass3 S11rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Clinker_pass3 = //State's vectored into symbol: "Remitfile_filename"
+{11
+,(Shift_entry*)&S11pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S11st_Clinker_pass3,(Reduce_tbl*)&S11rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S12std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S12std_Clinker_pass3 S12st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S47_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S48_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S13_Clinker_pass3} // shift sym: Rpreamble
+ }// end of shift table
+};
+yacco2::Shift_entry S12pse_Clinker_pass3 = {3,(State*)&S48_Clinker_pass3};
+yacco2::Shift_entry S12qse_Clinker_pass3 = {0,(State*)&S47_Clinker_pass3};
+yacco2::State S12_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{12
+,(Shift_entry*)&S12pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S12st_Clinker_pass3,0,(State_s_thread_tbl*)&S48tt_Clinker_pass3,0,(Shift_entry*)&S12qse_Clinker_pass3
+};
+struct S13std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Clinker_pass3 S13st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S51_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S52_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S14_Clinker_pass3} // shift sym: Rpreamble_code
+ }// end of shift table
+};
+yacco2::Shift_entry S13pse_Clinker_pass3 = {3,(State*)&S52_Clinker_pass3};
+yacco2::Shift_entry S13qse_Clinker_pass3 = {0,(State*)&S51_Clinker_pass3};
+yacco2::State S13_Clinker_pass3 = //State's vectored into symbol: "Rpreamble"
+{13
+,(Shift_entry*)&S13pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S13st_Clinker_pass3,0,(State_s_thread_tbl*)&S52tt_Clinker_pass3,0,(Shift_entry*)&S13qse_Clinker_pass3
+};
+struct S14std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_Clinker_pass3 S14st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S15_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S14rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clinker_pass3 S14rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S14_Clinker_pass3 = //State's vectored into symbol: "Rpreamble_code"
+{14
+,(Shift_entry*)&S14pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S14st_Clinker_pass3,(Reduce_tbl*)&S14rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S15std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S15std_Clinker_pass3 S15st_Clinker_pass3 = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S55_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S56_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S16_Clinker_pass3} // shift sym: R_fsc_files
+ ,{577,(State*)&S59_Clinker_pass3} // shift sym: R_fsc_file
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Clinker_pass3 = {3,(State*)&S56_Clinker_pass3};
+yacco2::Shift_entry S15qse_Clinker_pass3 = {0,(State*)&S55_Clinker_pass3};
+yacco2::State S15_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{15
+,(Shift_entry*)&S15pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S15st_Clinker_pass3,0,(State_s_thread_tbl*)&S56tt_Clinker_pass3,0,(Shift_entry*)&S15qse_Clinker_pass3
+};
+struct S16std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S16std_Clinker_pass3 S16st_Clinker_pass3 = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S17_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S57_Clinker_pass3} // shift sym: R_fsc_file
+ ,{578,(State*)&S23_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Clinker_pass3 = {3,(State*)&S17_Clinker_pass3};
+struct S16rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clinker_pass3 S16rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S16_Clinker_pass3 = //State's vectored into symbol: "R_fsc_files"
+{16
+,(Shift_entry*)&S16pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S16st_Clinker_pass3,(Reduce_tbl*)&S16rt_Clinker_pass3,(State_s_thread_tbl*)&S17tt_Clinker_pass3,0,0};
+struct S17std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S17std_Clinker_pass3 S17st_Clinker_pass3 = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S18_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{273,(State*)&S19_Clinker_pass3} // shift sym: T_angled_string
+ ,{275,(State*)&S20_Clinker_pass3} // shift sym: T_c_string
+ ,{375,(State*)&S3_Clinker_pass3} // shift sym: T_lint
+ ,{394,(State*)&S21_Clinker_pass3} // shift sym: Err_bad_eos
+ ,{395,(State*)&S22_Clinker_pass3} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S17qse_Clinker_pass3 = {0,(State*)&S18_Clinker_pass3};
+yacco2::State S17_Clinker_pass3 = //State's vectored into symbol: "|||"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Clinker_pass3,0,0,0,(Shift_entry*)&S17qse_Clinker_pass3
+};
+struct S18rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Clinker_pass3 S18rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs5_R_fsc_file_}
+ }// end of reduce table
+};
+yacco2::State S18_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Clinker_pass3,0,0,0};
+struct S19rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clinker_pass3 S19rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs4_R_fsc_file_}
+ }// end of reduce table
+};
+yacco2::State S19_Clinker_pass3 = //State's vectored into symbol: "angled-string"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clinker_pass3,0,0,0};
+struct S20rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Clinker_pass3 S20rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs1_R_fsc_file_}
+ }// end of reduce table
+};
+yacco2::State S20_Clinker_pass3 = //State's vectored into symbol: "c-string"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clinker_pass3,0,0,0};
+struct S21rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clinker_pass3 S21rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs2_R_fsc_file_}
+ }// end of reduce table
+};
+yacco2::State S21_Clinker_pass3 = //State's vectored into symbol: "bad eos"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clinker_pass3,0,0,0};
+struct S22rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clinker_pass3 S22rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs3_R_fsc_file_}
+ }// end of reduce table
+};
+yacco2::State S22_Clinker_pass3 = //State's vectored into symbol: "bad esc"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clinker_pass3,0,0,0};
+struct S23std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S23std_Clinker_pass3 S23st_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S24_Clinker_pass3} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S23_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Clinker_pass3,0,0,0,0};
+struct S24rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clinker_pass3 S24rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clinker_pass3,Clinker_pass3::rhs1_Rlinker_pass3_}
+ }// end of reduce table
+};
+yacco2::State S24_Clinker_pass3 = //State's vectored into symbol: "eog"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clinker_pass3,0,0,0};
+struct S25rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Clinker_pass3 S25rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_RT_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S25_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Clinker_pass3,0,0,0};
+struct S26std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_Clinker_pass3 S26st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S27_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{362,(State*)&S28_Clinker_pass3} // shift sym: T_file_of_T_alphabet
+ }// end of shift table
+};
+yacco2::Shift_entry S26qse_Clinker_pass3 = {0,(State*)&S27_Clinker_pass3};
+yacco2::State S26_Clinker_pass3 = //State's vectored into symbol: "|||"
+{26
+,0,0,0,0,(Shift_tbl*)&S26st_Clinker_pass3,0,0,0,(Shift_entry*)&S26qse_Clinker_pass3
+};
+struct S27rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Clinker_pass3 S27rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_RT_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S27_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Clinker_pass3,0,0,0};
+struct S28rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Clinker_pass3 S28rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_RT_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S28_Clinker_pass3 = //State's vectored into symbol: "file-of-T-alphabet"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clinker_pass3,0,0,0};
+struct S29rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Clinker_pass3 S29rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs6_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S29_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Clinker_pass3,0,0,0};
+struct S30std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S30std_Clinker_pass3 S30st_Clinker_pass3 = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S31_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{273,(State*)&S32_Clinker_pass3} // shift sym: T_angled_string
+ ,{275,(State*)&S33_Clinker_pass3} // shift sym: T_c_string
+ ,{394,(State*)&S34_Clinker_pass3} // shift sym: Err_bad_eos
+ ,{395,(State*)&S35_Clinker_pass3} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S30qse_Clinker_pass3 = {0,(State*)&S31_Clinker_pass3};
+yacco2::State S30_Clinker_pass3 = //State's vectored into symbol: "|||"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Clinker_pass3,0,0,0,(Shift_entry*)&S30qse_Clinker_pass3
+};
+struct S31rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Clinker_pass3 S31rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs4_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S31_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Clinker_pass3,0,0,0};
+struct S32rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Clinker_pass3 S32rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs5_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S32_Clinker_pass3 = //State's vectored into symbol: "angled-string"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Clinker_pass3,0,0,0};
+struct S33rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Clinker_pass3 S33rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S33_Clinker_pass3 = //State's vectored into symbol: "c-string"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Clinker_pass3,0,0,0};
+struct S34rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Clinker_pass3 S34rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S34_Clinker_pass3 = //State's vectored into symbol: "bad eos"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Clinker_pass3,0,0,0};
+struct S35rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Clinker_pass3 S35rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_RT_alphabet_filename_}
+ }// end of reduce table
+};
+yacco2::State S35_Clinker_pass3 = //State's vectored into symbol: "bad esc"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Clinker_pass3,0,0,0};
+struct S36rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Clinker_pass3 S36rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_Remitfile_}
+ }// end of reduce table
+};
+yacco2::State S36_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Clinker_pass3,0,0,0};
+struct S37std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S37std_Clinker_pass3 S37st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S38_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{357,(State*)&S39_Clinker_pass3} // shift sym: T_emitfile
+ }// end of shift table
+};
+yacco2::Shift_entry S37qse_Clinker_pass3 = {0,(State*)&S38_Clinker_pass3};
+yacco2::State S37_Clinker_pass3 = //State's vectored into symbol: "|||"
+{37
+,0,0,0,0,(Shift_tbl*)&S37st_Clinker_pass3,0,0,0,(Shift_entry*)&S37qse_Clinker_pass3
+};
+struct S38rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Clinker_pass3 S38rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Remitfile_}
+ }// end of reduce table
+};
+yacco2::State S38_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Clinker_pass3,0,0,0};
+struct S39rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Clinker_pass3 S39rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_Remitfile_}
+ }// end of reduce table
+};
+yacco2::State S39_Clinker_pass3 = //State's vectored into symbol: "emitfile"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Clinker_pass3,0,0,0};
+struct S40rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Clinker_pass3 S40rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs6_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S40_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Clinker_pass3,0,0,0};
+struct S41std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S41std_Clinker_pass3 S41st_Clinker_pass3 = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S42_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{273,(State*)&S43_Clinker_pass3} // shift sym: T_angled_string
+ ,{275,(State*)&S44_Clinker_pass3} // shift sym: T_c_string
+ ,{394,(State*)&S45_Clinker_pass3} // shift sym: Err_bad_eos
+ ,{395,(State*)&S46_Clinker_pass3} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S41qse_Clinker_pass3 = {0,(State*)&S42_Clinker_pass3};
+yacco2::State S41_Clinker_pass3 = //State's vectored into symbol: "|||"
+{41
+,0,0,0,0,(Shift_tbl*)&S41st_Clinker_pass3,0,0,0,(Shift_entry*)&S41qse_Clinker_pass3
+};
+struct S42rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Clinker_pass3 S42rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs4_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S42_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Clinker_pass3,0,0,0};
+struct S43rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Clinker_pass3 S43rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs5_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S43_Clinker_pass3 = //State's vectored into symbol: "angled-string"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Clinker_pass3,0,0,0};
+struct S44rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Clinker_pass3 S44rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S44_Clinker_pass3 = //State's vectored into symbol: "c-string"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Clinker_pass3,0,0,0};
+struct S45rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Clinker_pass3 S45rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S45_Clinker_pass3 = //State's vectored into symbol: "bad eos"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Clinker_pass3,0,0,0};
+struct S46rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Clinker_pass3 S46rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_Remitfile_filename_}
+ }// end of reduce table
+};
+yacco2::State S46_Clinker_pass3 = //State's vectored into symbol: "bad esc"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Clinker_pass3,0,0,0};
+struct S47rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Clinker_pass3 S47rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_Rpreamble_}
+ }// end of reduce table
+};
+yacco2::State S47_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Clinker_pass3,0,0,0};
+struct S48std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S48std_Clinker_pass3 S48st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S49_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{358,(State*)&S50_Clinker_pass3} // shift sym: T_preamble
+ }// end of shift table
+};
+yacco2::Shift_entry S48qse_Clinker_pass3 = {0,(State*)&S49_Clinker_pass3};
+yacco2::State S48_Clinker_pass3 = //State's vectored into symbol: "|||"
+{48
+,0,0,0,0,(Shift_tbl*)&S48st_Clinker_pass3,0,0,0,(Shift_entry*)&S48qse_Clinker_pass3
+};
+struct S49rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Clinker_pass3 S49rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rpreamble_}
+ }// end of reduce table
+};
+yacco2::State S49_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Clinker_pass3,0,0,0};
+struct S50rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Clinker_pass3 S50rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_Rpreamble_}
+ }// end of reduce table
+};
+yacco2::State S50_Clinker_pass3 = //State's vectored into symbol: "preamble"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Clinker_pass3,0,0,0};
+struct S51rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Clinker_pass3 S51rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs3_Rpreamble_code_}
+ }// end of reduce table
+};
+yacco2::State S51_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Clinker_pass3,0,0,0};
+struct S52std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S52std_Clinker_pass3 S52st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S53_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S54_Clinker_pass3} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S52qse_Clinker_pass3 = {0,(State*)&S53_Clinker_pass3};
+yacco2::State S52_Clinker_pass3 = //State's vectored into symbol: "|||"
+{52
+,0,0,0,0,(Shift_tbl*)&S52st_Clinker_pass3,0,0,0,(Shift_entry*)&S52qse_Clinker_pass3
+};
+struct S53rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Clinker_pass3 S53rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs2_Rpreamble_code_}
+ }// end of reduce table
+};
+yacco2::State S53_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Clinker_pass3,0,0,0};
+struct S54rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Clinker_pass3 S54rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clinker_pass3,Clinker_pass3::rhs1_Rpreamble_code_}
+ }// end of reduce table
+};
+yacco2::State S54_Clinker_pass3 = //State's vectored into symbol: "syntax-code"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Clinker_pass3,0,0,0};
+struct S55rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Clinker_pass3 S55rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs3_R_fsc_files_}
+ }// end of reduce table
+};
+yacco2::State S55_Clinker_pass3 = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Clinker_pass3,0,0,0};
+struct S56std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S56std_Clinker_pass3 S56st_Clinker_pass3 = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S18_Clinker_pass3} // shift sym: LR1_questionable_shift_operator
+ ,{273,(State*)&S19_Clinker_pass3} // shift sym: T_angled_string
+ ,{275,(State*)&S20_Clinker_pass3} // shift sym: T_c_string
+ ,{394,(State*)&S21_Clinker_pass3} // shift sym: Err_bad_eos
+ ,{395,(State*)&S22_Clinker_pass3} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S56qse_Clinker_pass3 = {0,(State*)&S18_Clinker_pass3};
+yacco2::State S56_Clinker_pass3 = //State's vectored into symbol: "|||"
+{56
+,0,0,0,0,(Shift_tbl*)&S56st_Clinker_pass3,0,0,0,(Shift_entry*)&S56qse_Clinker_pass3
+};
+struct S57std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S57std_Clinker_pass3 S57st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S58_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S57pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S57rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Clinker_pass3 S57rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S57_Clinker_pass3 = //State's vectored into symbol: "R_fsc_file"
+{57
+,(Shift_entry*)&S57pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S57st_Clinker_pass3,(Reduce_tbl*)&S57rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S58rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Clinker_pass3 S58rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs2_R_fsc_files_}
+ }// end of reduce table
+};
+yacco2::State S58_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Clinker_pass3,0,0,0};
+struct S59std_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S59std_Clinker_pass3 S59st_Clinker_pass3 = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_pass3} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S60_Clinker_pass3} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S59pse_Clinker_pass3 = {3,(State*)&S2_Clinker_pass3};
+struct S59rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Clinker_pass3 S59rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S59_Clinker_pass3 = //State's vectored into symbol: "R_fsc_file"
+{59
+,(Shift_entry*)&S59pse_Clinker_pass3,0,0,0,(Shift_tbl*)&S59st_Clinker_pass3,(Reduce_tbl*)&S59rt_Clinker_pass3,(State_s_thread_tbl*)&S2tt_Clinker_pass3,0,0};
+struct S60rtd_Clinker_pass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Clinker_pass3 S60rt_Clinker_pass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clinker_pass3,Clinker_pass3::rhs1_R_fsc_files_}
+ }// end of reduce table
+};
+yacco2::State S60_Clinker_pass3 = //State's vectored into symbol: "Rlint"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Clinker_pass3,0,0,0};
diff --git a/web/yacco2/compiler/grammars/linker_preamble_code.cpp b/web/yacco2/compiler/grammars/linker_preamble_code.cpp
new file mode 100644
index 0000000000..ff17ab0e14
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_code.cpp
@@ -0,0 +1,293 @@
+/*
+ File: linker_preamble_code.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "linker_preamble_code.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_preamble_code;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Clinker_preamble_code::
+ Clinker_preamble_code()
+ :yacco2::CAbs_fsm
+ ("linker_preamble_code.lex"
+ ,"1.0"
+ ,"30 dec 2002"
+ ,false
+ ,"\\olinker's lexer of preamble code section:\n similar to Pass3 lexer."
+ ,"Fri Jan 30 18:55:15 2015 "
+ ,S1_Clinker_preamble_code){
+
+ empty_sdc_ = true;
+ chrs_.clear();
+
+ }
+
+Clinker_preamble_code::~Clinker_preamble_code(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clinker_preamble_code::failed(){
+ return false;
+ }
+ void Clinker_preamble_code::op(){
+ parser__->set_use_all_shift_on();
+ empty_sdc_ = true;
+ chrs_.clear();
+ CAbs_lr1_sym* sym = parser__->start_token__;
+ switch (sym->enumerated_id__){
+
+ case T_Enum::T_LR1_eog_: break;
+ default: return;
+ }
+ parser__->set_use_all_shift_off();
+
+}
+int Clinker_preamble_code::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+};
+Rlinker_preamble_code::Rlinker_preamble_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlinker_preamble_code",0,Clinker_preamble_code::R_Rlinker_preamble_code_,P,false,false){
+}
+
+void Rlinker_preamble_code::op(){
+ sstrace_rulesss
+
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ if(fsm->empty_sdc_ == true){
+ sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ sym = new T_syntax_code(fsm->chrs_.c_str());
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+Rchrs::Rchrs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchrs",0,Clinker_preamble_code::R_Rchrs_,P,false,false){
+}
+
+Rchr::Rchr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchr",0,Clinker_preamble_code::R_Rchr_,P,false,false){
+}
+
+void Rchr::op(){
+ sstrace_rulesss
+
+ if(rule_info__.parser__->stop_parse__ == true) return;
+ if(rule_info__.parser__->use_all_shift__ == false) return;// end-preamble seen
+ CAbs_lr1_sym* la_sym = rule_info__.parser__->current_token();
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ // watch for overrun
+ if(la_sym->enumerated_id__ == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_end_preamble_kw_not_present;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+void Rchr::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->chrs_ += k->comment_data()->c_str();
+
+}
+
+void Rchr::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_c_string* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding double quotes
+ fsm->chrs_ += '"';
+ fsm->chrs_ += k->c_string()->c_str();
+ fsm->chrs_ += '"';
+ fsm->empty_sdc_ = false;
+
+}
+
+void Rchr::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_literal* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_c_literal* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding single quotes
+ fsm->chrs_ += "'";
+ fsm->chrs_ += k->c_literal()->c_str();
+ fsm->chrs_ += "'";
+ fsm->empty_sdc_ = false;
+
+}
+
+void Rchr::sr4(){
+
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ rule_info__.parser__->set_use_all_shift_off();
+ if(fsm->empty_sdc_ == true){
+ CAbs_lr1_sym* sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+
+}
+
+void Rchr::sr5(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* k = sf->p1__;
+ switch (k->enumerated_id__){
+ case T_Enum::T_T_eol_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ case T_Enum::T_raw_sp_:{
+ fsm->chrs_ += " ";
+ break;
+ }
+ case T_Enum::T_raw_ff_:{
+ fsm->chrs_ += "\f";
+ break;
+ }
+ case T_Enum::T_raw_vt_:{
+ fsm->chrs_ += "\v";
+ break;
+ }
+ case T_Enum::T_raw_ht_:{
+ fsm->chrs_ += "\t";
+ break;
+ }
+ case T_Enum::T_raw_cr_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ case T_Enum::T_raw_lf_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ default:{
+ fsm->chrs_ += *k->id__;
+ fsm->empty_sdc_ = false;
+ break;
+ }
+ }
+
+}
+
+void Rchr::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rchr::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*)rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->chrs_ += k->identifier()->c_str();
+
+}
+
diff --git a/web/yacco2/compiler/grammars/linker_preamble_code.fsc b/web/yacco2/compiler/grammars/linker_preamble_code.fsc
new file mode 100644
index 0000000000..bb9eecb2ab
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_code.fsc
@@ -0,0 +1,28 @@
+/*
+ File: linker_preamble_code.fsc
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+transitive y
+grammar-name "linker_preamble_code"
+name-space "NS_linker_preamble_code"
+thread-name "TH_linker_preamble_code"
+monolithic n
+file-name "linker_preamble_code.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_all_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 4
+ NS_c_comments::TH_c_comments
+ NS_c_string::TH_c_string
+ NS_c_literal::TH_c_literal
+ NS_linker_id::TH_linker_id
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_c_comments::TH_c_comments
+ NS_c_literal::TH_c_literal
+ NS_c_string::TH_c_string
+ NS_linker_id::TH_linker_id
+end-list-of-used-threads
+fsm-comments
+"\\olinker's lexer of preamble code section:\n similar to Pass3 lexer."
diff --git a/web/yacco2/compiler/grammars/linker_preamble_code.h b/web/yacco2/compiler/grammars/linker_preamble_code.h
new file mode 100644
index 0000000000..c3f70443b9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_code.h
@@ -0,0 +1,98 @@
+/*
+ File: linker_preamble_code.h
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#ifndef __linker_preamble_code_h__
+#define __linker_preamble_code_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "string.h"
+#include "c_comments.h"
+#include "c_string.h"
+#include "c_literal.h"
+#include "linker_id.h"
+
+extern yacco2::Thread_entry ITH_linker_preamble_code;
+
+extern yacco2::State S1_Clinker_preamble_code;
+namespace NS_linker_preamble_code {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_linker_preamble_code(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_linker_preamble_code(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Clinker_preamble_code: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlinker_preamble_code_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlinker_preamble_code_ = 1
+ ,R_Rchrs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rchrs_ = 2
+ ,rhs2_Rchrs_ = 3
+ ,R_Rchr_ = 571//start_of_rule_list + 4
+ ,rhs1_Rchr_ = 4
+ ,rhs2_Rchr_ = 5
+ ,rhs3_Rchr_ = 6
+ ,rhs4_Rchr_ = 7
+ ,rhs5_Rchr_ = 8
+ ,rhs6_Rchr_ = 9
+ ,rhs7_Rchr_ = 10
+ };
+ //no of la sets = 1
+ //no of states = 12
+ Clinker_preamble_code();
+ ~Clinker_preamble_code();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ std::string chrs_;
+ bool empty_sdc_;
+
+ };
+struct Rlinker_preamble_code;
+struct Rchrs;
+struct Rchr;
+struct Rlinker_preamble_code:public yacco2::CAbs_lr1_sym {
+ Rlinker_preamble_code(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rchrs:public yacco2::CAbs_lr1_sym {
+ Rchrs(yacco2::Parser* P);
+ public:
+};
+
+struct Rchr:public yacco2::CAbs_lr1_sym {
+ Rchr(yacco2::Parser* P);
+ void op();
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/linker_preamble_code.lex b/web/yacco2/compiler/grammars/linker_preamble_code.lex
new file mode 100644
index 0000000000..de8766717c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_code.lex
@@ -0,0 +1,222 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: linker_preamble_code.lex
+dates: 3 Jan.2003
+Purpose: Extract linker's preamble code
+conduit: syntax_code
+errors: Err_end_preamble_kw_not_present
+ Err_comment_overrun
+ Err_bad_eos
+ Err_bad_esc
+ Err_preamble_srce_code_not_present
+
+Correction: no preamble source code present and
+ end-preamble consumed with next token eog.
+ It should return "no preamble source code present" instead of
+ "no end of code" error. 25 Apr. 2005
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |linker_preamble_code| thread.\fbreak
+Extract linker's preamble code.
+@/
+
+fsm
+(fsm-id "linker_preamble_code.lex",fsm-filename linker_preamble_code,fsm-namespace NS_linker_preamble_code
+,fsm-class Clinker_preamble_code{
+ user-prefix-declaration
+#include "string.h"
+#include "c_comments.h"
+#include "c_string.h"
+#include "c_literal.h"
+#include "linker_id.h"
+ ***
+ user-declaration
+ public:
+ std::string chrs_;
+ bool empty_sdc_;
+ ***
+ op
+ parser__->set_use_all_shift_on();
+ empty_sdc_ = true;
+ chrs_.clear();
+ CAbs_lr1_sym* sym = parser__->start_token__;
+ switch (sym->enumerated_id__){
+
+ case T_Enum::T_LR1_eog_: break;
+ default: return;
+ }
+ parser__->set_use_all_shift_off();
+ ***
+ constructor
+ empty_sdc_ = true;
+ chrs_.clear();
+ ***
+ }
+,fsm-version "1.0",fsm-date "30 dec 2002",fsm-debug "false"
+,fsm-comments "\\olinker's lexer of preamble code section:\n similar to Pass3 lexer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_linker_preamble_code
+ ***
+ parallel-la-boundary
+eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rlinker_preamble_code(
+lhs{
+ op
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ if(fsm->empty_sdc_ == true){
+ sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ sym = new T_syntax_code(fsm->chrs_.c_str());
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+){
+ -> Rchrs
+}
+
+Rchrs (){
+ -> Rchr
+ -> Rchrs Rchr
+}
+
+Rchr (
+lhs {
+ op
+ if(rule_info__.parser__->stop_parse__ == true) return;
+ if(rule_info__.parser__->use_all_shift__ == false) return;// end-preamble seen
+ CAbs_lr1_sym* la_sym = rule_info__.parser__->current_token();
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ // watch for overrun
+ if(la_sym->enumerated_id__ == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_end_preamble_kw_not_present;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+}
+){
+ -> ||| "comment" NS_c_comments::TH_c_comments {
+ op
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->chrs_ += k->comment_data()->c_str();
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_c_string* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding double quotes
+ fsm->chrs_ += '"';
+ fsm->chrs_ += k->c_string()->c_str();
+ fsm->chrs_ += '"';
+ fsm->empty_sdc_ = false;
+ ***
+ }
+ -> ||| "c-literal" NS_c_literal::TH_c_literal{
+ op
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ T_c_literal* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding single quotes
+ fsm->chrs_ += "'";
+ fsm->chrs_ += k->c_literal()->c_str();
+ fsm->chrs_ += "'";
+ fsm->empty_sdc_ = false;
+ ***
+ }
+ -> ||| "end-preamble" NS_linker_id::TH_linker_id{
+ op
+ Clinker_preamble_code* fsm = (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ rule_info__.parser__->set_use_all_shift_off();
+ if(fsm->empty_sdc_ == true){
+ CAbs_lr1_sym* sym = new Err_preamble_srce_code_not_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ***
+ }
+ -> |+| { // add balance of characters to queue Eg. comma
+ op
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* k = sf->p1__;
+ switch (k->enumerated_id__){
+ case T_Enum::T_T_eol_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ case T_Enum::T_raw_sp_:{
+ fsm->chrs_ += " ";
+ break;
+ }
+ case T_Enum::T_raw_ff_:{
+ fsm->chrs_ += "\f";
+ break;
+ }
+ case T_Enum::T_raw_vt_:{
+ fsm->chrs_ += "\v";
+ break;
+ }
+ case T_Enum::T_raw_ht_:{
+ fsm->chrs_ += "\t";
+ break;
+ }
+ case T_Enum::T_raw_cr_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ case T_Enum::T_raw_lf_:{
+ fsm->chrs_ += "\n";
+ break;
+ }
+ default:{
+ fsm->chrs_ += *k->id__;
+ fsm->empty_sdc_ = false;
+ break;
+ }
+ }
+ ***
+ }
+ -> ||| |?| NULL {// errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "identifier" NULL {
+ op
+ Clinker_preamble_code* fsm =
+ (Clinker_preamble_code*)rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->chrs_ += k->identifier()->c_str();
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/linker_preamble_codesym.cpp b/web/yacco2/compiler/grammars/linker_preamble_codesym.cpp
new file mode 100644
index 0000000000..9daa13a68b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_codesym.cpp
@@ -0,0 +1,203 @@
+/*
+ File: linker_preamble_codesym.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "linker_preamble_code.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_preamble_code;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_linker_preamble_code::TH_linker_preamble_code(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_linker_preamble_code;
+ NS_linker_preamble_code::Clinker_preamble_code Clinker_preamble_code_;// parallel-parser's parse table
+#define ssPARSE_TABLE Clinker_preamble_code_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_linker_preamble_code::PROC_TH_linker_preamble_code(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_linker_preamble_code";
+ static bool one_time(false);
+ static NS_linker_preamble_code::Clinker_preamble_code* NS_linker_preamble_code_Clinker_preamble_code_(0);// parallel-parser's fsm table
+ static Parser* NS_linker_preamble_code_Clinker_preamble_code_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_linker_preamble_code_Clinker_preamble_code_ = new NS_linker_preamble_code::Clinker_preamble_code();// parallel-parser's fsm table
+ NS_linker_preamble_code_Clinker_preamble_code_parser = new Parser(*NS_linker_preamble_code_Clinker_preamble_code_,Caller_pp);
+ }
+ proc_parser = NS_linker_preamble_code_Clinker_preamble_code_parser;
+#include "wproc_pp_core.h"
+}
+void
+Clinker_preamble_code::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlinker_preamble_code_:{
+ Rlinker_preamble_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rlinker_preamble_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlinker_preamble_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs7_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/linker_preamble_codetbl.cpp b/web/yacco2/compiler/grammars/linker_preamble_codetbl.cpp
new file mode 100644
index 0000000000..39c25ba69f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/linker_preamble_codetbl.cpp
@@ -0,0 +1,243 @@
+/*
+ File: linker_preamble_codetbl.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "linker_preamble_code.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_linker_preamble_code;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Clinker_preamble_code[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clinker_preamble_code;
+extern yacco2::State S2_Clinker_preamble_code;
+struct S2ttd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[4];
+};
+S2ttd_Clinker_preamble_code S2tt_Clinker_preamble_code = {
+ 4 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_c_literal
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_linker_id
+};
+extern yacco2::State S3_Clinker_preamble_code;
+extern yacco2::State S4_Clinker_preamble_code;
+extern yacco2::State S5_Clinker_preamble_code;
+extern yacco2::State S6_Clinker_preamble_code;
+extern yacco2::State S7_Clinker_preamble_code;
+extern yacco2::State S8_Clinker_preamble_code;
+extern yacco2::State S9_Clinker_preamble_code;
+extern yacco2::State S10_Clinker_preamble_code;
+extern yacco2::State S11_Clinker_preamble_code;
+extern yacco2::State S12_Clinker_preamble_code;
+struct S1std_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Clinker_preamble_code S1st_Clinker_preamble_code = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_preamble_code} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Clinker_preamble_code} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Clinker_preamble_code} // accept sym: Rlinker_preamble_code
+ ,{570,(State*)&S10_Clinker_preamble_code} // shift sym: Rchrs
+ ,{571,(State*)&S12_Clinker_preamble_code} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clinker_preamble_code = {3,(State*)&S2_Clinker_preamble_code};
+yacco2::Shift_entry S1ase_Clinker_preamble_code = {6,(State*)&S9_Clinker_preamble_code};
+yacco2::State S1_Clinker_preamble_code = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clinker_preamble_code,(Shift_entry*)&S1ase_Clinker_preamble_code
+,0,0,(Shift_tbl*)&S1st_Clinker_preamble_code,0,(State_s_thread_tbl*)&S2tt_Clinker_preamble_code,0,0};
+struct S2std_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S2std_Clinker_preamble_code S2st_Clinker_preamble_code = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S3_Clinker_preamble_code} // shift sym: LR1_questionable_shift_operator
+ ,{271,(State*)&S4_Clinker_preamble_code} // shift sym: T_comment
+ ,{274,(State*)&S5_Clinker_preamble_code} // shift sym: T_c_literal
+ ,{275,(State*)&S6_Clinker_preamble_code} // shift sym: T_c_string
+ ,{279,(State*)&S7_Clinker_preamble_code} // shift sym: T_identifier
+ ,{359,(State*)&S8_Clinker_preamble_code} // shift sym: T_end_preamble
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Clinker_preamble_code = {0,(State*)&S3_Clinker_preamble_code};
+yacco2::State S2_Clinker_preamble_code = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clinker_preamble_code,0,0,0,(Shift_entry*)&S2qse_Clinker_preamble_code
+};
+struct S3rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clinker_preamble_code S3rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs6_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S3_Clinker_preamble_code = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Clinker_preamble_code,0,0,0};
+struct S4rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clinker_preamble_code S4rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs1_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S4_Clinker_preamble_code = //State's vectored into symbol: "comment"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clinker_preamble_code,0,0,0};
+struct S5rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clinker_preamble_code S5rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs3_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S5_Clinker_preamble_code = //State's vectored into symbol: "c-literal"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clinker_preamble_code,0,0,0};
+struct S6rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clinker_preamble_code S6rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs2_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S6_Clinker_preamble_code = //State's vectored into symbol: "c-string"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clinker_preamble_code,0,0,0};
+struct S7rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clinker_preamble_code S7rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs7_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S7_Clinker_preamble_code = //State's vectored into symbol: "identifier"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clinker_preamble_code,0,0,0};
+struct S8rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clinker_preamble_code S8rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs4_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S8_Clinker_preamble_code = //State's vectored into symbol: "end-preamble"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clinker_preamble_code,0,0,0};
+struct S9rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clinker_preamble_code S9rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs5_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S9_Clinker_preamble_code = //State's vectored into symbol: "|+|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clinker_preamble_code,0,0,0};
+struct S10std_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Clinker_preamble_code S10st_Clinker_preamble_code = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clinker_preamble_code} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Clinker_preamble_code} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S11_Clinker_preamble_code} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Clinker_preamble_code = {3,(State*)&S2_Clinker_preamble_code};
+yacco2::Shift_entry S10ase_Clinker_preamble_code = {6,(State*)&S9_Clinker_preamble_code};
+struct S10rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clinker_preamble_code S10rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs1_Rlinker_preamble_code_}
+ }// end of reduce table
+};
+yacco2::State S10_Clinker_preamble_code = //State's vectored into symbol: "Rchrs"
+{10
+,(Shift_entry*)&S10pse_Clinker_preamble_code,(Shift_entry*)&S10ase_Clinker_preamble_code
+,0,0,(Shift_tbl*)&S10st_Clinker_preamble_code,(Reduce_tbl*)&S10rt_Clinker_preamble_code,(State_s_thread_tbl*)&S2tt_Clinker_preamble_code,0,0};
+struct S11rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clinker_preamble_code S11rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs2_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S11_Clinker_preamble_code = //State's vectored into symbol: "Rchr"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clinker_preamble_code,0,0,0};
+struct S12rtd_Clinker_preamble_code{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clinker_preamble_code S12rt_Clinker_preamble_code = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clinker_preamble_code,Clinker_preamble_code::rhs1_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S12_Clinker_preamble_code = //State's vectored into symbol: "Rchr"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clinker_preamble_code,0,0,0};
diff --git a/web/yacco2/compiler/grammars/lint_balls.cpp b/web/yacco2/compiler/grammars/lint_balls.cpp
new file mode 100644
index 0000000000..71ff9d2608
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_balls.cpp
@@ -0,0 +1,119 @@
+/*
+ File: lint_balls.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lint_balls.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lint_balls;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clint_balls::
+ Clint_balls()
+ :yacco2::CAbs_fsm
+ ("lint_balls.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Is this spring cleaning?"
+ ,"Fri Jan 30 18:55:15 2015 "
+ ,S1_Clint_balls){
+
+ }
+
+Clint_balls::~Clint_balls(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clint_balls::failed(){
+ return false;
+ }
+ void Clint_balls::op(){
+}
+int Clint_balls::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+};
+Rlint_balls::Rlint_balls(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint_balls",0,Clint_balls::R_Rlint_balls_,P,false,false){
+}
+
+void Rlint_balls::sr1(){
+
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_lint__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Clint_balls::R_Rlint_,P,false,false){
+}
+
+Rfluffs::Rfluffs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfluffs",0,Clint_balls::R_Rfluffs_,P,false,false){
+}
+
+Rfluff::Rfluff(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfluff",0,Clint_balls::R_Rfluff_,P,false,false){
+}
+
+void Rfluff::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rfluff::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/lint_balls.fsc b/web/yacco2/compiler/grammars/lint_balls.fsc
new file mode 100644
index 0000000000..4ddc0073a2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_balls.fsc
@@ -0,0 +1,25 @@
+/*
+ File: lint_balls.fsc
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+transitive y
+grammar-name "lint_balls"
+name-space "NS_lint_balls"
+thread-name "TH_lint_balls"
+monolithic n
+file-name "lint_balls.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 3
+ NS_ws::TH_ws
+ NS_eol::TH_eol
+ NS_c_comments::TH_c_comments
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_c_comments::TH_c_comments
+ NS_eol::TH_eol
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Is this spring cleaning?"
diff --git a/web/yacco2/compiler/grammars/lint_balls.h b/web/yacco2/compiler/grammars/lint_balls.h
new file mode 100644
index 0000000000..02667a1c36
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_balls.h
@@ -0,0 +1,90 @@
+/*
+ File: lint_balls.h
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#ifndef __lint_balls_h__
+#define __lint_balls_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "eol.h"
+#include "ws.h"
+#include "c_comments.h"
+
+extern yacco2::Thread_entry ITH_lint_balls;
+
+extern yacco2::State S1_Clint_balls;
+namespace NS_lint_balls {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_lint_balls(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_lint_balls(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clint_balls: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlint_balls_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlint_balls_ = 1
+ ,R_Rlint_ = 570//start_of_rule_list + 2
+ ,rhs1_Rlint_ = 2
+ ,R_Rfluffs_ = 571//start_of_rule_list + 4
+ ,rhs1_Rfluffs_ = 3
+ ,rhs2_Rfluffs_ = 4
+ ,R_Rfluff_ = 572//start_of_rule_list + 6
+ ,rhs1_Rfluff_ = 5
+ ,rhs2_Rfluff_ = 6
+ ,rhs3_Rfluff_ = 7
+ ,rhs4_Rfluff_ = 8
+ };
+ //no of la sets = 2
+ //no of states = 11
+ Clint_balls();
+ ~Clint_balls();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+ };
+struct Rlint_balls;
+struct Rlint;
+struct Rfluffs;
+struct Rfluff;
+struct Rlint_balls:public yacco2::CAbs_lr1_sym {
+ Rlint_balls(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rfluffs:public yacco2::CAbs_lr1_sym {
+ Rfluffs(yacco2::Parser* P);
+ public:
+};
+
+struct Rfluff:public yacco2::CAbs_lr1_sym {
+ Rfluff(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/lint_balls.lex b/web/yacco2/compiler/grammars/lint_balls.lex
new file mode 100644
index 0000000000..7fdc0f9122
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_balls.lex
@@ -0,0 +1,94 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: lint_balls.lex
+Dates: 24 May 2004
+Purpose: vacuums the non essential stuff.
+parse terminals phrase
+Output: T_lint
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |lint_balls_th| thread.\fbreak
+Rip thru the white stuff and the comments.
+Why this thread anyway?
+I'd rather have 1 place to deal with a slight overhead of
+a thread calling a thread.
+Overall the code bloat will go down instead of
+having it programmed per
+grammar.
+The |T_lint| terminal is returned.
+Use a global pointer to it as it is just an indicator.
+The new / delete cycle is too expensive.
+
+@/
+fsm
+(fsm-id "lint_balls.lex"
+,fsm-filename lint_balls
+,fsm-namespace NS_lint_balls
+,fsm-class Clint_balls{
+ user-prefix-declaration
+#include "eol.h"
+#include "ws.h"
+#include "c_comments.h"
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Is this spring cleaning?")
+parallel-parser
+(
+ parallel-thread-function
+ TH_lint_balls
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rlint_balls (){
+ -> Rlint {
+ op
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_lint__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+}
+
+Rlint
+/@
+Why the use of \invisibleshift?
+To reduce the lookahead set size.
+|eolr| is only one entry in the lookahead
+instead of expressing the specifics.
+@/
+
+(){
+ -> Rfluffs |.|
+}
+
+Rfluffs (){
+ -> Rfluff
+ -> Rfluffs Rfluff
+}
+
+Rfluff (){
+ -> ||| ws NS_ws::TH_ws
+ -> ||| comment NS_c_comments::TH_c_comments {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| eol NS_eol::TH_eol
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/lint_ballssym.cpp b/web/yacco2/compiler/grammars/lint_ballssym.cpp
new file mode 100644
index 0000000000..f6912c2233
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_ballssym.cpp
@@ -0,0 +1,163 @@
+/*
+ File: lint_ballssym.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lint_balls.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lint_balls;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_lint_balls::TH_lint_balls(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_lint_balls;
+ NS_lint_balls::Clint_balls Clint_balls_;// parallel-parser's parse table
+#define ssPARSE_TABLE Clint_balls_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_lint_balls::PROC_TH_lint_balls(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_lint_balls";
+ static bool one_time(false);
+ static NS_lint_balls::Clint_balls* NS_lint_balls_Clint_balls_(0);// parallel-parser's fsm table
+ static Parser* NS_lint_balls_Clint_balls_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_lint_balls_Clint_balls_ = new NS_lint_balls::Clint_balls();// parallel-parser's fsm table
+ NS_lint_balls_Clint_balls_parser = new Parser(*NS_lint_balls_Clint_balls_,Caller_pp);
+ }
+ proc_parser = NS_lint_balls_Clint_balls_parser;
+#include "wproc_pp_core.h"
+}
+void
+Clint_balls::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlint_balls_:{
+ Rlint_balls* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_balls(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_balls*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfluffs_:{
+ Rfluffs* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluffs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluffs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rfluffs_:{
+ Rfluffs* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluffs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluffs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfluff_:{
+ Rfluff* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfluff_:{
+ Rfluff* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfluff_:{
+ Rfluff* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfluff_:{
+ Rfluff* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/lint_ballstbl.cpp b/web/yacco2/compiler/grammars/lint_ballstbl.cpp
new file mode 100644
index 0000000000..c2b3fd59de
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lint_ballstbl.cpp
@@ -0,0 +1,218 @@
+/*
+ File: lint_ballstbl.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lint_balls.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lint_balls;// grammar's ns
+// first set terminals
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Clint_balls[] ={
+1
+,0,48
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Clint_balls[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clint_balls;
+extern yacco2::State S2_Clint_balls;
+struct S2ttd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S2ttd_Clint_balls S2tt_Clint_balls = {
+ 3 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_ws
+};
+extern yacco2::State S3_Clint_balls;
+extern yacco2::State S4_Clint_balls;
+extern yacco2::State S5_Clint_balls;
+extern yacco2::State S6_Clint_balls;
+extern yacco2::State S7_Clint_balls;
+extern yacco2::State S8_Clint_balls;
+extern yacco2::State S9_Clint_balls;
+extern yacco2::State S10_Clint_balls;
+extern yacco2::State S11_Clint_balls;
+struct S1std_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Clint_balls S1st_Clint_balls = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Clint_balls} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Clint_balls} // accept sym: Rlint_balls
+ ,{570,(State*)&S7_Clint_balls} // shift sym: Rlint
+ ,{571,(State*)&S8_Clint_balls} // shift sym: Rfluffs
+ ,{572,(State*)&S11_Clint_balls} // shift sym: Rfluff
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clint_balls = {3,(State*)&S2_Clint_balls};
+yacco2::State S1_Clint_balls = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clint_balls,0,0,0,(Shift_tbl*)&S1st_Clint_balls,0,(State_s_thread_tbl*)&S2tt_Clint_balls,0,0};
+struct S2std_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S2std_Clint_balls S2st_Clint_balls = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S3_Clint_balls} // shift sym: LR1_questionable_shift_operator
+ ,{268,(State*)&S4_Clint_balls} // shift sym: T_eol
+ ,{271,(State*)&S5_Clint_balls} // shift sym: T_comment
+ ,{272,(State*)&S6_Clint_balls} // shift sym: T_ws
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Clint_balls = {0,(State*)&S3_Clint_balls};
+yacco2::State S2_Clint_balls = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clint_balls,0,0,0,(Shift_entry*)&S2qse_Clint_balls
+};
+struct S3rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clint_balls S3rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs3_Rfluff_}
+ }// end of reduce table
+};
+yacco2::State S3_Clint_balls = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Clint_balls,0,0,0};
+struct S4rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clint_balls S4rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs4_Rfluff_}
+ }// end of reduce table
+};
+yacco2::State S4_Clint_balls = //State's vectored into symbol: "eol"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clint_balls,0,0,0};
+struct S5rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clint_balls S5rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs2_Rfluff_}
+ }// end of reduce table
+};
+yacco2::State S5_Clint_balls = //State's vectored into symbol: "comment"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clint_balls,0,0,0};
+struct S6rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clint_balls S6rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs1_Rfluff_}
+ }// end of reduce table
+};
+yacco2::State S6_Clint_balls = //State's vectored into symbol: "ws"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clint_balls,0,0,0};
+struct S7rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clint_balls S7rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clint_balls,Clint_balls::rhs1_Rlint_balls_}
+ }// end of reduce table
+};
+yacco2::State S7_Clint_balls = //State's vectored into symbol: "Rlint"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clint_balls,0,0,0};
+struct S8std_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Clint_balls S8st_Clint_balls = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clint_balls} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S9_Clint_balls} // shift sym: LR1_invisible_shift_operator
+ ,{572,(State*)&S10_Clint_balls} // shift sym: Rfluff
+ }// end of shift table
+};
+yacco2::Shift_entry S8pse_Clint_balls = {3,(State*)&S2_Clint_balls};
+yacco2::Shift_entry S8ise_Clint_balls = {5,(State*)&S9_Clint_balls};
+yacco2::State S8_Clint_balls = //State's vectored into symbol: "Rfluffs"
+{8
+,(Shift_entry*)&S8pse_Clint_balls,0,(Shift_entry*)&S8ise_Clint_balls
+,0,(Shift_tbl*)&S8st_Clint_balls,0,(State_s_thread_tbl*)&S2tt_Clint_balls,0,0};
+struct S9rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clint_balls S9rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clint_balls,Clint_balls::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Clint_balls = //State's vectored into symbol: "|.|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clint_balls,0,0,0};
+struct S10rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clint_balls S10rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs2_Rfluffs_}
+ }// end of reduce table
+};
+yacco2::State S10_Clint_balls = //State's vectored into symbol: "Rfluff"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clint_balls,0,0,0};
+struct S11rtd_Clint_balls{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clint_balls S11rt_Clint_balls = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clint_balls,Clint_balls::rhs1_Rfluffs_}
+ }// end of reduce table
+};
+yacco2::State S11_Clint_balls = //State's vectored into symbol: "Rfluff"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clint_balls,0,0,0};
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase.cpp b/web/yacco2/compiler/grammars/lr1_k_phrase.cpp
new file mode 100644
index 0000000000..64b48a7c87
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: lr1_k_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Clr1_k_phrase::
+ Clr1_k_phrase()
+ :yacco2::CAbs_fsm
+ ("lr1_k_phrase.lex"
+ ,"1.0"
+ ,"24 May 2004"
+ ,false
+ ,"Dispatcher to parse ``lrk-symbols'' construct."
+ ,"Fri Jan 30 18:55:15 2015 "
+ ,S1_Clr1_k_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+Clr1_k_phrase::~Clr1_k_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_k_phrase::failed(){
+ return false;
+ }
+ void Clr1_k_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Clr1_k_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rlr1_k_phrase::Rlr1_k_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_k_phrase",0,Clr1_k_phrase::R_Rlr1_k_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Clr1_k_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lr1_k_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase.fsc b/web/yacco2/compiler/grammars/lr1_k_phrase.fsc
new file mode 100644
index 0000000000..26aa69ef5c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: lr1_k_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+transitive y
+grammar-name "lr1_k_phrase"
+name-space "NS_lr1_k_phrase"
+thread-name "Clr1_k_phrase"
+monolithic y
+file-name "lr1_k_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lr1_k_phrase_th::TH_lr1_k_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_lr1_k_phrase_th::TH_lr1_k_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse ``lrk-symbols'' construct."
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase.h b/web/yacco2/compiler/grammars/lr1_k_phrase.h
new file mode 100644
index 0000000000..3a18451717
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase.h
@@ -0,0 +1,69 @@
+/*
+ File: lr1_k_phrase.h
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#ifndef __lr1_k_phrase_h__
+#define __lr1_k_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lr1_k_phrase_th.h"
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_k_phrase;
+namespace NS_lr1_k_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Clr1_k_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_k_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_k_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Clr1_k_phrase();
+ ~Clr1_k_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rlr1_k_phrase;
+struct Rphrase;
+struct Rlr1_k_phrase:public yacco2::CAbs_lr1_sym {
+ Rlr1_k_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase.lex b/web/yacco2/compiler/grammars/lr1_k_phrase.lex
new file mode 100644
index 0000000000..85f4e652aa
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase.lex
@@ -0,0 +1,86 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: lr1_k_phrase.lex
+Dates: 24 May 2004
+Purpose: lr k constant alphabet
+Grammar being parsed:
+ lr1-constant-symbols
+ (file-name yacco2_lr1_k
+ ,name-space NS_yacco2_lr1_k)
+ {
+ 1+ terminal definitions where def is
+ terminal-key [AD AB attributes](sym-class C++ name)
+ or
+ terminal-key [AD AB attributes]
+ (sym-class C++ name {C++ directives block} )
+
+ [lrk-sufx code ***] optional
+ }
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |lr1_k_phrase| grammar.\fbreak
+Dispatcher to parse the lr1-constant-symbols.\fbreak
+\fbreak
+Note: lrk-sufx directive used to append specific grammar
+writer code
+to the outputted tables.
+In this case, it is external pointers
+to the lrk constant symbols to lower their manufacture.
+For example, "eog" is used thoughout all the grammars --- so
+make-once use-forever attitude.\fbreak
+@/
+fsm
+(fsm-id "lr1_k_phrase.lex"
+,fsm-filename lr1_k_phrase
+,fsm-namespace NS_lr1_k_phrase
+,fsm-class Clr1_k_phrase{
+ user-prefix-declaration
+#include "lr1_k_phrase_th.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 May 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse ``lrk-symbols'' construct.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rlr1_k_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "lr1-k-phrase"
+ NS_lr1_k_phrase_th::TH_lr1_k_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL { // thread has stop parsing with RSVP error
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_th.cpp b/web/yacco2/compiler/grammars/lr1_k_phrase_th.cpp
new file mode 100644
index 0000000000..93cb66acca
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_th.cpp
@@ -0,0 +1,775 @@
+/*
+ File: lr1_k_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 23;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[21] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[22] = new Per_rule_s_reuse_table();
+}
+ Clr1_k_phrase_th::
+ Clr1_k_phrase_th()
+ :yacco2::CAbs_fsm
+ ("lr1_k_phrase_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Parse lr1 k symbols phrase."
+ ,"Fri Jan 30 18:55:15 2015 "
+ ,S1_Clr1_k_phrase_th){
+
+ lr1_k_phrase_ = 0;
+
+ }
+
+Clr1_k_phrase_th::~Clr1_k_phrase_th(){
+
+ for(int x = 0;x < 23;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_k_phrase_th::failed(){
+ return false;
+ }
+ void Clr1_k_phrase_th::op(){
+ if(lr1_k_phrase_ != 0){
+ delete lr1_k_phrase_;
+ lr1_k_phrase_ = 0;
+ }
+ lr1_k_phrase_ = new T_lr1_k_phrase;
+ lr1_k_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*lr1_k_phrase_);
+ lr1_k_phrase_->phrase_tree(t);
+
+}
+int Clr1_k_phrase_th::rhs_to_rules_mapping_[51] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,9 // subrule 21 for rule 10
+ ,10 // subrule 22 for rule 11
+ ,11 // subrule 23 for rule 12
+ ,11 // subrule 24 for rule 12
+ ,11 // subrule 25 for rule 12
+ ,12 // subrule 26 for rule 13
+ ,12 // subrule 27 for rule 13
+ ,12 // subrule 28 for rule 13
+ ,13 // subrule 29 for rule 14
+ ,13 // subrule 30 for rule 14
+ ,13 // subrule 31 for rule 14
+ ,14 // subrule 32 for rule 15
+ ,14 // subrule 33 for rule 15
+ ,15 // subrule 34 for rule 16
+ ,15 // subrule 35 for rule 16
+ ,16 // subrule 36 for rule 17
+ ,17 // subrule 37 for rule 18
+ ,17 // subrule 38 for rule 18
+ ,17 // subrule 39 for rule 18
+ ,18 // subrule 40 for rule 19
+ ,18 // subrule 41 for rule 19
+ ,18 // subrule 42 for rule 19
+ ,19 // subrule 43 for rule 20
+ ,19 // subrule 44 for rule 20
+ ,20 // subrule 45 for rule 21
+ ,20 // subrule 46 for rule 21
+ ,21 // subrule 47 for rule 22
+ ,21 // subrule 48 for rule 22
+ ,22 // subrule 49 for rule 23
+ ,22 // subrule 50 for rule 23
+};
+Rlr1_k_phrase::Rlr1_k_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_k_phrase",0,Clr1_k_phrase_th::R_Rlr1_k_phrase_,P,false,false){
+}
+
+void Rlr1_k_phrase::sr1(){
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->lr1_k_phrase_);
+ fsm->lr1_k_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Clr1_k_phrase_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Clr1_k_phrase_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Clr1_k_phrase_th::R_Rparameters_,P,false,false){
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,Clr1_k_phrase_th::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,Clr1_k_phrase_th::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_id::Rfilename_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_id",0,Clr1_k_phrase_th::R_Rfilename_id_,P,false,false){
+}
+
+void Rfilename_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfilename_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,Clr1_k_phrase_th::R_Rnamespace_phrase_,P,false,false){
+}
+
+void Rnamespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,Clr1_k_phrase_th::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_id::Rnamespace_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_id",0,Clr1_k_phrase_th::R_Rnamespace_id_,P,false,false){
+}
+
+void Rnamespace_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rnamespace_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_defs_phrase::Rsym_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs_phrase",0,Clr1_k_phrase_th::R_Rsym_defs_phrase_,P,false,false){
+}
+
+Rsym_def::Rsym_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def",0,Clr1_k_phrase_th::R_Rsym_def_,P,false,false){
+}
+
+void Rsym_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::lrk);
+ CAbs_lr1_sym* r = fsm->lr1_k_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_def1s::Rsym_def1s(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1s",0,Clr1_k_phrase_th::R_Rsym_def1s_,P,false,false){
+}
+
+Rsym_def1::Rsym_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1",0,Clr1_k_phrase_th::R_Rsym_def1_,P,false,false){
+}
+
+void Rsym_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::lrk);
+ CAbs_lr1_sym* r =
+ fsm->lr1_k_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+
+}
+
+void Rsym_def1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_no_terminal_key_present* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(sf->p2__);
+ fsm->lr1_k_phrase_ = 0;
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ using namespace NS_yacco2_T_enum;
+ int id = sf->p2__->enumerated_id__;
+ if(id >= T_Enum::start_ERR && id <= T_Enum::end_ERR){
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ }else{
+ CAbs_lr1_sym* sym = new Err_not_a_terminal_definition;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+
+Rt_sufx_phrase::Rt_sufx_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_phrase",0,Clr1_k_phrase_th::R_Rt_sufx_phrase_,P,false,false){
+}
+
+void Rt_sufx_phrase::sr1(){
+ struct SF{
+ Rlint* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rcweb_k* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rt_sufx_kw_must* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rt_sufx_code* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->lrk_sufx_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+
+}
+
+Rt_sufx_kw_code::Rt_sufx_kw_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw_code",0,Clr1_k_phrase_th::R_Rt_sufx_kw_code_,P,false,false){
+}
+
+Rt_sufx_kw::Rt_sufx_kw(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw",0,Clr1_k_phrase_th::R_Rt_sufx_kw_,P,false,false){
+}
+
+void Rt_sufx_kw::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rt_sufx_kw_must::Rt_sufx_kw_must(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw_must",0,Clr1_k_phrase_th::R_Rt_sufx_kw_must_,P,false,false){
+}
+
+void Rt_sufx_kw_must::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rt_sufx_kw_must::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_missing_lrk_sufx_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_sufx_kw_must::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_missing_lrk_sufx_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+
+}
+
+Rt_sufx_code::Rt_sufx_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_code",0,Clr1_k_phrase_th::R_Rt_sufx_code_,P,false,false){
+}
+
+void Rt_sufx_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->lrk_sufx_code(sf->p2__);
+
+}
+
+void Rt_sufx_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_sufx_code::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Clr1_k_phrase_th::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Clr1_k_phrase_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Clr1_k_phrase_th::R_Rlint_,P,false,false){
+}
+
+Rcweb_k::Rcweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_k",0,Clr1_k_phrase_th::R_Rcweb_k_,P,false,false){
+}
+
+void Rcweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rcweb_k::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ cweb_t_ = cw->ast();
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rcweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_th.fsc b/web/yacco2/compiler/grammars/lr1_k_phrase_th.fsc
new file mode 100644
index 0000000000..8361120768
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_th.fsc
@@ -0,0 +1,27 @@
+/*
+ File: lr1_k_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+transitive y
+grammar-name "lr1_k_phrase_th"
+name-space "NS_lr1_k_phrase_th"
+thread-name "TH_lr1_k_phrase_th"
+monolithic n
+file-name "lr1_k_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+ NS_term_def_ph::TH_term_def_ph
+end-list-of-used-threads
+fsm-comments
+"Parse lr1 k symbols phrase."
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_th.h b/web/yacco2/compiler/grammars/lr1_k_phrase_th.h
new file mode 100644
index 0000000000..c93426228d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_th.h
@@ -0,0 +1,305 @@
+/*
+ File: lr1_k_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#ifndef __lr1_k_phrase_th_h__
+#define __lr1_k_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+#include "cweb_or_c_k.h"
+
+extern yacco2::Thread_entry ITH_lr1_k_phrase_th;
+
+extern yacco2::State S1_Clr1_k_phrase_th;
+namespace NS_lr1_k_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_lr1_k_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_lr1_k_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[23];
+};
+class Clr1_k_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_k_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_k_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfilename_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfilename_phrase_ = 7
+ ,R_Rfilename_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfilename_ = 8
+ ,rhs2_Rfilename_ = 9
+ ,rhs3_Rfilename_ = 10
+ ,R_Rfilename_id_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfilename_id_ = 11
+ ,rhs2_Rfilename_id_ = 12
+ ,rhs3_Rfilename_id_ = 13
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 14
+ ,rhs2_Rnamespace_phrase_ = 15
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 16
+ ,rhs2_Rnamespace_ = 17
+ ,rhs3_Rnamespace_ = 18
+ ,R_Rnamespace_id_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_id_ = 19
+ ,rhs2_Rnamespace_id_ = 20
+ ,rhs3_Rnamespace_id_ = 21
+ ,R_Rsym_defs_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rsym_defs_phrase_ = 22
+ ,R_Rsym_def_ = 580//start_of_rule_list + 22
+ ,rhs1_Rsym_def_ = 23
+ ,rhs2_Rsym_def_ = 24
+ ,rhs3_Rsym_def_ = 25
+ ,R_Rsym_def1s_ = 581//start_of_rule_list + 24
+ ,rhs1_Rsym_def1s_ = 26
+ ,rhs2_Rsym_def1s_ = 27
+ ,rhs3_Rsym_def1s_ = 28
+ ,R_Rsym_def1_ = 582//start_of_rule_list + 26
+ ,rhs1_Rsym_def1_ = 29
+ ,rhs2_Rsym_def1_ = 30
+ ,rhs3_Rsym_def1_ = 31
+ ,R_Rt_sufx_phrase_ = 583//start_of_rule_list + 28
+ ,rhs1_Rt_sufx_phrase_ = 32
+ ,rhs2_Rt_sufx_phrase_ = 33
+ ,R_Rt_sufx_kw_code_ = 584//start_of_rule_list + 30
+ ,rhs1_Rt_sufx_kw_code_ = 34
+ ,rhs2_Rt_sufx_kw_code_ = 35
+ ,R_Rt_sufx_kw_ = 585//start_of_rule_list + 32
+ ,rhs1_Rt_sufx_kw_ = 36
+ ,R_Rt_sufx_kw_must_ = 586//start_of_rule_list + 34
+ ,rhs1_Rt_sufx_kw_must_ = 37
+ ,rhs2_Rt_sufx_kw_must_ = 38
+ ,rhs3_Rt_sufx_kw_must_ = 39
+ ,R_Rt_sufx_code_ = 587//start_of_rule_list + 36
+ ,rhs1_Rt_sufx_code_ = 40
+ ,rhs2_Rt_sufx_code_ = 41
+ ,rhs3_Rt_sufx_code_ = 42
+ ,R_Ropen_brace_ = 588//start_of_rule_list + 38
+ ,rhs1_Ropen_brace_ = 43
+ ,rhs2_Ropen_brace_ = 44
+ ,R_Rclose_brace_ = 589//start_of_rule_list + 40
+ ,rhs1_Rclose_brace_ = 45
+ ,rhs2_Rclose_brace_ = 46
+ ,R_Rlint_ = 590//start_of_rule_list + 42
+ ,rhs1_Rlint_ = 47
+ ,rhs2_Rlint_ = 48
+ ,R_Rcweb_k_ = 591//start_of_rule_list + 44
+ ,rhs1_Rcweb_k_ = 49
+ ,rhs2_Rcweb_k_ = 50
+ };
+ //no of la sets = 12
+ //no of states = 88
+ Clr1_k_phrase_th();
+ ~Clr1_k_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[51];
+
+ public:
+ T_lr1_k_phrase* lr1_k_phrase_;
+
+ };
+struct Rlr1_k_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_id;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_id;
+struct Rsym_defs_phrase;
+struct Rsym_def;
+struct Rsym_def1s;
+struct Rsym_def1;
+struct Rt_sufx_phrase;
+struct Rt_sufx_kw_code;
+struct Rt_sufx_kw;
+struct Rt_sufx_kw_must;
+struct Rt_sufx_code;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint;
+struct Rcweb_k;
+struct Rlr1_k_phrase:public yacco2::CAbs_lr1_sym {
+ Rlr1_k_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfilename_id:public yacco2::CAbs_lr1_sym {
+ Rfilename_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_id:public yacco2::CAbs_lr1_sym {
+ Rnamespace_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rsym_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_def:public yacco2::CAbs_lr1_sym {
+ Rsym_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_def1s:public yacco2::CAbs_lr1_sym {
+ Rsym_def1s(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_def1:public yacco2::CAbs_lr1_sym {
+ Rsym_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_sufx_phrase:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_sufx_kw_code:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw_code(yacco2::Parser* P);
+ public:
+};
+
+struct Rt_sufx_kw:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_sufx_kw_must:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw_must(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_sufx_code:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_code(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rcweb_k:public yacco2::CAbs_lr1_sym {
+ Rcweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_th.lex b/web/yacco2/compiler/grammars/lr1_k_phrase_th.lex
new file mode 100644
index 0000000000..6b7f429559
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_th.lex
@@ -0,0 +1,467 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: lr1_k_phrase_th.lex
+Dates: 23 Mar 2004
+Purpose: parse parse lr1 k phrase
+ The keeps its own local symbol table: map and list.
+ The terminal_def_phrase adds symbol to Yacco2's
+ global symbol table.
+Output: lr1_k_phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |lr1_k_phrase_th| thread.\fbreak
+Parse lr1 k symbols phrase.
+The |lr1_k_phrase_th| terminal keeps its own local symbol table:
+map and list.
+It calls the common backend |term_def_ph| thread
+extractor of symbol definition.
+ \fbreak
+Example of a lr1 k symbols vocabulary to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/lrksym.txt"}
+@/
+fsm
+(fsm-id "lr1_k_phrase_th.lex"
+,fsm-filename lr1_k_phrase_th
+,fsm-namespace NS_lr1_k_phrase_th
+,fsm-class Clr1_k_phrase_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+#include "cweb_or_c_k.h"
+ ***
+ user-declaration
+ public:
+ T_lr1_k_phrase* lr1_k_phrase_;
+ ***
+ constructor
+ lr1_k_phrase_ = 0;
+ ***
+ op
+ if(lr1_k_phrase_ != 0){
+ delete lr1_k_phrase_;
+ lr1_k_phrase_ = 0;
+ }
+ lr1_k_phrase_ = new T_lr1_k_phrase;
+ lr1_k_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*lr1_k_phrase_);
+ lr1_k_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Parse lr1 k symbols phrase.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_lr1_k_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rlr1_k_phrase (){
+ -> Rlint
+ Ropen_par
+ Rparameters
+ Rclose_par
+ Rlint
+ Ropen_brace
+ Rsym_defs_phrase
+ Rt_sufx_phrase
+ Rlint
+ Rclose_brace
+ {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->lr1_k_phrase_);
+ fsm->lr1_k_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rlint
+ Rfilename_phrase Rlint
+ Rnamespace_phrase Rlint
+}
+
+Rfilename_phrase (){
+ -> Rfilename Rlint Rfilename_id
+}
+
+Rfilename (){
+ -> ||| "#file-name" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (
+lhs
+){
+ -> "," Rlint Rnamespace Rlint Rnamespace_id
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace (){
+ -> ||| "#name-space" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_defs_phrase
+/@
+Use of \invisibleshift to make it lr(1).
+@/
+(){
+ -> Rlint Rsym_def Rlint Rsym_def1s |.|
+}
+
+Rsym_def (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::lrk);
+ CAbs_lr1_sym* r = fsm->lr1_k_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_def1s (){
+ -> Rsym_def1 Rlint
+ -> Rsym_def1s Rsym_def1 Rlint
+ ->
+}
+
+Rsym_def1 (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::lrk);
+ CAbs_lr1_sym* r =
+ fsm->lr1_k_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ***
+ }
+ -> ||| "no key-value present in definition" NULL {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(sf->p2__);
+ fsm->lr1_k_phrase_ = 0;
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ using namespace NS_yacco2_T_enum;
+ int id = sf->p2__->enumerated_id__;
+ if(id >= T_Enum::start_ERR && id <= T_Enum::end_ERR){
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ }else{
+ CAbs_lr1_sym* sym = new Err_not_a_terminal_definition;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+ }
+}
+
+Rt_sufx_phrase (){
+ -> Rlint Rcweb_k Rlint Rt_sufx_kw_must Rt_sufx_code {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->lrk_sufx_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+ ***
+ }
+ -> Rlint Rt_sufx_kw_code
+}
+
+Rt_sufx_kw_code
+/@
+If a |cweb| comment is seen, deposit it in the
+directive's syntax directed code.
+@/
+(){
+ -> Rt_sufx_kw Rt_sufx_code
+ ->
+}
+
+Rt_sufx_kw
+/@
+Drop keyword as it's presence is indicated elsewhere.
+So pop the cork and let the good times roll.
+@/
+
+(){
+ -> ||| "#lrk-sufx" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rt_sufx_kw_must
+/@
+Drop keyword as it's presence is indicated elsewhere.
+So pop the cork and let the good times roll.
+@/
+
+(){
+ -> ||| "#lrk-sufx" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_lrk_sufx_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_lrk_sufx_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ ***
+ }
+}
+
+Rt_sufx_code (){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->lr1_k_phrase_->lrk_sufx_code(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Rcweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Clr1_k_phrase_th* fsm = (Clr1_k_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ cweb_t_ = cw->ast();
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_thsym.cpp b/web/yacco2/compiler/grammars/lr1_k_phrase_thsym.cpp
new file mode 100644
index 0000000000..90de25f1df
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_thsym.cpp
@@ -0,0 +1,782 @@
+/*
+ File: lr1_k_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_lr1_k_phrase_th::TH_lr1_k_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_lr1_k_phrase_th;
+ NS_lr1_k_phrase_th::Clr1_k_phrase_th Clr1_k_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Clr1_k_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_lr1_k_phrase_th::PROC_TH_lr1_k_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_lr1_k_phrase_th";
+ static bool one_time(false);
+ static NS_lr1_k_phrase_th::Clr1_k_phrase_th* NS_lr1_k_phrase_th_Clr1_k_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_lr1_k_phrase_th_Clr1_k_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_lr1_k_phrase_th_Clr1_k_phrase_th_ = new NS_lr1_k_phrase_th::Clr1_k_phrase_th();// parallel-parser's fsm table
+ NS_lr1_k_phrase_th_Clr1_k_phrase_th_parser = new Parser(*NS_lr1_k_phrase_th_Clr1_k_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_lr1_k_phrase_th_Clr1_k_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Clr1_k_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_k_phrase_:{
+ Rlr1_k_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_k_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_k_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 10;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_defs_phrase_:{
+ Rsym_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_sufx_phrase_:{
+ Rt_sufx_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_phrase_:{
+ Rt_sufx_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rt_sufx_kw_code_:{
+ Rt_sufx_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rt_sufx_kw_code_:{
+ Rt_sufx_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rt_sufx_kw_:{
+ Rt_sufx_kw* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/lr1_k_phrase_thtbl.cpp
new file mode 100644
index 0000000000..4c574363fc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrase_thtbl.cpp
@@ -0,0 +1,1868 @@
+/*
+ File: lr1_k_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase_th;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_open_bracket
+// raw_close_bracket
+// raw_comma
+// raw_open_brace
+// raw_close_brace
+yacco2::UCHAR LA1_Clr1_k_phrase_th[] ={
+3
+,0,49
+,6,19
+,16,40
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Clr1_k_phrase_th[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA3_Clr1_k_phrase_th[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA4_Clr1_k_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Clr1_k_phrase_th[] ={
+2
+,0,1
+,16,32
+};
+// LR1_eolr
+yacco2::UCHAR LA6_Clr1_k_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// raw_comma
+yacco2::UCHAR LA7_Clr1_k_phrase_th[] ={
+2
+,0,1
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA8_Clr1_k_phrase_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA9_Clr1_k_phrase_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA10_Clr1_k_phrase_th[] ={
+2
+,0,17
+,16,8
+};
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA11_Clr1_k_phrase_th[] ={
+1
+,0,48
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_comma
+yacco2::UCHAR LA12_Clr1_k_phrase_th[] ={
+2
+,0,17
+,6,16
+};
+extern yacco2::State S1_Clr1_k_phrase_th;
+extern yacco2::State S2_Clr1_k_phrase_th;
+struct S2ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Clr1_k_phrase_th S2tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Clr1_k_phrase_th;
+extern yacco2::State S4_Clr1_k_phrase_th;
+extern yacco2::State S5_Clr1_k_phrase_th;
+extern yacco2::State S6_Clr1_k_phrase_th;
+extern yacco2::State S7_Clr1_k_phrase_th;
+extern yacco2::State S8_Clr1_k_phrase_th;
+extern yacco2::State S9_Clr1_k_phrase_th;
+extern yacco2::State S10_Clr1_k_phrase_th;
+extern yacco2::State S11_Clr1_k_phrase_th;
+extern yacco2::State S12_Clr1_k_phrase_th;
+extern yacco2::State S13_Clr1_k_phrase_th;
+extern yacco2::State S14_Clr1_k_phrase_th;
+extern yacco2::State S15_Clr1_k_phrase_th;
+extern yacco2::State S16_Clr1_k_phrase_th;
+extern yacco2::State S17_Clr1_k_phrase_th;
+extern yacco2::State S18_Clr1_k_phrase_th;
+extern yacco2::State S19_Clr1_k_phrase_th;
+extern yacco2::State S20_Clr1_k_phrase_th;
+extern yacco2::State S21_Clr1_k_phrase_th;
+extern yacco2::State S22_Clr1_k_phrase_th;
+extern yacco2::State S23_Clr1_k_phrase_th;
+extern yacco2::State S24_Clr1_k_phrase_th;
+extern yacco2::State S25_Clr1_k_phrase_th;
+extern yacco2::State S26_Clr1_k_phrase_th;
+extern yacco2::State S27_Clr1_k_phrase_th;
+struct S27ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S27ttd_Clr1_k_phrase_th S27tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S28_Clr1_k_phrase_th;
+extern yacco2::State S29_Clr1_k_phrase_th;
+extern yacco2::State S30_Clr1_k_phrase_th;
+extern yacco2::State S31_Clr1_k_phrase_th;
+extern yacco2::State S32_Clr1_k_phrase_th;
+extern yacco2::State S33_Clr1_k_phrase_th;
+extern yacco2::State S34_Clr1_k_phrase_th;
+extern yacco2::State S35_Clr1_k_phrase_th;
+extern yacco2::State S36_Clr1_k_phrase_th;
+extern yacco2::State S37_Clr1_k_phrase_th;
+extern yacco2::State S38_Clr1_k_phrase_th;
+extern yacco2::State S39_Clr1_k_phrase_th;
+extern yacco2::State S40_Clr1_k_phrase_th;
+extern yacco2::State S41_Clr1_k_phrase_th;
+struct S41ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S41ttd_Clr1_k_phrase_th S41tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S42_Clr1_k_phrase_th;
+extern yacco2::State S43_Clr1_k_phrase_th;
+extern yacco2::State S44_Clr1_k_phrase_th;
+extern yacco2::State S45_Clr1_k_phrase_th;
+extern yacco2::State S46_Clr1_k_phrase_th;
+extern yacco2::State S47_Clr1_k_phrase_th;
+struct S47ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S47ttd_Clr1_k_phrase_th S47tt_Clr1_k_phrase_th = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S48_Clr1_k_phrase_th;
+extern yacco2::State S49_Clr1_k_phrase_th;
+extern yacco2::State S50_Clr1_k_phrase_th;
+extern yacco2::State S51_Clr1_k_phrase_th;
+extern yacco2::State S52_Clr1_k_phrase_th;
+extern yacco2::State S53_Clr1_k_phrase_th;
+extern yacco2::State S54_Clr1_k_phrase_th;
+struct S54ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S54ttd_Clr1_k_phrase_th S54tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S55_Clr1_k_phrase_th;
+extern yacco2::State S56_Clr1_k_phrase_th;
+extern yacco2::State S57_Clr1_k_phrase_th;
+extern yacco2::State S58_Clr1_k_phrase_th;
+extern yacco2::State S59_Clr1_k_phrase_th;
+extern yacco2::State S60_Clr1_k_phrase_th;
+extern yacco2::State S61_Clr1_k_phrase_th;
+extern yacco2::State S62_Clr1_k_phrase_th;
+extern yacco2::State S63_Clr1_k_phrase_th;
+struct S63ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S63ttd_Clr1_k_phrase_th S63tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S64_Clr1_k_phrase_th;
+extern yacco2::State S65_Clr1_k_phrase_th;
+extern yacco2::State S66_Clr1_k_phrase_th;
+extern yacco2::State S67_Clr1_k_phrase_th;
+extern yacco2::State S68_Clr1_k_phrase_th;
+extern yacco2::State S69_Clr1_k_phrase_th;
+struct S69ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S69ttd_Clr1_k_phrase_th S69tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S70_Clr1_k_phrase_th;
+extern yacco2::State S71_Clr1_k_phrase_th;
+extern yacco2::State S72_Clr1_k_phrase_th;
+extern yacco2::State S73_Clr1_k_phrase_th;
+extern yacco2::State S74_Clr1_k_phrase_th;
+struct S74ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S74ttd_Clr1_k_phrase_th S74tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S75_Clr1_k_phrase_th;
+extern yacco2::State S76_Clr1_k_phrase_th;
+extern yacco2::State S77_Clr1_k_phrase_th;
+extern yacco2::State S78_Clr1_k_phrase_th;
+struct S78ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S78ttd_Clr1_k_phrase_th S78tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S79_Clr1_k_phrase_th;
+extern yacco2::State S80_Clr1_k_phrase_th;
+extern yacco2::State S81_Clr1_k_phrase_th;
+extern yacco2::State S82_Clr1_k_phrase_th;
+extern yacco2::State S83_Clr1_k_phrase_th;
+extern yacco2::State S84_Clr1_k_phrase_th;
+extern yacco2::State S85_Clr1_k_phrase_th;
+extern yacco2::State S86_Clr1_k_phrase_th;
+struct S86ttd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S86ttd_Clr1_k_phrase_th S86tt_Clr1_k_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S87_Clr1_k_phrase_th;
+extern yacco2::State S88_Clr1_k_phrase_th;
+struct S1std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Clr1_k_phrase_th S1st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Clr1_k_phrase_th} // accept sym: Rlr1_k_phrase
+ ,{590,(State*)&S4_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S1rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Clr1_k_phrase_th S1rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Clr1_k_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S1st_Clr1_k_phrase_th,(Reduce_tbl*)&S1rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S2std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Clr1_k_phrase_th S2st_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Clr1_k_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_k_phrase_th,0,0,0,0};
+struct S3rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clr1_k_phrase_th S3rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Clr1_k_phrase_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Clr1_k_phrase_th,0,0,0};
+struct S4std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Clr1_k_phrase_th S4st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S16_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S17_Clr1_k_phrase_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_Clr1_k_phrase_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Clr1_k_phrase_th = {0,(State*)&S16_Clr1_k_phrase_th};
+yacco2::State S4_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S4qse_Clr1_k_phrase_th
+};
+struct S5std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Clr1_k_phrase_th S5st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_Clr1_k_phrase_th} // shift sym: Rparameters
+ ,{590,(State*)&S18_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S5rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clr1_k_phrase_th S5rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Clr1_k_phrase_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S5st_Clr1_k_phrase_th,(Reduce_tbl*)&S5rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S6std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Clr1_k_phrase_th S6st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S33_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S34_Clr1_k_phrase_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S7_Clr1_k_phrase_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Clr1_k_phrase_th = {0,(State*)&S33_Clr1_k_phrase_th};
+yacco2::State S6_Clr1_k_phrase_th = //State's vectored into symbol: "Rparameters"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S6qse_Clr1_k_phrase_th
+};
+struct S7std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Clr1_k_phrase_th S7st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S8_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S7rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clr1_k_phrase_th S7rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Clr1_k_phrase_th = //State's vectored into symbol: "Rclose_par"
+{7
+,(Shift_entry*)&S7pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S7st_Clr1_k_phrase_th,(Reduce_tbl*)&S7rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S8std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Clr1_k_phrase_th S8st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S35_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S36_Clr1_k_phrase_th} // shift sym: raw_open_brace
+ ,{588,(State*)&S9_Clr1_k_phrase_th} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Clr1_k_phrase_th = {0,(State*)&S35_Clr1_k_phrase_th};
+yacco2::State S8_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S8qse_Clr1_k_phrase_th
+};
+struct S9std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Clr1_k_phrase_th S9st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S10_Clr1_k_phrase_th} // shift sym: Rsym_defs_phrase
+ ,{590,(State*)&S37_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S9rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clr1_k_phrase_th S9rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Clr1_k_phrase_th = //State's vectored into symbol: "Ropen_brace"
+{9
+,(Shift_entry*)&S9pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S9st_Clr1_k_phrase_th,(Reduce_tbl*)&S9rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S10std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Clr1_k_phrase_th S10st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S11_Clr1_k_phrase_th} // shift sym: Rt_sufx_phrase
+ ,{590,(State*)&S46_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S10rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clr1_k_phrase_th S10rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_k_phrase_th = //State's vectored into symbol: "Rsym_defs_phrase"
+{10
+,(Shift_entry*)&S10pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S10st_Clr1_k_phrase_th,(Reduce_tbl*)&S10rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S11std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Clr1_k_phrase_th S11st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S12_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S11rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clr1_k_phrase_th S11rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_phrase"
+{11
+,(Shift_entry*)&S11pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S11st_Clr1_k_phrase_th,(Reduce_tbl*)&S11rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S12std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S12std_Clr1_k_phrase_th S12st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S13_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S14_Clr1_k_phrase_th} // shift sym: raw_close_brace
+ ,{589,(State*)&S15_Clr1_k_phrase_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S12qse_Clr1_k_phrase_th = {0,(State*)&S13_Clr1_k_phrase_th};
+yacco2::State S12_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S12qse_Clr1_k_phrase_th
+};
+struct S13rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_k_phrase_th S13rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_k_phrase_th,0,0,0};
+struct S14rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clr1_k_phrase_th S14rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S14_Clr1_k_phrase_th = //State's vectored into symbol: "}"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clr1_k_phrase_th,0,0,0};
+struct S15rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clr1_k_phrase_th S15rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rlr1_k_phrase_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_k_phrase_th = //State's vectored into symbol: "Rclose_brace"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_k_phrase_th,0,0,0};
+struct S16rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_k_phrase_th S16rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clr1_k_phrase_th,0,0,0};
+struct S17rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_k_phrase_th S17rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_k_phrase_th = //State's vectored into symbol: "("
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_k_phrase_th,0,0,0};
+struct S18std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S18std_Clr1_k_phrase_th S18st_Clr1_k_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S62_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S63_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S19_Clr1_k_phrase_th} // shift sym: Rfilename_phrase
+ ,{574,(State*)&S66_Clr1_k_phrase_th} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Clr1_k_phrase_th = {3,(State*)&S63_Clr1_k_phrase_th};
+yacco2::Shift_entry S18qse_Clr1_k_phrase_th = {0,(State*)&S62_Clr1_k_phrase_th};
+yacco2::State S18_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{18
+,(Shift_entry*)&S18pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S18st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S63tt_Clr1_k_phrase_th,0,(Shift_entry*)&S18qse_Clr1_k_phrase_th
+};
+struct S19std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S19std_Clr1_k_phrase_th S19st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S20_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S19pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S19rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clr1_k_phrase_th S19rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S19_Clr1_k_phrase_th = //State's vectored into symbol: "Rfilename_phrase"
+{19
+,(Shift_entry*)&S19pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S19st_Clr1_k_phrase_th,(Reduce_tbl*)&S19rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S20std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S20std_Clr1_k_phrase_th S20st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S21_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S22_Clr1_k_phrase_th} // shift sym: raw_comma
+ ,{576,(State*)&S31_Clr1_k_phrase_th} // shift sym: Rnamespace_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S20qse_Clr1_k_phrase_th = {0,(State*)&S21_Clr1_k_phrase_th};
+yacco2::State S20_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S20qse_Clr1_k_phrase_th
+};
+struct S21rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clr1_k_phrase_th S21rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S21_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clr1_k_phrase_th,0,0,0};
+struct S22std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S22std_Clr1_k_phrase_th S22st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S23_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S22pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S22rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clr1_k_phrase_th S22rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S22_Clr1_k_phrase_th = //State's vectored into symbol: ","
+{22
+,(Shift_entry*)&S22pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S22st_Clr1_k_phrase_th,(Reduce_tbl*)&S22rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S23std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S23std_Clr1_k_phrase_th S23st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S73_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S74_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S24_Clr1_k_phrase_th} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S23pse_Clr1_k_phrase_th = {3,(State*)&S74_Clr1_k_phrase_th};
+yacco2::Shift_entry S23qse_Clr1_k_phrase_th = {0,(State*)&S73_Clr1_k_phrase_th};
+yacco2::State S23_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{23
+,(Shift_entry*)&S23pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S23st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S74tt_Clr1_k_phrase_th,0,(Shift_entry*)&S23qse_Clr1_k_phrase_th
+};
+struct S24std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Clr1_k_phrase_th S24st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S25_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S24rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clr1_k_phrase_th S24rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Clr1_k_phrase_th = //State's vectored into symbol: "Rnamespace"
+{24
+,(Shift_entry*)&S24pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S24st_Clr1_k_phrase_th,(Reduce_tbl*)&S24rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S25std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_Clr1_k_phrase_th S25st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S26_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S27_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S30_Clr1_k_phrase_th} // shift sym: Rnamespace_id
+ }// end of shift table
+};
+yacco2::Shift_entry S25pse_Clr1_k_phrase_th = {3,(State*)&S27_Clr1_k_phrase_th};
+yacco2::Shift_entry S25qse_Clr1_k_phrase_th = {0,(State*)&S26_Clr1_k_phrase_th};
+yacco2::State S25_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{25
+,(Shift_entry*)&S25pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S25st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S27tt_Clr1_k_phrase_th,0,(Shift_entry*)&S25qse_Clr1_k_phrase_th
+};
+struct S26rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Clr1_k_phrase_th S26rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S26_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Clr1_k_phrase_th,0,0,0};
+struct S27std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S27std_Clr1_k_phrase_th S27st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S28_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S29_Clr1_k_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S27qse_Clr1_k_phrase_th = {0,(State*)&S28_Clr1_k_phrase_th};
+yacco2::State S27_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S27qse_Clr1_k_phrase_th
+};
+struct S28rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Clr1_k_phrase_th S28rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S28_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clr1_k_phrase_th,0,0,0};
+struct S29rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Clr1_k_phrase_th S29rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S29_Clr1_k_phrase_th = //State's vectored into symbol: "identifier"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Clr1_k_phrase_th,0,0,0};
+struct S30rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Clr1_k_phrase_th S30rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S30_Clr1_k_phrase_th = //State's vectored into symbol: "Rnamespace_id"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Clr1_k_phrase_th,0,0,0};
+struct S31std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S31std_Clr1_k_phrase_th S31st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S32_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S31pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S31rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Clr1_k_phrase_th S31rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S31_Clr1_k_phrase_th = //State's vectored into symbol: "Rnamespace_phrase"
+{31
+,(Shift_entry*)&S31pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S31st_Clr1_k_phrase_th,(Reduce_tbl*)&S31rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S32rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Clr1_k_phrase_th S32rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S32_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Clr1_k_phrase_th,0,0,0};
+struct S33rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Clr1_k_phrase_th S33rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S33_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Clr1_k_phrase_th,0,0,0};
+struct S34rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Clr1_k_phrase_th S34rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S34_Clr1_k_phrase_th = //State's vectored into symbol: ")"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Clr1_k_phrase_th,0,0,0};
+struct S35rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Clr1_k_phrase_th S35rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S35_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Clr1_k_phrase_th,0,0,0};
+struct S36rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Clr1_k_phrase_th S36rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S36_Clr1_k_phrase_th = //State's vectored into symbol: "{"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Clr1_k_phrase_th,0,0,0};
+struct S37std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S37std_Clr1_k_phrase_th S37st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S77_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S78_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S38_Clr1_k_phrase_th} // shift sym: Rsym_def
+ }// end of shift table
+};
+yacco2::Shift_entry S37pse_Clr1_k_phrase_th = {3,(State*)&S78_Clr1_k_phrase_th};
+yacco2::Shift_entry S37qse_Clr1_k_phrase_th = {0,(State*)&S77_Clr1_k_phrase_th};
+yacco2::State S37_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{37
+,(Shift_entry*)&S37pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S37st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S78tt_Clr1_k_phrase_th,0,(Shift_entry*)&S37qse_Clr1_k_phrase_th
+};
+struct S38std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S38std_Clr1_k_phrase_th S38st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S39_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S38pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S38rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Clr1_k_phrase_th S38rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S38_Clr1_k_phrase_th = //State's vectored into symbol: "Rsym_def"
+{38
+,(Shift_entry*)&S38pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S38st_Clr1_k_phrase_th,(Reduce_tbl*)&S38rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S39std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S39std_Clr1_k_phrase_th S39st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S41_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S40_Clr1_k_phrase_th} // shift sym: Rsym_def1s
+ ,{582,(State*)&S83_Clr1_k_phrase_th} // shift sym: Rsym_def1
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Clr1_k_phrase_th = {3,(State*)&S41_Clr1_k_phrase_th};
+struct S39rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Clr1_k_phrase_th S39rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S39_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{39
+,(Shift_entry*)&S39pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S39st_Clr1_k_phrase_th,(Reduce_tbl*)&S39rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S41tt_Clr1_k_phrase_th,0,0};
+struct S40std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S40std_Clr1_k_phrase_th S40st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S41_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S45_Clr1_k_phrase_th} // shift sym: LR1_invisible_shift_operator
+ ,{582,(State*)&S81_Clr1_k_phrase_th} // shift sym: Rsym_def1
+ }// end of shift table
+};
+yacco2::Shift_entry S40pse_Clr1_k_phrase_th = {3,(State*)&S41_Clr1_k_phrase_th};
+yacco2::Shift_entry S40ise_Clr1_k_phrase_th = {5,(State*)&S45_Clr1_k_phrase_th};
+yacco2::State S40_Clr1_k_phrase_th = //State's vectored into symbol: "Rsym_def1s"
+{40
+,(Shift_entry*)&S40pse_Clr1_k_phrase_th,0,(Shift_entry*)&S40ise_Clr1_k_phrase_th
+,0,(Shift_tbl*)&S40st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S41tt_Clr1_k_phrase_th,0,0};
+struct S41std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S41std_Clr1_k_phrase_th S41st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S42_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{331,(State*)&S43_Clr1_k_phrase_th} // shift sym: T_terminal_def
+ ,{443,(State*)&S44_Clr1_k_phrase_th} // shift sym: Err_no_terminal_key_present
+ }// end of shift table
+};
+yacco2::Shift_entry S41qse_Clr1_k_phrase_th = {0,(State*)&S42_Clr1_k_phrase_th};
+yacco2::State S41_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{41
+,0,0,0,0,(Shift_tbl*)&S41st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S41qse_Clr1_k_phrase_th
+};
+struct S42rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Clr1_k_phrase_th S42rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S42_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Clr1_k_phrase_th,0,0,0};
+struct S43rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Clr1_k_phrase_th S43rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S43_Clr1_k_phrase_th = //State's vectored into symbol: "terminal-def"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Clr1_k_phrase_th,0,0,0};
+struct S44rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Clr1_k_phrase_th S44rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S44_Clr1_k_phrase_th = //State's vectored into symbol: "no key-value present in definition"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Clr1_k_phrase_th,0,0,0};
+struct S45rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Clr1_k_phrase_th S45rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rsym_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S45_Clr1_k_phrase_th = //State's vectored into symbol: "|.|"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Clr1_k_phrase_th,0,0,0};
+struct S46std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S46std_Clr1_k_phrase_th S46st_Clr1_k_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S47_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S51_Clr1_k_phrase_th} // shift sym: Rt_sufx_kw_code
+ ,{585,(State*)&S52_Clr1_k_phrase_th} // shift sym: Rt_sufx_kw
+ ,{591,(State*)&S58_Clr1_k_phrase_th} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S46pse_Clr1_k_phrase_th = {3,(State*)&S47_Clr1_k_phrase_th};
+struct S46rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Clr1_k_phrase_th S46rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rt_sufx_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S46_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{46
+,(Shift_entry*)&S46pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S46st_Clr1_k_phrase_th,(Reduce_tbl*)&S46rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S47tt_Clr1_k_phrase_th,0,0};
+struct S47std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S47std_Clr1_k_phrase_th S47st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S48_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{321,(State*)&S49_Clr1_k_phrase_th} // shift sym: T_lrk_sufx
+ ,{372,(State*)&S50_Clr1_k_phrase_th} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S47qse_Clr1_k_phrase_th = {0,(State*)&S48_Clr1_k_phrase_th};
+yacco2::State S47_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{47
+,0,0,0,0,(Shift_tbl*)&S47st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S47qse_Clr1_k_phrase_th
+};
+struct S48rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Clr1_k_phrase_th S48rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S48_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Clr1_k_phrase_th,0,0,0};
+struct S49rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Clr1_k_phrase_th S49rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rt_sufx_kw_}
+ }// end of reduce table
+};
+yacco2::State S49_Clr1_k_phrase_th = //State's vectored into symbol: "#lrk-sufx"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Clr1_k_phrase_th,0,0,0};
+struct S50rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Clr1_k_phrase_th S50rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S50_Clr1_k_phrase_th = //State's vectored into symbol: "cweb-comment"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Clr1_k_phrase_th,0,0,0};
+struct S51rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Clr1_k_phrase_th S51rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rt_sufx_phrase_}
+ }// end of reduce table
+};
+yacco2::State S51_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_kw_code"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Clr1_k_phrase_th,0,0,0};
+struct S52std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S52std_Clr1_k_phrase_th S52st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S53_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S54_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S57_Clr1_k_phrase_th} // shift sym: Rt_sufx_code
+ }// end of shift table
+};
+yacco2::Shift_entry S52pse_Clr1_k_phrase_th = {3,(State*)&S54_Clr1_k_phrase_th};
+yacco2::Shift_entry S52qse_Clr1_k_phrase_th = {0,(State*)&S53_Clr1_k_phrase_th};
+yacco2::State S52_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_kw"
+{52
+,(Shift_entry*)&S52pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S52st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S54tt_Clr1_k_phrase_th,0,(Shift_entry*)&S52qse_Clr1_k_phrase_th
+};
+struct S53rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Clr1_k_phrase_th S53rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S53_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Clr1_k_phrase_th,0,0,0};
+struct S54std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S54std_Clr1_k_phrase_th S54st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S55_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S56_Clr1_k_phrase_th} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S54qse_Clr1_k_phrase_th = {0,(State*)&S55_Clr1_k_phrase_th};
+yacco2::State S54_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{54
+,0,0,0,0,(Shift_tbl*)&S54st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S54qse_Clr1_k_phrase_th
+};
+struct S55rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Clr1_k_phrase_th S55rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S55_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Clr1_k_phrase_th,0,0,0};
+struct S56rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Clr1_k_phrase_th S56rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S56_Clr1_k_phrase_th = //State's vectored into symbol: "syntax-code"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Clr1_k_phrase_th,0,0,0};
+struct S57rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Clr1_k_phrase_th S57rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rt_sufx_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S57_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_code"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Clr1_k_phrase_th,0,0,0};
+struct S58std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S58std_Clr1_k_phrase_th S58st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S59_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S58pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S58rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Clr1_k_phrase_th S58rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S58_Clr1_k_phrase_th = //State's vectored into symbol: "Rcweb_k"
+{58
+,(Shift_entry*)&S58pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S58st_Clr1_k_phrase_th,(Reduce_tbl*)&S58rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S59std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S59std_Clr1_k_phrase_th S59st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S85_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S86_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{586,(State*)&S60_Clr1_k_phrase_th} // shift sym: Rt_sufx_kw_must
+ }// end of shift table
+};
+yacco2::Shift_entry S59pse_Clr1_k_phrase_th = {3,(State*)&S86_Clr1_k_phrase_th};
+yacco2::Shift_entry S59qse_Clr1_k_phrase_th = {0,(State*)&S85_Clr1_k_phrase_th};
+yacco2::State S59_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{59
+,(Shift_entry*)&S59pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S59st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S86tt_Clr1_k_phrase_th,0,(Shift_entry*)&S59qse_Clr1_k_phrase_th
+};
+struct S60std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S60std_Clr1_k_phrase_th S60st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S53_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S54_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S61_Clr1_k_phrase_th} // shift sym: Rt_sufx_code
+ }// end of shift table
+};
+yacco2::Shift_entry S60pse_Clr1_k_phrase_th = {3,(State*)&S54_Clr1_k_phrase_th};
+yacco2::Shift_entry S60qse_Clr1_k_phrase_th = {0,(State*)&S53_Clr1_k_phrase_th};
+yacco2::State S60_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_kw_must"
+{60
+,(Shift_entry*)&S60pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S60st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S54tt_Clr1_k_phrase_th,0,(Shift_entry*)&S60qse_Clr1_k_phrase_th
+};
+struct S61rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Clr1_k_phrase_th S61rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rt_sufx_phrase_}
+ }// end of reduce table
+};
+yacco2::State S61_Clr1_k_phrase_th = //State's vectored into symbol: "Rt_sufx_code"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Clr1_k_phrase_th,0,0,0};
+struct S62rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Clr1_k_phrase_th S62rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S62_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Clr1_k_phrase_th,0,0,0};
+struct S63std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S63std_Clr1_k_phrase_th S63st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S64_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{303,(State*)&S65_Clr1_k_phrase_th} // shift sym: T_file_name
+ }// end of shift table
+};
+yacco2::Shift_entry S63qse_Clr1_k_phrase_th = {0,(State*)&S64_Clr1_k_phrase_th};
+yacco2::State S63_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{63
+,0,0,0,0,(Shift_tbl*)&S63st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S63qse_Clr1_k_phrase_th
+};
+struct S64rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Clr1_k_phrase_th S64rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S64_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Clr1_k_phrase_th,0,0,0};
+struct S65rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Clr1_k_phrase_th S65rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S65_Clr1_k_phrase_th = //State's vectored into symbol: "#file-name"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Clr1_k_phrase_th,0,0,0};
+struct S66std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S66std_Clr1_k_phrase_th S66st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S67_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S66pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S66rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Clr1_k_phrase_th S66rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S66_Clr1_k_phrase_th = //State's vectored into symbol: "Rfilename"
+{66
+,(Shift_entry*)&S66pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S66st_Clr1_k_phrase_th,(Reduce_tbl*)&S66rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S67std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S67std_Clr1_k_phrase_th S67st_Clr1_k_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S68_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S69_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S72_Clr1_k_phrase_th} // shift sym: Rfilename_id
+ }// end of shift table
+};
+yacco2::Shift_entry S67pse_Clr1_k_phrase_th = {3,(State*)&S69_Clr1_k_phrase_th};
+yacco2::Shift_entry S67qse_Clr1_k_phrase_th = {0,(State*)&S68_Clr1_k_phrase_th};
+yacco2::State S67_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{67
+,(Shift_entry*)&S67pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S67st_Clr1_k_phrase_th,0,(State_s_thread_tbl*)&S69tt_Clr1_k_phrase_th,0,(Shift_entry*)&S67qse_Clr1_k_phrase_th
+};
+struct S68rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Clr1_k_phrase_th S68rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S68_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Clr1_k_phrase_th,0,0,0};
+struct S69std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S69std_Clr1_k_phrase_th S69st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S70_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S71_Clr1_k_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S69qse_Clr1_k_phrase_th = {0,(State*)&S70_Clr1_k_phrase_th};
+yacco2::State S69_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{69
+,0,0,0,0,(Shift_tbl*)&S69st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S69qse_Clr1_k_phrase_th
+};
+struct S70rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Clr1_k_phrase_th S70rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S70_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Clr1_k_phrase_th,0,0,0};
+struct S71rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Clr1_k_phrase_th S71rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S71_Clr1_k_phrase_th = //State's vectored into symbol: "identifier"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Clr1_k_phrase_th,0,0,0};
+struct S72rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Clr1_k_phrase_th S72rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S72_Clr1_k_phrase_th = //State's vectored into symbol: "Rfilename_id"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Clr1_k_phrase_th,0,0,0};
+struct S73rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Clr1_k_phrase_th S73rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S73_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Clr1_k_phrase_th,0,0,0};
+struct S74std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S74std_Clr1_k_phrase_th S74st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S75_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{304,(State*)&S76_Clr1_k_phrase_th} // shift sym: T_name_space
+ }// end of shift table
+};
+yacco2::Shift_entry S74qse_Clr1_k_phrase_th = {0,(State*)&S75_Clr1_k_phrase_th};
+yacco2::State S74_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{74
+,0,0,0,0,(Shift_tbl*)&S74st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S74qse_Clr1_k_phrase_th
+};
+struct S75rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Clr1_k_phrase_th S75rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S75_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{75
+,0,0,0,0,0,(Reduce_tbl*)&S75rt_Clr1_k_phrase_th,0,0,0};
+struct S76rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Clr1_k_phrase_th S76rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S76_Clr1_k_phrase_th = //State's vectored into symbol: "#name-space"
+{76
+,0,0,0,0,0,(Reduce_tbl*)&S76rt_Clr1_k_phrase_th,0,0,0};
+struct S77rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Clr1_k_phrase_th S77rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S77_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Clr1_k_phrase_th,0,0,0};
+struct S78std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S78std_Clr1_k_phrase_th S78st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S79_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{331,(State*)&S80_Clr1_k_phrase_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S78qse_Clr1_k_phrase_th = {0,(State*)&S79_Clr1_k_phrase_th};
+yacco2::State S78_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{78
+,0,0,0,0,(Shift_tbl*)&S78st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S78qse_Clr1_k_phrase_th
+};
+struct S79rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Clr1_k_phrase_th S79rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S79_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Clr1_k_phrase_th,0,0,0};
+struct S80rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Clr1_k_phrase_th S80rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S80_Clr1_k_phrase_th = //State's vectored into symbol: "terminal-def"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Clr1_k_phrase_th,0,0,0};
+struct S81std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S81std_Clr1_k_phrase_th S81st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S82_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S81pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S81rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Clr1_k_phrase_th S81rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S81_Clr1_k_phrase_th = //State's vectored into symbol: "Rsym_def1"
+{81
+,(Shift_entry*)&S81pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S81st_Clr1_k_phrase_th,(Reduce_tbl*)&S81rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S82rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Clr1_k_phrase_th S82rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S82_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Clr1_k_phrase_th,0,0,0};
+struct S83std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S83std_Clr1_k_phrase_th S83st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Clr1_k_phrase_th} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S84_Clr1_k_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S83pse_Clr1_k_phrase_th = {3,(State*)&S2_Clr1_k_phrase_th};
+struct S83rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Clr1_k_phrase_th S83rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S83_Clr1_k_phrase_th = //State's vectored into symbol: "Rsym_def1"
+{83
+,(Shift_entry*)&S83pse_Clr1_k_phrase_th,0,0,0,(Shift_tbl*)&S83st_Clr1_k_phrase_th,(Reduce_tbl*)&S83rt_Clr1_k_phrase_th,(State_s_thread_tbl*)&S2tt_Clr1_k_phrase_th,0,0};
+struct S84rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S84rtd_Clr1_k_phrase_th S84rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S84_Clr1_k_phrase_th = //State's vectored into symbol: "Rlint"
+{84
+,0,0,0,0,0,(Reduce_tbl*)&S84rt_Clr1_k_phrase_th,0,0,0};
+struct S85rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Clr1_k_phrase_th S85rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs3_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S85_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Clr1_k_phrase_th,0,0,0};
+struct S86std_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S86std_Clr1_k_phrase_th S86st_Clr1_k_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S87_Clr1_k_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{321,(State*)&S88_Clr1_k_phrase_th} // shift sym: T_lrk_sufx
+ }// end of shift table
+};
+yacco2::Shift_entry S86qse_Clr1_k_phrase_th = {0,(State*)&S87_Clr1_k_phrase_th};
+yacco2::State S86_Clr1_k_phrase_th = //State's vectored into symbol: "|||"
+{86
+,0,0,0,0,(Shift_tbl*)&S86st_Clr1_k_phrase_th,0,0,0,(Shift_entry*)&S86qse_Clr1_k_phrase_th
+};
+struct S87rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Clr1_k_phrase_th S87rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs2_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S87_Clr1_k_phrase_th = //State's vectored into symbol: "|?|"
+{87
+,0,0,0,0,0,(Reduce_tbl*)&S87rt_Clr1_k_phrase_th,0,0,0};
+struct S88rtd_Clr1_k_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S88rtd_Clr1_k_phrase_th S88rt_Clr1_k_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_k_phrase_th,Clr1_k_phrase_th::rhs1_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S88_Clr1_k_phrase_th = //State's vectored into symbol: "#lrk-sufx"
+{88
+,0,0,0,0,0,(Reduce_tbl*)&S88rt_Clr1_k_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrasesym.cpp b/web/yacco2/compiler/grammars/lr1_k_phrasesym.cpp
new file mode 100644
index 0000000000..aa974f946d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: lr1_k_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_k_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_k_phrase_:{
+ Rlr1_k_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_k_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_k_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/lr1_k_phrasetbl.cpp b/web/yacco2/compiler/grammars/lr1_k_phrasetbl.cpp
new file mode 100644
index 0000000000..3f6bcab548
--- /dev/null
+++ b/web/yacco2/compiler/grammars/lr1_k_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: lr1_k_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:15 2015
+*/
+#include "lr1_k_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_k_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Clr1_k_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clr1_k_phrase;
+extern yacco2::State S2_Clr1_k_phrase;
+extern yacco2::State S3_Clr1_k_phrase;
+struct S3ttd_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Clr1_k_phrase S3tt_Clr1_k_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lr1_k_phrase_th
+};
+extern yacco2::State S4_Clr1_k_phrase;
+extern yacco2::State S5_Clr1_k_phrase;
+extern yacco2::State S6_Clr1_k_phrase;
+struct S1std_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Clr1_k_phrase S1st_Clr1_k_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Clr1_k_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Clr1_k_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Clr1_k_phrase} // accept sym: Rlr1_k_phrase
+ ,{570,(State*)&S6_Clr1_k_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Clr1_k_phrase = {3,(State*)&S3_Clr1_k_phrase};
+yacco2::Shift_entry S1qse_Clr1_k_phrase = {0,(State*)&S2_Clr1_k_phrase};
+yacco2::State S1_Clr1_k_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Clr1_k_phrase,0,0,0,(Shift_tbl*)&S1st_Clr1_k_phrase,0,(State_s_thread_tbl*)&S3tt_Clr1_k_phrase,0,(Shift_entry*)&S1qse_Clr1_k_phrase
+};
+struct S2rtd_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Clr1_k_phrase S2rt_Clr1_k_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase,Clr1_k_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Clr1_k_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Clr1_k_phrase,0,0,0};
+struct S3std_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Clr1_k_phrase S3st_Clr1_k_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Clr1_k_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{336,(State*)&S5_Clr1_k_phrase} // shift sym: T_lr1_k_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Clr1_k_phrase = {0,(State*)&S4_Clr1_k_phrase};
+yacco2::State S3_Clr1_k_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_k_phrase,0,0,0,(Shift_entry*)&S3qse_Clr1_k_phrase
+};
+struct S4rtd_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_k_phrase S4rt_Clr1_k_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase,Clr1_k_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_k_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_k_phrase,0,0,0};
+struct S5rtd_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clr1_k_phrase S5rt_Clr1_k_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase,Clr1_k_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Clr1_k_phrase = //State's vectored into symbol: "lr1-k-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clr1_k_phrase,0,0,0};
+struct S6rtd_Clr1_k_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_k_phrase S6rt_Clr1_k_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_k_phrase,Clr1_k_phrase::rhs1_Rlr1_k_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_k_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_k_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/makefile_APPLE b/web/yacco2/compiler/grammars/makefile_APPLE
new file mode 100644
index 0000000000..6cf65dd2be
--- /dev/null
+++ b/web/yacco2/compiler/grammars/makefile_APPLE
@@ -0,0 +1,86 @@
+# File: makefile_APPLE
+# Why: Creates the library of grammars for o2 compiler /compiler: libo2grammars.a
+# or gens the symbol table code and its pdf document
+# Ks: make sure u run GNU make: gmake or make depending on your system
+# Library placement:
+# Rlse: /usr/local/yacco2/compiler/o2qammars/lib/Release
+# Dbg: /usr/local/yacco2/compiler/o2gammars/lib/Debug
+# Genw: for the pdf file: yacco2/docs
+# for the yacco2_stbl h and cpp files: yacco2/compiler/grammars
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library
+# cd /usr/local/yacco2/compiler/grammars
+# make Dbg -f makefile_APPLE
+#
+O2 := /usr/local/yacco2
+#CC := /opt/local/bin/c++-mp-4.9 #gnu c++
+CC := clang++ #g++
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+Compile_opts := -c -pthread -arch x86_64
+else
+O2_target_dir := Debug
+Compile_opts := -g -c -pthread -arch x86_64
+endif
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_bin := $(Base_o2)/bin
+O2_eternals := $(Base_o2)/externals
+O2_stbl := $(Base_o2)/compiler/stbl
+O2_cc := $(Base_o2)/compiler/o2
+O2_docs := $(Base_o2)/docs
+O2_library := $(Base_o2)/library
+O2_library_lib := $(O2_library)/lib
+O2_lib_grms := $(O2_library)/grammars
+O2_cc_grms := $(Base_o2)/compiler/grammars
+O2_includes := -I'$(O2_cc_grms)' -I'$(O2_cc)' -I'$(O2_library)' -I'$(O2_lib_grms)'
+
+###
+# Objects to compile
+##
+Objects_to_compile:= $(patsubst %.cpp,%.o,$(wildcard *.cpp))
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: Compile Move_lib
+Dbg: Compile Move_lib
+Move_lib:
+ rm -f $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a
+ libtool -static -arch_only x86_64 -o $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a $(Objects_to_compile)
+ rm -f *.o
+
+Compile: $(Objects_to_compile)
+%.o: %.cpp
+ $(CC) $(Compile_opts) $(O2_includes) $< -o $@
+
+Genw:
+ cweave $(O2_stbl)/yacco2_stbl
+ pdftex yacco2_stbl
+ pdftops yacco2_stbl.pdf
+ mv yacco2_stbl.pdf $(O2_docs)
+ mv yacco2_stbl.ps $(O2_docs)
+ ctangle -l +e $(O2_stbl)/yacco2_stbl
+ cweave Lrk
+ pdftex Lrk
+ mv Lrk.pdf $(O2_docs)
+ rm yacco2_stbl.idx
+ rm yacco2_stbl.scn
+ rm yacco2_stbl.toc
+ rm yacco2_stbl.tex
+ rm yacco2_stbl.log
+ rm yacco2_stbl.c
diff --git a/web/yacco2/compiler/grammars/makefile_GNU b/web/yacco2/compiler/grammars/makefile_GNU
new file mode 100644
index 0000000000..6e07d9ef8c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/makefile_GNU
@@ -0,0 +1,101 @@
+# File: makefile_GNU
+# Why: Creates the library of grammars for o2 compiler /compiler: libo2grammars.a
+# or gens the symbol table code and its pdf document
+# Ks: make sure u run GNU make: gmake or make depending on your system
+# Library placement:
+# Rlse: /usr/local/yacco2/compiler/o2qammars/lib/Release
+# Dbg: /usr/local/yacco2/compiler/o2gammars/lib/Debug
+# Genw: for the pdf file: yacco2/docs
+# for the yacco2_stbl h and cpp files: yacco2/compiler/grammars
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+# Notice: Some possible construction to be done
+# 1) Adjust base_dir variable if the ``yacco2'' package is moved elsewhere.
+# For example, if u installed the ``yacco2'' package in /opt/yacco2
+# Set the base_dir variable in this file to: base_dir = /opt/
+# The trailing / must be there or ugly things will happen.
+#
+# 2) Make sure u know where the ``ranlib'' utility resides on your system
+# If it's already defined in your ``bash'' ``PATH'' varable then
+# just space out the below ``RANLIB'' variable
+# RANLIB =
+# or set it to point to its residence as what this file has done
+#
+# Example: gen the debug version of the library
+# cd /usr/local//yacco2/compiler/grammars
+# make Dbg -f GNU_makefile
+#
+CC := g++
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+else
+O2_target_dir := Debug
+endif
+
+###
+# Set up c++ compiler and ld linker options
+###
+Rlse: Compile_opts := -c -o3 -pthread
+
+Dbg: Compile_opts := -g -c -pthread
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_bin := $(Base_o2)/bin
+O2_eternals := $(Base_o2)/externals
+O2_stbl := $(Base_o2)/compiler/stbl
+O2_docs := $(Base_o2)/docs
+O2_lib := $(Base_o2)/library
+O2_lib_grms := $(Base_o2)/library/grammars
+O2_cc_grms := $(Base_o2)/compiler/grammars
+O2_cc := $(Base_o2)/compiler/o2
+O2_includes := -I'$(O2_cc_grms)' -I'$(O2_cc)' -I'$(O2_lib)' -I'$(O2_lib_grms)'
+
+###
+# Objects to compile
+##
+Objects_to_compile:= $(patsubst %.cpp,%.o,$(wildcard *.cpp))
+
+###
+# Compile, link, and move O2 into bin account
+###
+
+Rlse: Compile Move_rlse_lib
+Move_rlse_lib:
+ rm -f $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a
+ $(AR) rv $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a $(Objects_to_compile)
+ rm -f *.o
+Dbg: Compile Move_dbg_lib
+Move_dbg_lib:
+ rm -f $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a
+ $(AR) rv $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a $(Objects_to_compile)
+ $(RANLIB) $(O2_cc_grms)/lib/$(O2_target_dir)/libo2grammars.a
+ rm -f *.o
+
+Compile: $(Objects_to_compile)
+%.o: %.cpp
+ $(CC) $(Compile_opts) $(O2_includes) $< -o $@
+
+
+Genw:
+ cweave $(O2_stbl)yacco2_stbl
+ ctangle -l +e $(O2_stbl)yacco2_stbl
+ pdftex yacco2_stbl
+ mv yacco2_stbl.pdf $(O2_docs)
+ rm yacco2_stbl.idx
+ rm yacco2_stbl.scn
+ rm yacco2_stbl.toc
+ rm yacco2_stbl.tex
+ rm yacco2_stbl.log
+ rm yacco2_stbl.c
diff --git a/web/yacco2/compiler/grammars/makefile_SOLARIS b/web/yacco2/compiler/grammars/makefile_SOLARIS
new file mode 100644
index 0000000000..51106cefbf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/makefile_SOLARIS
@@ -0,0 +1,561 @@
+# File: makefile_SOLARIS
+# Why: Creates the library of grammars for o2 compiler /compiler: libo2grammars.a
+# or gens the symbol table code and its pdf document
+# Library placement:
+# Rlse: /usr/local/yacco2/compiler/grqammars/lib/Release
+# Dbg: /usr/local/yacco2/compiler/grqammars/lib/Debug
+# Genw: for the pdf file: yacco2/docs
+# for the yacco2_stbl h and cpp files: yacco2/compiler/grammars
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# File: GNU_makefile
+# Why: Creates the library of grammars for o2 compiler /compiler: libo2grammars.a
+# or gens the symbol table code and its pdf document
+# Library placement:
+# Rlse: /usr/local/yacco2/compiler/grqammars/lib/Release
+# Dbg: /usr/local/yacco2/compiler/grqammars/lib/Debug
+# Genw: for the pdf file: yacco2/docs
+# for the yacco2_stbl h and cpp files: yacco2/compiler/grammars
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library
+# cd /usr/local//yacco2/compiler/grammars
+# make Dbg -f Solaris_makefile
+#
+RANLIB:= /usr/ccs/bin/ranlib
+Rlse: BASICOPTS := -fast -c -m64 -lpthread
+Dbg: BASICOPTS := -c -m64 -lpthread -g
+
+
+o2_lib := $(O2)/library/
+o2_stbl := $(O2)/compiler/stbl/
+o2_docs := $(O2)/docs/
+o2_lib_grms := $(O2)/library/grammars/
+o2_grms := $(O2)/compiler/grammars/
+o2 := $(O2)/compiler/o2/
+O2_includes := -I'$(o2)' -I'$(o2_grms)' -I'$(o2_lib)' -I'$(o2_lib_grms)'
+files_to_cc = \
+$(o2_grms)T_enum_phrase.cpp \
+$(o2_grms)T_enum_phrase_th.cpp \
+$(o2_grms)T_enum_phrase_thsym.cpp \
+$(o2_grms)T_enum_phrase_thtbl.cpp \
+$(o2_grms)T_enum_phrasesym.cpp \
+$(o2_grms)T_enum_phrasetbl.cpp \
+$(o2_grms)angled_string.cpp \
+$(o2_grms)angled_stringsym.cpp \
+$(o2_grms)angled_stringtbl.cpp \
+$(o2_grms)bad_char_set.cpp \
+$(o2_grms)bad_char_setsym.cpp \
+$(o2_grms)bad_char_settbl.cpp \
+$(o2_grms)c_comments.cpp \
+$(o2_grms)c_commentssym.cpp \
+$(o2_grms)c_commentstbl.cpp \
+$(o2_grms)c_literal.cpp \
+$(o2_grms)c_literalsym.cpp \
+$(o2_grms)c_literaltbl.cpp \
+$(o2_grms)c_string.cpp \
+$(o2_grms)c_stringsym.cpp \
+$(o2_grms)c_stringtbl.cpp \
+$(o2_grms)cweave_T_sdc.cpp \
+$(o2_grms)cweave_T_sdcsym.cpp \
+$(o2_grms)cweave_T_sdctbl.cpp \
+$(o2_grms)cweave_fsm_sdc.cpp \
+$(o2_grms)cweave_fsm_sdcsym.cpp \
+$(o2_grms)cweave_fsm_sdctbl.cpp \
+$(o2_grms)cweave_lhs_sdc.cpp \
+$(o2_grms)cweave_lhs_sdcsym.cpp \
+$(o2_grms)cweave_lhs_sdctbl.cpp \
+$(o2_grms)cweave_sdc.cpp \
+$(o2_grms)cweave_sdcsym.cpp \
+$(o2_grms)cweave_sdctbl.cpp \
+$(o2_grms)cweb_comments.cpp \
+$(o2_grms)cweb_commentssym.cpp \
+$(o2_grms)cweb_commentstbl.cpp \
+$(o2_grms)cweb_or_c_k.cpp \
+$(o2_grms)cweb_or_c_ksym.cpp \
+$(o2_grms)cweb_or_c_ktbl.cpp \
+$(o2_grms)cweb_put_k_into_ph.cpp \
+$(o2_grms)cweb_put_k_into_phsym.cpp \
+$(o2_grms)cweb_put_k_into_phtbl.cpp \
+$(o2_grms)dbl_colon.cpp \
+$(o2_grms)dbl_colonsym.cpp \
+$(o2_grms)dbl_colontbl.cpp \
+$(o2_grms)enumerate_T_alphabet.cpp \
+$(o2_grms)enumerate_T_alphabetsym.cpp \
+$(o2_grms)enumerate_T_alphabettbl.cpp \
+$(o2_grms)enumerate_grammar.cpp \
+$(o2_grms)enumerate_grammarsym.cpp \
+$(o2_grms)enumerate_grammartbl.cpp \
+$(o2_grms)eol.cpp \
+$(o2_grms)eolsym.cpp \
+$(o2_grms)eoltbl.cpp \
+$(o2_grms)epsilon_rules.cpp \
+$(o2_grms)epsilon_rulessym.cpp \
+$(o2_grms)epsilon_rulestbl.cpp \
+$(o2_grms)err_symbols_ph.cpp \
+$(o2_grms)err_symbols_ph_th.cpp \
+$(o2_grms)err_symbols_ph_thsym.cpp \
+$(o2_grms)err_symbols_ph_thtbl.cpp \
+$(o2_grms)err_symbols_phsym.cpp \
+$(o2_grms)err_symbols_phtbl.cpp \
+$(o2_grms)esc_seq.cpp \
+$(o2_grms)esc_seqsym.cpp \
+$(o2_grms)esc_seqtbl.cpp \
+$(o2_grms)eval_phrases.cpp \
+$(o2_grms)eval_phrasessym.cpp \
+$(o2_grms)eval_phrasestbl.cpp \
+$(o2_grms)fsc_file.cpp \
+$(o2_grms)fsc_filesym.cpp \
+$(o2_grms)fsc_filetbl.cpp \
+$(o2_grms)fsm_class_phrase_th.cpp \
+$(o2_grms)fsm_class_phrase_thsym.cpp \
+$(o2_grms)fsm_class_phrase_thtbl.cpp \
+$(o2_grms)fsm_phrase.cpp \
+$(o2_grms)fsm_phrase_th.cpp \
+$(o2_grms)fsm_phrase_thsym.cpp \
+$(o2_grms)fsm_phrase_thtbl.cpp \
+$(o2_grms)fsm_phrasesym.cpp \
+$(o2_grms)fsm_phrasetbl.cpp \
+$(o2_grms)identifier.cpp \
+$(o2_grms)identifiersym.cpp \
+$(o2_grms)identifiertbl.cpp \
+$(o2_grms)int_no.cpp \
+$(o2_grms)int_nosym.cpp \
+$(o2_grms)int_notbl.cpp \
+$(o2_grms)la_expr.cpp \
+$(o2_grms)la_expr_lexical.cpp \
+$(o2_grms)la_expr_lexicalsym.cpp \
+$(o2_grms)la_expr_lexicaltbl.cpp \
+$(o2_grms)la_expr_src.cpp \
+$(o2_grms)la_expr_srcsym.cpp \
+$(o2_grms)la_expr_srctbl.cpp \
+$(o2_grms)la_exprsym.cpp \
+$(o2_grms)la_exprtbl.cpp \
+$(o2_grms)la_lrk_T.cpp \
+$(o2_grms)la_lrk_Tsym.cpp \
+$(o2_grms)la_lrk_Ttbl.cpp \
+$(o2_grms)link_cleanser.cpp \
+$(o2_grms)link_cleansersym.cpp \
+$(o2_grms)link_cleansertbl.cpp \
+$(o2_grms)linker_id.cpp \
+$(o2_grms)linker_idsym.cpp \
+$(o2_grms)linker_idtbl.cpp \
+$(o2_grms)linker_pass3.cpp \
+$(o2_grms)linker_pass3sym.cpp \
+$(o2_grms)linker_pass3tbl.cpp \
+$(o2_grms)linker_preamble_code.cpp \
+$(o2_grms)linker_preamble_codesym.cpp \
+$(o2_grms)linker_preamble_codetbl.cpp \
+$(o2_grms)lint_balls.cpp \
+$(o2_grms)lint_ballssym.cpp \
+$(o2_grms)lint_ballstbl.cpp \
+$(o2_grms)lr1_k_phrase.cpp \
+$(o2_grms)lr1_k_phrase_th.cpp \
+$(o2_grms)lr1_k_phrase_thsym.cpp \
+$(o2_grms)lr1_k_phrase_thtbl.cpp \
+$(o2_grms)lr1_k_phrasesym.cpp \
+$(o2_grms)lr1_k_phrasetbl.cpp \
+$(o2_grms)mpost_output.cpp \
+$(o2_grms)mpost_outputsym.cpp \
+$(o2_grms)mpost_outputtbl.cpp \
+$(o2_grms)o2_code_end.cpp \
+$(o2_grms)o2_code_endsym.cpp \
+$(o2_grms)o2_code_endtbl.cpp \
+$(o2_grms)o2_err_hdlr.cpp \
+$(o2_grms)o2_err_hdlrsym.cpp \
+$(o2_grms)o2_err_hdlrtbl.cpp \
+$(o2_grms)o2_lcl_opt.cpp \
+$(o2_grms)o2_lcl_opts.cpp \
+$(o2_grms)o2_lcl_optssym.cpp \
+$(o2_grms)o2_lcl_optstbl.cpp \
+$(o2_grms)o2_lcl_optsym.cpp \
+$(o2_grms)o2_lcl_opttbl.cpp \
+$(o2_grms)o2_linker_opts.cpp \
+$(o2_grms)o2_linker_optssym.cpp \
+$(o2_grms)o2_linker_optstbl.cpp \
+$(o2_grms)o2_sdc.cpp \
+$(o2_grms)o2_sdcsym.cpp \
+$(o2_grms)o2_sdctbl.cpp \
+$(o2_grms)parallel_monitor_ph.cpp \
+$(o2_grms)parallel_monitor_phsym.cpp \
+$(o2_grms)parallel_monitor_phtbl.cpp \
+$(o2_grms)parallel_oper.cpp \
+$(o2_grms)parallel_opersym.cpp \
+$(o2_grms)parallel_opertbl.cpp \
+$(o2_grms)parallel_parser_ph_th.cpp \
+$(o2_grms)parallel_parser_ph_thsym.cpp \
+$(o2_grms)parallel_parser_ph_thtbl.cpp \
+$(o2_grms)parallel_parser_phrase.cpp \
+$(o2_grms)parallel_parser_phrasesym.cpp \
+$(o2_grms)parallel_parser_phrasetbl.cpp \
+$(o2_grms)pass3.cpp \
+$(o2_grms)pass3sym.cpp \
+$(o2_grms)pass3tbl.cpp \
+$(o2_grms)prefile_include.cpp \
+$(o2_grms)prefile_includesym.cpp \
+$(o2_grms)prefile_includetbl.cpp \
+$(o2_grms)prt_fs_of_rules.cpp \
+$(o2_grms)prt_fs_of_rulessym.cpp \
+$(o2_grms)prt_fs_of_rulestbl.cpp \
+$(o2_grms)prt_sr_elements.cpp \
+$(o2_grms)prt_sr_elementssym.cpp \
+$(o2_grms)prt_sr_elementstbl.cpp \
+$(o2_grms)prt_xrefs_docs.cpp \
+$(o2_grms)prt_xrefs_docssym.cpp \
+$(o2_grms)prt_xrefs_docstbl.cpp \
+$(o2_grms)rc_phrase.cpp \
+$(o2_grms)rc_phrase_th.cpp \
+$(o2_grms)rc_phrase_thsym.cpp \
+$(o2_grms)rc_phrase_thtbl.cpp \
+$(o2_grms)rc_phrasesym.cpp \
+$(o2_grms)rc_phrasetbl.cpp \
+$(o2_grms)rhs_bnd.cpp \
+$(o2_grms)rhs_bndsym.cpp \
+$(o2_grms)rhs_bndtbl.cpp \
+$(o2_grms)rhs_component.cpp \
+$(o2_grms)rhs_componentsym.cpp \
+$(o2_grms)rhs_componenttbl.cpp \
+$(o2_grms)rtn_component.cpp \
+$(o2_grms)rtn_componentsym.cpp \
+$(o2_grms)rtn_componenttbl.cpp \
+$(o2_grms)rule_def_phrase.cpp \
+$(o2_grms)rule_def_phrasesym.cpp \
+$(o2_grms)rule_def_phrasetbl.cpp \
+$(o2_grms)rule_lhs_phrase.cpp \
+$(o2_grms)rule_lhs_phrasesym.cpp \
+$(o2_grms)rule_lhs_phrasetbl.cpp \
+$(o2_grms)rules_phrase.cpp \
+$(o2_grms)rules_phrase_th.cpp \
+$(o2_grms)rules_phrase_thsym.cpp \
+$(o2_grms)rules_phrase_thtbl.cpp \
+$(o2_grms)rules_phrasesym.cpp \
+$(o2_grms)rules_phrasetbl.cpp \
+$(o2_grms)rules_use_cnt.cpp \
+$(o2_grms)rules_use_cntsym.cpp \
+$(o2_grms)rules_use_cnttbl.cpp \
+$(o2_grms)subrule_def.cpp \
+$(o2_grms)subrule_defsym.cpp \
+$(o2_grms)subrule_deftbl.cpp \
+$(o2_grms)subrule_vector.cpp \
+$(o2_grms)subrule_vectorsym.cpp \
+$(o2_grms)subrule_vectortbl.cpp \
+$(o2_grms)subrules_phrase.cpp \
+$(o2_grms)subrules_phrasesym.cpp \
+$(o2_grms)subrules_phrasetbl.cpp \
+$(o2_grms)t_alphabet.cpp \
+$(o2_grms)t_alphabetsym.cpp \
+$(o2_grms)t_alphabettbl.cpp \
+$(o2_grms)t_def_delabort_tags.cpp \
+$(o2_grms)t_def_delabort_tagssym.cpp \
+$(o2_grms)t_def_delabort_tagstbl.cpp \
+$(o2_grms)term_def_ph.cpp \
+$(o2_grms)term_def_phsym.cpp \
+$(o2_grms)term_def_phtbl.cpp \
+$(o2_grms)terminal_def_symclass.cpp \
+$(o2_grms)terminal_def_symclasssym.cpp \
+$(o2_grms)terminal_def_symclasstbl.cpp \
+$(o2_grms)terminals_phrase.cpp \
+$(o2_grms)terminals_phrase_th.cpp \
+$(o2_grms)terminals_phrase_thsym.cpp \
+$(o2_grms)terminals_phrase_thtbl.cpp \
+$(o2_grms)terminals_phrasesym.cpp \
+$(o2_grms)terminals_phrasetbl.cpp \
+$(o2_grms)test_components.cpp \
+$(o2_grms)test_componentssym.cpp \
+$(o2_grms)test_componentstbl.cpp \
+$(o2_grms)unq_str.cpp \
+$(o2_grms)unq_strsym.cpp \
+$(o2_grms)unq_strtbl.cpp \
+$(o2_grms)ws.cpp \
+$(o2_grms)wssym.cpp \
+$(o2_grms)wstbl.cpp \
+$(o2_grms)xc_str.cpp \
+$(o2_grms)xc_strsym.cpp \
+$(o2_grms)xc_strtbl.cpp \
+$(o2_grms)yacco2_err_symbols.cpp \
+$(o2_grms)yacco2_fsc.cpp \
+$(o2_grms)yacco2_stbl.cpp \
+$(o2_grms)yacco2_terminals.cpp
+files_to_o = $(files_to_cc:.cpp=.o)
+Rlse: Compile Rlse_lib
+Rlse_lib:
+ rm -f $(o2_grammars)lib/Release/libo2grammars.a
+ $(AR) rv $(o2_base_dir)lib/Release/libo2grammars.a $(files_to_o)
+ $(RANLIB) $(o2_base_dir)lib/Release/libo2grammars.a
+ rm -f *.o
+Dbg: Compile Dbg_lib
+Dbg_lib:
+ rm -f $(o2_grammars)lib/Debug/libo2grammars.a
+ $(AR) rv $(o2_base_dir)lib/Debug/libo2grammars.a $(files_to_o)
+ $(RANLIB) $(o2_base_dir)lib/Debug/libo2grammars.a
+ rm -f *.o
+
+Compile: $(files_to_o)
+$(o2_grms)T_enum_phrase.o: $(o2_grms)T_enum_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrase.cpp -o $@
+$(o2_grms)T_enum_phrase_th.o: $(o2_grms)T_enum_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrase_th.cpp -o $@
+$(o2_grms)T_enum_phrase_thsym.o: $(o2_grms)T_enum_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrase_thsym.cpp -o $@
+$(o2_grms)T_enum_phrase_thtbl.o: $(o2_grms)T_enum_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrase_thtbl.cpp -o $@
+$(o2_grms)T_enum_phrasesym.o: $(o2_grms)T_enum_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrasesym.cpp -o $@
+$(o2_grms)T_enum_phrasetbl.o: $(o2_grms)T_enum_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)T_enum_phrasetbl.cpp -o $@
+$(o2_grms)angled_string.o: $(o2_grms)angled_string.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)angled_string.cpp -o $@
+$(o2_grms)angled_stringsym.o: $(o2_grms)angled_stringsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)angled_stringsym.cpp -o $@
+$(o2_grms)angled_stringtbl.o: $(o2_grms)angled_stringtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)angled_stringtbl.cpp -o $@
+$(o2_grms)bad_char_set.o: $(o2_grms)bad_char_set.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)bad_char_set.cpp -o $@
+$(o2_grms)bad_char_setsym.o: $(o2_grms)bad_char_setsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)bad_char_setsym.cpp -o $@
+$(o2_grms)bad_char_settbl.o: $(o2_grms)bad_char_settbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)bad_char_settbl.cpp -o $@
+$(o2_grms)c_comments.o: $(o2_grms)c_comments.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_comments.cpp -o $@
+$(o2_grms)c_commentssym.o: $(o2_grms)c_commentssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_commentssym.cpp -o $@
+$(o2_grms)c_commentstbl.o: $(o2_grms)c_commentstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_commentstbl.cpp -o $@
+$(o2_grms)c_literal.o: $(o2_grms)c_literal.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_literal.cpp -o $@
+$(o2_grms)c_literalsym.o: $(o2_grms)c_literalsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_literalsym.cpp -o $@
+$(o2_grms)c_literaltbl.o: $(o2_grms)c_literaltbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_literaltbl.cpp -o $@
+$(o2_grms)c_string.o: $(o2_grms)c_string.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_string.cpp -o $@
+$(o2_grms)c_stringsym.o: $(o2_grms)c_stringsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_stringsym.cpp -o $@
+$(o2_grms)c_stringtbl.o: $(o2_grms)c_stringtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)c_stringtbl.cpp -o $@
+$(o2_grms)cweave_T_sdc.o: $(o2_grms)cweave_T_sdc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_T_sdc.cpp -o $@
+$(o2_grms)cweave_T_sdcsym.o: $(o2_grms)cweave_T_sdcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_T_sdcsym.cpp -o $@
+$(o2_grms)cweave_T_sdctbl.o: $(o2_grms)cweave_T_sdctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_T_sdctbl.cpp -o $@
+$(o2_grms)cweave_fsm_sdc.o: $(o2_grms)cweave_fsm_sdc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_fsm_sdc.cpp -o $@
+$(o2_grms)cweave_fsm_sdcsym.o: $(o2_grms)cweave_fsm_sdcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_fsm_sdcsym.cpp -o $@
+$(o2_grms)cweave_fsm_sdctbl.o: $(o2_grms)cweave_fsm_sdctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_fsm_sdctbl.cpp -o $@
+$(o2_grms)cweave_lhs_sdc.o: $(o2_grms)cweave_lhs_sdc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_lhs_sdc.cpp -o $@
+$(o2_grms)cweave_lhs_sdcsym.o: $(o2_grms)cweave_lhs_sdcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_lhs_sdcsym.cpp -o $@
+$(o2_grms)cweave_lhs_sdctbl.o: $(o2_grms)cweave_lhs_sdctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_lhs_sdctbl.cpp -o $@
+$(o2_grms)cweave_sdc.o: $(o2_grms)cweave_sdc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_sdc.cpp -o $@
+$(o2_grms)cweave_sdcsym.o: $(o2_grms)cweave_sdcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_sdcsym.cpp -o $@
+$(o2_grms)cweave_sdctbl.o: $(o2_grms)cweave_sdctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweave_sdctbl.cpp -o $@
+$(o2_grms)cweb_comments.o: $(o2_grms)cweb_comments.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_comments.cpp -o $@
+$(o2_grms)cweb_commentssym.o: $(o2_grms)cweb_commentssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_commentssym.cpp -o $@
+$(o2_grms)cweb_commentstbl.o: $(o2_grms)cweb_commentstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_commentstbl.cpp -o $@
+$(o2_grms)cweb_or_c_k.o: $(o2_grms)cweb_or_c_k.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_or_c_k.cpp -o $@
+$(o2_grms)cweb_or_c_ksym.o: $(o2_grms)cweb_or_c_ksym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_or_c_ksym.cpp -o $@
+$(o2_grms)cweb_or_c_ktbl.o: $(o2_grms)cweb_or_c_ktbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_or_c_ktbl.cpp -o $@
+$(o2_grms)cweb_put_k_into_ph.o: $(o2_grms)cweb_put_k_into_ph.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_put_k_into_ph.cpp -o $@
+$(o2_grms)cweb_put_k_into_phsym.o: $(o2_grms)cweb_put_k_into_phsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_put_k_into_phsym.cpp -o $@
+$(o2_grms)cweb_put_k_into_phtbl.o: $(o2_grms)cweb_put_k_into_phtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)cweb_put_k_into_phtbl.cpp -o $@
+$(o2_grms)dbl_colon.o: $(o2_grms)dbl_colon.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)dbl_colon.cpp -o $@
+$(o2_grms)dbl_colonsym.o: $(o2_grms)dbl_colonsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)dbl_colonsym.cpp -o $@
+$(o2_grms)dbl_colontbl.o: $(o2_grms)dbl_colontbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)dbl_colontbl.cpp -o $@
+$(o2_grms)enumerate_T_alphabet.o: $(o2_grms)enumerate_T_alphabet.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_T_alphabet.cpp -o $@
+$(o2_grms)enumerate_T_alphabetsym.o: $(o2_grms)enumerate_T_alphabetsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_T_alphabetsym.cpp -o $@
+$(o2_grms)enumerate_T_alphabettbl.o: $(o2_grms)enumerate_T_alphabettbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_T_alphabettbl.cpp -o $@
+$(o2_grms)enumerate_grammar.o: $(o2_grms)enumerate_grammar.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_grammar.cpp -o $@
+$(o2_grms)enumerate_grammarsym.o: $(o2_grms)enumerate_grammarsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_grammarsym.cpp -o $@
+$(o2_grms)enumerate_grammartbl.o: $(o2_grms)enumerate_grammartbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)enumerate_grammartbl.cpp -o $@
+$(o2_grms)eol.o: $(o2_grms)eol.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eol.cpp -o $@
+$(o2_grms)eolsym.o: $(o2_grms)eolsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eolsym.cpp -o $@
+$(o2_grms)eoltbl.o: $(o2_grms)eoltbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eoltbl.cpp -o $@
+$(o2_grms)epsilon_rules.o: $(o2_grms)epsilon_rules.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)epsilon_rules.cpp -o $@
+$(o2_grms)epsilon_rulessym.o: $(o2_grms)epsilon_rulessym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)epsilon_rulessym.cpp -o $@
+$(o2_grms)epsilon_rulestbl.o: $(o2_grms)epsilon_rulestbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)epsilon_rulestbl.cpp -o $@
+$(o2_grms)err_symbols_ph.o: $(o2_grms)err_symbols_ph.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_ph.cpp -o $@
+$(o2_grms)err_symbols_ph_th.o: $(o2_grms)err_symbols_ph_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_ph_th.cpp -o $@
+$(o2_grms)err_symbols_ph_thsym.o: $(o2_grms)err_symbols_ph_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_ph_thsym.cpp -o $@
+$(o2_grms)err_symbols_ph_thtbl.o: $(o2_grms)err_symbols_ph_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_ph_thtbl.cpp -o $@
+$(o2_grms)err_symbols_phsym.o: $(o2_grms)err_symbols_phsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_phsym.cpp -o $@
+$(o2_grms)err_symbols_phtbl.o: $(o2_grms)err_symbols_phtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)err_symbols_phtbl.cpp -o $@
+$(o2_grms)esc_seq.o: $(o2_grms)esc_seq.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)esc_seq.cpp -o $@
+$(o2_grms)esc_seqsym.o: $(o2_grms)esc_seqsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)esc_seqsym.cpp -o $@
+$(o2_grms)esc_seqtbl.o: $(o2_grms)esc_seqtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)esc_seqtbl.cpp -o $@
+$(o2_grms)eval_phrases.o: $(o2_grms)eval_phrases.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eval_phrases.cpp -o $@
+$(o2_grms)eval_phrasessym.o: $(o2_grms)eval_phrasessym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eval_phrasessym.cpp -o $@
+$(o2_grms)eval_phrasestbl.o: $(o2_grms)eval_phrasestbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)eval_phrasestbl.cpp -o $@
+$(o2_grms)fsc_file.o: $(o2_grms)fsc_file.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsc_file.cpp -o $@
+$(o2_grms)fsc_filesym.o: $(o2_grms)fsc_filesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsc_filesym.cpp -o $@
+$(o2_grms)fsc_filetbl.o: $(o2_grms)fsc_filetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsc_filetbl.cpp -o $@
+$(o2_grms)fsm_class_phrase_th.o: $(o2_grms)fsm_class_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_class_phrase_th.cpp -o $@
+$(o2_grms)fsm_class_phrase_thsym.o: $(o2_grms)fsm_class_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_class_phrase_thsym.cpp -o $@
+$(o2_grms)fsm_class_phrase_thtbl.o: $(o2_grms)fsm_class_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_class_phrase_thtbl.cpp -o $@
+$(o2_grms)fsm_phrase.o: $(o2_grms)fsm_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrase.cpp -o $@
+$(o2_grms)fsm_phrase_th.o: $(o2_grms)fsm_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrase_th.cpp -o $@
+$(o2_grms)fsm_phrase_thsym.o: $(o2_grms)fsm_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrase_thsym.cpp -o $@
+$(o2_grms)fsm_phrase_thtbl.o: $(o2_grms)fsm_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrase_thtbl.cpp -o $@
+$(o2_grms)fsm_phrasesym.o: $(o2_grms)fsm_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrasesym.cpp -o $@
+$(o2_grms)fsm_phrasetbl.o: $(o2_grms)fsm_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)fsm_phrasetbl.cpp -o $@
+$(o2_grms)identifier.o: $(o2_grms)identifier.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)identifier.cpp -o $@
+$(o2_grms)identifiersym.o: $(o2_grms)identifiersym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)identifiersym.cpp -o $@
+$(o2_grms)identifiertbl.o: $(o2_grms)identifiertbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)identifiertbl.cpp -o $@
+$(o2_grms)int_no.o: $(o2_grms)int_no.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)int_no.cpp -o $@
+$(o2_grms)int_nosym.o: $(o2_grms)int_nosym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)int_nosym.cpp -o $@
+$(o2_grms)int_notbl.o: $(o2_grms)int_notbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)int_notbl.cpp -o $@
+$(o2_grms)la_expr.o: $(o2_grms)la_expr.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr.cpp -o $@
+$(o2_grms)la_expr_lexical.o: $(o2_grms)la_expr_lexical.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_lexical.cpp -o $@
+$(o2_grms)la_expr_lexicalsym.o: $(o2_grms)la_expr_lexicalsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_lexicalsym.cpp -o $@
+$(o2_grms)la_expr_lexicaltbl.o: $(o2_grms)la_expr_lexicaltbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_lexicaltbl.cpp -o $@
+$(o2_grms)la_expr_src.o: $(o2_grms)la_expr_src.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_src.cpp -o $@
+$(o2_grms)la_expr_srcsym.o: $(o2_grms)la_expr_srcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_srcsym.cpp -o $@
+$(o2_grms)la_expr_srctbl.o: $(o2_grms)la_expr_srctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_expr_srctbl.cpp -o $@
+$(o2_grms)la_exprsym.o: $(o2_grms)la_exprsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_exprsym.cpp -o $@
+$(o2_grms)la_exprtbl.o: $(o2_grms)la_exprtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_exprtbl.cpp -o $@
+$(o2_grms)la_lrk_T.o: $(o2_grms)la_lrk_T.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_lrk_T.cpp -o $@
+$(o2_grms)la_lrk_Tsym.o: $(o2_grms)la_lrk_Tsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_lrk_Tsym.cpp -o $@
+$(o2_grms)la_lrk_Ttbl.o: $(o2_grms)la_lrk_Ttbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)la_lrk_Ttbl.cpp -o $@
+$(o2_grms)link_cleanser.o: $(o2_grms)link_cleanser.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)link_cleanser.cpp -o $@
+$(o2_grms)link_cleansersym.o: $(o2_grms)link_cleansersym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)link_cleansersym.cpp -o $@
+$(o2_grms)link_cleansertbl.o: $(o2_grms)link_cleansertbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)link_cleansertbl.cpp -o $@
+$(o2_grms)linker_id.o: $(o2_grms)linker_id.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_id.cpp -o $@
+$(o2_grms)linker_idsym.o: $(o2_grms)linker_idsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_idsym.cpp -o $@
+$(o2_grms)linker_idtbl.o: $(o2_grms)linker_idtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_idtbl.cpp -o $@
+$(o2_grms)linker_pass3.o: $(o2_grms)linker_pass3.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_pass3.cpp -o $@
+$(o2_grms)linker_pass3sym.o: $(o2_grms)linker_pass3sym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_pass3sym.cpp -o $@
+$(o2_grms)linker_pass3tbl.o: $(o2_grms)linker_pass3tbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_pass3tbl.cpp -o $@
+$(o2_grms)linker_preamble_code.o: $(o2_grms)linker_preamble_code.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_preamble_code.cpp -o $@
+$(o2_grms)linker_preamble_codesym.o: $(o2_grms)linker_preamble_codesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_preamble_codesym.cpp -o $@
+$(o2_grms)linker_preamble_codetbl.o: $(o2_grms)linker_preamble_codetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)linker_preamble_codetbl.cpp -o $@
+$(o2_grms)lint_balls.o: $(o2_grms)lint_balls.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lint_balls.cpp -o $@
+$(o2_grms)lint_ballssym.o: $(o2_grms)lint_ballssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lint_ballssym.cpp -o $@
+$(o2_grms)lint_ballstbl.o: $(o2_grms)lint_ballstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lint_ballstbl.cpp -o $@
+$(o2_grms)lr1_k_phrase.o: $(o2_grms)lr1_k_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrase.cpp -o $@
+$(o2_grms)lr1_k_phrase_th.o: $(o2_grms)lr1_k_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrase_th.cpp -o $@
+$(o2_grms)lr1_k_phrase_thsym.o: $(o2_grms)lr1_k_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrase_thsym.cpp -o $@
+$(o2_grms)lr1_k_phrase_thtbl.o: $(o2_grms)lr1_k_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrase_thtbl.cpp -o $@
+$(o2_grms)lr1_k_phrasesym.o: $(o2_grms)lr1_k_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrasesym.cpp -o $@
+$(o2_grms)lr1_k_phrasetbl.o: $(o2_grms)lr1_k_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)lr1_k_phrasetbl.cpp -o $@
+$(o2_grms)mpost_output.o: $(o2_grms)mpost_output.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)mpost_output.cpp -o $@
+$(o2_grms)mpost_outputsym.o: $(o2_grms)mpost_outputsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)mpost_outputsym.cpp -o $@
+$(o2_grms)mpost_outputtbl.o: $(o2_grms)mpost_outputtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)mpost_outputtbl.cpp -o $@
+$(o2_grms)o2_code_end.o: $(o2_grms)o2_code_end.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_code_end.cpp -o $@
+$(o2_grms)o2_code_endsym.o: $(o2_grms)o2_code_endsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_code_endsym.cpp -o $@
+$(o2_grms)o2_code_endtbl.o: $(o2_grms)o2_code_endtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_code_endtbl.cpp -o $@
+$(o2_grms)o2_err_hdlr.o: $(o2_grms)o2_err_hdlr.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_err_hdlr.cpp -o $@
+$(o2_grms)o2_err_hdlrsym.o: $(o2_grms)o2_err_hdlrsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_err_hdlrsym.cpp -o $@
+$(o2_grms)o2_err_hdlrtbl.o: $(o2_grms)o2_err_hdlrtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_err_hdlrtbl.cpp -o $@
+$(o2_grms)o2_lcl_opt.o: $(o2_grms)o2_lcl_opt.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_opt.cpp -o $@
+$(o2_grms)o2_lcl_opts.o: $(o2_grms)o2_lcl_opts.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_opts.cpp -o $@
+$(o2_grms)o2_lcl_optssym.o: $(o2_grms)o2_lcl_optssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_optssym.cpp -o $@
+$(o2_grms)o2_lcl_optstbl.o: $(o2_grms)o2_lcl_optstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_optstbl.cpp -o $@
+$(o2_grms)o2_lcl_optsym.o: $(o2_grms)o2_lcl_optsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_optsym.cpp -o $@
+$(o2_grms)o2_lcl_opttbl.o: $(o2_grms)o2_lcl_opttbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_lcl_opttbl.cpp -o $@
+$(o2_grms)o2_linker_opts.o: $(o2_grms)o2_linker_opts.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_linker_opts.cpp -o $@
+$(o2_grms)o2_linker_optssym.o: $(o2_grms)o2_linker_optssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_linker_optssym.cpp -o $@
+$(o2_grms)o2_linker_optstbl.o: $(o2_grms)o2_linker_optstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_linker_optstbl.cpp -o $@
+$(o2_grms)o2_sdc.o: $(o2_grms)o2_sdc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_sdc.cpp -o $@
+$(o2_grms)o2_sdcsym.o: $(o2_grms)o2_sdcsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_sdcsym.cpp -o $@
+$(o2_grms)o2_sdctbl.o: $(o2_grms)o2_sdctbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)o2_sdctbl.cpp -o $@
+$(o2_grms)parallel_monitor_ph.o: $(o2_grms)parallel_monitor_ph.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_monitor_ph.cpp -o $@
+$(o2_grms)parallel_monitor_phsym.o: $(o2_grms)parallel_monitor_phsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_monitor_phsym.cpp -o $@
+$(o2_grms)parallel_monitor_phtbl.o: $(o2_grms)parallel_monitor_phtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_monitor_phtbl.cpp -o $@
+$(o2_grms)parallel_oper.o: $(o2_grms)parallel_oper.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_oper.cpp -o $@
+$(o2_grms)parallel_opersym.o: $(o2_grms)parallel_opersym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_opersym.cpp -o $@
+$(o2_grms)parallel_opertbl.o: $(o2_grms)parallel_opertbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_opertbl.cpp -o $@
+$(o2_grms)parallel_parser_ph_th.o: $(o2_grms)parallel_parser_ph_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_ph_th.cpp -o $@
+$(o2_grms)parallel_parser_ph_thsym.o: $(o2_grms)parallel_parser_ph_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_ph_thsym.cpp -o $@
+$(o2_grms)parallel_parser_ph_thtbl.o: $(o2_grms)parallel_parser_ph_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_ph_thtbl.cpp -o $@
+$(o2_grms)parallel_parser_phrase.o: $(o2_grms)parallel_parser_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_phrase.cpp -o $@
+$(o2_grms)parallel_parser_phrasesym.o: $(o2_grms)parallel_parser_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_phrasesym.cpp -o $@
+$(o2_grms)parallel_parser_phrasetbl.o: $(o2_grms)parallel_parser_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)parallel_parser_phrasetbl.cpp -o $@
+$(o2_grms)pass3.o: $(o2_grms)pass3.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)pass3.cpp -o $@
+$(o2_grms)pass3sym.o: $(o2_grms)pass3sym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)pass3sym.cpp -o $@
+$(o2_grms)pass3tbl.o: $(o2_grms)pass3tbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)pass3tbl.cpp -o $@
+$(o2_grms)prefile_include.o: $(o2_grms)prefile_include.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prefile_include.cpp -o $@
+$(o2_grms)prefile_includesym.o: $(o2_grms)prefile_includesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prefile_includesym.cpp -o $@
+$(o2_grms)prefile_includetbl.o: $(o2_grms)prefile_includetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prefile_includetbl.cpp -o $@
+$(o2_grms)prt_fs_of_rules.o: $(o2_grms)prt_fs_of_rules.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_fs_of_rules.cpp -o $@
+$(o2_grms)prt_fs_of_rulessym.o: $(o2_grms)prt_fs_of_rulessym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_fs_of_rulessym.cpp -o $@
+$(o2_grms)prt_fs_of_rulestbl.o: $(o2_grms)prt_fs_of_rulestbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_fs_of_rulestbl.cpp -o $@
+$(o2_grms)prt_sr_elements.o: $(o2_grms)prt_sr_elements.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_sr_elements.cpp -o $@
+$(o2_grms)prt_sr_elementssym.o: $(o2_grms)prt_sr_elementssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_sr_elementssym.cpp -o $@
+$(o2_grms)prt_sr_elementstbl.o: $(o2_grms)prt_sr_elementstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_sr_elementstbl.cpp -o $@
+$(o2_grms)prt_xrefs_docs.o: $(o2_grms)prt_xrefs_docs.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_xrefs_docs.cpp -o $@
+$(o2_grms)prt_xrefs_docssym.o: $(o2_grms)prt_xrefs_docssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_xrefs_docssym.cpp -o $@
+$(o2_grms)prt_xrefs_docstbl.o: $(o2_grms)prt_xrefs_docstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)prt_xrefs_docstbl.cpp -o $@
+$(o2_grms)rc_phrase.o: $(o2_grms)rc_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrase.cpp -o $@
+$(o2_grms)rc_phrase_th.o: $(o2_grms)rc_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrase_th.cpp -o $@
+$(o2_grms)rc_phrase_thsym.o: $(o2_grms)rc_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrase_thsym.cpp -o $@
+$(o2_grms)rc_phrase_thtbl.o: $(o2_grms)rc_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrase_thtbl.cpp -o $@
+$(o2_grms)rc_phrasesym.o: $(o2_grms)rc_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrasesym.cpp -o $@
+$(o2_grms)rc_phrasetbl.o: $(o2_grms)rc_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rc_phrasetbl.cpp -o $@
+$(o2_grms)rhs_bnd.o: $(o2_grms)rhs_bnd.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_bnd.cpp -o $@
+$(o2_grms)rhs_bndsym.o: $(o2_grms)rhs_bndsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_bndsym.cpp -o $@
+$(o2_grms)rhs_bndtbl.o: $(o2_grms)rhs_bndtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_bndtbl.cpp -o $@
+$(o2_grms)rhs_component.o: $(o2_grms)rhs_component.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_component.cpp -o $@
+$(o2_grms)rhs_componentsym.o: $(o2_grms)rhs_componentsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_componentsym.cpp -o $@
+$(o2_grms)rhs_componenttbl.o: $(o2_grms)rhs_componenttbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rhs_componenttbl.cpp -o $@
+$(o2_grms)rtn_component.o: $(o2_grms)rtn_component.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rtn_component.cpp -o $@
+$(o2_grms)rtn_componentsym.o: $(o2_grms)rtn_componentsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rtn_componentsym.cpp -o $@
+$(o2_grms)rtn_componenttbl.o: $(o2_grms)rtn_componenttbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rtn_componenttbl.cpp -o $@
+$(o2_grms)rule_def_phrase.o: $(o2_grms)rule_def_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_def_phrase.cpp -o $@
+$(o2_grms)rule_def_phrasesym.o: $(o2_grms)rule_def_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_def_phrasesym.cpp -o $@
+$(o2_grms)rule_def_phrasetbl.o: $(o2_grms)rule_def_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_def_phrasetbl.cpp -o $@
+$(o2_grms)rule_lhs_phrase.o: $(o2_grms)rule_lhs_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_lhs_phrase.cpp -o $@
+$(o2_grms)rule_lhs_phrasesym.o: $(o2_grms)rule_lhs_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_lhs_phrasesym.cpp -o $@
+$(o2_grms)rule_lhs_phrasetbl.o: $(o2_grms)rule_lhs_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rule_lhs_phrasetbl.cpp -o $@
+$(o2_grms)rules_phrase.o: $(o2_grms)rules_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrase.cpp -o $@
+$(o2_grms)rules_phrase_th.o: $(o2_grms)rules_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrase_th.cpp -o $@
+$(o2_grms)rules_phrase_thsym.o: $(o2_grms)rules_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrase_thsym.cpp -o $@
+$(o2_grms)rules_phrase_thtbl.o: $(o2_grms)rules_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrase_thtbl.cpp -o $@
+$(o2_grms)rules_phrasesym.o: $(o2_grms)rules_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrasesym.cpp -o $@
+$(o2_grms)rules_phrasetbl.o: $(o2_grms)rules_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_phrasetbl.cpp -o $@
+$(o2_grms)rules_use_cnt.o: $(o2_grms)rules_use_cnt.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_use_cnt.cpp -o $@
+$(o2_grms)rules_use_cntsym.o: $(o2_grms)rules_use_cntsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_use_cntsym.cpp -o $@
+$(o2_grms)rules_use_cnttbl.o: $(o2_grms)rules_use_cnttbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)rules_use_cnttbl.cpp -o $@
+$(o2_grms)subrule_def.o: $(o2_grms)subrule_def.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_def.cpp -o $@
+$(o2_grms)subrule_defsym.o: $(o2_grms)subrule_defsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_defsym.cpp -o $@
+$(o2_grms)subrule_deftbl.o: $(o2_grms)subrule_deftbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_deftbl.cpp -o $@
+$(o2_grms)subrule_vector.o: $(o2_grms)subrule_vector.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_vector.cpp -o $@
+$(o2_grms)subrule_vectorsym.o: $(o2_grms)subrule_vectorsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_vectorsym.cpp -o $@
+$(o2_grms)subrule_vectortbl.o: $(o2_grms)subrule_vectortbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrule_vectortbl.cpp -o $@
+$(o2_grms)subrules_phrase.o: $(o2_grms)subrules_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrules_phrase.cpp -o $@
+$(o2_grms)subrules_phrasesym.o: $(o2_grms)subrules_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrules_phrasesym.cpp -o $@
+$(o2_grms)subrules_phrasetbl.o: $(o2_grms)subrules_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)subrules_phrasetbl.cpp -o $@
+$(o2_grms)t_alphabet.o: $(o2_grms)t_alphabet.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_alphabet.cpp -o $@
+$(o2_grms)t_alphabetsym.o: $(o2_grms)t_alphabetsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_alphabetsym.cpp -o $@
+$(o2_grms)t_alphabettbl.o: $(o2_grms)t_alphabettbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_alphabettbl.cpp -o $@
+$(o2_grms)t_def_delabort_tags.o: $(o2_grms)t_def_delabort_tags.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_def_delabort_tags.cpp -o $@
+$(o2_grms)t_def_delabort_tagssym.o: $(o2_grms)t_def_delabort_tagssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_def_delabort_tagssym.cpp -o $@
+$(o2_grms)t_def_delabort_tagstbl.o: $(o2_grms)t_def_delabort_tagstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)t_def_delabort_tagstbl.cpp -o $@
+$(o2_grms)term_def_ph.o: $(o2_grms)term_def_ph.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)term_def_ph.cpp -o $@
+$(o2_grms)term_def_phsym.o: $(o2_grms)term_def_phsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)term_def_phsym.cpp -o $@
+$(o2_grms)term_def_phtbl.o: $(o2_grms)term_def_phtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)term_def_phtbl.cpp -o $@
+$(o2_grms)terminal_def_symclass.o: $(o2_grms)terminal_def_symclass.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminal_def_symclass.cpp -o $@
+$(o2_grms)terminal_def_symclasssym.o: $(o2_grms)terminal_def_symclasssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminal_def_symclasssym.cpp -o $@
+$(o2_grms)terminal_def_symclasstbl.o: $(o2_grms)terminal_def_symclasstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminal_def_symclasstbl.cpp -o $@
+$(o2_grms)terminals_phrase.o: $(o2_grms)terminals_phrase.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrase.cpp -o $@
+$(o2_grms)terminals_phrase_th.o: $(o2_grms)terminals_phrase_th.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrase_th.cpp -o $@
+$(o2_grms)terminals_phrase_thsym.o: $(o2_grms)terminals_phrase_thsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrase_thsym.cpp -o $@
+$(o2_grms)terminals_phrase_thtbl.o: $(o2_grms)terminals_phrase_thtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrase_thtbl.cpp -o $@
+$(o2_grms)terminals_phrasesym.o: $(o2_grms)terminals_phrasesym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrasesym.cpp -o $@
+$(o2_grms)terminals_phrasetbl.o: $(o2_grms)terminals_phrasetbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)terminals_phrasetbl.cpp -o $@
+$(o2_grms)test_components.o: $(o2_grms)test_components.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)test_components.cpp -o $@
+$(o2_grms)test_componentssym.o: $(o2_grms)test_componentssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)test_componentssym.cpp -o $@
+$(o2_grms)test_componentstbl.o: $(o2_grms)test_componentstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)test_componentstbl.cpp -o $@
+$(o2_grms)unq_str.o: $(o2_grms)unq_str.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)unq_str.cpp -o $@
+$(o2_grms)unq_strsym.o: $(o2_grms)unq_strsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)unq_strsym.cpp -o $@
+$(o2_grms)unq_strtbl.o: $(o2_grms)unq_strtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)unq_strtbl.cpp -o $@
+$(o2_grms)ws.o: $(o2_grms)ws.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)ws.cpp -o $@
+$(o2_grms)wssym.o: $(o2_grms)wssym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)wssym.cpp -o $@
+$(o2_grms)wstbl.o: $(o2_grms)wstbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)wstbl.cpp -o $@
+$(o2_grms)xc_str.o: $(o2_grms)xc_str.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)xc_str.cpp -o $@
+$(o2_grms)xc_strsym.o: $(o2_grms)xc_strsym.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)xc_strsym.cpp -o $@
+$(o2_grms)xc_strtbl.o: $(o2_grms)xc_strtbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)xc_strtbl.cpp -o $@
+$(o2_grms)yacco2_err_symbols.o: $(o2_grms)yacco2_err_symbols.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)yacco2_err_symbols.cpp -o $@
+$(o2_grms)yacco2_fsc.o: $(o2_grms)yacco2_fsc.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)yacco2_fsc.cpp -o $@
+$(o2_grms)yacco2_stbl.o: $(o2_grms)yacco2_stbl.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)yacco2_stbl.cpp -o $@
+$(o2_grms)yacco2_terminals.o: $(o2_grms)yacco2_terminals.cpp;CC $(BASICOPTS) $(O2_includes) $(o2_grms)yacco2_terminals.cpp -o $@
+
+Genw:
+ cweave $(o2_stbl)yacco2_stbl
+ ctangle -l +e $(o2_stbl)yacco2_stbl
+ pdftex yacco2_stbl
+ pdftops yacco2_stbl.pdf
+ mv yacco2_stbl.pdf $(o2_docs)
+ rm yacco2_stbl.idx
+ rm yacco2_stbl.scn
+ rm yacco2_stbl.toc
+ rm yacco2_stbl.tex
+ rm yacco2_stbl.log
+ rm yacco2_stbl.c \ No newline at end of file
diff --git a/web/yacco2/compiler/grammars/mpost_output.cpp b/web/yacco2/compiler/grammars/mpost_output.cpp
new file mode 100644
index 0000000000..5b801ed561
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_output.cpp
@@ -0,0 +1,881 @@
+/*
+ File: mpost_output.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "mpost_output.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_mpost_output;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 21;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+}
+ Cmpost_output::
+ Cmpost_output()
+ :yacco2::CAbs_fsm
+ ("mpost_output.lex"
+ ,"1.0"
+ ,"29 Nov. 2005"
+ ,false
+ ,"Output grammar rules railroad diagrams for mpost that cweb program uses."
+ ,"Fri Jan 30 18:55:16 2015 "
+ ,S1_Cmpost_output){
+
+ MPOST_CWEB_LOAD_XLATE_CHRS(this);
+
+ }
+
+Cmpost_output::~Cmpost_output(){
+
+ for(int x = 0;x < 21;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cmpost_output::failed(){
+ return false;
+ }
+ void Cmpost_output::op(){
+no_subrules_per_rule_.push_back(0);
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+gened_date_time_+= string(cTime);
+int n= gened_date_time_.find('\n');
+gened_date_time_[n]= ' ';
+
+mp_dimension_+= " abcdefghijklmnopqrstuvwxyz";
+w_fig_no_= 0;
+rule_def_= 0;
+subrule_def_= 0;
+rule_no_= 0;
+subrule_no_= 0;
+elem_no_= 0;
+no_of_rules_= 0;
+no_of_subrules_= 0;
+mp_filename_+= grammar_filename_prefix_.c_str();
+mp_filename_+= ".mp";
+omp_file_.open(mp_filename_.c_str(),ios_base::out|ios::trunc);
+if(!omp_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(mp_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+w_filename_+= grammar_filename_prefix_.c_str();
+w_filename_+= ".w";
+ow_file_.open(w_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+w_index_filename_+= grammar_filename_prefix_.c_str();
+w_index_filename_+= "_idx.w";
+ow_index_file_.open(w_index_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_index_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_index_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+
+KCHARP t_file = "T.w";
+ow_t_file_.open(t_file,ios_base::out|ios::trunc);
+if(!ow_t_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(t_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+KCHARP err_file = "Err.w";
+ow_err_file_.open(err_file,ios_base::out|ios::trunc);
+if(!ow_err_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(err_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+KCHARP lrk_file = "Lrk.w";
+ow_lrk_file_.open(lrk_file,ios_base::out|ios::trunc);
+if(!ow_lrk_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(lrk_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+ MPOST_CWEB_EMIT_PREFIX_CODE(this);
+
+}
+int Cmpost_output::rhs_to_rules_mapping_[33] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,6 // subrule 9 for rule 7
+ ,6 // subrule 10 for rule 7
+ ,7 // subrule 11 for rule 8
+ ,8 // subrule 12 for rule 9
+ ,9 // subrule 13 for rule 10
+ ,10 // subrule 14 for rule 11
+ ,11 // subrule 15 for rule 12
+ ,12 // subrule 16 for rule 13
+ ,13 // subrule 17 for rule 14
+ ,13 // subrule 18 for rule 14
+ ,14 // subrule 19 for rule 15
+ ,15 // subrule 20 for rule 16
+ ,16 // subrule 21 for rule 17
+ ,16 // subrule 22 for rule 17
+ ,17 // subrule 23 for rule 18
+ ,18 // subrule 24 for rule 19
+ ,19 // subrule 25 for rule 20
+ ,19 // subrule 26 for rule 20
+ ,20 // subrule 27 for rule 21
+ ,20 // subrule 28 for rule 21
+ ,20 // subrule 29 for rule 21
+ ,20 // subrule 30 for rule 21
+ ,20 // subrule 31 for rule 21
+ ,20 // subrule 32 for rule 21
+};
+Rmpost_output::Rmpost_output(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmpost_output",0,Cmpost_output::R_Rmpost_output_,P,false,false){
+}
+
+void Rmpost_output::sr1(){
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP mp_init_vars = "init_variables;";
+ fsm->omp_file_ << mp_init_vars << endl;
+ KCHARP mp_figure =
+ "beginfig(%i);\n"
+ " drw_rule(%i);\n"
+ "endfig;";
+ KCHARP sr_figure =
+ "beginfig(%i);\n"
+ " drw_rule_a_rhs(%i,%i);\n"
+ "endfig;";
+
+ int rule_no = 1;
+ int fig_no(0);
+ for(;rule_no <= fsm->no_of_rules_;++rule_no){
+ ++fig_no;
+ sprintf(fsm->big_buf_,mp_figure,fig_no,rule_no);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ int no_srs = fsm->no_subrules_per_rule_[rule_no];
+ int sr_no(1);
+ for(;sr_no <= no_srs;++sr_no){
+ ++fig_no;
+ sprintf(fsm->big_buf_,sr_figure,fig_no,rule_no,sr_no);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ }
+ }
+
+ KCHARP mp_end = "end;";
+ fsm->omp_file_ << mp_end << endl;
+ fsm->omp_file_.close();
+ KCHARP w_fsc_file =
+ "@** First Set Language for \\Olinker.\\fbreak\n"
+ "\\openin 1 = \"%s.fsc\"\n" // macro file open
+ "\\ifeof 1 true\n" // test the result
+ " \\closein 1\n"
+ "\\else\n"
+ " \\closein 1\n"
+ " \\listing{\"%s.fsc\"}"
+ "\\fi";
+ sprintf(fsm->big_buf_,w_fsc_file,fsm->fq_filename_noext_.c_str()
+ ,fsm->fq_filename_noext_.c_str());
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+
+ KCHARP w_lr1_states =
+ "@** Lr1 State Network.\\fbreak\n"
+ "\\statecolumnspace %s";
+ sprintf(fsm->big_buf_,w_lr1_states," ");
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ KCHARP w_stateno = // stateno, vectored into symbol, conflict
+ "\\stateno{%i} {%s} {%s}\n"
+ "\\halign{\n"
+ "\\span\\statetemplate\n"
+ "\\statetitle";
+ char vectored_into[Max_cweb_item_size];
+ char rule_name[Max_cweb_item_size];
+ char subrule_sym[Max_cweb_item_size];
+ char cur_sym[Max_cweb_item_size];
+ char nxtsym_1[Max_cweb_item_size];
+ char nxtsym_2[Max_cweb_item_size];
+ char state_type[Max_cweb_item_size];
+ char la_set_no[Max_cweb_item_size];
+ string w_possible_ar_code;
+
+ KCHARP la_set_no_template = "%i";
+ KCHARP state_type_template = "%s";
+ KCHARP three_symbols_string_template =
+ "%s %s %s"; // 3 symbols: current and 2 la
+ KCHARP w_stateno_subrule =
+ "{%s}&\n" // closure or transitive
+ "{%s}&\n" // rule
+ "{%i\\hss}&\n" // rule no
+ "{%i\\hss}&\n" // subrule no
+ "{%i\\hss}&\n" // element pos
+ "{%s}&\n" // current symbol
+ "{%i\\hss}&\n" // born state no
+ "{%i\\hss}&\n" // goto state no
+ "{%i\\hss}&\n" // reduced state no
+ "{%s\\hss}\\cr"; // la set if reduced
+ int fnd_reduced_stateno(0);
+
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){// walk the states
+ vectored_into[0] = (char)0;
+ w_possible_ar_code.clear();
+ state_type[0] = (char)0;
+ state* cur_state = *si;
+
+ if(cur_state->state_no_ != 1){// state 1 vector into is empty
+ XLATE_SYMBOLS_FOR_cweave
+ (cur_state->entry_symbol_literal(),vectored_into);
+ }
+ switch (cur_state->state_type_){
+ case 0:{//shift only
+ sprintf(state_type,state_type_template,"\\Shiftonly");
+ break;
+ }
+ case 1:{
+ sprintf(state_type,state_type_template,"\\Reduceonly");
+ break;
+ }
+ case 2:{
+ sprintf(state_type,state_type_template,"\\ShiftReduce");
+ break;
+ }
+ case 3:{
+ sprintf(state_type,state_type_template,"\\MultipleReduces");
+ break;
+ }
+ case 4:{
+ sprintf(state_type,state_type_template,"\\ShiftandMultipleReduces");
+ break;
+ }
+ }
+ w_possible_ar_code.append(vectored_into);
+ if (cur_state->vectored_into_by_elem_ == LR1_PARALLEL_OPERATOR){
+ // add arbitration code? to |vectored_into| string
+ if (cur_state->arbitrator_name_ != 0){
+ w_possible_ar_code += "\\ arbitration-code: \\ |";
+ w_possible_ar_code += cur_state->arbitrator_name_->c_str();
+ w_possible_ar_code += "|";
+ }else{
+ w_possible_ar_code += "\\ arbitration-code: \\ \\epsilon";
+ }
+ }
+ sprintf(fsm->big_buf_
+ ,w_stateno
+ ,cur_state->state_no_
+ ,w_possible_ar_code.c_str()//|vectored_into|
+ ,state_type);
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ string rhs_syms_str;
+ for(;svi!=svie;++svi){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ rhs_syms_str.clear();
+ state_element* se = *seli;
+ rule_def* rd = se->subrule_def_->its_rule_def();
+ T_subrule_def* srd = se->subrule_def_;
+ rule_name[0] = (char)0;
+ subrule_sym[0] = (char)0;
+ cur_sym[0] = (char)0;
+ la_set_no[0] = (char)0;
+
+ XLATE_SYMBOLS_FOR_cweave(rd->rule_name()->c_str(),rule_name);
+ int elem_pos(0);
+ if(se->previous_state_ == 0) elem_pos = 1;
+ elem_pos = MPOST_CWEB_xlated_symbol(se->sr_element_,cur_sym);
+ if(se->goto_state_==0){// reducing subrule
+ sprintf(la_set_no,la_set_no_template,se->common_la_set_idx_+1);
+ }else{// no la set
+ }
+
+ if (se->reduced_state_ != 0) {
+ fnd_reduced_stateno = se->reduced_state_->state_no_;
+ }
+ else{ // find from merged into
+ fnd_reduced_stateno=-1;
+ if (se->next_state_element_->reduced_state_ != 0){
+ fnd_reduced_stateno = se->next_state_element_->reduced_state_->state_no_;
+ }
+ }
+ fsm->MPOST_CWEB_crt_rhs_sym_str(se,&rhs_syms_str);
+ sprintf(fsm->big_buf_
+ ,w_stateno_subrule
+ ,(elem_pos == 1)?"c":"t"
+ ,rule_name
+ ,rd->rule_no()
+ ,srd->subrule_no_of_rule()
+ ,elem_pos
+ ,rhs_syms_str.c_str()
+ ,se->closure_state_->state_no_
+ ,(se->goto_state_ !=0)?se->goto_state_->state_no_:0
+ ,fnd_reduced_stateno
+ ,la_set_no
+ );
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ }
+ }
+ fsm->ow_file_ << "}" << endl;
+ }
+ KCHARP w_end = "@** Index.";
+ fsm->ow_file_ << w_end << endl;
+ fsm->ow_file_.close();
+
+}
+
+Rgrammar_phrase::Rgrammar_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rgrammar_phrase",0,Cmpost_output::R_Rgrammar_phrase_,P,false,false){
+}
+
+Rks_epi::Rks_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rks_epi",0,Cmpost_output::R_Rks_epi_,P,false,false){
+}
+
+Rks::Rks(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rks",0,Cmpost_output::R_Rks_,P,false,false){
+}
+
+Rk::Rk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rk",0,Cmpost_output::R_Rk_,P,false,false){
+}
+
+void Rk::sr1(){
+ struct SF{
+ T_cweb_marker* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ WRT_CWEB_MARKER(&fsm->ow_file_,sf->p1__->ast());
+
+}
+
+Rfsm_phrase::Rfsm_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfsm_phrase",0,Cmpost_output::R_Rfsm_phrase_,P,false,false){
+}
+
+void Rfsm_phrase::sr1(){
+ struct SF{
+ T_fsm_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_fsm(fsm,sf->p1__);
+
+}
+
+Rparallel_phrase::Rparallel_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_phrase",0,Cmpost_output::R_Rparallel_phrase_,P,false,false){
+}
+
+RT_enum_phrase::RT_enum_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_enum_phrase",0,Cmpost_output::R_RT_enum_phrase_,P,false,false){
+}
+
+Rerr_phrase::Rerr_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerr_phrase",0,Cmpost_output::R_Rerr_phrase_,P,false,false){
+}
+
+void Rerr_phrase::sr1(){
+ struct SF{
+ T_error_symbols_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_Err(fsm,sf->p1__);
+
+}
+
+Rrc_phrase::Rrc_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrc_phrase",0,Cmpost_output::R_Rrc_phrase_,P,false,false){
+}
+
+Rlr1_k_phrase::Rlr1_k_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_k_phrase",0,Cmpost_output::R_Rlr1_k_phrase_,P,false,false){
+}
+
+void Rlr1_k_phrase::sr1(){
+ struct SF{
+ T_lr1_k_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_Lrk(fsm,sf->p1__);
+
+}
+
+Rterms_phrase::Rterms_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterms_phrase",0,Cmpost_output::R_Rterms_phrase_,P,false,false){
+}
+
+void Rterms_phrase::sr1(){
+ struct SF{
+ T_terminals_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_T(fsm,sf->p1__);
+
+}
+
+Rrule_phrase::Rrule_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_phrase",0,Cmpost_output::R_Rrule_phrase_,P,false,false){
+}
+
+void Rrule_phrase::sr1(){
+ struct SF{
+ T_rules_phrase* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->no_of_rules_ = sf->p1__->rules_alphabet()->size();
+ KCHARP mp_no_of_rules = "no_of_rules := %i;";
+ sprintf(fsm->big_buf_,mp_no_of_rules,fsm->no_of_rules_);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cmpost_output::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Cmpost_output::R_Rrule_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cmpost_output::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ fsm->rules_for_fs_prt_.push_back(fsm->rule_def_);
+ KCHARP rname = fsm->rule_def_->rule_name()->c_str();
+ ++fsm->w_fig_no_;
+ ++fsm->rule_no_;
+ fsm->subrule_no_ = 0;
+
+ KCHARP mp_rule_names =
+ "rule_names[%i].literal := \"%s\";"
+ "rule_names[%i].vname := \"%s\";";
+
+ sprintf(fsm->big_buf_,mp_rule_names,fsm->rule_no_,rname,fsm->rule_no_,rname);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+
+ T_subrules_phrase* sr_ph = fsm->rule_def_->subrules();
+ fsm->no_of_subrules_ = sr_ph->no_subrules();
+ KCHARP mp_rule_s_no_rhs = "rule_s_no_rhs[%i] := %i;";
+ sprintf(fsm->big_buf_,mp_rule_s_no_rhs
+ ,fsm->rule_no_,fsm->no_of_subrules_);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ fsm->no_subrules_per_rule_.push_back(fsm->no_of_subrules_);//[rule \#]
+
+ KCHARP rule_cweb =
+ "@*2 |@!%s| rule.\\fbreak\n";
+ sprintf(fsm->big_buf_,rule_cweb,rname);
+ fsm->ow_file_ << fsm->big_buf_;
+ if(fsm->rule_def_->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&fsm->ow_file_,fsm->rule_def_->cweb_marker());
+ }
+ KCHARP rule_cweb_diagram =
+ "\\fbreak\n"
+ "\\convertMPtoPDF{%s.%i}{1}{1}\n";
+ sprintf(fsm->big_buf_,rule_cweb_diagram
+ ,fsm->grammar_filename_prefix_.c_str()
+ ,fsm->w_fig_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ std::vector<T_subrule_def*>* srules = sr_ph->subrules();
+ std::vector<T_subrule_def*>::iterator i = srules->begin();
+ std::vector<T_subrule_def*>::iterator ie = srules->end();
+ for(;i!=ie;++i){
+ T_subrule_def* srd = *i;
+ fsm->MPOST_CWEB_gen_sr_elem_xrefs(fsm,srd->subrule_s_tree());
+ }
+ fsm->MPOST_CWEB_wrt_rule_s_lhs_sdc(fsm,fsm->rule_def_);
+
+
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Cmpost_output::R_Rsubrules_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Cmpost_output::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Cmpost_output::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ T_subrule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->w_fig_no_;
+ ++fsm->subrule_no_;
+ fsm->elem_no_ = 0;
+ fsm->subrule_def_ = sf->p1__;
+ int no_elements = fsm->subrule_def_->no_of_elems()-1;
+ if(no_elements == 0) no_elements = 1;// epsilon subrule
+ KCHARP mp_rule_s_subrule_no_elems = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,mp_rule_s_subrule_no_elems
+ ,fsm->rule_no_,fsm->subrule_no_,no_elements);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+
+ if(fsm->MPOST_CWEB_should_subrule_be_printed(fsm,fsm->subrule_def_)
+ == false) return;
+
+ KCHARP rname = fsm->rule_def_->rule_name()->c_str();
+
+ KCHARP subrule_cweb =
+ "@*3 |%s|'s subrule %i.\\fbreak\n";
+ if((fsm->rule_def_->rule_lhs() != 0)
+ ||
+ (fsm->no_of_subrules_ > 1)){
+ sprintf(fsm->big_buf_,subrule_cweb,rname,fsm->subrule_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ }
+ if(fsm->subrule_def_->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&fsm->ow_file_,fsm->subrule_def_->cweb_marker());
+ cout << "subrule's cweb marker for rule: " << rname << endl;
+ }else{
+ cout << "no subrule's cweb marker for rule: " << rname << endl;
+ }
+
+ KCHARP subrule_cweb_diagram =
+ "\\fbreak"
+ "\\convertMPtoPDF{%s.%i}{1}{1}\n";
+ if((fsm->rule_def_->rule_lhs() != 0)
+ ||
+ (fsm->no_of_subrules_ > 1)){
+ sprintf(fsm->big_buf_,subrule_cweb_diagram
+ ,fsm->grammar_filename_prefix_.c_str()
+ ,fsm->w_fig_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ }
+
+ fsm->MPOST_CWEB_woutput_sr_sdcode(fsm,fsm->subrule_def_);
+
+}
+
+Relements::Relements(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relements",0,Cmpost_output::R_Relements_,P,false,false){
+}
+
+Relement::Relement(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relement",0,Cmpost_output::R_Relement_,P,false,false){
+}
+
+void Relement::sr1(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(sf->p1__->t_in_stbl()->t_def()->t_name()->c_str());
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.clear();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+}
+
+void Relement::sr2(){
+ struct SF{
+ refered_rule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Box_solid");
+ std::string mp_elem_name(sf->p1__->Rule_in_stbl()->
+ r_def()->rule_name()->c_str());
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+}
+
+void Relement::sr3(){
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(" ");
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ }
+
+}
+
+void Relement::sr4(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_called_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP re_align_nos = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,re_align_nos
+ ,fsm->rule_no_,fsm->subrule_no_,3);
+ fsm->omp_file_ << fsm->big_buf_ << "% re-align cnt" << endl;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_dotted");
+ std::string mp_elem_name;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ mp_elem_name += "|||";
+ }else{
+ mp_elem_name += "|t|";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_obj_type.clear();
+ mp_obj_type += "Circle_dotted";
+ mp_elem_name.clear();
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_elem_name.clear();
+ mp_obj_type.clear();
+ mp_obj_type += "Box_dotted";
+ mp_elem_name += sf->p3__->ns()->identifier()->c_str();
+ mp_elem_name += "::";
+ mp_elem_name += sf->p3__->called_thread_name()->identifier()->c_str();
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+}
+
+void Relement::sr5(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_null_call_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP re_align_nos = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,re_align_nos,fsm->rule_no_,fsm->subrule_no_,3);
+ fsm->omp_file_ << fsm->big_buf_ << "% re-align cnt" << endl;
+
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_dotted");
+ std::string mp_elem_name;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ mp_elem_name += "|||";
+ }else{
+ mp_elem_name += "|t|";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ mp_elem_name.clear();
+
+ ++fsm->elem_no_;
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.clear();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_elem_name.clear();
+ mp_obj_type.clear();
+ mp_obj_type += "Box_dotted";
+ mp_elem_name += "NULL";
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+}
+
+void Relement::sr6(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ CAbs_lr1_sym* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(sf->p1__->t_in_stbl()->t_def()->t_name()->c_str());
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_obj_type.clear();
+ mp_obj_type += "Circle_solid";
+ mp_elem_name.clear();
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/mpost_output.fsc b/web/yacco2/compiler/grammars/mpost_output.fsc
new file mode 100644
index 0000000000..d359c2f1d5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_output.fsc
@@ -0,0 +1,20 @@
+/*
+ File: mpost_output.fsc
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+transitive n
+grammar-name "mpost_output"
+name-space "NS_mpost_output"
+thread-name "Cmpost_output"
+monolithic y
+file-name "mpost_output.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ T_grammar_phrase
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Output grammar rules railroad diagrams for mpost that cweb program uses."
diff --git a/web/yacco2/compiler/grammars/mpost_output.h b/web/yacco2/compiler/grammars/mpost_output.h
new file mode 100644
index 0000000000..479bfafc83
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_output.h
@@ -0,0 +1,307 @@
+/*
+ File: mpost_output.h
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#ifndef __mpost_output_h__
+#define __mpost_output_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "time.h"
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern void PRT_RULE_S_FIRST_SET(std::ofstream& Ofile,NS_yacco2_terminals::rule_def* Rule_def);
+extern int MPOST_CWEB_xlated_symbol(AST* Sym,char* Xlated_sym);
+extern STATES_type LR1_STATES;
+extern COMMON_LA_SETS_type COMMON_LA_SETS;
+#include "cweave_fsm_sdc.h"
+#include "cweave_lhs_sdc.h"
+#include "cweave_sdc.h"
+#include "cweave_T_sdc.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cmpost_output;
+namespace NS_mpost_output {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[21];
+};
+class Cmpost_output: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rmpost_output_ = 569//start_of_rule_list + 0
+ ,rhs1_Rmpost_output_ = 1
+ ,R_Rgrammar_phrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rgrammar_phrase_ = 2
+ ,R_Rks_epi_ = 571//start_of_rule_list + 4
+ ,rhs1_Rks_epi_ = 3
+ ,rhs2_Rks_epi_ = 4
+ ,R_Rks_ = 572//start_of_rule_list + 6
+ ,rhs1_Rks_ = 5
+ ,rhs2_Rks_ = 6
+ ,R_Rk_ = 573//start_of_rule_list + 8
+ ,rhs1_Rk_ = 7
+ ,R_Rfsm_phrase_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfsm_phrase_ = 8
+ ,R_Rparallel_phrase_ = 575//start_of_rule_list + 12
+ ,rhs1_Rparallel_phrase_ = 9
+ ,rhs2_Rparallel_phrase_ = 10
+ ,R_RT_enum_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_RT_enum_phrase_ = 11
+ ,R_Rerr_phrase_ = 577//start_of_rule_list + 16
+ ,rhs1_Rerr_phrase_ = 12
+ ,R_Rrc_phrase_ = 578//start_of_rule_list + 18
+ ,rhs1_Rrc_phrase_ = 13
+ ,R_Rlr1_k_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rlr1_k_phrase_ = 14
+ ,R_Rterms_phrase_ = 580//start_of_rule_list + 22
+ ,rhs1_Rterms_phrase_ = 15
+ ,R_Rrule_phrase_ = 581//start_of_rule_list + 24
+ ,rhs1_Rrule_phrase_ = 16
+ ,R_Rrules_ = 582//start_of_rule_list + 26
+ ,rhs1_Rrules_ = 17
+ ,rhs2_Rrules_ = 18
+ ,R_Rrule_ = 583//start_of_rule_list + 28
+ ,rhs1_Rrule_ = 19
+ ,R_Rrule_def_ = 584//start_of_rule_list + 30
+ ,rhs1_Rrule_def_ = 20
+ ,R_Rsubrules_ = 585//start_of_rule_list + 32
+ ,rhs1_Rsubrules_ = 21
+ ,rhs2_Rsubrules_ = 22
+ ,R_Rsubrule_ = 586//start_of_rule_list + 34
+ ,rhs1_Rsubrule_ = 23
+ ,R_Rsubrule_def_ = 587//start_of_rule_list + 36
+ ,rhs1_Rsubrule_def_ = 24
+ ,R_Relements_ = 588//start_of_rule_list + 38
+ ,rhs1_Relements_ = 25
+ ,rhs2_Relements_ = 26
+ ,R_Relement_ = 589//start_of_rule_list + 40
+ ,rhs1_Relement_ = 27
+ ,rhs2_Relement_ = 28
+ ,rhs3_Relement_ = 29
+ ,rhs4_Relement_ = 30
+ ,rhs5_Relement_ = 31
+ ,rhs6_Relement_ = 32
+ };
+ //no of la sets = 26
+ //no of states = 56
+ Cmpost_output();
+ ~Cmpost_output();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[33];
+
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ std::map <int , std::string> xlated_names_;
+ std::vector <int> no_subrules_per_rule_;
+ std::string gened_date_time_;
+ std::string mp_filename_;
+ std::ofstream omp_file_;
+ std::string w_filename_;
+ std::string w_index_filename_;
+ std::ofstream ow_file_;
+ std::ofstream ow_index_file_;
+ std::ofstream ow_t_file_;
+ std::ofstream ow_err_file_;
+ std::ofstream ow_lrk_file_;
+ std::string grammar_filename_prefix_;
+ std::string fq_filename_noext_;
+ int w_fig_no_;
+ int rule_no_;
+ int subrule_no_;
+ int elem_no_;
+ int no_of_rules_;
+ int no_of_subrules_;
+ std::string rule_name_;
+ std::string elem_name_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ std::string mp_dimension_;
+ static void MPOST_CWEB_gen_dimension_name(Cmpost_output* Fsm
+ ,std::string& Mp_obj_name,int Dimension);
+ static void MPOST_CWEB_calc_mp_obj_name(Cmpost_output* Fsm
+ ,std::string& Mp_obj_name,int Elem_no);
+ static void MPOST_CWEB_wrt_mp_rhs_elem(Cmpost_output* Fsm
+ ,std::string& Elem_name,std::string& Drw_how);
+ static void MPOST_CWEB_gen_sr_elem_xrefs(Cmpost_output* Fsm
+ ,AST* Subrule_tree);
+ static void MPOST_CWEB_woutput_sr_sdcode(Cmpost_output* Fsm
+ ,T_subrule_def* Subrule_def);
+ static void MPOST_CWEB_wrt_fsm(Cmpost_output* Fsm
+ ,T_fsm_phrase* Fsm_phrase);
+ static void MPOST_CWEB_wrt_rule_s_lhs_sdc(Cmpost_output* Fsm,
+ rule_def* Rule_def);
+ static bool MPOST_CWEB_should_subrule_be_printed(Cmpost_output* Fs
+ ,T_subrule_def* Subrule_def);
+ static void MPOST_CWEB_xref_refered_T(Cmpost_output* Fsm
+ ,refered_T* R_T);
+ static void MPOST_CWEB_xref_refered_rule(Cmpost_output* Fsm
+ ,refered_rule* R_rule);
+ static void MPOST_CWEB_LOAD_XLATE_CHRS(Cmpost_output* Fsm);
+ static void MPOST_CWEB_EMIT_PREFIX_CODE(Cmpost_output* Fsm);
+ static void MPOST_CWEB_wrt_T(Cmpost_output* Fsm
+ ,T_terminals_phrase* T_phrase);
+ static void MPOST_CWEB_wrt_Err(Cmpost_output* Fsm
+ ,T_error_symbols_phrase* Err_phrase);
+ static void MPOST_CWEB_wrt_Lrk(Cmpost_output* Fsm
+ ,T_lr1_k_phrase* Lrk_phrase);
+ std::list<NS_yacco2_terminals::rule_def*> rules_for_fs_prt_;
+ static void MPOST_CWEB_crt_rhs_sym_str(state_element* se,std::string* Xlated_str);
+
+ };
+struct Rmpost_output;
+struct Rgrammar_phrase;
+struct Rks_epi;
+struct Rks;
+struct Rk;
+struct Rfsm_phrase;
+struct Rparallel_phrase;
+struct RT_enum_phrase;
+struct Rerr_phrase;
+struct Rrc_phrase;
+struct Rlr1_k_phrase;
+struct Rterms_phrase;
+struct Rrule_phrase;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rsubrules;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Relements;
+struct Relement;
+struct Rmpost_output:public yacco2::CAbs_lr1_sym {
+ Rmpost_output(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rgrammar_phrase:public yacco2::CAbs_lr1_sym {
+ Rgrammar_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rks_epi:public yacco2::CAbs_lr1_sym {
+ Rks_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rks:public yacco2::CAbs_lr1_sym {
+ Rks(yacco2::Parser* P);
+ public:
+};
+
+struct Rk:public yacco2::CAbs_lr1_sym {
+ Rk(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rfsm_phrase:public yacco2::CAbs_lr1_sym {
+ Rfsm_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparallel_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct RT_enum_phrase:public yacco2::CAbs_lr1_sym {
+ RT_enum_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rerr_phrase:public yacco2::CAbs_lr1_sym {
+ Rerr_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrc_phrase:public yacco2::CAbs_lr1_sym {
+ Rrc_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rlr1_k_phrase:public yacco2::CAbs_lr1_sym {
+ Rlr1_k_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rterms_phrase:public yacco2::CAbs_lr1_sym {
+ Rterms_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrule_phrase:public yacco2::CAbs_lr1_sym {
+ Rrule_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Relements:public yacco2::CAbs_lr1_sym {
+ Relements(yacco2::Parser* P);
+ public:
+};
+
+struct Relement:public yacco2::CAbs_lr1_sym {
+ Relement(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/mpost_output.lex b/web/yacco2/compiler/grammars/mpost_output.lex
new file mode 100644
index 0000000000..0dab939444
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_output.lex
@@ -0,0 +1,856 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: mpost_output.lex
+Dates: 29 Nov. 2005
+Purpose: Create Pascal type railroad diagrams per grammar rule.
+ The output file is code for Mpost to generate the diagrams.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |mpost_output| Grammar.\fbreak
+Write out the |cweb|'s representation of the grammar's code
+and |mpost|'s railroad diagrams.
+These appropriate files have the grammar's name along
+with extension ``w'' for
+|cweave| to compile and extension ``mp'' for |mpost| to draw from.
+
+Enjoy the art work. All the grammar's vocabulary are cross referenced
+to accomodate the grammar writer.
+The railroad diagrams show left recursion and
+where the subrule has appropriate syntax directed code, it redraws the
+subrule with each element's position number below it.
+This aids in the writing of syntax directed code
+when individual parameters are referenced
+ by use of the |sf| stack frame structure.
+Each element within the stack frame has a naming convention of
+|p#__| where the number sign is the element's
+position within the subrule sentence relative to 1.\fbreak
+\fbreak
+Fodder to this grammar is provided by
+the tree container doing a prefix traverse.
+Why a prefix traverse?
+The parent node allowed me to declare
+the |mpost| variables before their use.\fbreak
+
+Caveat: Grammar c++ comments must observe |cweave|
+dictums: underscored items like variable names must
+be enclosed with ${\vert}$ and the number sign
+``\#'' must use its literal of backslash \#. Without
+these observances, |pdftex| will honk.
+
+
+@/
+fsm
+(fsm-id "mpost_output.lex",fsm-filename mpost_output,fsm-namespace NS_mpost_output
+,fsm-class Cmpost_output{
+ constructor
+ MPOST_CWEB_LOAD_XLATE_CHRS(this);
+ ***
+user-prefix-declaration
+#include "time.h"
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern void PRT_RULE_S_FIRST_SET(std::ofstream& Ofile,NS_yacco2_terminals::rule_def* Rule_def);
+extern int MPOST_CWEB_xlated_symbol(AST* Sym,char* Xlated_sym);
+extern STATES_type LR1_STATES;
+extern COMMON_LA_SETS_type COMMON_LA_SETS;
+#include "cweave_fsm_sdc.h"
+#include "cweave_lhs_sdc.h"
+#include "cweave_sdc.h"
+#include "cweave_T_sdc.h"
+ ***
+ user-declaration
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ std::map <int , std::string> xlated_names_;
+ std::vector <int> no_subrules_per_rule_;
+ std::string gened_date_time_;
+ std::string mp_filename_;
+ std::ofstream omp_file_;
+ std::string w_filename_;
+ std::string w_index_filename_;
+ std::ofstream ow_file_;
+ std::ofstream ow_index_file_;
+ std::ofstream ow_t_file_;
+ std::ofstream ow_err_file_;
+ std::ofstream ow_lrk_file_;
+ std::string grammar_filename_prefix_;
+ std::string fq_filename_noext_;
+ int w_fig_no_;
+ int rule_no_;
+ int subrule_no_;
+ int elem_no_;
+ int no_of_rules_;
+ int no_of_subrules_;
+ std::string rule_name_;
+ std::string elem_name_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ std::string mp_dimension_;
+ static void MPOST_CWEB_gen_dimension_name(Cmpost_output* Fsm
+ ,std::string& Mp_obj_name,int Dimension);
+ static void MPOST_CWEB_calc_mp_obj_name(Cmpost_output* Fsm
+ ,std::string& Mp_obj_name,int Elem_no);
+ static void MPOST_CWEB_wrt_mp_rhs_elem(Cmpost_output* Fsm
+ ,std::string& Elem_name,std::string& Drw_how);
+ static void MPOST_CWEB_gen_sr_elem_xrefs(Cmpost_output* Fsm
+ ,AST* Subrule_tree);
+ static void MPOST_CWEB_woutput_sr_sdcode(Cmpost_output* Fsm
+ ,T_subrule_def* Subrule_def);
+ static void MPOST_CWEB_wrt_fsm(Cmpost_output* Fsm
+ ,T_fsm_phrase* Fsm_phrase);
+ static void MPOST_CWEB_wrt_rule_s_lhs_sdc(Cmpost_output* Fsm,
+ rule_def* Rule_def);
+ static bool MPOST_CWEB_should_subrule_be_printed(Cmpost_output* Fs
+ ,T_subrule_def* Subrule_def);
+ static void MPOST_CWEB_xref_refered_T(Cmpost_output* Fsm
+ ,refered_T* R_T);
+ static void MPOST_CWEB_xref_refered_rule(Cmpost_output* Fsm
+ ,refered_rule* R_rule);
+ static void MPOST_CWEB_LOAD_XLATE_CHRS(Cmpost_output* Fsm);
+ static void MPOST_CWEB_EMIT_PREFIX_CODE(Cmpost_output* Fsm);
+ static void MPOST_CWEB_wrt_T(Cmpost_output* Fsm
+ ,T_terminals_phrase* T_phrase);
+ static void MPOST_CWEB_wrt_Err(Cmpost_output* Fsm
+ ,T_error_symbols_phrase* Err_phrase);
+ static void MPOST_CWEB_wrt_Lrk(Cmpost_output* Fsm
+ ,T_lr1_k_phrase* Lrk_phrase);
+ std::list<NS_yacco2_terminals::rule_def*> rules_for_fs_prt_;
+ static void MPOST_CWEB_crt_rhs_sym_str(state_element* se,std::string* Xlated_str);
+ ***
+/@
+Due to a MS 2005 Visual Studio defficiency,
+part of the ctor's initialization is included here
+instead of all being done by
+|MPOST_CWEB_EMIT_PREFIX_CODE|.
+The reason is noted in the documentation of |o2externs|.
+@/
+ op
+no_subrules_per_rule_.push_back(0);
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+gened_date_time_+= string(cTime);
+int n= gened_date_time_.find('\n');
+gened_date_time_[n]= ' ';
+
+mp_dimension_+= " abcdefghijklmnopqrstuvwxyz";
+w_fig_no_= 0;
+rule_def_= 0;
+subrule_def_= 0;
+rule_no_= 0;
+subrule_no_= 0;
+elem_no_= 0;
+no_of_rules_= 0;
+no_of_subrules_= 0;
+mp_filename_+= grammar_filename_prefix_.c_str();
+mp_filename_+= ".mp";
+omp_file_.open(mp_filename_.c_str(),ios_base::out|ios::trunc);
+if(!omp_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(mp_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+w_filename_+= grammar_filename_prefix_.c_str();
+w_filename_+= ".w";
+ow_file_.open(w_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+w_index_filename_+= grammar_filename_prefix_.c_str();
+w_index_filename_+= "_idx.w";
+ow_index_file_.open(w_index_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_index_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_index_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+
+KCHARP t_file = "T.w";
+ow_t_file_.open(t_file,ios_base::out|ios::trunc);
+if(!ow_t_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(t_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+KCHARP err_file = "Err.w";
+ow_err_file_.open(err_file,ios_base::out|ios::trunc);
+if(!ow_err_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(err_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+KCHARP lrk_file = "Lrk.w";
+ow_lrk_file_.open(lrk_file,ios_base::out|ios::trunc);
+if(!ow_lrk_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(lrk_file);
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+ MPOST_CWEB_EMIT_PREFIX_CODE(this);
+ ***
+}
+,fsm-version "1.0",fsm-date "29 Nov. 2005",fsm-debug "false"
+,fsm-comments "Output grammar rules railroad diagrams for mpost that cweb program uses.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rmpost_output
+
+/@
+Note how i use the sentence recognition to
+complete |mpost| figures.
+The individual figures are defined before their execution.
+@/
+(){
+ -> Rgrammar_phrase
+ Rks_epi
+ Rfsm_phrase
+ Rks_epi
+ Rparallel_phrase
+ Rks_epi
+ RT_enum_phrase
+ Rks_epi
+ Rlr1_k_phrase
+ Rks_epi
+ Rrc_phrase
+ Rks_epi
+ Rterms_phrase
+ Rks_epi
+ Rerr_phrase
+ Rks_epi
+ Rrule_phrase
+ Rrules
+ Rks_epi
+ eog {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP mp_init_vars = "init_variables;";
+ fsm->omp_file_ << mp_init_vars << endl;
+ KCHARP mp_figure =
+ "beginfig(%i);\n"
+ " drw_rule(%i);\n"
+ "endfig;";
+ KCHARP sr_figure =
+ "beginfig(%i);\n"
+ " drw_rule_a_rhs(%i,%i);\n"
+ "endfig;";
+
+ int rule_no = 1;
+ int fig_no(0);
+ for(;rule_no <= fsm->no_of_rules_;++rule_no){
+ ++fig_no;
+ sprintf(fsm->big_buf_,mp_figure,fig_no,rule_no);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ int no_srs = fsm->no_subrules_per_rule_[rule_no];
+ int sr_no(1);
+ for(;sr_no <= no_srs;++sr_no){
+ ++fig_no;
+ sprintf(fsm->big_buf_,sr_figure,fig_no,rule_no,sr_no);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ }
+ }
+
+ KCHARP mp_end = "end;";
+ fsm->omp_file_ << mp_end << endl;
+ fsm->omp_file_.close();
+ KCHARP w_fsc_file =
+ "@** First Set Language for \\Olinker.\\fbreak\n"
+ "\\openin 1 = \"%s.fsc\"\n" // macro file open
+ "\\ifeof 1 true\n" // test the result
+ " \\closein 1\n"
+ "\\else\n"
+ " \\closein 1\n"
+ " \\listing{\"%s.fsc\"}"
+ "\\fi";
+ sprintf(fsm->big_buf_,w_fsc_file,fsm->fq_filename_noext_.c_str()
+ ,fsm->fq_filename_noext_.c_str());
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+
+ KCHARP w_lr1_states =
+ "@** Lr1 State Network.\\fbreak\n"
+ "\\statecolumnspace %s";
+ sprintf(fsm->big_buf_,w_lr1_states," ");
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ KCHARP w_stateno = // stateno, vectored into symbol, conflict
+ "\\stateno{%i} {%s} {%s}\n"
+ "\\halign{\n"
+ "\\span\\statetemplate\n"
+ "\\statetitle";
+ char vectored_into[Max_cweb_item_size];
+ char rule_name[Max_cweb_item_size];
+ char subrule_sym[Max_cweb_item_size];
+ char cur_sym[Max_cweb_item_size];
+ char nxtsym_1[Max_cweb_item_size];
+ char nxtsym_2[Max_cweb_item_size];
+ char state_type[Max_cweb_item_size];
+ char la_set_no[Max_cweb_item_size];
+ string w_possible_ar_code;
+
+ KCHARP la_set_no_template = "%i";
+ KCHARP state_type_template = "%s";
+ KCHARP three_symbols_string_template =
+ "%s %s %s"; // 3 symbols: current and 2 la
+ KCHARP w_stateno_subrule =
+ "{%s}&\n" // closure or transitive
+ "{%s}&\n" // rule
+ "{%i\\hss}&\n" // rule no
+ "{%i\\hss}&\n" // subrule no
+ "{%i\\hss}&\n" // element pos
+ "{%s}&\n" // current symbol
+ "{%i\\hss}&\n" // born state no
+ "{%i\\hss}&\n" // goto state no
+ "{%i\\hss}&\n" // reduced state no
+ "{%s\\hss}\\cr"; // la set if reduced
+ int fnd_reduced_stateno(0);
+
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){// walk the states
+ vectored_into[0] = (char)0;
+ w_possible_ar_code.clear();
+ state_type[0] = (char)0;
+ state* cur_state = *si;
+
+ if(cur_state->state_no_ != 1){// state 1 vector into is empty
+ XLATE_SYMBOLS_FOR_cweave
+ (cur_state->entry_symbol_literal(),vectored_into);
+ }
+ switch (cur_state->state_type_){
+ case 0:{//shift only
+ sprintf(state_type,state_type_template,"\\Shiftonly");
+ break;
+ }
+ case 1:{
+ sprintf(state_type,state_type_template,"\\Reduceonly");
+ break;
+ }
+ case 2:{
+ sprintf(state_type,state_type_template,"\\ShiftReduce");
+ break;
+ }
+ case 3:{
+ sprintf(state_type,state_type_template,"\\MultipleReduces");
+ break;
+ }
+ case 4:{
+ sprintf(state_type,state_type_template,"\\ShiftandMultipleReduces");
+ break;
+ }
+ }
+ w_possible_ar_code.append(vectored_into);
+ if (cur_state->vectored_into_by_elem_ == LR1_PARALLEL_OPERATOR){
+ // add arbitration code? to |vectored_into| string
+ if (cur_state->arbitrator_name_ != 0){
+ w_possible_ar_code += "\\ arbitration-code: \\ |";
+ w_possible_ar_code += cur_state->arbitrator_name_->c_str();
+ w_possible_ar_code += "|";
+ }else{
+ w_possible_ar_code += "\\ arbitration-code: \\ \\epsilon";
+ }
+ }
+ sprintf(fsm->big_buf_
+ ,w_stateno
+ ,cur_state->state_no_
+ ,w_possible_ar_code.c_str()//|vectored_into|
+ ,state_type);
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ string rhs_syms_str;
+ for(;svi!=svie;++svi){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ rhs_syms_str.clear();
+ state_element* se = *seli;
+ rule_def* rd = se->subrule_def_->its_rule_def();
+ T_subrule_def* srd = se->subrule_def_;
+ rule_name[0] = (char)0;
+ subrule_sym[0] = (char)0;
+ cur_sym[0] = (char)0;
+ la_set_no[0] = (char)0;
+
+ XLATE_SYMBOLS_FOR_cweave(rd->rule_name()->c_str(),rule_name);
+ int elem_pos(0);
+ if(se->previous_state_ == 0) elem_pos = 1;
+ elem_pos = MPOST_CWEB_xlated_symbol(se->sr_element_,cur_sym);
+ if(se->goto_state_==0){// reducing subrule
+ sprintf(la_set_no,la_set_no_template,se->common_la_set_idx_+1);
+ }else{// no la set
+ }
+
+ if (se->reduced_state_ != 0) {
+ fnd_reduced_stateno = se->reduced_state_->state_no_;
+ }
+ else{ // find from merged into
+ fnd_reduced_stateno=-1;
+ if (se->next_state_element_->reduced_state_ != 0){
+ fnd_reduced_stateno = se->next_state_element_->reduced_state_->state_no_;
+ }
+ }
+ fsm->MPOST_CWEB_crt_rhs_sym_str(se,&rhs_syms_str);
+ sprintf(fsm->big_buf_
+ ,w_stateno_subrule
+ ,(elem_pos == 1)?"c":"t"
+ ,rule_name
+ ,rd->rule_no()
+ ,srd->subrule_no_of_rule()
+ ,elem_pos
+ ,rhs_syms_str.c_str()
+ ,se->closure_state_->state_no_
+ ,(se->goto_state_ !=0)?se->goto_state_->state_no_:0
+ ,fnd_reduced_stateno
+ ,la_set_no
+ );
+ fsm->ow_file_ << fsm->big_buf_ << endl;
+ }
+ }
+ fsm->ow_file_ << "}" << endl;
+ }
+ KCHARP w_end = "@** Index.";
+ fsm->ow_file_ << w_end << endl;
+ fsm->ow_file_.close();
+ ***
+ }
+}
+
+Rgrammar_phrase (){
+ -> "grammar-phrase"
+}
+
+Rks_epi
+/@
+Due to technical problems with the |convertMPtoPDF| macro,
+the epsilon subrule is drawn with a dot.
+@/
+(){
+ -> Rks
+ ->
+}
+
+Rks (){
+ -> Rks Rk
+ -> Rk
+}
+
+Rk (){
+ -> "cweb-marker" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ WRT_CWEB_MARKER(&fsm->ow_file_,sf->p1__->ast());
+ ***
+ }
+}
+
+Rfsm_phrase (){
+ -> "fsm-phrase" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_fsm(fsm,sf->p1__);
+ ***
+ }
+}
+
+Rparallel_phrase (){
+ -> "parallel-parser-phrase"
+ -> |.|
+}
+
+RT_enum_phrase (){
+ -> "T-enum-phrase"
+}
+
+Rerr_phrase (){
+ -> "error-symbols-phrase" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_Err(fsm,sf->p1__);
+ ***
+ }
+}
+
+Rrc_phrase (){
+ -> "rc-phrase"
+}
+
+Rlr1_k_phrase (){
+ -> "lr1-k-phrase" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_Lrk(fsm,sf->p1__);
+ ***
+ }
+}
+
+Rterms_phrase (){
+ -> "terminals-phrase" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->MPOST_CWEB_wrt_T(fsm,sf->p1__);
+ ***
+ }
+}
+
+Rrule_phrase
+/@
+Define the number of rules for |mpost|.
+@/
+(){
+ -> "rules-phrase" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->no_of_rules_ = sf->p1__->rules_alphabet()->size();
+ KCHARP mp_no_of_rules = "no_of_rules := %i;";
+ sprintf(fsm->big_buf_,mp_no_of_rules,fsm->no_of_rules_);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ ***
+ }
+}
+
+Rrules (){
+ -> Rks_epi Rrule
+ -> Rrules Rks_epi Rrule
+}
+
+Rrule (){
+ -> Rrule_def Rsubrules
+}
+
+Rrule_def
+/@
+Define rule for |mpost| and |cweb|.
+To help the grammar writer, walk the rule's subrules to generate
+a |cweb| cross-reference per subrule element.
+Originally this was done at the subrule level
+to be specific to the subrule entry instead of at the overall
+rule level.
+This meant that each subrule had to be redrawn with a |cweb|
+directive
+even when there was no syntax directed code present.
+Just ugly is my take so i follow Occam's dictum.
+@/
+(){
+ -> "rule-def" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ fsm->rules_for_fs_prt_.push_back(fsm->rule_def_);
+ KCHARP rname = fsm->rule_def_->rule_name()->c_str();
+ ++fsm->w_fig_no_;
+ ++fsm->rule_no_;
+ fsm->subrule_no_ = 0;
+
+ KCHARP mp_rule_names =
+ "rule_names[%i].literal := \"%s\";"
+ "rule_names[%i].vname := \"%s\";";
+
+ sprintf(fsm->big_buf_,mp_rule_names,fsm->rule_no_,rname,fsm->rule_no_,rname);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+
+ T_subrules_phrase* sr_ph = fsm->rule_def_->subrules();
+ fsm->no_of_subrules_ = sr_ph->no_subrules();
+ KCHARP mp_rule_s_no_rhs = "rule_s_no_rhs[%i] := %i;";
+ sprintf(fsm->big_buf_,mp_rule_s_no_rhs
+ ,fsm->rule_no_,fsm->no_of_subrules_);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+ fsm->no_subrules_per_rule_.push_back(fsm->no_of_subrules_);//[rule \#]
+
+ KCHARP rule_cweb =
+ "@*2 |@!%s| rule.\\fbreak\n";
+ sprintf(fsm->big_buf_,rule_cweb,rname);
+ fsm->ow_file_ << fsm->big_buf_;
+ if(fsm->rule_def_->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&fsm->ow_file_,fsm->rule_def_->cweb_marker());
+ }
+ KCHARP rule_cweb_diagram =
+ "\\fbreak\n"
+ "\\convertMPtoPDF{%s.%i}{1}{1}\n";
+ sprintf(fsm->big_buf_,rule_cweb_diagram
+ ,fsm->grammar_filename_prefix_.c_str()
+ ,fsm->w_fig_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ std::vector<T_subrule_def*>* srules = sr_ph->subrules();
+ std::vector<T_subrule_def*>::iterator i = srules->begin();
+ std::vector<T_subrule_def*>::iterator ie = srules->end();
+ for(;i!=ie;++i){
+ T_subrule_def* srd = *i;
+ fsm->MPOST_CWEB_gen_sr_elem_xrefs(fsm,srd->subrule_s_tree());
+ }
+ fsm->MPOST_CWEB_wrt_rule_s_lhs_sdc(fsm,fsm->rule_def_);
+
+ ***
+ }
+}
+
+Rsubrules (){
+ -> Rsubrule
+ -> Rsubrules Rsubrule
+}
+
+Rsubrule (){
+ -> Rsubrule_def Relements
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ /@
+ The |eosubrule| T has no meaning in the drawn subrule.
+ It is just a specific end-of-subrule indicator.
+ So it is removed from the rhs element count of the subrule
+ for |mpost| processing so that it does not get drawn.
+ The balance of the logic relates to |cweb|'s document:
+ comments about the subrule and
+ the appropriate |mpost| rendering.
+
+ One subtlety is the forced drawing of a single
+ subrule that also has a rule's lhs syntax directed code.
+ Normally i save the redrawing of the subrule as the
+ forest and the tree is the same. But
+ having the rule syntax code requires to have
+ the subrule directive. Without it there are 2
+ code directives back-to-back that honks.
+@/
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->w_fig_no_;
+ ++fsm->subrule_no_;
+ fsm->elem_no_ = 0;
+ fsm->subrule_def_ = sf->p1__;
+ int no_elements = fsm->subrule_def_->no_of_elems()-1;
+ if(no_elements == 0) no_elements = 1;// epsilon subrule
+ KCHARP mp_rule_s_subrule_no_elems = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,mp_rule_s_subrule_no_elems
+ ,fsm->rule_no_,fsm->subrule_no_,no_elements);
+ fsm->omp_file_ << fsm->big_buf_ << endl;
+
+ if(fsm->MPOST_CWEB_should_subrule_be_printed(fsm,fsm->subrule_def_)
+ == false) return;
+
+ KCHARP rname = fsm->rule_def_->rule_name()->c_str();
+
+ KCHARP subrule_cweb =
+ "@*3 |%s|'s subrule %i.\\fbreak\n";
+ if((fsm->rule_def_->rule_lhs() != 0)
+ ||
+ (fsm->no_of_subrules_ > 1)){
+ sprintf(fsm->big_buf_,subrule_cweb,rname,fsm->subrule_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ }
+ if(fsm->subrule_def_->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&fsm->ow_file_,fsm->subrule_def_->cweb_marker());
+ cout << "subrule's cweb marker for rule: " << rname << endl;
+ }else{
+ cout << "no subrule's cweb marker for rule: " << rname << endl;
+ }
+
+ KCHARP subrule_cweb_diagram =
+ "\\fbreak"
+ "\\convertMPtoPDF{%s.%i}{1}{1}\n";
+ if((fsm->rule_def_->rule_lhs() != 0)
+ ||
+ (fsm->no_of_subrules_ > 1)){
+ sprintf(fsm->big_buf_,subrule_cweb_diagram
+ ,fsm->grammar_filename_prefix_.c_str()
+ ,fsm->w_fig_no_);
+ fsm->ow_file_ << fsm->big_buf_;
+ }
+
+ fsm->MPOST_CWEB_woutput_sr_sdcode(fsm,fsm->subrule_def_);
+ ***
+ }
+}
+
+Relements (){
+ -> Relement
+ -> Relements Relement
+}
+
+Relement
+/@
+Use of \invisibleshift to make grammar lr(1).
+@/
+(){
+ -> "refered-T" |.| {
+/@
+Why is there a test for ${\backslash}$" within the T?
+Glad u asked as |mpost| has problems dealing with
+this legitimate escape sequence and the double
+quote sequence within the c string.
+So this was my 1st attempt to silence the honk.
+Unfortunately the char(34) |mpost| operator does
+not convert the 34 into
+the " character.
+For the moment i will leave this as is. U will see other attempts
+like this throughout the grammar.
+@/
+
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(sf->p1__->t_in_stbl()->t_def()->t_name()->c_str());
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.clear();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ ***
+ }
+ -> "refered-rule" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Box_solid");
+ std::string mp_elem_name(sf->p1__->Rule_in_stbl()->
+ r_def()->rule_name()->c_str());
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ ***
+ }
+ -> "eosubrule" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(" ");
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ }
+ ***
+ }
+ -> "refered-T" "refered-T" "called thread eosubrule" {
+ /@
+ Why is there a re-aligning on the number of
+ |rule_s_subrule_no_elems|?
+ Two reasons: Due to the tree walk being
+ top down, initially the number of items are determined
+ by the |subrule-def| T before processing the actual subrule sentence.
+ Due to the calling of threads, this number gets shrunk as i
+ combine the 3 parts of the called thread into 1 item.
+ Though it looks like a mistake in the emitted |mpost| code,
+ it's a slight inefficiency to manage a nice picture.\fbreak
+ \fbreak
+ This comment hold for the other version of thread call below.
+ @/
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP re_align_nos = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,re_align_nos
+ ,fsm->rule_no_,fsm->subrule_no_,3);
+ fsm->omp_file_ << fsm->big_buf_ << "% re-align cnt" << endl;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_dotted");
+ std::string mp_elem_name;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ mp_elem_name += "|||";
+ }else{
+ mp_elem_name += "|t|";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_obj_type.clear();
+ mp_obj_type += "Circle_dotted";
+ mp_elem_name.clear();
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_elem_name.clear();
+ mp_obj_type.clear();
+ mp_obj_type += "Box_dotted";
+ mp_elem_name += sf->p3__->ns()->identifier()->c_str();
+ mp_elem_name += "::";
+ mp_elem_name += sf->p3__->called_thread_name()->identifier()->c_str();
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ ***
+ }
+ -> "refered-T" "refered-T" "null call thread eosubrule" {
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ KCHARP re_align_nos = "rule_s_subrule_no_elems[%i][%i]:= %i;";
+ sprintf(fsm->big_buf_,re_align_nos,fsm->rule_no_,fsm->subrule_no_,3);
+ fsm->omp_file_ << fsm->big_buf_ << "% re-align cnt" << endl;
+
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_dotted");
+ std::string mp_elem_name;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ mp_elem_name += "|||";
+ }else{
+ mp_elem_name += "|t|";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ mp_elem_name.clear();
+
+ ++fsm->elem_no_;
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.clear();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_elem_name.clear();
+ mp_obj_type.clear();
+ mp_obj_type += "Box_dotted";
+ mp_elem_name += "NULL";
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ ***
+ }
+ -> "refered-T" "refered-T" |.|{
+ op
+ Cmpost_output* fsm = (Cmpost_output*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ std::string mp_obj_type("Circle_solid");
+ std::string mp_elem_name(sf->p1__->t_in_stbl()->t_def()->t_name()->c_str());
+ string::size_type x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+
+ ++fsm->elem_no_;
+ mp_obj_type.clear();
+ mp_obj_type += "Circle_solid";
+ mp_elem_name.clear();
+ mp_elem_name += sf->p2__->t_in_stbl()->t_def()->t_name()->c_str();
+ x = mp_elem_name.find("\\\"");
+ if(x != string::npos){
+ mp_elem_name.erase();
+ mp_elem_name+= "char(34)";
+ }
+ fsm->MPOST_CWEB_wrt_mp_rhs_elem(fsm,mp_elem_name,mp_obj_type);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/mpost_outputsym.cpp b/web/yacco2/compiler/grammars/mpost_outputsym.cpp
new file mode 100644
index 0000000000..aedc21ed5c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_outputsym.cpp
@@ -0,0 +1,490 @@
+/*
+ File: mpost_outputsym.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "mpost_output.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_mpost_output;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cmpost_output::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rmpost_output_:{
+ Rmpost_output* sym;
+ if(re->rule_ == 0){
+ sym = new Rmpost_output(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmpost_output*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 20;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rgrammar_phrase_:{
+ Rgrammar_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rgrammar_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rgrammar_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rks_epi_:{
+ Rks_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rks_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rks_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rks_epi_:{
+ Rks_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rks_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rks_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rks_:{
+ Rks* sym;
+ if(re->rule_ == 0){
+ sym = new Rks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rks_:{
+ Rks* sym;
+ if(re->rule_ == 0){
+ sym = new Rks(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rks*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rk_:{
+ Rk* sym;
+ if(re->rule_ == 0){
+ sym = new Rk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rfsm_phrase_:{
+ Rfsm_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfsm_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfsm_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rparallel_phrase_:{
+ Rparallel_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rparallel_phrase_:{
+ Rparallel_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RT_enum_phrase_:{
+ RT_enum_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new RT_enum_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_enum_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rerr_phrase_:{
+ Rerr_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rerr_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerr_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrc_phrase_:{
+ Rrc_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrc_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrc_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlr1_k_phrase_:{
+ Rlr1_k_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_k_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_k_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rterms_phrase_:{
+ Rterms_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterms_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterms_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrule_phrase_:{
+ Rrule_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr6();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/mpost_outputtbl.cpp b/web/yacco2/compiler/grammars/mpost_outputtbl.cpp
new file mode 100644
index 0000000000..7fe3a3cabc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/mpost_outputtbl.cpp
@@ -0,0 +1,1266 @@
+/*
+ File: mpost_outputtbl.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "mpost_output.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_mpost_output;// grammar's ns
+// first set terminals
+// T_fsm_phrase
+// T_cweb_marker
+yacco2::UCHAR LA1_Cmpost_output[] ={
+2
+,41,1
+,46,64
+};
+// LR1_invisible_shift_operator
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// rule_def
+// T_rules_phrase
+// LR1_eog
+yacco2::UCHAR LA2_Cmpost_output[] ={
+3
+,0,34
+,41,199
+,42,51
+};
+// LR1_invisible_shift_operator
+// T_parallel_parser_phrase
+yacco2::UCHAR LA3_Cmpost_output[] ={
+2
+,0,32
+,41,2
+};
+// T_enum_phrase
+yacco2::UCHAR LA4_Cmpost_output[] ={
+1
+,41,4
+};
+// T_lr1_k_phrase
+yacco2::UCHAR LA5_Cmpost_output[] ={
+1
+,42,1
+};
+// T_rc_phrase
+yacco2::UCHAR LA6_Cmpost_output[] ={
+1
+,42,2
+};
+// T_terminals_phrase
+yacco2::UCHAR LA7_Cmpost_output[] ={
+1
+,41,64
+};
+// T_error_symbols_phrase
+yacco2::UCHAR LA8_Cmpost_output[] ={
+1
+,41,128
+};
+// T_rules_phrase
+yacco2::UCHAR LA9_Cmpost_output[] ={
+1
+,42,32
+};
+// rule_def
+yacco2::UCHAR LA10_Cmpost_output[] ={
+1
+,42,16
+};
+// rule_def
+// LR1_eog
+yacco2::UCHAR LA11_Cmpost_output[] ={
+2
+,0,2
+,42,16
+};
+// LR1_eolr
+yacco2::UCHAR LA12_Cmpost_output[] ={
+1
+,0,4
+};
+// T_subrule_def
+yacco2::UCHAR LA13_Cmpost_output[] ={
+1
+,42,64
+};
+// rule_def
+// T_cweb_marker
+// LR1_eog
+yacco2::UCHAR LA14_Cmpost_output[] ={
+3
+,0,2
+,42,16
+,46,64
+};
+// refered_T
+// refered_rule
+// T_eosubrule
+yacco2::UCHAR LA15_Cmpost_output[] ={
+2
+,43,10
+,46,2
+};
+// rule_def
+// T_subrule_def
+// T_cweb_marker
+// LR1_eog
+yacco2::UCHAR LA16_Cmpost_output[] ={
+3
+,0,2
+,42,80
+,46,64
+};
+// rule_def
+// T_subrule_def
+// refered_T
+// refered_rule
+// T_eosubrule
+// T_cweb_marker
+// LR1_eog
+yacco2::UCHAR LA17_Cmpost_output[] ={
+4
+,0,2
+,42,80
+,43,10
+,46,66
+};
+// LR1_invisible_shift_operator
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// rule_def
+// T_rules_phrase
+// T_cweb_marker
+// LR1_eog
+yacco2::UCHAR LA18_Cmpost_output[] ={
+4
+,0,34
+,41,199
+,42,51
+,46,64
+};
+// LR1_invisible_shift_operator
+// T_parallel_parser_phrase
+// T_cweb_marker
+yacco2::UCHAR LA19_Cmpost_output[] ={
+3
+,0,32
+,41,2
+,46,64
+};
+// T_enum_phrase
+// T_cweb_marker
+yacco2::UCHAR LA20_Cmpost_output[] ={
+2
+,41,4
+,46,64
+};
+// T_lr1_k_phrase
+// T_cweb_marker
+yacco2::UCHAR LA21_Cmpost_output[] ={
+2
+,42,1
+,46,64
+};
+// T_rc_phrase
+// T_cweb_marker
+yacco2::UCHAR LA22_Cmpost_output[] ={
+2
+,42,2
+,46,64
+};
+// T_terminals_phrase
+// T_cweb_marker
+yacco2::UCHAR LA23_Cmpost_output[] ={
+2
+,41,64
+,46,64
+};
+// T_error_symbols_phrase
+// T_cweb_marker
+yacco2::UCHAR LA24_Cmpost_output[] ={
+2
+,41,128
+,46,64
+};
+// T_rules_phrase
+// T_cweb_marker
+yacco2::UCHAR LA25_Cmpost_output[] ={
+2
+,42,32
+,46,64
+};
+// rule_def
+// T_cweb_marker
+yacco2::UCHAR LA26_Cmpost_output[] ={
+2
+,42,16
+,46,64
+};
+extern yacco2::State S1_Cmpost_output;
+extern yacco2::State S2_Cmpost_output;
+extern yacco2::State S3_Cmpost_output;
+extern yacco2::State S4_Cmpost_output;
+extern yacco2::State S5_Cmpost_output;
+extern yacco2::State S6_Cmpost_output;
+extern yacco2::State S7_Cmpost_output;
+extern yacco2::State S8_Cmpost_output;
+extern yacco2::State S9_Cmpost_output;
+extern yacco2::State S10_Cmpost_output;
+extern yacco2::State S11_Cmpost_output;
+extern yacco2::State S12_Cmpost_output;
+extern yacco2::State S13_Cmpost_output;
+extern yacco2::State S14_Cmpost_output;
+extern yacco2::State S15_Cmpost_output;
+extern yacco2::State S16_Cmpost_output;
+extern yacco2::State S17_Cmpost_output;
+extern yacco2::State S18_Cmpost_output;
+extern yacco2::State S19_Cmpost_output;
+extern yacco2::State S20_Cmpost_output;
+extern yacco2::State S21_Cmpost_output;
+extern yacco2::State S22_Cmpost_output;
+extern yacco2::State S23_Cmpost_output;
+extern yacco2::State S24_Cmpost_output;
+extern yacco2::State S25_Cmpost_output;
+extern yacco2::State S26_Cmpost_output;
+extern yacco2::State S27_Cmpost_output;
+extern yacco2::State S28_Cmpost_output;
+extern yacco2::State S29_Cmpost_output;
+extern yacco2::State S30_Cmpost_output;
+extern yacco2::State S31_Cmpost_output;
+extern yacco2::State S32_Cmpost_output;
+extern yacco2::State S33_Cmpost_output;
+extern yacco2::State S34_Cmpost_output;
+extern yacco2::State S35_Cmpost_output;
+extern yacco2::State S36_Cmpost_output;
+extern yacco2::State S37_Cmpost_output;
+extern yacco2::State S38_Cmpost_output;
+extern yacco2::State S39_Cmpost_output;
+extern yacco2::State S40_Cmpost_output;
+extern yacco2::State S41_Cmpost_output;
+extern yacco2::State S42_Cmpost_output;
+extern yacco2::State S43_Cmpost_output;
+extern yacco2::State S44_Cmpost_output;
+extern yacco2::State S45_Cmpost_output;
+extern yacco2::State S46_Cmpost_output;
+extern yacco2::State S47_Cmpost_output;
+extern yacco2::State S48_Cmpost_output;
+extern yacco2::State S49_Cmpost_output;
+extern yacco2::State S50_Cmpost_output;
+extern yacco2::State S51_Cmpost_output;
+extern yacco2::State S52_Cmpost_output;
+extern yacco2::State S53_Cmpost_output;
+extern yacco2::State S54_Cmpost_output;
+extern yacco2::State S55_Cmpost_output;
+extern yacco2::State S56_Cmpost_output;
+struct S1std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cmpost_output S1st_Cmpost_output = {
+ 3
+ ,
+ {// start of table
+ {373,(State*)&S2_Cmpost_output} // shift sym: T_grammar_phrase
+ ,{569,(State*)&S1_Cmpost_output} // accept sym: Rmpost_output
+ ,{570,(State*)&S3_Cmpost_output} // shift sym: Rgrammar_phrase
+ }// end of shift table
+};
+yacco2::State S1_Cmpost_output = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cmpost_output,0,0,0,0};
+struct S2rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cmpost_output S2rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cmpost_output,Cmpost_output::rhs1_Rgrammar_phrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Cmpost_output = //State's vectored into symbol: "grammar-phrase"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cmpost_output,0,0,0};
+struct S3std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Cmpost_output S3st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S4_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S3rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cmpost_output S3rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S3_Cmpost_output = //State's vectored into symbol: "Rgrammar_phrase"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cmpost_output,(Reduce_tbl*)&S3rt_Cmpost_output,0,0,0};
+struct S4std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S4std_Cmpost_output S4st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {328,(State*)&S46_Cmpost_output} // shift sym: T_fsm_phrase
+ ,{574,(State*)&S5_Cmpost_output} // shift sym: Rfsm_phrase
+ }// end of shift table
+};
+yacco2::State S4_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cmpost_output,0,0,0,0};
+struct S5std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S5std_Cmpost_output S5st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S6_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S5rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cmpost_output S5rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S5_Cmpost_output = //State's vectored into symbol: "Rfsm_phrase"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cmpost_output,(Reduce_tbl*)&S5rt_Cmpost_output,0,0,0};
+struct S6std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cmpost_output S6st_Cmpost_output = {
+ 3
+ ,
+ {// start of table
+ {5,(State*)&S47_Cmpost_output} // shift sym: LR1_invisible_shift_operator
+ ,{329,(State*)&S48_Cmpost_output} // shift sym: T_parallel_parser_phrase
+ ,{575,(State*)&S7_Cmpost_output} // shift sym: Rparallel_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S6ise_Cmpost_output = {5,(State*)&S47_Cmpost_output};
+yacco2::State S6_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{6
+,0,0,(Shift_entry*)&S6ise_Cmpost_output
+,0,(Shift_tbl*)&S6st_Cmpost_output,0,0,0,0};
+struct S7std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S7std_Cmpost_output S7st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S8_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S7rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cmpost_output S7rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S7_Cmpost_output = //State's vectored into symbol: "Rparallel_phrase"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cmpost_output,(Reduce_tbl*)&S7rt_Cmpost_output,0,0,0};
+struct S8std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S8std_Cmpost_output S8st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {330,(State*)&S49_Cmpost_output} // shift sym: T_enum_phrase
+ ,{576,(State*)&S9_Cmpost_output} // shift sym: RT_enum_phrase
+ }// end of shift table
+};
+yacco2::State S8_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cmpost_output,0,0,0,0};
+struct S9std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S9std_Cmpost_output S9st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S10_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S9rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cmpost_output S9rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S9_Cmpost_output = //State's vectored into symbol: "RT_enum_phrase"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cmpost_output,(Reduce_tbl*)&S9rt_Cmpost_output,0,0,0};
+struct S10std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_Cmpost_output S10st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {336,(State*)&S50_Cmpost_output} // shift sym: T_lr1_k_phrase
+ ,{579,(State*)&S11_Cmpost_output} // shift sym: Rlr1_k_phrase
+ }// end of shift table
+};
+yacco2::State S10_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cmpost_output,0,0,0,0};
+struct S11std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S11std_Cmpost_output S11st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S12_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S11rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cmpost_output S11rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S11_Cmpost_output = //State's vectored into symbol: "Rlr1_k_phrase"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Cmpost_output,(Reduce_tbl*)&S11rt_Cmpost_output,0,0,0};
+struct S12std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S12std_Cmpost_output S12st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {337,(State*)&S51_Cmpost_output} // shift sym: T_rc_phrase
+ ,{578,(State*)&S13_Cmpost_output} // shift sym: Rrc_phrase
+ }// end of shift table
+};
+yacco2::State S12_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cmpost_output,0,0,0,0};
+struct S13std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S13std_Cmpost_output S13st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S14_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S13rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cmpost_output S13rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S13_Cmpost_output = //State's vectored into symbol: "Rrc_phrase"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cmpost_output,(Reduce_tbl*)&S13rt_Cmpost_output,0,0,0};
+struct S14std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_Cmpost_output S14st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {334,(State*)&S52_Cmpost_output} // shift sym: T_terminals_phrase
+ ,{580,(State*)&S15_Cmpost_output} // shift sym: Rterms_phrase
+ }// end of shift table
+};
+yacco2::State S14_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cmpost_output,0,0,0,0};
+struct S15std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S15std_Cmpost_output S15st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S16_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S15rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cmpost_output S15rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S15_Cmpost_output = //State's vectored into symbol: "Rterms_phrase"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Cmpost_output,(Reduce_tbl*)&S15rt_Cmpost_output,0,0,0};
+struct S16std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_Cmpost_output S16st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {335,(State*)&S53_Cmpost_output} // shift sym: T_error_symbols_phrase
+ ,{577,(State*)&S17_Cmpost_output} // shift sym: Rerr_phrase
+ }// end of shift table
+};
+yacco2::State S16_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cmpost_output,0,0,0,0};
+struct S17std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S17std_Cmpost_output S17st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S18_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S17rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cmpost_output S17rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S17_Cmpost_output = //State's vectored into symbol: "Rerr_phrase"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cmpost_output,(Reduce_tbl*)&S17rt_Cmpost_output,0,0,0};
+struct S18std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S18std_Cmpost_output S18st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {341,(State*)&S54_Cmpost_output} // shift sym: T_rules_phrase
+ ,{581,(State*)&S19_Cmpost_output} // shift sym: Rrule_phrase
+ }// end of shift table
+};
+yacco2::State S18_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Cmpost_output,0,0,0,0};
+struct S19std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S19std_Cmpost_output S19st_Cmpost_output = {
+ 5
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S55_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ ,{582,(State*)&S20_Cmpost_output} // shift sym: Rrules
+ }// end of shift table
+};
+struct S19rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cmpost_output S19rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S19_Cmpost_output = //State's vectored into symbol: "Rrule_phrase"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cmpost_output,(Reduce_tbl*)&S19rt_Cmpost_output,0,0,0};
+struct S20std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S20std_Cmpost_output S20st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{571,(State*)&S21_Cmpost_output} // shift sym: Rks_epi
+ ,{572,(State*)&S43_Cmpost_output} // shift sym: Rks
+ ,{573,(State*)&S45_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S20rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cmpost_output S20rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA11_Cmpost_output,Cmpost_output::rhs2_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S20_Cmpost_output = //State's vectored into symbol: "Rrules"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Cmpost_output,(Reduce_tbl*)&S20rt_Cmpost_output,0,0,0};
+struct S21std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S21std_Cmpost_output S21st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S22_Cmpost_output} // shift sym: LR1_eog
+ ,{340,(State*)&S23_Cmpost_output} // shift sym: rule_def
+ ,{583,(State*)&S24_Cmpost_output} // shift sym: Rrule
+ ,{584,(State*)&S25_Cmpost_output} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S21_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cmpost_output,0,0,0,0};
+struct S22rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cmpost_output S22rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA12_Cmpost_output,Cmpost_output::rhs1_Rmpost_output_}
+ }// end of reduce table
+};
+yacco2::State S22_Cmpost_output = //State's vectored into symbol: "eog"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cmpost_output,0,0,0};
+struct S23rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cmpost_output S23rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA13_Cmpost_output,Cmpost_output::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S23_Cmpost_output = //State's vectored into symbol: "rule-def"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cmpost_output,0,0,0};
+struct S24rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cmpost_output S24rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA14_Cmpost_output,Cmpost_output::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S24_Cmpost_output = //State's vectored into symbol: "Rrule"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cmpost_output,0,0,0};
+struct S25std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S25std_Cmpost_output S25st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S26_Cmpost_output} // shift sym: T_subrule_def
+ ,{585,(State*)&S27_Cmpost_output} // shift sym: Rsubrules
+ ,{586,(State*)&S41_Cmpost_output} // shift sym: Rsubrule
+ ,{587,(State*)&S29_Cmpost_output} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S25_Cmpost_output = //State's vectored into symbol: "Rrule_def"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cmpost_output,0,0,0,0};
+struct S26rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cmpost_output S26rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA15_Cmpost_output,Cmpost_output::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S26_Cmpost_output = //State's vectored into symbol: "subrule-def"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cmpost_output,0,0,0};
+struct S27std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S27std_Cmpost_output S27st_Cmpost_output = {
+ 3
+ ,
+ {// start of table
+ {342,(State*)&S26_Cmpost_output} // shift sym: T_subrule_def
+ ,{586,(State*)&S28_Cmpost_output} // shift sym: Rsubrule
+ ,{587,(State*)&S29_Cmpost_output} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+struct S27rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cmpost_output S27rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA14_Cmpost_output,Cmpost_output::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S27_Cmpost_output = //State's vectored into symbol: "Rsubrules"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cmpost_output,(Reduce_tbl*)&S27rt_Cmpost_output,0,0,0};
+struct S28rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cmpost_output S28rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA16_Cmpost_output,Cmpost_output::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S28_Cmpost_output = //State's vectored into symbol: "Rsubrule"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cmpost_output,0,0,0};
+struct S29std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S29std_Cmpost_output S29st_Cmpost_output = {
+ 5
+ ,
+ {// start of table
+ {345,(State*)&S30_Cmpost_output} // shift sym: refered_T
+ ,{347,(State*)&S36_Cmpost_output} // shift sym: refered_rule
+ ,{369,(State*)&S37_Cmpost_output} // shift sym: T_eosubrule
+ ,{588,(State*)&S38_Cmpost_output} // shift sym: Relements
+ ,{589,(State*)&S40_Cmpost_output} // shift sym: Relement
+ }// end of shift table
+};
+yacco2::State S29_Cmpost_output = //State's vectored into symbol: "Rsubrule_def"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cmpost_output,0,0,0,0};
+struct S30std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S30std_Cmpost_output S30st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S31_Cmpost_output} // shift sym: LR1_invisible_shift_operator
+ ,{345,(State*)&S32_Cmpost_output} // shift sym: refered_T
+ }// end of shift table
+};
+yacco2::Shift_entry S30ise_Cmpost_output = {5,(State*)&S31_Cmpost_output};
+yacco2::State S30_Cmpost_output = //State's vectored into symbol: "refered-T"
+{30
+,0,0,(Shift_entry*)&S30ise_Cmpost_output
+,0,(Shift_tbl*)&S30st_Cmpost_output,0,0,0,0};
+struct S31rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cmpost_output S31rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs1_Relement_}
+ }// end of reduce table
+};
+yacco2::State S31_Cmpost_output = //State's vectored into symbol: "|.|"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cmpost_output,0,0,0};
+struct S32std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S32std_Cmpost_output S32st_Cmpost_output = {
+ 3
+ ,
+ {// start of table
+ {5,(State*)&S33_Cmpost_output} // shift sym: LR1_invisible_shift_operator
+ ,{370,(State*)&S34_Cmpost_output} // shift sym: T_called_thread_eosubrule
+ ,{371,(State*)&S35_Cmpost_output} // shift sym: T_null_call_thread_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S32ise_Cmpost_output = {5,(State*)&S33_Cmpost_output};
+yacco2::State S32_Cmpost_output = //State's vectored into symbol: "refered-T"
+{32
+,0,0,(Shift_entry*)&S32ise_Cmpost_output
+,0,(Shift_tbl*)&S32st_Cmpost_output,0,0,0,0};
+struct S33rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cmpost_output S33rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs6_Relement_}
+ }// end of reduce table
+};
+yacco2::State S33_Cmpost_output = //State's vectored into symbol: "|.|"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cmpost_output,0,0,0};
+struct S34rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cmpost_output S34rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs4_Relement_}
+ }// end of reduce table
+};
+yacco2::State S34_Cmpost_output = //State's vectored into symbol: "called thread eosubrule"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Cmpost_output,0,0,0};
+struct S35rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cmpost_output S35rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs5_Relement_}
+ }// end of reduce table
+};
+yacco2::State S35_Cmpost_output = //State's vectored into symbol: "null call thread eosubrule"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cmpost_output,0,0,0};
+struct S36rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cmpost_output S36rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs2_Relement_}
+ }// end of reduce table
+};
+yacco2::State S36_Cmpost_output = //State's vectored into symbol: "refered-rule"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cmpost_output,0,0,0};
+struct S37rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cmpost_output S37rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs3_Relement_}
+ }// end of reduce table
+};
+yacco2::State S37_Cmpost_output = //State's vectored into symbol: "eosubrule"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cmpost_output,0,0,0};
+struct S38std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S38std_Cmpost_output S38st_Cmpost_output = {
+ 4
+ ,
+ {// start of table
+ {345,(State*)&S30_Cmpost_output} // shift sym: refered_T
+ ,{347,(State*)&S36_Cmpost_output} // shift sym: refered_rule
+ ,{369,(State*)&S37_Cmpost_output} // shift sym: T_eosubrule
+ ,{589,(State*)&S39_Cmpost_output} // shift sym: Relement
+ }// end of shift table
+};
+struct S38rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cmpost_output S38rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA16_Cmpost_output,Cmpost_output::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S38_Cmpost_output = //State's vectored into symbol: "Relements"
+{38
+,0,0,0,0,(Shift_tbl*)&S38st_Cmpost_output,(Reduce_tbl*)&S38rt_Cmpost_output,0,0,0};
+struct S39rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cmpost_output S39rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs2_Relements_}
+ }// end of reduce table
+};
+yacco2::State S39_Cmpost_output = //State's vectored into symbol: "Relement"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cmpost_output,0,0,0};
+struct S40rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cmpost_output S40rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA17_Cmpost_output,Cmpost_output::rhs1_Relements_}
+ }// end of reduce table
+};
+yacco2::State S40_Cmpost_output = //State's vectored into symbol: "Relement"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cmpost_output,0,0,0};
+struct S41rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cmpost_output S41rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA16_Cmpost_output,Cmpost_output::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S41_Cmpost_output = //State's vectored into symbol: "Rsubrule"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cmpost_output,0,0,0};
+struct S42rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cmpost_output S42rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA18_Cmpost_output,Cmpost_output::rhs1_Rk_}
+ }// end of reduce table
+};
+yacco2::State S42_Cmpost_output = //State's vectored into symbol: "cweb-marker"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cmpost_output,0,0,0};
+struct S43std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S43std_Cmpost_output S43st_Cmpost_output = {
+ 2
+ ,
+ {// start of table
+ {374,(State*)&S42_Cmpost_output} // shift sym: T_cweb_marker
+ ,{573,(State*)&S44_Cmpost_output} // shift sym: Rk
+ }// end of shift table
+};
+struct S43rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cmpost_output S43rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cmpost_output,Cmpost_output::rhs1_Rks_epi_}
+ }// end of reduce table
+};
+yacco2::State S43_Cmpost_output = //State's vectored into symbol: "Rks"
+{43
+,0,0,0,0,(Shift_tbl*)&S43st_Cmpost_output,(Reduce_tbl*)&S43rt_Cmpost_output,0,0,0};
+struct S44rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cmpost_output S44rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA18_Cmpost_output,Cmpost_output::rhs1_Rks_}
+ }// end of reduce table
+};
+yacco2::State S44_Cmpost_output = //State's vectored into symbol: "Rk"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cmpost_output,0,0,0};
+struct S45rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cmpost_output S45rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA18_Cmpost_output,Cmpost_output::rhs2_Rks_}
+ }// end of reduce table
+};
+yacco2::State S45_Cmpost_output = //State's vectored into symbol: "Rk"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cmpost_output,0,0,0};
+struct S46rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cmpost_output S46rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA19_Cmpost_output,Cmpost_output::rhs1_Rfsm_phrase_}
+ }// end of reduce table
+};
+yacco2::State S46_Cmpost_output = //State's vectored into symbol: "fsm-phrase"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cmpost_output,0,0,0};
+struct S47rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cmpost_output S47rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cmpost_output,Cmpost_output::rhs2_Rparallel_phrase_}
+ }// end of reduce table
+};
+yacco2::State S47_Cmpost_output = //State's vectored into symbol: "|.|"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cmpost_output,0,0,0};
+struct S48rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cmpost_output S48rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA20_Cmpost_output,Cmpost_output::rhs1_Rparallel_phrase_}
+ }// end of reduce table
+};
+yacco2::State S48_Cmpost_output = //State's vectored into symbol: "parallel-parser-phrase"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cmpost_output,0,0,0};
+struct S49rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cmpost_output S49rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA21_Cmpost_output,Cmpost_output::rhs1_RT_enum_phrase_}
+ }// end of reduce table
+};
+yacco2::State S49_Cmpost_output = //State's vectored into symbol: "T-enum-phrase"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cmpost_output,0,0,0};
+struct S50rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cmpost_output S50rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA22_Cmpost_output,Cmpost_output::rhs1_Rlr1_k_phrase_}
+ }// end of reduce table
+};
+yacco2::State S50_Cmpost_output = //State's vectored into symbol: "lr1-k-phrase"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cmpost_output,0,0,0};
+struct S51rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cmpost_output S51rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA23_Cmpost_output,Cmpost_output::rhs1_Rrc_phrase_}
+ }// end of reduce table
+};
+yacco2::State S51_Cmpost_output = //State's vectored into symbol: "rc-phrase"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cmpost_output,0,0,0};
+struct S52rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cmpost_output S52rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA24_Cmpost_output,Cmpost_output::rhs1_Rterms_phrase_}
+ }// end of reduce table
+};
+yacco2::State S52_Cmpost_output = //State's vectored into symbol: "terminals-phrase"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cmpost_output,0,0,0};
+struct S53rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cmpost_output S53rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA25_Cmpost_output,Cmpost_output::rhs1_Rerr_phrase_}
+ }// end of reduce table
+};
+yacco2::State S53_Cmpost_output = //State's vectored into symbol: "error-symbols-phrase"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cmpost_output,0,0,0};
+struct S54rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Cmpost_output S54rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA26_Cmpost_output,Cmpost_output::rhs1_Rrule_phrase_}
+ }// end of reduce table
+};
+yacco2::State S54_Cmpost_output = //State's vectored into symbol: "rules-phrase"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Cmpost_output,0,0,0};
+struct S55std_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S55std_Cmpost_output S55st_Cmpost_output = {
+ 3
+ ,
+ {// start of table
+ {340,(State*)&S23_Cmpost_output} // shift sym: rule_def
+ ,{583,(State*)&S56_Cmpost_output} // shift sym: Rrule
+ ,{584,(State*)&S25_Cmpost_output} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S55_Cmpost_output = //State's vectored into symbol: "Rks_epi"
+{55
+,0,0,0,0,(Shift_tbl*)&S55st_Cmpost_output,0,0,0,0};
+struct S56rtd_Cmpost_output{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cmpost_output S56rt_Cmpost_output = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA14_Cmpost_output,Cmpost_output::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S56_Cmpost_output = //State's vectored into symbol: "Rrule"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cmpost_output,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_code_end.cpp b/web/yacco2/compiler/grammars/o2_code_end.cpp
new file mode 100644
index 0000000000..1cf9face95
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_end.cpp
@@ -0,0 +1,59 @@
+/*
+ File: o2_code_end.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_code_end.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_code_end;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Co2_code_end::
+ Co2_code_end()
+ :yacco2::CAbs_fsm
+ ("o2_code_end.lex"
+ ,"1.0"
+ ,"30 dec 2002"
+ ,false
+ ,"Lexer syntax directed code end marker: \\threeasteric."
+ ,"Fri Jan 30 18:55:16 2015 "
+ ,S1_Co2_code_end){
+
+ }
+
+Co2_code_end::~Co2_code_end(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_code_end::failed(){
+ return false;
+ }
+ void Co2_code_end::op(){
+}
+int Co2_code_end::rhs_to_rules_mapping_[2] = {
+ -1
+ ,0 // subrule 1 for rule 1
+};
+Ro2_code_end::Ro2_code_end(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ro2_code_end",0,Co2_code_end::R_Ro2_code_end_,P,false,false){
+}
+
+void Ro2_code_end::sr1(){
+
+ T_eocode* mkr = new T_eocode;
+ mkr->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(mkr);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_code_end.fsc b/web/yacco2/compiler/grammars/o2_code_end.fsc
new file mode 100644
index 0000000000..d8cb3e77d1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_end.fsc
@@ -0,0 +1,20 @@
+/*
+ File: o2_code_end.fsc
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+transitive n
+grammar-name "o2_code_end"
+name-space "NS_o2_code_end"
+thread-name "TH_o2_code_end"
+monolithic n
+file-name "o2_code_end.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_asteric
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Lexer syntax directed code end marker: \\threeasteric."
diff --git a/web/yacco2/compiler/grammars/o2_code_end.h b/web/yacco2/compiler/grammars/o2_code_end.h
new file mode 100644
index 0000000000..03bc8ea232
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_end.h
@@ -0,0 +1,55 @@
+/*
+ File: o2_code_end.h
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#ifndef __o2_code_end_h__
+#define __o2_code_end_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_o2_code_end;
+
+extern yacco2::State S1_Co2_code_end;
+namespace NS_o2_code_end {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_o2_code_end(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_o2_code_end(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Co2_code_end: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ro2_code_end_ = 569//start_of_rule_list + 0
+ ,rhs1_Ro2_code_end_ = 1
+ };
+ //no of la sets = 1
+ //no of states = 4
+ Co2_code_end();
+ ~Co2_code_end();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[2];
+ };
+struct Ro2_code_end;
+struct Ro2_code_end:public yacco2::CAbs_lr1_sym {
+ Ro2_code_end(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_code_end.lex b/web/yacco2/compiler/grammars/o2_code_end.lex
new file mode 100644
index 0000000000..ddb5f5e956
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_end.lex
@@ -0,0 +1,46 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_code_end.lex
+Date: 26 Nov 2002
+Purpose: Yacco2's syntax directed end code marker
+Correction: 1 June 2005 - add "*" removal from lookahead expression
+ u never know what type of syning u'll get
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |o2_code_end| Thread.\fbreak
+Yacco2's syntax directed ``end code'' marker.\fbreak
+Why as a thread?
+Cuz syntax-directed code is a character crawler
+that sends out its scouts to survey the land of
+variant strings, comments, and code-end marker.
+@/
+fsm
+(fsm-id "o2_code_end.lex",fsm-filename o2_code_end,fsm-namespace NS_o2_code_end
+,fsm-class Co2_code_end
+,fsm-version "1.0",fsm-date "30 dec 2002",fsm-debug "false"
+,fsm-comments "Lexer syntax directed code end marker: \\threeasteric.")
+parallel-parser
+( parallel-thread-function
+ TH_o2_code_end
+ ***
+ parallel-la-boundary
+ eolr - "*"
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ro2_code_end (){
+ -> "*" "*" "*" {
+ op
+ T_eocode* mkr = new T_eocode;
+ mkr->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(mkr);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_code_endsym.cpp b/web/yacco2/compiler/grammars/o2_code_endsym.cpp
new file mode 100644
index 0000000000..49cb928b56
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_endsym.cpp
@@ -0,0 +1,63 @@
+/*
+ File: o2_code_endsym.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_code_end.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_code_end;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_o2_code_end::TH_o2_code_end(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_o2_code_end;
+ NS_o2_code_end::Co2_code_end Co2_code_end_;// parallel-parser's parse table
+#define ssPARSE_TABLE Co2_code_end_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_o2_code_end::PROC_TH_o2_code_end(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_o2_code_end";
+ static bool one_time(false);
+ static NS_o2_code_end::Co2_code_end* NS_o2_code_end_Co2_code_end_(0);// parallel-parser's fsm table
+ static Parser* NS_o2_code_end_Co2_code_end_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_o2_code_end_Co2_code_end_ = new NS_o2_code_end::Co2_code_end();// parallel-parser's fsm table
+ NS_o2_code_end_Co2_code_end_parser = new Parser(*NS_o2_code_end_Co2_code_end_,Caller_pp);
+ }
+ proc_parser = NS_o2_code_end_Co2_code_end_parser;
+#include "wproc_pp_core.h"
+}
+void
+Co2_code_end::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ro2_code_end_:{
+ Ro2_code_end* sym;
+ if(re->rule_ == 0){
+ sym = new Ro2_code_end(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ro2_code_end*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_code_endtbl.cpp b/web/yacco2/compiler/grammars/o2_code_endtbl.cpp
new file mode 100644
index 0000000000..ca70e539aa
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_code_endtbl.cpp
@@ -0,0 +1,710 @@
+/*
+ File: o2_code_endtbl.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_code_end.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_code_end;// grammar's ns
+// first set terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA1_Co2_code_end[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,251
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Co2_code_end;
+extern yacco2::State S2_Co2_code_end;
+extern yacco2::State S3_Co2_code_end;
+extern yacco2::State S4_Co2_code_end;
+struct S1std_Co2_code_end{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Co2_code_end S1st_Co2_code_end = {
+ 2
+ ,
+ {// start of table
+ {50,(State*)&S2_Co2_code_end} // shift sym: raw_asteric
+ ,{569,(State*)&S1_Co2_code_end} // accept sym: Ro2_code_end
+ }// end of shift table
+};
+yacco2::State S1_Co2_code_end = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Co2_code_end,0,0,0,0};
+struct S2std_Co2_code_end{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Co2_code_end S2st_Co2_code_end = {
+ 1
+ ,
+ {// start of table
+ {50,(State*)&S3_Co2_code_end} // shift sym: raw_asteric
+ }// end of shift table
+};
+yacco2::State S2_Co2_code_end = //State's vectored into symbol: "*"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Co2_code_end,0,0,0,0};
+struct S3std_Co2_code_end{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Co2_code_end S3st_Co2_code_end = {
+ 1
+ ,
+ {// start of table
+ {50,(State*)&S4_Co2_code_end} // shift sym: raw_asteric
+ }// end of shift table
+};
+yacco2::State S3_Co2_code_end = //State's vectored into symbol: "*"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Co2_code_end,0,0,0,0};
+struct S4rtd_Co2_code_end{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Co2_code_end S4rt_Co2_code_end = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_code_end,Co2_code_end::rhs1_Ro2_code_end_}
+ }// end of reduce table
+};
+yacco2::State S4_Co2_code_end = //State's vectored into symbol: "*"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Co2_code_end,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlr.cpp b/web/yacco2/compiler/grammars/o2_err_hdlr.cpp
new file mode 100644
index 0000000000..0a9e51b6a4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlr.cpp
@@ -0,0 +1,384 @@
+/*
+ File: o2_err_hdlr.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_err_hdlr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_err_hdlr;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Co2_err_hdlr::
+ Co2_err_hdlr()
+ :yacco2::CAbs_fsm
+ ("o2_err_hdlr.lex"
+ ,"1.0"
+ ,"8 Jul 2003"
+ ,false
+ ,"Logic sequencer: Print out errors from \\O2."
+ ,"Fri Jan 30 18:55:16 2015 "
+ ,S1_Co2_err_hdlr){
+
+ }
+
+Co2_err_hdlr::~Co2_err_hdlr(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_err_hdlr::failed(){
+ return false;
+ }
+ void Co2_err_hdlr::op(){
+}
+int Co2_err_hdlr::rhs_to_rules_mapping_[23] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,2 // subrule 19 for rule 3
+ ,2 // subrule 20 for rule 3
+ ,2 // subrule 21 for rule 3
+ ,2 // subrule 22 for rule 3
+};
+Ro2_err_hdlr::Ro2_err_hdlr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ro2_err_hdlr",0,Co2_err_hdlr::R_Ro2_err_hdlr_,P,false,false){
+}
+
+Rerrors::Rerrors(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerrors",0,Co2_err_hdlr::R_Rerrors_,P,false,false){
+}
+
+Rerror::Rerror(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerror",0,Co2_err_hdlr::R_Rerror_,P,false,false){
+}
+
+void Rerror::sr1(){
+ struct SF{
+ Err_nested_files_exceeded* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " nested number: " << sf->p1__->nested_cnt() << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " nested number exceeded: " << sf->p1__->nested_cnt() << std::endl;
+
+}
+
+void Rerror::sr2(){
+ struct SF{
+ Err_no_end_of_code* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr3(){
+ struct SF{
+ Err_no_filename* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr4(){
+ struct SF{
+ Err_bad_filename* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+
+}
+
+void Rerror::sr5(){
+ struct SF{
+ Err_bad_cmd_lne_opt* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr6(){
+ struct SF{
+ Err_bad_int_no* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr7(){
+ struct SF{
+ Err_bad_int_no_range* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr8(){
+ struct SF{
+ Err_no_int_present* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr9(){
+ struct SF{
+ Err_bad_eos* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr10(){
+ struct SF{
+ Err_bad_esc* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr11(){
+ struct SF{
+ Err_comment_overrun* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__<< std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr12(){
+ struct SF{
+ Err_bad_char* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr13(){
+ struct SF{
+ Err_bad_univ_seq* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr14(){
+ struct SF{
+ T_file_inclusion* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_filename* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+
+}
+
+void Rerror::sr15(){
+ struct SF{
+ T_file_inclusion* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+
+}
+
+void Rerror::sr16(){
+ struct SF{
+ T_file_inclusion* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+
+}
+
+void Rerror::sr17(){
+ struct SF{
+ T_file_inclusion* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_no_filename* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+
+}
+
+void Rerror::sr18(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlr.fsc b/web/yacco2/compiler/grammars/o2_err_hdlr.fsc
new file mode 100644
index 0000000000..bdfe866f6a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlr.fsc
@@ -0,0 +1,35 @@
+/*
+ File: o2_err_hdlr.fsc
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+transitive n
+grammar-name "o2_err_hdlr"
+name-space "NS_o2_err_hdlr"
+thread-name "Co2_err_hdlr"
+monolithic y
+file-name "o2_err_hdlr.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 16
+ LR1_eog
+ LR1_all_shift_operator
+ T_file_inclusion
+ Err_nested_files_exceeded
+ Err_no_end_of_code
+ Err_no_filename
+ Err_bad_filename
+ Err_bad_cmd_lne_opt
+ Err_bad_int_no
+ Err_bad_int_no_range
+ Err_no_int_present
+ Err_bad_eos
+ Err_bad_esc
+ Err_comment_overrun
+ Err_bad_char
+ Err_bad_univ_seq
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Logic sequencer: Print out errors from \\O2."
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlr.h b/web/yacco2/compiler/grammars/o2_err_hdlr.h
new file mode 100644
index 0000000000..d69a2c01cb
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlr.h
@@ -0,0 +1,155 @@
+/*
+ File: o2_err_hdlr.h
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#ifndef __o2_err_hdlr_h__
+#define __o2_err_hdlr_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Co2_err_hdlr;
+namespace NS_o2_err_hdlr {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Co2_err_hdlr: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ro2_err_hdlr_ = 569//start_of_rule_list + 0
+ ,rhs1_Ro2_err_hdlr_ = 1
+ ,rhs2_Ro2_err_hdlr_ = 2
+ ,R_Rerrors_ = 570//start_of_rule_list + 2
+ ,rhs1_Rerrors_ = 3
+ ,rhs2_Rerrors_ = 4
+ ,R_Rerror_ = 571//start_of_rule_list + 4
+ ,rhs1_Rerror_ = 5
+ ,rhs2_Rerror_ = 6
+ ,rhs3_Rerror_ = 7
+ ,rhs4_Rerror_ = 8
+ ,rhs5_Rerror_ = 9
+ ,rhs6_Rerror_ = 10
+ ,rhs7_Rerror_ = 11
+ ,rhs8_Rerror_ = 12
+ ,rhs9_Rerror_ = 13
+ ,rhs10_Rerror_ = 14
+ ,rhs11_Rerror_ = 15
+ ,rhs12_Rerror_ = 16
+ ,rhs13_Rerror_ = 17
+ ,rhs14_Rerror_ = 18
+ ,rhs15_Rerror_ = 19
+ ,rhs16_Rerror_ = 20
+ ,rhs17_Rerror_ = 21
+ ,rhs18_Rerror_ = 22
+ };
+ //no of la sets = 2
+ //no of states = 25
+ Co2_err_hdlr();
+ ~Co2_err_hdlr();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[23];
+ };
+struct Ro2_err_hdlr;
+struct Rerrors;
+struct Rerror;
+struct Ro2_err_hdlr:public yacco2::CAbs_lr1_sym {
+ Ro2_err_hdlr(yacco2::Parser* P);
+ public:
+};
+
+struct Rerrors:public yacco2::CAbs_lr1_sym {
+ Rerrors(yacco2::Parser* P);
+ public:
+};
+
+struct Rerror:public yacco2::CAbs_lr1_sym {
+ Rerror(yacco2::Parser* P);
+
+ void error_where(CAbs_lr1_sym* E_sym){
+ std::string& ext_fle = yacco2::FILE_TBL__[E_sym->tok_co_ords__.external_file_id__];
+ std::string line_of_data;
+ std::ifstream ifile;
+ ifile.open(ext_fle.c_str());
+ if(ifile.good()){
+ yacco2::UINT lno(1);yacco2::UINT dlno(E_sym->tok_co_ords__.line_no__);
+ for(;lno<=dlno;++lno){
+ getline(ifile,line_of_data);
+ if(lno == dlno) break;
+ line_of_data.clear();
+ }
+ }
+
+ std::string space(" ");
+ std::string::size_type f = line_of_data.find_first_of('\t');
+ for(;f != std::string::npos;){
+ line_of_data.replace(f,1,space);
+ f = line_of_data.find_first_of('\t');
+ }
+
+ yacco2::lrclog << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ yacco2::lrclog << line_of_data.c_str() << std::endl;
+ std::cout << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ std::cout << line_of_data.c_str() << std::endl;
+ for(int pos = 1;pos < E_sym->tok_co_ords__.pos_in_line__;++pos){
+ yacco2::lrclog << ' ';
+ std::cout << ' ';
+ }
+ yacco2::lrclog << '^' << std::endl;
+ yacco2::lrclog << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ std::cout << '^' << std::endl;
+ std::cout << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ if(E_sym->tok_co_ords__.who_file__ != 0){
+ yacco2::lrclog << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ std::cout << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ }
+ ifile.close();
+ };
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+ void sr15();
+ void sr16();
+ void sr17();
+ void sr18();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlr.lex b/web/yacco2/compiler/grammars/o2_err_hdlr.lex
new file mode 100644
index 0000000000..02c5136daf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlr.lex
@@ -0,0 +1,233 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_err_hdlr.lex
+Date: 8 Jul 2003
+Purpose: grammar to process errors from yacco2
+Conduit: none
+Change: 11 Mar 2004 - replace tab with space so that
+ displaced error lines up properly
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |o2_err_hdlr| grammar.\fbreak
+Grammar that processes for printing posted errors from yacco2.
+@/
+fsm
+(fsm-id "o2_err_hdlr.lex",fsm-filename o2_err_hdlr,fsm-namespace NS_o2_err_hdlr
+,fsm-class Co2_err_hdlr
+,fsm-version "1.0",fsm-date "8 Jul 2003",fsm-debug "false"
+,fsm-comments "Logic sequencer: Print out errors from \\O2.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Ro2_err_hdlr (){
+ -> Rerrors eog
+ -> eog
+}
+
+Rerrors (){
+ -> Rerror
+ -> Rerrors Rerror
+}
+
+Rerror (
+lhs{
+ user-declaration
+ void error_where(CAbs_lr1_sym* E_sym){
+ std::string& ext_fle = yacco2::FILE_TBL__[E_sym->tok_co_ords__.external_file_id__];
+ std::string line_of_data;
+ std::ifstream ifile;
+ ifile.open(ext_fle.c_str());
+ if(ifile.good()){
+ yacco2::UINT lno(1);yacco2::UINT dlno(E_sym->tok_co_ords__.line_no__);
+ for(;lno<=dlno;++lno){
+ getline(ifile,line_of_data);
+ if(lno == dlno) break;
+ line_of_data.clear();
+ }
+ }
+
+ std::string space(" ");
+ std::string::size_type f = line_of_data.find_first_of('\t');
+ for(;f != std::string::npos;){
+ line_of_data.replace(f,1,space);
+ f = line_of_data.find_first_of('\t');
+ }
+
+ yacco2::lrclog << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ yacco2::lrclog << line_of_data.c_str() << std::endl;
+ std::cout << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ std::cout << line_of_data.c_str() << std::endl;
+ for(int pos = 1;pos < E_sym->tok_co_ords__.pos_in_line__;++pos){
+ yacco2::lrclog << ' ';
+ std::cout << ' ';
+ }
+ yacco2::lrclog << '^' << std::endl;
+ yacco2::lrclog << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ std::cout << '^' << std::endl;
+ std::cout << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ if(E_sym->tok_co_ords__.who_file__ != 0){
+ yacco2::lrclog << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ std::cout << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ }
+ ifile.close();
+ };
+ ***
+}
+){
+ -> "nested files exceeded" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " nested number: " << sf->p1__->nested_cnt() << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " nested number exceeded: " << sf->p1__->nested_cnt() << std::endl;
+ ***
+ }
+ -> "no end-of-code" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "no filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ ***
+ }
+ -> "bad cmd-opt" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad int-no" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad int-no range" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "no int present" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad eos" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad esc" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "comment-overrun" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__<< std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad char" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad univ-seq" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "file-inclusion" "bad filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+ ***
+ }
+ -> "file-inclusion" "bad esc" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+ ***
+ }
+ -> "file-inclusion" "bad eos" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+ ***
+ }
+ -> "file-inclusion" "no filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__;
+ yacco2::lrclog << " " << sf->p2__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__;
+ std::cout << " " << sf->p2__->id__ << std::endl;
+ ***
+ }
+ -> |+| {// catch balance of errors
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlrsym.cpp b/web/yacco2/compiler/grammars/o2_err_hdlrsym.cpp
new file mode 100644
index 0000000000..e8add0d34b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlrsym.cpp
@@ -0,0 +1,353 @@
+/*
+ File: o2_err_hdlrsym.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_err_hdlr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_err_hdlr;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Co2_err_hdlr::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ro2_err_hdlr_:{
+ Ro2_err_hdlr* sym;
+ if(re->rule_ == 0){
+ sym = new Ro2_err_hdlr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ro2_err_hdlr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Ro2_err_hdlr_:{
+ Ro2_err_hdlr* sym;
+ if(re->rule_ == 0){
+ sym = new Ro2_err_hdlr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ro2_err_hdlr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rerrors_:{
+ Rerrors* sym;
+ if(re->rule_ == 0){
+ sym = new Rerrors(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerrors*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rerrors_:{
+ Rerrors* sym;
+ if(re->rule_ == 0){
+ sym = new Rerrors(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerrors*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs15_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr15();
+ return;}
+ case rhs16_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr16();
+ return;}
+ case rhs17_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr17();
+ return;}
+ case rhs18_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr18();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_err_hdlrtbl.cpp b/web/yacco2/compiler/grammars/o2_err_hdlrtbl.cpp
new file mode 100644
index 0000000000..e2a30b4bc9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_err_hdlrtbl.cpp
@@ -0,0 +1,458 @@
+/*
+ File: o2_err_hdlrtbl.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_err_hdlr.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_err_hdlr;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Co2_err_hdlr[] ={
+1
+,0,4
+};
+// LR1_eog
+// LR1_all_shift_operator
+// T_file_inclusion
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+yacco2::UCHAR LA2_Co2_err_hdlr[] ={
+5
+,0,66
+,34,64
+,47,108
+,48,192
+,49,127
+};
+extern yacco2::State S1_Co2_err_hdlr;
+extern yacco2::State S2_Co2_err_hdlr;
+extern yacco2::State S3_Co2_err_hdlr;
+extern yacco2::State S4_Co2_err_hdlr;
+extern yacco2::State S5_Co2_err_hdlr;
+extern yacco2::State S6_Co2_err_hdlr;
+extern yacco2::State S7_Co2_err_hdlr;
+extern yacco2::State S8_Co2_err_hdlr;
+extern yacco2::State S9_Co2_err_hdlr;
+extern yacco2::State S10_Co2_err_hdlr;
+extern yacco2::State S11_Co2_err_hdlr;
+extern yacco2::State S12_Co2_err_hdlr;
+extern yacco2::State S13_Co2_err_hdlr;
+extern yacco2::State S14_Co2_err_hdlr;
+extern yacco2::State S15_Co2_err_hdlr;
+extern yacco2::State S16_Co2_err_hdlr;
+extern yacco2::State S17_Co2_err_hdlr;
+extern yacco2::State S18_Co2_err_hdlr;
+extern yacco2::State S19_Co2_err_hdlr;
+extern yacco2::State S20_Co2_err_hdlr;
+extern yacco2::State S21_Co2_err_hdlr;
+extern yacco2::State S22_Co2_err_hdlr;
+extern yacco2::State S23_Co2_err_hdlr;
+extern yacco2::State S24_Co2_err_hdlr;
+extern yacco2::State S25_Co2_err_hdlr;
+struct S1std_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[19];
+};
+S1std_Co2_err_hdlr S1st_Co2_err_hdlr = {
+ 19
+ ,
+ {// start of table
+ {1,(State*)&S2_Co2_err_hdlr} // shift sym: LR1_eog
+ ,{6,(State*)&S3_Co2_err_hdlr} // shift sym: LR1_all_shift_operator
+ ,{278,(State*)&S4_Co2_err_hdlr} // shift sym: T_file_inclusion
+ ,{378,(State*)&S9_Co2_err_hdlr} // shift sym: Err_nested_files_exceeded
+ ,{379,(State*)&S10_Co2_err_hdlr} // shift sym: Err_no_end_of_code
+ ,{381,(State*)&S11_Co2_err_hdlr} // shift sym: Err_no_filename
+ ,{382,(State*)&S12_Co2_err_hdlr} // shift sym: Err_bad_filename
+ ,{390,(State*)&S13_Co2_err_hdlr} // shift sym: Err_bad_cmd_lne_opt
+ ,{391,(State*)&S14_Co2_err_hdlr} // shift sym: Err_bad_int_no
+ ,{392,(State*)&S15_Co2_err_hdlr} // shift sym: Err_bad_int_no_range
+ ,{393,(State*)&S16_Co2_err_hdlr} // shift sym: Err_no_int_present
+ ,{394,(State*)&S17_Co2_err_hdlr} // shift sym: Err_bad_eos
+ ,{395,(State*)&S18_Co2_err_hdlr} // shift sym: Err_bad_esc
+ ,{396,(State*)&S19_Co2_err_hdlr} // shift sym: Err_comment_overrun
+ ,{397,(State*)&S20_Co2_err_hdlr} // shift sym: Err_bad_char
+ ,{398,(State*)&S21_Co2_err_hdlr} // shift sym: Err_bad_univ_seq
+ ,{569,(State*)&S1_Co2_err_hdlr} // accept sym: Ro2_err_hdlr
+ ,{570,(State*)&S22_Co2_err_hdlr} // shift sym: Rerrors
+ ,{571,(State*)&S25_Co2_err_hdlr} // shift sym: Rerror
+ }// end of shift table
+};
+yacco2::Shift_entry S1ase_Co2_err_hdlr = {6,(State*)&S3_Co2_err_hdlr};
+yacco2::State S1_Co2_err_hdlr = //State's vectored into symbol: " No symbol"
+{1
+,0,(Shift_entry*)&S1ase_Co2_err_hdlr
+,0,0,(Shift_tbl*)&S1st_Co2_err_hdlr,0,0,0,0};
+struct S2rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Co2_err_hdlr S2rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_err_hdlr,Co2_err_hdlr::rhs2_Ro2_err_hdlr_}
+ }// end of reduce table
+};
+yacco2::State S2_Co2_err_hdlr = //State's vectored into symbol: "eog"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Co2_err_hdlr,0,0,0};
+struct S3rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Co2_err_hdlr S3rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs18_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S3_Co2_err_hdlr = //State's vectored into symbol: "|+|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Co2_err_hdlr,0,0,0};
+struct S4std_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S4std_Co2_err_hdlr S4st_Co2_err_hdlr = {
+ 4
+ ,
+ {// start of table
+ {381,(State*)&S5_Co2_err_hdlr} // shift sym: Err_no_filename
+ ,{382,(State*)&S6_Co2_err_hdlr} // shift sym: Err_bad_filename
+ ,{394,(State*)&S7_Co2_err_hdlr} // shift sym: Err_bad_eos
+ ,{395,(State*)&S8_Co2_err_hdlr} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::State S4_Co2_err_hdlr = //State's vectored into symbol: "file-inclusion"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Co2_err_hdlr,0,0,0,0};
+struct S5rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_err_hdlr S5rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs17_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_err_hdlr = //State's vectored into symbol: "no filename"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_err_hdlr,0,0,0};
+struct S6rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_err_hdlr S6rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs14_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_err_hdlr = //State's vectored into symbol: "bad filename"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_err_hdlr,0,0,0};
+struct S7rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Co2_err_hdlr S7rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs16_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S7_Co2_err_hdlr = //State's vectored into symbol: "bad eos"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Co2_err_hdlr,0,0,0};
+struct S8rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_err_hdlr S8rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs15_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_err_hdlr = //State's vectored into symbol: "bad esc"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Co2_err_hdlr,0,0,0};
+struct S9rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Co2_err_hdlr S9rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs1_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S9_Co2_err_hdlr = //State's vectored into symbol: "nested files exceeded"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Co2_err_hdlr,0,0,0};
+struct S10rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Co2_err_hdlr S10rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs2_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S10_Co2_err_hdlr = //State's vectored into symbol: "no end-of-code"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Co2_err_hdlr,0,0,0};
+struct S11rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Co2_err_hdlr S11rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs3_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S11_Co2_err_hdlr = //State's vectored into symbol: "no filename"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Co2_err_hdlr,0,0,0};
+struct S12rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_err_hdlr S12rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs4_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_err_hdlr = //State's vectored into symbol: "bad filename"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_err_hdlr,0,0,0};
+struct S13rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Co2_err_hdlr S13rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs5_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S13_Co2_err_hdlr = //State's vectored into symbol: "bad cmd-opt"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Co2_err_hdlr,0,0,0};
+struct S14rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Co2_err_hdlr S14rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs6_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S14_Co2_err_hdlr = //State's vectored into symbol: "bad int-no"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Co2_err_hdlr,0,0,0};
+struct S15rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Co2_err_hdlr S15rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs7_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S15_Co2_err_hdlr = //State's vectored into symbol: "bad int-no range"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Co2_err_hdlr,0,0,0};
+struct S16rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Co2_err_hdlr S16rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs8_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S16_Co2_err_hdlr = //State's vectored into symbol: "no int present"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Co2_err_hdlr,0,0,0};
+struct S17rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Co2_err_hdlr S17rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs9_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S17_Co2_err_hdlr = //State's vectored into symbol: "bad eos"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Co2_err_hdlr,0,0,0};
+struct S18rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Co2_err_hdlr S18rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs10_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S18_Co2_err_hdlr = //State's vectored into symbol: "bad esc"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Co2_err_hdlr,0,0,0};
+struct S19rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Co2_err_hdlr S19rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs11_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S19_Co2_err_hdlr = //State's vectored into symbol: "comment-overrun"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Co2_err_hdlr,0,0,0};
+struct S20rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Co2_err_hdlr S20rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs12_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S20_Co2_err_hdlr = //State's vectored into symbol: "bad char"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Co2_err_hdlr,0,0,0};
+struct S21rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Co2_err_hdlr S21rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs13_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S21_Co2_err_hdlr = //State's vectored into symbol: "bad univ-seq"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Co2_err_hdlr,0,0,0};
+struct S22std_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[17];
+};
+S22std_Co2_err_hdlr S22st_Co2_err_hdlr = {
+ 17
+ ,
+ {// start of table
+ {1,(State*)&S23_Co2_err_hdlr} // shift sym: LR1_eog
+ ,{6,(State*)&S3_Co2_err_hdlr} // shift sym: LR1_all_shift_operator
+ ,{278,(State*)&S4_Co2_err_hdlr} // shift sym: T_file_inclusion
+ ,{378,(State*)&S9_Co2_err_hdlr} // shift sym: Err_nested_files_exceeded
+ ,{379,(State*)&S10_Co2_err_hdlr} // shift sym: Err_no_end_of_code
+ ,{381,(State*)&S11_Co2_err_hdlr} // shift sym: Err_no_filename
+ ,{382,(State*)&S12_Co2_err_hdlr} // shift sym: Err_bad_filename
+ ,{390,(State*)&S13_Co2_err_hdlr} // shift sym: Err_bad_cmd_lne_opt
+ ,{391,(State*)&S14_Co2_err_hdlr} // shift sym: Err_bad_int_no
+ ,{392,(State*)&S15_Co2_err_hdlr} // shift sym: Err_bad_int_no_range
+ ,{393,(State*)&S16_Co2_err_hdlr} // shift sym: Err_no_int_present
+ ,{394,(State*)&S17_Co2_err_hdlr} // shift sym: Err_bad_eos
+ ,{395,(State*)&S18_Co2_err_hdlr} // shift sym: Err_bad_esc
+ ,{396,(State*)&S19_Co2_err_hdlr} // shift sym: Err_comment_overrun
+ ,{397,(State*)&S20_Co2_err_hdlr} // shift sym: Err_bad_char
+ ,{398,(State*)&S21_Co2_err_hdlr} // shift sym: Err_bad_univ_seq
+ ,{571,(State*)&S24_Co2_err_hdlr} // shift sym: Rerror
+ }// end of shift table
+};
+yacco2::Shift_entry S22ase_Co2_err_hdlr = {6,(State*)&S3_Co2_err_hdlr};
+yacco2::State S22_Co2_err_hdlr = //State's vectored into symbol: "Rerrors"
+{22
+,0,(Shift_entry*)&S22ase_Co2_err_hdlr
+,0,0,(Shift_tbl*)&S22st_Co2_err_hdlr,0,0,0,0};
+struct S23rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Co2_err_hdlr S23rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_err_hdlr,Co2_err_hdlr::rhs1_Ro2_err_hdlr_}
+ }// end of reduce table
+};
+yacco2::State S23_Co2_err_hdlr = //State's vectored into symbol: "eog"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Co2_err_hdlr,0,0,0};
+struct S24rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Co2_err_hdlr S24rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs2_Rerrors_}
+ }// end of reduce table
+};
+yacco2::State S24_Co2_err_hdlr = //State's vectored into symbol: "Rerror"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Co2_err_hdlr,0,0,0};
+struct S25rtd_Co2_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Co2_err_hdlr S25rt_Co2_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_err_hdlr,Co2_err_hdlr::rhs1_Rerrors_}
+ }// end of reduce table
+};
+yacco2::State S25_Co2_err_hdlr = //State's vectored into symbol: "Rerror"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Co2_err_hdlr,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opt.cpp b/web/yacco2/compiler/grammars/o2_lcl_opt.cpp
new file mode 100644
index 0000000000..3328283a6b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opt.cpp
@@ -0,0 +1,151 @@
+/*
+ File: o2_lcl_opt.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_lcl_opt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opt;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Co2_lcl_opt::
+ Co2_lcl_opt()
+ :yacco2::CAbs_fsm
+ ("o2_lcl_opt.lex"
+ ,"1.1"
+ ,"18 Oct. 2003"
+ ,false
+ ,"\\O2's individual command line option recognizer."
+ ,"Fri Jan 30 18:55:16 2015 "
+ ,S1_Co2_lcl_opt){
+
+ }
+
+Co2_lcl_opt::~Co2_lcl_opt(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_lcl_opt::failed(){
+
+ CAbs_lr1_sym* sym = new Err_bad_cmd_lne_opt;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ return true;
+
+ }
+ void Co2_lcl_opt::op(){
+}
+int Co2_lcl_opt::rhs_to_rules_mapping_[12] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+ ,3 // subrule 11 for rule 4
+};
+Ro2_lcl_opt::Ro2_lcl_opt(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ro2_lcl_opt",0,Co2_lcl_opt::R_Ro2_lcl_opt_,P,false,false){
+}
+
+void Ro2_lcl_opt::sr1(){
+ struct SF{
+ Rminus* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rspec_parm* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rmust_lint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ sf->p2__->rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sf->p2__->rtn_parm_);
+
+}
+
+Rminus::Rminus(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus",0,Co2_lcl_opt::R_Rminus_,P,false,false){
+}
+
+Rspec_parm::Rspec_parm(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rspec_parm",0,Co2_lcl_opt::R_Rspec_parm_,P,false,false){
+}
+
+void Rspec_parm::sr1(){
+
+ rtn_parm_ = new T_option_t;
+
+}
+
+void Rspec_parm::sr2(){
+
+ rtn_parm_ = new T_option_p;
+
+}
+
+void Rspec_parm::sr3(){
+
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+
+}
+
+void Rspec_parm::sr4(){
+
+ rtn_parm_ = new T_option_err;
+
+}
+
+void Rspec_parm::sr5(){
+
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+
+}
+
+void Rspec_parm::sr6(){
+
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+
+}
+
+Rmust_lint::Rmust_lint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_lint",0,Co2_lcl_opt::R_Rmust_lint_,P,false,false){
+}
+
+void Rmust_lint::sr3(){
+
+ parser()->set_abort_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opt.fsc b/web/yacco2/compiler/grammars/o2_lcl_opt.fsc
new file mode 100644
index 0000000000..231af7f4ad
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opt.fsc
@@ -0,0 +1,20 @@
+/*
+ File: o2_lcl_opt.fsc
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+transitive n
+grammar-name "o2_lcl_opt"
+name-space "NS_o2_lcl_opt"
+thread-name "TH_o2_lcl_opt"
+monolithic n
+file-name "o2_lcl_opt.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_minus
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"\\O2's individual command line option recognizer."
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opt.h b/web/yacco2/compiler/grammars/o2_lcl_opt.h
new file mode 100644
index 0000000000..f455f481a4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opt.h
@@ -0,0 +1,97 @@
+/*
+ File: o2_lcl_opt.h
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#ifndef __o2_lcl_opt_h__
+#define __o2_lcl_opt_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_o2_lcl_opt;
+
+extern yacco2::State S1_Co2_lcl_opt;
+namespace NS_o2_lcl_opt {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_o2_lcl_opt(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_o2_lcl_opt(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Co2_lcl_opt: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ro2_lcl_opt_ = 569//start_of_rule_list + 0
+ ,rhs1_Ro2_lcl_opt_ = 1
+ ,R_Rminus_ = 570//start_of_rule_list + 2
+ ,rhs1_Rminus_ = 2
+ ,R_Rspec_parm_ = 571//start_of_rule_list + 4
+ ,rhs1_Rspec_parm_ = 3
+ ,rhs2_Rspec_parm_ = 4
+ ,rhs3_Rspec_parm_ = 5
+ ,rhs4_Rspec_parm_ = 6
+ ,rhs5_Rspec_parm_ = 7
+ ,rhs6_Rspec_parm_ = 8
+ ,R_Rmust_lint_ = 572//start_of_rule_list + 6
+ ,rhs1_Rmust_lint_ = 9
+ ,rhs2_Rmust_lint_ = 10
+ ,rhs3_Rmust_lint_ = 11
+ };
+ //no of la sets = 3
+ //no of states = 19
+ Co2_lcl_opt();
+ ~Co2_lcl_opt();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[12];
+ };
+struct Ro2_lcl_opt;
+struct Rminus;
+struct Rspec_parm;
+struct Rmust_lint;
+struct Ro2_lcl_opt:public yacco2::CAbs_lr1_sym {
+ Ro2_lcl_opt(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rminus:public yacco2::CAbs_lr1_sym {
+ Rminus(yacco2::Parser* P);
+ public:
+};
+
+struct Rspec_parm:public yacco2::CAbs_lr1_sym {
+ Rspec_parm(yacco2::Parser* P);
+
+ public:
+ CAbs_lr1_sym* rtn_parm_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rmust_lint:public yacco2::CAbs_lr1_sym {
+ Rmust_lint(yacco2::Parser* P);
+ public:
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opt.lex b/web/yacco2/compiler/grammars/o2_lcl_opt.lex
new file mode 100644
index 0000000000..ba485e29e0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opt.lex
@@ -0,0 +1,196 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_lcl_opt.lex
+Dates: 7 Apr. 2003
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |o2_lcl_opt| Thread.\fbreak
+The grammar |o2_lcl_opts| calls it per option detected.
+Options can be inputted in any order and all are optional.
+Their appearance in the command line means 'y'.
+Originally options were prefixed by a slash but
+i converted to the UNIX use of a minus sign.
+Here they are:\fbreak
+\ptindent{-t --- generate Terminals definitions }
+\ptindent{-rc --- generate Raw Chars definitions: deprecated }
+\ptindent{-err --- generate Error terminals definitions }
+\ptindent{-lrk --- generate yacco2's LRK terminal constants definitions: deprecated}
+\ptindent{-p --- generate pdf + post script(ps) documents}
+Returned is the appropriate T indicating the option.
+\fbreak
+Note: \fbreak
+In the "parallel-la-boundary" construct this grammar demonstrates
+how one can fine tune
+the look-ahead boundary to cope with a false option prefix
+eg, -tt. error reported at -t and not the next option re: 2nd t.
+|eolr| is too general for this refinement.
+
+Also shown is the use of meta-terminals to
+indicate or contain the parsed results.
+This is the cleanest way to communicate between threads.
+he agreement between the calling / called
+threads is the meta-terminal. Use of Global variables
+is efficient but ugly and unco-ordinated due to
+the random write access to the Global variable.\fbreak
+\fbreak
+Modifications:\fbreak
+Date: 19 Oct. 2003\fbreak
+Reason:\fbreak
+Modify rule names to be shorter and more concise.
+Originally the encoding rule
+for the grammar rule name was R {$+$}
+``thread name prefix'' {$+$} ``name given to rule''
+where the plus sign indicates concatenation.
+This made it volumous in the traces.\fbreak
+\fbreak
+Reason:\fbreak
+Add new switches to support:\fbreak
+/dbg turn on debuging of grammar to be compiled. this is a convenience to the
+author instead of using the editor to change the grammar's source code
+of fsm-debug "true" to "true"; once finished debugging, re-use the editor to
+restore the source code back to fsm-debug "true". \fbreak
+\fbreak
+Date: 2 June 2005\fbreak
+Reason:\fbreak
+Remove /s:xxx switch. Compilers should be robust enough to deal with
+reasonably large files. Nod to Microsoft current compiler
+@/
+
+fsm
+(fsm-id "o2_lcl_opt.lex",fsm-filename o2_lcl_opt,fsm-namespace NS_o2_lcl_opt
+,fsm-class Co2_lcl_opt{
+/@
+Trap the failed option and return a bad command.
+This covers errors like the premature prefix -e where it should
+be -err. i could have been less specific to trap
+non first set options (-z) by defaulting to this
+facility but i'm teaching myself...
+As this thread is executed according to its first set ``-'',
+any failed attempt is a bad option.
+Please note the use of the |RSVP_FSM| macro.
+Its context is different than the normal Rule's
+use of |RSVP| macro.
+@/
+ failed
+ CAbs_lr1_sym* sym = new Err_bad_cmd_lne_opt;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ return true;
+ ***
+}
+,fsm-version "1.1",fsm-date "18 Oct. 2003",fsm-debug "false"
+,fsm-comments "\\O2's individual command line option recognizer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_o2_lcl_opt
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ro2_lcl_opt (
+){
+ -> Rminus Rspec_parm Rmust_lint{
+ op
+ sf->p2__->rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sf->p2__->rtn_parm_);
+ ***
+ }
+}
+
+Rminus (){
+ -> "-"
+}
+
+Rspec_parm (
+lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_parm_;
+ ***
+ }
+){
+ ->
+ /@
+Generate Terminals vocabulary.
+ @/
+"t"
+ {
+ op
+ rtn_parm_ = new T_option_t;
+ ***
+ }
+ ->
+ /@
+Generate Terminals vocabulary.
+ @/
+"p"
+ {
+ op
+ rtn_parm_ = new T_option_p;
+ ***
+ }
+ ->
+/@
+Generate Raw characters vocabulary.
+Watch out as this is only used at bootstrap time of \O2.
+Users of \O2 should not use it unless they are experimenting.
+@/
+"r" "c"
+{
+ op
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ ***
+ }
+ ->
+/@
+Generate Error vocabulary.
+@/
+"e" "r" "r"
+{
+ op
+ rtn_parm_ = new T_option_err;
+ ***
+ }
+ ->
+/@
+Generate LR K vocabulary.
+Watch out as this is only used at bootstrap time of \O2.
+Users of \O2 should not use it unless they are experimenting.
+Currently not supported.
+@/
+"l" "r" "k" {
+ op
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ ***
+ }
+ -> |?| //catch bad attempts at options
+ {
+ op
+ rtn_parm_ = new Err_bad_cmd_lne_opt;
+ rtn_parm_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ ***
+ }
+}
+Rmust_lint (){
+ -> "x09" // tab
+ -> " "
+ -> |+| //catch suffixed extras on option
+ {
+ op
+ parser()->set_abort_parse(true);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opts.cpp b/web/yacco2/compiler/grammars/o2_lcl_opts.cpp
new file mode 100644
index 0000000000..4ced9c90fc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opts.cpp
@@ -0,0 +1,372 @@
+/*
+ File: o2_lcl_opts.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_lcl_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opts;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 9;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+}
+ Co2_lcl_opts::
+ Co2_lcl_opts()
+ :yacco2::CAbs_fsm
+ ("o2_lcl_opts.lex"
+ ,"1.0"
+ ,"21 Nov. 2002"
+ ,false
+ ,"\\O2's command line options dispatcher."
+ ,"Fri Jan 30 18:55:17 2015 "
+ ,S1_Co2_lcl_opts){
+
+ err_sw_ = 'n';t_sw_ = 'n';
+ prt_sw_ = 'n';
+ parm_cnt_ = 1;
+
+ }
+
+Co2_lcl_opts::~Co2_lcl_opts(){
+
+ for(int x = 0;x < 9;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_lcl_opts::failed(){
+ return false;
+ }
+ void Co2_lcl_opts::op(){
+ parser__->set_use_all_shift_on();
+
+}
+int Co2_lcl_opts::rhs_to_rules_mapping_[24] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,4 // subrule 11 for rule 5
+ ,5 // subrule 12 for rule 6
+ ,5 // subrule 13 for rule 6
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+ ,6 // subrule 16 for rule 7
+ ,6 // subrule 17 for rule 7
+ ,7 // subrule 18 for rule 8
+ ,7 // subrule 19 for rule 8
+ ,8 // subrule 20 for rule 9
+ ,8 // subrule 21 for rule 9
+ ,8 // subrule 22 for rule 9
+ ,8 // subrule 23 for rule 9
+};
+Ryacco2_options::Ryacco2_options(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ryacco2_options",0,Co2_lcl_opts::R_Ryacco2_options_,P,false,false){
+}
+
+void Ryacco2_options::op(){
+ sstrace_rulesss
+
+ TOKEN_GAGGLE* err_queue = (TOKEN_GAGGLE*)rule_info__.parser__->error_queue();
+ if(err_queue ->empty()) return;
+
+}
+Reog::Reog(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reog",0,Co2_lcl_opts::R_Reog_,P,false,false){
+}
+
+void Reog::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_bad_cmd_lne_opt;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rws_k::Rws_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws_k",0,Co2_lcl_opts::R_Rws_k_,P,false,false){
+}
+
+Rws_k_s::Rws_k_s(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws_k_s",0,Co2_lcl_opts::R_Rws_k_s_,P,false,false){
+}
+
+Rws::Rws(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws",0,Co2_lcl_opts::R_Rws_,P,false,false){
+}
+
+void Rws::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rws::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eol* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rws::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfile::Rfile(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfile",0,Co2_lcl_opts::R_Rfile_,P,false,false){
+}
+
+
+ void Rfile::edit_file(CAbs_lr1_sym* Sym){
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_k_symbols;
+ std::ifstream ifile;
+ ifile.open(fsm->file_to_compile_.c_str());
+ if (ifile.good()){
+ ifile.close();
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_filename(fsm->file_to_compile_);
+ sym->set_rc(*Sym,__FILE__,__LINE__);
+ rule_info__.parser__->add_token_to_error_queue(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+void Rfile::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_unquoted_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_unquoted_string* uqstr = sf->p2__;
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += uqstr->unquoted_string()->c_str();
+ ++fsm->parm_cnt_;
+ edit_file(uqstr);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rfile::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfile::sr3(){
+
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_no_filename();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfile::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_xc_str* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_xc_str* xcstr = sf->p2__;
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += xcstr->c_string()->c_str();
+ ++fsm->parm_cnt_;
+ edit_file(xcstr);
+
+}
+
+Rparms_epi::Rparms_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparms_epi",0,Co2_lcl_opts::R_Rparms_epi_,P,false,false){
+}
+
+Rparms::Rparms(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparms",0,Co2_lcl_opts::R_Rparms_,P,false,false){
+}
+
+Rspec_parm::Rspec_parm(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rspec_parm",0,Co2_lcl_opts::R_Rspec_parm_,P,false,false){
+}
+
+void Rspec_parm::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_option_t* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->t_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rspec_parm::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_option_err* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->err_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rspec_parm::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_option_p* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->prt_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rspec_parm::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opts.fsc b/web/yacco2/compiler/grammars/o2_lcl_opts.fsc
new file mode 100644
index 0000000000..3d72df184b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opts.fsc
@@ -0,0 +1,32 @@
+/*
+ File: o2_lcl_opts.fsc
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+transitive y
+grammar-name "o2_lcl_opts"
+name-space "NS_o2_lcl_opts"
+thread-name "Co2_lcl_opts"
+monolithic y
+file-name "o2_lcl_opts.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 6
+ NS_c_comments::TH_c_comments
+ NS_xc_str::TH_xc_str
+ NS_ws::TH_ws
+ NS_eol::TH_eol
+ NS_unq_str::TH_unq_str
+ NS_o2_lcl_opt::TH_o2_lcl_opt
+end-list-of-transitive-threads
+list-of-used-threads 6
+ NS_c_comments::TH_c_comments
+ NS_eol::TH_eol
+ NS_o2_lcl_opt::TH_o2_lcl_opt
+ NS_unq_str::TH_unq_str
+ NS_ws::TH_ws
+ NS_xc_str::TH_xc_str
+end-list-of-used-threads
+fsm-comments
+"\\O2's command line options dispatcher."
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opts.h b/web/yacco2/compiler/grammars/o2_lcl_opts.h
new file mode 100644
index 0000000000..650c044185
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opts.h
@@ -0,0 +1,159 @@
+/*
+ File: o2_lcl_opts.h
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#ifndef __o2_lcl_opts_h__
+#define __o2_lcl_opts_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_lcl_opt.h"
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "xc_str.h"
+#include "unq_str.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Co2_lcl_opts;
+namespace NS_o2_lcl_opts {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[9];
+};
+class Co2_lcl_opts: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ryacco2_options_ = 569//start_of_rule_list + 0
+ ,rhs1_Ryacco2_options_ = 1
+ ,R_Reog_ = 570//start_of_rule_list + 2
+ ,rhs1_Reog_ = 2
+ ,rhs2_Reog_ = 3
+ ,R_Rws_k_ = 571//start_of_rule_list + 4
+ ,rhs1_Rws_k_ = 4
+ ,rhs2_Rws_k_ = 5
+ ,R_Rws_k_s_ = 572//start_of_rule_list + 6
+ ,rhs1_Rws_k_s_ = 6
+ ,rhs2_Rws_k_s_ = 7
+ ,R_Rws_ = 573//start_of_rule_list + 8
+ ,rhs1_Rws_ = 8
+ ,rhs2_Rws_ = 9
+ ,rhs3_Rws_ = 10
+ ,rhs4_Rws_ = 11
+ ,R_Rfile_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfile_ = 12
+ ,rhs2_Rfile_ = 13
+ ,rhs3_Rfile_ = 14
+ ,rhs4_Rfile_ = 15
+ ,R_Rparms_epi_ = 575//start_of_rule_list + 12
+ ,rhs1_Rparms_epi_ = 16
+ ,rhs2_Rparms_epi_ = 17
+ ,R_Rparms_ = 576//start_of_rule_list + 14
+ ,rhs1_Rparms_ = 18
+ ,rhs2_Rparms_ = 19
+ ,R_Rspec_parm_ = 577//start_of_rule_list + 16
+ ,rhs1_Rspec_parm_ = 20
+ ,rhs2_Rspec_parm_ = 21
+ ,rhs3_Rspec_parm_ = 22
+ ,rhs4_Rspec_parm_ = 23
+ };
+ //no of la sets = 4
+ //no of states = 32
+ Co2_lcl_opts();
+ ~Co2_lcl_opts();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[24];
+
+ public:
+ yacco2::CHAR err_sw_;yacco2::CHAR t_sw_;
+ yacco2::CHAR prt_sw_;
+ std::string file_to_compile_;
+ yacco2::UINT parm_cnt_;
+
+ };
+struct Ryacco2_options;
+struct Reog;
+struct Rws_k;
+struct Rws_k_s;
+struct Rws;
+struct Rfile;
+struct Rparms_epi;
+struct Rparms;
+struct Rspec_parm;
+struct Ryacco2_options:public yacco2::CAbs_lr1_sym {
+ Ryacco2_options(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Reog:public yacco2::CAbs_lr1_sym {
+ Reog(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rws_k:public yacco2::CAbs_lr1_sym {
+ Rws_k(yacco2::Parser* P);
+ public:
+};
+
+struct Rws_k_s:public yacco2::CAbs_lr1_sym {
+ Rws_k_s(yacco2::Parser* P);
+ public:
+};
+
+struct Rws:public yacco2::CAbs_lr1_sym {
+ Rws(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rfile:public yacco2::CAbs_lr1_sym {
+ Rfile(yacco2::Parser* P);
+
+ public:
+ void edit_file(CAbs_lr1_sym* Sym);
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rparms_epi:public yacco2::CAbs_lr1_sym {
+ Rparms_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rparms:public yacco2::CAbs_lr1_sym {
+ Rparms(yacco2::Parser* P);
+ public:
+};
+
+struct Rspec_parm:public yacco2::CAbs_lr1_sym {
+ Rspec_parm(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opts.lex b/web/yacco2/compiler/grammars/o2_lcl_opts.lex
new file mode 100644
index 0000000000..2db8df099d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opts.lex
@@ -0,0 +1,241 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_lcl_opts.lex
+Dates: 7 Apr. 2003
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** \O2's frontend command line parser.
+The argv[] data passed by "int main(int argc, char* argv[])" is
+mapped into raw char tokens and placed into a container
+for lexical assessment.\fbreak
+Command Format:\fbreak
+file name followed by (options)* \fbreak
+\fbreak
+Note:\fbreak
+File name can be quoted or unquoted. Safest is quoted "...".
+Just watch out for unquoted: a space(s) must separate a filename from
+an option's phrase. Eg. ws.lex-g thinks the -g is part of the file name.
+It should be: ws.lex\]-g. Note the space between the extension ".lex"
+and the "-g" option which separates these two phrases.\fbreak
+\fbreak
+Comments can be sprinkled throughout the command line. This was
+ added to document the test driver's regressive test files. There
+ is no difference in input coming from the program's command line environment
+ or a test harnass's data file. The extensions: comments, and separate
+ lines of command data would normally be absent when
+ coming from the program's command
+ line environment.\fbreak
+\INDENT{.25in}{Command Line Paramenters:}
+\INDENT{.5in}{-p --- generate pdf / ps documents}
+\INDENT{.5in}{-err --- generate error symbols}
+\INDENT{.5in}{-t --- generate terminal symbols}
+\INDENT{.5in}{all others are relics of the past --- so out damn spot}
+\fbreak
+Errors:\break
+``comment-overrun'', ``bad-eos'', ``bad-esc'', ``bad-cmd-opt''
+@/
+fsm
+(fsm-id "o2_lcl_opts.lex",fsm-filename o2_lcl_opts,fsm-namespace NS_o2_lcl_opts
+,fsm-class Co2_lcl_opts {
+ user-declaration
+ public:
+ yacco2::CHAR err_sw_;yacco2::CHAR t_sw_;
+ yacco2::CHAR prt_sw_;
+ std::string file_to_compile_;
+ yacco2::UINT parm_cnt_;
+ ***
+ constructor
+ err_sw_ = 'n';t_sw_ = 'n';
+ prt_sw_ = 'n';
+ parm_cnt_ = 1;
+***
+ user-prefix-declaration
+#include "o2_lcl_opt.h"
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "xc_str.h"
+#include "unq_str.h"
+ ***
+ op
+ parser__->set_use_all_shift_on();
+ ***
+}
+,fsm-version "1.0",fsm-date "21 Nov. 2002",fsm-debug "false"
+,fsm-comments "\\O2's command line options dispatcher.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ryacco2_options (
+lhs{
+ op
+ TOKEN_GAGGLE* err_queue = (TOKEN_GAGGLE*)rule_info__.parser__->error_queue();
+ if(err_queue ->empty()) return;
+ ***
+}
+){
+ -> Rws_k Rparms_epi Rws_k Rfile Rws_k Reog
+}
+
+Reog (){
+ -> eog
+ ->
+ /@
+Bad data or missing option indicator: ``-'' so report it.
+ @/
+|?|
+ {
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_bad_cmd_lne_opt;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rws_k (){
+ ->
+ -> Rws_k_s
+}
+
+Rws_k_s (){
+ -> Rws
+ -> Rws_k_s Rws
+}
+
+Rws (){
+ -> ||| "ws" NS_ws::TH_ws
+ -> ||| "comment" NS_c_comments::TH_c_comments {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "eol" NS_eol::TH_eol {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfile (
+lhs{
+ user-declaration
+ public:
+ void edit_file(CAbs_lr1_sym* Sym);
+ ***
+ user-implementation
+ void Rfile::edit_file(CAbs_lr1_sym* Sym){
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_k_symbols;
+ std::ifstream ifile;
+ ifile.open(fsm->file_to_compile_.c_str());
+ if (ifile.good()){
+ ifile.close();
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_filename(fsm->file_to_compile_);
+ sym->set_rc(*Sym,__FILE__,__LINE__);
+ rule_info__.parser__->add_token_to_error_queue(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+}
+){
+ -> ||| "unquoted-string" NS_unq_str::TH_unq_str {
+ op
+ T_unquoted_string* uqstr = sf->p2__;
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += uqstr->unquoted_string()->c_str();
+ ++fsm->parm_cnt_;
+ edit_file(uqstr);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| { // no file given
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_no_filename();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "xc-str" NS_xc_str::TH_xc_str {
+ op
+ T_xc_str* xcstr = sf->p2__;
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += xcstr->c_string()->c_str();
+ ++fsm->parm_cnt_;
+ edit_file(xcstr);
+ ***
+ }
+}
+
+Rparms_epi (){
+ ->
+ -> Rparms
+}
+
+Rparms (){
+ -> Rspec_parm Rws_k
+ -> Rparms Rspec_parm Rws_k
+}
+
+Rspec_parm (){
+ -> ||| "option-t" NS_o2_lcl_opt::TH_o2_lcl_opt {
+ op
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->t_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "option-err" NULL {
+ op
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->err_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "option-p" NULL {
+ op
+ Co2_lcl_opts* fsm = (Co2_lcl_opts*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->parm_cnt_;
+ fsm->prt_sw_ = 'y';
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ /@
+A false option so report it.
+ @/
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_lcl_optssym.cpp b/web/yacco2/compiler/grammars/o2_lcl_optssym.cpp
new file mode 100644
index 0000000000..97e2a5b9e5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_optssym.cpp
@@ -0,0 +1,362 @@
+/*
+ File: o2_lcl_optssym.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_lcl_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opts;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Co2_lcl_opts::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ryacco2_options_:{
+ Ryacco2_options* sym;
+ if(re->rule_ == 0){
+ sym = new Ryacco2_options(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ryacco2_options*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ sym->op();
+ return;}
+ case rhs1_Reog_:{
+ Reog* sym;
+ if(re->rule_ == 0){
+ sym = new Reog(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reog*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Reog_:{
+ Reog* sym;
+ if(re->rule_ == 0){
+ sym = new Reog(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reog*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rws_k_:{
+ Rws_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rws_k_:{
+ Rws_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rws_k_s_:{
+ Rws_k_s* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k_s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k_s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rws_k_s_:{
+ Rws_k_s* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k_s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k_s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rparms_epi_:{
+ Rparms_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rparms_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparms_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rparms_epi_:{
+ Rparms_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rparms_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparms_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparms_:{
+ Rparms* sym;
+ if(re->rule_ == 0){
+ sym = new Rparms(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparms*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rparms_:{
+ Rparms* sym;
+ if(re->rule_ == 0){
+ sym = new Rparms(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparms*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_lcl_optstbl.cpp b/web/yacco2/compiler/grammars/o2_lcl_optstbl.cpp
new file mode 100644
index 0000000000..314981c4cf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_optstbl.cpp
@@ -0,0 +1,696 @@
+/*
+ File: o2_lcl_optstbl.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_lcl_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opts;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_eog
+// LR1_reduce_operator
+yacco2::UCHAR LA1_Co2_lcl_opts[] ={
+1
+,0,19
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Co2_lcl_opts[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// LR1_eog
+yacco2::UCHAR LA3_Co2_lcl_opts[] ={
+1
+,0,3
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Co2_lcl_opts[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Co2_lcl_opts;
+extern yacco2::State S2_Co2_lcl_opts;
+struct S2ttd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S2ttd_Co2_lcl_opts S2tt_Co2_lcl_opts = {
+ 3 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_ws
+};
+extern yacco2::State S3_Co2_lcl_opts;
+extern yacco2::State S4_Co2_lcl_opts;
+extern yacco2::State S5_Co2_lcl_opts;
+extern yacco2::State S6_Co2_lcl_opts;
+extern yacco2::State S7_Co2_lcl_opts;
+extern yacco2::State S8_Co2_lcl_opts;
+extern yacco2::State S9_Co2_lcl_opts;
+extern yacco2::State S10_Co2_lcl_opts;
+extern yacco2::State S11_Co2_lcl_opts;
+extern yacco2::State S12_Co2_lcl_opts;
+extern yacco2::State S13_Co2_lcl_opts;
+extern yacco2::State S14_Co2_lcl_opts;
+extern yacco2::State S15_Co2_lcl_opts;
+extern yacco2::State S16_Co2_lcl_opts;
+extern yacco2::State S17_Co2_lcl_opts;
+extern yacco2::State S18_Co2_lcl_opts;
+struct S18ttd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S18ttd_Co2_lcl_opts S18tt_Co2_lcl_opts = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_lcl_opt
+};
+extern yacco2::State S19_Co2_lcl_opts;
+extern yacco2::State S20_Co2_lcl_opts;
+extern yacco2::State S21_Co2_lcl_opts;
+extern yacco2::State S22_Co2_lcl_opts;
+extern yacco2::State S23_Co2_lcl_opts;
+extern yacco2::State S24_Co2_lcl_opts;
+extern yacco2::State S25_Co2_lcl_opts;
+extern yacco2::State S26_Co2_lcl_opts;
+extern yacco2::State S27_Co2_lcl_opts;
+extern yacco2::State S28_Co2_lcl_opts;
+extern yacco2::State S29_Co2_lcl_opts;
+struct S29ttd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S29ttd_Co2_lcl_opts S29tt_Co2_lcl_opts = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_xc_str
+ ,(yacco2::Thread_entry*)&ITH_unq_str
+};
+extern yacco2::State S30_Co2_lcl_opts;
+extern yacco2::State S31_Co2_lcl_opts;
+extern yacco2::State S32_Co2_lcl_opts;
+struct S1std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Co2_lcl_opts S1st_Co2_lcl_opts = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Co2_lcl_opts} // accept sym: Ryacco2_options
+ ,{571,(State*)&S7_Co2_lcl_opts} // shift sym: Rws_k
+ ,{572,(State*)&S15_Co2_lcl_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S17_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S1rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Co2_lcl_opts S1rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S1_Co2_lcl_opts = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S1st_Co2_lcl_opts,(Reduce_tbl*)&S1rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S2std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S2std_Co2_lcl_opts S2st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S3_Co2_lcl_opts} // shift sym: LR1_questionable_shift_operator
+ ,{268,(State*)&S4_Co2_lcl_opts} // shift sym: T_eol
+ ,{271,(State*)&S5_Co2_lcl_opts} // shift sym: T_comment
+ ,{272,(State*)&S6_Co2_lcl_opts} // shift sym: T_ws
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Co2_lcl_opts = {0,(State*)&S3_Co2_lcl_opts};
+yacco2::State S2_Co2_lcl_opts = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Co2_lcl_opts,0,0,0,(Shift_entry*)&S2qse_Co2_lcl_opts
+};
+struct S3rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Co2_lcl_opts S3rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs4_Rws_}
+ }// end of reduce table
+};
+yacco2::State S3_Co2_lcl_opts = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Co2_lcl_opts,0,0,0};
+struct S4rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Co2_lcl_opts S4rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs3_Rws_}
+ }// end of reduce table
+};
+yacco2::State S4_Co2_lcl_opts = //State's vectored into symbol: "eol"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Co2_lcl_opts,0,0,0};
+struct S5rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_lcl_opts S5rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rws_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_lcl_opts = //State's vectored into symbol: "comment"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_lcl_opts,0,0,0};
+struct S6rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_lcl_opts S6rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_lcl_opts = //State's vectored into symbol: "ws"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_lcl_opts,0,0,0};
+struct S7std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S7std_Co2_lcl_opts S7st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S18_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S8_Co2_lcl_opts} // shift sym: Rparms_epi
+ ,{576,(State*)&S23_Co2_lcl_opts} // shift sym: Rparms
+ ,{577,(State*)&S26_Co2_lcl_opts} // shift sym: Rspec_parm
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Co2_lcl_opts = {3,(State*)&S18_Co2_lcl_opts};
+struct S7rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Co2_lcl_opts S7rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rparms_epi_}
+ }// end of reduce table
+};
+yacco2::State S7_Co2_lcl_opts = //State's vectored into symbol: "Rws_k"
+{7
+,(Shift_entry*)&S7pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S7st_Co2_lcl_opts,(Reduce_tbl*)&S7rt_Co2_lcl_opts,(State_s_thread_tbl*)&S18tt_Co2_lcl_opts,0,0};
+struct S8std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Co2_lcl_opts S8st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S9_Co2_lcl_opts} // shift sym: Rws_k
+ ,{572,(State*)&S15_Co2_lcl_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S17_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S8pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S8rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_lcl_opts S8rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_lcl_opts = //State's vectored into symbol: "Rparms_epi"
+{8
+,(Shift_entry*)&S8pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S8st_Co2_lcl_opts,(Reduce_tbl*)&S8rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S9std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Co2_lcl_opts S9st_Co2_lcl_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S28_Co2_lcl_opts} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S29_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S10_Co2_lcl_opts} // shift sym: Rfile
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Co2_lcl_opts = {3,(State*)&S29_Co2_lcl_opts};
+yacco2::Shift_entry S9qse_Co2_lcl_opts = {0,(State*)&S28_Co2_lcl_opts};
+yacco2::State S9_Co2_lcl_opts = //State's vectored into symbol: "Rws_k"
+{9
+,(Shift_entry*)&S9pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S9st_Co2_lcl_opts,0,(State_s_thread_tbl*)&S29tt_Co2_lcl_opts,0,(Shift_entry*)&S9qse_Co2_lcl_opts
+};
+struct S10std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S10std_Co2_lcl_opts S10st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S11_Co2_lcl_opts} // shift sym: Rws_k
+ ,{572,(State*)&S15_Co2_lcl_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S17_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S10rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Co2_lcl_opts S10rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S10_Co2_lcl_opts = //State's vectored into symbol: "Rfile"
+{10
+,(Shift_entry*)&S10pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S10st_Co2_lcl_opts,(Reduce_tbl*)&S10rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S11std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S11std_Co2_lcl_opts S11st_Co2_lcl_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S12_Co2_lcl_opts} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S13_Co2_lcl_opts} // shift sym: LR1_eog
+ ,{570,(State*)&S14_Co2_lcl_opts} // shift sym: Reog
+ }// end of shift table
+};
+yacco2::Shift_entry S11qse_Co2_lcl_opts = {0,(State*)&S12_Co2_lcl_opts};
+yacco2::State S11_Co2_lcl_opts = //State's vectored into symbol: "Rws_k"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Co2_lcl_opts,0,0,0,(Shift_entry*)&S11qse_Co2_lcl_opts
+};
+struct S12rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_lcl_opts S12rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Co2_lcl_opts,Co2_lcl_opts::rhs2_Reog_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_lcl_opts = //State's vectored into symbol: "|?|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_lcl_opts,0,0,0};
+struct S13rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Co2_lcl_opts S13rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Co2_lcl_opts,Co2_lcl_opts::rhs1_Reog_}
+ }// end of reduce table
+};
+yacco2::State S13_Co2_lcl_opts = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Co2_lcl_opts,0,0,0};
+struct S14rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Co2_lcl_opts S14rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Co2_lcl_opts,Co2_lcl_opts::rhs1_Ryacco2_options_}
+ }// end of reduce table
+};
+yacco2::State S14_Co2_lcl_opts = //State's vectored into symbol: "Reog"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Co2_lcl_opts,0,0,0};
+struct S15std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Co2_lcl_opts S15st_Co2_lcl_opts = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S16_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S15rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Co2_lcl_opts S15rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S15_Co2_lcl_opts = //State's vectored into symbol: "Rws_k_s"
+{15
+,(Shift_entry*)&S15pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S15st_Co2_lcl_opts,(Reduce_tbl*)&S15rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S16rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Co2_lcl_opts S16rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rws_k_s_}
+ }// end of reduce table
+};
+yacco2::State S16_Co2_lcl_opts = //State's vectored into symbol: "Rws"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Co2_lcl_opts,0,0,0};
+struct S17rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Co2_lcl_opts S17rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_s_}
+ }// end of reduce table
+};
+yacco2::State S17_Co2_lcl_opts = //State's vectored into symbol: "Rws"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Co2_lcl_opts,0,0,0};
+struct S18std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S18std_Co2_lcl_opts S18st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S19_Co2_lcl_opts} // shift sym: LR1_questionable_shift_operator
+ ,{264,(State*)&S20_Co2_lcl_opts} // shift sym: T_option_t
+ ,{265,(State*)&S21_Co2_lcl_opts} // shift sym: T_option_p
+ ,{266,(State*)&S22_Co2_lcl_opts} // shift sym: T_option_err
+ }// end of shift table
+};
+yacco2::Shift_entry S18qse_Co2_lcl_opts = {0,(State*)&S19_Co2_lcl_opts};
+yacco2::State S18_Co2_lcl_opts = //State's vectored into symbol: "|||"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Co2_lcl_opts,0,0,0,(Shift_entry*)&S18qse_Co2_lcl_opts
+};
+struct S19rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Co2_lcl_opts S19rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs4_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S19_Co2_lcl_opts = //State's vectored into symbol: "|?|"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Co2_lcl_opts,0,0,0};
+struct S20rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Co2_lcl_opts S20rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S20_Co2_lcl_opts = //State's vectored into symbol: "option-t"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Co2_lcl_opts,0,0,0};
+struct S21rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Co2_lcl_opts S21rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs3_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S21_Co2_lcl_opts = //State's vectored into symbol: "option-p"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Co2_lcl_opts,0,0,0};
+struct S22rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Co2_lcl_opts S22rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S22_Co2_lcl_opts = //State's vectored into symbol: "option-err"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Co2_lcl_opts,0,0,0};
+struct S23std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S23std_Co2_lcl_opts S23st_Co2_lcl_opts = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S18_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S24_Co2_lcl_opts} // shift sym: Rspec_parm
+ }// end of shift table
+};
+yacco2::Shift_entry S23pse_Co2_lcl_opts = {3,(State*)&S18_Co2_lcl_opts};
+struct S23rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Co2_lcl_opts S23rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rparms_epi_}
+ }// end of reduce table
+};
+yacco2::State S23_Co2_lcl_opts = //State's vectored into symbol: "Rparms"
+{23
+,(Shift_entry*)&S23pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S23st_Co2_lcl_opts,(Reduce_tbl*)&S23rt_Co2_lcl_opts,(State_s_thread_tbl*)&S18tt_Co2_lcl_opts,0,0};
+struct S24std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S24std_Co2_lcl_opts S24st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S25_Co2_lcl_opts} // shift sym: Rws_k
+ ,{572,(State*)&S15_Co2_lcl_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S17_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S24rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Co2_lcl_opts S24rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S24_Co2_lcl_opts = //State's vectored into symbol: "Rspec_parm"
+{24
+,(Shift_entry*)&S24pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S24st_Co2_lcl_opts,(Reduce_tbl*)&S24rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S25rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Co2_lcl_opts S25rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rparms_}
+ }// end of reduce table
+};
+yacco2::State S25_Co2_lcl_opts = //State's vectored into symbol: "Rws_k"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Co2_lcl_opts,0,0,0};
+struct S26std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S26std_Co2_lcl_opts S26st_Co2_lcl_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_lcl_opts} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S27_Co2_lcl_opts} // shift sym: Rws_k
+ ,{572,(State*)&S15_Co2_lcl_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S17_Co2_lcl_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_Co2_lcl_opts = {3,(State*)&S2_Co2_lcl_opts};
+struct S26rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Co2_lcl_opts S26rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S26_Co2_lcl_opts = //State's vectored into symbol: "Rspec_parm"
+{26
+,(Shift_entry*)&S26pse_Co2_lcl_opts,0,0,0,(Shift_tbl*)&S26st_Co2_lcl_opts,(Reduce_tbl*)&S26rt_Co2_lcl_opts,(State_s_thread_tbl*)&S2tt_Co2_lcl_opts,0,0};
+struct S27rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Co2_lcl_opts S27rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rparms_}
+ }// end of reduce table
+};
+yacco2::State S27_Co2_lcl_opts = //State's vectored into symbol: "Rws_k"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Co2_lcl_opts,0,0,0};
+struct S28rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Co2_lcl_opts S28rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs3_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S28_Co2_lcl_opts = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Co2_lcl_opts,0,0,0};
+struct S29std_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S29std_Co2_lcl_opts S29st_Co2_lcl_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S30_Co2_lcl_opts} // shift sym: LR1_questionable_shift_operator
+ ,{276,(State*)&S31_Co2_lcl_opts} // shift sym: T_xc_str
+ ,{277,(State*)&S32_Co2_lcl_opts} // shift sym: T_unquoted_string
+ }// end of shift table
+};
+yacco2::Shift_entry S29qse_Co2_lcl_opts = {0,(State*)&S30_Co2_lcl_opts};
+yacco2::State S29_Co2_lcl_opts = //State's vectored into symbol: "|||"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Co2_lcl_opts,0,0,0,(Shift_entry*)&S29qse_Co2_lcl_opts
+};
+struct S30rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Co2_lcl_opts S30rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs2_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S30_Co2_lcl_opts = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Co2_lcl_opts,0,0,0};
+struct S31rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Co2_lcl_opts S31rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs4_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S31_Co2_lcl_opts = //State's vectored into symbol: "xc-str"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Co2_lcl_opts,0,0,0};
+struct S32rtd_Co2_lcl_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Co2_lcl_opts S32rt_Co2_lcl_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opts,Co2_lcl_opts::rhs1_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S32_Co2_lcl_opts = //State's vectored into symbol: "unquoted-string"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Co2_lcl_opts,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_lcl_optsym.cpp b/web/yacco2/compiler/grammars/o2_lcl_optsym.cpp
new file mode 100644
index 0000000000..b2d36f2041
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_optsym.cpp
@@ -0,0 +1,210 @@
+/*
+ File: o2_lcl_optsym.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_lcl_opt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opt;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_o2_lcl_opt::TH_o2_lcl_opt(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_o2_lcl_opt;
+ NS_o2_lcl_opt::Co2_lcl_opt Co2_lcl_opt_;// parallel-parser's parse table
+#define ssPARSE_TABLE Co2_lcl_opt_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_o2_lcl_opt::PROC_TH_o2_lcl_opt(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_o2_lcl_opt";
+ static bool one_time(false);
+ static NS_o2_lcl_opt::Co2_lcl_opt* NS_o2_lcl_opt_Co2_lcl_opt_(0);// parallel-parser's fsm table
+ static Parser* NS_o2_lcl_opt_Co2_lcl_opt_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_o2_lcl_opt_Co2_lcl_opt_ = new NS_o2_lcl_opt::Co2_lcl_opt();// parallel-parser's fsm table
+ NS_o2_lcl_opt_Co2_lcl_opt_parser = new Parser(*NS_o2_lcl_opt_Co2_lcl_opt_,Caller_pp);
+ }
+ proc_parser = NS_o2_lcl_opt_Co2_lcl_opt_parser;
+#include "wproc_pp_core.h"
+}
+void
+Co2_lcl_opt::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ro2_lcl_opt_:{
+ Ro2_lcl_opt* sym;
+ if(re->rule_ == 0){
+ sym = new Ro2_lcl_opt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ro2_lcl_opt*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rminus_:{
+ Rminus* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rspec_parm_:{
+ Rspec_parm* sym;
+ if(re->rule_ == 0){
+ sym = new Rspec_parm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rspec_parm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Rmust_lint_:{
+ Rmust_lint* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_lint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_lint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmust_lint_:{
+ Rmust_lint* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_lint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_lint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rmust_lint_:{
+ Rmust_lint* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_lint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_lint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_lcl_opttbl.cpp b/web/yacco2/compiler/grammars/o2_lcl_opttbl.cpp
new file mode 100644
index 0000000000..872737bb30
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_lcl_opttbl.cpp
@@ -0,0 +1,340 @@
+/*
+ File: o2_lcl_opttbl.cpp
+ Date and Time: Fri Jan 30 18:55:16 2015
+*/
+#include "o2_lcl_opt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_lcl_opt;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// raw_e
+// raw_l
+// raw_p
+// raw_r
+// raw_t
+yacco2::UCHAR LA1_Co2_lcl_opt[] ={
+4
+,0,1
+,13,32
+,14,16
+,15,21
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Co2_lcl_opt[] ={
+1
+,0,4
+};
+// LR1_all_shift_operator
+// raw_ht
+// raw_sp
+yacco2::UCHAR LA3_Co2_lcl_opt[] ={
+3
+,0,64
+,2,2
+,5,1
+};
+extern yacco2::State S1_Co2_lcl_opt;
+extern yacco2::State S2_Co2_lcl_opt;
+extern yacco2::State S3_Co2_lcl_opt;
+extern yacco2::State S4_Co2_lcl_opt;
+extern yacco2::State S5_Co2_lcl_opt;
+extern yacco2::State S6_Co2_lcl_opt;
+extern yacco2::State S7_Co2_lcl_opt;
+extern yacco2::State S8_Co2_lcl_opt;
+extern yacco2::State S9_Co2_lcl_opt;
+extern yacco2::State S10_Co2_lcl_opt;
+extern yacco2::State S11_Co2_lcl_opt;
+extern yacco2::State S12_Co2_lcl_opt;
+extern yacco2::State S13_Co2_lcl_opt;
+extern yacco2::State S14_Co2_lcl_opt;
+extern yacco2::State S15_Co2_lcl_opt;
+extern yacco2::State S16_Co2_lcl_opt;
+extern yacco2::State S17_Co2_lcl_opt;
+extern yacco2::State S18_Co2_lcl_opt;
+extern yacco2::State S19_Co2_lcl_opt;
+struct S1std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Co2_lcl_opt S1st_Co2_lcl_opt = {
+ 3
+ ,
+ {// start of table
+ {53,(State*)&S2_Co2_lcl_opt} // shift sym: raw_minus
+ ,{569,(State*)&S1_Co2_lcl_opt} // accept sym: Ro2_lcl_opt
+ ,{570,(State*)&S3_Co2_lcl_opt} // shift sym: Rminus
+ }// end of shift table
+};
+yacco2::State S1_Co2_lcl_opt = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Co2_lcl_opt,0,0,0,0};
+struct S2rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Co2_lcl_opt S2rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_lcl_opt,Co2_lcl_opt::rhs1_Rminus_}
+ }// end of reduce table
+};
+yacco2::State S2_Co2_lcl_opt = //State's vectored into symbol: "-"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Co2_lcl_opt,0,0,0};
+struct S3std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S3std_Co2_lcl_opt S3st_Co2_lcl_opt = {
+ 7
+ ,
+ {// start of table
+ {0,(State*)&S9_Co2_lcl_opt} // shift sym: LR1_questionable_shift_operator
+ ,{109,(State*)&S10_Co2_lcl_opt} // shift sym: raw_e
+ ,{116,(State*)&S13_Co2_lcl_opt} // shift sym: raw_l
+ ,{120,(State*)&S16_Co2_lcl_opt} // shift sym: raw_p
+ ,{122,(State*)&S17_Co2_lcl_opt} // shift sym: raw_r
+ ,{124,(State*)&S19_Co2_lcl_opt} // shift sym: raw_t
+ ,{571,(State*)&S4_Co2_lcl_opt} // shift sym: Rspec_parm
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Co2_lcl_opt = {0,(State*)&S9_Co2_lcl_opt};
+yacco2::State S3_Co2_lcl_opt = //State's vectored into symbol: "Rminus"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Co2_lcl_opt,0,0,0,(Shift_entry*)&S3qse_Co2_lcl_opt
+};
+struct S4std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S4std_Co2_lcl_opt S4st_Co2_lcl_opt = {
+ 4
+ ,
+ {// start of table
+ {6,(State*)&S5_Co2_lcl_opt} // shift sym: LR1_all_shift_operator
+ ,{17,(State*)&S6_Co2_lcl_opt} // shift sym: raw_ht
+ ,{40,(State*)&S7_Co2_lcl_opt} // shift sym: raw_sp
+ ,{572,(State*)&S8_Co2_lcl_opt} // shift sym: Rmust_lint
+ }// end of shift table
+};
+yacco2::Shift_entry S4ase_Co2_lcl_opt = {6,(State*)&S5_Co2_lcl_opt};
+yacco2::State S4_Co2_lcl_opt = //State's vectored into symbol: "Rspec_parm"
+{4
+,0,(Shift_entry*)&S4ase_Co2_lcl_opt
+,0,0,(Shift_tbl*)&S4st_Co2_lcl_opt,0,0,0,0};
+struct S5rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_lcl_opt S5rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opt,Co2_lcl_opt::rhs3_Rmust_lint_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_lcl_opt = //State's vectored into symbol: "|+|"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_lcl_opt,0,0,0};
+struct S6rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_lcl_opt S6rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opt,Co2_lcl_opt::rhs1_Rmust_lint_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_lcl_opt = //State's vectored into symbol: "x09"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_lcl_opt,0,0,0};
+struct S7rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Co2_lcl_opt S7rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opt,Co2_lcl_opt::rhs2_Rmust_lint_}
+ }// end of reduce table
+};
+yacco2::State S7_Co2_lcl_opt = //State's vectored into symbol: " "
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Co2_lcl_opt,0,0,0};
+struct S8rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_lcl_opt S8rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_lcl_opt,Co2_lcl_opt::rhs1_Ro2_lcl_opt_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_lcl_opt = //State's vectored into symbol: "Rmust_lint"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Co2_lcl_opt,0,0,0};
+struct S9rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Co2_lcl_opt S9rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs6_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S9_Co2_lcl_opt = //State's vectored into symbol: "|?|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Co2_lcl_opt,0,0,0};
+struct S10std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Co2_lcl_opt S10st_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {122,(State*)&S11_Co2_lcl_opt} // shift sym: raw_r
+ }// end of shift table
+};
+yacco2::State S10_Co2_lcl_opt = //State's vectored into symbol: "e"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Co2_lcl_opt,0,0,0,0};
+struct S11std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Co2_lcl_opt S11st_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {122,(State*)&S12_Co2_lcl_opt} // shift sym: raw_r
+ }// end of shift table
+};
+yacco2::State S11_Co2_lcl_opt = //State's vectored into symbol: "r"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Co2_lcl_opt,0,0,0,0};
+struct S12rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_lcl_opt S12rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs4_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_lcl_opt = //State's vectored into symbol: "r"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_lcl_opt,0,0,0};
+struct S13std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Co2_lcl_opt S13st_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {122,(State*)&S14_Co2_lcl_opt} // shift sym: raw_r
+ }// end of shift table
+};
+yacco2::State S13_Co2_lcl_opt = //State's vectored into symbol: "l"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Co2_lcl_opt,0,0,0,0};
+struct S14std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Co2_lcl_opt S14st_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {115,(State*)&S15_Co2_lcl_opt} // shift sym: raw_k
+ }// end of shift table
+};
+yacco2::State S14_Co2_lcl_opt = //State's vectored into symbol: "r"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Co2_lcl_opt,0,0,0,0};
+struct S15rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Co2_lcl_opt S15rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs5_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S15_Co2_lcl_opt = //State's vectored into symbol: "k"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Co2_lcl_opt,0,0,0};
+struct S16rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Co2_lcl_opt S16rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs2_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S16_Co2_lcl_opt = //State's vectored into symbol: "p"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Co2_lcl_opt,0,0,0};
+struct S17std_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Co2_lcl_opt S17st_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S18_Co2_lcl_opt} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S17_Co2_lcl_opt = //State's vectored into symbol: "r"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Co2_lcl_opt,0,0,0,0};
+struct S18rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Co2_lcl_opt S18rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs3_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S18_Co2_lcl_opt = //State's vectored into symbol: "c"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Co2_lcl_opt,0,0,0};
+struct S19rtd_Co2_lcl_opt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Co2_lcl_opt S19rt_Co2_lcl_opt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_lcl_opt,Co2_lcl_opt::rhs1_Rspec_parm_}
+ }// end of reduce table
+};
+yacco2::State S19_Co2_lcl_opt = //State's vectored into symbol: "t"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Co2_lcl_opt,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_linker_opts.cpp b/web/yacco2/compiler/grammars/o2_linker_opts.cpp
new file mode 100644
index 0000000000..207bdc1619
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_opts.cpp
@@ -0,0 +1,239 @@
+/*
+ File: o2_linker_opts.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_linker_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_linker_opts;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Co2_linker_opts::
+ Co2_linker_opts()
+ :yacco2::CAbs_fsm
+ ("o2_linker_opts.lex"
+ ,"1.0"
+ ,"21 Nov. 2002"
+ ,false
+ ,"\\Olinker's Command line options parser."
+ ,"Fri Jan 30 18:55:17 2015 "
+ ,S1_Co2_linker_opts){
+
+ file_to_compile_.clear();
+
+ }
+
+Co2_linker_opts::~Co2_linker_opts(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_linker_opts::failed(){
+ return false;
+ }
+ void Co2_linker_opts::op(){
+ parser__->set_use_all_shift_on();
+ file_to_compile_.clear();
+
+}
+int Co2_linker_opts::rhs_to_rules_mapping_[16] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,4 // subrule 11 for rule 5
+ ,5 // subrule 12 for rule 6
+ ,5 // subrule 13 for rule 6
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+};
+Ro2_lcl_opts::Ro2_lcl_opts(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ro2_lcl_opts",0,Co2_linker_opts::R_Ro2_lcl_opts_,P,false,false){
+}
+
+void Ro2_lcl_opts::op(){
+ sstrace_rulesss
+
+ TOKEN_GAGGLE* err_queue = (TOKEN_GAGGLE*)rule_info__.parser__->error_queue();
+ if(err_queue ->empty()) return;
+
+}
+Rextra_chaffe::Rextra_chaffe(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rextra_chaffe",0,Co2_linker_opts::R_Rextra_chaffe_,P,false,false){
+}
+
+void Rextra_chaffe::sr2(){
+
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_cmd_line_chaffe();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rws_k::Rws_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws_k",0,Co2_linker_opts::R_Rws_k_,P,false,false){
+}
+
+Rws_k_s::Rws_k_s(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws_k_s",0,Co2_linker_opts::R_Rws_k_s_,P,false,false){
+}
+
+Rws::Rws(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws",0,Co2_linker_opts::R_Rws_,P,false,false){
+}
+
+void Rws::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rws::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eol* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rws::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfile::Rfile(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfile",0,Co2_linker_opts::R_Rfile_,P,false,false){
+}
+
+void Rfile::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_unquoted_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_unquoted_string* uqstr = sf->p2__;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += uqstr->unquoted_string()->c_str();
+ edit_file(uqstr);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rfile::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rfile::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_xc_str* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_xc_str* xcstr = sf->p2__;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += xcstr->c_string()->c_str();
+ edit_file(xcstr);
+
+}
+
+void Rfile::sr4(){
+
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_no_filename();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_linker_opts.fsc b/web/yacco2/compiler/grammars/o2_linker_opts.fsc
new file mode 100644
index 0000000000..2584a61f41
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_opts.fsc
@@ -0,0 +1,30 @@
+/*
+ File: o2_linker_opts.fsc
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+transitive y
+grammar-name "o2_linker_opts"
+name-space "NS_o2_linker_opts"
+thread-name "Co2_linker_opts"
+monolithic y
+file-name "o2_linker_opts.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 5
+ NS_eol::TH_eol
+ NS_xc_str::TH_xc_str
+ NS_ws::TH_ws
+ NS_c_comments::TH_c_comments
+ NS_unq_str::TH_unq_str
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_c_comments::TH_c_comments
+ NS_eol::TH_eol
+ NS_unq_str::TH_unq_str
+ NS_ws::TH_ws
+ NS_xc_str::TH_xc_str
+end-list-of-used-threads
+fsm-comments
+"\\Olinker's Command line options parser."
diff --git a/web/yacco2/compiler/grammars/o2_linker_opts.h b/web/yacco2/compiler/grammars/o2_linker_opts.h
new file mode 100644
index 0000000000..7cb5882467
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_opts.h
@@ -0,0 +1,136 @@
+/*
+ File: o2_linker_opts.h
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#ifndef __o2_linker_opts_h__
+#define __o2_linker_opts_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "xc_str.h"
+#include "unq_str.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Co2_linker_opts;
+namespace NS_o2_linker_opts {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Co2_linker_opts: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ro2_lcl_opts_ = 569//start_of_rule_list + 0
+ ,rhs1_Ro2_lcl_opts_ = 1
+ ,R_Rextra_chaffe_ = 570//start_of_rule_list + 2
+ ,rhs1_Rextra_chaffe_ = 2
+ ,rhs2_Rextra_chaffe_ = 3
+ ,R_Rws_k_ = 571//start_of_rule_list + 4
+ ,rhs1_Rws_k_ = 4
+ ,rhs2_Rws_k_ = 5
+ ,R_Rws_k_s_ = 572//start_of_rule_list + 6
+ ,rhs1_Rws_k_s_ = 6
+ ,rhs2_Rws_k_s_ = 7
+ ,R_Rws_ = 573//start_of_rule_list + 8
+ ,rhs1_Rws_ = 8
+ ,rhs2_Rws_ = 9
+ ,rhs3_Rws_ = 10
+ ,rhs4_Rws_ = 11
+ ,R_Rfile_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfile_ = 12
+ ,rhs2_Rfile_ = 13
+ ,rhs3_Rfile_ = 14
+ ,rhs4_Rfile_ = 15
+ };
+ //no of la sets = 3
+ //no of states = 20
+ Co2_linker_opts();
+ ~Co2_linker_opts();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[16];
+
+ public:
+ std::string file_to_compile_;
+
+ };
+struct Ro2_lcl_opts;
+struct Rextra_chaffe;
+struct Rws_k;
+struct Rws_k_s;
+struct Rws;
+struct Rfile;
+struct Ro2_lcl_opts:public yacco2::CAbs_lr1_sym {
+ Ro2_lcl_opts(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rextra_chaffe:public yacco2::CAbs_lr1_sym {
+ Rextra_chaffe(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rws_k:public yacco2::CAbs_lr1_sym {
+ Rws_k(yacco2::Parser* P);
+ public:
+};
+
+struct Rws_k_s:public yacco2::CAbs_lr1_sym {
+ Rws_k_s(yacco2::Parser* P);
+ public:
+};
+
+struct Rws:public yacco2::CAbs_lr1_sym {
+ Rws(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rfile:public yacco2::CAbs_lr1_sym {
+ Rfile(yacco2::Parser* P);
+
+ public:
+ void edit_file(CAbs_lr1_sym* Sym){
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_k_symbols;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ std::ifstream ifile;
+ ifile.open(fsm->file_to_compile_.c_str());
+ if (ifile.good()){
+ ifile.close();
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_filename(fsm->file_to_compile_);
+ sym->set_rc(*Sym,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ };
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_linker_opts.lex b/web/yacco2/compiler/grammars/o2_linker_opts.lex
new file mode 100644
index 0000000000..9597a5931d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_opts.lex
@@ -0,0 +1,166 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_linker_opts.lex
+Dates: 2 mar. 2005
+Purpose: yacco2's linker frontend command line parser.
+ The argv[] data passed by "int main(int argc, char* argv[])" is
+ mapped into raw char tokens and placed into a container
+ for lexical assessment.
+Cmd Format: file name
+Errors: "comment-overrun", "bad-eos", "bad-esc",
+ "bad-cmd-lne-opt", "no-int-present", "bad-int-no-range"
+ "bad-cmd-opt"
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |o2_linker_opts| grammar.\fbreak
+\O2's linker frontend command line parser.
+The argv[] data passed by ``int main(int argc, char* argv[])'' is
+mapped into raw char tokens and placed into a container
+for lexical assessment. c++ comments can be sprinkled thru out the command line.
+There are no options for the linker just the ``fsc'' extension file.
+For example, to process \O2's grammars the linker command line is\fbreak
+/usr/local/yacco2/bin/o2linker /yacco2/compiler/grammars/yacco2.fsc\fbreak
+@/
+
+fsm
+(fsm-id "o2_linker_opts.lex",fsm-filename o2_linker_opts,fsm-namespace NS_o2_linker_opts
+,fsm-class Co2_linker_opts {
+ user-declaration
+ public:
+ std::string file_to_compile_;
+ ***
+ user-prefix-declaration
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "xc_str.h"
+#include "unq_str.h"
+ ***
+ op
+ parser__->set_use_all_shift_on();
+ file_to_compile_.clear();
+ ***
+ constructor
+ file_to_compile_.clear();
+ ***
+}
+,fsm-version "1.0",fsm-date "21 Nov. 2002",fsm-debug "false"
+,fsm-comments "\\Olinker's Command line options parser.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ro2_lcl_opts (
+lhs{
+ op
+ TOKEN_GAGGLE* err_queue = (TOKEN_GAGGLE*)rule_info__.parser__->error_queue();
+ if(err_queue ->empty()) return;
+ ***
+}
+){
+ -> Rws_k Rfile Rws_k Rextra_chaffe
+}
+
+Rextra_chaffe (){
+ -> eog
+ -> |?|{
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_cmd_line_chaffe();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rws_k (){
+ ->
+ -> Rws_k_s
+}
+
+Rws_k_s (){
+ -> Rws
+ -> Rws_k_s Rws
+}
+
+Rws (){
+ -> ||| "ws" NS_ws::TH_ws
+ -> ||| "comment" NS_c_comments::TH_c_comments {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "eol" NS_eol::TH_eol {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfile (
+lhs{
+ user-declaration
+ public:
+ void edit_file(CAbs_lr1_sym* Sym){
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_k_symbols;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ std::ifstream ifile;
+ ifile.open(fsm->file_to_compile_.c_str());
+ if (ifile.good()){
+ ifile.close();
+ return;
+ }
+ CAbs_lr1_sym* sym = new Err_bad_filename(fsm->file_to_compile_);
+ sym->set_rc(*Sym,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ };
+ ***
+}
+){
+ -> ||| "unquoted-string" NS_unq_str::TH_unq_str {
+ op
+ T_unquoted_string* uqstr = sf->p2__;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += uqstr->unquoted_string()->c_str();
+ edit_file(uqstr);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "xc-str" NS_xc_str::TH_xc_str {
+ op
+ T_xc_str* xcstr = sf->p2__;
+ Co2_linker_opts* fsm = (Co2_linker_opts*)rule_info__.parser__->fsm_tbl__;
+ fsm->file_to_compile_ += xcstr->c_string()->c_str();
+ edit_file(xcstr);
+ ***
+ }
+ -> |?| { // no file given
+ op
+ rule_info__.parser__->set_use_all_shift_off();
+ CAbs_lr1_sym* sym = new Err_no_filename();
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_linker_optssym.cpp b/web/yacco2/compiler/grammars/o2_linker_optssym.cpp
new file mode 100644
index 0000000000..ba307bdb39
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_optssym.cpp
@@ -0,0 +1,246 @@
+/*
+ File: o2_linker_optssym.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_linker_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_linker_opts;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Co2_linker_opts::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ro2_lcl_opts_:{
+ Ro2_lcl_opts* sym;
+ if(re->rule_ == 0){
+ sym = new Ro2_lcl_opts(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ro2_lcl_opts*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rextra_chaffe_:{
+ Rextra_chaffe* sym;
+ if(re->rule_ == 0){
+ sym = new Rextra_chaffe(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rextra_chaffe*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rextra_chaffe_:{
+ Rextra_chaffe* sym;
+ if(re->rule_ == 0){
+ sym = new Rextra_chaffe(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rextra_chaffe*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rws_k_:{
+ Rws_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rws_k_:{
+ Rws_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rws_k_s_:{
+ Rws_k_s* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k_s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k_s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rws_k_s_:{
+ Rws_k_s* sym;
+ if(re->rule_ == 0){
+ sym = new Rws_k_s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws_k_s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfile_:{
+ Rfile* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_linker_optstbl.cpp b/web/yacco2/compiler/grammars/o2_linker_optstbl.cpp
new file mode 100644
index 0000000000..8da120b308
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_linker_optstbl.cpp
@@ -0,0 +1,420 @@
+/*
+ File: o2_linker_optstbl.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_linker_opts.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_linker_opts;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_eog
+// LR1_reduce_operator
+yacco2::UCHAR LA1_Co2_linker_opts[] ={
+1
+,0,19
+};
+// LR1_questionable_shift_operator
+// LR1_eog
+yacco2::UCHAR LA2_Co2_linker_opts[] ={
+1
+,0,3
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Co2_linker_opts[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Co2_linker_opts;
+extern yacco2::State S2_Co2_linker_opts;
+struct S2ttd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S2ttd_Co2_linker_opts S2tt_Co2_linker_opts = {
+ 3 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_ws
+};
+extern yacco2::State S3_Co2_linker_opts;
+extern yacco2::State S4_Co2_linker_opts;
+extern yacco2::State S5_Co2_linker_opts;
+extern yacco2::State S6_Co2_linker_opts;
+extern yacco2::State S7_Co2_linker_opts;
+extern yacco2::State S8_Co2_linker_opts;
+extern yacco2::State S9_Co2_linker_opts;
+extern yacco2::State S10_Co2_linker_opts;
+extern yacco2::State S11_Co2_linker_opts;
+extern yacco2::State S12_Co2_linker_opts;
+extern yacco2::State S13_Co2_linker_opts;
+extern yacco2::State S14_Co2_linker_opts;
+extern yacco2::State S15_Co2_linker_opts;
+extern yacco2::State S16_Co2_linker_opts;
+extern yacco2::State S17_Co2_linker_opts;
+struct S17ttd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S17ttd_Co2_linker_opts S17tt_Co2_linker_opts = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_xc_str
+ ,(yacco2::Thread_entry*)&ITH_unq_str
+};
+extern yacco2::State S18_Co2_linker_opts;
+extern yacco2::State S19_Co2_linker_opts;
+extern yacco2::State S20_Co2_linker_opts;
+struct S1std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Co2_linker_opts S1st_Co2_linker_opts = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_linker_opts} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Co2_linker_opts} // accept sym: Ro2_lcl_opts
+ ,{571,(State*)&S7_Co2_linker_opts} // shift sym: Rws_k
+ ,{572,(State*)&S13_Co2_linker_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S15_Co2_linker_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Co2_linker_opts = {3,(State*)&S2_Co2_linker_opts};
+struct S1rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Co2_linker_opts S1rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S1_Co2_linker_opts = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Co2_linker_opts,0,0,0,(Shift_tbl*)&S1st_Co2_linker_opts,(Reduce_tbl*)&S1rt_Co2_linker_opts,(State_s_thread_tbl*)&S2tt_Co2_linker_opts,0,0};
+struct S2std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S2std_Co2_linker_opts S2st_Co2_linker_opts = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S3_Co2_linker_opts} // shift sym: LR1_questionable_shift_operator
+ ,{268,(State*)&S4_Co2_linker_opts} // shift sym: T_eol
+ ,{271,(State*)&S5_Co2_linker_opts} // shift sym: T_comment
+ ,{272,(State*)&S6_Co2_linker_opts} // shift sym: T_ws
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Co2_linker_opts = {0,(State*)&S3_Co2_linker_opts};
+yacco2::State S2_Co2_linker_opts = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Co2_linker_opts,0,0,0,(Shift_entry*)&S2qse_Co2_linker_opts
+};
+struct S3rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Co2_linker_opts S3rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs4_Rws_}
+ }// end of reduce table
+};
+yacco2::State S3_Co2_linker_opts = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Co2_linker_opts,0,0,0};
+struct S4rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Co2_linker_opts S4rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs3_Rws_}
+ }// end of reduce table
+};
+yacco2::State S4_Co2_linker_opts = //State's vectored into symbol: "eol"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Co2_linker_opts,0,0,0};
+struct S5rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_linker_opts S5rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs2_Rws_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_linker_opts = //State's vectored into symbol: "comment"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_linker_opts,0,0,0};
+struct S6rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_linker_opts S6rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs1_Rws_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_linker_opts = //State's vectored into symbol: "ws"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_linker_opts,0,0,0};
+struct S7std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Co2_linker_opts S7st_Co2_linker_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S16_Co2_linker_opts} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S17_Co2_linker_opts} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S8_Co2_linker_opts} // shift sym: Rfile
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Co2_linker_opts = {3,(State*)&S17_Co2_linker_opts};
+yacco2::Shift_entry S7qse_Co2_linker_opts = {0,(State*)&S16_Co2_linker_opts};
+yacco2::State S7_Co2_linker_opts = //State's vectored into symbol: "Rws_k"
+{7
+,(Shift_entry*)&S7pse_Co2_linker_opts,0,0,0,(Shift_tbl*)&S7st_Co2_linker_opts,0,(State_s_thread_tbl*)&S17tt_Co2_linker_opts,0,(Shift_entry*)&S7qse_Co2_linker_opts
+};
+struct S8std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Co2_linker_opts S8st_Co2_linker_opts = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_linker_opts} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S9_Co2_linker_opts} // shift sym: Rws_k
+ ,{572,(State*)&S13_Co2_linker_opts} // shift sym: Rws_k_s
+ ,{573,(State*)&S15_Co2_linker_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S8pse_Co2_linker_opts = {3,(State*)&S2_Co2_linker_opts};
+struct S8rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_linker_opts S8rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_linker_opts,Co2_linker_opts::rhs1_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_linker_opts = //State's vectored into symbol: "Rfile"
+{8
+,(Shift_entry*)&S8pse_Co2_linker_opts,0,0,0,(Shift_tbl*)&S8st_Co2_linker_opts,(Reduce_tbl*)&S8rt_Co2_linker_opts,(State_s_thread_tbl*)&S2tt_Co2_linker_opts,0,0};
+struct S9std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Co2_linker_opts S9st_Co2_linker_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S10_Co2_linker_opts} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S11_Co2_linker_opts} // shift sym: LR1_eog
+ ,{570,(State*)&S12_Co2_linker_opts} // shift sym: Rextra_chaffe
+ }// end of shift table
+};
+yacco2::Shift_entry S9qse_Co2_linker_opts = {0,(State*)&S10_Co2_linker_opts};
+yacco2::State S9_Co2_linker_opts = //State's vectored into symbol: "Rws_k"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Co2_linker_opts,0,0,0,(Shift_entry*)&S9qse_Co2_linker_opts
+};
+struct S10rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Co2_linker_opts S10rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_linker_opts,Co2_linker_opts::rhs2_Rextra_chaffe_}
+ }// end of reduce table
+};
+yacco2::State S10_Co2_linker_opts = //State's vectored into symbol: "|?|"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Co2_linker_opts,0,0,0};
+struct S11rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Co2_linker_opts S11rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_linker_opts,Co2_linker_opts::rhs1_Rextra_chaffe_}
+ }// end of reduce table
+};
+yacco2::State S11_Co2_linker_opts = //State's vectored into symbol: "eog"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Co2_linker_opts,0,0,0};
+struct S12rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_linker_opts S12rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Co2_linker_opts,Co2_linker_opts::rhs1_Ro2_lcl_opts_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_linker_opts = //State's vectored into symbol: "Rextra_chaffe"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_linker_opts,0,0,0};
+struct S13std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S13std_Co2_linker_opts S13st_Co2_linker_opts = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_linker_opts} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S14_Co2_linker_opts} // shift sym: Rws
+ }// end of shift table
+};
+yacco2::Shift_entry S13pse_Co2_linker_opts = {3,(State*)&S2_Co2_linker_opts};
+struct S13rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Co2_linker_opts S13rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs2_Rws_k_}
+ }// end of reduce table
+};
+yacco2::State S13_Co2_linker_opts = //State's vectored into symbol: "Rws_k_s"
+{13
+,(Shift_entry*)&S13pse_Co2_linker_opts,0,0,0,(Shift_tbl*)&S13st_Co2_linker_opts,(Reduce_tbl*)&S13rt_Co2_linker_opts,(State_s_thread_tbl*)&S2tt_Co2_linker_opts,0,0};
+struct S14rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Co2_linker_opts S14rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs2_Rws_k_s_}
+ }// end of reduce table
+};
+yacco2::State S14_Co2_linker_opts = //State's vectored into symbol: "Rws"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Co2_linker_opts,0,0,0};
+struct S15rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Co2_linker_opts S15rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs1_Rws_k_s_}
+ }// end of reduce table
+};
+yacco2::State S15_Co2_linker_opts = //State's vectored into symbol: "Rws"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Co2_linker_opts,0,0,0};
+struct S16rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Co2_linker_opts S16rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs4_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S16_Co2_linker_opts = //State's vectored into symbol: "|?|"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Co2_linker_opts,0,0,0};
+struct S17std_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Co2_linker_opts S17st_Co2_linker_opts = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S18_Co2_linker_opts} // shift sym: LR1_questionable_shift_operator
+ ,{276,(State*)&S19_Co2_linker_opts} // shift sym: T_xc_str
+ ,{277,(State*)&S20_Co2_linker_opts} // shift sym: T_unquoted_string
+ }// end of shift table
+};
+yacco2::Shift_entry S17qse_Co2_linker_opts = {0,(State*)&S18_Co2_linker_opts};
+yacco2::State S17_Co2_linker_opts = //State's vectored into symbol: "|||"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Co2_linker_opts,0,0,0,(Shift_entry*)&S17qse_Co2_linker_opts
+};
+struct S18rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Co2_linker_opts S18rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs2_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S18_Co2_linker_opts = //State's vectored into symbol: "|?|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Co2_linker_opts,0,0,0};
+struct S19rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Co2_linker_opts S19rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs3_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S19_Co2_linker_opts = //State's vectored into symbol: "xc-str"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Co2_linker_opts,0,0,0};
+struct S20rtd_Co2_linker_opts{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Co2_linker_opts S20rt_Co2_linker_opts = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_linker_opts,Co2_linker_opts::rhs1_Rfile_}
+ }// end of reduce table
+};
+yacco2::State S20_Co2_linker_opts = //State's vectored into symbol: "unquoted-string"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Co2_linker_opts,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2_sdc.cpp b/web/yacco2/compiler/grammars/o2_sdc.cpp
new file mode 100644
index 0000000000..219d2da6fc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdc.cpp
@@ -0,0 +1,310 @@
+/*
+ File: o2_sdc.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_sdc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Co2_sdc::
+ Co2_sdc()
+ :yacco2::CAbs_fsm
+ ("o2_sdc.lex"
+ ,"1.0"
+ ,"30 dec 2002"
+ ,false
+ ,"\\O2's syntax directed code extractor."
+ ,"Fri Jan 30 18:55:17 2015 "
+ ,S1_Co2_sdc){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Co2_sdc::~Co2_sdc(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Co2_sdc::failed(){
+ return false;
+ }
+ void Co2_sdc::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ parser__->set_use_all_shift_on();
+ CAbs_lr1_sym* sym = parser__->start_token__;
+ switch (sym->enumerated_id__){
+
+ case T_Enum::T_LR1_eog_: break;
+ default: return;
+ }
+ parser__->set_use_all_shift_off();
+
+}
+int Co2_sdc::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+};
+
+ void Co2_sdc::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+ void Co2_sdc::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Ryacco2_syntax_code::Ryacco2_syntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ryacco2_syntax_code",0,Co2_sdc::R_Ryacco2_syntax_code_,P,false,false){
+}
+
+void Ryacco2_syntax_code::op(){
+ sstrace_rulesss
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ if(fsm->ddd_idx_ == 0){
+ sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ sym = new T_syntax_code((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+Rchrs::Rchrs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchrs",0,Co2_sdc::R_Rchrs_,P,false,false){
+}
+
+Rchr::Rchr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchr",0,Co2_sdc::R_Rchr_,P,false,false){
+}
+
+void Rchr::op(){
+ sstrace_rulesss
+
+ if(rule_info__.parser__->stop_parse__ == true) return;
+ CAbs_lr1_sym* la_sym = rule_info__.parser__->current_token();
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ // watch for overrun
+ if(la_sym->enumerated_id__ == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_no_end_of_code;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+void Rchr::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->copy_str_into_buffer(k->comment_data());
+
+}
+
+void Rchr::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ if(PRT_SW == 'n') return;// bypass the cweve comments in the cpp code
+ fsm->copy_str_into_buffer(k->comment_data());
+ string fmt("@<More code@>+=\n");
+ fsm->copy_str_into_buffer(&fmt);
+
+}
+
+void Rchr::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_c_string* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding double quotes
+ fsm->ddd_[fsm->ddd_idx_] = '"';
+ ++fsm->ddd_idx_;
+ fsm->copy_str_into_buffer(k->c_string());
+ fsm->ddd_[fsm->ddd_idx_] = '"';
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+
+void Rchr::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_literal* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_c_literal* k = sf->p2__;
+ k->set_auto_delete(true);
+ // add back the bounding single quotes
+ fsm->ddd_[fsm->ddd_idx_] = '\'';
+ ++fsm->ddd_idx_;
+ fsm->copy_str_into_buffer(k->c_literal());
+ fsm->ddd_[fsm->ddd_idx_] = '\'';
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+
+}
+
+void Rchr::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eocode* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_use_all_shift_off();
+
+}
+
+void Rchr::sr6(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* k = sf->p1__;
+ switch (k->enumerated_id__){
+ case T_Enum::T_LR1_eog_:{
+ rule_info__.parser__->set_use_all_shift_off();
+ break;
+ }
+ case T_Enum::T_T_eol_:{
+ fsm->copy_kstr_into_buffer("\n");
+ break;
+ }
+ case T_Enum::T_raw_sp_:{
+ fsm->copy_kstr_into_buffer(" ");
+ break;
+ }
+ case T_Enum::T_raw_ff_:{
+ fsm->copy_kstr_into_buffer("\f");
+ break;
+ }
+ case T_Enum::T_raw_vt_:{
+ fsm->copy_kstr_into_buffer("\v");
+ break;
+ }
+ case T_Enum::T_raw_ht_:{
+ fsm->copy_kstr_into_buffer("\t");
+ break;
+ }
+ default:{
+ fsm->ddd_[fsm->ddd_idx_] = k->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ }
+ }
+
+}
+
+void Rchr::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/o2_sdc.fsc b/web/yacco2/compiler/grammars/o2_sdc.fsc
new file mode 100644
index 0000000000..4fb70fcc68
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdc.fsc
@@ -0,0 +1,28 @@
+/*
+ File: o2_sdc.fsc
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+transitive y
+grammar-name "o2_sdc"
+name-space "NS_o2_sdc"
+thread-name "TH_o2_sdc"
+monolithic n
+file-name "o2_sdc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_all_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 4
+ NS_o2_code_end::TH_o2_code_end
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_c_string::TH_c_string
+ NS_c_literal::TH_c_literal
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_c_literal::TH_c_literal
+ NS_c_string::TH_c_string
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_o2_code_end::TH_o2_code_end
+end-list-of-used-threads
+fsm-comments
+"\\O2's syntax directed code extractor."
diff --git a/web/yacco2/compiler/grammars/o2_sdc.h b/web/yacco2/compiler/grammars/o2_sdc.h
new file mode 100644
index 0000000000..599feca48e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdc.h
@@ -0,0 +1,100 @@
+/*
+ File: o2_sdc.h
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#ifndef __o2_sdc_h__
+#define __o2_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "cweb_or_c_k.h"
+#include "c_string.h"
+#include "c_literal.h"
+#include "o2_code_end.h"
+extern char PRT_SW;
+
+extern yacco2::Thread_entry ITH_o2_sdc;
+
+extern yacco2::State S1_Co2_sdc;
+namespace NS_o2_sdc {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_o2_sdc(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_o2_sdc(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Co2_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ryacco2_syntax_code_ = 569//start_of_rule_list + 0
+ ,rhs1_Ryacco2_syntax_code_ = 1
+ ,R_Rchrs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rchrs_ = 2
+ ,rhs2_Rchrs_ = 3
+ ,R_Rchr_ = 571//start_of_rule_list + 4
+ ,rhs1_Rchr_ = 4
+ ,rhs2_Rchr_ = 5
+ ,rhs3_Rchr_ = 6
+ ,rhs4_Rchr_ = 7
+ ,rhs5_Rchr_ = 8
+ ,rhs6_Rchr_ = 9
+ ,rhs7_Rchr_ = 10
+ };
+ //no of la sets = 2
+ //no of states = 12
+ Co2_sdc();
+ ~Co2_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Ryacco2_syntax_code;
+struct Rchrs;
+struct Rchr;
+struct Ryacco2_syntax_code:public yacco2::CAbs_lr1_sym {
+ Ryacco2_syntax_code(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rchrs:public yacco2::CAbs_lr1_sym {
+ Rchrs(yacco2::Parser* P);
+ public:
+};
+
+struct Rchr:public yacco2::CAbs_lr1_sym {
+ Rchr(yacco2::Parser* P);
+ void op();
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/o2_sdc.lex b/web/yacco2/compiler/grammars/o2_sdc.lex
new file mode 100644
index 0000000000..aa19daefb9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdc.lex
@@ -0,0 +1,257 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_sdc.lex
+dates: 3 Jan.2003
+Purpose: Extract yacco2's syntax directed code
+conduit: syntax_code
+errors: Err_no_end_of_code
+ Err_comment_overrun
+ Err_bad_eos
+ Err_bad_esc
+ Err_no_syntax_code_present
+
+Note: A simple test is done as to whether there is any real
+ syntax directed code is inputted:
+ only strings, literals, or chrs (not {eol, ws}) are
+ considered code.
+
+ Due to the overhead of strings and their copy facility,
+ I've changed to the raw string copy with a fixed buffer size.
+ The saftey and flexibility had too much cost to run:
+ approximately 10 seconds of overhead on approximately 100k
+ of text. Looking at the way the string was grown out when
+ characters were appended to it demanded that I use this approach.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |o2_sdc| Thread.\fbreak
+A single crawler of characters scooping up a grammar directive's
+syntax directed code.
+Added to it is ``cweb'' comment support.
+This allows the grammar document to support better
+code formatting particularly when
+the ``syntax directed code'' is big.
+The caveat is the emitted cpp code when
+``-p'' option is on contains
+the ``cweave'' formatting directives and bypassed when not to
+generate the grammar document.
+So be warned.
+Generate the cpp code without the ``-p'' option
+to avoid the c++ errors.
+@/
+fsm
+(fsm-id "o2_sdc.lex",fsm-filename o2_sdc,fsm-namespace NS_o2_sdc
+,fsm-class Co2_sdc{
+ user-prefix-declaration
+#include "cweb_or_c_k.h"
+#include "c_string.h"
+#include "c_literal.h"
+#include "o2_code_end.h"
+extern char PRT_SW;
+ ***
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Co2_sdc::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+/@
+@*3 |copy_kstr_into_buffer|.
+@/
+ void Co2_sdc::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ parser__->set_use_all_shift_on();
+ CAbs_lr1_sym* sym = parser__->start_token__;
+ switch (sym->enumerated_id__){
+
+ case T_Enum::T_LR1_eog_: break;
+ default: return;
+ }
+ parser__->set_use_all_shift_off();
+ ***
+ }
+,fsm-version "1.0",fsm-date "30 dec 2002",fsm-debug "false"
+,fsm-comments "\\O2's syntax directed code extractor.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_o2_sdc
+ ***
+ parallel-la-boundary
+ eolr - |+| - |||
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Ryacco2_syntax_code (
+lhs{
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym(0);
+ if(fsm->ddd_idx_ == 0){
+ sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ sym = new T_syntax_code((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+){
+ -> Rchrs
+}
+
+Rchrs (){
+ -> Rchr
+ -> Rchrs Rchr
+}
+
+Rchr (
+lhs {
+ op
+ if(rule_info__.parser__->stop_parse__ == true) return;
+ CAbs_lr1_sym* la_sym = rule_info__.parser__->current_token();
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ // watch for overrun
+ if(la_sym->enumerated_id__ == T_Enum::T_LR1_eog_){
+ CAbs_lr1_sym* sym = new Err_no_end_of_code;
+ sym->set_rc(*la_sym,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+}
+){
+
+ -> ||| "comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ fsm->copy_str_into_buffer(k->comment_data());
+ ***
+ }
+ -> ||| "cweb-comment" NULL {
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ if(PRT_SW == 'n') return;// bypass the cweve comments in the cpp code
+ fsm->copy_str_into_buffer(k->comment_data());
+ string fmt("@<More code@>+=\n");
+ fsm->copy_str_into_buffer(&fmt);
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_c_string* k = sf->p2__;
+ k->set_auto_delete(true);// delete it when it pops from stack
+ // add back the bounding double quotes
+ fsm->ddd_[fsm->ddd_idx_] = '"';
+ ++fsm->ddd_idx_;
+ fsm->copy_str_into_buffer(k->c_string());
+ fsm->ddd_[fsm->ddd_idx_] = '"';
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+ -> ||| "c-literal" NS_c_literal::TH_c_literal{
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ T_c_literal* k = sf->p2__;
+ k->set_auto_delete(true);
+ // add back the bounding single quotes
+ fsm->ddd_[fsm->ddd_idx_] = '\'';
+ ++fsm->ddd_idx_;
+ fsm->copy_str_into_buffer(k->c_literal());
+ fsm->ddd_[fsm->ddd_idx_] = '\'';
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ ***
+ }
+ -> ||| "#***" NS_o2_code_end::TH_o2_code_end{
+ op
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_use_all_shift_off();
+ ***
+ }
+ -> |+| {
+
+ /@
+ Add balance of characters to sdcode string: ex. comma.
+ Special escape sequences are put back to their original declaration.
+ @/
+
+ op
+ Co2_sdc* fsm = (Co2_sdc*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* k = sf->p1__;
+ switch (k->enumerated_id__){
+ case T_Enum::T_LR1_eog_:{
+ rule_info__.parser__->set_use_all_shift_off();
+ break;
+ }
+ case T_Enum::T_T_eol_:{
+ fsm->copy_kstr_into_buffer("\n");
+ break;
+ }
+ case T_Enum::T_raw_sp_:{
+ fsm->copy_kstr_into_buffer(" ");
+ break;
+ }
+ case T_Enum::T_raw_ff_:{
+ fsm->copy_kstr_into_buffer("\f");
+ break;
+ }
+ case T_Enum::T_raw_vt_:{
+ fsm->copy_kstr_into_buffer("\v");
+ break;
+ }
+ case T_Enum::T_raw_ht_:{
+ fsm->copy_kstr_into_buffer("\t");
+ break;
+ }
+ default:{
+ fsm->ddd_[fsm->ddd_idx_] = k->id__[0];
+ ++fsm->ddd_idx_;
+ fsm->ddd_[fsm->ddd_idx_] = 0;
+ }
+ }
+ ***
+ }
+ -> ||| |?| NULL {// errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/o2_sdcsym.cpp b/web/yacco2/compiler/grammars/o2_sdcsym.cpp
new file mode 100644
index 0000000000..04fdb11176
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdcsym.cpp
@@ -0,0 +1,203 @@
+/*
+ File: o2_sdcsym.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_sdc;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_o2_sdc::TH_o2_sdc(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_o2_sdc;
+ NS_o2_sdc::Co2_sdc Co2_sdc_;// parallel-parser's parse table
+#define ssPARSE_TABLE Co2_sdc_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_o2_sdc::PROC_TH_o2_sdc(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_o2_sdc";
+ static bool one_time(false);
+ static NS_o2_sdc::Co2_sdc* NS_o2_sdc_Co2_sdc_(0);// parallel-parser's fsm table
+ static Parser* NS_o2_sdc_Co2_sdc_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_o2_sdc_Co2_sdc_ = new NS_o2_sdc::Co2_sdc();// parallel-parser's fsm table
+ NS_o2_sdc_Co2_sdc_parser = new Parser(*NS_o2_sdc_Co2_sdc_,Caller_pp);
+ }
+ proc_parser = NS_o2_sdc_Co2_sdc_parser;
+#include "wproc_pp_core.h"
+}
+void
+Co2_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ryacco2_syntax_code_:{
+ Ryacco2_syntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Ryacco2_syntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ryacco2_syntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs7_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/o2_sdctbl.cpp b/web/yacco2/compiler/grammars/o2_sdctbl.cpp
new file mode 100644
index 0000000000..b1eeba5e7d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2_sdctbl.cpp
@@ -0,0 +1,1514 @@
+/*
+ File: o2_sdctbl.cpp
+ Date and Time: Fri Jan 30 18:55:17 2015
+*/
+#include "o2_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_sdc;// grammar's ns
+// first set terminals
+// LR1_eog
+// LR1_reduce_operator
+// LR1_all_shift_operator
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+yacco2::UCHAR LA1_Co2_sdc[] ={
+72
+,0,82
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+yacco2::UCHAR LA2_Co2_sdc[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Co2_sdc;
+extern yacco2::State S2_Co2_sdc;
+struct S2ttd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[4];
+};
+S2ttd_Co2_sdc S2tt_Co2_sdc = {
+ 4 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+ ,(yacco2::Thread_entry*)&ITH_c_literal
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_o2_code_end
+};
+extern yacco2::State S3_Co2_sdc;
+extern yacco2::State S4_Co2_sdc;
+extern yacco2::State S5_Co2_sdc;
+extern yacco2::State S6_Co2_sdc;
+extern yacco2::State S7_Co2_sdc;
+extern yacco2::State S8_Co2_sdc;
+extern yacco2::State S9_Co2_sdc;
+extern yacco2::State S10_Co2_sdc;
+extern yacco2::State S11_Co2_sdc;
+extern yacco2::State S12_Co2_sdc;
+struct S1std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Co2_sdc S1st_Co2_sdc = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_sdc} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Co2_sdc} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Co2_sdc} // accept sym: Ryacco2_syntax_code
+ ,{570,(State*)&S10_Co2_sdc} // shift sym: Rchrs
+ ,{571,(State*)&S12_Co2_sdc} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Co2_sdc = {3,(State*)&S2_Co2_sdc};
+yacco2::Shift_entry S1ase_Co2_sdc = {6,(State*)&S9_Co2_sdc};
+yacco2::State S1_Co2_sdc = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Co2_sdc,(Shift_entry*)&S1ase_Co2_sdc
+,0,0,(Shift_tbl*)&S1st_Co2_sdc,0,(State_s_thread_tbl*)&S2tt_Co2_sdc,0,0};
+struct S2std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S2std_Co2_sdc S2st_Co2_sdc = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S3_Co2_sdc} // shift sym: LR1_questionable_shift_operator
+ ,{271,(State*)&S4_Co2_sdc} // shift sym: T_comment
+ ,{274,(State*)&S5_Co2_sdc} // shift sym: T_c_literal
+ ,{275,(State*)&S6_Co2_sdc} // shift sym: T_c_string
+ ,{284,(State*)&S7_Co2_sdc} // shift sym: T_eocode
+ ,{372,(State*)&S8_Co2_sdc} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Co2_sdc = {0,(State*)&S3_Co2_sdc};
+yacco2::State S2_Co2_sdc = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Co2_sdc,0,0,0,(Shift_entry*)&S2qse_Co2_sdc
+};
+struct S3rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Co2_sdc S3rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs7_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S3_Co2_sdc = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Co2_sdc,0,0,0};
+struct S4rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Co2_sdc S4rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs1_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S4_Co2_sdc = //State's vectored into symbol: "comment"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Co2_sdc,0,0,0};
+struct S5rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_sdc S5rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs4_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_sdc = //State's vectored into symbol: "c-literal"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_sdc,0,0,0};
+struct S6rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_sdc S6rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs3_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_sdc = //State's vectored into symbol: "c-string"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_sdc,0,0,0};
+struct S7rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Co2_sdc S7rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs5_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S7_Co2_sdc = //State's vectored into symbol: "#***"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Co2_sdc,0,0,0};
+struct S8rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_sdc S8rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs2_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_sdc = //State's vectored into symbol: "cweb-comment"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Co2_sdc,0,0,0};
+struct S9rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Co2_sdc S9rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs6_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S9_Co2_sdc = //State's vectored into symbol: "|+|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Co2_sdc,0,0,0};
+struct S10std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Co2_sdc S10st_Co2_sdc = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_sdc} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Co2_sdc} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S11_Co2_sdc} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Co2_sdc = {3,(State*)&S2_Co2_sdc};
+yacco2::Shift_entry S10ase_Co2_sdc = {6,(State*)&S9_Co2_sdc};
+struct S10rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Co2_sdc S10rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_sdc,Co2_sdc::rhs1_Ryacco2_syntax_code_}
+ }// end of reduce table
+};
+yacco2::State S10_Co2_sdc = //State's vectored into symbol: "Rchrs"
+{10
+,(Shift_entry*)&S10pse_Co2_sdc,(Shift_entry*)&S10ase_Co2_sdc
+,0,0,(Shift_tbl*)&S10st_Co2_sdc,(Reduce_tbl*)&S10rt_Co2_sdc,(State_s_thread_tbl*)&S2tt_Co2_sdc,0,0};
+struct S11rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Co2_sdc S11rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs2_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S11_Co2_sdc = //State's vectored into symbol: "Rchr"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Co2_sdc,0,0,0};
+struct S12rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_sdc S12rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs1_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_sdc = //State's vectored into symbol: "Rchr"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_sdc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/o2grammars.sh b/web/yacco2/compiler/grammars/o2grammars.sh
new file mode 100755
index 0000000000..e21c94364d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2grammars.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+#file: o2grammars.sh
+#compile all o2 grammars
+#o2=/mnt/c2d0s0/yacco2/bin/o2
+# no parms: just gen c++ code per grammar
+# parms: -t -err # to also gen Tes or Errors vocabulary
+# parms: -p # gen grammar's pdf and ps documents
+o2=/usr/local/yacco2/bin/o2
+###o2=/yacco2/bin/o2
+dir_only=`pwd` #"/usr/local/yacco2/compiler/grammars"
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+
+delete_files=1 #clean up the work files in /tmp
+
+sw1=$1
+sw2=$2
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ file_name_only="`basename $2`"
+ #dir_only=`pwd` #"/usr/local/yacco2/compiler/grammars"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ #echo "%%%%%%%%%%%%%%%%basename $file_name_only"
+ if ! eval "$o2 $sw1 $sw2 $1"
+ then
+ echo "===================> grammar in error: $1 switch(es): $sw1 $sw2";
+ return;
+ fi
+ for j in $sw1 $sw2
+ do
+ case $j in
+ *p)
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ eval "pdftex $file_name_only.tex"
+ xref="$file_name_only""_idx"
+ #echo "%%%%%%%%%%%%%%%%% index file: $xref to cweave and pdftex"
+ eval "cweave $xref.w"
+ eval "pdftex $xref.tex"
+ ###pdftops "$file_name_only.pdf"
+ ###pdftops "$xref"".pdf"
+ eval "cp $xref\.pdf* $dir_only"; #copy gened docs to its gening folder
+ ###eval "cp $xref\.ps* $dir_only"; #copy gened docs to its gening folder
+ return
+ esac
+ done
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+ ;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+ ;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+ ;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+ ;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+ ;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ ##eval "rm -f $k"
+ ;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ ##eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+for i in `find $dir_only | grep '.*\.lex$'`;
+do
+ echo "==========> Grammar to compile: $i with switch(es): $sw1 $sw2"
+ file_no=$((++file_no))
+ if test $((file_no)) -ge $((file_pos)); then
+ file_no_ext=${i%%.*}
+ cc_lex $i $file_no_ext
+ fi
+done
+cd $dir_only
+
diff --git a/web/yacco2/compiler/grammars/o2grammars_Edit_cweb b/web/yacco2/compiler/grammars/o2grammars_Edit_cweb
new file mode 100644
index 0000000000..cdb6fbf0d5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/o2grammars_Edit_cweb
@@ -0,0 +1,7 @@
+# file: o2grammars_Edit_cweb
+# ip1: file name without extension
+# companion file to o2grammars.bat
+# add \input eplain before $1.tex so that grammar document will get gened
+echo '\input eplain' > $tmp/eplain
+cat $tmp/eplain $1.tex > $tmp/$1.tex
+cp $tmp/$1.tex $1.tex
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_ph.cpp b/web/yacco2/compiler/grammars/parallel_monitor_ph.cpp
new file mode 100644
index 0000000000..a7e6d9d48e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_ph.cpp
@@ -0,0 +1,389 @@
+/*
+ File: parallel_monitor_ph.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_monitor_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_monitor_ph;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 8;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+}
+ Cparallel_monitor_ph::
+ Cparallel_monitor_ph()
+ :yacco2::CAbs_fsm
+ ("parallel_monitor_ph.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse a rule's arbitration code: \n into the valley of someone's dementia..."
+ ,"Fri Jan 30 18:55:18 2015 "
+ ,S1_Cparallel_monitor_ph){
+
+ parallel_monitor_phrase_ = 0;
+
+ }
+
+Cparallel_monitor_ph::~Cparallel_monitor_ph(){
+
+ for(int x = 0;x < 8;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cparallel_monitor_ph::failed(){
+ return false;
+ }
+ void Cparallel_monitor_ph::op(){
+ if(parallel_monitor_phrase_ != 0){
+ delete parallel_monitor_phrase_;
+ parallel_monitor_phrase_ = 0;
+ }
+ parallel_monitor_phrase_ = new T_parallel_monitor_phrase;
+ parallel_monitor_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*parallel_monitor_phrase_);
+ parallel_monitor_phrase_->phrase_tree(t);
+
+}
+int Cparallel_monitor_ph::rhs_to_rules_mapping_[18] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,5 // subrule 10 for rule 6
+ ,5 // subrule 11 for rule 6
+ ,5 // subrule 12 for rule 6
+ ,6 // subrule 13 for rule 7
+ ,6 // subrule 14 for rule 7
+ ,7 // subrule 15 for rule 8
+ ,7 // subrule 16 for rule 8
+ ,7 // subrule 17 for rule 8
+};
+
+ void Cparallel_monitor_ph::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_arbitrator_code_: {
+ T_arbitrator_code* k = (T_arbitrator_code*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+
+Rparallel_monitor_phrase::Rparallel_monitor_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_monitor_phrase",0,Cparallel_monitor_ph::R_Rparallel_monitor_phrase_,P,false,false){
+}
+
+void Rparallel_monitor_phrase::sr1(){
+
+ Cparallel_monitor_ph* fsm =
+ (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->parallel_monitor_phrase_);
+ fsm->parallel_monitor_phrase_ = 0;
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Cparallel_monitor_ph::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Cparallel_monitor_ph::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rdirective_phrase::Rdirective_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_phrase",0,Cparallel_monitor_ph::R_Rdirective_phrase_,P,false,false){
+}
+
+void Rdirective_phrase::sr1(){
+ struct SF{
+ Rlint* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rparallel_directive_cweb_k* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rdirective* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rsyntax_code* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ Rlint* p6__;
+ State* s6__;
+ bool abort6__;
+ Rule_s_reuse_entry* rule_s_reuse_entry6__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(6);
+
+ AST* cwebt = sf->p2__->cweb_t_;
+ Rdirective* dir = sf->p4__;
+ Rsyntax_code* sdc = sf->p5__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cparallel_monitor_ph* fsm =
+ (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Cparallel_monitor_ph::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Cparallel_monitor_ph* fsm = (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->parallel_monitor_phrase_->add_directive_to_mntr(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rdirective::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_arbitrator_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ CAbs_lr1_sym* sym = new Err_not_arbitration_code_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsyntax_code::Rsyntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsyntax_code",0,Cparallel_monitor_ph::R_Rsyntax_code_,P,false,false){
+}
+
+void Rsyntax_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = sf->p2__;
+
+}
+
+void Rsyntax_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_no_syntax_code_present* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = 0;
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rsyntax_code::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cparallel_monitor_ph::R_Rlint_,P,false,false){
+}
+
+Rparallel_directive_cweb_k::Rparallel_directive_cweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_directive_cweb_k",0,Cparallel_monitor_ph::R_Rparallel_directive_cweb_k_,P,false,false){
+}
+
+void Rparallel_directive_cweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rparallel_directive_cweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rparallel_directive_cweb_k::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_ph.fsc b/web/yacco2/compiler/grammars/parallel_monitor_ph.fsc
new file mode 100644
index 0000000000..8dd52c1ad7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_ph.fsc
@@ -0,0 +1,24 @@
+/*
+ File: parallel_monitor_ph.fsc
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+transitive n
+grammar-name "parallel_monitor_ph"
+name-space "NS_parallel_monitor_ph"
+thread-name "TH_parallel_monitor_ph"
+monolithic n
+file-name "parallel_monitor_ph.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ T_parallel_control_monitor
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+end-list-of-used-threads
+fsm-comments
+"Parse a rule's arbitration code: \n into the valley of someone's dementia..."
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_ph.h b/web/yacco2/compiler/grammars/parallel_monitor_ph.h
new file mode 100644
index 0000000000..3374677659
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_ph.h
@@ -0,0 +1,157 @@
+/*
+ File: parallel_monitor_ph.h
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#ifndef __parallel_monitor_ph_h__
+#define __parallel_monitor_ph_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+ using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+
+extern yacco2::Thread_entry ITH_parallel_monitor_ph;
+
+extern yacco2::State S1_Cparallel_monitor_ph;
+namespace NS_parallel_monitor_ph {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_parallel_monitor_ph(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_parallel_monitor_ph(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[8];
+};
+class Cparallel_monitor_ph: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rparallel_monitor_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rparallel_monitor_phrase_ = 1
+ ,R_Ropen_brace_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_brace_ = 2
+ ,rhs2_Ropen_brace_ = 3
+ ,R_Rclose_brace_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_brace_ = 4
+ ,rhs2_Rclose_brace_ = 5
+ ,R_Rdirective_phrase_ = 572//start_of_rule_list + 6
+ ,rhs1_Rdirective_phrase_ = 6
+ ,R_Rdirective_ = 573//start_of_rule_list + 8
+ ,rhs1_Rdirective_ = 7
+ ,rhs2_Rdirective_ = 8
+ ,rhs3_Rdirective_ = 9
+ ,R_Rsyntax_code_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsyntax_code_ = 10
+ ,rhs2_Rsyntax_code_ = 11
+ ,rhs3_Rsyntax_code_ = 12
+ ,R_Rlint_ = 575//start_of_rule_list + 12
+ ,rhs1_Rlint_ = 13
+ ,rhs2_Rlint_ = 14
+ ,R_Rparallel_directive_cweb_k_ = 576//start_of_rule_list + 14
+ ,rhs1_Rparallel_directive_cweb_k_ = 15
+ ,rhs2_Rparallel_directive_cweb_k_ = 16
+ ,rhs3_Rparallel_directive_cweb_k_ = 17
+ };
+ //no of la sets = 6
+ //no of states = 31
+ Cparallel_monitor_ph();
+ ~Cparallel_monitor_ph();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[18];
+
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_parallel_monitor_phrase* parallel_monitor_phrase_;
+
+ };
+struct Rparallel_monitor_phrase;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rdirective_phrase;
+struct Rdirective;
+struct Rsyntax_code;
+struct Rlint;
+struct Rparallel_directive_cweb_k;
+struct Rparallel_monitor_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_monitor_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdirective_phrase:public yacco2::CAbs_lr1_sym {
+ Rdirective_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ void op();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsyntax_code:public yacco2::CAbs_lr1_sym {
+ Rsyntax_code(yacco2::Parser* P);
+
+ T_syntax_code* syntax_code_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rparallel_directive_cweb_k:public yacco2::CAbs_lr1_sym {
+ Rparallel_directive_cweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_ph.lex b/web/yacco2/compiler/grammars/parallel_monitor_ph.lex
new file mode 100644
index 0000000000..d554689c21
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_ph.lex
@@ -0,0 +1,258 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: parallel_monitor_ph.lex
+Dates: 3 Jun 2004
+Purpose: parse arbitration contruct
+Output: Err_no_syntax_code_present
+ Err_comment_overrun
+ Err_duplicate_directive
+ Err_no_close_brace
+ Err_no_directive_present
+ Err_not_arbitration_code_kw
+ Err_no_pp_ctrl_mntor_kw_present
+*/
+
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |parallel_monitor_ph| thread.\fbreak
+Parse arbitration contruct.
+Typically there is no arbitration to be done but
+when 2 or more threads of subset / superset
+context are deployed
+deplomacy is required.
+This thread is a ``chained procedure call''.
+\fbreak
+Example of a parallel-control-monitor construct to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/ppmntr.txt"}
+@/
+fsm
+(fsm-id "parallel_monitor_ph.lex"
+,fsm-filename parallel_monitor_ph
+,fsm-namespace NS_parallel_monitor_ph
+,fsm-class Cparallel_monitor_ph{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+ ***
+ user-declaration
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_parallel_monitor_phrase* parallel_monitor_phrase_;
+ ***
+ constructor
+ parallel_monitor_phrase_ = 0;
+ ***
+ user-implementation
+ void Cparallel_monitor_ph::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_arbitrator_code_: {
+ T_arbitrator_code* k = (T_arbitrator_code*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+ ***
+ op
+ if(parallel_monitor_phrase_ != 0){
+ delete parallel_monitor_phrase_;
+ parallel_monitor_phrase_ = 0;
+ }
+ parallel_monitor_phrase_ = new T_parallel_monitor_phrase;
+ parallel_monitor_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*parallel_monitor_phrase_);
+ parallel_monitor_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse a rule's arbitration code: \n into the valley of someone's dementia...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_parallel_monitor_ph
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rparallel_monitor_phrase (){
+ -> "#parallel-control-monitor"
+ Rlint
+ Ropen_brace Rlint
+ Rdirective_phrase
+ Rclose_brace Rlint
+ {
+ op
+ Cparallel_monitor_ph* fsm =
+ (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->parallel_monitor_phrase_);
+ fsm->parallel_monitor_phrase_ = 0;
+ ***
+ }
+}
+
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rdirective_phrase (){
+ -> Rlint Rparallel_directive_cweb_k Rlint Rdirective Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p2__->cweb_t_;
+ Rdirective* dir = sf->p4__;
+ Rsyntax_code* sdc = sf->p5__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Cparallel_monitor_ph* fsm =
+ (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ op
+ if(directive_ == 0) return;
+ Cparallel_monitor_ph* fsm = (Cparallel_monitor_ph*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->parallel_monitor_phrase_->add_directive_to_mntr(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#arbitrator-code" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ CAbs_lr1_sym* sym = new Err_not_arbitration_code_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsyntax_code (
+lhs {
+ user-declaration
+ T_syntax_code* syntax_code_;
+ ***
+ }
+){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ syntax_code_ = sf->p2__;
+ ***
+ }
+ -> ||| "no syntax-code present" NULL {// allow no syntax code
+ op
+ syntax_code_ = 0;
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL { // catcher in the Rye? These are errors
+ op
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Rparallel_directive_cweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_phsym.cpp b/web/yacco2/compiler/grammars/parallel_monitor_phsym.cpp
new file mode 100644
index 0000000000..974dac3649
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_phsym.cpp
@@ -0,0 +1,304 @@
+/*
+ File: parallel_monitor_phsym.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_monitor_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_monitor_ph;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_parallel_monitor_ph::TH_parallel_monitor_ph(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_parallel_monitor_ph;
+ NS_parallel_monitor_ph::Cparallel_monitor_ph Cparallel_monitor_ph_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cparallel_monitor_ph_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_parallel_monitor_ph::PROC_TH_parallel_monitor_ph(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_parallel_monitor_ph";
+ static bool one_time(false);
+ static NS_parallel_monitor_ph::Cparallel_monitor_ph* NS_parallel_monitor_ph_Cparallel_monitor_ph_(0);// parallel-parser's fsm table
+ static Parser* NS_parallel_monitor_ph_Cparallel_monitor_ph_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_parallel_monitor_ph_Cparallel_monitor_ph_ = new NS_parallel_monitor_ph::Cparallel_monitor_ph();// parallel-parser's fsm table
+ NS_parallel_monitor_ph_Cparallel_monitor_ph_parser = new Parser(*NS_parallel_monitor_ph_Cparallel_monitor_ph_,Caller_pp);
+ }
+ proc_parser = NS_parallel_monitor_ph_Cparallel_monitor_ph_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cparallel_monitor_ph::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rparallel_monitor_phrase_:{
+ Rparallel_monitor_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_monitor_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_monitor_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 7;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdirective_phrase_:{
+ Rdirective_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs1_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rparallel_directive_cweb_k_:{
+ Rparallel_directive_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_directive_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_directive_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rparallel_directive_cweb_k_:{
+ Rparallel_directive_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_directive_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_directive_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rparallel_directive_cweb_k_:{
+ Rparallel_directive_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_directive_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_directive_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/parallel_monitor_phtbl.cpp b/web/yacco2/compiler/grammars/parallel_monitor_phtbl.cpp
new file mode 100644
index 0000000000..5f9bfba186
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_monitor_phtbl.cpp
@@ -0,0 +1,682 @@
+/*
+ File: parallel_monitor_phtbl.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_monitor_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_monitor_ph;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA1_Cparallel_monitor_ph[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cparallel_monitor_ph[] ={
+1
+,0,17
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Cparallel_monitor_ph[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA4_Cparallel_monitor_ph[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Cparallel_monitor_ph[] ={
+2
+,0,1
+,16,32
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA6_Cparallel_monitor_ph[] ={
+1
+,0,16
+};
+extern yacco2::State S1_Cparallel_monitor_ph;
+extern yacco2::State S2_Cparallel_monitor_ph;
+extern yacco2::State S3_Cparallel_monitor_ph;
+extern yacco2::State S4_Cparallel_monitor_ph;
+extern yacco2::State S5_Cparallel_monitor_ph;
+extern yacco2::State S6_Cparallel_monitor_ph;
+extern yacco2::State S7_Cparallel_monitor_ph;
+extern yacco2::State S8_Cparallel_monitor_ph;
+extern yacco2::State S9_Cparallel_monitor_ph;
+extern yacco2::State S10_Cparallel_monitor_ph;
+struct S10ttd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S10ttd_Cparallel_monitor_ph S10tt_Cparallel_monitor_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S11_Cparallel_monitor_ph;
+extern yacco2::State S12_Cparallel_monitor_ph;
+extern yacco2::State S13_Cparallel_monitor_ph;
+extern yacco2::State S14_Cparallel_monitor_ph;
+extern yacco2::State S15_Cparallel_monitor_ph;
+extern yacco2::State S16_Cparallel_monitor_ph;
+extern yacco2::State S17_Cparallel_monitor_ph;
+extern yacco2::State S18_Cparallel_monitor_ph;
+extern yacco2::State S19_Cparallel_monitor_ph;
+struct S19ttd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S19ttd_Cparallel_monitor_ph S19tt_Cparallel_monitor_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S20_Cparallel_monitor_ph;
+extern yacco2::State S21_Cparallel_monitor_ph;
+extern yacco2::State S22_Cparallel_monitor_ph;
+extern yacco2::State S23_Cparallel_monitor_ph;
+extern yacco2::State S24_Cparallel_monitor_ph;
+extern yacco2::State S25_Cparallel_monitor_ph;
+struct S25ttd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S25ttd_Cparallel_monitor_ph S25tt_Cparallel_monitor_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S26_Cparallel_monitor_ph;
+extern yacco2::State S27_Cparallel_monitor_ph;
+extern yacco2::State S28_Cparallel_monitor_ph;
+extern yacco2::State S29_Cparallel_monitor_ph;
+struct S29ttd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S29ttd_Cparallel_monitor_ph S29tt_Cparallel_monitor_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S30_Cparallel_monitor_ph;
+extern yacco2::State S31_Cparallel_monitor_ph;
+struct S1std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cparallel_monitor_ph S1st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {291,(State*)&S2_Cparallel_monitor_ph} // shift sym: T_parallel_control_monitor
+ ,{569,(State*)&S1_Cparallel_monitor_ph} // accept sym: Rparallel_monitor_phrase
+ }// end of shift table
+};
+yacco2::State S1_Cparallel_monitor_ph = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cparallel_monitor_ph,0,0,0,0};
+struct S2std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cparallel_monitor_ph S2st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S3_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S2pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S2rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cparallel_monitor_ph S2rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S2_Cparallel_monitor_ph = //State's vectored into symbol: "#parallel-control-monitor"
+{2
+,(Shift_entry*)&S2pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S2st_Cparallel_monitor_ph,(Reduce_tbl*)&S2rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S3std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Cparallel_monitor_ph S3st_Cparallel_monitor_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S13_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S14_Cparallel_monitor_ph} // shift sym: raw_open_brace
+ ,{570,(State*)&S4_Cparallel_monitor_ph} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cparallel_monitor_ph = {0,(State*)&S13_Cparallel_monitor_ph};
+yacco2::State S3_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cparallel_monitor_ph,0,0,0,(Shift_entry*)&S3qse_Cparallel_monitor_ph
+};
+struct S4std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S4std_Cparallel_monitor_ph S4st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S5_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S4pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S4rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cparallel_monitor_ph S4rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S4_Cparallel_monitor_ph = //State's vectored into symbol: "Ropen_brace"
+{4
+,(Shift_entry*)&S4pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S4st_Cparallel_monitor_ph,(Reduce_tbl*)&S4rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S5std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Cparallel_monitor_ph S5st_Cparallel_monitor_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_Cparallel_monitor_ph} // shift sym: Rdirective_phrase
+ ,{575,(State*)&S15_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S5rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cparallel_monitor_ph S5rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{5
+,(Shift_entry*)&S5pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S5st_Cparallel_monitor_ph,(Reduce_tbl*)&S5rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S6std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cparallel_monitor_ph S6st_Cparallel_monitor_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S7_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S8_Cparallel_monitor_ph} // shift sym: raw_close_brace
+ ,{571,(State*)&S9_Cparallel_monitor_ph} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Cparallel_monitor_ph = {0,(State*)&S7_Cparallel_monitor_ph};
+yacco2::State S6_Cparallel_monitor_ph = //State's vectored into symbol: "Rdirective_phrase"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cparallel_monitor_ph,0,0,0,(Shift_entry*)&S6qse_Cparallel_monitor_ph
+};
+struct S7rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cparallel_monitor_ph S7rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S7_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cparallel_monitor_ph,0,0,0};
+struct S8rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cparallel_monitor_ph S8rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S8_Cparallel_monitor_ph = //State's vectored into symbol: "}"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cparallel_monitor_ph,0,0,0};
+struct S9std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Cparallel_monitor_ph S9st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S12_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S9rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cparallel_monitor_ph S9rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Cparallel_monitor_ph = //State's vectored into symbol: "Rclose_brace"
+{9
+,(Shift_entry*)&S9pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S9st_Cparallel_monitor_ph,(Reduce_tbl*)&S9rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S10std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cparallel_monitor_ph S10st_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S11_Cparallel_monitor_ph} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S10_Cparallel_monitor_ph = //State's vectored into symbol: "|||"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cparallel_monitor_ph,0,0,0,0};
+struct S11rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cparallel_monitor_ph S11rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Cparallel_monitor_ph = //State's vectored into symbol: "lint"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cparallel_monitor_ph,0,0,0};
+struct S12rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cparallel_monitor_ph S12rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rparallel_monitor_phrase_}
+ }// end of reduce table
+};
+yacco2::State S12_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cparallel_monitor_ph,0,0,0};
+struct S13rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cparallel_monitor_ph S13rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S13_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cparallel_monitor_ph,0,0,0};
+struct S14rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cparallel_monitor_ph S14rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S14_Cparallel_monitor_ph = //State's vectored into symbol: "{"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cparallel_monitor_ph,0,0,0};
+struct S15std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Cparallel_monitor_ph S15st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S25_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S16_Cparallel_monitor_ph} // shift sym: Rparallel_directive_cweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Cparallel_monitor_ph = {3,(State*)&S25_Cparallel_monitor_ph};
+struct S15rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cparallel_monitor_ph S15rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rparallel_directive_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S15_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{15
+,(Shift_entry*)&S15pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S15st_Cparallel_monitor_ph,(Reduce_tbl*)&S15rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S25tt_Cparallel_monitor_ph,0,0};
+struct S16std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_Cparallel_monitor_ph S16st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S17_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S16rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cparallel_monitor_ph S16rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S16_Cparallel_monitor_ph = //State's vectored into symbol: "Rparallel_directive_cweb_k"
+{16
+,(Shift_entry*)&S16pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S16st_Cparallel_monitor_ph,(Reduce_tbl*)&S16rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S17std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Cparallel_monitor_ph S17st_Cparallel_monitor_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S28_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S29_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S18_Cparallel_monitor_ph} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::Shift_entry S17pse_Cparallel_monitor_ph = {3,(State*)&S29_Cparallel_monitor_ph};
+yacco2::Shift_entry S17qse_Cparallel_monitor_ph = {0,(State*)&S28_Cparallel_monitor_ph};
+yacco2::State S17_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{17
+,(Shift_entry*)&S17pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S17st_Cparallel_monitor_ph,0,(State_s_thread_tbl*)&S29tt_Cparallel_monitor_ph,0,(Shift_entry*)&S17qse_Cparallel_monitor_ph
+};
+struct S18std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S18std_Cparallel_monitor_ph S18st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S19_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S23_Cparallel_monitor_ph} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Cparallel_monitor_ph = {3,(State*)&S19_Cparallel_monitor_ph};
+yacco2::State S18_Cparallel_monitor_ph = //State's vectored into symbol: "Rdirective"
+{18
+,(Shift_entry*)&S18pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S18st_Cparallel_monitor_ph,0,(State_s_thread_tbl*)&S19tt_Cparallel_monitor_ph,0,0};
+struct S19std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S19std_Cparallel_monitor_ph S19st_Cparallel_monitor_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S20_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S21_Cparallel_monitor_ph} // shift sym: T_syntax_code
+ ,{403,(State*)&S22_Cparallel_monitor_ph} // shift sym: Err_no_syntax_code_present
+ }// end of shift table
+};
+yacco2::Shift_entry S19qse_Cparallel_monitor_ph = {0,(State*)&S20_Cparallel_monitor_ph};
+yacco2::State S19_Cparallel_monitor_ph = //State's vectored into symbol: "|||"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cparallel_monitor_ph,0,0,0,(Shift_entry*)&S19qse_Cparallel_monitor_ph
+};
+struct S20rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cparallel_monitor_ph S20rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs3_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S20_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cparallel_monitor_ph,0,0,0};
+struct S21rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cparallel_monitor_ph S21rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S21_Cparallel_monitor_ph = //State's vectored into symbol: "syntax-code"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cparallel_monitor_ph,0,0,0};
+struct S22rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cparallel_monitor_ph S22rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S22_Cparallel_monitor_ph = //State's vectored into symbol: "no syntax-code present"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cparallel_monitor_ph,0,0,0};
+struct S23std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S23std_Cparallel_monitor_ph S23st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S10_Cparallel_monitor_ph} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S24_Cparallel_monitor_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S23pse_Cparallel_monitor_ph = {3,(State*)&S10_Cparallel_monitor_ph};
+struct S23rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cparallel_monitor_ph S23rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S23_Cparallel_monitor_ph = //State's vectored into symbol: "Rsyntax_code"
+{23
+,(Shift_entry*)&S23pse_Cparallel_monitor_ph,0,0,0,(Shift_tbl*)&S23st_Cparallel_monitor_ph,(Reduce_tbl*)&S23rt_Cparallel_monitor_ph,(State_s_thread_tbl*)&S10tt_Cparallel_monitor_ph,0,0};
+struct S24rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cparallel_monitor_ph S24rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rdirective_phrase_}
+ }// end of reduce table
+};
+yacco2::State S24_Cparallel_monitor_ph = //State's vectored into symbol: "Rlint"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cparallel_monitor_ph,0,0,0};
+struct S25std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S25std_Cparallel_monitor_ph S25st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S26_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{372,(State*)&S27_Cparallel_monitor_ph} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S25qse_Cparallel_monitor_ph = {0,(State*)&S26_Cparallel_monitor_ph};
+yacco2::State S25_Cparallel_monitor_ph = //State's vectored into symbol: "|||"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cparallel_monitor_ph,0,0,0,(Shift_entry*)&S25qse_Cparallel_monitor_ph
+};
+struct S26rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cparallel_monitor_ph S26rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs3_Rparallel_directive_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S26_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cparallel_monitor_ph,0,0,0};
+struct S27rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cparallel_monitor_ph S27rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rparallel_directive_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S27_Cparallel_monitor_ph = //State's vectored into symbol: "cweb-comment"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cparallel_monitor_ph,0,0,0};
+struct S28rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cparallel_monitor_ph S28rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S28_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cparallel_monitor_ph,0,0,0};
+struct S29std_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S29std_Cparallel_monitor_ph S29st_Cparallel_monitor_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S30_Cparallel_monitor_ph} // shift sym: LR1_questionable_shift_operator
+ ,{288,(State*)&S31_Cparallel_monitor_ph} // shift sym: T_arbitrator_code
+ }// end of shift table
+};
+yacco2::Shift_entry S29qse_Cparallel_monitor_ph = {0,(State*)&S30_Cparallel_monitor_ph};
+yacco2::State S29_Cparallel_monitor_ph = //State's vectored into symbol: "|||"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cparallel_monitor_ph,0,0,0,(Shift_entry*)&S29qse_Cparallel_monitor_ph
+};
+struct S30rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cparallel_monitor_ph S30rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S30_Cparallel_monitor_ph = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cparallel_monitor_ph,0,0,0};
+struct S31rtd_Cparallel_monitor_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cparallel_monitor_ph S31rt_Cparallel_monitor_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cparallel_monitor_ph,Cparallel_monitor_ph::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S31_Cparallel_monitor_ph = //State's vectored into symbol: "#arbitrator-code"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cparallel_monitor_ph,0,0,0};
diff --git a/web/yacco2/compiler/grammars/parallel_oper.cpp b/web/yacco2/compiler/grammars/parallel_oper.cpp
new file mode 100644
index 0000000000..fdb29a35f5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_oper.cpp
@@ -0,0 +1,86 @@
+/*
+ File: parallel_oper.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_oper.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_oper;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Cparallel_oper::
+ Cparallel_oper()
+ :yacco2::CAbs_fsm
+ ("parallel_oper.lex"
+ ,"1.0"
+ ,"22 Sept 2005"
+ ,false
+ ,"Lexer for Parallel operator: \\PARshift."
+ ,"Fri Jan 30 18:55:18 2015 "
+ ,S1_Cparallel_oper){
+
+ }
+
+Cparallel_oper::~Cparallel_oper(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cparallel_oper::failed(){
+ return false;
+ }
+ void Cparallel_oper::op(){
+}
+int Cparallel_oper::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+};
+Rparallel_oper::Rparallel_oper(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_oper",0,Cparallel_oper::R_Rparallel_oper_,P,false,false){
+}
+
+void Rparallel_oper::op(){
+ sstrace_rulesss
+
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+
+}
+void Rparallel_oper::sr1(){
+
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_parallel_operator__;
+
+}
+
+void Rparallel_oper::sr2(){
+
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_parallel_operator__;
+
+}
+
+void Rparallel_oper::sr3(){
+
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__;
+
+}
+
+void Rparallel_oper::sr4(){
+
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/parallel_oper.fsc b/web/yacco2/compiler/grammars/parallel_oper.fsc
new file mode 100644
index 0000000000..8536cb69ae
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_oper.fsc
@@ -0,0 +1,21 @@
+/*
+ File: parallel_oper.fsc
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+transitive n
+grammar-name "parallel_oper"
+name-space "NS_parallel_oper"
+thread-name "TH_parallel_oper"
+monolithic n
+file-name "parallel_oper.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_dbl_quote
+ raw_vertical_line
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Lexer for Parallel operator: \\PARshift."
diff --git a/web/yacco2/compiler/grammars/parallel_oper.h b/web/yacco2/compiler/grammars/parallel_oper.h
new file mode 100644
index 0000000000..c669bb0f01
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_oper.h
@@ -0,0 +1,66 @@
+/*
+ File: parallel_oper.h
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#ifndef __parallel_oper_h__
+#define __parallel_oper_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_parallel_oper;
+
+extern yacco2::State S1_Cparallel_oper;
+namespace NS_parallel_oper {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_parallel_oper(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_parallel_oper(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Cparallel_oper: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rparallel_oper_ = 569//start_of_rule_list + 0
+ ,rhs1_Rparallel_oper_ = 1
+ ,rhs2_Rparallel_oper_ = 2
+ ,rhs3_Rparallel_oper_ = 3
+ ,rhs4_Rparallel_oper_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 14
+ Cparallel_oper();
+ ~Cparallel_oper();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Rparallel_oper;
+struct Rparallel_oper:public yacco2::CAbs_lr1_sym {
+ Rparallel_oper(yacco2::Parser* P);
+ void op();
+
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/parallel_oper.lex b/web/yacco2/compiler/grammars/parallel_oper.lex
new file mode 100644
index 0000000000..b4a439c1fe
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_oper.lex
@@ -0,0 +1,71 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: parallel_oper.lex
+Dates: 22 Sept. 2005
+Purpose: start of a parallel thread expression or chained call
+ ||| T {NS_xxx::TH_xxx | NULL}
+Output: "|||" or "|t|"
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |parallel_oper| thread.\fbreak
+Recognize the parallel operator in its 2 drags:
+quoted and unprotected.
+The same goes for the chained "procedure call" operator.
+It overloads on the \TRAshift operator used by \Olinker.
+@/
+fsm
+(fsm-id "parallel_oper.lex"
+,fsm-filename parallel_oper
+,fsm-namespace NS_parallel_oper
+,fsm-class Cparallel_oper
+,fsm-version "1.0",fsm-date "22 Sept 2005",fsm-debug "false"
+,fsm-comments "Lexer for Parallel operator: \\PARshift.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_parallel_oper
+ ***
+ parallel-la-boundary
+ eolr - "|"
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rparallel_oper (
+ lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+ ***
+ op
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+ ***
+ }
+){
+ -> "|" "|" "|" {
+ op
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_parallel_operator__;
+ ***}
+ -> "\"" "|" "|" "|" "\"" {
+ op
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_parallel_operator__;
+ ***
+ }
+ -> "|" "t" "|" {
+ op
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__;
+ ***}
+ -> "\"" "|" "t" "|" "\"" {
+ op
+ rtn_sym_ = NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/parallel_opersym.cpp b/web/yacco2/compiler/grammars/parallel_opersym.cpp
new file mode 100644
index 0000000000..1bed208da9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_opersym.cpp
@@ -0,0 +1,112 @@
+/*
+ File: parallel_opersym.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_oper.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_oper;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_parallel_oper::TH_parallel_oper(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_parallel_oper;
+ NS_parallel_oper::Cparallel_oper Cparallel_oper_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cparallel_oper_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_parallel_oper::PROC_TH_parallel_oper(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_parallel_oper";
+ static bool one_time(false);
+ static NS_parallel_oper::Cparallel_oper* NS_parallel_oper_Cparallel_oper_(0);// parallel-parser's fsm table
+ static Parser* NS_parallel_oper_Cparallel_oper_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_parallel_oper_Cparallel_oper_ = new NS_parallel_oper::Cparallel_oper();// parallel-parser's fsm table
+ NS_parallel_oper_Cparallel_oper_parser = new Parser(*NS_parallel_oper_Cparallel_oper_,Caller_pp);
+ }
+ proc_parser = NS_parallel_oper_Cparallel_oper_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cparallel_oper::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rparallel_oper_:{
+ Rparallel_oper* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_oper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_oper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rparallel_oper_:{
+ Rparallel_oper* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_oper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_oper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rparallel_oper_:{
+ Rparallel_oper* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_oper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_oper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rparallel_oper_:{
+ Rparallel_oper* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_oper(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_oper*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/parallel_opertbl.cpp b/web/yacco2/compiler/grammars/parallel_opertbl.cpp
new file mode 100644
index 0000000000..9455e0f90b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_opertbl.cpp
@@ -0,0 +1,863 @@
+/*
+ File: parallel_opertbl.cpp
+ Date and Time: Fri Jan 30 18:55:18 2015
+*/
+#include "parallel_oper.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_oper;// grammar's ns
+// first set terminals
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// LR1_eog
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+yacco2::UCHAR LA1_Cparallel_oper[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,239
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Cparallel_oper;
+extern yacco2::State S2_Cparallel_oper;
+extern yacco2::State S3_Cparallel_oper;
+extern yacco2::State S4_Cparallel_oper;
+extern yacco2::State S5_Cparallel_oper;
+extern yacco2::State S6_Cparallel_oper;
+extern yacco2::State S7_Cparallel_oper;
+extern yacco2::State S8_Cparallel_oper;
+extern yacco2::State S9_Cparallel_oper;
+extern yacco2::State S10_Cparallel_oper;
+extern yacco2::State S11_Cparallel_oper;
+extern yacco2::State S12_Cparallel_oper;
+extern yacco2::State S13_Cparallel_oper;
+extern yacco2::State S14_Cparallel_oper;
+struct S1std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cparallel_oper S1st_Cparallel_oper = {
+ 3
+ ,
+ {// start of table
+ {42,(State*)&S2_Cparallel_oper} // shift sym: raw_dbl_quote
+ ,{132,(State*)&S10_Cparallel_oper} // shift sym: raw_vertical_line
+ ,{569,(State*)&S1_Cparallel_oper} // accept sym: Rparallel_oper
+ }// end of shift table
+};
+yacco2::State S1_Cparallel_oper = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cparallel_oper,0,0,0,0};
+struct S2std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cparallel_oper S2st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S3_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S2_Cparallel_oper = //State's vectored into symbol: "\""
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cparallel_oper,0,0,0,0};
+struct S3std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cparallel_oper S3st_Cparallel_oper = {
+ 2
+ ,
+ {// start of table
+ {124,(State*)&S4_Cparallel_oper} // shift sym: raw_t
+ ,{132,(State*)&S7_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S3_Cparallel_oper = //State's vectored into symbol: "|"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cparallel_oper,0,0,0,0};
+struct S4std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Cparallel_oper S4st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S5_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S4_Cparallel_oper = //State's vectored into symbol: "t"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cparallel_oper,0,0,0,0};
+struct S5std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cparallel_oper S5st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S6_Cparallel_oper} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S5_Cparallel_oper = //State's vectored into symbol: "|"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cparallel_oper,0,0,0,0};
+struct S6rtd_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cparallel_oper S6rt_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_oper,Cparallel_oper::rhs4_Rparallel_oper_}
+ }// end of reduce table
+};
+yacco2::State S6_Cparallel_oper = //State's vectored into symbol: "\""
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cparallel_oper,0,0,0};
+struct S7std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cparallel_oper S7st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S8_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S7_Cparallel_oper = //State's vectored into symbol: "|"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cparallel_oper,0,0,0,0};
+struct S8std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cparallel_oper S8st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {42,(State*)&S9_Cparallel_oper} // shift sym: raw_dbl_quote
+ }// end of shift table
+};
+yacco2::State S8_Cparallel_oper = //State's vectored into symbol: "|"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cparallel_oper,0,0,0,0};
+struct S9rtd_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cparallel_oper S9rt_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_oper,Cparallel_oper::rhs2_Rparallel_oper_}
+ }// end of reduce table
+};
+yacco2::State S9_Cparallel_oper = //State's vectored into symbol: "\""
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cparallel_oper,0,0,0};
+struct S10std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_Cparallel_oper S10st_Cparallel_oper = {
+ 2
+ ,
+ {// start of table
+ {124,(State*)&S11_Cparallel_oper} // shift sym: raw_t
+ ,{132,(State*)&S13_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S10_Cparallel_oper = //State's vectored into symbol: "|"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cparallel_oper,0,0,0,0};
+struct S11std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Cparallel_oper S11st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S12_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S11_Cparallel_oper = //State's vectored into symbol: "t"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Cparallel_oper,0,0,0,0};
+struct S12rtd_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cparallel_oper S12rt_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_oper,Cparallel_oper::rhs3_Rparallel_oper_}
+ }// end of reduce table
+};
+yacco2::State S12_Cparallel_oper = //State's vectored into symbol: "|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cparallel_oper,0,0,0};
+struct S13std_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Cparallel_oper S13st_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {132,(State*)&S14_Cparallel_oper} // shift sym: raw_vertical_line
+ }// end of shift table
+};
+yacco2::State S13_Cparallel_oper = //State's vectored into symbol: "|"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cparallel_oper,0,0,0,0};
+struct S14rtd_Cparallel_oper{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cparallel_oper S14rt_Cparallel_oper = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_oper,Cparallel_oper::rhs1_Rparallel_oper_}
+ }// end of reduce table
+};
+yacco2::State S14_Cparallel_oper = //State's vectored into symbol: "|"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cparallel_oper,0,0,0};
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_th.cpp b/web/yacco2/compiler/grammars/parallel_parser_ph_th.cpp
new file mode 100644
index 0000000000..9114e93c96
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_th.cpp
@@ -0,0 +1,482 @@
+/*
+ File: parallel_parser_ph_th.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_ph_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 12;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+}
+ Cparallel_parser_ph_th::
+ Cparallel_parser_ph_th()
+ :yacco2::CAbs_fsm
+ ("parallel_parser_ph_th.lex"
+ ,"1.0"
+ ,"11 mar 2004"
+ ,false
+ ,"Parse grammar's parallel-parser construct."
+ ,"Fri Jan 30 18:55:19 2015 "
+ ,S1_Cparallel_parser_ph_th){
+
+ parallel_parser_phrase_ = 0;
+
+ }
+
+Cparallel_parser_ph_th::~Cparallel_parser_ph_th(){
+
+ for(int x = 0;x < 12;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cparallel_parser_ph_th::failed(){
+ return false;
+ }
+ void Cparallel_parser_ph_th::op(){
+ if(parallel_parser_phrase_ != 0){
+ delete parallel_parser_phrase_;
+ parallel_parser_phrase_ = 0;
+ }
+ parallel_parser_phrase_ = new T_parallel_parser_phrase;
+ parallel_parser_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*parallel_parser_phrase_);
+ parallel_parser_phrase_->phrase_tree(t);
+
+}
+int Cparallel_parser_ph_th::rhs_to_rules_mapping_[25] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,5 // subrule 9 for rule 6
+ ,6 // subrule 10 for rule 7
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,7 // subrule 13 for rule 8
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,9 // subrule 18 for rule 10
+ ,10 // subrule 19 for rule 11
+ ,10 // subrule 20 for rule 11
+ ,10 // subrule 21 for rule 11
+ ,11 // subrule 22 for rule 12
+ ,11 // subrule 23 for rule 12
+ ,11 // subrule 24 for rule 12
+};
+Rparallel_parser_phrase::Rparallel_parser_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_parser_phrase",0,Cparallel_parser_ph_th::R_Rparallel_parser_phrase_,P,false,false){
+}
+
+void Rparallel_parser_phrase::sr1(){
+
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->parallel_parser_phrase_);
+ fsm->parallel_parser_phrase_ = 0;
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cparallel_parser_ph_th::R_Rlint_,P,false,false){
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Cparallel_parser_ph_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Cparallel_parser_ph_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Cparallel_parser_ph_th::R_Rparameters_,P,false,false){
+}
+
+Rpp_thread_fnct_phrase::Rpp_thread_fnct_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_thread_fnct_phrase",0,Cparallel_parser_ph_th::R_Rpp_thread_fnct_phrase_,P,false,false){
+}
+
+void Rpp_thread_fnct_phrase::sr1(){
+ struct SF{
+ Rpp_thread_fnct* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rpp_thread_fnct_id* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rlint* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ R3asterics* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ Rlint* p6__;
+ State* s6__;
+ bool abort6__;
+ Rule_s_reuse_entry* rule_s_reuse_entry6__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(6);
+
+ T_parallel_thread_function* pp_fnct = sf->p1__->pp_fnct_;
+ pp_fnct->identifier(sf->p3__->id_);
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->parallel_parser_phrase_->pp_funct(pp_fnct);
+
+}
+
+Rpp_thread_fnct::Rpp_thread_fnct(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_thread_fnct",0,Cparallel_parser_ph_th::R_Rpp_thread_fnct_,P,false,false){
+}
+
+void Rpp_thread_fnct::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_thread_function* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ pp_fnct_ = sf->p2__;
+
+}
+
+void Rpp_thread_fnct::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ pp_fnct_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_pp_thread_function_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rpp_thread_fnct::sr3(){
+
+ pp_fnct_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_thread_function_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpp_thread_fnct_id::Rpp_thread_fnct_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_thread_fnct_id",0,Cparallel_parser_ph_th::R_Rpp_thread_fnct_id_,P,false,false){
+}
+
+void Rpp_thread_fnct_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ id_ = sf->p2__;
+
+}
+
+void Rpp_thread_fnct_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ id_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_fnct_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rpp_thread_fnct_id::sr3(){
+
+ id_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_fnct_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+R3asterics::R3asterics(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("R3asterics",0,Cparallel_parser_ph_th::R_R3asterics_,P,false,false){
+}
+
+void R3asterics::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_end_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpp_la_bndary_phrase::Rpp_la_bndary_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_la_bndary_phrase",0,Cparallel_parser_ph_th::R_Rpp_la_bndary_phrase_,P,false,false){
+}
+
+void Rpp_la_bndary_phrase::sr1(){
+ struct SF{
+ Rpp_la_bndary* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rpp_la_bndary_stc* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rlint* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(4);
+
+ pp_la_bndary_ = sf->p1__->pp_la_bndary_;
+ pp_la_bndary_->la_supplier(sf->p3__->la_exp_->la_tok_can());
+ sf->p3__->la_exp_->zero_la_tok_can();
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->parallel_parser_phrase_->la_bndry(pp_la_bndary_);
+
+}
+
+Rpp_la_bndary::Rpp_la_bndary(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_la_bndary",0,Cparallel_parser_ph_th::R_Rpp_la_bndary_,P,false,false){
+}
+
+void Rpp_la_bndary::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_la_boundary* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ pp_la_bndary_ = sf->p2__;
+
+}
+
+void Rpp_la_bndary::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ pp_la_bndary_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_pp_bndry_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rpp_la_bndary::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ pp_la_bndary_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_bndry_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpp_la_bndary_stc::Rpp_la_bndary_stc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpp_la_bndary_stc",0,Cparallel_parser_ph_th::R_Rpp_la_bndary_stc_,P,false,false){
+}
+
+void Rpp_la_bndary_stc::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_la_expr_src* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ la_exp_ = sf->p2__;
+
+}
+
+void Rpp_la_bndary_stc::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ la_exp_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rpp_la_bndary_stc::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ la_exp_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_la_bndary_expr_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_th.fsc b/web/yacco2/compiler/grammars/parallel_parser_ph_th.fsc
new file mode 100644
index 0000000000..e1b8b214e0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_th.fsc
@@ -0,0 +1,26 @@
+/*
+ File: parallel_parser_ph_th.fsc
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+transitive y
+grammar-name "parallel_parser_ph_th"
+name-space "NS_parallel_parser_ph_th"
+thread-name "TH_parallel_parser_ph_th"
+monolithic n
+file-name "parallel_parser_ph_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_open_bracket
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_identifier::TH_identifier
+ NS_la_expr_src::TH_la_expr_src
+ NS_lint_balls::TH_lint_balls
+ NS_o2_code_end::TH_o2_code_end
+end-list-of-used-threads
+fsm-comments
+"Parse grammar's parallel-parser construct."
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_th.h b/web/yacco2/compiler/grammars/parallel_parser_ph_th.h
new file mode 100644
index 0000000000..2f4219d827
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_th.h
@@ -0,0 +1,197 @@
+/*
+ File: parallel_parser_ph_th.h
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#ifndef __parallel_parser_ph_th_h__
+#define __parallel_parser_ph_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "identifier.h"
+#include "o2_sdc.h"
+#include "o2_code_end.h"
+#include "la_expr_src.h"
+
+extern yacco2::Thread_entry ITH_parallel_parser_ph_th;
+
+extern yacco2::State S1_Cparallel_parser_ph_th;
+namespace NS_parallel_parser_ph_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_parallel_parser_ph_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_parallel_parser_ph_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[12];
+};
+class Cparallel_parser_ph_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rparallel_parser_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rparallel_parser_phrase_ = 1
+ ,R_Rlint_ = 570//start_of_rule_list + 2
+ ,rhs1_Rlint_ = 2
+ ,rhs2_Rlint_ = 3
+ ,R_Ropen_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Ropen_par_ = 4
+ ,rhs2_Ropen_par_ = 5
+ ,R_Rclose_par_ = 572//start_of_rule_list + 6
+ ,rhs1_Rclose_par_ = 6
+ ,rhs2_Rclose_par_ = 7
+ ,R_Rparameters_ = 573//start_of_rule_list + 8
+ ,rhs1_Rparameters_ = 8
+ ,R_Rpp_thread_fnct_phrase_ = 574//start_of_rule_list + 10
+ ,rhs1_Rpp_thread_fnct_phrase_ = 9
+ ,R_Rpp_thread_fnct_ = 575//start_of_rule_list + 12
+ ,rhs1_Rpp_thread_fnct_ = 10
+ ,rhs2_Rpp_thread_fnct_ = 11
+ ,rhs3_Rpp_thread_fnct_ = 12
+ ,R_Rpp_thread_fnct_id_ = 576//start_of_rule_list + 14
+ ,rhs1_Rpp_thread_fnct_id_ = 13
+ ,rhs2_Rpp_thread_fnct_id_ = 14
+ ,rhs3_Rpp_thread_fnct_id_ = 15
+ ,R_R3asterics_ = 577//start_of_rule_list + 16
+ ,rhs1_R3asterics_ = 16
+ ,rhs2_R3asterics_ = 17
+ ,R_Rpp_la_bndary_phrase_ = 578//start_of_rule_list + 18
+ ,rhs1_Rpp_la_bndary_phrase_ = 18
+ ,R_Rpp_la_bndary_ = 579//start_of_rule_list + 20
+ ,rhs1_Rpp_la_bndary_ = 19
+ ,rhs2_Rpp_la_bndary_ = 20
+ ,rhs3_Rpp_la_bndary_ = 21
+ ,R_Rpp_la_bndary_stc_ = 580//start_of_rule_list + 22
+ ,rhs1_Rpp_la_bndary_stc_ = 22
+ ,rhs2_Rpp_la_bndary_stc_ = 23
+ ,rhs3_Rpp_la_bndary_stc_ = 24
+ };
+ //no of la sets = 4
+ //no of states = 44
+ Cparallel_parser_ph_th();
+ ~Cparallel_parser_ph_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[25];
+
+ public:
+ T_parallel_parser_phrase* parallel_parser_phrase_;
+
+ };
+struct Rparallel_parser_phrase;
+struct Rlint;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rpp_thread_fnct_phrase;
+struct Rpp_thread_fnct;
+struct Rpp_thread_fnct_id;
+struct R3asterics;
+struct Rpp_la_bndary_phrase;
+struct Rpp_la_bndary;
+struct Rpp_la_bndary_stc;
+struct Rparallel_parser_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_parser_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rpp_thread_fnct_phrase:public yacco2::CAbs_lr1_sym {
+ Rpp_thread_fnct_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rpp_thread_fnct:public yacco2::CAbs_lr1_sym {
+ Rpp_thread_fnct(yacco2::Parser* P);
+
+ public: T_parallel_thread_function* pp_fnct_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rpp_thread_fnct_id:public yacco2::CAbs_lr1_sym {
+ Rpp_thread_fnct_id(yacco2::Parser* P);
+ public:T_identifier* id_;
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct R3asterics:public yacco2::CAbs_lr1_sym {
+ R3asterics(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rpp_la_bndary_phrase:public yacco2::CAbs_lr1_sym {
+ Rpp_la_bndary_phrase(yacco2::Parser* P);
+
+ public:T_parallel_la_boundary* pp_la_bndary_;
+
+ public:
+ void sr1();
+};
+
+struct Rpp_la_bndary:public yacco2::CAbs_lr1_sym {
+ Rpp_la_bndary(yacco2::Parser* P);
+
+ public:T_parallel_la_boundary* pp_la_bndary_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rpp_la_bndary_stc:public yacco2::CAbs_lr1_sym {
+ Rpp_la_bndary_stc(yacco2::Parser* P);
+
+ public:
+ T_la_expr_src* la_exp_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_th.lex b/web/yacco2/compiler/grammars/parallel_parser_ph_th.lex
new file mode 100644
index 0000000000..93ffab2767
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_th.lex
@@ -0,0 +1,283 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: parallel_parser_ph_th.lex
+Dates: 15 Mar 2004
+Purpose: parse parallel-parser phrase
+Output: parallel-parser-phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |parallel_parser_phrase_th| thread.\fbreak
+Parse parallel-parser phrase.
+\fbreak
+Example of a parallel-parser construct to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/ppprsr.txt"}
+
+@/
+fsm
+(fsm-id "parallel_parser_ph_th.lex"
+,fsm-filename parallel_parser_ph_th
+,fsm-namespace NS_parallel_parser_ph_th
+,fsm-class Cparallel_parser_ph_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "identifier.h"
+#include "o2_sdc.h"
+#include "o2_code_end.h"
+#include "la_expr_src.h"
+ ***
+ user-declaration
+ public:
+ T_parallel_parser_phrase* parallel_parser_phrase_;
+ ***
+ constructor
+ parallel_parser_phrase_ = 0;
+ ***
+ op
+ if(parallel_parser_phrase_ != 0){
+ delete parallel_parser_phrase_;
+ parallel_parser_phrase_ = 0;
+ }
+ parallel_parser_phrase_ = new T_parallel_parser_phrase;
+ parallel_parser_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*parallel_parser_phrase_);
+ parallel_parser_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "11 mar 2004",fsm-debug "false"
+,fsm-comments "Parse grammar's parallel-parser construct.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_parallel_parser_ph_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rparallel_parser_phrase (){
+ -> Rlint
+ Ropen_par
+ Rlint
+ Rparameters
+ Rclose_par
+ Rlint {
+ op
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->parallel_parser_phrase_);
+ fsm->parallel_parser_phrase_ = 0;
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rpp_thread_fnct_phrase
+ Rpp_la_bndary_phrase
+}
+
+Rpp_thread_fnct_phrase (){
+ -> Rpp_thread_fnct Rlint
+ Rpp_thread_fnct_id
+ Rlint R3asterics Rlint {
+ op
+ T_parallel_thread_function* pp_fnct = sf->p1__->pp_fnct_;
+ pp_fnct->identifier(sf->p3__->id_);
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->parallel_parser_phrase_->pp_funct(pp_fnct);
+ ***
+ }
+}
+
+Rpp_thread_fnct (
+lhs{
+ user-declaration
+ public: T_parallel_thread_function* pp_fnct_;
+ ***
+ }
+){
+ -> ||| "#parallel-thread-function" NS_identifier::TH_identifier {
+ op
+ pp_fnct_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ pp_fnct_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_pp_thread_function_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ pp_fnct_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_thread_function_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpp_thread_fnct_id (
+lhs{user-declaration public:T_identifier* id_;***}
+){
+ -> ||| "identifier" NS_identifier::TH_identifier {
+ op
+ id_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ id_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_fnct_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ id_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_fnct_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+R3asterics (){
+ -> ||| "#***" NS_o2_code_end::TH_o2_code_end
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_end_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpp_la_bndary_phrase (
+lhs{
+ user-declaration
+ public:T_parallel_la_boundary* pp_la_bndary_;
+ ***
+ }
+){
+ -> Rpp_la_bndary Rlint Rpp_la_bndary_stc Rlint {
+ op
+ pp_la_bndary_ = sf->p1__->pp_la_bndary_;
+ pp_la_bndary_->la_supplier(sf->p3__->la_exp_->la_tok_can());
+ sf->p3__->la_exp_->zero_la_tok_can();
+ Cparallel_parser_ph_th* fsm =
+ (Cparallel_parser_ph_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->parallel_parser_phrase_->la_bndry(pp_la_bndary_);
+ ***
+ }
+}
+
+Rpp_la_bndary (
+lhs{
+ user-declaration
+ public:T_parallel_la_boundary* pp_la_bndary_;
+*** }
+){
+ -> ||| "#parallel-la-boundary" NS_identifier::TH_identifier {
+ op
+ pp_la_bndary_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ pp_la_bndary_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_pp_bndry_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ pp_la_bndary_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_bndry_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpp_la_bndary_stc (
+lhs{
+ user-declaration
+ public:
+ T_la_expr_src* la_exp_;
+ ***
+ }
+){
+ -> ||| "la-express-source" NS_la_expr_src::TH_la_expr_src {
+ op
+ la_exp_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ la_exp_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ la_exp_ = 0;
+ CAbs_lr1_sym* sym = new Err_no_pp_la_bndary_expr_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_thsym.cpp b/web/yacco2/compiler/grammars/parallel_parser_ph_thsym.cpp
new file mode 100644
index 0000000000..d21f4446a6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_thsym.cpp
@@ -0,0 +1,402 @@
+/*
+ File: parallel_parser_ph_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_ph_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_parallel_parser_ph_th::TH_parallel_parser_ph_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_parallel_parser_ph_th;
+ NS_parallel_parser_ph_th::Cparallel_parser_ph_th Cparallel_parser_ph_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cparallel_parser_ph_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_parallel_parser_ph_th::PROC_TH_parallel_parser_ph_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_parallel_parser_ph_th";
+ static bool one_time(false);
+ static NS_parallel_parser_ph_th::Cparallel_parser_ph_th* NS_parallel_parser_ph_th_Cparallel_parser_ph_th_(0);// parallel-parser's fsm table
+ static Parser* NS_parallel_parser_ph_th_Cparallel_parser_ph_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_parallel_parser_ph_th_Cparallel_parser_ph_th_ = new NS_parallel_parser_ph_th::Cparallel_parser_ph_th();// parallel-parser's fsm table
+ NS_parallel_parser_ph_th_Cparallel_parser_ph_th_parser = new Parser(*NS_parallel_parser_ph_th_Cparallel_parser_ph_th_,Caller_pp);
+ }
+ proc_parser = NS_parallel_parser_ph_th_Cparallel_parser_ph_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cparallel_parser_ph_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rparallel_parser_phrase_:{
+ Rparallel_parser_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_parser_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_parser_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rpp_thread_fnct_phrase_:{
+ Rpp_thread_fnct_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rpp_thread_fnct_:{
+ Rpp_thread_fnct* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rpp_thread_fnct_:{
+ Rpp_thread_fnct* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpp_thread_fnct_:{
+ Rpp_thread_fnct* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rpp_thread_fnct_id_:{
+ Rpp_thread_fnct_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rpp_thread_fnct_id_:{
+ Rpp_thread_fnct_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpp_thread_fnct_id_:{
+ Rpp_thread_fnct_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_thread_fnct_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_thread_fnct_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_R3asterics_:{
+ R3asterics* sym;
+ if(re->rule_ == 0){
+ sym = new R3asterics(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R3asterics*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_R3asterics_:{
+ R3asterics* sym;
+ if(re->rule_ == 0){
+ sym = new R3asterics(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (R3asterics*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rpp_la_bndary_phrase_:{
+ Rpp_la_bndary_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rpp_la_bndary_:{
+ Rpp_la_bndary* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rpp_la_bndary_:{
+ Rpp_la_bndary* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpp_la_bndary_:{
+ Rpp_la_bndary* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rpp_la_bndary_stc_:{
+ Rpp_la_bndary_stc* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary_stc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary_stc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rpp_la_bndary_stc_:{
+ Rpp_la_bndary_stc* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary_stc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary_stc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rpp_la_bndary_stc_:{
+ Rpp_la_bndary_stc* sym;
+ if(re->rule_ == 0){
+ sym = new Rpp_la_bndary_stc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpp_la_bndary_stc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/parallel_parser_ph_thtbl.cpp b/web/yacco2/compiler/grammars/parallel_parser_ph_thtbl.cpp
new file mode 100644
index 0000000000..3f95f4636c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_ph_thtbl.cpp
@@ -0,0 +1,924 @@
+/*
+ File: parallel_parser_ph_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_ph_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_ph_th;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cparallel_parser_ph_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cparallel_parser_ph_th[] ={
+1
+,0,17
+};
+// raw_close_bracket
+// LR1_questionable_shift_operator
+yacco2::UCHAR LA3_Cparallel_parser_ph_th[] ={
+2
+,0,1
+,6,2
+};
+// raw_close_bracket
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA4_Cparallel_parser_ph_th[] ={
+2
+,0,17
+,6,2
+};
+extern yacco2::State S1_Cparallel_parser_ph_th;
+extern yacco2::State S2_Cparallel_parser_ph_th;
+struct S2ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Cparallel_parser_ph_th S2tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Cparallel_parser_ph_th;
+extern yacco2::State S4_Cparallel_parser_ph_th;
+extern yacco2::State S5_Cparallel_parser_ph_th;
+extern yacco2::State S6_Cparallel_parser_ph_th;
+extern yacco2::State S7_Cparallel_parser_ph_th;
+extern yacco2::State S8_Cparallel_parser_ph_th;
+extern yacco2::State S9_Cparallel_parser_ph_th;
+extern yacco2::State S10_Cparallel_parser_ph_th;
+extern yacco2::State S11_Cparallel_parser_ph_th;
+extern yacco2::State S12_Cparallel_parser_ph_th;
+extern yacco2::State S13_Cparallel_parser_ph_th;
+extern yacco2::State S14_Cparallel_parser_ph_th;
+extern yacco2::State S15_Cparallel_parser_ph_th;
+struct S15ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S15ttd_Cparallel_parser_ph_th S15tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S16_Cparallel_parser_ph_th;
+extern yacco2::State S17_Cparallel_parser_ph_th;
+extern yacco2::State S18_Cparallel_parser_ph_th;
+extern yacco2::State S19_Cparallel_parser_ph_th;
+extern yacco2::State S20_Cparallel_parser_ph_th;
+struct S20ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S20ttd_Cparallel_parser_ph_th S20tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S21_Cparallel_parser_ph_th;
+extern yacco2::State S22_Cparallel_parser_ph_th;
+extern yacco2::State S23_Cparallel_parser_ph_th;
+extern yacco2::State S24_Cparallel_parser_ph_th;
+extern yacco2::State S25_Cparallel_parser_ph_th;
+extern yacco2::State S26_Cparallel_parser_ph_th;
+extern yacco2::State S27_Cparallel_parser_ph_th;
+struct S27ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S27ttd_Cparallel_parser_ph_th S27tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_la_expr_src
+};
+extern yacco2::State S28_Cparallel_parser_ph_th;
+extern yacco2::State S29_Cparallel_parser_ph_th;
+extern yacco2::State S30_Cparallel_parser_ph_th;
+extern yacco2::State S31_Cparallel_parser_ph_th;
+extern yacco2::State S32_Cparallel_parser_ph_th;
+extern yacco2::State S33_Cparallel_parser_ph_th;
+extern yacco2::State S34_Cparallel_parser_ph_th;
+extern yacco2::State S35_Cparallel_parser_ph_th;
+extern yacco2::State S36_Cparallel_parser_ph_th;
+extern yacco2::State S37_Cparallel_parser_ph_th;
+struct S37ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S37ttd_Cparallel_parser_ph_th S37tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_code_end
+};
+extern yacco2::State S38_Cparallel_parser_ph_th;
+extern yacco2::State S39_Cparallel_parser_ph_th;
+extern yacco2::State S40_Cparallel_parser_ph_th;
+extern yacco2::State S41_Cparallel_parser_ph_th;
+extern yacco2::State S42_Cparallel_parser_ph_th;
+struct S42ttd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S42ttd_Cparallel_parser_ph_th S42tt_Cparallel_parser_ph_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S43_Cparallel_parser_ph_th;
+extern yacco2::State S44_Cparallel_parser_ph_th;
+struct S1std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cparallel_parser_ph_th S1st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cparallel_parser_ph_th} // accept sym: Rparallel_parser_phrase
+ ,{570,(State*)&S4_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S1rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cparallel_parser_ph_th S1rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Cparallel_parser_ph_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S1st_Cparallel_parser_ph_th,(Reduce_tbl*)&S1rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S2std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cparallel_parser_ph_th S2st_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Cparallel_parser_ph_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cparallel_parser_ph_th,0,0,0,0};
+struct S3rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cparallel_parser_ph_th S3rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Cparallel_parser_ph_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cparallel_parser_ph_th,0,0,0};
+struct S4std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cparallel_parser_ph_th S4st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S12_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S13_Cparallel_parser_ph_th} // shift sym: raw_open_bracket
+ ,{571,(State*)&S5_Cparallel_parser_ph_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Cparallel_parser_ph_th = {0,(State*)&S12_Cparallel_parser_ph_th};
+yacco2::State S4_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S4qse_Cparallel_parser_ph_th
+};
+struct S5std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Cparallel_parser_ph_th S5st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S6_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S5rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cparallel_parser_ph_th S5rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Cparallel_parser_ph_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S5st_Cparallel_parser_ph_th,(Reduce_tbl*)&S5rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S6std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S6std_Cparallel_parser_ph_th S6st_Cparallel_parser_ph_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S14_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S15_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S7_Cparallel_parser_ph_th} // shift sym: Rparameters
+ ,{574,(State*)&S18_Cparallel_parser_ph_th} // shift sym: Rpp_thread_fnct_phrase
+ ,{575,(State*)&S32_Cparallel_parser_ph_th} // shift sym: Rpp_thread_fnct
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Cparallel_parser_ph_th = {3,(State*)&S15_Cparallel_parser_ph_th};
+yacco2::Shift_entry S6qse_Cparallel_parser_ph_th = {0,(State*)&S14_Cparallel_parser_ph_th};
+yacco2::State S6_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{6
+,(Shift_entry*)&S6pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S6st_Cparallel_parser_ph_th,0,(State_s_thread_tbl*)&S15tt_Cparallel_parser_ph_th,0,(Shift_entry*)&S6qse_Cparallel_parser_ph_th
+};
+struct S7std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Cparallel_parser_ph_th S7st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S8_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S9_Cparallel_parser_ph_th} // shift sym: raw_close_bracket
+ ,{572,(State*)&S10_Cparallel_parser_ph_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S7qse_Cparallel_parser_ph_th = {0,(State*)&S8_Cparallel_parser_ph_th};
+yacco2::State S7_Cparallel_parser_ph_th = //State's vectored into symbol: "Rparameters"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S7qse_Cparallel_parser_ph_th
+};
+struct S8rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cparallel_parser_ph_th S8rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S8_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cparallel_parser_ph_th,0,0,0};
+struct S9rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cparallel_parser_ph_th S9rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S9_Cparallel_parser_ph_th = //State's vectored into symbol: ")"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cparallel_parser_ph_th,0,0,0};
+struct S10std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_Cparallel_parser_ph_th S10st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S11_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S10rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cparallel_parser_ph_th S10rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S10_Cparallel_parser_ph_th = //State's vectored into symbol: "Rclose_par"
+{10
+,(Shift_entry*)&S10pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S10st_Cparallel_parser_ph_th,(Reduce_tbl*)&S10rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S11rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cparallel_parser_ph_th S11rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rparallel_parser_phrase_}
+ }// end of reduce table
+};
+yacco2::State S11_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cparallel_parser_ph_th,0,0,0};
+struct S12rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cparallel_parser_ph_th S12rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S12_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cparallel_parser_ph_th,0,0,0};
+struct S13rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cparallel_parser_ph_th S13rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S13_Cparallel_parser_ph_th = //State's vectored into symbol: "("
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cparallel_parser_ph_th,0,0,0};
+struct S14rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cparallel_parser_ph_th S14rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs3_Rpp_thread_fnct_}
+ }// end of reduce table
+};
+yacco2::State S14_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cparallel_parser_ph_th,0,0,0};
+struct S15std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Cparallel_parser_ph_th S15st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S16_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{290,(State*)&S17_Cparallel_parser_ph_th} // shift sym: T_parallel_thread_function
+ }// end of shift table
+};
+yacco2::Shift_entry S15qse_Cparallel_parser_ph_th = {0,(State*)&S16_Cparallel_parser_ph_th};
+yacco2::State S15_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S15qse_Cparallel_parser_ph_th
+};
+struct S16rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cparallel_parser_ph_th S16rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rpp_thread_fnct_}
+ }// end of reduce table
+};
+yacco2::State S16_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cparallel_parser_ph_th,0,0,0};
+struct S17rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cparallel_parser_ph_th S17rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_thread_fnct_}
+ }// end of reduce table
+};
+yacco2::State S17_Cparallel_parser_ph_th = //State's vectored into symbol: "#parallel-thread-function"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cparallel_parser_ph_th,0,0,0};
+struct S18std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S18std_Cparallel_parser_ph_th S18st_Cparallel_parser_ph_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S19_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S20_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S23_Cparallel_parser_ph_th} // shift sym: Rpp_la_bndary_phrase
+ ,{579,(State*)&S24_Cparallel_parser_ph_th} // shift sym: Rpp_la_bndary
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Cparallel_parser_ph_th = {3,(State*)&S20_Cparallel_parser_ph_th};
+yacco2::Shift_entry S18qse_Cparallel_parser_ph_th = {0,(State*)&S19_Cparallel_parser_ph_th};
+yacco2::State S18_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_thread_fnct_phrase"
+{18
+,(Shift_entry*)&S18pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S18st_Cparallel_parser_ph_th,0,(State_s_thread_tbl*)&S20tt_Cparallel_parser_ph_th,0,(Shift_entry*)&S18qse_Cparallel_parser_ph_th
+};
+struct S19rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cparallel_parser_ph_th S19rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs3_Rpp_la_bndary_}
+ }// end of reduce table
+};
+yacco2::State S19_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cparallel_parser_ph_th,0,0,0};
+struct S20std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S20std_Cparallel_parser_ph_th S20st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S21_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{287,(State*)&S22_Cparallel_parser_ph_th} // shift sym: T_parallel_la_boundary
+ }// end of shift table
+};
+yacco2::Shift_entry S20qse_Cparallel_parser_ph_th = {0,(State*)&S21_Cparallel_parser_ph_th};
+yacco2::State S20_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S20qse_Cparallel_parser_ph_th
+};
+struct S21rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cparallel_parser_ph_th S21rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rpp_la_bndary_}
+ }// end of reduce table
+};
+yacco2::State S21_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cparallel_parser_ph_th,0,0,0};
+struct S22rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cparallel_parser_ph_th S22rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_la_bndary_}
+ }// end of reduce table
+};
+yacco2::State S22_Cparallel_parser_ph_th = //State's vectored into symbol: "#parallel-la-boundary"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cparallel_parser_ph_th,0,0,0};
+struct S23rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cparallel_parser_ph_th S23rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S23_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_la_bndary_phrase"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cparallel_parser_ph_th,0,0,0};
+struct S24std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Cparallel_parser_ph_th S24st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S25_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S24rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cparallel_parser_ph_th S24rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_la_bndary"
+{24
+,(Shift_entry*)&S24pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S24st_Cparallel_parser_ph_th,(Reduce_tbl*)&S24rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S25std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_Cparallel_parser_ph_th S25st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S26_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S27_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S30_Cparallel_parser_ph_th} // shift sym: Rpp_la_bndary_stc
+ }// end of shift table
+};
+yacco2::Shift_entry S25pse_Cparallel_parser_ph_th = {3,(State*)&S27_Cparallel_parser_ph_th};
+yacco2::Shift_entry S25qse_Cparallel_parser_ph_th = {0,(State*)&S26_Cparallel_parser_ph_th};
+yacco2::State S25_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{25
+,(Shift_entry*)&S25pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S25st_Cparallel_parser_ph_th,0,(State_s_thread_tbl*)&S27tt_Cparallel_parser_ph_th,0,(Shift_entry*)&S25qse_Cparallel_parser_ph_th
+};
+struct S26rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cparallel_parser_ph_th S26rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs3_Rpp_la_bndary_stc_}
+ }// end of reduce table
+};
+yacco2::State S26_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cparallel_parser_ph_th,0,0,0};
+struct S27std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S27std_Cparallel_parser_ph_th S27st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S28_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{368,(State*)&S29_Cparallel_parser_ph_th} // shift sym: T_la_expr_src
+ }// end of shift table
+};
+yacco2::Shift_entry S27qse_Cparallel_parser_ph_th = {0,(State*)&S28_Cparallel_parser_ph_th};
+yacco2::State S27_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S27qse_Cparallel_parser_ph_th
+};
+struct S28rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cparallel_parser_ph_th S28rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rpp_la_bndary_stc_}
+ }// end of reduce table
+};
+yacco2::State S28_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cparallel_parser_ph_th,0,0,0};
+struct S29rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Cparallel_parser_ph_th S29rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_la_bndary_stc_}
+ }// end of reduce table
+};
+yacco2::State S29_Cparallel_parser_ph_th = //State's vectored into symbol: "la-express-source"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Cparallel_parser_ph_th,0,0,0};
+struct S30std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S30std_Cparallel_parser_ph_th S30st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S31_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S30pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S30rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cparallel_parser_ph_th S30rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S30_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_la_bndary_stc"
+{30
+,(Shift_entry*)&S30pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S30st_Cparallel_parser_ph_th,(Reduce_tbl*)&S30rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S31rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Cparallel_parser_ph_th S31rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_la_bndary_phrase_}
+ }// end of reduce table
+};
+yacco2::State S31_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Cparallel_parser_ph_th,0,0,0};
+struct S32std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S32std_Cparallel_parser_ph_th S32st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S33_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S32rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cparallel_parser_ph_th S32rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S32_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_thread_fnct"
+{32
+,(Shift_entry*)&S32pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S32st_Cparallel_parser_ph_th,(Reduce_tbl*)&S32rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S33std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S33std_Cparallel_parser_ph_th S33st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S41_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S42_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S34_Cparallel_parser_ph_th} // shift sym: Rpp_thread_fnct_id
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Cparallel_parser_ph_th = {3,(State*)&S42_Cparallel_parser_ph_th};
+yacco2::Shift_entry S33qse_Cparallel_parser_ph_th = {0,(State*)&S41_Cparallel_parser_ph_th};
+yacco2::State S33_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{33
+,(Shift_entry*)&S33pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S33st_Cparallel_parser_ph_th,0,(State_s_thread_tbl*)&S42tt_Cparallel_parser_ph_th,0,(Shift_entry*)&S33qse_Cparallel_parser_ph_th
+};
+struct S34std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S34std_Cparallel_parser_ph_th S34st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S35_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S34rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cparallel_parser_ph_th S34rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S34_Cparallel_parser_ph_th = //State's vectored into symbol: "Rpp_thread_fnct_id"
+{34
+,(Shift_entry*)&S34pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S34st_Cparallel_parser_ph_th,(Reduce_tbl*)&S34rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S35std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S35std_Cparallel_parser_ph_th S35st_Cparallel_parser_ph_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S36_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S37_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S39_Cparallel_parser_ph_th} // shift sym: R3asterics
+ }// end of shift table
+};
+yacco2::Shift_entry S35pse_Cparallel_parser_ph_th = {3,(State*)&S37_Cparallel_parser_ph_th};
+yacco2::Shift_entry S35qse_Cparallel_parser_ph_th = {0,(State*)&S36_Cparallel_parser_ph_th};
+yacco2::State S35_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{35
+,(Shift_entry*)&S35pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S35st_Cparallel_parser_ph_th,0,(State_s_thread_tbl*)&S37tt_Cparallel_parser_ph_th,0,(Shift_entry*)&S35qse_Cparallel_parser_ph_th
+};
+struct S36rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cparallel_parser_ph_th S36rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_R3asterics_}
+ }// end of reduce table
+};
+yacco2::State S36_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cparallel_parser_ph_th,0,0,0};
+struct S37std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S37std_Cparallel_parser_ph_th S37st_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {284,(State*)&S38_Cparallel_parser_ph_th} // shift sym: T_eocode
+ }// end of shift table
+};
+yacco2::State S37_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{37
+,0,0,0,0,(Shift_tbl*)&S37st_Cparallel_parser_ph_th,0,0,0,0};
+struct S38rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cparallel_parser_ph_th S38rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_R3asterics_}
+ }// end of reduce table
+};
+yacco2::State S38_Cparallel_parser_ph_th = //State's vectored into symbol: "#***"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cparallel_parser_ph_th,0,0,0};
+struct S39std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S39std_Cparallel_parser_ph_th S39st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cparallel_parser_ph_th} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S40_Cparallel_parser_ph_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Cparallel_parser_ph_th = {3,(State*)&S2_Cparallel_parser_ph_th};
+struct S39rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cparallel_parser_ph_th S39rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S39_Cparallel_parser_ph_th = //State's vectored into symbol: "R3asterics"
+{39
+,(Shift_entry*)&S39pse_Cparallel_parser_ph_th,0,0,0,(Shift_tbl*)&S39st_Cparallel_parser_ph_th,(Reduce_tbl*)&S39rt_Cparallel_parser_ph_th,(State_s_thread_tbl*)&S2tt_Cparallel_parser_ph_th,0,0};
+struct S40rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cparallel_parser_ph_th S40rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_thread_fnct_phrase_}
+ }// end of reduce table
+};
+yacco2::State S40_Cparallel_parser_ph_th = //State's vectored into symbol: "Rlint"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cparallel_parser_ph_th,0,0,0};
+struct S41rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cparallel_parser_ph_th S41rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs3_Rpp_thread_fnct_id_}
+ }// end of reduce table
+};
+yacco2::State S41_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cparallel_parser_ph_th,0,0,0};
+struct S42std_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S42std_Cparallel_parser_ph_th S42st_Cparallel_parser_ph_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S43_Cparallel_parser_ph_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S44_Cparallel_parser_ph_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S42qse_Cparallel_parser_ph_th = {0,(State*)&S43_Cparallel_parser_ph_th};
+yacco2::State S42_Cparallel_parser_ph_th = //State's vectored into symbol: "|||"
+{42
+,0,0,0,0,(Shift_tbl*)&S42st_Cparallel_parser_ph_th,0,0,0,(Shift_entry*)&S42qse_Cparallel_parser_ph_th
+};
+struct S43rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cparallel_parser_ph_th S43rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs2_Rpp_thread_fnct_id_}
+ }// end of reduce table
+};
+yacco2::State S43_Cparallel_parser_ph_th = //State's vectored into symbol: "|?|"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cparallel_parser_ph_th,0,0,0};
+struct S44rtd_Cparallel_parser_ph_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cparallel_parser_ph_th S44rt_Cparallel_parser_ph_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cparallel_parser_ph_th,Cparallel_parser_ph_th::rhs1_Rpp_thread_fnct_id_}
+ }// end of reduce table
+};
+yacco2::State S44_Cparallel_parser_ph_th = //State's vectored into symbol: "identifier"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cparallel_parser_ph_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrase.cpp b/web/yacco2/compiler/grammars/parallel_parser_phrase.cpp
new file mode 100644
index 0000000000..0fff2c7e79
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: parallel_parser_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cparallel_parser_phrase::
+ Cparallel_parser_phrase()
+ :yacco2::CAbs_fsm
+ ("parallel_parser_phrase.lex"
+ ,"1.0"
+ ,"15 mar 2004"
+ ,false
+ ,"Dispather to parse grammar's ``parallel-parser'' construct."
+ ,"Fri Jan 30 18:55:19 2015 "
+ ,S1_Cparallel_parser_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+Cparallel_parser_phrase::~Cparallel_parser_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cparallel_parser_phrase::failed(){
+ return false;
+ }
+ void Cparallel_parser_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Cparallel_parser_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rparallel_parser_phrase::Rparallel_parser_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_parser_phrase",0,Cparallel_parser_phrase::R_Rparallel_parser_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Cparallel_parser_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_parser_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrase.fsc b/web/yacco2/compiler/grammars/parallel_parser_phrase.fsc
new file mode 100644
index 0000000000..1647a8530d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: parallel_parser_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+transitive y
+grammar-name "parallel_parser_phrase"
+name-space "NS_parallel_parser_phrase"
+thread-name "Cparallel_parser_phrase"
+monolithic y
+file-name "parallel_parser_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_parallel_parser_ph_th::TH_parallel_parser_ph_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_parallel_parser_ph_th::TH_parallel_parser_ph_th
+end-list-of-used-threads
+fsm-comments
+"Dispather to parse grammar's ``parallel-parser'' construct."
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrase.h b/web/yacco2/compiler/grammars/parallel_parser_phrase.h
new file mode 100644
index 0000000000..58dce54b53
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrase.h
@@ -0,0 +1,70 @@
+/*
+ File: parallel_parser_phrase.h
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#ifndef __parallel_parser_phrase_h__
+#define __parallel_parser_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+ using namespace NS_yacco2_terminals;
+ #include "parallel_parser_ph_th.h"
+ #include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cparallel_parser_phrase;
+namespace NS_parallel_parser_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cparallel_parser_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rparallel_parser_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rparallel_parser_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Cparallel_parser_phrase();
+ ~Cparallel_parser_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rparallel_parser_phrase;
+struct Rphrase;
+struct Rparallel_parser_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_parser_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrase.lex b/web/yacco2/compiler/grammars/parallel_parser_phrase.lex
new file mode 100644
index 0000000000..99f76a54c0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrase.lex
@@ -0,0 +1,77 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: parallel_parser_phrase.lex
+Dates: 15 Mar 2004
+Purpose: parse parallel-parser construct
+ Monolithic grammar that launches its thread.
+ Properly handles threads and errors. Starts
+ from a procedure using another parser's
+ token stream from a specific point.
+Note: Use of ||| |?| phrase to catch other returned terminals
+ or errors. In this case, it is errors.
+ One can be selective within various contexts:
+ 1) within arbitration
+ 2) sub-rule level
+ The symbol's enumerated id is the fodder to filter on.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |parallel_parser_phrase| grammar.\fbreak
+Dispatcher to parse the parallel-parser construct:
+lookahead expression and the grammr's thread identity.
+@/
+fsm
+(fsm-id "parallel_parser_phrase.lex"
+,fsm-filename parallel_parser_phrase
+,fsm-namespace NS_parallel_parser_phrase
+,fsm-class Cparallel_parser_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+ #include "parallel_parser_ph_th.h"
+ #include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "15 mar 2004",fsm-debug "false"
+,fsm-comments "Dispather to parse grammar's ``parallel-parser'' construct.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rparallel_parser_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "parallel-parser-phrase"
+ NS_parallel_parser_ph_th::TH_parallel_parser_ph_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrasesym.cpp b/web/yacco2/compiler/grammars/parallel_parser_phrasesym.cpp
new file mode 100644
index 0000000000..ac2e1aa515
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: parallel_parser_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cparallel_parser_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rparallel_parser_phrase_:{
+ Rparallel_parser_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_parser_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_parser_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/parallel_parser_phrasetbl.cpp b/web/yacco2/compiler/grammars/parallel_parser_phrasetbl.cpp
new file mode 100644
index 0000000000..e9ad3efd6f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/parallel_parser_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: parallel_parser_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:19 2015
+*/
+#include "parallel_parser_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_parallel_parser_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cparallel_parser_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cparallel_parser_phrase;
+extern yacco2::State S2_Cparallel_parser_phrase;
+extern yacco2::State S3_Cparallel_parser_phrase;
+struct S3ttd_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Cparallel_parser_phrase S3tt_Cparallel_parser_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_parallel_parser_ph_th
+};
+extern yacco2::State S4_Cparallel_parser_phrase;
+extern yacco2::State S5_Cparallel_parser_phrase;
+extern yacco2::State S6_Cparallel_parser_phrase;
+struct S1std_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cparallel_parser_phrase S1st_Cparallel_parser_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Cparallel_parser_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Cparallel_parser_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cparallel_parser_phrase} // accept sym: Rparallel_parser_phrase
+ ,{570,(State*)&S6_Cparallel_parser_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cparallel_parser_phrase = {3,(State*)&S3_Cparallel_parser_phrase};
+yacco2::Shift_entry S1qse_Cparallel_parser_phrase = {0,(State*)&S2_Cparallel_parser_phrase};
+yacco2::State S1_Cparallel_parser_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cparallel_parser_phrase,0,0,0,(Shift_tbl*)&S1st_Cparallel_parser_phrase,0,(State_s_thread_tbl*)&S3tt_Cparallel_parser_phrase,0,(Shift_entry*)&S1qse_Cparallel_parser_phrase
+};
+struct S2rtd_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cparallel_parser_phrase S2rt_Cparallel_parser_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_phrase,Cparallel_parser_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Cparallel_parser_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cparallel_parser_phrase,0,0,0};
+struct S3std_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cparallel_parser_phrase S3st_Cparallel_parser_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Cparallel_parser_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{329,(State*)&S5_Cparallel_parser_phrase} // shift sym: T_parallel_parser_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cparallel_parser_phrase = {0,(State*)&S4_Cparallel_parser_phrase};
+yacco2::State S3_Cparallel_parser_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cparallel_parser_phrase,0,0,0,(Shift_entry*)&S3qse_Cparallel_parser_phrase
+};
+struct S4rtd_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cparallel_parser_phrase S4rt_Cparallel_parser_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_phrase,Cparallel_parser_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Cparallel_parser_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cparallel_parser_phrase,0,0,0};
+struct S5rtd_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cparallel_parser_phrase S5rt_Cparallel_parser_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_phrase,Cparallel_parser_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Cparallel_parser_phrase = //State's vectored into symbol: "parallel-parser-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cparallel_parser_phrase,0,0,0};
+struct S6rtd_Cparallel_parser_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cparallel_parser_phrase S6rt_Cparallel_parser_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cparallel_parser_phrase,Cparallel_parser_phrase::rhs1_Rparallel_parser_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Cparallel_parser_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cparallel_parser_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/pass3.cpp b/web/yacco2/compiler/grammars/pass3.cpp
new file mode 100644
index 0000000000..eb42117a11
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3.cpp
@@ -0,0 +1,410 @@
+/*
+ File: pass3.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pass3;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cpass3::
+ Cpass3()
+ :yacco2::CAbs_fsm
+ ("pass3.lex"
+ ,"1.0"
+ ,"17 Apr 2001"
+ ,false
+ ,"\\O2's lexer constructing tokens for syntax parser stage."
+ ,"Fri Jan 30 18:55:20 2015 "
+ ,S1_Cpass3){
+
+ }
+
+Cpass3::~Cpass3(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cpass3::failed(){
+ return false;
+ }
+ void Cpass3::op(){
+ ++Cpass3::nested_use_cnt_;
+
+}
+int Cpass3::rhs_to_rules_mapping_[22] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,3 // subrule 19 for rule 4
+ ,3 // subrule 20 for rule 4
+ ,3 // subrule 21 for rule 4
+};
+
+ int Cpass3::nested_use_cnt_(0);
+
+Rpass3::Rpass3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpass3",0,Cpass3::R_Rpass3_,P,false,false){
+}
+
+void Rpass3::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ if(Cpass3::nested_use_cnt_ == 1){
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ }
+ --Cpass3::nested_use_cnt_;
+
+}
+void Rpass3::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_empty_file;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rpass3::sr2(){
+
+ if (GRAMMAR_TREE == 0){
+ CAbs_lr1_sym* sym = new Err_empty_file;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+
+}
+
+Relems::Relems(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relems",0,Cpass3::R_Relems_,P,false,false){
+}
+
+Rtoken::Rtoken(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken",0,Cpass3::R_Rtoken_,P,false,false){
+}
+
+void Rtoken::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_misplaced_or_misspelt_Rule_or_T;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* key = sf->p2__;// extract specific keyword
+ yacco2::INT cont_pos = rule_info__.parser__->current_token_pos__;
+ CAbs_lr1_sym* cont_tok = rule_info__.parser__->current_token();
+ bool result =
+ PROCESS_KEYWORD_FOR_SYNTAX_CODE(*rule_info__.parser__,key,&cont_tok,&cont_pos);
+ if(result == false){
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*key);
+ // adv. to phrase's LA pos
+ rule_info__.parser__->override_current_token(*cont_tok,cont_pos);
+
+}
+
+void Rtoken::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_use_of_N_outside_Rules_construct;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_use_of_T_outside_Rules_construct;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);
+
+}
+
+void Rtoken::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ BUILD_GRAMMAR_TREE(*cweb_t_);
+ CWEB_MARKER = 0;
+
+}
+
+void Rtoken::sr10(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_kw_defining_grammar_construct;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr13(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken::sr14(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_char* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Err_bad_char* k = sf->p2__;
+ ADD_TOKEN_TO_ERROR_QUEUE(*k);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+Rprefile_inc_dispatcher::Rprefile_inc_dispatcher(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprefile_inc_dispatcher",0,Cpass3::R_Rprefile_inc_dispatcher_,P,false,false){
+}
+
+void Rprefile_inc_dispatcher::sr1(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_file_inclusion* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* err = sf->p2__->error_sym();
+ if(err != 0) {
+ rule_info__.parser__->set_abort_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__->error_sym());
+ return;
+ }
+ bool result = PROCESS_INCLUDE_FILE(*rule_info__.parser__
+ ,*sf->p2__,*rule_info__.parser__->token_producer__);
+ if(result == false){ // exceeded nested file limit
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_RECYCLE_BIN(*sf->p2__);//file name inside
+ return;
+
+}
+
+void Rprefile_inc_dispatcher::sr2(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rprefile_inc_dispatcher::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/pass3.fsc b/web/yacco2/compiler/grammars/pass3.fsc
new file mode 100644
index 0000000000..2fb23ab271
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3.fsc
@@ -0,0 +1,32 @@
+/*
+ File: pass3.fsc
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+transitive y
+grammar-name "pass3"
+name-space "NS_pass3"
+thread-name "Cpass3"
+monolithic y
+file-name "pass3.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ LR1_questionable_shift_operator
+ LR1_eog
+ raw_at_sign
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 5
+ NS_eol::TH_eol
+ NS_identifier::TH_identifier
+ NS_ws::TH_ws
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_bad_char_set::TH_bad_char_set
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_bad_char_set::TH_bad_char_set
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_eol::TH_eol
+ NS_identifier::TH_identifier
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"\\O2's lexer constructing tokens for syntax parser stage."
diff --git a/web/yacco2/compiler/grammars/pass3.h b/web/yacco2/compiler/grammars/pass3.h
new file mode 100644
index 0000000000..85bfba7ae8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3.h
@@ -0,0 +1,120 @@
+/*
+ File: pass3.h
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#ifndef __pass3_h__
+#define __pass3_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "ws.h"
+#include "cweb_or_c_k.h"
+#include "bad_char_set.h"
+#include "eol.h"
+#include "prefile_include.h"
+#include "identifier.h"
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cpass3;
+namespace NS_pass3 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cpass3: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rpass3_ = 569//start_of_rule_list + 0
+ ,rhs1_Rpass3_ = 1
+ ,rhs2_Rpass3_ = 2
+ ,R_Relems_ = 570//start_of_rule_list + 2
+ ,rhs1_Relems_ = 3
+ ,rhs2_Relems_ = 4
+ ,R_Rtoken_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtoken_ = 5
+ ,rhs2_Rtoken_ = 6
+ ,rhs3_Rtoken_ = 7
+ ,rhs4_Rtoken_ = 8
+ ,rhs5_Rtoken_ = 9
+ ,rhs6_Rtoken_ = 10
+ ,rhs7_Rtoken_ = 11
+ ,rhs8_Rtoken_ = 12
+ ,rhs9_Rtoken_ = 13
+ ,rhs10_Rtoken_ = 14
+ ,rhs11_Rtoken_ = 15
+ ,rhs12_Rtoken_ = 16
+ ,rhs13_Rtoken_ = 17
+ ,rhs14_Rtoken_ = 18
+ ,R_Rprefile_inc_dispatcher_ = 572//start_of_rule_list + 6
+ ,rhs1_Rprefile_inc_dispatcher_ = 19
+ ,rhs2_Rprefile_inc_dispatcher_ = 20
+ ,rhs3_Rprefile_inc_dispatcher_ = 21
+ };
+ //no of la sets = 2
+ //no of states = 26
+ Cpass3();
+ ~Cpass3();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[22];
+
+ public:
+static int nested_use_cnt_;
+
+ };
+struct Rpass3;
+struct Relems;
+struct Rtoken;
+struct Rprefile_inc_dispatcher;
+struct Rpass3:public yacco2::CAbs_lr1_sym {
+ Rpass3(yacco2::Parser* P);
+ void op();
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Relems:public yacco2::CAbs_lr1_sym {
+ Relems(yacco2::Parser* P);
+ public:
+};
+
+struct Rtoken:public yacco2::CAbs_lr1_sym {
+ Rtoken(yacco2::Parser* P);
+ public:
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+};
+
+struct Rprefile_inc_dispatcher:public yacco2::CAbs_lr1_sym {
+ Rprefile_inc_dispatcher(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/pass3.lex b/web/yacco2/compiler/grammars/pass3.lex
new file mode 100644
index 0000000000..ede22197b6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3.lex
@@ -0,0 +1,345 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: pass3.lex
+dates: 7 Juin 2003
+Purpose: Lexical Phase
+Changed: added keyword recognition by symbol table lookup.
+ eliminate parallelism between identifier and yacco2_keyword
+Note: The use_cnt_ deals with the problem of
+recursion using this grammar and to write only once
+the eog tokens to close off the producer container.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** pass3 stand alone Grammar.\fbreak
+Lexical / syntactic dispatcher for the grammar
+being parsed.\fbreak
+Why the name |pass3|? The short of it: when i was developing a long time ago
+there were 3 passes.
+Through attrition it became one. I was too lazy to rename it to |pass1|.
+So that's the blah blah blog of it all.\fbreak
+\fbreak
+It calls |PROCESS_KEYWORD_FOR_SYNTAX_CODE|
+when keywords are discovered.
+This is a top/down approach to parsing
+as the ``called procedure'' then calls (dispatches on)
+the keyword's content to its parsing procedure that of course
+contains a monolithic bottom-up grammar
+ to digest the grammar constuct.
+Neat stuff to see
+how the 2 approaches to parsing
+can blend together: a monolithic grammar
+using threaded grammars to parse its stuff.\fbreak
+\fbreak
+Let's look at this from above:\fbreak
+Here we have a standalone grammar calling
+a procedure that
+runs a standalone grammar that calls more threads.
+Well i think this is neat... no ice sir
+and hold the applause. thk u.\fbreak
+\fbreak
+Changed: added keyword recognition by symbol table lookup.
+eliminated competing parallelism between identifier and |yacco2_keyword|
+that now no longer exists.\fbreak
+\fbreak
+Note:\fbreak
+The use\_cnt\_ deals with the problem of
+recursion using this grammar and to write only once
+the eog tokens to close off the producer container.
+\fbreak
+\fbreak
+Please see the |Rprefile_inc_dispatcher| rule
+as an example of chained procedure call. The chaining is on the ``\ATsign''
+ which is also the start character of
+grammar |NS_prefile_inc::PROC_TH_prefile_inc| which is called as a procedure.
+This is an example of an optimization: thread activation is toooooo slow compared
+to a procedure call. Now what about inlining ugh?
+\fbreak
+\fbreak
+An improvement: grammar file has no contents\fbreak
+21-Apr-2014
+@/
+fsm
+(fsm-id "pass3.lex",fsm-filename pass3,fsm-namespace NS_pass3
+,fsm-class Cpass3{
+ user-declaration
+ public:
+static int nested_use_cnt_;
+ ***
+ user-implementation
+ int Cpass3::nested_use_cnt_(0);
+ ***
+ op
+ ++Cpass3::nested_use_cnt_;
+ ***
+ user-prefix-declaration
+#include "ws.h"
+#include "cweb_or_c_k.h"
+#include "bad_char_set.h"
+#include "eol.h"
+#include "prefile_include.h"
+#include "identifier.h"
+#include "o2_externs.h"
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Apr 2001",fsm-debug "false"
+,fsm-comments "\\O2's lexer constructing tokens for syntax parser stage.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rpass3 (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ if(Cpass3::nested_use_cnt_ == 1){
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ }
+ --Cpass3::nested_use_cnt_;
+ ***
+ }
+){
+ -> eog {
+ op
+ CAbs_lr1_sym* sym = new Err_empty_file;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> Relems eog {
+ op
+ if (GRAMMAR_TREE == 0){
+ CAbs_lr1_sym* sym = new Err_empty_file;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ }
+ ***
+ }
+}
+
+Relems
+/@
+ @*2 Relems --- left recursion diagram.\fbreak
+ Note: the left recursion drawn as a Pascal railroad diagram.
+@/
+
+(){
+ -> Rtoken
+ -> Relems Rtoken
+}
+
+
+Rtoken (){
+ -> ||| ws NS_ws::TH_ws
+ -> ||| eol NS_eol::TH_eol
+ -> ||| "identifier" NS_identifier::TH_identifier {
+ /@
+ @*2 Identifier slip thru.\fbreak
+ As i use a top / down process to consume constructs,
+ an Identifier some how is slipping thru due to either a premature
+ ending of Rules top / down parse process
+ or a before out-of-alignment token
+ that should be within the Rules Vocabulary, or a
+ misplaced misspelt T.
+ @/
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_misplaced_or_misspelt_Rule_or_T;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| |+| NULL{// keywords emitted from identifier
+ /@
+ @*2 Dispatch keyword to process its construct phrase.\fbreak
+ Again
+ neat stuff with its co-operation of top/down and bottom-up
+ parsing paradigms. Notice that i use the catch all ``|+|''
+ to show case it where as i could have referenced``keyword''.
+ This is how the parser works:\fbreak
+ \ptindent{1) check the state's table for specificly returned T from thread call}
+ \ptindent{2) check for ``catch all'' returned presence from a thread call}
+ \ptindent{3) try current token T to shift if thread call did not work or is not present in state}
+ \ptindent{4) check for ``catch all'' presence in the state to shift }
+ Note: there are 2 types of ``catch all'': one for returned T from
+ thread calls and the other for regular parsing.
+ @/
+ op
+ CAbs_lr1_sym* key = sf->p2__;// extract specific keyword
+ yacco2::INT cont_pos = rule_info__.parser__->current_token_pos__;
+ CAbs_lr1_sym* cont_tok = rule_info__.parser__->current_token();
+ bool result =
+ PROCESS_KEYWORD_FOR_SYNTAX_CODE(*rule_info__.parser__,key,&cont_tok,&cont_pos);
+ if(result == false){
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*key);
+ // adv. to phrase's LA pos
+ rule_info__.parser__->override_current_token(*cont_tok,cont_pos);
+ ***
+ }
+ -> ||| "rule-in-stbl" NULL {// emitted from identifier thread
+ /@
+ @*3 ``rule-in-stbl'' slip thru.\fbreak
+ The top / down process lexes and consumes this token
+ so this token never hits this grammar.
+ Probable cause is a pre-mature stoppage of the ``rules'' construct.
+ Why is ``rule-in-stbl'' returned?
+ The token has been defined or referenced by one or more defining rules.
+ The first occurance in the rules construct enters it into the symbol
+ table as defined or referenced. Depending on its next usuage context,
+ defined or referenced will update the its symbol table's
+ attributes.
+ @/
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_use_of_N_outside_Rules_construct;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {// emitted from identifier thread
+ /@
+ @*3 ``T-in-stbl'' slip thru.\fbreak
+ Could be an out-of-construct token
+ that has been defined in the Terminal vocabulary.
+ For example the token came before the Rules construct.
+ Probably a typo mistake by the grammar writer.
+ @/
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_use_of_T_outside_Rules_construct;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ ->
+ /@
+ @*2 \Yacco2's pre-processor include directive.\fbreak
+ \fbreak
+ This demonstrates a nested environment
+ where the grammar uses recursion by
+ calling a function which contains the |pass3| grammar sequence.
+ In this example, grammar |pass3|
+ manually calls a thread via
+ |start_manually_parallel_parsing|
+ to get its file name to process.
+ With the returned ``file-inclusion'' terminal,
+ |PROCESS_INCLUDE_FILE| is called to parse
+ the include file: a bom-de-bom-bom bump-and-grind sequence.
+ The |use_cnt_| is a global variable that protects
+ against the file include recursion of calling self
+ until a stack overflow occurs.
+ @/
+
+"@" Rprefile_inc_dispatcher
+ -> ||| "comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_comment* k = sf->p2__;
+ k->set_auto_delete(true);
+ ***
+ }
+ -> ||| "cweb-comment" NULL {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ BUILD_GRAMMAR_TREE(*cweb_t_);
+ CWEB_MARKER = 0;
+ ***
+ }
+ ->
+ /@
+ @* Error subrules.\fbreak
+ @/
+
+ |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_kw_defining_grammar_construct;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "bad eos" NULL { //
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "comment-overrun" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "bad char" NS_bad_char_set::TH_bad_char_set{
+ op
+ Err_bad_char* k = sf->p2__;
+ ADD_TOKEN_TO_ERROR_QUEUE(*k);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+
+}
+
+Rprefile_inc_dispatcher (){
+ -> |t| "file-inclusion" NS_prefile_include::PROC_TH_prefile_include {
+ op
+ CAbs_lr1_sym* err = sf->p2__->error_sym();
+ if(err != 0) {
+ rule_info__.parser__->set_abort_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__->error_sym());
+ return;
+ }
+ bool result = PROCESS_INCLUDE_FILE(*rule_info__.parser__
+ ,*sf->p2__,*rule_info__.parser__->token_producer__);
+ if(result == false){ // exceeded nested file limit
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_RECYCLE_BIN(*sf->p2__);//file name inside
+ return;
+ ***
+ }
+ -> |t| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/pass3sym.cpp b/web/yacco2/compiler/grammars/pass3sym.cpp
new file mode 100644
index 0000000000..fa74ae2f8b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3sym.cpp
@@ -0,0 +1,339 @@
+/*
+ File: pass3sym.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pass3;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cpass3::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs1_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs8_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs1_Rprefile_inc_dispatcher_:{
+ Rprefile_inc_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rprefile_inc_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprefile_inc_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rprefile_inc_dispatcher_:{
+ Rprefile_inc_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rprefile_inc_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprefile_inc_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rprefile_inc_dispatcher_:{
+ Rprefile_inc_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rprefile_inc_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprefile_inc_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/pass3tbl.cpp b/web/yacco2/compiler/grammars/pass3tbl.cpp
new file mode 100644
index 0000000000..9a29a38e0f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/pass3tbl.cpp
@@ -0,0 +1,470 @@
+/*
+ File: pass3tbl.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "pass3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pass3;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_eog
+// LR1_reduce_operator
+// raw_at_sign
+yacco2::UCHAR LA1_Cpass3[] ={
+2
+,0,19
+,9,1
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cpass3[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cpass3;
+extern yacco2::State S2_Cpass3;
+extern yacco2::State S3_Cpass3;
+extern yacco2::State S4_Cpass3;
+struct S4ttd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[5];
+};
+S4ttd_Cpass3 S4tt_Cpass3 = {
+ 5 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+ ,(yacco2::Thread_entry*)&ITH_ws
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_bad_char_set
+};
+extern yacco2::State S5_Cpass3;
+extern yacco2::State S6_Cpass3;
+extern yacco2::State S7_Cpass3;
+extern yacco2::State S8_Cpass3;
+extern yacco2::State S9_Cpass3;
+extern yacco2::State S10_Cpass3;
+extern yacco2::State S11_Cpass3;
+extern yacco2::State S12_Cpass3;
+extern yacco2::State S13_Cpass3;
+extern yacco2::State S14_Cpass3;
+extern yacco2::State S15_Cpass3;
+extern yacco2::State S16_Cpass3;
+extern yacco2::State S17_Cpass3;
+extern yacco2::State S18_Cpass3;
+extern yacco2::State S19_Cpass3;
+extern yacco2::State S20_Cpass3;
+extern yacco2::State S21_Cpass3;
+extern yacco2::State S22_Cpass3;
+extern yacco2::State S23_Cpass3;
+extern yacco2::State S24_Cpass3;
+extern yacco2::State S25_Cpass3;
+extern yacco2::State S26_Cpass3;
+struct S1std_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S1std_Cpass3 S1st_Cpass3 = {
+ 7
+ ,
+ {// start of table
+ {0,(State*)&S2_Cpass3} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S3_Cpass3} // shift sym: LR1_eog
+ ,{3,(State*)&S4_Cpass3} // shift sym: LR1_parallel_operator
+ ,{72,(State*)&S17_Cpass3} // shift sym: raw_at_sign
+ ,{569,(State*)&S1_Cpass3} // accept sym: Rpass3
+ ,{570,(State*)&S23_Cpass3} // shift sym: Relems
+ ,{571,(State*)&S26_Cpass3} // shift sym: Rtoken
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cpass3 = {3,(State*)&S4_Cpass3};
+yacco2::Shift_entry S1qse_Cpass3 = {0,(State*)&S2_Cpass3};
+yacco2::State S1_Cpass3 = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cpass3,0,0,0,(Shift_tbl*)&S1st_Cpass3,0,(State_s_thread_tbl*)&S4tt_Cpass3,0,(Shift_entry*)&S1qse_Cpass3
+};
+struct S2rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cpass3 S2rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs10_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S2_Cpass3 = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cpass3,0,0,0};
+struct S3rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cpass3 S3rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cpass3,Cpass3::rhs1_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S3_Cpass3 = //State's vectored into symbol: "eog"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cpass3,0,0,0};
+struct S4std_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[12];
+};
+S4std_Cpass3 S4st_Cpass3 = {
+ 12
+ ,
+ {// start of table
+ {6,(State*)&S5_Cpass3} // shift sym: LR1_all_shift_operator
+ ,{268,(State*)&S6_Cpass3} // shift sym: T_eol
+ ,{271,(State*)&S7_Cpass3} // shift sym: T_comment
+ ,{272,(State*)&S8_Cpass3} // shift sym: T_ws
+ ,{279,(State*)&S9_Cpass3} // shift sym: T_identifier
+ ,{344,(State*)&S10_Cpass3} // shift sym: T_in_stbl
+ ,{346,(State*)&S11_Cpass3} // shift sym: rule_in_stbl
+ ,{372,(State*)&S12_Cpass3} // shift sym: T_cweb_comment
+ ,{394,(State*)&S13_Cpass3} // shift sym: Err_bad_eos
+ ,{395,(State*)&S14_Cpass3} // shift sym: Err_bad_esc
+ ,{396,(State*)&S15_Cpass3} // shift sym: Err_comment_overrun
+ ,{397,(State*)&S16_Cpass3} // shift sym: Err_bad_char
+ }// end of shift table
+};
+yacco2::Shift_entry S4ase_Cpass3 = {6,(State*)&S5_Cpass3};
+yacco2::State S4_Cpass3 = //State's vectored into symbol: "|||"
+{4
+,0,(Shift_entry*)&S4ase_Cpass3
+,0,0,(Shift_tbl*)&S4st_Cpass3,0,0,0,0};
+struct S5rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cpass3 S5rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs4_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S5_Cpass3 = //State's vectored into symbol: "|+|"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cpass3,0,0,0};
+struct S6rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cpass3 S6rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs2_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S6_Cpass3 = //State's vectored into symbol: "eol"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cpass3,0,0,0};
+struct S7rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cpass3 S7rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs8_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S7_Cpass3 = //State's vectored into symbol: "comment"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cpass3,0,0,0};
+struct S8rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cpass3 S8rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs1_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S8_Cpass3 = //State's vectored into symbol: "ws"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cpass3,0,0,0};
+struct S9rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cpass3 S9rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs3_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S9_Cpass3 = //State's vectored into symbol: "identifier"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cpass3,0,0,0};
+struct S10rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cpass3 S10rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs6_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S10_Cpass3 = //State's vectored into symbol: "T-in-stbl"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cpass3,0,0,0};
+struct S11rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cpass3 S11rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs5_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S11_Cpass3 = //State's vectored into symbol: "rule-in-stbl"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cpass3,0,0,0};
+struct S12rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cpass3 S12rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs9_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S12_Cpass3 = //State's vectored into symbol: "cweb-comment"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cpass3,0,0,0};
+struct S13rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cpass3 S13rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs11_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S13_Cpass3 = //State's vectored into symbol: "bad eos"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cpass3,0,0,0};
+struct S14rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cpass3 S14rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs13_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S14_Cpass3 = //State's vectored into symbol: "bad esc"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cpass3,0,0,0};
+struct S15rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cpass3 S15rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs12_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S15_Cpass3 = //State's vectored into symbol: "comment-overrun"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cpass3,0,0,0};
+struct S16rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cpass3 S16rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs14_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S16_Cpass3 = //State's vectored into symbol: "bad char"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cpass3,0,0,0};
+struct S17std_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Cpass3 S17st_Cpass3 = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S18_Cpass3} // shift sym: LR1_questionable_shift_operator
+ ,{7,(State*)&S19_Cpass3} // shift sym: LR1_fset_transience_operator
+ ,{572,(State*)&S22_Cpass3} // shift sym: Rprefile_inc_dispatcher
+ }// end of shift table
+};
+yacco2::Shift_entry S17pcse_Cpass3 = {7,(State*)&S19_Cpass3};
+yacco2::Shift_entry S17qse_Cpass3 = {0,(State*)&S18_Cpass3};
+yacco2::State S17_Cpass3 = //State's vectored into symbol: "@"
+{17
+,0,0,0,(Shift_entry*)&S17pcse_Cpass3,(Shift_tbl*)&S17st_Cpass3,0,0,(yacco2::Type_pc_fnct_ptr)&NS_prefile_include::PROC_TH_prefile_include,(Shift_entry*)&S17qse_Cpass3
+};
+struct S18rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cpass3 S18rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs3_Rprefile_inc_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S18_Cpass3 = //State's vectored into symbol: "|?|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cpass3,0,0,0};
+struct S19std_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S19std_Cpass3 S19st_Cpass3 = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S20_Cpass3} // shift sym: LR1_questionable_shift_operator
+ ,{278,(State*)&S21_Cpass3} // shift sym: T_file_inclusion
+ }// end of shift table
+};
+yacco2::Shift_entry S19qse_Cpass3 = {0,(State*)&S20_Cpass3};
+yacco2::State S19_Cpass3 = //State's vectored into symbol: "|t|"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cpass3,0,0,0,(Shift_entry*)&S19qse_Cpass3
+};
+struct S20rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cpass3 S20rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs2_Rprefile_inc_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S20_Cpass3 = //State's vectored into symbol: "|?|"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cpass3,0,0,0};
+struct S21rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cpass3 S21rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs1_Rprefile_inc_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S21_Cpass3 = //State's vectored into symbol: "file-inclusion"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cpass3,0,0,0};
+struct S22rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cpass3 S22rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs7_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S22_Cpass3 = //State's vectored into symbol: "Rprefile_inc_dispatcher"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cpass3,0,0,0};
+struct S23std_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S23std_Cpass3 S23st_Cpass3 = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S2_Cpass3} // shift sym: LR1_questionable_shift_operator
+ ,{1,(State*)&S24_Cpass3} // shift sym: LR1_eog
+ ,{3,(State*)&S4_Cpass3} // shift sym: LR1_parallel_operator
+ ,{72,(State*)&S17_Cpass3} // shift sym: raw_at_sign
+ ,{571,(State*)&S25_Cpass3} // shift sym: Rtoken
+ }// end of shift table
+};
+yacco2::Shift_entry S23pse_Cpass3 = {3,(State*)&S4_Cpass3};
+yacco2::Shift_entry S23qse_Cpass3 = {0,(State*)&S2_Cpass3};
+yacco2::State S23_Cpass3 = //State's vectored into symbol: "Relems"
+{23
+,(Shift_entry*)&S23pse_Cpass3,0,0,0,(Shift_tbl*)&S23st_Cpass3,0,(State_s_thread_tbl*)&S4tt_Cpass3,0,(Shift_entry*)&S23qse_Cpass3
+};
+struct S24rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cpass3 S24rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cpass3,Cpass3::rhs2_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S24_Cpass3 = //State's vectored into symbol: "eog"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Cpass3,0,0,0};
+struct S25rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cpass3 S25rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs2_Relems_}
+ }// end of reduce table
+};
+yacco2::State S25_Cpass3 = //State's vectored into symbol: "Rtoken"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cpass3,0,0,0};
+struct S26rtd_Cpass3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cpass3 S26rt_Cpass3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpass3,Cpass3::rhs1_Relems_}
+ }// end of reduce table
+};
+yacco2::State S26_Cpass3 = //State's vectored into symbol: "Rtoken"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cpass3,0,0,0};
diff --git a/web/yacco2/compiler/grammars/prefile_inc.cpp b/web/yacco2/compiler/grammars/prefile_inc.cpp
new file mode 100644
index 0000000000..03f253cc70
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_inc.cpp
@@ -0,0 +1,183 @@
+/*
+ File: prefile_inc.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_inc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_inc;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cprefile_inc::
+ Cprefile_inc()
+ :yacco2::CAbs_fsm
+ ("prefile_inc.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"Preprocessor source file from the ``include file'' directive."
+ ,"Fri Jan 30 18:55:20 2015 "
+ ,S1_Cprefile_inc){
+
+ chrs_ = 0;
+ error_raised_ = 0;
+
+ }
+
+Cprefile_inc::~Cprefile_inc(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cprefile_inc::failed(){
+ return false;
+ }
+ void Cprefile_inc::op(){
+ chrs_ = 0;
+ error_raised_ = 0;
+
+}
+int Cprefile_inc::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+};
+Rprefile_inc::Rprefile_inc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprefile_inc",0,Cprefile_inc::R_Rprefile_inc_,P,false,false){
+}
+
+void Rprefile_inc::op(){
+ sstrace_rulesss
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ T_file_inclusion* typ = new T_file_inclusion(fsm->chrs_,fsm->error_raised_);
+ typ->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(typ);
+ fsm->chrs_=0;
+
+}
+Reof::Reof(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reof",0,Cprefile_inc::R_Reof_,P,false,false){
+}
+
+Rpossible_ws::Rpossible_ws(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpossible_ws",0,Cprefile_inc::R_Rpossible_ws_,P,false,false){
+}
+
+Rfile_string::Rfile_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfile_string",0,Cprefile_inc::R_Rfile_string_,P,false,false){
+}
+
+void Rfile_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->chrs_ = sf->p2__;
+ string* ps_fn = fsm->chrs_->c_string();
+ std::ifstream fle_chk;
+ fle_chk.open(ps_fn->c_str());
+ if(!fle_chk.good()){
+ fsm->error_raised_ = new Err_bad_filename(*ps_fn);
+ fsm->error_raised_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ }else{
+ fle_chk.close();
+ }
+
+}
+
+void Rfile_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
+void Rfile_string::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
+void Rfile_string::sr4(){
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = new Err_no_filename;
+ fsm->error_raised_->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+
+}
+
+void Rfile_string::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/prefile_inc.fsc b/web/yacco2/compiler/grammars/prefile_inc.fsc
new file mode 100644
index 0000000000..86d0a6400d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_inc.fsc
@@ -0,0 +1,23 @@
+/*
+ File: prefile_inc.fsc
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+transitive n
+grammar-name "prefile_inc"
+name-space "NS_prefile_inc"
+thread-name "TH_prefile_inc"
+monolithic n
+file-name "prefile_inc.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_at_sign
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_c_string::TH_c_string
+ NS_eol::TH_eol
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Preprocessor source file from the ``include file'' directive."
diff --git a/web/yacco2/compiler/grammars/prefile_inc.h b/web/yacco2/compiler/grammars/prefile_inc.h
new file mode 100644
index 0000000000..c2ed858148
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_inc.h
@@ -0,0 +1,101 @@
+/*
+ File: prefile_inc.h
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#ifndef __prefile_inc_h__
+#define __prefile_inc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "ws.h"
+#include "eol.h"
+#include "c_string.h"
+using namespace NS_yacco2_terminals;
+
+extern yacco2::Thread_entry ITH_prefile_inc;
+
+extern yacco2::State S1_Cprefile_inc;
+namespace NS_prefile_inc {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_prefile_inc(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_prefile_inc(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cprefile_inc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rprefile_inc_ = 569//start_of_rule_list + 0
+ ,rhs1_Rprefile_inc_ = 1
+ ,R_Reof_ = 570//start_of_rule_list + 2
+ ,rhs1_Reof_ = 2
+ ,rhs2_Reof_ = 3
+ ,R_Rpossible_ws_ = 571//start_of_rule_list + 4
+ ,rhs1_Rpossible_ws_ = 4
+ ,rhs2_Rpossible_ws_ = 5
+ ,R_Rfile_string_ = 572//start_of_rule_list + 6
+ ,rhs1_Rfile_string_ = 6
+ ,rhs2_Rfile_string_ = 7
+ ,rhs3_Rfile_string_ = 8
+ ,rhs4_Rfile_string_ = 9
+ ,rhs5_Rfile_string_ = 10
+ };
+ //no of la sets = 3
+ //no of states = 15
+ Cprefile_inc();
+ ~Cprefile_inc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ T_c_string* chrs_;
+ yacco2::CAbs_lr1_sym* error_raised_;
+
+ };
+struct Rprefile_inc;
+struct Reof;
+struct Rpossible_ws;
+struct Rfile_string;
+struct Rprefile_inc:public yacco2::CAbs_lr1_sym {
+ Rprefile_inc(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Reof:public yacco2::CAbs_lr1_sym {
+ Reof(yacco2::Parser* P);
+ public:
+};
+
+struct Rpossible_ws:public yacco2::CAbs_lr1_sym {
+ Rpossible_ws(yacco2::Parser* P);
+ public:
+};
+
+struct Rfile_string:public yacco2::CAbs_lr1_sym {
+ Rfile_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/prefile_inc.lex b/web/yacco2/compiler/grammars/prefile_inc.lex
new file mode 100644
index 0000000000..3592b7f443
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_inc.lex
@@ -0,0 +1,133 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: prefile_inc.lex
+Dates: 17 Juin 2003
+Purpose: file name recognizer for includes
+Returned: T_file_inclusion
+ One of the following errors can be included within T_file_inclusion
+ Lr1_err_bad_filename
+ Lr1_err_bad_esc
+ Lr1_err_bad_eos
+ Lr1_err_no_filename
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |prefile_inc| Thread.\fbreak
+File name recognizer for includes.
+It checks the file system to
+verify that the file exists.
+Inside the returned ``file-inclusion'' terminal
+is the file open findings whether the file name exists.
+It is up to the caller to check this error status.
+A null status means it's okay while ``bad filename''
+error symbol with the extracted filename string
+is used.
+@/
+fsm
+(fsm-id "prefile_inc.lex",fsm-filename prefile_inc,fsm-namespace NS_prefile_inc
+,fsm-class Cprefile_inc{
+ user-prefix-declaration
+#include "ws.h"
+#include "eol.h"
+#include "c_string.h"
+using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public:
+ T_c_string* chrs_;
+ yacco2::CAbs_lr1_sym* error_raised_;
+ ***
+ op
+ chrs_ = 0;
+ error_raised_ = 0;
+ ***
+ constructor
+ chrs_ = 0;
+ error_raised_ = 0;
+ ***
+ }
+,fsm-version "1.0" ,fsm-date "17 Juin 2003"
+,fsm-debug "false"
+,fsm-comments "Preprocessor source file from the ``include file'' directive.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_prefile_inc
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rprefile_inc (
+lhs{
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ T_file_inclusion* typ = new T_file_inclusion(fsm->chrs_,fsm->error_raised_);
+ typ->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(typ);
+ fsm->chrs_=0;
+ ***
+ }
+){
+ -> "@" Rpossible_ws Rfile_string Reof |.|
+}
+
+Reof (){
+ -> // eof,eog type error
+ -> ||| eol NS_eol::TH_eol
+}
+
+Rpossible_ws (){
+ -> // shift out conflict
+ -> ||| "ws" NS_ws::TH_ws
+}
+
+Rfile_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->chrs_ = sf->p2__;
+ string* ps_fn = fsm->chrs_->c_string();
+ std::ifstream fle_chk;
+ fle_chk.open(ps_fn->c_str());
+ if(!fle_chk.good()){
+ fsm->error_raised_ = new Err_bad_filename(*ps_fn);
+ fsm->error_raised_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ }else{
+ fle_chk.close();
+ }
+ ***
+ }
+ -> ||| "bad eos" NULL{
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+ -> {
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = new Err_no_filename;
+ fsm->error_raised_->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ Cprefile_inc* fsm = (Cprefile_inc*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/prefile_include.cpp b/web/yacco2/compiler/grammars/prefile_include.cpp
new file mode 100644
index 0000000000..036eaa5d9a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_include.cpp
@@ -0,0 +1,185 @@
+/*
+ File: prefile_include.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_include.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_include;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cprefile_include::
+ Cprefile_include()
+ :yacco2::CAbs_fsm
+ ("prefile_include.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"Preprocessor source file from the ``include file'' directive."
+ ,"Fri Jan 30 18:55:20 2015 "
+ ,S1_Cprefile_include){
+
+ chrs_ = 0;
+ error_raised_ = 0;
+
+ }
+
+Cprefile_include::~Cprefile_include(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cprefile_include::failed(){
+ return false;
+ }
+ void Cprefile_include::op(){
+ chrs_ = 0;
+ error_raised_ = 0;
+
+}
+int Cprefile_include::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+};
+Rprefile_include::Rprefile_include(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprefile_include",0,Cprefile_include::R_Rprefile_include_,P,false,false){
+}
+
+void Rprefile_include::op(){
+ sstrace_rulesss
+
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ T_file_inclusion* typ = new T_file_inclusion(fsm->chrs_,fsm->error_raised_);
+ typ->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(typ);
+ fsm->chrs_=0;
+
+}
+Reof::Reof(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reof",0,Cprefile_include::R_Reof_,P,false,false){
+}
+
+Rpossible_ws::Rpossible_ws(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpossible_ws",0,Cprefile_include::R_Rpossible_ws_,P,false,false){
+}
+
+Rfile_string::Rfile_string(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfile_string",0,Cprefile_include::R_Rfile_string_,P,false,false){
+}
+
+void Rfile_string::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->chrs_ = sf->p2__;
+ string* ps_fn = fsm->chrs_->c_string();
+ std::ifstream fle_chk;
+ fle_chk.open(ps_fn->c_str());
+ if(!fle_chk.good()){
+ fsm->error_raised_ = new Err_bad_filename(*ps_fn);
+ fsm->error_raised_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ }else{
+ fle_chk.close();
+ }
+
+}
+
+void Rfile_string::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
+void Rfile_string::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_include* fsm =
+ (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
+void Rfile_string::sr4(){
+
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = new Err_no_filename;
+ fsm->error_raised_->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+
+}
+
+void Rfile_string::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprefile_include* fsm =
+ (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/prefile_include.fsc b/web/yacco2/compiler/grammars/prefile_include.fsc
new file mode 100644
index 0000000000..50f01e3cdc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_include.fsc
@@ -0,0 +1,23 @@
+/*
+ File: prefile_include.fsc
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+transitive n
+grammar-name "prefile_include"
+name-space "NS_prefile_include"
+thread-name "TH_prefile_include"
+monolithic n
+file-name "prefile_include.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_at_sign
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_c_string::TH_c_string
+ NS_eol::TH_eol
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Preprocessor source file from the ``include file'' directive."
diff --git a/web/yacco2/compiler/grammars/prefile_include.h b/web/yacco2/compiler/grammars/prefile_include.h
new file mode 100644
index 0000000000..67eb767db9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_include.h
@@ -0,0 +1,101 @@
+/*
+ File: prefile_include.h
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#ifndef __prefile_include_h__
+#define __prefile_include_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "ws.h"
+#include "eol.h"
+#include "c_string.h"
+using namespace NS_yacco2_terminals;
+
+extern yacco2::Thread_entry ITH_prefile_include;
+
+extern yacco2::State S1_Cprefile_include;
+namespace NS_prefile_include {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_prefile_include(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_prefile_include(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cprefile_include: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rprefile_include_ = 569//start_of_rule_list + 0
+ ,rhs1_Rprefile_include_ = 1
+ ,R_Reof_ = 570//start_of_rule_list + 2
+ ,rhs1_Reof_ = 2
+ ,rhs2_Reof_ = 3
+ ,R_Rpossible_ws_ = 571//start_of_rule_list + 4
+ ,rhs1_Rpossible_ws_ = 4
+ ,rhs2_Rpossible_ws_ = 5
+ ,R_Rfile_string_ = 572//start_of_rule_list + 6
+ ,rhs1_Rfile_string_ = 6
+ ,rhs2_Rfile_string_ = 7
+ ,rhs3_Rfile_string_ = 8
+ ,rhs4_Rfile_string_ = 9
+ ,rhs5_Rfile_string_ = 10
+ };
+ //no of la sets = 3
+ //no of states = 17
+ Cprefile_include();
+ ~Cprefile_include();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ T_c_string* chrs_;
+ yacco2::CAbs_lr1_sym* error_raised_;
+
+ };
+struct Rprefile_include;
+struct Reof;
+struct Rpossible_ws;
+struct Rfile_string;
+struct Rprefile_include:public yacco2::CAbs_lr1_sym {
+ Rprefile_include(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Reof:public yacco2::CAbs_lr1_sym {
+ Reof(yacco2::Parser* P);
+ public:
+};
+
+struct Rpossible_ws:public yacco2::CAbs_lr1_sym {
+ Rpossible_ws(yacco2::Parser* P);
+ public:
+};
+
+struct Rfile_string:public yacco2::CAbs_lr1_sym {
+ Rfile_string(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/prefile_include.lex b/web/yacco2/compiler/grammars/prefile_include.lex
new file mode 100644
index 0000000000..eabc49f3c8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_include.lex
@@ -0,0 +1,135 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: prefile_include.lex
+Dates: 17 Juin 2003
+Purpose: file name recognizer for includes
+Returned: T_file_inclusion
+ One of the following errors can be included within T_file_inclusion
+ Lr1_err_bad_filename
+ Lr1_err_bad_esc
+ Lr1_err_bad_eos
+ Lr1_err_no_filename
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |prefile_include| Thread.\fbreak
+File name recognizer for includes.
+It checks the file system to
+verify that the file exists.
+Inside the returned ``file-inclusion'' terminal
+is the file open findings whether the file name exists.
+It is up to the caller to check this error status.
+A null status means it's okay while ``bad filename''
+error symbol with the extracted filename string
+is used.
+@/
+fsm
+(fsm-id "prefile_include.lex",fsm-filename prefile_include,fsm-namespace NS_prefile_include
+,fsm-class Cprefile_include{
+ user-prefix-declaration
+#include "ws.h"
+#include "eol.h"
+#include "c_string.h"
+using namespace NS_yacco2_terminals;
+ ***
+ user-declaration
+ public:
+ T_c_string* chrs_;
+ yacco2::CAbs_lr1_sym* error_raised_;
+ ***
+ op
+ chrs_ = 0;
+ error_raised_ = 0;
+ ***
+ constructor
+ chrs_ = 0;
+ error_raised_ = 0;
+ ***
+ }
+,fsm-version "1.0" ,fsm-date "17 Juin 2003"
+,fsm-debug "false"
+,fsm-comments "Preprocessor source file from the ``include file'' directive.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_prefile_include
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rprefile_include (
+lhs{
+ op
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ T_file_inclusion* typ = new T_file_inclusion(fsm->chrs_,fsm->error_raised_);
+ typ->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(typ);
+ fsm->chrs_=0;
+ ***
+ }
+){
+ -> "@" Rpossible_ws Rfile_string Reof
+}
+
+Reof (){
+ -> |.| // eof,eog type error
+ -> ||| eol NS_eol::TH_eol
+}
+
+Rpossible_ws (){
+ -> |.| // shift out conflict
+ -> ||| "ws" NS_ws::TH_ws
+}
+
+Rfile_string (){
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->chrs_ = sf->p2__;
+ string* ps_fn = fsm->chrs_->c_string();
+ std::ifstream fle_chk;
+ fle_chk.open(ps_fn->c_str());
+ if(!fle_chk.good()){
+ fsm->error_raised_ = new Err_bad_filename(*ps_fn);
+ fsm->error_raised_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ }else{
+ fle_chk.close();
+ }
+ ***
+ }
+ -> ||| "bad eos" NULL{
+ op
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ Cprefile_include* fsm =
+ (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+ -> |?| {
+ op
+ Cprefile_include* fsm = (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = new Err_no_filename;
+ fsm->error_raised_->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ Cprefile_include* fsm =
+ (Cprefile_include*) rule_info__.parser__->fsm_tbl__;
+ fsm->error_raised_ = sf->p2__;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/prefile_includesym.cpp b/web/yacco2/compiler/grammars/prefile_includesym.cpp
new file mode 100644
index 0000000000..3f23184c26
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_includesym.cpp
@@ -0,0 +1,194 @@
+/*
+ File: prefile_includesym.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_include.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_include;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_prefile_include::TH_prefile_include(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_prefile_include;
+ NS_prefile_include::Cprefile_include Cprefile_include_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cprefile_include_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_prefile_include::PROC_TH_prefile_include(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_prefile_include";
+ static bool one_time(false);
+ static NS_prefile_include::Cprefile_include* NS_prefile_include_Cprefile_include_(0);// parallel-parser's fsm table
+ static Parser* NS_prefile_include_Cprefile_include_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_prefile_include_Cprefile_include_ = new NS_prefile_include::Cprefile_include();// parallel-parser's fsm table
+ NS_prefile_include_Cprefile_include_parser = new Parser(*NS_prefile_include_Cprefile_include_,Caller_pp);
+ }
+ proc_parser = NS_prefile_include_Cprefile_include_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cprefile_include::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rprefile_include_:{
+ Rprefile_include* sym;
+ if(re->rule_ == 0){
+ sym = new Rprefile_include(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprefile_include*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->op();
+ return;}
+ case rhs1_Reof_:{
+ Reof* sym;
+ if(re->rule_ == 0){
+ sym = new Reof(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reof*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Reof_:{
+ Reof* sym;
+ if(re->rule_ == 0){
+ sym = new Reof(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reof*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rpossible_ws_:{
+ Rpossible_ws* sym;
+ if(re->rule_ == 0){
+ sym = new Rpossible_ws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpossible_ws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rpossible_ws_:{
+ Rpossible_ws* sym;
+ if(re->rule_ == 0){
+ sym = new Rpossible_ws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpossible_ws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/prefile_includetbl.cpp b/web/yacco2/compiler/grammars/prefile_includetbl.cpp
new file mode 100644
index 0000000000..a24293e50c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_includetbl.cpp
@@ -0,0 +1,342 @@
+/*
+ File: prefile_includetbl.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_include.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_include;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cprefile_include[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cprefile_include[] ={
+1
+,0,17
+};
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA3_Cprefile_include[] ={
+1
+,0,48
+};
+extern yacco2::State S1_Cprefile_include;
+extern yacco2::State S2_Cprefile_include;
+extern yacco2::State S3_Cprefile_include;
+extern yacco2::State S4_Cprefile_include;
+extern yacco2::State S5_Cprefile_include;
+struct S5ttd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S5ttd_Cprefile_include S5tt_Cprefile_include = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+};
+extern yacco2::State S6_Cprefile_include;
+extern yacco2::State S7_Cprefile_include;
+extern yacco2::State S8_Cprefile_include;
+extern yacco2::State S9_Cprefile_include;
+struct S9ttd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S9ttd_Cprefile_include S9tt_Cprefile_include = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_ws
+};
+extern yacco2::State S10_Cprefile_include;
+extern yacco2::State S11_Cprefile_include;
+extern yacco2::State S12_Cprefile_include;
+extern yacco2::State S13_Cprefile_include;
+struct S13ttd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S13ttd_Cprefile_include S13tt_Cprefile_include = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S14_Cprefile_include;
+extern yacco2::State S15_Cprefile_include;
+extern yacco2::State S16_Cprefile_include;
+extern yacco2::State S17_Cprefile_include;
+struct S1std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cprefile_include S1st_Cprefile_include = {
+ 2
+ ,
+ {// start of table
+ {72,(State*)&S2_Cprefile_include} // shift sym: raw_at_sign
+ ,{569,(State*)&S1_Cprefile_include} // accept sym: Rprefile_include
+ }// end of shift table
+};
+yacco2::State S1_Cprefile_include = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cprefile_include,0,0,0,0};
+struct S2std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Cprefile_include S2st_Cprefile_include = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S9_Cprefile_include} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S11_Cprefile_include} // shift sym: LR1_invisible_shift_operator
+ ,{571,(State*)&S3_Cprefile_include} // shift sym: Rpossible_ws
+ }// end of shift table
+};
+yacco2::Shift_entry S2pse_Cprefile_include = {3,(State*)&S9_Cprefile_include};
+yacco2::Shift_entry S2ise_Cprefile_include = {5,(State*)&S11_Cprefile_include};
+yacco2::State S2_Cprefile_include = //State's vectored into symbol: "@"
+{2
+,(Shift_entry*)&S2pse_Cprefile_include,0,(Shift_entry*)&S2ise_Cprefile_include
+,0,(Shift_tbl*)&S2st_Cprefile_include,0,(State_s_thread_tbl*)&S9tt_Cprefile_include,0,0};
+struct S3std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Cprefile_include S3st_Cprefile_include = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S12_Cprefile_include} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S13_Cprefile_include} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S4_Cprefile_include} // shift sym: Rfile_string
+ }// end of shift table
+};
+yacco2::Shift_entry S3pse_Cprefile_include = {3,(State*)&S13_Cprefile_include};
+yacco2::Shift_entry S3qse_Cprefile_include = {0,(State*)&S12_Cprefile_include};
+yacco2::State S3_Cprefile_include = //State's vectored into symbol: "Rpossible_ws"
+{3
+,(Shift_entry*)&S3pse_Cprefile_include,0,0,0,(Shift_tbl*)&S3st_Cprefile_include,0,(State_s_thread_tbl*)&S13tt_Cprefile_include,0,(Shift_entry*)&S3qse_Cprefile_include
+};
+struct S4std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cprefile_include S4st_Cprefile_include = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S5_Cprefile_include} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S7_Cprefile_include} // shift sym: LR1_invisible_shift_operator
+ ,{570,(State*)&S8_Cprefile_include} // shift sym: Reof
+ }// end of shift table
+};
+yacco2::Shift_entry S4pse_Cprefile_include = {3,(State*)&S5_Cprefile_include};
+yacco2::Shift_entry S4ise_Cprefile_include = {5,(State*)&S7_Cprefile_include};
+yacco2::State S4_Cprefile_include = //State's vectored into symbol: "Rfile_string"
+{4
+,(Shift_entry*)&S4pse_Cprefile_include,0,(Shift_entry*)&S4ise_Cprefile_include
+,0,(Shift_tbl*)&S4st_Cprefile_include,0,(State_s_thread_tbl*)&S5tt_Cprefile_include,0,0};
+struct S5std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cprefile_include S5st_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {268,(State*)&S6_Cprefile_include} // shift sym: T_eol
+ }// end of shift table
+};
+yacco2::State S5_Cprefile_include = //State's vectored into symbol: "|||"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cprefile_include,0,0,0,0};
+struct S6rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cprefile_include S6rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_include,Cprefile_include::rhs2_Reof_}
+ }// end of reduce table
+};
+yacco2::State S6_Cprefile_include = //State's vectored into symbol: "eol"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cprefile_include,0,0,0};
+struct S7rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cprefile_include S7rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_include,Cprefile_include::rhs1_Reof_}
+ }// end of reduce table
+};
+yacco2::State S7_Cprefile_include = //State's vectored into symbol: "|.|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cprefile_include,0,0,0};
+struct S8rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cprefile_include S8rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_include,Cprefile_include::rhs1_Rprefile_include_}
+ }// end of reduce table
+};
+yacco2::State S8_Cprefile_include = //State's vectored into symbol: "Reof"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cprefile_include,0,0,0};
+struct S9std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Cprefile_include S9st_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {272,(State*)&S10_Cprefile_include} // shift sym: T_ws
+ }// end of shift table
+};
+yacco2::State S9_Cprefile_include = //State's vectored into symbol: "|||"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cprefile_include,0,0,0,0};
+struct S10rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cprefile_include S10rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprefile_include,Cprefile_include::rhs2_Rpossible_ws_}
+ }// end of reduce table
+};
+yacco2::State S10_Cprefile_include = //State's vectored into symbol: "ws"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cprefile_include,0,0,0};
+struct S11rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cprefile_include S11rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprefile_include,Cprefile_include::rhs1_Rpossible_ws_}
+ }// end of reduce table
+};
+yacco2::State S11_Cprefile_include = //State's vectored into symbol: "|.|"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cprefile_include,0,0,0};
+struct S12rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cprefile_include S12rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_include,Cprefile_include::rhs4_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S12_Cprefile_include = //State's vectored into symbol: "|?|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cprefile_include,0,0,0};
+struct S13std_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S13std_Cprefile_include S13st_Cprefile_include = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S14_Cprefile_include} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S15_Cprefile_include} // shift sym: T_c_string
+ ,{394,(State*)&S16_Cprefile_include} // shift sym: Err_bad_eos
+ ,{395,(State*)&S17_Cprefile_include} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S13qse_Cprefile_include = {0,(State*)&S14_Cprefile_include};
+yacco2::State S13_Cprefile_include = //State's vectored into symbol: "|||"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cprefile_include,0,0,0,(Shift_entry*)&S13qse_Cprefile_include
+};
+struct S14rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cprefile_include S14rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_include,Cprefile_include::rhs5_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S14_Cprefile_include = //State's vectored into symbol: "|?|"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cprefile_include,0,0,0};
+struct S15rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cprefile_include S15rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_include,Cprefile_include::rhs1_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S15_Cprefile_include = //State's vectored into symbol: "c-string"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cprefile_include,0,0,0};
+struct S16rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cprefile_include S16rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_include,Cprefile_include::rhs2_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S16_Cprefile_include = //State's vectored into symbol: "bad eos"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cprefile_include,0,0,0};
+struct S17rtd_Cprefile_include{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cprefile_include S17rt_Cprefile_include = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_include,Cprefile_include::rhs3_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S17_Cprefile_include = //State's vectored into symbol: "bad esc"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cprefile_include,0,0,0};
diff --git a/web/yacco2/compiler/grammars/prefile_incsym.cpp b/web/yacco2/compiler/grammars/prefile_incsym.cpp
new file mode 100644
index 0000000000..4a042963f8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_incsym.cpp
@@ -0,0 +1,194 @@
+/*
+ File: prefile_incsym.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_inc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_inc;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_prefile_inc::TH_prefile_inc(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_prefile_inc;
+ NS_prefile_inc::Cprefile_inc Cprefile_inc_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cprefile_inc_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_prefile_inc::PROC_TH_prefile_inc(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_prefile_inc";
+ static bool one_time(false);
+ static NS_prefile_inc::Cprefile_inc* NS_prefile_inc_Cprefile_inc_(0);// parallel-parser's fsm table
+ static Parser* NS_prefile_inc_Cprefile_inc_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_prefile_inc_Cprefile_inc_ = new NS_prefile_inc::Cprefile_inc();// parallel-parser's fsm table
+ NS_prefile_inc_Cprefile_inc_parser = new Parser(*NS_prefile_inc_Cprefile_inc_,Caller_pp);
+ }
+ proc_parser = NS_prefile_inc_Cprefile_inc_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cprefile_inc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rprefile_inc_:{
+ Rprefile_inc* sym;
+ if(re->rule_ == 0){
+ sym = new Rprefile_inc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprefile_inc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->op();
+ return;}
+ case rhs1_Reof_:{
+ Reof* sym;
+ if(re->rule_ == 0){
+ sym = new Reof(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reof*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Reof_:{
+ Reof* sym;
+ if(re->rule_ == 0){
+ sym = new Reof(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reof*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rpossible_ws_:{
+ Rpossible_ws* sym;
+ if(re->rule_ == 0){
+ sym = new Rpossible_ws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpossible_ws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rpossible_ws_:{
+ Rpossible_ws* sym;
+ if(re->rule_ == 0){
+ sym = new Rpossible_ws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpossible_ws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rfile_string_:{
+ Rfile_string* sym;
+ if(re->rule_ == 0){
+ sym = new Rfile_string(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfile_string*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/prefile_inctbl.cpp b/web/yacco2/compiler/grammars/prefile_inctbl.cpp
new file mode 100644
index 0000000000..8f5470ec02
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prefile_inctbl.cpp
@@ -0,0 +1,337 @@
+/*
+ File: prefile_inctbl.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prefile_inc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prefile_inc;// grammar's ns
+// first set terminals
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cprefile_inc[] ={
+1
+,0,48
+};
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA2_Cprefile_inc[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Cprefile_inc[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cprefile_inc;
+extern yacco2::State S2_Cprefile_inc;
+extern yacco2::State S3_Cprefile_inc;
+extern yacco2::State S4_Cprefile_inc;
+extern yacco2::State S5_Cprefile_inc;
+extern yacco2::State S6_Cprefile_inc;
+extern yacco2::State S7_Cprefile_inc;
+struct S7ttd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S7ttd_Cprefile_inc S7tt_Cprefile_inc = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_ws
+};
+extern yacco2::State S8_Cprefile_inc;
+extern yacco2::State S9_Cprefile_inc;
+struct S9ttd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S9ttd_Cprefile_inc S9tt_Cprefile_inc = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+};
+extern yacco2::State S10_Cprefile_inc;
+extern yacco2::State S11_Cprefile_inc;
+extern yacco2::State S12_Cprefile_inc;
+extern yacco2::State S13_Cprefile_inc;
+extern yacco2::State S14_Cprefile_inc;
+struct S14ttd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S14ttd_Cprefile_inc S14tt_Cprefile_inc = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+};
+extern yacco2::State S15_Cprefile_inc;
+struct S1std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cprefile_inc S1st_Cprefile_inc = {
+ 2
+ ,
+ {// start of table
+ {72,(State*)&S2_Cprefile_inc} // shift sym: raw_at_sign
+ ,{569,(State*)&S1_Cprefile_inc} // accept sym: Rprefile_inc
+ }// end of shift table
+};
+yacco2::State S1_Cprefile_inc = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cprefile_inc,0,0,0,0};
+struct S2std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cprefile_inc S2st_Cprefile_inc = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S7_Cprefile_inc} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S3_Cprefile_inc} // shift sym: Rpossible_ws
+ }// end of shift table
+};
+yacco2::Shift_entry S2pse_Cprefile_inc = {3,(State*)&S7_Cprefile_inc};
+struct S2rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cprefile_inc S2rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs1_Rpossible_ws_}
+ }// end of reduce table
+};
+yacco2::State S2_Cprefile_inc = //State's vectored into symbol: "@"
+{2
+,(Shift_entry*)&S2pse_Cprefile_inc,0,0,0,(Shift_tbl*)&S2st_Cprefile_inc,(Reduce_tbl*)&S2rt_Cprefile_inc,(State_s_thread_tbl*)&S7tt_Cprefile_inc,0,0};
+struct S3std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cprefile_inc S3st_Cprefile_inc = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S9_Cprefile_inc} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S4_Cprefile_inc} // shift sym: Rfile_string
+ }// end of shift table
+};
+yacco2::Shift_entry S3pse_Cprefile_inc = {3,(State*)&S9_Cprefile_inc};
+struct S3rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cprefile_inc S3rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs4_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S3_Cprefile_inc = //State's vectored into symbol: "Rpossible_ws"
+{3
+,(Shift_entry*)&S3pse_Cprefile_inc,0,0,0,(Shift_tbl*)&S3st_Cprefile_inc,(Reduce_tbl*)&S3rt_Cprefile_inc,(State_s_thread_tbl*)&S9tt_Cprefile_inc,0,0};
+struct S4std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S4std_Cprefile_inc S4st_Cprefile_inc = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S14_Cprefile_inc} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S5_Cprefile_inc} // shift sym: Reof
+ }// end of shift table
+};
+yacco2::Shift_entry S4pse_Cprefile_inc = {3,(State*)&S14_Cprefile_inc};
+struct S4rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cprefile_inc S4rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprefile_inc,Cprefile_inc::rhs1_Reof_}
+ }// end of reduce table
+};
+yacco2::State S4_Cprefile_inc = //State's vectored into symbol: "Rfile_string"
+{4
+,(Shift_entry*)&S4pse_Cprefile_inc,0,0,0,(Shift_tbl*)&S4st_Cprefile_inc,(Reduce_tbl*)&S4rt_Cprefile_inc,(State_s_thread_tbl*)&S14tt_Cprefile_inc,0,0};
+struct S5std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cprefile_inc S5st_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S6_Cprefile_inc} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S5ise_Cprefile_inc = {5,(State*)&S6_Cprefile_inc};
+yacco2::State S5_Cprefile_inc = //State's vectored into symbol: "Reof"
+{5
+,0,0,(Shift_entry*)&S5ise_Cprefile_inc
+,0,(Shift_tbl*)&S5st_Cprefile_inc,0,0,0,0};
+struct S6rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cprefile_inc S6rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprefile_inc,Cprefile_inc::rhs1_Rprefile_inc_}
+ }// end of reduce table
+};
+yacco2::State S6_Cprefile_inc = //State's vectored into symbol: "|.|"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cprefile_inc,0,0,0};
+struct S7std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cprefile_inc S7st_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {272,(State*)&S8_Cprefile_inc} // shift sym: T_ws
+ }// end of shift table
+};
+yacco2::State S7_Cprefile_inc = //State's vectored into symbol: "|||"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cprefile_inc,0,0,0,0};
+struct S8rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cprefile_inc S8rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs2_Rpossible_ws_}
+ }// end of reduce table
+};
+yacco2::State S8_Cprefile_inc = //State's vectored into symbol: "ws"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cprefile_inc,0,0,0};
+struct S9std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S9std_Cprefile_inc S9st_Cprefile_inc = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S10_Cprefile_inc} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S11_Cprefile_inc} // shift sym: T_c_string
+ ,{394,(State*)&S12_Cprefile_inc} // shift sym: Err_bad_eos
+ ,{395,(State*)&S13_Cprefile_inc} // shift sym: Err_bad_esc
+ }// end of shift table
+};
+yacco2::Shift_entry S9qse_Cprefile_inc = {0,(State*)&S10_Cprefile_inc};
+yacco2::State S9_Cprefile_inc = //State's vectored into symbol: "|||"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cprefile_inc,0,0,0,(Shift_entry*)&S9qse_Cprefile_inc
+};
+struct S10rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cprefile_inc S10rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs5_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S10_Cprefile_inc = //State's vectored into symbol: "|?|"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cprefile_inc,0,0,0};
+struct S11rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cprefile_inc S11rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs1_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S11_Cprefile_inc = //State's vectored into symbol: "c-string"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cprefile_inc,0,0,0};
+struct S12rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cprefile_inc S12rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs2_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S12_Cprefile_inc = //State's vectored into symbol: "bad eos"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cprefile_inc,0,0,0};
+struct S13rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cprefile_inc S13rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprefile_inc,Cprefile_inc::rhs3_Rfile_string_}
+ }// end of reduce table
+};
+yacco2::State S13_Cprefile_inc = //State's vectored into symbol: "bad esc"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cprefile_inc,0,0,0};
+struct S14std_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Cprefile_inc S14st_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {268,(State*)&S15_Cprefile_inc} // shift sym: T_eol
+ }// end of shift table
+};
+yacco2::State S14_Cprefile_inc = //State's vectored into symbol: "|||"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cprefile_inc,0,0,0,0};
+struct S15rtd_Cprefile_inc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cprefile_inc S15rt_Cprefile_inc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprefile_inc,Cprefile_inc::rhs2_Reof_}
+ }// end of reduce table
+};
+yacco2::State S15_Cprefile_inc = //State's vectored into symbol: "eol"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cprefile_inc,0,0,0};
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rules.cpp b/web/yacco2/compiler/grammars/prt_fs_of_rules.cpp
new file mode 100644
index 0000000000..459de3059b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rules.cpp
@@ -0,0 +1,80 @@
+/*
+ File: prt_fs_of_rules.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_fs_of_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_fs_of_rules;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Cprt_fs_of_rules::
+ Cprt_fs_of_rules()
+ :yacco2::CAbs_fsm
+ ("prt_fs_of_rules.lex"
+ ,"1.0"
+ ,"26 sept. 2005"
+ ,false
+ ,"Print first set per rule"
+ ,"Fri Jan 30 18:55:20 2015 "
+ ,S1_Cprt_fs_of_rules){
+
+ }
+
+Cprt_fs_of_rules::~Cprt_fs_of_rules(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cprt_fs_of_rules::failed(){
+ return false;
+ }
+ void Cprt_fs_of_rules::op(){
+}
+int Cprt_fs_of_rules::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+};
+Rprt_first_set_rules::Rprt_first_set_rules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprt_first_set_rules",0,Cprt_fs_of_rules::R_Rprt_first_set_rules_,P,true,true){
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cprt_fs_of_rules::R_Rrules_,P,true,true){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cprt_fs_of_rules::R_Rrule_def_,P,true,true){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ rule_def* rdef = sf->p1__;
+ PRT_RULE_S_FIRST_SET(rdef);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rules.fsc b/web/yacco2/compiler/grammars/prt_fs_of_rules.fsc
new file mode 100644
index 0000000000..5392fad0d0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rules.fsc
@@ -0,0 +1,20 @@
+/*
+ File: prt_fs_of_rules.fsc
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+transitive n
+grammar-name "prt_fs_of_rules"
+name-space "NS_prt_fs_of_rules"
+thread-name "Cprt_fs_of_rules"
+monolithic y
+file-name "prt_fs_of_rules.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Print first set per rule"
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rules.h b/web/yacco2/compiler/grammars/prt_fs_of_rules.h
new file mode 100644
index 0000000000..9184924d74
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rules.h
@@ -0,0 +1,70 @@
+/*
+ File: prt_fs_of_rules.h
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#ifndef __prt_fs_of_rules_h__
+#define __prt_fs_of_rules_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cprt_fs_of_rules;
+namespace NS_prt_fs_of_rules {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Cprt_fs_of_rules: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rprt_first_set_rules_ = 569//start_of_rule_list + 0
+ ,rhs1_Rprt_first_set_rules_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_def_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_def_ = 4
+ };
+ //no of la sets = 2
+ //no of states = 6
+ Cprt_fs_of_rules();
+ ~Cprt_fs_of_rules();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Rprt_first_set_rules;
+struct Rrules;
+struct Rrule_def;
+struct Rprt_first_set_rules:public yacco2::CAbs_lr1_sym {
+ Rprt_first_set_rules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rules.lex b/web/yacco2/compiler/grammars/prt_fs_of_rules.lex
new file mode 100644
index 0000000000..f7e7340b47
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rules.lex
@@ -0,0 +1,57 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: prt_fs_of_rules.lex
+Dates: 23 Sept. 2005
+Purpose: Print first set per rule.
+How: Read the rules' tree in prefix order filtering out:
+ accepting only rule-def tokens.
+ all other tokens with the grammar tree are bypassed
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |prt_fs_of_rules| grammar.\fbreak
+Print out the {\bf First set} per rule definition.
+The first set was created by |first_set_rules| grammar.
+For ease of reading, I sort the terminals by their lexicographical order.
+
+@/
+
+fsm
+(fsm-id "prt_fs_of_rules.lex"
+,fsm-filename prt_fs_of_rules
+,fsm-namespace NS_prt_fs_of_rules
+,fsm-class Cprt_fs_of_rules{
+ user-prefix-declaration
+#include "o2_externs.h"
+ ***
+ }
+,fsm-version "1.0",fsm-date "26 sept. 2005",fsm-debug "false"
+,fsm-comments "Print first set per rule")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rprt_first_set_rules AD AB()
+{
+ -> Rrules eog
+}
+
+Rrules AD AB(){
+ -> Rrule_def
+ -> Rrules Rrule_def
+}
+
+Rrule_def AD AB(){
+ -> "rule-def" {
+ /@
+ Initialize for its subrule findings.
+ @/
+ op
+ rule_def* rdef = sf->p1__;
+ PRT_RULE_S_FIRST_SET(rdef);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rulessym.cpp b/web/yacco2/compiler/grammars/prt_fs_of_rulessym.cpp
new file mode 100644
index 0000000000..7c22f0a81f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rulessym.cpp
@@ -0,0 +1,84 @@
+/*
+ File: prt_fs_of_rulessym.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_fs_of_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_fs_of_rules;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cprt_fs_of_rules::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rprt_first_set_rules_:{
+ Rprt_first_set_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Rprt_first_set_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprt_first_set_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/prt_fs_of_rulestbl.cpp b/web/yacco2/compiler/grammars/prt_fs_of_rulestbl.cpp
new file mode 100644
index 0000000000..4ef66c3263
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_fs_of_rulestbl.cpp
@@ -0,0 +1,120 @@
+/*
+ File: prt_fs_of_rulestbl.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_fs_of_rules.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_fs_of_rules;// grammar's ns
+// first set terminals
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA1_Cprt_fs_of_rules[] ={
+2
+,0,2
+,42,16
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cprt_fs_of_rules[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cprt_fs_of_rules;
+extern yacco2::State S2_Cprt_fs_of_rules;
+extern yacco2::State S3_Cprt_fs_of_rules;
+extern yacco2::State S4_Cprt_fs_of_rules;
+extern yacco2::State S5_Cprt_fs_of_rules;
+extern yacco2::State S6_Cprt_fs_of_rules;
+struct S1std_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cprt_fs_of_rules S1st_Cprt_fs_of_rules = {
+ 4
+ ,
+ {// start of table
+ {340,(State*)&S2_Cprt_fs_of_rules} // shift sym: rule_def
+ ,{569,(State*)&S1_Cprt_fs_of_rules} // accept sym: Rprt_first_set_rules
+ ,{570,(State*)&S3_Cprt_fs_of_rules} // shift sym: Rrules
+ ,{571,(State*)&S6_Cprt_fs_of_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cprt_fs_of_rules = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cprt_fs_of_rules,0,0,0,0};
+struct S2rtd_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cprt_fs_of_rules S2rt_Cprt_fs_of_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprt_fs_of_rules,Cprt_fs_of_rules::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cprt_fs_of_rules = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cprt_fs_of_rules,0,0,0};
+struct S3std_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Cprt_fs_of_rules S3st_Cprt_fs_of_rules = {
+ 3
+ ,
+ {// start of table
+ {1,(State*)&S4_Cprt_fs_of_rules} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Cprt_fs_of_rules} // shift sym: rule_def
+ ,{571,(State*)&S5_Cprt_fs_of_rules} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Cprt_fs_of_rules = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cprt_fs_of_rules,0,0,0,0};
+struct S4rtd_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cprt_fs_of_rules S4rt_Cprt_fs_of_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprt_fs_of_rules,Cprt_fs_of_rules::rhs1_Rprt_first_set_rules_}
+ }// end of reduce table
+};
+yacco2::State S4_Cprt_fs_of_rules = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cprt_fs_of_rules,0,0,0};
+struct S5rtd_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cprt_fs_of_rules S5rt_Cprt_fs_of_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprt_fs_of_rules,Cprt_fs_of_rules::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Cprt_fs_of_rules = //State's vectored into symbol: "Rrule_def"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cprt_fs_of_rules,0,0,0};
+struct S6rtd_Cprt_fs_of_rules{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cprt_fs_of_rules S6rt_Cprt_fs_of_rules = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprt_fs_of_rules,Cprt_fs_of_rules::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S6_Cprt_fs_of_rules = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cprt_fs_of_rules,0,0,0};
diff --git a/web/yacco2/compiler/grammars/prt_sr_elements.cpp b/web/yacco2/compiler/grammars/prt_sr_elements.cpp
new file mode 100644
index 0000000000..a00d6489d4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elements.cpp
@@ -0,0 +1,251 @@
+/*
+ File: prt_sr_elements.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_sr_elements.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_sr_elements;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 5;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+}
+ Cprt_sr_elements::
+ Cprt_sr_elements()
+ :yacco2::CAbs_fsm
+ ("prt_sr_elements.lex"
+ ,"1.0"
+ ,"Sep. 2007"
+ ,false
+ ,"Print the subrule's symbol string."
+ ,"Fri Jan 30 18:55:20 2015 "
+ ,S1_Cprt_sr_elements){
+
+ }
+
+Cprt_sr_elements::~Cprt_sr_elements(){
+
+ for(int x = 0;x < 5;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cprt_sr_elements::failed(){
+ return false;
+ }
+ void Cprt_sr_elements::op(){
+elem_no_= 0;
+
+}
+int Cprt_sr_elements::rhs_to_rules_mapping_[12] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,3 // subrule 4 for rule 4
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,4 // subrule 7 for rule 5
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,4 // subrule 11 for rule 5
+};
+Rprt_sr_elements::Rprt_sr_elements(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprt_sr_elements",0,Cprt_sr_elements::R_Rprt_sr_elements_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Cprt_sr_elements::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Cprt_sr_elements::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ fsm->elem_no_ = 0;
+
+}
+
+Relements::Relements(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relements",0,Cprt_sr_elements::R_Relements_,P,false,false){
+}
+
+Relement::Relement(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relement",0,Cprt_sr_elements::R_Relement_,P,false,false){
+}
+
+void Relement::sr1(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+
+}
+
+void Relement::sr2(){
+ struct SF{
+ refered_rule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_rule_def()->rule_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+
+}
+
+void Relement::sr3(){
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ KCHARP eps = "$\\epsilon$";
+ *fsm->ow_index_file_ << eps << endl;
+ }
+
+}
+
+void Relement::sr4(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_called_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char rtned_xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),rtned_xlated_sym);
+ strcat(rtned_xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << rtned_xlated_sym << endl;
+
+ ++fsm->elem_no_;
+ char thd_xlated_sym[Max_cweb_item_size];
+ char full_thd_name[Max_cweb_item_size];
+ KCHARP full_thd_name_template = "%s::%s";
+ sprintf(full_thd_name,full_thd_name_template
+ ,sf->p3__->ns()->identifier()->c_str()
+ ,sf->p3__->called_thread_name()->identifier()->c_str()
+ );
+ XLATE_SYMBOLS_FOR_cweave((const char*)full_thd_name,thd_xlated_sym);
+ *fsm->ow_index_file_ << thd_xlated_sym << endl;
+
+}
+
+void Relement::sr5(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_null_call_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char rtned_xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),rtned_xlated_sym);
+ strcat(rtned_xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << rtned_xlated_sym << endl;
+ ++fsm->elem_no_;
+ *fsm->ow_index_file_ << "NULL" << endl;
+
+}
+
+void Relement::sr6(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ CAbs_lr1_sym* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char xlated_2_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),xlated_2_sym);
+ strcat(xlated_2_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_2_sym << endl;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/prt_sr_elements.fsc b/web/yacco2/compiler/grammars/prt_sr_elements.fsc
new file mode 100644
index 0000000000..fc6444b75a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elements.fsc
@@ -0,0 +1,20 @@
+/*
+ File: prt_sr_elements.fsc
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+transitive n
+grammar-name "prt_sr_elements"
+name-space "NS_prt_sr_elements"
+thread-name "Cprt_sr_elements"
+monolithic y
+file-name "prt_sr_elements.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ T_subrule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Print the subrule's symbol string."
diff --git a/web/yacco2/compiler/grammars/prt_sr_elements.h b/web/yacco2/compiler/grammars/prt_sr_elements.h
new file mode 100644
index 0000000000..5b80a33065
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elements.h
@@ -0,0 +1,104 @@
+/*
+ File: prt_sr_elements.h
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#ifndef __prt_sr_elements_h__
+#define __prt_sr_elements_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cprt_sr_elements;
+namespace NS_prt_sr_elements {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[5];
+};
+class Cprt_sr_elements: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rprt_sr_elements_ = 569//start_of_rule_list + 0
+ ,rhs1_Rprt_sr_elements_ = 1
+ ,R_Rsubrule_ = 570//start_of_rule_list + 2
+ ,rhs1_Rsubrule_ = 2
+ ,R_Rsubrule_def_ = 571//start_of_rule_list + 4
+ ,rhs1_Rsubrule_def_ = 3
+ ,R_Relements_ = 572//start_of_rule_list + 6
+ ,rhs1_Relements_ = 4
+ ,rhs2_Relements_ = 5
+ ,R_Relement_ = 573//start_of_rule_list + 8
+ ,rhs1_Relement_ = 6
+ ,rhs2_Relement_ = 7
+ ,rhs3_Relement_ = 8
+ ,rhs4_Relement_ = 9
+ ,rhs5_Relement_ = 10
+ ,rhs6_Relement_ = 11
+ };
+ //no of la sets = 4
+ //no of states = 16
+ Cprt_sr_elements();
+ ~Cprt_sr_elements();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[12];
+
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ std::ofstream* ow_index_file_;
+ int elem_no_;
+
+ };
+struct Rprt_sr_elements;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Relements;
+struct Relement;
+struct Rprt_sr_elements:public yacco2::CAbs_lr1_sym {
+ Rprt_sr_elements(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Relements:public yacco2::CAbs_lr1_sym {
+ Relements(yacco2::Parser* P);
+ public:
+};
+
+struct Relement:public yacco2::CAbs_lr1_sym {
+ Relement(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/prt_sr_elements.lex b/web/yacco2/compiler/grammars/prt_sr_elements.lex
new file mode 100644
index 0000000000..6a260b9fd7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elements.lex
@@ -0,0 +1,157 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: prt_sr_elements.lex
+Dates: 3 Sept. 2007
+Purpose: print the subrule's symbols.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |prt_sr_elements.lex| Grammar.\fbreak
+Layout those elements on the subrule's rhs.
+Its output is directed to the grammar's index document being
+generated from the |prt_xrefs_docs.lex| grammar.
+@/
+fsm
+(fsm-id "prt_sr_elements.lex",fsm-filename prt_sr_elements,fsm-namespace NS_prt_sr_elements
+,fsm-class Cprt_sr_elements{
+ user-prefix-declaration
+#include "o2_externs.h"
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+ ***
+ user-declaration
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ std::ofstream* ow_index_file_;
+ int elem_no_;
+ ***
+ op
+elem_no_= 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "Sep. 2007",fsm-debug "false"
+,fsm-comments "Print the subrule's symbol string.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rprt_sr_elements (){
+ -> Rsubrule eog
+}
+
+Rsubrule (){
+ -> Rsubrule_def Relements
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ fsm->elem_no_ = 0;
+ ***
+ }
+}
+
+Relements (){
+ -> Relement
+ -> Relements Relement
+}
+
+Relement
+/@
+Use of \invisibleshift to make grammar lr(1).
+@/
+
+(){
+ -> "refered-T" |.| {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ***
+ }
+ -> "refered-rule" {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_rule_def()->rule_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ***
+ }
+ -> "eosubrule" {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ KCHARP eps = "$\\epsilon$";
+ *fsm->ow_index_file_ << eps << endl;
+ }
+ ***
+ }
+ -> "refered-T" "refered-T" "called thread eosubrule" {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char rtned_xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),rtned_xlated_sym);
+ strcat(rtned_xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << rtned_xlated_sym << endl;
+
+ ++fsm->elem_no_;
+ char thd_xlated_sym[Max_cweb_item_size];
+ char full_thd_name[Max_cweb_item_size];
+ KCHARP full_thd_name_template = "%s::%s";
+ sprintf(full_thd_name,full_thd_name_template
+ ,sf->p3__->ns()->identifier()->c_str()
+ ,sf->p3__->called_thread_name()->identifier()->c_str()
+ );
+ XLATE_SYMBOLS_FOR_cweave((const char*)full_thd_name,thd_xlated_sym);
+ *fsm->ow_index_file_ << thd_xlated_sym << endl;
+ ***
+ }
+ -> "refered-T" "refered-T" "null call thread eosubrule" {
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char rtned_xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),rtned_xlated_sym);
+ strcat(rtned_xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << rtned_xlated_sym << endl;
+ ++fsm->elem_no_;
+ *fsm->ow_index_file_ << "NULL" << endl;
+ ***
+ }
+ -> "refered-T" "refered-T" |.|{
+ op
+ Cprt_sr_elements* fsm = (Cprt_sr_elements*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ char xlated_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p1__->its_t_def()->t_name()->c_str(),xlated_sym);
+ strcat(xlated_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_sym << endl;
+ ++fsm->elem_no_;
+ char xlated_2_sym[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(sf->p2__->its_t_def()->t_name()->c_str(),xlated_2_sym);
+ strcat(xlated_2_sym,"\\ \\ ");
+ *fsm->ow_index_file_ << xlated_2_sym << endl;
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/prt_sr_elementssym.cpp b/web/yacco2/compiler/grammars/prt_sr_elementssym.cpp
new file mode 100644
index 0000000000..c862aed19c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elementssym.cpp
@@ -0,0 +1,188 @@
+/*
+ File: prt_sr_elementssym.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_sr_elements.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_sr_elements;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cprt_sr_elements::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rprt_sr_elements_:{
+ Rprt_sr_elements* sym;
+ if(re->rule_ == 0){
+ sym = new Rprt_sr_elements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprt_sr_elements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr6();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/prt_sr_elementstbl.cpp b/web/yacco2/compiler/grammars/prt_sr_elementstbl.cpp
new file mode 100644
index 0000000000..4c273e52f1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_sr_elementstbl.cpp
@@ -0,0 +1,309 @@
+/*
+ File: prt_sr_elementstbl.cpp
+ Date and Time: Fri Jan 30 18:55:20 2015
+*/
+#include "prt_sr_elements.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_sr_elements;// grammar's ns
+// first set terminals
+// refered_T
+// refered_rule
+// T_eosubrule
+yacco2::UCHAR LA1_Cprt_sr_elements[] ={
+2
+,43,10
+,46,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cprt_sr_elements[] ={
+1
+,0,4
+};
+// refered_T
+// refered_rule
+// T_eosubrule
+// LR1_eog
+yacco2::UCHAR LA3_Cprt_sr_elements[] ={
+3
+,0,2
+,43,10
+,46,2
+};
+// LR1_eog
+yacco2::UCHAR LA4_Cprt_sr_elements[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Cprt_sr_elements;
+extern yacco2::State S2_Cprt_sr_elements;
+extern yacco2::State S3_Cprt_sr_elements;
+extern yacco2::State S4_Cprt_sr_elements;
+extern yacco2::State S5_Cprt_sr_elements;
+extern yacco2::State S6_Cprt_sr_elements;
+extern yacco2::State S7_Cprt_sr_elements;
+extern yacco2::State S8_Cprt_sr_elements;
+extern yacco2::State S9_Cprt_sr_elements;
+extern yacco2::State S10_Cprt_sr_elements;
+extern yacco2::State S11_Cprt_sr_elements;
+extern yacco2::State S12_Cprt_sr_elements;
+extern yacco2::State S13_Cprt_sr_elements;
+extern yacco2::State S14_Cprt_sr_elements;
+extern yacco2::State S15_Cprt_sr_elements;
+extern yacco2::State S16_Cprt_sr_elements;
+struct S1std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cprt_sr_elements S1st_Cprt_sr_elements = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S2_Cprt_sr_elements} // shift sym: T_subrule_def
+ ,{569,(State*)&S1_Cprt_sr_elements} // accept sym: Rprt_sr_elements
+ ,{570,(State*)&S3_Cprt_sr_elements} // shift sym: Rsubrule
+ ,{571,(State*)&S5_Cprt_sr_elements} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cprt_sr_elements = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cprt_sr_elements,0,0,0,0};
+struct S2rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cprt_sr_elements S2rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprt_sr_elements,Cprt_sr_elements::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cprt_sr_elements = //State's vectored into symbol: "subrule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cprt_sr_elements,0,0,0};
+struct S3std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cprt_sr_elements S3st_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_Cprt_sr_elements} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S3_Cprt_sr_elements = //State's vectored into symbol: "Rsubrule"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cprt_sr_elements,0,0,0,0};
+struct S4rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cprt_sr_elements S4rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprt_sr_elements,Cprt_sr_elements::rhs1_Rprt_sr_elements_}
+ }// end of reduce table
+};
+yacco2::State S4_Cprt_sr_elements = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cprt_sr_elements,0,0,0};
+struct S5std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S5std_Cprt_sr_elements S5st_Cprt_sr_elements = {
+ 5
+ ,
+ {// start of table
+ {345,(State*)&S6_Cprt_sr_elements} // shift sym: refered_T
+ ,{347,(State*)&S12_Cprt_sr_elements} // shift sym: refered_rule
+ ,{369,(State*)&S13_Cprt_sr_elements} // shift sym: T_eosubrule
+ ,{572,(State*)&S14_Cprt_sr_elements} // shift sym: Relements
+ ,{573,(State*)&S16_Cprt_sr_elements} // shift sym: Relement
+ }// end of shift table
+};
+yacco2::State S5_Cprt_sr_elements = //State's vectored into symbol: "Rsubrule_def"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cprt_sr_elements,0,0,0,0};
+struct S6std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S6std_Cprt_sr_elements S6st_Cprt_sr_elements = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S7_Cprt_sr_elements} // shift sym: LR1_invisible_shift_operator
+ ,{345,(State*)&S8_Cprt_sr_elements} // shift sym: refered_T
+ }// end of shift table
+};
+yacco2::Shift_entry S6ise_Cprt_sr_elements = {5,(State*)&S7_Cprt_sr_elements};
+yacco2::State S6_Cprt_sr_elements = //State's vectored into symbol: "refered-T"
+{6
+,0,0,(Shift_entry*)&S6ise_Cprt_sr_elements
+,0,(Shift_tbl*)&S6st_Cprt_sr_elements,0,0,0,0};
+struct S7rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cprt_sr_elements S7rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs1_Relement_}
+ }// end of reduce table
+};
+yacco2::State S7_Cprt_sr_elements = //State's vectored into symbol: "|.|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cprt_sr_elements,0,0,0};
+struct S8std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Cprt_sr_elements S8st_Cprt_sr_elements = {
+ 3
+ ,
+ {// start of table
+ {5,(State*)&S9_Cprt_sr_elements} // shift sym: LR1_invisible_shift_operator
+ ,{370,(State*)&S10_Cprt_sr_elements} // shift sym: T_called_thread_eosubrule
+ ,{371,(State*)&S11_Cprt_sr_elements} // shift sym: T_null_call_thread_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S8ise_Cprt_sr_elements = {5,(State*)&S9_Cprt_sr_elements};
+yacco2::State S8_Cprt_sr_elements = //State's vectored into symbol: "refered-T"
+{8
+,0,0,(Shift_entry*)&S8ise_Cprt_sr_elements
+,0,(Shift_tbl*)&S8st_Cprt_sr_elements,0,0,0,0};
+struct S9rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cprt_sr_elements S9rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs6_Relement_}
+ }// end of reduce table
+};
+yacco2::State S9_Cprt_sr_elements = //State's vectored into symbol: "|.|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cprt_sr_elements,0,0,0};
+struct S10rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cprt_sr_elements S10rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs4_Relement_}
+ }// end of reduce table
+};
+yacco2::State S10_Cprt_sr_elements = //State's vectored into symbol: "called thread eosubrule"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cprt_sr_elements,0,0,0};
+struct S11rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cprt_sr_elements S11rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs5_Relement_}
+ }// end of reduce table
+};
+yacco2::State S11_Cprt_sr_elements = //State's vectored into symbol: "null call thread eosubrule"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cprt_sr_elements,0,0,0};
+struct S12rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cprt_sr_elements S12rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs2_Relement_}
+ }// end of reduce table
+};
+yacco2::State S12_Cprt_sr_elements = //State's vectored into symbol: "refered-rule"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cprt_sr_elements,0,0,0};
+struct S13rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cprt_sr_elements S13rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs3_Relement_}
+ }// end of reduce table
+};
+yacco2::State S13_Cprt_sr_elements = //State's vectored into symbol: "eosubrule"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cprt_sr_elements,0,0,0};
+struct S14std_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S14std_Cprt_sr_elements S14st_Cprt_sr_elements = {
+ 4
+ ,
+ {// start of table
+ {345,(State*)&S6_Cprt_sr_elements} // shift sym: refered_T
+ ,{347,(State*)&S12_Cprt_sr_elements} // shift sym: refered_rule
+ ,{369,(State*)&S13_Cprt_sr_elements} // shift sym: T_eosubrule
+ ,{573,(State*)&S15_Cprt_sr_elements} // shift sym: Relement
+ }// end of shift table
+};
+struct S14rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cprt_sr_elements S14rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cprt_sr_elements,Cprt_sr_elements::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S14_Cprt_sr_elements = //State's vectored into symbol: "Relements"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cprt_sr_elements,(Reduce_tbl*)&S14rt_Cprt_sr_elements,0,0,0};
+struct S15rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cprt_sr_elements S15rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs2_Relements_}
+ }// end of reduce table
+};
+yacco2::State S15_Cprt_sr_elements = //State's vectored into symbol: "Relement"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cprt_sr_elements,0,0,0};
+struct S16rtd_Cprt_sr_elements{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cprt_sr_elements S16rt_Cprt_sr_elements = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_sr_elements,Cprt_sr_elements::rhs1_Relements_}
+ }// end of reduce table
+};
+yacco2::State S16_Cprt_sr_elements = //State's vectored into symbol: "Relement"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cprt_sr_elements,0,0,0};
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docs.cpp b/web/yacco2/compiler/grammars/prt_xrefs_docs.cpp
new file mode 100644
index 0000000000..47f2079f32
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docs.cpp
@@ -0,0 +1,812 @@
+/*
+ File: prt_xrefs_docs.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "prt_xrefs_docs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_xrefs_docs;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 9;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+}
+ Cprt_xrefs_docs::
+ Cprt_xrefs_docs()
+ :yacco2::CAbs_fsm
+ ("prt_xrefs_docs.lex"
+ ,"1.0"
+ ,"29 Nov. 2005"
+ ,false
+ ,"Output xref doc --- \n``first set'' per rule, and referenced symbols."
+ ,"Fri Jan 30 18:55:21 2015 "
+ ,S1_Cprt_xrefs_docs){
+
+ }
+
+Cprt_xrefs_docs::~Cprt_xrefs_docs(){
+
+ for(int x = 0;x < 9;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cprt_xrefs_docs::failed(){
+ return false;
+ }
+ void Cprt_xrefs_docs::op(){
+ prt_sr_elems_filter_.insert(T_Enum::T_T_subrule_def_);
+ prt_sr_elems_filter_.insert(T_Enum::T_refered_T_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_eosubrule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_refered_rule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_called_thread_eosubrule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+
+no_subrules_per_rule_.push_back(0);
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+gened_date_time_+= string(cTime);
+int n= gened_date_time_.find('\n');
+gened_date_time_[n]= ' ';
+
+rule_def_= 0;
+subrule_def_= 0;
+rule_no_= 0;
+subrule_no_= 0;
+elem_no_= 0;
+no_of_rules_= 0;
+no_of_subrules_= 0;
+w_index_filename_+= grammar_filename_prefix_.c_str();
+w_index_filename_+= "_idx.w";
+ow_index_file_.open(w_index_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_index_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_index_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+
+}
+int Cprt_xrefs_docs::rhs_to_rules_mapping_[18] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,6 // subrule 9 for rule 7
+ ,7 // subrule 10 for rule 8
+ ,7 // subrule 11 for rule 8
+ ,8 // subrule 12 for rule 9
+ ,8 // subrule 13 for rule 9
+ ,8 // subrule 14 for rule 9
+ ,8 // subrule 15 for rule 9
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+};
+
+void Cprt_xrefs_docs::determine_closure_derived_states(){
+ std::map <int , std::list<state_element*> >::iterator xi;
+ std::map <int , std::list<state_element*> >::iterator xie;
+ STATES_ITER_type si= LR1_STATES.begin();
+ STATES_ITER_type sie= LR1_STATES.end();
+ int integerize_the_subrule(0);
+ for(;si!=sie;++si){// read states
+ state*cur_state= *si;
+ using namespace NS_yacco2_T_enum;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ S_VECTORS_ITER_type tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+ tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+ tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+rd_vector_s_elems:;
+ for(;svi!=svie;++svi){// rd the same vector's elements
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ state_element* se = *seli;
+ if(se->previous_state_ != 0) continue;
+ integerize_the_subrule = se->subrule_def_->its_grammar_s_pos();
+ xi = productions_derived_states_list_.find(integerize_the_subrule);
+ if(xi == productions_derived_states_list_.end()){
+ productions_derived_states_list_[integerize_the_subrule] = std::list<state_element*>();
+ }
+ xi = productions_derived_states_list_.find(integerize_the_subrule);
+ xi->second.push_back(se);
+ }
+ }
+ }
+}
+
+ void Cprt_xrefs_docs::add_symbol_to_xref_map(std::string& Key,std::string& Ref){
+ std::map<std::string, std::list<std::string> >::iterator i;
+ i = xref_of_used_symbols_.find(Key.c_str());
+ if(i ==xref_of_used_symbols_.end()){
+ xref_of_used_symbols_[Key.c_str()] = std::list<std::string>();
+ i = xref_of_used_symbols_.find(Key);
+ std::list<std::string>& xxx = i->second;
+ xxx.push_back(string(Ref.c_str()));
+ return;
+ }else{
+ std::list<std::string>& xxx = i->second;
+ xxx.push_back(string(Ref.c_str()));
+ }
+ }
+
+ void Cprt_xrefs_docs::prt_follow_set_local_yield(follow_element* Fe){
+ KCHARP w_follset_local_yield =
+ "\\FollSetreducinglocalyield %s";
+ sprintf(big_buf_,w_follset_local_yield," ");
+ ow_index_file_ << big_buf_ << endl;
+ KCHARP w_follset_t =
+ "%s";
+ char t_name[Max_cweb_item_size];
+ FOLLOW_SETS_ITER_type fsi = Fe->follow_set_.begin();
+ FOLLOW_SETS_ITER_type fsie = Fe->follow_set_.end();
+ for(;fsi != fsie;){// those Tes
+ T_in_stbl* t = *fsi;
+ t_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(t->t_def()->t_name()->c_str(),t_name);
+ sprintf(big_buf_,w_follset_t,t_name);
+ ow_index_file_ << big_buf_;
+ ++fsi;
+ if(fsi != fsie){
+ ow_index_file_ <<"," << endl;
+ }else{
+ ow_index_file_ <<"." << endl;
+ }
+ }
+ ow_index_file_ << endl;// end it with blank line
+ }
+
+
+ void Cprt_xrefs_docs::prt_follow_set_creators(follow_element* Fe){
+ char rule_name[Max_cweb_item_size];
+ KCHARP w_follset_start_str =
+ "\\halign{\n"
+ "\\span\\FollSettemplate\n"
+ "\\FollSettitle";
+ KCHARP w_follset_stateno_rule =
+ "{%s\\rulenameno{%i}}&\n" // rule+rule no
+ "{"; // start of the contributors
+
+ KCHARP w_follset_creators =
+ "\\FollSetcreators{%i}{%i}{%i}";
+
+ sprintf(big_buf_,w_follset_start_str,"");
+ ow_index_file_ << big_buf_ << endl;
+ rule_def* rd = (rule_def*)AST::content(*Fe->rule_def_t_);
+ rule_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(rd->rule_name()->c_str(),rule_name);
+ sprintf(big_buf_,w_follset_stateno_rule,rule_name,rd->rule_no());
+ ow_index_file_ << big_buf_ << endl;
+ SR_ELEMENTS_type::iterator sri = Fe->sr_elements_.begin();
+ SR_ELEMENTS_type::iterator srie = Fe->sr_elements_.end();
+ for(;sri != srie;++sri){// follow set contributors
+ AST* et = *sri;// eos
+ AST* pvrt = et->pr_;
+ refered_rule* rr = (refered_rule*)AST::content(*pvrt);
+ T_subrule_def* srd = rr->its_subrule_def();
+ rule_def* sr_d = srd->its_rule_def();
+ sprintf(big_buf_
+ ,w_follset_creators
+ ,sr_d->rule_no()
+ ,srd->subrule_no_of_rule()
+ ,rr->element_pos());
+
+ ow_index_file_ << big_buf_ << endl;
+ }
+ }
+
+ void Cprt_xrefs_docs::prt_follow_set_merges(follow_element* Fe){
+ KCHARP w_overflow_close_and_new_blank_rule =
+ "}\\cr\n"
+ "{}&\n" // blank sule name
+ "{%s"; // start of new meging list
+ KCHARP w_follset_merges =
+ "\\FollSetmerges{%i}"; // state where other follow set rule lies
+ MERGES_ITER_type mi = Fe->merges_.begin();
+ MERGES_ITER_type mie = Fe->merges_.end();
+ int overflow_limit(10);
+ int merge_cnt(0);
+ for(;mi != mie;++mi){// transitions
+ state* s = *mi;
+ ++merge_cnt;
+ if(merge_cnt > overflow_limit){
+ sprintf(big_buf_,w_overflow_close_and_new_blank_rule," ");
+ ow_index_file_ << big_buf_ << endl;
+ merge_cnt = 1;
+ }
+ sprintf(big_buf_,w_follset_merges,s->state_no_);
+ ow_index_file_ << big_buf_ << endl;
+ }
+ }
+
+ void Cprt_xrefs_docs::prt_follow_set_transitions(follow_element* Fe){
+ KCHARP w_follset_transitions =
+ "\\FollSettransition{%i}{%i}"; // rt bnded
+ TRANSITIONS_ITER_type ti = Fe->transitions_.begin();
+ TRANSITIONS_ITER_type tie = Fe->transitions_.end();
+ for(;ti != tie;++ti){// transitions
+ follow_element* tfe = *ti;
+ rule_def* rd = (rule_def*)AST::content(*tfe->rule_def_t_);
+ sprintf(big_buf_
+ ,w_follset_transitions
+ ,tfe->its_state_->state_no_
+ ,rd->rule_no());
+ ow_index_file_ << big_buf_ << endl;
+ }
+ KCHARP w_follset_end_str = "}%s\\cr";
+ sprintf(big_buf_,w_follset_end_str," ");
+ ow_index_file_ << big_buf_ << endl;
+ KCHARP w_follset_end_rule = "}%s";
+ sprintf(big_buf_,w_follset_end_rule," ");
+ ow_index_file_ << big_buf_ << endl;
+ }
+
+ void Cprt_xrefs_docs::prt_state_s_follow_set_rules(state* Cur_state){
+ KCHARP w_follset_stateno = // stateno
+ "\\FollSetstateno{%i}";
+ S_FOLLOW_SETS_ITER_type fsi = Cur_state->state_s_follow_set_map_.begin();
+ S_FOLLOW_SETS_ITER_type fsie = Cur_state->state_s_follow_set_map_.end();
+ if(fsi == fsie) return;// nada follow set info in this state
+ sprintf(big_buf_,w_follset_stateno,Cur_state->state_no_);
+ ow_index_file_ << big_buf_ << endl;
+ for(;fsi != fsie;++fsi){// state's follow set info
+ follow_element* fe = (*fsi).second;
+ prt_follow_set_creators(fe);
+ prt_follow_set_merges(fe);
+ prt_follow_set_transitions(fe);
+ prt_follow_set_local_yield(fe);
+ }
+ }
+
+
+ void Cprt_xrefs_docs::prt_states_follow_set(){
+ KCHARP w_states_follow_sets =
+ "@** Lr1 State's Follow sets and reducing lookahead sets.\\fbreak\n"
+ "\\FollSetnotesintro\n"
+ "\\fbreak";
+ ow_index_file_ << w_states_follow_sets << std::endl;
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){// walk the states
+ state* cur_state = *si;
+ prt_state_s_follow_set_rules(cur_state);
+ }
+ }
+
+ void Cprt_xrefs_docs::prt_common_follow_set_la(){
+ KCHARP w_common_follow_sets =
+ "@*1 Common Follow sets.\\fbreak\n";
+ ow_index_file_ << w_common_follow_sets << std::endl;
+ KCHARP w_common_follow_set =
+ "@*2 LA set: %i.\\fbreak\n"
+ "\\item{}\n"
+ "\\raggedright";
+ KCHARP la_set_entry_literal = "%s";
+ char t_name[Max_cweb_item_size];
+
+ COMMON_LA_SETS_ITER_type i = COMMON_LA_SETS.begin();
+ COMMON_LA_SETS_ITER_type ie = COMMON_LA_SETS.end();
+ for(int idx=0;i!=ie;++i,++idx){
+ LA_SET_type* la_set = *i;
+ sprintf(big_buf_,w_common_follow_set,idx+1);
+ ow_index_file_ << big_buf_ << endl;
+ LA_SET_ITER_type j = la_set->begin();// list out the T literals
+ LA_SET_ITER_type je = la_set->end();
+ for(;j!=je;){
+ T_in_stbl* tsym = *j;
+ t_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(tsym->t_def()->t_name()->c_str(),t_name);
+ sprintf(big_buf_,la_set_entry_literal,t_name);
+ ow_index_file_ << big_buf_;
+ ++j;
+ if(j!=je){
+ ow_index_file_ << "," << endl;
+ }else{
+ ow_index_file_ << "." << endl;
+ }
+ }
+ ow_index_file_ << endl; // close off the items
+ }
+ }
+
+Rprt_xrefs_docs::Rprt_xrefs_docs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rprt_xrefs_docs",0,Cprt_xrefs_docs::R_Rprt_xrefs_docs_,P,false,false){
+}
+
+void Rprt_xrefs_docs::sr1(){
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+
+ int rule_no = 1;
+
+ KCHARP w_doc_index =
+ "\\input \"supp-pdf\"\n"
+ "\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n"
+ "\\IDXdoctitle{%s}{%s}";
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(fsm->w_index_filename_.c_str(),xlate_file);
+ sprintf(fsm->big_buf_
+ ,w_doc_index
+ ,xlate_file
+ ,xlate_file
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+
+
+ KCHARP w_used_xref_index =
+ "@** Grammar symbols: Used cross reference.\\fbreak\n"
+ "Reference of each grammar's symbol used within each rule's productions. The index\n"
+ "uses the tripple: rule name, its subrule no, and the symbol's position\n"
+ " within the symbol string.";
+ fsm->ow_index_file_ << w_used_xref_index << std::endl;
+
+ char key[Max_cweb_item_size];
+ char xlate_key_sym[Max_cweb_item_size];
+ char xref_key[Max_cweb_item_size];
+ char xlate_sym[Max_cweb_item_size];
+ char xlated_rule[Max_cweb_item_size];
+ std::map<std::string, std::list<std::string> >::iterator i =
+ fsm->xref_of_used_symbols_.begin();
+ std::map<std::string, std::list<std::string> >::iterator ie =
+ fsm->xref_of_used_symbols_.end();
+ for(;i != ie;++i){
+ strcpy(key,i->first.c_str());
+ XLATE_SYMBOLS_FOR_cweave((const char*)key,xlate_key_sym);
+ fsm->ow_index_file_ << "@*2 " << xlate_key_sym << ":.\\fbreak" << endl;
+ std::list<std::string>& xxx = i->second;
+ std::list<std::string>::iterator k = xxx.begin();
+ std::list<std::string>::iterator ke = xxx.end();
+ for(;k != ke;++k){
+ strcpy(xref_key,k->c_str());
+ XLATE_SYMBOLS_FOR_cweave((const char*)xref_key,xlate_sym);
+ fsm->ow_index_file_ << xlate_sym << "\\ \\ " << endl;
+ }
+ fsm->ow_index_file_ << "\\fbreak" << endl;
+ }
+
+ KCHARP w_fs_index =
+ "@** Grammar Rules's First Sets.\\fbreak\n";
+ fsm->ow_index_file_ << w_fs_index << std::endl;
+
+ std::list<rule_def*>::iterator j = fsm->rules_for_fs_prt_.begin();
+ std::list<rule_def*>::iterator je = fsm->rules_for_fs_prt_.end();
+ for(;j != je;++j){
+ PRT_RULE_S_FIRST_SET(fsm->ow_index_file_,*j);
+ };
+ KCHARP w_lr_state_network =
+ "@*2 LR State Network.\\fbreak\n"
+ "\\LRstatenetwork\n";
+ KCHARP w_xref_rule_rank_to_literal =
+ "@.R$_{%i}$ --- %s@>\n";
+ fsm->ow_index_file_ << w_lr_state_network << std::endl;
+ fsm->determine_closure_derived_states();
+
+ std::map <int , std::list<state_element*> >::iterator xi;
+ std::map <int , std::list<state_element*> >::iterator xie;
+
+ xi= fsm->productions_derived_states_list_.begin();
+ xie = fsm->productions_derived_states_list_.end();
+ rule_def* ord(0);
+ rule_def* rd(0);
+
+ for(;xi!=xie;++xi){// walk all the derived productions list
+ std::list<state_element*>& selist = xi->second;
+ std::list<state_element*>::iterator f1st_el = selist.begin();
+ state_element* se = (state_element*)*f1st_el;
+ T_subrule_def* srd = se->subrule_def_;
+ rd = srd->its_rule_def();
+ if(ord != rd){
+ ord = rd;
+ XLATE_SYMBOLS_FOR_cweave(ord->rule_name()->c_str(),xlated_rule);
+ KCHARP w_rule_name =
+ "@*3 %s.\\fbreak";
+ sprintf(fsm->big_buf_
+ ,w_rule_name
+ ,xlated_rule
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+ sprintf(fsm->big_buf_
+ ,w_xref_rule_rank_to_literal
+ ,rd->rule_no()
+ ,xlated_rule
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+ }
+ KCHARP w_subrule =
+ "\\Subrulestartsymstrindent{%i} ";
+ sprintf(fsm->big_buf_
+ ,w_subrule
+ ,srd->subrule_no_of_rule()
+ );
+ fsm->ow_index_file_ << fsm->big_buf_;
+// print its rhs elements
+ AST* sr_t = srd->subrule_s_tree();
+
+ tok_can_ast_functor sr_elems_walk_functr;
+ ast_prefix_1forest prt_sr_elems_walk(*sr_t
+ ,&sr_elems_walk_functr,&fsm->prt_sr_elems_filter_,ACCEPT_FILTER);
+ tok_can<AST*> prt_sr_elems_can(prt_sr_elems_walk);
+ using namespace NS_prt_sr_elements;
+ Cprt_sr_elements prt_sr_elements_fsm;
+ prt_sr_elements_fsm.ow_index_file_ = &fsm->ow_index_file_;
+ Parser prt_sr_elements(prt_sr_elements_fsm,&prt_sr_elems_can,0);
+ prt_sr_elements.parse();
+
+ list<state_element*>& dlist = xi->second;
+ list<state_element*>::iterator yi = dlist.begin();
+ list<state_element*>::iterator yie = dlist.end();
+ KCHARP w_subrule_derived_states =
+ "\\Subrulederivedstatesindent ";
+ KCHARP w_merged = "{\\Mergedstate{%i}}";
+ std::set<int> chk_merge;
+ chk_merge.clear();
+ for(;yi!=yie;++yi){// derive state list per closured production
+ fsm->ow_index_file_ << w_subrule_derived_states << endl;
+ state_element* se = *yi;
+ state_element* dse = se;
+ for(;dse!=0;dse = dse->next_state_element_){// walk the derived plank
+ fsm->ow_index_file_ << dse->self_state_->state_no_;
+ if(dse->next_state_element_ != 0){
+ std::set<int>::iterator si =
+ chk_merge.find(dse->next_state_element_->self_state_->state_no_);
+ if(si != chk_merge.end()){
+ sprintf(fsm->big_buf_
+ ,w_merged
+ ,dse->goto_state_->state_no_
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << endl;
+ break;
+ }
+ }
+ chk_merge.insert(dse->self_state_->state_no_);
+ fsm->ow_index_file_ << "\\ \\ " << endl;
+ }
+ }
+ }
+
+ KCHARP w_list_of_reduced_states =
+ "@*2 List of reducing states.\\fbreak\n"
+ "\\Listofreducingstates\n"
+ "\\fbreak\n";
+ fsm->ow_index_file_ << w_list_of_reduced_states << std::endl;
+ fsm->ow_index_file_ << "\\Reducedstatelist" << std::endl;
+ std::vector <state* >::iterator ri = fsm->reducing_states_list_.begin();
+ std::vector <state* >::iterator rie = fsm->reducing_states_list_.end();
+ for(;ri != rie;++ri){
+ state* s = *ri;
+ fsm->ow_index_file_ << '{' << s->state_no_;
+ switch (s->state_type_){
+ case 0:{//shift only
+ break;
+ }
+ case 1:{
+ fsm->ow_index_file_ << "\\Reduceonly";
+ break;
+ }
+ case 2:{
+ fsm->ow_index_file_ << "\\ShiftReduce";
+ break;
+ }
+ case 3:{
+ fsm->ow_index_file_ << "\\MultipleReduces";
+ break;
+ }
+ case 4:{
+ fsm->ow_index_file_ << "\\ShiftandMultipleReduces";
+ break;
+ }
+ }
+ fsm->ow_index_file_ << "\\ \\ }" << std::endl;
+ }
+ fsm->prt_states_follow_set();
+ fsm->prt_common_follow_set_la();
+ fsm->ow_index_file_ << "@** Index." << endl;
+
+fsm->ow_index_file_.close();
+
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Cprt_xrefs_docs::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Cprt_xrefs_docs::R_Rrule_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Cprt_xrefs_docs::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ fsm->rules_for_fs_prt_.push_back(fsm->rule_def_);
+ ++fsm->rule_no_;
+ fsm->subrule_no_ = 0;
+
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Cprt_xrefs_docs::R_Rsubrules_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Cprt_xrefs_docs::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Cprt_xrefs_docs::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ T_subrule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ fsm->elem_no_ = 0;
+ fsm->subrule_def_ = sf->p1__;
+
+}
+
+Relements::Relements(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relements",0,Cprt_xrefs_docs::R_Relements_,P,false,false){
+}
+
+Relement::Relement(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relement",0,Cprt_xrefs_docs::R_Relement_,P,false,false){
+}
+
+void Relement::sr1(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern
+ ,fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+
+}
+
+void Relement::sr2(){
+ struct SF{
+ refered_rule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_rule_def()->rule_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+
+}
+
+void Relement::sr3(){
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key("\\emptyrule");
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ }
+
+}
+
+void Relement::sr4(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_called_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ xref_key += "|||";
+ }else{
+ xref_key += "|t|";
+ }
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ++fsm->elem_no_;
+ string xref_rtned_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_rtned_entry += fsm->big_buf_;
+ string xref_rtned_key(sf->p2__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_rtned_key,xref_rtned_entry);
+ ++fsm->elem_no_;
+ string xref_thd_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_thd_entry += fsm->big_buf_;
+ string xref_thd_key;
+ xref_thd_key += sf->p3__->ns()->identifier()->c_str();
+ xref_thd_key += "::";
+ xref_thd_key += sf->p3__->called_thread_name()->identifier()->c_str();
+ fsm->add_symbol_to_xref_map(xref_thd_key,xref_thd_entry);
+
+}
+
+void Relement::sr5(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ T_null_call_thread_eosubrule* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ xref_key += "|||";
+ }else{
+ xref_key += "|t|";
+ }
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+
+ ++fsm->elem_no_;
+ string xref_rtned_key(sf->p2__->its_t_def()->t_name()->c_str());
+ string xref_rtned_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_rtned_entry += fsm->big_buf_;
+ fsm->add_symbol_to_xref_map(xref_rtned_key,xref_rtned_entry);
+
+ ++fsm->elem_no_;
+ string xref_thd_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_thd_entry += fsm->big_buf_;
+ string xref_thd_key("NULL thread");
+ fsm->add_symbol_to_xref_map(xref_thd_key,xref_thd_entry);
+
+}
+
+void Relement::sr6(){
+ struct SF{
+ refered_T* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_T* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ CAbs_lr1_sym* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ++fsm->elem_no_;
+ string xref_2_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_2_entry += fsm->big_buf_;
+ string xref_2_key(sf->p2__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_2_key,xref_2_entry);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docs.fsc b/web/yacco2/compiler/grammars/prt_xrefs_docs.fsc
new file mode 100644
index 0000000000..051711e86b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docs.fsc
@@ -0,0 +1,20 @@
+/*
+ File: prt_xrefs_docs.fsc
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+transitive n
+grammar-name "prt_xrefs_docs"
+name-space "NS_prt_xrefs_docs"
+thread-name "Cprt_xrefs_docs"
+monolithic y
+file-name "prt_xrefs_docs.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Output xref doc --- \n``first set'' per rule, and referenced symbols."
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docs.h b/web/yacco2/compiler/grammars/prt_xrefs_docs.h
new file mode 100644
index 0000000000..5f6be66289
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docs.h
@@ -0,0 +1,175 @@
+/*
+ File: prt_xrefs_docs.h
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#ifndef __prt_xrefs_docs_h__
+#define __prt_xrefs_docs_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "time.h"
+#include "o2_externs.h"
+#include "prt_sr_elements.h"
+extern void PRT_RULE_S_FIRST_SET(std::ofstream& Ofile,NS_yacco2_terminals::rule_def* Rule_def);
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern int MPOST_CWEB_xlated_symbol(AST* Sym,char* Xlated_sym);
+extern STATES_type LR1_STATES;
+extern COMMON_LA_SETS_type COMMON_LA_SETS;
+
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cprt_xrefs_docs;
+namespace NS_prt_xrefs_docs {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[9];
+};
+class Cprt_xrefs_docs: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rprt_xrefs_docs_ = 569//start_of_rule_list + 0
+ ,rhs1_Rprt_xrefs_docs_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ ,R_Rsubrules_ = 573//start_of_rule_list + 8
+ ,rhs1_Rsubrules_ = 6
+ ,rhs2_Rsubrules_ = 7
+ ,R_Rsubrule_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsubrule_ = 8
+ ,R_Rsubrule_def_ = 575//start_of_rule_list + 12
+ ,rhs1_Rsubrule_def_ = 9
+ ,R_Relements_ = 576//start_of_rule_list + 14
+ ,rhs1_Relements_ = 10
+ ,rhs2_Relements_ = 11
+ ,R_Relement_ = 577//start_of_rule_list + 16
+ ,rhs1_Relement_ = 12
+ ,rhs2_Relement_ = 13
+ ,rhs3_Relement_ = 14
+ ,rhs4_Relement_ = 15
+ ,rhs5_Relement_ = 16
+ ,rhs6_Relement_ = 17
+ };
+ //no of la sets = 6
+ //no of states = 23
+ Cprt_xrefs_docs();
+ ~Cprt_xrefs_docs();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[18];
+
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ set<int> prt_sr_elems_filter_;
+ std::map <int , std::string> xlated_names_;
+ std::map <int , std::list<state_element*> > productions_derived_states_list_;
+ std::vector <state* > reducing_states_list_;
+ std::vector <int> no_subrules_per_rule_;
+ std::string gened_date_time_;
+ std::string w_index_filename_;
+ std::ofstream ow_index_file_;
+ std::string grammar_filename_prefix_;
+ std::string fq_filename_noext_;
+ int rule_no_;
+ int subrule_no_;
+ int elem_no_;
+ int no_of_rules_;
+ int no_of_subrules_;
+ std::string rule_name_;
+ std::string elem_name_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ std::list<NS_yacco2_terminals::rule_def*> rules_for_fs_prt_;
+ std::map<std::string, std::list<std::string> > xref_of_used_symbols_;
+ void add_symbol_to_xref_map(std::string& Key,std::string& Ref);
+ void determine_closure_derived_states();
+ void prt_states_follow_set();
+ void prt_follow_set_local_yield(follow_element* Fe);
+ void prt_follow_set_creators(follow_element* Fe);
+ void prt_follow_set_transitions(follow_element* Fe);
+ void prt_follow_set_merges(follow_element* Fe);
+ void prt_state_s_follow_set_rules(state* Cur_state);
+ void prt_common_follow_set_la();
+
+ };
+struct Rprt_xrefs_docs;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rsubrules;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Relements;
+struct Relement;
+struct Rprt_xrefs_docs:public yacco2::CAbs_lr1_sym {
+ Rprt_xrefs_docs(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Relements:public yacco2::CAbs_lr1_sym {
+ Relements(yacco2::Parser* P);
+ public:
+};
+
+struct Relement:public yacco2::CAbs_lr1_sym {
+ Relement(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docs.lex b/web/yacco2/compiler/grammars/prt_xrefs_docs.lex
new file mode 100644
index 0000000000..1c42774dcc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docs.lex
@@ -0,0 +1,745 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: prt_xrefs_docs.lex
+Dates: 3 Sept. 2007
+Purpose: Create various xref docs.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |prt_xrefs_docs.lex| Grammar.\fbreak
+Various cross references:\fbreak
+\ptindent{1) used vocabulary symbols referenced against each rule's subrule and position}
+\ptindent{2) first set per rule}
+\ptindent{3) productions derived lr states}
+\ptindent{4) list of reducing lr states}
+\ptindent{5) Per state Follow set calculations}
+\ptindent{6) Commonized follow sets for reducing subrules}
+@/
+fsm
+(fsm-id "prt_xrefs_docs.lex",fsm-filename prt_xrefs_docs,fsm-namespace NS_prt_xrefs_docs
+,fsm-class Cprt_xrefs_docs{
+ user-prefix-declaration
+#include "time.h"
+#include "o2_externs.h"
+#include "prt_sr_elements.h"
+extern void PRT_RULE_S_FIRST_SET(std::ofstream& Ofile,NS_yacco2_terminals::rule_def* Rule_def);
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern int MPOST_CWEB_xlated_symbol(AST* Sym,char* Xlated_sym);
+extern STATES_type LR1_STATES;
+extern COMMON_LA_SETS_type COMMON_LA_SETS;
+
+ ***
+ user-declaration
+ public:
+ char big_buf_[BIG_BUFFER_32K];
+ set<int> prt_sr_elems_filter_;
+ std::map <int , std::string> xlated_names_;
+ std::map <int , std::list<state_element*> > productions_derived_states_list_;
+ std::vector <state* > reducing_states_list_;
+ std::vector <int> no_subrules_per_rule_;
+ std::string gened_date_time_;
+ std::string w_index_filename_;
+ std::ofstream ow_index_file_;
+ std::string grammar_filename_prefix_;
+ std::string fq_filename_noext_;
+ int rule_no_;
+ int subrule_no_;
+ int elem_no_;
+ int no_of_rules_;
+ int no_of_subrules_;
+ std::string rule_name_;
+ std::string elem_name_;
+ rule_def* rule_def_;
+ T_subrule_def* subrule_def_;
+ std::list<NS_yacco2_terminals::rule_def*> rules_for_fs_prt_;
+ std::map<std::string, std::list<std::string> > xref_of_used_symbols_;
+ void add_symbol_to_xref_map(std::string& Key,std::string& Ref);
+ void determine_closure_derived_states();
+ void prt_states_follow_set();
+ void prt_follow_set_local_yield(follow_element* Fe);
+ void prt_follow_set_creators(follow_element* Fe);
+ void prt_follow_set_transitions(follow_element* Fe);
+ void prt_follow_set_merges(follow_element* Fe);
+ void prt_state_s_follow_set_rules(state* Cur_state);
+ void prt_common_follow_set_la();
+ ***
+ user-implementation
+void Cprt_xrefs_docs::determine_closure_derived_states(){
+ std::map <int , std::list<state_element*> >::iterator xi;
+ std::map <int , std::list<state_element*> >::iterator xie;
+ STATES_ITER_type si= LR1_STATES.begin();
+ STATES_ITER_type sie= LR1_STATES.end();
+ int integerize_the_subrule(0);
+ for(;si!=sie;++si){// read states
+ state*cur_state= *si;
+ using namespace NS_yacco2_T_enum;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ S_VECTORS_ITER_type tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+ tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+ tvi = cur_state->state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+ if(tvi != svie){
+ reducing_states_list_.push_back(cur_state);
+ goto rd_vector_s_elems;
+ }
+rd_vector_s_elems:;
+ for(;svi!=svie;++svi){// rd the same vector's elements
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ state_element* se = *seli;
+ if(se->previous_state_ != 0) continue;
+ integerize_the_subrule = se->subrule_def_->its_grammar_s_pos();
+ xi = productions_derived_states_list_.find(integerize_the_subrule);
+ if(xi == productions_derived_states_list_.end()){
+ productions_derived_states_list_[integerize_the_subrule] = std::list<state_element*>();
+ }
+ xi = productions_derived_states_list_.find(integerize_the_subrule);
+ xi->second.push_back(se);
+ }
+ }
+ }
+}
+/@
+@*3 |add_symbol_to_xref_map|.
+@/
+ void Cprt_xrefs_docs::add_symbol_to_xref_map(std::string& Key,std::string& Ref){
+ std::map<std::string, std::list<std::string> >::iterator i;
+ i = xref_of_used_symbols_.find(Key.c_str());
+ if(i ==xref_of_used_symbols_.end()){
+ xref_of_used_symbols_[Key.c_str()] = std::list<std::string>();
+ i = xref_of_used_symbols_.find(Key);
+ std::list<std::string>& xxx = i->second;
+ xxx.push_back(string(Ref.c_str()));
+ return;
+ }else{
+ std::list<std::string>& xxx = i->second;
+ xxx.push_back(string(Ref.c_str()));
+ }
+ }
+/@
+@*3 |prt_follow_set_local_yield|.
+@/
+ void Cprt_xrefs_docs::prt_follow_set_local_yield(follow_element* Fe){
+ KCHARP w_follset_local_yield =
+ "\\FollSetreducinglocalyield %s";
+ sprintf(big_buf_,w_follset_local_yield," ");
+ ow_index_file_ << big_buf_ << endl;
+ KCHARP w_follset_t =
+ "%s";
+ char t_name[Max_cweb_item_size];
+ FOLLOW_SETS_ITER_type fsi = Fe->follow_set_.begin();
+ FOLLOW_SETS_ITER_type fsie = Fe->follow_set_.end();
+ for(;fsi != fsie;){// those Tes
+ T_in_stbl* t = *fsi;
+ t_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(t->t_def()->t_name()->c_str(),t_name);
+ sprintf(big_buf_,w_follset_t,t_name);
+ ow_index_file_ << big_buf_;
+ ++fsi;
+ if(fsi != fsie){
+ ow_index_file_ <<"," << endl;
+ }else{
+ ow_index_file_ <<"." << endl;
+ }
+ }
+ ow_index_file_ << endl;// end it with blank line
+ }
+
+/@
+@*3 |prt_follow_set_creators|.
+@/
+ void Cprt_xrefs_docs::prt_follow_set_creators(follow_element* Fe){
+ char rule_name[Max_cweb_item_size];
+ KCHARP w_follset_start_str =
+ "\\halign{\n"
+ "\\span\\FollSettemplate\n"
+ "\\FollSettitle";
+ KCHARP w_follset_stateno_rule =
+ "{%s\\rulenameno{%i}}&\n" // rule+rule no
+ "{"; // start of the contributors
+
+ KCHARP w_follset_creators =
+ "\\FollSetcreators{%i}{%i}{%i}";
+
+ sprintf(big_buf_,w_follset_start_str,"");
+ ow_index_file_ << big_buf_ << endl;
+ rule_def* rd = (rule_def*)AST::content(*Fe->rule_def_t_);
+ rule_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(rd->rule_name()->c_str(),rule_name);
+ sprintf(big_buf_,w_follset_stateno_rule,rule_name,rd->rule_no());
+ ow_index_file_ << big_buf_ << endl;
+ SR_ELEMENTS_type::iterator sri = Fe->sr_elements_.begin();
+ SR_ELEMENTS_type::iterator srie = Fe->sr_elements_.end();
+ for(;sri != srie;++sri){// follow set contributors
+ AST* et = *sri;// eos
+ AST* pvrt = et->pr_;
+ refered_rule* rr = (refered_rule*)AST::content(*pvrt);
+ T_subrule_def* srd = rr->its_subrule_def();
+ rule_def* sr_d = srd->its_rule_def();
+ sprintf(big_buf_
+ ,w_follset_creators
+ ,sr_d->rule_no()
+ ,srd->subrule_no_of_rule()
+ ,rr->element_pos());
+
+ ow_index_file_ << big_buf_ << endl;
+ }
+ }
+/@
+@*3 |prt_follow_set_merges|.
+@/
+ void Cprt_xrefs_docs::prt_follow_set_merges(follow_element* Fe){
+ KCHARP w_overflow_close_and_new_blank_rule =
+ "}\\cr\n"
+ "{}&\n" // blank sule name
+ "{%s"; // start of new meging list
+ KCHARP w_follset_merges =
+ "\\FollSetmerges{%i}"; // state where other follow set rule lies
+ MERGES_ITER_type mi = Fe->merges_.begin();
+ MERGES_ITER_type mie = Fe->merges_.end();
+ int overflow_limit(10);
+ int merge_cnt(0);
+ for(;mi != mie;++mi){// transitions
+ state* s = *mi;
+ ++merge_cnt;
+ if(merge_cnt > overflow_limit){
+ sprintf(big_buf_,w_overflow_close_and_new_blank_rule," ");
+ ow_index_file_ << big_buf_ << endl;
+ merge_cnt = 1;
+ }
+ sprintf(big_buf_,w_follset_merges,s->state_no_);
+ ow_index_file_ << big_buf_ << endl;
+ }
+ }
+/@
+@*3 |prt_follow_set_transitions|.
+@/
+ void Cprt_xrefs_docs::prt_follow_set_transitions(follow_element* Fe){
+ KCHARP w_follset_transitions =
+ "\\FollSettransition{%i}{%i}"; // rt bnded
+ TRANSITIONS_ITER_type ti = Fe->transitions_.begin();
+ TRANSITIONS_ITER_type tie = Fe->transitions_.end();
+ for(;ti != tie;++ti){// transitions
+ follow_element* tfe = *ti;
+ rule_def* rd = (rule_def*)AST::content(*tfe->rule_def_t_);
+ sprintf(big_buf_
+ ,w_follset_transitions
+ ,tfe->its_state_->state_no_
+ ,rd->rule_no());
+ ow_index_file_ << big_buf_ << endl;
+ }
+ KCHARP w_follset_end_str = "}%s\\cr";
+ sprintf(big_buf_,w_follset_end_str," ");
+ ow_index_file_ << big_buf_ << endl;
+ KCHARP w_follset_end_rule = "}%s";
+ sprintf(big_buf_,w_follset_end_rule," ");
+ ow_index_file_ << big_buf_ << endl;
+ }
+/@
+@*3 |prt_state_s_follow_set_rules|.
+@/
+ void Cprt_xrefs_docs::prt_state_s_follow_set_rules(state* Cur_state){
+ KCHARP w_follset_stateno = // stateno
+ "\\FollSetstateno{%i}";
+ S_FOLLOW_SETS_ITER_type fsi = Cur_state->state_s_follow_set_map_.begin();
+ S_FOLLOW_SETS_ITER_type fsie = Cur_state->state_s_follow_set_map_.end();
+ if(fsi == fsie) return;// nada follow set info in this state
+ sprintf(big_buf_,w_follset_stateno,Cur_state->state_no_);
+ ow_index_file_ << big_buf_ << endl;
+ for(;fsi != fsie;++fsi){// state's follow set info
+ follow_element* fe = (*fsi).second;
+ prt_follow_set_creators(fe);
+ prt_follow_set_merges(fe);
+ prt_follow_set_transitions(fe);
+ prt_follow_set_local_yield(fe);
+ }
+ }
+
+/@
+@*3 |prt_states_follow_set|.
+@/
+ void Cprt_xrefs_docs::prt_states_follow_set(){
+ KCHARP w_states_follow_sets =
+ "@** Lr1 State's Follow sets and reducing lookahead sets.\\fbreak\n"
+ "\\FollSetnotesintro\n"
+ "\\fbreak";
+ ow_index_file_ << w_states_follow_sets << std::endl;
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){// walk the states
+ state* cur_state = *si;
+ prt_state_s_follow_set_rules(cur_state);
+ }
+ }
+/@
+@*3 |prt_common_follow_set_la|.
+@/
+ void Cprt_xrefs_docs::prt_common_follow_set_la(){
+ KCHARP w_common_follow_sets =
+ "@*1 Common Follow sets.\\fbreak\n";
+ ow_index_file_ << w_common_follow_sets << std::endl;
+ KCHARP w_common_follow_set =
+ "@*2 LA set: %i.\\fbreak\n"
+ "\\item{}\n"
+ "\\raggedright";
+ KCHARP la_set_entry_literal = "%s";
+ char t_name[Max_cweb_item_size];
+
+ COMMON_LA_SETS_ITER_type i = COMMON_LA_SETS.begin();
+ COMMON_LA_SETS_ITER_type ie = COMMON_LA_SETS.end();
+ for(int idx=0;i!=ie;++i,++idx){
+ LA_SET_type* la_set = *i;
+ sprintf(big_buf_,w_common_follow_set,idx+1);
+ ow_index_file_ << big_buf_ << endl;
+ LA_SET_ITER_type j = la_set->begin();// list out the T literals
+ LA_SET_ITER_type je = la_set->end();
+ for(;j!=je;){
+ T_in_stbl* tsym = *j;
+ t_name[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(tsym->t_def()->t_name()->c_str(),t_name);
+ sprintf(big_buf_,la_set_entry_literal,t_name);
+ ow_index_file_ << big_buf_;
+ ++j;
+ if(j!=je){
+ ow_index_file_ << "," << endl;
+ }else{
+ ow_index_file_ << "." << endl;
+ }
+ }
+ ow_index_file_ << endl; // close off the items
+ }
+ }
+ ***
+ op
+ prt_sr_elems_filter_.insert(T_Enum::T_T_subrule_def_);
+ prt_sr_elems_filter_.insert(T_Enum::T_refered_T_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_eosubrule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_refered_rule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_called_thread_eosubrule_);
+ prt_sr_elems_filter_.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+
+no_subrules_per_rule_.push_back(0);
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+gened_date_time_+= string(cTime);
+int n= gened_date_time_.find('\n');
+gened_date_time_[n]= ' ';
+
+rule_def_= 0;
+subrule_def_= 0;
+rule_no_= 0;
+subrule_no_= 0;
+elem_no_= 0;
+no_of_rules_= 0;
+no_of_subrules_= 0;
+w_index_filename_+= grammar_filename_prefix_.c_str();
+w_index_filename_+= "_idx.w";
+ow_index_file_.open(w_index_filename_.c_str(),ios_base::out|ios::trunc);
+if(!ow_index_file_){
+CAbs_lr1_sym*sym= new Err_bad_filename(w_index_filename_.c_str());
+ sym->set_who_created(__FILE__,__LINE__);
+parser__->add_token_to_error_queue(*sym);
+parser__->set_stop_parse(true);
+return;
+}
+ ***
+}
+,fsm-version "1.0",fsm-date "29 Nov. 2005",fsm-debug "false"
+,fsm-comments
+"Output xref doc --- \n``first set'' per rule, and referenced symbols.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rprt_xrefs_docs
+(){
+ -> Rrules eog {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+
+ int rule_no = 1;
+
+ KCHARP w_doc_index =
+ "\\input \"supp-pdf\"\n"
+ "\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n"
+ "\\IDXdoctitle{%s}{%s}";
+ char xlate_file[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(fsm->w_index_filename_.c_str(),xlate_file);
+ sprintf(fsm->big_buf_
+ ,w_doc_index
+ ,xlate_file
+ ,xlate_file
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+
+
+ KCHARP w_used_xref_index =
+ "@** Grammar symbols: Used cross reference.\\fbreak\n"
+ "Reference of each grammar's symbol used within each rule's productions. The index\n"
+ "uses the tripple: rule name, its subrule no, and the symbol's position\n"
+ " within the symbol string.";
+ fsm->ow_index_file_ << w_used_xref_index << std::endl;
+
+ char key[Max_cweb_item_size];
+ char xlate_key_sym[Max_cweb_item_size];
+ char xref_key[Max_cweb_item_size];
+ char xlate_sym[Max_cweb_item_size];
+ char xlated_rule[Max_cweb_item_size];
+ std::map<std::string, std::list<std::string> >::iterator i =
+ fsm->xref_of_used_symbols_.begin();
+ std::map<std::string, std::list<std::string> >::iterator ie =
+ fsm->xref_of_used_symbols_.end();
+ for(;i != ie;++i){
+ strcpy(key,i->first.c_str());
+ XLATE_SYMBOLS_FOR_cweave((const char*)key,xlate_key_sym);
+ fsm->ow_index_file_ << "@*2 " << xlate_key_sym << ":.\\fbreak" << endl;
+ std::list<std::string>& xxx = i->second;
+ std::list<std::string>::iterator k = xxx.begin();
+ std::list<std::string>::iterator ke = xxx.end();
+ for(;k != ke;++k){
+ strcpy(xref_key,k->c_str());
+ XLATE_SYMBOLS_FOR_cweave((const char*)xref_key,xlate_sym);
+ fsm->ow_index_file_ << xlate_sym << "\\ \\ " << endl;
+ }
+ fsm->ow_index_file_ << "\\fbreak" << endl;
+ }
+
+ KCHARP w_fs_index =
+ "@** Grammar Rules's First Sets.\\fbreak\n";
+ fsm->ow_index_file_ << w_fs_index << std::endl;
+
+ std::list<rule_def*>::iterator j = fsm->rules_for_fs_prt_.begin();
+ std::list<rule_def*>::iterator je = fsm->rules_for_fs_prt_.end();
+ for(;j != je;++j){
+ PRT_RULE_S_FIRST_SET(fsm->ow_index_file_,*j);
+ };
+ KCHARP w_lr_state_network =
+ "@*2 LR State Network.\\fbreak\n"
+ "\\LRstatenetwork\n";
+ KCHARP w_xref_rule_rank_to_literal =
+ "@.R$_{%i}$ --- %s@>\n";
+ fsm->ow_index_file_ << w_lr_state_network << std::endl;
+ fsm->determine_closure_derived_states();
+
+ std::map <int , std::list<state_element*> >::iterator xi;
+ std::map <int , std::list<state_element*> >::iterator xie;
+
+ xi= fsm->productions_derived_states_list_.begin();
+ xie = fsm->productions_derived_states_list_.end();
+ rule_def* ord(0);
+ rule_def* rd(0);
+
+ for(;xi!=xie;++xi){// walk all the derived productions list
+ std::list<state_element*>& selist = xi->second;
+ std::list<state_element*>::iterator f1st_el = selist.begin();
+ state_element* se = (state_element*)*f1st_el;
+ T_subrule_def* srd = se->subrule_def_;
+ rd = srd->its_rule_def();
+ if(ord != rd){
+ ord = rd;
+ XLATE_SYMBOLS_FOR_cweave(ord->rule_name()->c_str(),xlated_rule);
+ KCHARP w_rule_name =
+ "@*3 %s.\\fbreak";
+ sprintf(fsm->big_buf_
+ ,w_rule_name
+ ,xlated_rule
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+ sprintf(fsm->big_buf_
+ ,w_xref_rule_rank_to_literal
+ ,rd->rule_no()
+ ,xlated_rule
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << std::endl;
+ }
+ KCHARP w_subrule =
+ "\\Subrulestartsymstrindent{%i} ";
+ sprintf(fsm->big_buf_
+ ,w_subrule
+ ,srd->subrule_no_of_rule()
+ );
+ fsm->ow_index_file_ << fsm->big_buf_;
+// print its rhs elements
+ AST* sr_t = srd->subrule_s_tree();
+
+ tok_can_ast_functor sr_elems_walk_functr;
+ ast_prefix_1forest prt_sr_elems_walk(*sr_t
+ ,&sr_elems_walk_functr,&fsm->prt_sr_elems_filter_,ACCEPT_FILTER);
+ tok_can<AST*> prt_sr_elems_can(prt_sr_elems_walk);
+ using namespace NS_prt_sr_elements;
+ Cprt_sr_elements prt_sr_elements_fsm;
+ prt_sr_elements_fsm.ow_index_file_ = &fsm->ow_index_file_;
+ Parser prt_sr_elements(prt_sr_elements_fsm,&prt_sr_elems_can,0);
+ prt_sr_elements.parse();
+
+ list<state_element*>& dlist = xi->second;
+ list<state_element*>::iterator yi = dlist.begin();
+ list<state_element*>::iterator yie = dlist.end();
+ KCHARP w_subrule_derived_states =
+ "\\Subrulederivedstatesindent ";
+ KCHARP w_merged = "{\\Mergedstate{%i}}";
+ std::set<int> chk_merge;
+ chk_merge.clear();
+ for(;yi!=yie;++yi){// derive state list per closured production
+ fsm->ow_index_file_ << w_subrule_derived_states << endl;
+ state_element* se = *yi;
+ state_element* dse = se;
+ for(;dse!=0;dse = dse->next_state_element_){// walk the derived plank
+ fsm->ow_index_file_ << dse->self_state_->state_no_;
+ if(dse->next_state_element_ != 0){
+ std::set<int>::iterator si =
+ chk_merge.find(dse->next_state_element_->self_state_->state_no_);
+ if(si != chk_merge.end()){
+ sprintf(fsm->big_buf_
+ ,w_merged
+ ,dse->goto_state_->state_no_
+ );
+ fsm->ow_index_file_ << fsm->big_buf_ << endl;
+ break;
+ }
+ }
+ chk_merge.insert(dse->self_state_->state_no_);
+ fsm->ow_index_file_ << "\\ \\ " << endl;
+ }
+ }
+ }
+
+ KCHARP w_list_of_reduced_states =
+ "@*2 List of reducing states.\\fbreak\n"
+ "\\Listofreducingstates\n"
+ "\\fbreak\n";
+ fsm->ow_index_file_ << w_list_of_reduced_states << std::endl;
+ fsm->ow_index_file_ << "\\Reducedstatelist" << std::endl;
+ std::vector <state* >::iterator ri = fsm->reducing_states_list_.begin();
+ std::vector <state* >::iterator rie = fsm->reducing_states_list_.end();
+ for(;ri != rie;++ri){
+ state* s = *ri;
+ fsm->ow_index_file_ << '{' << s->state_no_;
+ switch (s->state_type_){
+ case 0:{//shift only
+ break;
+ }
+ case 1:{
+ fsm->ow_index_file_ << "\\Reduceonly";
+ break;
+ }
+ case 2:{
+ fsm->ow_index_file_ << "\\ShiftReduce";
+ break;
+ }
+ case 3:{
+ fsm->ow_index_file_ << "\\MultipleReduces";
+ break;
+ }
+ case 4:{
+ fsm->ow_index_file_ << "\\ShiftandMultipleReduces";
+ break;
+ }
+ }
+ fsm->ow_index_file_ << "\\ \\ }" << std::endl;
+ }
+ fsm->prt_states_follow_set();
+ fsm->prt_common_follow_set_la();
+ fsm->ow_index_file_ << "@** Index." << endl;
+
+fsm->ow_index_file_.close();
+ ***
+ }
+}
+
+Rrules (){
+ -> Rrule
+ -> Rrules Rrule
+}
+
+Rrule (){
+ -> Rrule_def Rsubrules
+}
+
+Rrule_def
+(){
+ -> "rule-def" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ fsm->rules_for_fs_prt_.push_back(fsm->rule_def_);
+ ++fsm->rule_no_;
+ fsm->subrule_no_ = 0;
+ ***
+ }
+}
+
+Rsubrules (){
+ -> Rsubrule
+ -> Rsubrules Rsubrule
+}
+
+Rsubrule (){
+ -> Rsubrule_def Relements
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ fsm->elem_no_ = 0;
+ fsm->subrule_def_ = sf->p1__;
+ ***
+ }
+}
+
+Relements (){
+ -> Relement
+ -> Relements Relement
+}
+
+Relement
+/@
+Use of \invisibleshift to make grammar lr(1).
+@/
+(){
+ -> "refered-T" |.| {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern
+ ,fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ***
+ }
+ -> "refered-rule" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_rule_def()->rule_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ***
+ }
+ -> "eosubrule" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ if(fsm->elem_no_ == 1){// epsilon
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key("\\emptyrule");
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ }
+ ***
+ }
+ -> "refered-T" "refered-T" "called thread eosubrule" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ xref_key += "|||";
+ }else{
+ xref_key += "|t|";
+ }
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ++fsm->elem_no_;
+ string xref_rtned_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_rtned_entry += fsm->big_buf_;
+ string xref_rtned_key(sf->p2__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_rtned_key,xref_rtned_entry);
+ ++fsm->elem_no_;
+ string xref_thd_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_thd_entry += fsm->big_buf_;
+ string xref_thd_key;
+ xref_thd_key += sf->p3__->ns()->identifier()->c_str();
+ xref_thd_key += "::";
+ xref_thd_key += sf->p3__->called_thread_name()->identifier()->c_str();
+ fsm->add_symbol_to_xref_map(xref_thd_key,xref_thd_entry);
+ ***
+ }
+ -> "refered-T" "refered-T" "null call thread eosubrule" {
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key;
+ if(sf->p1__->its_t_def()->enum_id() == T_Enum::T_LR1_parallel_operator_){
+ xref_key += "|||";
+ }else{
+ xref_key += "|t|";
+ }
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+
+ ++fsm->elem_no_;
+ string xref_rtned_key(sf->p2__->its_t_def()->t_name()->c_str());
+ string xref_rtned_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_rtned_entry += fsm->big_buf_;
+ fsm->add_symbol_to_xref_map(xref_rtned_key,xref_rtned_entry);
+
+ ++fsm->elem_no_;
+ string xref_thd_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_thd_entry += fsm->big_buf_;
+ string xref_thd_key("NULL thread");
+ fsm->add_symbol_to_xref_map(xref_thd_key,xref_thd_entry);
+ ***
+ }
+ -> "refered-T" "refered-T" |.|{
+ op
+ Cprt_xrefs_docs* fsm = (Cprt_xrefs_docs*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->elem_no_;
+ string xref_entry;
+ const char* xref_pattern = "%s %i.%i";
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_entry += fsm->big_buf_;
+ string xref_key(sf->p1__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_key,xref_entry);
+ ++fsm->elem_no_;
+ string xref_2_entry;
+ sprintf(fsm->big_buf_,xref_pattern,
+ fsm->rule_def_->rule_name()->c_str(),fsm->subrule_no_,fsm->elem_no_);
+ xref_2_entry += fsm->big_buf_;
+ string xref_2_key(sf->p2__->its_t_def()->t_name()->c_str());
+ fsm->add_symbol_to_xref_map(xref_2_key,xref_2_entry);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docssym.cpp b/web/yacco2/compiler/grammars/prt_xrefs_docssym.cpp
new file mode 100644
index 0000000000..e3c01b9d92
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docssym.cpp
@@ -0,0 +1,274 @@
+/*
+ File: prt_xrefs_docssym.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "prt_xrefs_docs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_xrefs_docs;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cprt_xrefs_docs::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rprt_xrefs_docs_:{
+ Rprt_xrefs_docs* sym;
+ if(re->rule_ == 0){
+ sym = new Rprt_xrefs_docs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rprt_xrefs_docs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relements_:{
+ Relements* sym;
+ if(re->rule_ == 0){
+ sym = new Relements(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relements*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Relement_:{
+ Relement* sym;
+ if(re->rule_ == 0){
+ sym = new Relement(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relement*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr6();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/prt_xrefs_docstbl.cpp b/web/yacco2/compiler/grammars/prt_xrefs_docstbl.cpp
new file mode 100644
index 0000000000..76ba8fa82b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/prt_xrefs_docstbl.cpp
@@ -0,0 +1,452 @@
+/*
+ File: prt_xrefs_docstbl.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "prt_xrefs_docs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_prt_xrefs_docs;// grammar's ns
+// first set terminals
+// T_subrule_def
+yacco2::UCHAR LA1_Cprt_xrefs_docs[] ={
+1
+,42,64
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cprt_xrefs_docs[] ={
+1
+,0,4
+};
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA3_Cprt_xrefs_docs[] ={
+2
+,0,2
+,42,16
+};
+// refered_T
+// refered_rule
+// T_eosubrule
+yacco2::UCHAR LA4_Cprt_xrefs_docs[] ={
+2
+,43,10
+,46,2
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+yacco2::UCHAR LA5_Cprt_xrefs_docs[] ={
+2
+,0,2
+,42,80
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+// refered_T
+// refered_rule
+// T_eosubrule
+yacco2::UCHAR LA6_Cprt_xrefs_docs[] ={
+4
+,0,2
+,42,80
+,43,10
+,46,2
+};
+extern yacco2::State S1_Cprt_xrefs_docs;
+extern yacco2::State S2_Cprt_xrefs_docs;
+extern yacco2::State S3_Cprt_xrefs_docs;
+extern yacco2::State S4_Cprt_xrefs_docs;
+extern yacco2::State S5_Cprt_xrefs_docs;
+extern yacco2::State S6_Cprt_xrefs_docs;
+extern yacco2::State S7_Cprt_xrefs_docs;
+extern yacco2::State S8_Cprt_xrefs_docs;
+extern yacco2::State S9_Cprt_xrefs_docs;
+extern yacco2::State S10_Cprt_xrefs_docs;
+extern yacco2::State S11_Cprt_xrefs_docs;
+extern yacco2::State S12_Cprt_xrefs_docs;
+extern yacco2::State S13_Cprt_xrefs_docs;
+extern yacco2::State S14_Cprt_xrefs_docs;
+extern yacco2::State S15_Cprt_xrefs_docs;
+extern yacco2::State S16_Cprt_xrefs_docs;
+extern yacco2::State S17_Cprt_xrefs_docs;
+extern yacco2::State S18_Cprt_xrefs_docs;
+extern yacco2::State S19_Cprt_xrefs_docs;
+extern yacco2::State S20_Cprt_xrefs_docs;
+extern yacco2::State S21_Cprt_xrefs_docs;
+extern yacco2::State S22_Cprt_xrefs_docs;
+extern yacco2::State S23_Cprt_xrefs_docs;
+struct S1std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cprt_xrefs_docs S1st_Cprt_xrefs_docs = {
+ 5
+ ,
+ {// start of table
+ {340,(State*)&S2_Cprt_xrefs_docs} // shift sym: rule_def
+ ,{569,(State*)&S1_Cprt_xrefs_docs} // accept sym: Rprt_xrefs_docs
+ ,{570,(State*)&S3_Cprt_xrefs_docs} // shift sym: Rrules
+ ,{571,(State*)&S23_Cprt_xrefs_docs} // shift sym: Rrule
+ ,{572,(State*)&S6_Cprt_xrefs_docs} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Cprt_xrefs_docs = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cprt_xrefs_docs,0,0,0,0};
+struct S2rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cprt_xrefs_docs S2rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Cprt_xrefs_docs = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cprt_xrefs_docs,0,0,0};
+struct S3std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Cprt_xrefs_docs S3st_Cprt_xrefs_docs = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S4_Cprt_xrefs_docs} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Cprt_xrefs_docs} // shift sym: rule_def
+ ,{571,(State*)&S5_Cprt_xrefs_docs} // shift sym: Rrule
+ ,{572,(State*)&S6_Cprt_xrefs_docs} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Cprt_xrefs_docs = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cprt_xrefs_docs,0,0,0,0};
+struct S4rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cprt_xrefs_docs S4rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rprt_xrefs_docs_}
+ }// end of reduce table
+};
+yacco2::State S4_Cprt_xrefs_docs = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cprt_xrefs_docs,0,0,0};
+struct S5rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cprt_xrefs_docs S5rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Cprt_xrefs_docs = //State's vectored into symbol: "Rrule"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cprt_xrefs_docs,0,0,0};
+struct S6std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S6std_Cprt_xrefs_docs S6st_Cprt_xrefs_docs = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S7_Cprt_xrefs_docs} // shift sym: T_subrule_def
+ ,{573,(State*)&S8_Cprt_xrefs_docs} // shift sym: Rsubrules
+ ,{574,(State*)&S22_Cprt_xrefs_docs} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cprt_xrefs_docs} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S6_Cprt_xrefs_docs = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cprt_xrefs_docs,0,0,0,0};
+struct S7rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cprt_xrefs_docs S7rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S7_Cprt_xrefs_docs = //State's vectored into symbol: "subrule-def"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cprt_xrefs_docs,0,0,0};
+struct S8std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Cprt_xrefs_docs S8st_Cprt_xrefs_docs = {
+ 3
+ ,
+ {// start of table
+ {342,(State*)&S7_Cprt_xrefs_docs} // shift sym: T_subrule_def
+ ,{574,(State*)&S9_Cprt_xrefs_docs} // shift sym: Rsubrule
+ ,{575,(State*)&S10_Cprt_xrefs_docs} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+struct S8rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cprt_xrefs_docs S8rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S8_Cprt_xrefs_docs = //State's vectored into symbol: "Rsubrules"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cprt_xrefs_docs,(Reduce_tbl*)&S8rt_Cprt_xrefs_docs,0,0,0};
+struct S9rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cprt_xrefs_docs S9rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S9_Cprt_xrefs_docs = //State's vectored into symbol: "Rsubrule"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cprt_xrefs_docs,0,0,0};
+struct S10std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S10std_Cprt_xrefs_docs S10st_Cprt_xrefs_docs = {
+ 5
+ ,
+ {// start of table
+ {345,(State*)&S11_Cprt_xrefs_docs} // shift sym: refered_T
+ ,{347,(State*)&S17_Cprt_xrefs_docs} // shift sym: refered_rule
+ ,{369,(State*)&S18_Cprt_xrefs_docs} // shift sym: T_eosubrule
+ ,{576,(State*)&S19_Cprt_xrefs_docs} // shift sym: Relements
+ ,{577,(State*)&S21_Cprt_xrefs_docs} // shift sym: Relement
+ }// end of shift table
+};
+yacco2::State S10_Cprt_xrefs_docs = //State's vectored into symbol: "Rsubrule_def"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cprt_xrefs_docs,0,0,0,0};
+struct S11std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Cprt_xrefs_docs S11st_Cprt_xrefs_docs = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S12_Cprt_xrefs_docs} // shift sym: LR1_invisible_shift_operator
+ ,{345,(State*)&S13_Cprt_xrefs_docs} // shift sym: refered_T
+ }// end of shift table
+};
+yacco2::Shift_entry S11ise_Cprt_xrefs_docs = {5,(State*)&S12_Cprt_xrefs_docs};
+yacco2::State S11_Cprt_xrefs_docs = //State's vectored into symbol: "refered-T"
+{11
+,0,0,(Shift_entry*)&S11ise_Cprt_xrefs_docs
+,0,(Shift_tbl*)&S11st_Cprt_xrefs_docs,0,0,0,0};
+struct S12rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cprt_xrefs_docs S12rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Relement_}
+ }// end of reduce table
+};
+yacco2::State S12_Cprt_xrefs_docs = //State's vectored into symbol: "|.|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cprt_xrefs_docs,0,0,0};
+struct S13std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Cprt_xrefs_docs S13st_Cprt_xrefs_docs = {
+ 3
+ ,
+ {// start of table
+ {5,(State*)&S14_Cprt_xrefs_docs} // shift sym: LR1_invisible_shift_operator
+ ,{370,(State*)&S15_Cprt_xrefs_docs} // shift sym: T_called_thread_eosubrule
+ ,{371,(State*)&S16_Cprt_xrefs_docs} // shift sym: T_null_call_thread_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S13ise_Cprt_xrefs_docs = {5,(State*)&S14_Cprt_xrefs_docs};
+yacco2::State S13_Cprt_xrefs_docs = //State's vectored into symbol: "refered-T"
+{13
+,0,0,(Shift_entry*)&S13ise_Cprt_xrefs_docs
+,0,(Shift_tbl*)&S13st_Cprt_xrefs_docs,0,0,0,0};
+struct S14rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cprt_xrefs_docs S14rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs6_Relement_}
+ }// end of reduce table
+};
+yacco2::State S14_Cprt_xrefs_docs = //State's vectored into symbol: "|.|"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cprt_xrefs_docs,0,0,0};
+struct S15rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cprt_xrefs_docs S15rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs4_Relement_}
+ }// end of reduce table
+};
+yacco2::State S15_Cprt_xrefs_docs = //State's vectored into symbol: "called thread eosubrule"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cprt_xrefs_docs,0,0,0};
+struct S16rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cprt_xrefs_docs S16rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs5_Relement_}
+ }// end of reduce table
+};
+yacco2::State S16_Cprt_xrefs_docs = //State's vectored into symbol: "null call thread eosubrule"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cprt_xrefs_docs,0,0,0};
+struct S17rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cprt_xrefs_docs S17rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs2_Relement_}
+ }// end of reduce table
+};
+yacco2::State S17_Cprt_xrefs_docs = //State's vectored into symbol: "refered-rule"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cprt_xrefs_docs,0,0,0};
+struct S18rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cprt_xrefs_docs S18rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs3_Relement_}
+ }// end of reduce table
+};
+yacco2::State S18_Cprt_xrefs_docs = //State's vectored into symbol: "eosubrule"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cprt_xrefs_docs,0,0,0};
+struct S19std_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S19std_Cprt_xrefs_docs S19st_Cprt_xrefs_docs = {
+ 4
+ ,
+ {// start of table
+ {345,(State*)&S11_Cprt_xrefs_docs} // shift sym: refered_T
+ ,{347,(State*)&S17_Cprt_xrefs_docs} // shift sym: refered_rule
+ ,{369,(State*)&S18_Cprt_xrefs_docs} // shift sym: T_eosubrule
+ ,{577,(State*)&S20_Cprt_xrefs_docs} // shift sym: Relement
+ }// end of shift table
+};
+struct S19rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cprt_xrefs_docs S19rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S19_Cprt_xrefs_docs = //State's vectored into symbol: "Relements"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cprt_xrefs_docs,(Reduce_tbl*)&S19rt_Cprt_xrefs_docs,0,0,0};
+struct S20rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cprt_xrefs_docs S20rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs2_Relements_}
+ }// end of reduce table
+};
+yacco2::State S20_Cprt_xrefs_docs = //State's vectored into symbol: "Relement"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cprt_xrefs_docs,0,0,0};
+struct S21rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Cprt_xrefs_docs S21rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Relements_}
+ }// end of reduce table
+};
+yacco2::State S21_Cprt_xrefs_docs = //State's vectored into symbol: "Relement"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Cprt_xrefs_docs,0,0,0};
+struct S22rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cprt_xrefs_docs S22rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S22_Cprt_xrefs_docs = //State's vectored into symbol: "Rsubrule"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cprt_xrefs_docs,0,0,0};
+struct S23rtd_Cprt_xrefs_docs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cprt_xrefs_docs S23rt_Cprt_xrefs_docs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cprt_xrefs_docs,Cprt_xrefs_docs::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S23_Cprt_xrefs_docs = //State's vectored into symbol: "Rrule"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cprt_xrefs_docs,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rc_phrase.cpp b/web/yacco2/compiler/grammars/rc_phrase.cpp
new file mode 100644
index 0000000000..c880102c9c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: rc_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Crc_phrase::
+ Crc_phrase()
+ :yacco2::CAbs_fsm
+ ("rc_phrase.lex"
+ ,"1.0"
+ ,"24 May 2004"
+ ,false
+ ,"Dispatcher to parse raw character vocabulary."
+ ,"Fri Jan 30 18:55:21 2015 "
+ ,S1_Crc_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+Crc_phrase::~Crc_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crc_phrase::failed(){
+ return false;
+ }
+ void Crc_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Crc_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rrc_phrase::Rrc_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrc_phrase",0,Crc_phrase::R_Rrc_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Crc_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_rc_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rc_phrase.fsc b/web/yacco2/compiler/grammars/rc_phrase.fsc
new file mode 100644
index 0000000000..df168223f1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: rc_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+transitive y
+grammar-name "rc_phrase"
+name-space "NS_rc_phrase"
+thread-name "Crc_phrase"
+monolithic y
+file-name "rc_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_rc_phrase_th::TH_rc_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_rc_phrase_th::TH_rc_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse raw character vocabulary."
diff --git a/web/yacco2/compiler/grammars/rc_phrase.h b/web/yacco2/compiler/grammars/rc_phrase.h
new file mode 100644
index 0000000000..5feb0552c5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase.h
@@ -0,0 +1,70 @@
+/*
+ File: rc_phrase.h
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#ifndef __rc_phrase_h__
+#define __rc_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+ using namespace NS_yacco2_terminals;
+ #include "rc_phrase_th.h"
+ #include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Crc_phrase;
+namespace NS_rc_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Crc_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrc_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrc_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Crc_phrase();
+ ~Crc_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rrc_phrase;
+struct Rphrase;
+struct Rrc_phrase:public yacco2::CAbs_lr1_sym {
+ Rrc_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rc_phrase.lex b/web/yacco2/compiler/grammars/rc_phrase.lex
new file mode 100644
index 0000000000..b5816aec4a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase.lex
@@ -0,0 +1,77 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rc_phrase.lex
+Dates: 24 May 2004
+Purpose: raw characters alphabet
+Grammar being parsed:
+ raw-characters
+ (file-name yacco2_rc
+ ,name-space NS_yacco2_rc)
+ {
+ 1+ terminal definitions where def is
+ terminal-key [AD AB attributes](sym-class C++ name)
+ or
+ terminal-key [AD AB attributes]
+ (sym-class C++ name {C++ directives block} )
+ }
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rc_phrase| grammar.\fbreak
+Dispatcher to parse the raw character terminal symbols.
+@/
+fsm
+(fsm-id "rc_phrase.lex"
+,fsm-filename rc_phrase
+,fsm-namespace NS_rc_phrase
+,fsm-class Crc_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+ #include "rc_phrase_th.h"
+ #include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 May 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse raw character vocabulary.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rrc_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "rc-phrase"
+ NS_rc_phrase_th::TH_rc_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL { // thread has stop parsing with RSVP error
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rc_phrase_th.cpp b/web/yacco2/compiler/grammars/rc_phrase_th.cpp
new file mode 100644
index 0000000000..607f98a097
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_th.cpp
@@ -0,0 +1,580 @@
+/*
+ File: rc_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 17;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+}
+ Crc_phrase_th::
+ Crc_phrase_th()
+ :yacco2::CAbs_fsm
+ ("rc_phrase_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Raw character vocabulary parser."
+ ,"Fri Jan 30 18:55:21 2015 "
+ ,S1_Crc_phrase_th){
+
+ rc_phrase_ = 0;
+
+ }
+
+Crc_phrase_th::~Crc_phrase_th(){
+
+ for(int x = 0;x < 17;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crc_phrase_th::failed(){
+ return false;
+ }
+ void Crc_phrase_th::op(){
+ if(rc_phrase_ != 0){
+ delete rc_phrase_;
+ rc_phrase_ = 0;
+ }
+ rc_phrase_ = new T_rc_phrase;
+ rc_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rc_phrase_);
+ rc_phrase_->phrase_tree(t);
+
+}
+int Crc_phrase_th::rhs_to_rules_mapping_[40] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,7 // subrule 13 for rule 8
+ ,7 // subrule 14 for rule 8
+ ,8 // subrule 15 for rule 9
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,9 // subrule 18 for rule 10
+ ,9 // subrule 19 for rule 10
+ ,10 // subrule 20 for rule 11
+ ,11 // subrule 21 for rule 12
+ ,11 // subrule 22 for rule 12
+ ,12 // subrule 23 for rule 13
+ ,12 // subrule 24 for rule 13
+ ,12 // subrule 25 for rule 13
+ ,12 // subrule 26 for rule 13
+ ,12 // subrule 27 for rule 13
+ ,12 // subrule 28 for rule 13
+ ,13 // subrule 29 for rule 14
+ ,13 // subrule 30 for rule 14
+ ,13 // subrule 31 for rule 14
+ ,13 // subrule 32 for rule 14
+ ,13 // subrule 33 for rule 14
+ ,14 // subrule 34 for rule 15
+ ,14 // subrule 35 for rule 15
+ ,15 // subrule 36 for rule 16
+ ,15 // subrule 37 for rule 16
+ ,16 // subrule 38 for rule 17
+ ,16 // subrule 39 for rule 17
+};
+Rrc_phrase::Rrc_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrc_phrase",0,Crc_phrase_th::R_Rrc_phrase_,P,false,false){
+}
+
+void Rrc_phrase::sr1(){
+
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rc_phrase_);
+ fsm->rc_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Crc_phrase_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Crc_phrase_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Crc_phrase_th::R_Rparameters_,P,false,false){
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,Crc_phrase_th::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,Crc_phrase_th::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_id::Rfilename_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_id",0,Crc_phrase_th::R_Rfilename_id_,P,false,false){
+}
+
+void Rfilename_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->rc_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfilename_id::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,Crc_phrase_th::R_Rnamespace_phrase_,P,false,false){
+}
+
+void Rnamespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,Crc_phrase_th::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_id::Rnamespace_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_id",0,Crc_phrase_th::R_Rnamespace_id_,P,false,false){
+}
+
+void Rnamespace_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->rc_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rnamespace_id::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_defs_phrase::Rsym_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs_phrase",0,Crc_phrase_th::R_Rsym_defs_phrase_,P,false,false){
+}
+
+Rsym_defs::Rsym_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs",0,Crc_phrase_th::R_Rsym_defs_,P,false,false){
+}
+
+Rsym_def::Rsym_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def",0,Crc_phrase_th::R_Rsym_def_,P,false,false){
+}
+
+void Rsym_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::rc);
+ CAbs_lr1_sym* r =
+ fsm->rc_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr6(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_def1::Rsym_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1",0,Crc_phrase_th::R_Rsym_def1_,P,false,false){
+}
+
+void Rsym_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::rc);
+ CAbs_lr1_sym* r =
+ fsm->rc_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Crc_phrase_th::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Crc_phrase_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Crc_phrase_th::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/rc_phrase_th.fsc b/web/yacco2/compiler/grammars/rc_phrase_th.fsc
new file mode 100644
index 0000000000..0d0e92cc1e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_th.fsc
@@ -0,0 +1,25 @@
+/*
+ File: rc_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+transitive y
+grammar-name "rc_phrase_th"
+name-space "NS_rc_phrase_th"
+thread-name "TH_rc_phrase_th"
+monolithic n
+file-name "rc_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_term_def_ph::TH_term_def_ph
+end-list-of-used-threads
+fsm-comments
+"Raw character vocabulary parser."
diff --git a/web/yacco2/compiler/grammars/rc_phrase_th.h b/web/yacco2/compiler/grammars/rc_phrase_th.h
new file mode 100644
index 0000000000..79cd0f6215
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_th.h
@@ -0,0 +1,239 @@
+/*
+ File: rc_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#ifndef __rc_phrase_th_h__
+#define __rc_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+
+extern yacco2::Thread_entry ITH_rc_phrase_th;
+
+extern yacco2::State S1_Crc_phrase_th;
+namespace NS_rc_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rc_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rc_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[17];
+};
+class Crc_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrc_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrc_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfilename_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfilename_phrase_ = 7
+ ,R_Rfilename_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfilename_ = 8
+ ,rhs2_Rfilename_ = 9
+ ,rhs3_Rfilename_ = 10
+ ,R_Rfilename_id_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfilename_id_ = 11
+ ,rhs2_Rfilename_id_ = 12
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 13
+ ,rhs2_Rnamespace_phrase_ = 14
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 15
+ ,rhs2_Rnamespace_ = 16
+ ,rhs3_Rnamespace_ = 17
+ ,R_Rnamespace_id_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_id_ = 18
+ ,rhs2_Rnamespace_id_ = 19
+ ,R_Rsym_defs_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rsym_defs_phrase_ = 20
+ ,R_Rsym_defs_ = 580//start_of_rule_list + 22
+ ,rhs1_Rsym_defs_ = 21
+ ,rhs2_Rsym_defs_ = 22
+ ,R_Rsym_def_ = 581//start_of_rule_list + 24
+ ,rhs1_Rsym_def_ = 23
+ ,rhs2_Rsym_def_ = 24
+ ,rhs3_Rsym_def_ = 25
+ ,rhs4_Rsym_def_ = 26
+ ,rhs5_Rsym_def_ = 27
+ ,rhs6_Rsym_def_ = 28
+ ,R_Rsym_def1_ = 582//start_of_rule_list + 26
+ ,rhs1_Rsym_def1_ = 29
+ ,rhs2_Rsym_def1_ = 30
+ ,rhs3_Rsym_def1_ = 31
+ ,rhs4_Rsym_def1_ = 32
+ ,rhs5_Rsym_def1_ = 33
+ ,R_Ropen_brace_ = 583//start_of_rule_list + 28
+ ,rhs1_Ropen_brace_ = 34
+ ,rhs2_Ropen_brace_ = 35
+ ,R_Rclose_brace_ = 584//start_of_rule_list + 30
+ ,rhs1_Rclose_brace_ = 36
+ ,rhs2_Rclose_brace_ = 37
+ ,R_Rlint_ = 585//start_of_rule_list + 32
+ ,rhs1_Rlint_ = 38
+ ,rhs2_Rlint_ = 39
+ };
+ //no of la sets = 9
+ //no of states = 67
+ Crc_phrase_th();
+ ~Crc_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[40];
+
+ public:
+ T_rc_phrase* rc_phrase_;
+
+ };
+struct Rrc_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_id;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_id;
+struct Rsym_defs_phrase;
+struct Rsym_defs;
+struct Rsym_def;
+struct Rsym_def1;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint;
+struct Rrc_phrase:public yacco2::CAbs_lr1_sym {
+ Rrc_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfilename_id:public yacco2::CAbs_lr1_sym {
+ Rfilename_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_id:public yacco2::CAbs_lr1_sym {
+ Rnamespace_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rsym_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rsym_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_defs:public yacco2::CAbs_lr1_sym {
+ Rsym_defs(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_def:public yacco2::CAbs_lr1_sym {
+ Rsym_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rsym_def1:public yacco2::CAbs_lr1_sym {
+ Rsym_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rc_phrase_th.lex b/web/yacco2/compiler/grammars/rc_phrase_th.lex
new file mode 100644
index 0000000000..6a9e0ab03d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_th.lex
@@ -0,0 +1,349 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rc_phrase_th.lex
+Dates: 23 Mar 2004
+Purpose: parse raw-char-symbols phrase
+ Rc_phrase keeps its own local symbol table: map and list.
+ The term_def_ph adds symbol to Yacco2's
+ global symbol table.
+Output: rc_phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rc_phrase_th| Thread.\fbreak
+Parse raw-char-symbols phrase.
+The |Rc_phrase| terminal keeps its own local symbol table:
+map and list.
+It calls the common backend |term_def_ph| thread
+extractor of symbol definition.
+ \fbreak
+Example of a raw chaacter vocabulary to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/rcsym.txt"}
+
+@/
+fsm
+(fsm-id "rc_phrase_th.lex"
+,fsm-filename rc_phrase_th
+,fsm-namespace NS_rc_phrase_th
+,fsm-class Crc_phrase_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+ ***
+ user-declaration
+ public:
+ T_rc_phrase* rc_phrase_;
+ ***
+ constructor
+ rc_phrase_ = 0;
+ ***
+ op
+ if(rc_phrase_ != 0){
+ delete rc_phrase_;
+ rc_phrase_ = 0;
+ }
+ rc_phrase_ = new T_rc_phrase;
+ rc_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rc_phrase_);
+ rc_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Raw character vocabulary parser.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rc_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrc_phrase (){
+ -> Rlint
+ Ropen_par Rlint
+ Rparameters Rlint
+ Rclose_par
+ Rlint
+ Rsym_defs_phrase
+ Rlint {
+ op
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rc_phrase_);
+ fsm->rc_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+//
+Rparameters (){
+ -> Rfilename_phrase Rlint
+ Rnamespace_phrase
+}
+
+Rfilename_phrase (){
+ -> Rfilename Rlint Rfilename_id
+}
+
+Rfilename (){
+ -> ||| "#file-name" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->rc_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (){
+ -> "," Rlint Rnamespace Rlint Rnamespace_id
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace (){
+ -> ||| "#name-space" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->rc_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_defs_phrase (){
+ -> Ropen_brace Rlint
+ Rsym_defs
+ Rclose_brace
+}
+
+Rsym_defs (){
+ -> Rsym_def Rlint
+ -> Rsym_defs Rsym_def1 Rlint
+}
+
+Rsym_def (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::rc);
+ CAbs_lr1_sym* r =
+ fsm->rc_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_def1 (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Crc_phrase_th* fsm = (Crc_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::rc);
+ CAbs_lr1_sym* r =
+ fsm->rc_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rc_phrase_thsym.cpp b/web/yacco2/compiler/grammars/rc_phrase_thsym.cpp
new file mode 100644
index 0000000000..9499b6185b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_thsym.cpp
@@ -0,0 +1,619 @@
+/*
+ File: rc_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rc_phrase_th::TH_rc_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rc_phrase_th;
+ NS_rc_phrase_th::Crc_phrase_th Crc_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crc_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rc_phrase_th::PROC_TH_rc_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rc_phrase_th";
+ static bool one_time(false);
+ static NS_rc_phrase_th::Crc_phrase_th* NS_rc_phrase_th_Crc_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_rc_phrase_th_Crc_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rc_phrase_th_Crc_phrase_th_ = new NS_rc_phrase_th::Crc_phrase_th();// parallel-parser's fsm table
+ NS_rc_phrase_th_Crc_phrase_th_parser = new Parser(*NS_rc_phrase_th_Crc_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_rc_phrase_th_Crc_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crc_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrc_phrase_:{
+ Rrc_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrc_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrc_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 9;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rsym_defs_phrase_:{
+ Rsym_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rsym_defs_:{
+ Rsym_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsym_defs_:{
+ Rsym_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rc_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/rc_phrase_thtbl.cpp
new file mode 100644
index 0000000000..14603ab12e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrase_thtbl.cpp
@@ -0,0 +1,1393 @@
+/*
+ File: rc_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase_th;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crc_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Crc_phrase_th[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA3_Crc_phrase_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA4_Crc_phrase_th[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Crc_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_comma
+yacco2::UCHAR LA6_Crc_phrase_th[] ={
+2
+,0,1
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA7_Crc_phrase_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_comma
+yacco2::UCHAR LA8_Crc_phrase_th[] ={
+2
+,0,17
+,6,16
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA9_Crc_phrase_th[] ={
+2
+,0,17
+,16,8
+};
+extern yacco2::State S1_Crc_phrase_th;
+extern yacco2::State S2_Crc_phrase_th;
+struct S2ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Crc_phrase_th S2tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Crc_phrase_th;
+extern yacco2::State S4_Crc_phrase_th;
+extern yacco2::State S5_Crc_phrase_th;
+extern yacco2::State S6_Crc_phrase_th;
+extern yacco2::State S7_Crc_phrase_th;
+extern yacco2::State S8_Crc_phrase_th;
+extern yacco2::State S9_Crc_phrase_th;
+extern yacco2::State S10_Crc_phrase_th;
+extern yacco2::State S11_Crc_phrase_th;
+extern yacco2::State S12_Crc_phrase_th;
+extern yacco2::State S13_Crc_phrase_th;
+extern yacco2::State S14_Crc_phrase_th;
+extern yacco2::State S15_Crc_phrase_th;
+extern yacco2::State S16_Crc_phrase_th;
+extern yacco2::State S17_Crc_phrase_th;
+extern yacco2::State S18_Crc_phrase_th;
+extern yacco2::State S19_Crc_phrase_th;
+struct S19ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S19ttd_Crc_phrase_th S19tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S20_Crc_phrase_th;
+extern yacco2::State S21_Crc_phrase_th;
+extern yacco2::State S22_Crc_phrase_th;
+extern yacco2::State S23_Crc_phrase_th;
+extern yacco2::State S24_Crc_phrase_th;
+extern yacco2::State S25_Crc_phrase_th;
+extern yacco2::State S26_Crc_phrase_th;
+extern yacco2::State S27_Crc_phrase_th;
+extern yacco2::State S28_Crc_phrase_th;
+extern yacco2::State S29_Crc_phrase_th;
+extern yacco2::State S30_Crc_phrase_th;
+struct S30ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S30ttd_Crc_phrase_th S30tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S31_Crc_phrase_th;
+extern yacco2::State S32_Crc_phrase_th;
+extern yacco2::State S33_Crc_phrase_th;
+extern yacco2::State S34_Crc_phrase_th;
+extern yacco2::State S35_Crc_phrase_th;
+extern yacco2::State S36_Crc_phrase_th;
+extern yacco2::State S37_Crc_phrase_th;
+extern yacco2::State S38_Crc_phrase_th;
+extern yacco2::State S39_Crc_phrase_th;
+extern yacco2::State S40_Crc_phrase_th;
+extern yacco2::State S41_Crc_phrase_th;
+struct S41ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S41ttd_Crc_phrase_th S41tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S42_Crc_phrase_th;
+extern yacco2::State S43_Crc_phrase_th;
+extern yacco2::State S44_Crc_phrase_th;
+extern yacco2::State S45_Crc_phrase_th;
+extern yacco2::State S46_Crc_phrase_th;
+extern yacco2::State S47_Crc_phrase_th;
+extern yacco2::State S48_Crc_phrase_th;
+struct S48ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S48ttd_Crc_phrase_th S48tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S49_Crc_phrase_th;
+extern yacco2::State S50_Crc_phrase_th;
+extern yacco2::State S51_Crc_phrase_th;
+extern yacco2::State S52_Crc_phrase_th;
+extern yacco2::State S53_Crc_phrase_th;
+extern yacco2::State S54_Crc_phrase_th;
+struct S54ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S54ttd_Crc_phrase_th S54tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S55_Crc_phrase_th;
+extern yacco2::State S56_Crc_phrase_th;
+extern yacco2::State S57_Crc_phrase_th;
+extern yacco2::State S58_Crc_phrase_th;
+extern yacco2::State S59_Crc_phrase_th;
+extern yacco2::State S60_Crc_phrase_th;
+extern yacco2::State S61_Crc_phrase_th;
+extern yacco2::State S62_Crc_phrase_th;
+extern yacco2::State S63_Crc_phrase_th;
+extern yacco2::State S64_Crc_phrase_th;
+extern yacco2::State S65_Crc_phrase_th;
+struct S65ttd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S65ttd_Crc_phrase_th S65tt_Crc_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S66_Crc_phrase_th;
+extern yacco2::State S67_Crc_phrase_th;
+struct S1std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Crc_phrase_th S1st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crc_phrase_th} // accept sym: Rrc_phrase
+ ,{585,(State*)&S4_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S1rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Crc_phrase_th S1rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Crc_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S1st_Crc_phrase_th,(Reduce_tbl*)&S1rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S2std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Crc_phrase_th S2st_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Crc_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Crc_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Crc_phrase_th,0,0,0,0};
+struct S3rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Crc_phrase_th S3rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Crc_phrase_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Crc_phrase_th,0,0,0};
+struct S4std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Crc_phrase_th S4st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S27_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S28_Crc_phrase_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_Crc_phrase_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Crc_phrase_th = {0,(State*)&S27_Crc_phrase_th};
+yacco2::State S4_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Crc_phrase_th,0,0,0,(Shift_entry*)&S4qse_Crc_phrase_th
+};
+struct S5std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Crc_phrase_th S5st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S6_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S5rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crc_phrase_th S5rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Crc_phrase_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S5st_Crc_phrase_th,(Reduce_tbl*)&S5rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S6std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S6std_Crc_phrase_th S6st_Crc_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S29_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S30_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S7_Crc_phrase_th} // shift sym: Rparameters
+ ,{573,(State*)&S33_Crc_phrase_th} // shift sym: Rfilename_phrase
+ ,{574,(State*)&S45_Crc_phrase_th} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Crc_phrase_th = {3,(State*)&S30_Crc_phrase_th};
+yacco2::Shift_entry S6qse_Crc_phrase_th = {0,(State*)&S29_Crc_phrase_th};
+yacco2::State S6_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{6
+,(Shift_entry*)&S6pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S6st_Crc_phrase_th,0,(State_s_thread_tbl*)&S30tt_Crc_phrase_th,0,(Shift_entry*)&S6qse_Crc_phrase_th
+};
+struct S7std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Crc_phrase_th S7st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S8_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S7rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crc_phrase_th S7rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Crc_phrase_th = //State's vectored into symbol: "Rparameters"
+{7
+,(Shift_entry*)&S7pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S7st_Crc_phrase_th,(Reduce_tbl*)&S7rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S8std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Crc_phrase_th S8st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S51_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S52_Crc_phrase_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S9_Crc_phrase_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Crc_phrase_th = {0,(State*)&S51_Crc_phrase_th};
+yacco2::State S8_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Crc_phrase_th,0,0,0,(Shift_entry*)&S8qse_Crc_phrase_th
+};
+struct S9std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Crc_phrase_th S9st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S10_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S9rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crc_phrase_th S9rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Crc_phrase_th = //State's vectored into symbol: "Rclose_par"
+{9
+,(Shift_entry*)&S9pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S9st_Crc_phrase_th,(Reduce_tbl*)&S9rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S10std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S10std_Crc_phrase_th S10st_Crc_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S11_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S12_Crc_phrase_th} // shift sym: raw_open_brace
+ ,{579,(State*)&S13_Crc_phrase_th} // shift sym: Rsym_defs_phrase
+ ,{583,(State*)&S15_Crc_phrase_th} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S10qse_Crc_phrase_th = {0,(State*)&S11_Crc_phrase_th};
+yacco2::State S10_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Crc_phrase_th,0,0,0,(Shift_entry*)&S10qse_Crc_phrase_th
+};
+struct S11rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Crc_phrase_th S11rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S11_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Crc_phrase_th,0,0,0};
+struct S12rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Crc_phrase_th S12rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S12_Crc_phrase_th = //State's vectored into symbol: "{"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Crc_phrase_th,0,0,0};
+struct S13std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S13std_Crc_phrase_th S13st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S14_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S13pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S13rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Crc_phrase_th S13rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S13_Crc_phrase_th = //State's vectored into symbol: "Rsym_defs_phrase"
+{13
+,(Shift_entry*)&S13pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S13st_Crc_phrase_th,(Reduce_tbl*)&S13rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S14rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Crc_phrase_th S14rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs1_Rrc_phrase_}
+ }// end of reduce table
+};
+yacco2::State S14_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Crc_phrase_th,0,0,0};
+struct S15std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Crc_phrase_th S15st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S16_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S15rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Crc_phrase_th S15rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S15_Crc_phrase_th = //State's vectored into symbol: "Ropen_brace"
+{15
+,(Shift_entry*)&S15pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S15st_Crc_phrase_th,(Reduce_tbl*)&S15rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S16std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S16std_Crc_phrase_th S16st_Crc_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S53_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S54_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S17_Crc_phrase_th} // shift sym: Rsym_defs
+ ,{581,(State*)&S62_Crc_phrase_th} // shift sym: Rsym_def
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Crc_phrase_th = {3,(State*)&S54_Crc_phrase_th};
+yacco2::Shift_entry S16qse_Crc_phrase_th = {0,(State*)&S53_Crc_phrase_th};
+yacco2::State S16_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{16
+,(Shift_entry*)&S16pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S16st_Crc_phrase_th,0,(State_s_thread_tbl*)&S54tt_Crc_phrase_th,0,(Shift_entry*)&S16qse_Crc_phrase_th
+};
+struct S17std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S17std_Crc_phrase_th S17st_Crc_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S18_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S19_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{133,(State*)&S25_Crc_phrase_th} // shift sym: raw_close_brace
+ ,{582,(State*)&S60_Crc_phrase_th} // shift sym: Rsym_def1
+ ,{584,(State*)&S26_Crc_phrase_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S17pse_Crc_phrase_th = {3,(State*)&S19_Crc_phrase_th};
+yacco2::Shift_entry S17qse_Crc_phrase_th = {0,(State*)&S18_Crc_phrase_th};
+yacco2::State S17_Crc_phrase_th = //State's vectored into symbol: "Rsym_defs"
+{17
+,(Shift_entry*)&S17pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S17st_Crc_phrase_th,0,(State_s_thread_tbl*)&S19tt_Crc_phrase_th,0,(Shift_entry*)&S17qse_Crc_phrase_th
+};
+struct S18rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Crc_phrase_th S18rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S18_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Crc_phrase_th,0,0,0};
+struct S19std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S19std_Crc_phrase_th S19st_Crc_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {6,(State*)&S20_Crc_phrase_th} // shift sym: LR1_all_shift_operator
+ ,{319,(State*)&S21_Crc_phrase_th} // shift sym: T_terminals_refs
+ ,{320,(State*)&S22_Crc_phrase_th} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S23_Crc_phrase_th} // shift sym: T_lrk_sufx
+ ,{331,(State*)&S24_Crc_phrase_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S19ase_Crc_phrase_th = {6,(State*)&S20_Crc_phrase_th};
+yacco2::State S19_Crc_phrase_th = //State's vectored into symbol: "|||"
+{19
+,0,(Shift_entry*)&S19ase_Crc_phrase_th
+,0,0,(Shift_tbl*)&S19st_Crc_phrase_th,0,0,0,0};
+struct S20rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Crc_phrase_th S20rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs2_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S20_Crc_phrase_th = //State's vectored into symbol: "|+|"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Crc_phrase_th,0,0,0};
+struct S21rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Crc_phrase_th S21rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs4_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S21_Crc_phrase_th = //State's vectored into symbol: "#terminals-refs"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Crc_phrase_th,0,0,0};
+struct S22rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Crc_phrase_th S22rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs5_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S22_Crc_phrase_th = //State's vectored into symbol: "#terminals-sufx"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Crc_phrase_th,0,0,0};
+struct S23rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Crc_phrase_th S23rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs3_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S23_Crc_phrase_th = //State's vectored into symbol: "#lrk-sufx"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Crc_phrase_th,0,0,0};
+struct S24rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Crc_phrase_th S24rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs1_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S24_Crc_phrase_th = //State's vectored into symbol: "terminal-def"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Crc_phrase_th,0,0,0};
+struct S25rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Crc_phrase_th S25rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S25_Crc_phrase_th = //State's vectored into symbol: "}"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Crc_phrase_th,0,0,0};
+struct S26rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Crc_phrase_th S26rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase_th,Crc_phrase_th::rhs1_Rsym_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S26_Crc_phrase_th = //State's vectored into symbol: "Rclose_brace"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Crc_phrase_th,0,0,0};
+struct S27rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Crc_phrase_th S27rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S27_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Crc_phrase_th,0,0,0};
+struct S28rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Crc_phrase_th S28rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S28_Crc_phrase_th = //State's vectored into symbol: "("
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Crc_phrase_th,0,0,0};
+struct S29rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Crc_phrase_th S29rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs3_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S29_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Crc_phrase_th,0,0,0};
+struct S30std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S30std_Crc_phrase_th S30st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S31_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{303,(State*)&S32_Crc_phrase_th} // shift sym: T_file_name
+ }// end of shift table
+};
+yacco2::Shift_entry S30qse_Crc_phrase_th = {0,(State*)&S31_Crc_phrase_th};
+yacco2::State S30_Crc_phrase_th = //State's vectored into symbol: "|||"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Crc_phrase_th,0,0,0,(Shift_entry*)&S30qse_Crc_phrase_th
+};
+struct S31rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Crc_phrase_th S31rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S31_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Crc_phrase_th,0,0,0};
+struct S32rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Crc_phrase_th S32rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S32_Crc_phrase_th = //State's vectored into symbol: "#file-name"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Crc_phrase_th,0,0,0};
+struct S33std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S33std_Crc_phrase_th S33st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S34_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S33rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Crc_phrase_th S33rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S33_Crc_phrase_th = //State's vectored into symbol: "Rfilename_phrase"
+{33
+,(Shift_entry*)&S33pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S33st_Crc_phrase_th,(Reduce_tbl*)&S33rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S34std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Crc_phrase_th S34st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S35_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{52,(State*)&S36_Crc_phrase_th} // shift sym: raw_comma
+ ,{576,(State*)&S44_Crc_phrase_th} // shift sym: Rnamespace_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S34qse_Crc_phrase_th = {0,(State*)&S35_Crc_phrase_th};
+yacco2::State S34_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Crc_phrase_th,0,0,0,(Shift_entry*)&S34qse_Crc_phrase_th
+};
+struct S35rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Crc_phrase_th S35rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crc_phrase_th,Crc_phrase_th::rhs2_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S35_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Crc_phrase_th,0,0,0};
+struct S36std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S36std_Crc_phrase_th S36st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S37_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S36pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S36rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Crc_phrase_th S36rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S36_Crc_phrase_th = //State's vectored into symbol: ","
+{36
+,(Shift_entry*)&S36pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S36st_Crc_phrase_th,(Reduce_tbl*)&S36rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S37std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S37std_Crc_phrase_th S37st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S64_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S65_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S38_Crc_phrase_th} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S37pse_Crc_phrase_th = {3,(State*)&S65_Crc_phrase_th};
+yacco2::Shift_entry S37qse_Crc_phrase_th = {0,(State*)&S64_Crc_phrase_th};
+yacco2::State S37_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{37
+,(Shift_entry*)&S37pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S37st_Crc_phrase_th,0,(State_s_thread_tbl*)&S65tt_Crc_phrase_th,0,(Shift_entry*)&S37qse_Crc_phrase_th
+};
+struct S38std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S38std_Crc_phrase_th S38st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S39_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S38pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S38rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Crc_phrase_th S38rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S38_Crc_phrase_th = //State's vectored into symbol: "Rnamespace"
+{38
+,(Shift_entry*)&S38pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S38st_Crc_phrase_th,(Reduce_tbl*)&S38rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S39std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S39std_Crc_phrase_th S39st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S40_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S41_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S43_Crc_phrase_th} // shift sym: Rnamespace_id
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Crc_phrase_th = {3,(State*)&S41_Crc_phrase_th};
+yacco2::Shift_entry S39qse_Crc_phrase_th = {0,(State*)&S40_Crc_phrase_th};
+yacco2::State S39_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{39
+,(Shift_entry*)&S39pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S39st_Crc_phrase_th,0,(State_s_thread_tbl*)&S41tt_Crc_phrase_th,0,(Shift_entry*)&S39qse_Crc_phrase_th
+};
+struct S40rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Crc_phrase_th S40rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crc_phrase_th,Crc_phrase_th::rhs2_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S40_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Crc_phrase_th,0,0,0};
+struct S41std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S41std_Crc_phrase_th S41st_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {279,(State*)&S42_Crc_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::State S41_Crc_phrase_th = //State's vectored into symbol: "|||"
+{41
+,0,0,0,0,(Shift_tbl*)&S41st_Crc_phrase_th,0,0,0,0};
+struct S42rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Crc_phrase_th S42rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crc_phrase_th,Crc_phrase_th::rhs1_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S42_Crc_phrase_th = //State's vectored into symbol: "identifier"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Crc_phrase_th,0,0,0};
+struct S43rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Crc_phrase_th S43rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crc_phrase_th,Crc_phrase_th::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S43_Crc_phrase_th = //State's vectored into symbol: "Rnamespace_id"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Crc_phrase_th,0,0,0};
+struct S44rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Crc_phrase_th S44rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crc_phrase_th,Crc_phrase_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S44_Crc_phrase_th = //State's vectored into symbol: "Rnamespace_phrase"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Crc_phrase_th,0,0,0};
+struct S45std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S45std_Crc_phrase_th S45st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S46_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S45pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S45rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Crc_phrase_th S45rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S45_Crc_phrase_th = //State's vectored into symbol: "Rfilename"
+{45
+,(Shift_entry*)&S45pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S45st_Crc_phrase_th,(Reduce_tbl*)&S45rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S46std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S46std_Crc_phrase_th S46st_Crc_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S47_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S48_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S50_Crc_phrase_th} // shift sym: Rfilename_id
+ }// end of shift table
+};
+yacco2::Shift_entry S46pse_Crc_phrase_th = {3,(State*)&S48_Crc_phrase_th};
+yacco2::Shift_entry S46qse_Crc_phrase_th = {0,(State*)&S47_Crc_phrase_th};
+yacco2::State S46_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{46
+,(Shift_entry*)&S46pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S46st_Crc_phrase_th,0,(State_s_thread_tbl*)&S48tt_Crc_phrase_th,0,(Shift_entry*)&S46qse_Crc_phrase_th
+};
+struct S47rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Crc_phrase_th S47rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Crc_phrase_th,Crc_phrase_th::rhs2_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S47_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Crc_phrase_th,0,0,0};
+struct S48std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S48std_Crc_phrase_th S48st_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {279,(State*)&S49_Crc_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::State S48_Crc_phrase_th = //State's vectored into symbol: "|||"
+{48
+,0,0,0,0,(Shift_tbl*)&S48st_Crc_phrase_th,0,0,0,0};
+struct S49rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Crc_phrase_th S49rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Crc_phrase_th,Crc_phrase_th::rhs1_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S49_Crc_phrase_th = //State's vectored into symbol: "identifier"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Crc_phrase_th,0,0,0};
+struct S50rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Crc_phrase_th S50rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Crc_phrase_th,Crc_phrase_th::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S50_Crc_phrase_th = //State's vectored into symbol: "Rfilename_id"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Crc_phrase_th,0,0,0};
+struct S51rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Crc_phrase_th S51rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Crc_phrase_th,Crc_phrase_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S51_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Crc_phrase_th,0,0,0};
+struct S52rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Crc_phrase_th S52rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Crc_phrase_th,Crc_phrase_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S52_Crc_phrase_th = //State's vectored into symbol: ")"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Crc_phrase_th,0,0,0};
+struct S53rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Crc_phrase_th S53rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs6_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S53_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Crc_phrase_th,0,0,0};
+struct S54std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S54std_Crc_phrase_th S54st_Crc_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S55_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{319,(State*)&S56_Crc_phrase_th} // shift sym: T_terminals_refs
+ ,{320,(State*)&S57_Crc_phrase_th} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S58_Crc_phrase_th} // shift sym: T_lrk_sufx
+ ,{331,(State*)&S59_Crc_phrase_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S54qse_Crc_phrase_th = {0,(State*)&S55_Crc_phrase_th};
+yacco2::State S54_Crc_phrase_th = //State's vectored into symbol: "|||"
+{54
+,0,0,0,0,(Shift_tbl*)&S54st_Crc_phrase_th,0,0,0,(Shift_entry*)&S54qse_Crc_phrase_th
+};
+struct S55rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Crc_phrase_th S55rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs2_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S55_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Crc_phrase_th,0,0,0};
+struct S56rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Crc_phrase_th S56rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs4_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S56_Crc_phrase_th = //State's vectored into symbol: "#terminals-refs"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Crc_phrase_th,0,0,0};
+struct S57rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Crc_phrase_th S57rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs5_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S57_Crc_phrase_th = //State's vectored into symbol: "#terminals-sufx"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Crc_phrase_th,0,0,0};
+struct S58rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Crc_phrase_th S58rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs3_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S58_Crc_phrase_th = //State's vectored into symbol: "#lrk-sufx"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Crc_phrase_th,0,0,0};
+struct S59rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Crc_phrase_th S59rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs1_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S59_Crc_phrase_th = //State's vectored into symbol: "terminal-def"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Crc_phrase_th,0,0,0};
+struct S60std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S60std_Crc_phrase_th S60st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S61_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S60pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S60rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Crc_phrase_th S60rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S60_Crc_phrase_th = //State's vectored into symbol: "Rsym_def1"
+{60
+,(Shift_entry*)&S60pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S60st_Crc_phrase_th,(Reduce_tbl*)&S60rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S61rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Crc_phrase_th S61rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs2_Rsym_defs_}
+ }// end of reduce table
+};
+yacco2::State S61_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Crc_phrase_th,0,0,0};
+struct S62std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S62std_Crc_phrase_th S62st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crc_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S63_Crc_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S62pse_Crc_phrase_th = {3,(State*)&S2_Crc_phrase_th};
+struct S62rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Crc_phrase_th S62rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S62_Crc_phrase_th = //State's vectored into symbol: "Rsym_def"
+{62
+,(Shift_entry*)&S62pse_Crc_phrase_th,0,0,0,(Shift_tbl*)&S62st_Crc_phrase_th,(Reduce_tbl*)&S62rt_Crc_phrase_th,(State_s_thread_tbl*)&S2tt_Crc_phrase_th,0,0};
+struct S63rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Crc_phrase_th S63rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crc_phrase_th,Crc_phrase_th::rhs1_Rsym_defs_}
+ }// end of reduce table
+};
+yacco2::State S63_Crc_phrase_th = //State's vectored into symbol: "Rlint"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Crc_phrase_th,0,0,0};
+struct S64rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Crc_phrase_th S64rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs3_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S64_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Crc_phrase_th,0,0,0};
+struct S65std_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S65std_Crc_phrase_th S65st_Crc_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S66_Crc_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{304,(State*)&S67_Crc_phrase_th} // shift sym: T_name_space
+ }// end of shift table
+};
+yacco2::Shift_entry S65qse_Crc_phrase_th = {0,(State*)&S66_Crc_phrase_th};
+yacco2::State S65_Crc_phrase_th = //State's vectored into symbol: "|||"
+{65
+,0,0,0,0,(Shift_tbl*)&S65st_Crc_phrase_th,0,0,0,(Shift_entry*)&S65qse_Crc_phrase_th
+};
+struct S66rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Crc_phrase_th S66rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S66_Crc_phrase_th = //State's vectored into symbol: "|?|"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Crc_phrase_th,0,0,0};
+struct S67rtd_Crc_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Crc_phrase_th S67rt_Crc_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crc_phrase_th,Crc_phrase_th::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S67_Crc_phrase_th = //State's vectored into symbol: "#name-space"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Crc_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rc_phrasesym.cpp b/web/yacco2/compiler/grammars/rc_phrasesym.cpp
new file mode 100644
index 0000000000..ff2d2d9913
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: rc_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Crc_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrc_phrase_:{
+ Rrc_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrc_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrc_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rc_phrasetbl.cpp b/web/yacco2/compiler/grammars/rc_phrasetbl.cpp
new file mode 100644
index 0000000000..fa713e3599
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rc_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: rc_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:21 2015
+*/
+#include "rc_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rc_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crc_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Crc_phrase;
+extern yacco2::State S2_Crc_phrase;
+extern yacco2::State S3_Crc_phrase;
+struct S3ttd_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Crc_phrase S3tt_Crc_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rc_phrase_th
+};
+extern yacco2::State S4_Crc_phrase;
+extern yacco2::State S5_Crc_phrase;
+extern yacco2::State S6_Crc_phrase;
+struct S1std_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Crc_phrase S1st_Crc_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Crc_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Crc_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crc_phrase} // accept sym: Rrc_phrase
+ ,{570,(State*)&S6_Crc_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crc_phrase = {3,(State*)&S3_Crc_phrase};
+yacco2::Shift_entry S1qse_Crc_phrase = {0,(State*)&S2_Crc_phrase};
+yacco2::State S1_Crc_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crc_phrase,0,0,0,(Shift_tbl*)&S1st_Crc_phrase,0,(State_s_thread_tbl*)&S3tt_Crc_phrase,0,(Shift_entry*)&S1qse_Crc_phrase
+};
+struct S2rtd_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crc_phrase S2rt_Crc_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase,Crc_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Crc_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Crc_phrase,0,0,0};
+struct S3std_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Crc_phrase S3st_Crc_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Crc_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{337,(State*)&S5_Crc_phrase} // shift sym: T_rc_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Crc_phrase = {0,(State*)&S4_Crc_phrase};
+yacco2::State S3_Crc_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Crc_phrase,0,0,0,(Shift_entry*)&S3qse_Crc_phrase
+};
+struct S4rtd_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crc_phrase S4rt_Crc_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase,Crc_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Crc_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crc_phrase,0,0,0};
+struct S5rtd_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crc_phrase S5rt_Crc_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase,Crc_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Crc_phrase = //State's vectored into symbol: "rc-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crc_phrase,0,0,0};
+struct S6rtd_Crc_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crc_phrase S6rt_Crc_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crc_phrase,Crc_phrase::rhs1_Rrc_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Crc_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crc_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rhs_bnd.cpp b/web/yacco2/compiler/grammars/rhs_bnd.cpp
new file mode 100644
index 0000000000..63f87ac306
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bnd.cpp
@@ -0,0 +1,72 @@
+/*
+ File: rhs_bnd.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_bnd.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_bnd;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Crhs_bnd::
+ Crhs_bnd()
+ :yacco2::CAbs_fsm
+ ("rhs_bnd.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Determine end-of-subrule expression within a rule."
+ ,"Fri Jan 30 18:55:22 2015 "
+ ,S1_Crhs_bnd){
+
+ }
+
+Crhs_bnd::~Crhs_bnd(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crhs_bnd::failed(){
+ return false;
+ }
+ void Crhs_bnd::op(){
+}
+int Crhs_bnd::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+};
+Rrhs_bnd::Rrhs_bnd(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrhs_bnd",0,Crhs_bnd::R_Rrhs_bnd_,P,false,false){
+}
+
+void Rrhs_bnd::op(){
+ sstrace_rulesss
+
+ CAbs_lr1_sym* sym = new T_eosubrule;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ // pass back lookahead as start of thread
+ RSVP_WLA(sym,rule_info__.parser__->start_token__,sym->tok_co_ords__.rc_pos__);
+
+}
+void Rrhs_bnd::sr4(){
+
+ CAbs_lr1_sym* sym = new Err_subrule_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rhs_bnd.fsc b/web/yacco2/compiler/grammars/rhs_bnd.fsc
new file mode 100644
index 0000000000..7c8a730d16
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bnd.fsc
@@ -0,0 +1,23 @@
+/*
+ File: rhs_bnd.fsc
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+transitive n
+grammar-name "rhs_bnd"
+name-space "NS_rhs_bnd"
+thread-name "TH_rhs_bnd"
+monolithic n
+file-name "rhs_bnd.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ LR1_eog
+ raw_minus
+ raw_open_brace
+ raw_close_brace
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Determine end-of-subrule expression within a rule."
diff --git a/web/yacco2/compiler/grammars/rhs_bnd.h b/web/yacco2/compiler/grammars/rhs_bnd.h
new file mode 100644
index 0000000000..ebbcc9a497
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bnd.h
@@ -0,0 +1,59 @@
+/*
+ File: rhs_bnd.h
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#ifndef __rhs_bnd_h__
+#define __rhs_bnd_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_rhs_bnd;
+
+extern yacco2::State S1_Crhs_bnd;
+namespace NS_rhs_bnd {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rhs_bnd(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rhs_bnd(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Crhs_bnd: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrhs_bnd_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrhs_bnd_ = 1
+ ,rhs2_Rrhs_bnd_ = 2
+ ,rhs3_Rrhs_bnd_ = 3
+ ,rhs4_Rrhs_bnd_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Crhs_bnd();
+ ~Crhs_bnd();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Rrhs_bnd;
+struct Rrhs_bnd:public yacco2::CAbs_lr1_sym {
+ Rrhs_bnd(yacco2::Parser* P);
+ void op();
+ public:
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rhs_bnd.lex b/web/yacco2/compiler/grammars/rhs_bnd.lex
new file mode 100644
index 0000000000..ece9930054
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bnd.lex
@@ -0,0 +1,82 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rhs_bnd.lex
+Dates: 10 Jun 2004
+Purpose: finds the end-of-a-subrule's expression
+ The stoppers are:
+ { start of a syntax directed code block
+ } end of the rule's subrules
+ -> start of a new subrule expression
+Output: Err_subrule_overrun
+ eosubrule
+Note: Lookahead pair < token, pos > is the same start token
+ of this thread cuz an end-of-subrule is invisible
+ caused by either the start of another subrule definition
+ or the end of a rule definition.
+
+ To properly parse these other junction points, the token
+ stream must stay aligned at the point of invocation.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rhs_bnd| thread.\fbreak
+Finds the end-of-a-subrule's expression.
+The stoppers are:\fbreak
+\ptindent{\prtobrace --- start of a syntax directed code block}
+\ptindent{\prtcbrace --- end of the rule's subrules}
+\ptindent{\prtstartsr start of a new subrule expression}
+\fbreak
+Note:\fbreak
+Lookahead pair $<$ token, pos $>$ is the same start token
+of this thread cuz an end-of-subrule is invisible
+caused by either the start of another subrule definition
+or the end of a rule definition.
+
+To properly parse these other junction points, the token
+stream must stay aligned at the point of invocation.
+@/
+fsm
+(fsm-id "rhs_bnd.lex"
+,fsm-filename rhs_bnd
+,fsm-namespace NS_rhs_bnd
+,fsm-class Crhs_bnd
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Determine end-of-subrule expression within a rule.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rhs_bnd
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrhs_bnd (
+lhs{
+ op
+ CAbs_lr1_sym* sym = new T_eosubrule;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ // pass back lookahead as start of thread
+ RSVP_WLA(sym,rule_info__.parser__->start_token__,sym->tok_co_ords__.rc_pos__);
+ ***
+}
+){
+ -> "{"
+ -> "}"
+ -> "-" ">"
+ -> eog {
+ op
+ CAbs_lr1_sym* sym = new Err_subrule_overrun;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rhs_bndsym.cpp b/web/yacco2/compiler/grammars/rhs_bndsym.cpp
new file mode 100644
index 0000000000..94bedb4c8c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bndsym.cpp
@@ -0,0 +1,109 @@
+/*
+ File: rhs_bndsym.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_bnd.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_bnd;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rhs_bnd::TH_rhs_bnd(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rhs_bnd;
+ NS_rhs_bnd::Crhs_bnd Crhs_bnd_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crhs_bnd_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rhs_bnd::PROC_TH_rhs_bnd(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rhs_bnd";
+ static bool one_time(false);
+ static NS_rhs_bnd::Crhs_bnd* NS_rhs_bnd_Crhs_bnd_(0);// parallel-parser's fsm table
+ static Parser* NS_rhs_bnd_Crhs_bnd_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rhs_bnd_Crhs_bnd_ = new NS_rhs_bnd::Crhs_bnd();// parallel-parser's fsm table
+ NS_rhs_bnd_Crhs_bnd_parser = new Parser(*NS_rhs_bnd_Crhs_bnd_,Caller_pp);
+ }
+ proc_parser = NS_rhs_bnd_Crhs_bnd_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crhs_bnd::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrhs_bnd_:{
+ Rrhs_bnd* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_bnd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_bnd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rrhs_bnd_:{
+ Rrhs_bnd* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_bnd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_bnd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rrhs_bnd_:{
+ Rrhs_bnd* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_bnd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_bnd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rrhs_bnd_:{
+ Rrhs_bnd* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_bnd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_bnd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rhs_bndtbl.cpp b/web/yacco2/compiler/grammars/rhs_bndtbl.cpp
new file mode 100644
index 0000000000..b188711b3f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_bndtbl.cpp
@@ -0,0 +1,112 @@
+/*
+ File: rhs_bndtbl.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_bnd.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_bnd;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crhs_bnd[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Crhs_bnd;
+extern yacco2::State S2_Crhs_bnd;
+extern yacco2::State S3_Crhs_bnd;
+extern yacco2::State S4_Crhs_bnd;
+extern yacco2::State S5_Crhs_bnd;
+extern yacco2::State S6_Crhs_bnd;
+struct S1std_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Crhs_bnd S1st_Crhs_bnd = {
+ 5
+ ,
+ {// start of table
+ {1,(State*)&S2_Crhs_bnd} // shift sym: LR1_eog
+ ,{53,(State*)&S3_Crhs_bnd} // shift sym: raw_minus
+ ,{131,(State*)&S5_Crhs_bnd} // shift sym: raw_open_brace
+ ,{133,(State*)&S6_Crhs_bnd} // shift sym: raw_close_brace
+ ,{569,(State*)&S1_Crhs_bnd} // accept sym: Rrhs_bnd
+ }// end of shift table
+};
+yacco2::State S1_Crhs_bnd = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Crhs_bnd,0,0,0,0};
+struct S2rtd_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crhs_bnd S2rt_Crhs_bnd = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_bnd,Crhs_bnd::rhs4_Rrhs_bnd_}
+ }// end of reduce table
+};
+yacco2::State S2_Crhs_bnd = //State's vectored into symbol: "eog"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Crhs_bnd,0,0,0};
+struct S3std_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Crhs_bnd S3st_Crhs_bnd = {
+ 1
+ ,
+ {// start of table
+ {70,(State*)&S4_Crhs_bnd} // shift sym: raw_gt_than
+ }// end of shift table
+};
+yacco2::State S3_Crhs_bnd = //State's vectored into symbol: "-"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Crhs_bnd,0,0,0,0};
+struct S4rtd_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crhs_bnd S4rt_Crhs_bnd = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_bnd,Crhs_bnd::rhs3_Rrhs_bnd_}
+ }// end of reduce table
+};
+yacco2::State S4_Crhs_bnd = //State's vectored into symbol: ">"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crhs_bnd,0,0,0};
+struct S5rtd_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crhs_bnd S5rt_Crhs_bnd = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_bnd,Crhs_bnd::rhs1_Rrhs_bnd_}
+ }// end of reduce table
+};
+yacco2::State S5_Crhs_bnd = //State's vectored into symbol: "{"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crhs_bnd,0,0,0};
+struct S6rtd_Crhs_bnd{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crhs_bnd S6rt_Crhs_bnd = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_bnd,Crhs_bnd::rhs2_Rrhs_bnd_}
+ }// end of reduce table
+};
+yacco2::State S6_Crhs_bnd = //State's vectored into symbol: "}"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crhs_bnd,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rhs_component.cpp b/web/yacco2/compiler/grammars/rhs_component.cpp
new file mode 100644
index 0000000000..6095280873
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_component.cpp
@@ -0,0 +1,341 @@
+/*
+ File: rhs_component.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_component;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Crhs_component::
+ Crhs_component()
+ :yacco2::CAbs_fsm
+ ("rhs_component.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,true
+ ,"Subule's individual component recognizer except eosubrule."
+ ,"Fri Jan 30 18:55:22 2015 "
+ ,S1_Crhs_component){
+
+ }
+
+Crhs_component::~Crhs_component(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crhs_component::failed(){
+ return false;
+ }
+ void Crhs_component::op(){
+}
+int Crhs_component::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,0 // subrule 6 for rule 1
+ ,0 // subrule 7 for rule 1
+ ,0 // subrule 8 for rule 1
+};
+
+ void Crhs_component::fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok){
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*Str);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->type_ != table_entry::terminal){
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* T = (T_in_stbl*)sym;
+ refered_T* rT = new refered_T(*T);
+ rT->set_rc(*Tok,__FILE__,__LINE__);
+
+ T->add_T_into_xref(*rT);
+
+ RSVP_FSM(T);
+ parser__->set_stop_parse(true);
+ }
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rhs_component::AR_Rrhs_component(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rrhs_component";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_rule_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_identifier_){
+ goto arbitrated_parameter;
+ }
+ }
+
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_c_string_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_cweb_marker_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_kw_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_unquoted_string_){
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rrhs_component::Rrhs_component(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrhs_component",0,Crhs_component::R_Rrhs_component_,P,false,false){
+}
+
+void Rrhs_component::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ const char* skey = sf->p2__->identifier()->c_str();
+
+ rule_def* rdef = new rule_def(skey);
+ rdef->set_rc(*sf->p2__,__FILE__,__LINE__);
+ rule_in_stbl* ristbl = new rule_in_stbl(*rdef);
+ ristbl->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ refered_rule* rr = new refered_rule(*ristbl);
+ rr->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ristbl->add_R_into_xref(*rr);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*ristbl,table_entry::used,table_entry::rule);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ristbl->stbl_idx(report_card.pos_);
+ RSVP(ristbl);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrhs_component::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crhs_component* fsm = (Crhs_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->c_string()->c_str(),sf->p2__);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rrhs_component::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_unquoted_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+ // only accept when no identifier
+ Crhs_component* fsm = (Crhs_component*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->set_auto_delete(true);
+ string eos_chk("->");
+ if(eos_chk == sf->p2__->unquoted_string()->c_str()){
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ fsm->fnd_T_of_chr_str(sf->p2__->unquoted_string()->c_str(),sf->p2__);
+
+}
+
+void Rrhs_component::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ RSVP(cw);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrhs_component::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrhs_component::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->r_def()->rule_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_rule_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_rule* rr = new refered_rule(*sf->p2__);
+ rr->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->add_R_into_xref(*rr);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrhs_component::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->t_def()->t_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_T_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_T* rt = new refered_T(*sf->p2__);
+ rt->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ sf->p2__->add_T_into_xref(*rt);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrhs_component::sr8(){
+
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rhs_component.fsc b/web/yacco2/compiler/grammars/rhs_component.fsc
new file mode 100644
index 0000000000..63cb3f15b7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_component.fsc
@@ -0,0 +1,27 @@
+/*
+ File: rhs_component.fsc
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+transitive y
+grammar-name "rhs_component"
+name-space "NS_rhs_component"
+thread-name "TH_rhs_component"
+monolithic n
+file-name "rhs_component.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 4
+ NS_identifier::TH_identifier
+ NS_c_string::TH_c_string
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_unq_str::TH_unq_str
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_c_string::TH_c_string
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_unq_str::TH_unq_str
+end-list-of-used-threads
+fsm-comments
+"Subule's individual component recognizer except eosubrule."
diff --git a/web/yacco2/compiler/grammars/rhs_component.h b/web/yacco2/compiler/grammars/rhs_component.h
new file mode 100644
index 0000000000..5ca6aab51a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_component.h
@@ -0,0 +1,82 @@
+/*
+ File: rhs_component.h
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#ifndef __rhs_component_h__
+#define __rhs_component_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "identifier.h"
+#include "c_string.h"
+#include "cweb_or_c_k.h"
+#include "unq_str.h"
+#include "yacco2_stbl.h"
+
+extern yacco2::Thread_entry ITH_rhs_component;
+
+extern yacco2::State S1_Crhs_component;
+namespace NS_rhs_component {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rhs_component(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rhs_component(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Crhs_component: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrhs_component_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrhs_component_ = 1
+ ,rhs2_Rrhs_component_ = 2
+ ,rhs3_Rrhs_component_ = 3
+ ,rhs4_Rrhs_component_ = 4
+ ,rhs5_Rrhs_component_ = 5
+ ,rhs6_Rrhs_component_ = 6
+ ,rhs7_Rrhs_component_ = 7
+ ,rhs8_Rrhs_component_ = 8
+ };
+ //no of la sets = 1
+ //no of states = 10
+ Crhs_component();
+ ~Crhs_component();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+
+ public:
+ void fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok);
+
+ };
+struct Rrhs_component;
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rrhs_component(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rrhs_component:public yacco2::CAbs_lr1_sym {
+ Rrhs_component(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rhs_component.lex b/web/yacco2/compiler/grammars/rhs_component.lex
new file mode 100644
index 0000000000..db4a174128
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_component.lex
@@ -0,0 +1,289 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rhs_component.lex
+Dates: 10 Jun 2004
+Purpose: a component of subrule
+Output: rule_in_stbl
+ T_in_stbl
+ "|||"
+ assorted errors
+ "cweb-marker"
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rhs_component| Thread.\fbreak
+A component of subrule.\fbreak
+\fbreak
+Note: the forest versus trees on T and \paralleloperator which is a T but
+i wanted clarity within {``subrule.lex''} to break out
+a regular grammar expression from a thread expression
+
+For clarity within the |subrule_def| grammar, eosubrule is
+recognized only by |rhs_bnd| grammar. Well now, $-$$>$ is a T.
+So I trap it in |fnd_T_of_chr_str| and abort the parse.
+This stops the recognition on RTorRcomponents of |subrule_def|.
+
+I could have used the enumeration approach to test its presence
+but what is its value in the sea of Terminals.
+It's not like the hardwired \paralleloperator
+lr k terminal that is fixed in place and time.
+
+@/
+fsm
+(fsm-id "rhs_component.lex"
+,fsm-filename rhs_component
+,fsm-namespace NS_rhs_component
+,fsm-class Crhs_component{
+ user-prefix-declaration
+#include "identifier.h"
+#include "c_string.h"
+#include "cweb_or_c_k.h"
+#include "unq_str.h"
+#include "yacco2_stbl.h"
+ ***
+ user-declaration
+ public:
+ void fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok);
+ ***
+ user-implementation
+ void Crhs_component::fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok){
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*Str);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->type_ != table_entry::terminal){
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* T = (T_in_stbl*)sym;
+ refered_T* rT = new refered_T(*T);
+ rT->set_rc(*Tok,__FILE__,__LINE__);
+
+ T->add_T_into_xref(*rT);
+
+ RSVP_FSM(T);
+ parser__->set_stop_parse(true);
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "true"
+,fsm-comments "Subule's individual component recognizer except eosubrule.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rhs_component
+ ***
+ parallel-la-boundary
+eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrhs_component (
+//lhs,
+parallel-control-monitor{
+/@
+ unquoted-string supersets identifier
+ and also includes other T like $-$$>$ and cweb comments ie cweb-marker.
+ Code only gets tried when \# parms in accept queue $>$ 1.
+ Single entry is one of identifier or cweb.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_rule_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_identifier_){
+ goto arbitrated_parameter;
+ }
+ }
+
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_c_string_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_cweb_marker_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_kw_in_stbl_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_T_unquoted_string_){
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ -> ||| identifier NS_identifier::TH_identifier {
+ /@
+ Used rule and not defined yet, so create it.
+ @/
+ op
+ const char* skey = sf->p2__->identifier()->c_str();
+
+ rule_def* rdef = new rule_def(skey);
+ rdef->set_rc(*sf->p2__,__FILE__,__LINE__);
+ rule_in_stbl* ristbl = new rule_in_stbl(*rdef);
+ ristbl->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ refered_rule* rr = new refered_rule(*ristbl);
+ rr->set_rc(*sf->p2__,__FILE__,__LINE__);
+ ristbl->add_R_into_xref(*rr);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*ristbl,table_entry::used,table_entry::rule);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ristbl->stbl_idx(report_card.pos_);
+ RSVP(ristbl);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string {
+/@
+ Considered a T type.
+@/
+ op
+ Crhs_component* fsm = (Crhs_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->c_string()->c_str(),sf->p2__);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "unquoted-string" NS_unq_str::TH_unq_str {
+/@
+ Considered a T type. Why the check on subrule vector: $-$$>$?
+ This is a context problem whereby my grammars use it and what happenes when
+ a language being defined also has it?
+ So i abort on the unprotected $-$$>$ so that |rhs_bnd| grammar
+ covers it as one of my grammar's terminals. The quoted version is passed thru as is.
+ Fractal logic on self contexts: The inner self and the outer contextual grounds.
+@/
+ op // only accept when no identifier
+ Crhs_component* fsm = (Crhs_component*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->set_auto_delete(true);
+ string eos_chk("->");
+ if(eos_chk == sf->p2__->unquoted_string()->c_str()){
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ fsm->fnd_T_of_chr_str(sf->p2__->unquoted_string()->c_str(),sf->p2__);
+ ***
+ }
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ RSVP(cw);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NULL {
+/@
+ Forward the error.
+@/
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "rule-in-stbl" NULL {
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->r_def()->rule_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_rule_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_rule* rr = new refered_rule(*sf->p2__);
+ rr->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->add_R_into_xref(*rr);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {
+ /@
+ Used T, so indicate its xreference.
+ @/
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->t_def()->t_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_T_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_T* rt = new refered_T(*sf->p2__);
+ rt->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ sf->p2__->add_T_into_xref(*rt);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "kw-in-stbl" NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rhs_componentsym.cpp b/web/yacco2/compiler/grammars/rhs_componentsym.cpp
new file mode 100644
index 0000000000..a1d05cc619
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_componentsym.cpp
@@ -0,0 +1,168 @@
+/*
+ File: rhs_componentsym.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_component;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rhs_component::TH_rhs_component(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rhs_component;
+ NS_rhs_component::Crhs_component Crhs_component_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crhs_component_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rhs_component::PROC_TH_rhs_component(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rhs_component";
+ static bool one_time(false);
+ static NS_rhs_component::Crhs_component* NS_rhs_component_Crhs_component_(0);// parallel-parser's fsm table
+ static Parser* NS_rhs_component_Crhs_component_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rhs_component_Crhs_component_ = new NS_rhs_component::Crhs_component();// parallel-parser's fsm table
+ NS_rhs_component_Crhs_component_parser = new Parser(*NS_rhs_component_Crhs_component_,Caller_pp);
+ }
+ proc_parser = NS_rhs_component_Crhs_component_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crhs_component::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rrhs_component_:{
+ Rrhs_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rhs_componenttbl.cpp b/web/yacco2/compiler/grammars/rhs_componenttbl.cpp
new file mode 100644
index 0000000000..1634ef5d6c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rhs_componenttbl.cpp
@@ -0,0 +1,194 @@
+/*
+ File: rhs_componenttbl.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rhs_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rhs_component;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crhs_component[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Crhs_component;
+extern yacco2::State S2_Crhs_component;
+struct S2ttd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[4];
+};
+S2ttd_Crhs_component S2tt_Crhs_component = {
+ 4 // no of threads
+ ,AR_Rrhs_component //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_unq_str
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S3_Crhs_component;
+extern yacco2::State S4_Crhs_component;
+extern yacco2::State S5_Crhs_component;
+extern yacco2::State S6_Crhs_component;
+extern yacco2::State S7_Crhs_component;
+extern yacco2::State S8_Crhs_component;
+extern yacco2::State S9_Crhs_component;
+extern yacco2::State S10_Crhs_component;
+struct S1std_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Crhs_component S1st_Crhs_component = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crhs_component} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crhs_component} // accept sym: Rrhs_component
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crhs_component = {3,(State*)&S2_Crhs_component};
+yacco2::State S1_Crhs_component = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crhs_component,0,0,0,(Shift_tbl*)&S1st_Crhs_component,0,(State_s_thread_tbl*)&S2tt_Crhs_component,0,0};
+struct S2std_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[8];
+};
+S2std_Crhs_component S2st_Crhs_component = {
+ 8
+ ,
+ {// start of table
+ {6,(State*)&S3_Crhs_component} // shift sym: LR1_all_shift_operator
+ ,{275,(State*)&S4_Crhs_component} // shift sym: T_c_string
+ ,{277,(State*)&S5_Crhs_component} // shift sym: T_unquoted_string
+ ,{279,(State*)&S6_Crhs_component} // shift sym: T_identifier
+ ,{344,(State*)&S7_Crhs_component} // shift sym: T_in_stbl
+ ,{346,(State*)&S8_Crhs_component} // shift sym: rule_in_stbl
+ ,{367,(State*)&S9_Crhs_component} // shift sym: kw_in_stbl
+ ,{372,(State*)&S10_Crhs_component} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S2ase_Crhs_component = {6,(State*)&S3_Crhs_component};
+yacco2::State S2_Crhs_component = //State's vectored into symbol: "|||"
+{2
+,0,(Shift_entry*)&S2ase_Crhs_component
+,0,0,(Shift_tbl*)&S2st_Crhs_component,0,0,0,0};
+struct S3rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Crhs_component S3rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs5_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S3_Crhs_component = //State's vectored into symbol: "|+|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Crhs_component,0,0,0};
+struct S4rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crhs_component S4rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs2_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S4_Crhs_component = //State's vectored into symbol: "c-string"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crhs_component,0,0,0};
+struct S5rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crhs_component S5rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs3_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S5_Crhs_component = //State's vectored into symbol: "unquoted-string"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crhs_component,0,0,0};
+struct S6rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crhs_component S6rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs1_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S6_Crhs_component = //State's vectored into symbol: "identifier"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crhs_component,0,0,0};
+struct S7rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crhs_component S7rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs7_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S7_Crhs_component = //State's vectored into symbol: "T-in-stbl"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Crhs_component,0,0,0};
+struct S8rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Crhs_component S8rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs6_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S8_Crhs_component = //State's vectored into symbol: "rule-in-stbl"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Crhs_component,0,0,0};
+struct S9rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crhs_component S9rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs8_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S9_Crhs_component = //State's vectored into symbol: "kw-in-stbl"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Crhs_component,0,0,0};
+struct S10rtd_Crhs_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Crhs_component S10rt_Crhs_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crhs_component,Crhs_component::rhs4_Rrhs_component_}
+ }// end of reduce table
+};
+yacco2::State S10_Crhs_component = //State's vectored into symbol: "cweb-comment"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Crhs_component,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rtn_component.cpp b/web/yacco2/compiler/grammars/rtn_component.cpp
new file mode 100644
index 0000000000..751b35ce33
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_component.cpp
@@ -0,0 +1,223 @@
+/*
+ File: rtn_component.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rtn_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rtn_component;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Crtn_component::
+ Crtn_component()
+ :yacco2::CAbs_fsm
+ ("rtn_component.lex"
+ ,"1.0"
+ ,"16 dec. 2005"
+ ,false
+ ,"Recognizer of returned T from a thread call expression."
+ ,"Fri Jan 30 18:55:22 2015 "
+ ,S1_Crtn_component){
+
+ }
+
+Crtn_component::~Crtn_component(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crtn_component::failed(){
+ return false;
+ }
+ void Crtn_component::op(){
+}
+int Crtn_component::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,0 // subrule 5 for rule 1
+ ,0 // subrule 6 for rule 1
+ ,0 // subrule 7 for rule 1
+};
+
+ void Crtn_component::fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok){
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*Str);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->type_ != table_entry::terminal){
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* T = (T_in_stbl*)sym;
+ refered_T* rT = new refered_T(*T);
+ rT->set_rc(*Tok,__FILE__,__LINE__);
+
+ T->add_T_into_xref(*rT);
+
+ RSVP_FSM(T);
+ parser__->set_stop_parse(true);
+ }
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rtn_component::AR_Rrtn_component(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rrtn_component";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ != NS_yacco2_T_enum::T_Enum::T_T_unquoted_string_){// bypass unq str
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rrtn_component::Rrtn_component(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrtn_component",0,Crtn_component::R_Rrtn_component_,P,false,false){
+}
+
+void Rrtn_component::sr1(){
+ // used rule and not defined, so create it
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crtn_component* fsm = (Crtn_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->c_string()->c_str(),sf->p2__);// stop parsing in call
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_unquoted_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+ // only accept when no identifier
+ Crtn_component* fsm = (Crtn_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->unquoted_string()->c_str(),sf->p2__);// stop parsing in call
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->t_def()->t_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_T_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_T* rt = new refered_T(*sf->p2__);
+ rt->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ sf->p2__->add_T_into_xref(*rt);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr6(){
+
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtn_component::sr7(){
+
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rtn_component.fsc b/web/yacco2/compiler/grammars/rtn_component.fsc
new file mode 100644
index 0000000000..b377a436d2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_component.fsc
@@ -0,0 +1,25 @@
+/*
+ File: rtn_component.fsc
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+transitive y
+grammar-name "rtn_component"
+name-space "NS_rtn_component"
+thread-name "TH_rtn_component"
+monolithic n
+file-name "rtn_component.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 3
+ NS_unq_str::TH_unq_str
+ NS_identifier::TH_identifier
+ NS_c_string::TH_c_string
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NS_c_string::TH_c_string
+ NS_identifier::TH_identifier
+ NS_unq_str::TH_unq_str
+end-list-of-used-threads
+fsm-comments
+"Recognizer of returned T from a thread call expression."
diff --git a/web/yacco2/compiler/grammars/rtn_component.h b/web/yacco2/compiler/grammars/rtn_component.h
new file mode 100644
index 0000000000..a3b0789200
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_component.h
@@ -0,0 +1,79 @@
+/*
+ File: rtn_component.h
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#ifndef __rtn_component_h__
+#define __rtn_component_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "identifier.h"
+#include "c_string.h"
+#include "unq_str.h"
+#include "yacco2_stbl.h"
+
+extern yacco2::Thread_entry ITH_rtn_component;
+
+extern yacco2::State S1_Crtn_component;
+namespace NS_rtn_component {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rtn_component(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rtn_component(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Crtn_component: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrtn_component_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrtn_component_ = 1
+ ,rhs2_Rrtn_component_ = 2
+ ,rhs3_Rrtn_component_ = 3
+ ,rhs4_Rrtn_component_ = 4
+ ,rhs5_Rrtn_component_ = 5
+ ,rhs6_Rrtn_component_ = 6
+ ,rhs7_Rrtn_component_ = 7
+ };
+ //no of la sets = 1
+ //no of states = 9
+ Crtn_component();
+ ~Crtn_component();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+
+ public:
+ void fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok);
+
+ };
+struct Rrtn_component;
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rrtn_component(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rrtn_component:public yacco2::CAbs_lr1_sym {
+ Rrtn_component(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rtn_component.lex b/web/yacco2/compiler/grammars/rtn_component.lex
new file mode 100644
index 0000000000..d033e39c61
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_component.lex
@@ -0,0 +1,173 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rtn_component.lex
+Dates: 16 Dec, 2005
+Purpose: a T returned from a thread
+Output: T_in_stbl
+ "|||"
+ assorted errors
+
+
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rtn_component| Thread.\fbreak
+A T returned from a thread.
+@/
+fsm
+(fsm-id "rtn_component.lex"
+,fsm-filename rtn_component
+,fsm-namespace NS_rtn_component
+,fsm-class Crtn_component{
+ user-prefix-declaration
+#include "identifier.h"
+#include "c_string.h"
+#include "unq_str.h"
+#include "yacco2_stbl.h"
+ ***
+ user-declaration
+ public:
+ void fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok);
+ ***
+ user-implementation
+ void Crtn_component::fnd_T_of_chr_str(const char* Str,yacco2::CAbs_lr1_sym* Tok){
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*Str);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->type_ != table_entry::terminal){
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* T = (T_in_stbl*)sym;
+ refered_T* rT = new refered_T(*T);
+ rT->set_rc(*Tok,__FILE__,__LINE__);
+
+ T->add_T_into_xref(*rT);
+
+ RSVP_FSM(T);
+ parser__->set_stop_parse(true);
+ }
+ ***
+}
+,fsm-version "1.0",fsm-date "16 dec. 2005",fsm-debug "false"
+,fsm-comments "Recognizer of returned T from a thread call expression.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rtn_component
+ ***
+ parallel-la-boundary
+eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrtn_component (
+lhs
+,parallel-control-monitor{
+ /@
+ unquoted-string supersets identifier
+ and also includes other T like $-$$>$ and cweb comments ie cweb-marker.
+ Code only gets tried when \# parms in accept queue $>$ 1.
+ Single entry is one of identifier or cweb.
+ @/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ != NS_yacco2_T_enum::T_Enum::T_T_unquoted_string_){// bypass unq str
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op // used rule and not defined, so create it
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string { // T type
+ op
+ Crtn_component* fsm = (Crtn_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->c_string()->c_str(),sf->p2__);// stop parsing in call
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "unquoted-string" NS_unq_str::TH_unq_str {// T type
+ op // only accept when no identifier
+ Crtn_component* fsm = (Crtn_component*)rule_info__.parser__->fsm_tbl__;
+ fsm->fnd_T_of_chr_str(sf->p2__->unquoted_string()->c_str(),sf->p2__);// stop parsing in call
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |+| NULL { // forward errors
+/@
+ Forward the error.
+@/
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {
+ op
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->t_def()->t_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_T_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ report_card.tbl_entry_->used_ = true;
+ refered_T* rt = new refered_T(*sf->p2__);
+ rt->set_rc(*sf->p2__,__FILE__,__LINE__);
+
+ sf->p2__->add_T_into_xref(*rt);
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "rule-in-stbl" NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "kw-in-stbl" NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rtn_componentsym.cpp b/web/yacco2/compiler/grammars/rtn_componentsym.cpp
new file mode 100644
index 0000000000..2fcfa02a66
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_componentsym.cpp
@@ -0,0 +1,153 @@
+/*
+ File: rtn_componentsym.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rtn_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rtn_component;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rtn_component::TH_rtn_component(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rtn_component;
+ NS_rtn_component::Crtn_component Crtn_component_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crtn_component_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rtn_component::PROC_TH_rtn_component(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rtn_component";
+ static bool one_time(false);
+ static NS_rtn_component::Crtn_component* NS_rtn_component_Crtn_component_(0);// parallel-parser's fsm table
+ static Parser* NS_rtn_component_Crtn_component_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rtn_component_Crtn_component_ = new NS_rtn_component::Crtn_component();// parallel-parser's fsm table
+ NS_rtn_component_Crtn_component_parser = new Parser(*NS_rtn_component_Crtn_component_,Caller_pp);
+ }
+ proc_parser = NS_rtn_component_Crtn_component_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crtn_component::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rrtn_component_:{
+ Rrtn_component* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtn_component(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtn_component*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rtn_componenttbl.cpp b/web/yacco2/compiler/grammars/rtn_componenttbl.cpp
new file mode 100644
index 0000000000..100de1962a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rtn_componenttbl.cpp
@@ -0,0 +1,177 @@
+/*
+ File: rtn_componenttbl.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rtn_component.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rtn_component;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crtn_component[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Crtn_component;
+extern yacco2::State S2_Crtn_component;
+struct S2ttd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S2ttd_Crtn_component S2tt_Crtn_component = {
+ 3 // no of threads
+ ,AR_Rrtn_component //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_unq_str
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S3_Crtn_component;
+extern yacco2::State S4_Crtn_component;
+extern yacco2::State S5_Crtn_component;
+extern yacco2::State S6_Crtn_component;
+extern yacco2::State S7_Crtn_component;
+extern yacco2::State S8_Crtn_component;
+extern yacco2::State S9_Crtn_component;
+struct S1std_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Crtn_component S1st_Crtn_component = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crtn_component} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crtn_component} // accept sym: Rrtn_component
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crtn_component = {3,(State*)&S2_Crtn_component};
+yacco2::State S1_Crtn_component = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crtn_component,0,0,0,(Shift_tbl*)&S1st_Crtn_component,0,(State_s_thread_tbl*)&S2tt_Crtn_component,0,0};
+struct S2std_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S2std_Crtn_component S2st_Crtn_component = {
+ 7
+ ,
+ {// start of table
+ {6,(State*)&S3_Crtn_component} // shift sym: LR1_all_shift_operator
+ ,{275,(State*)&S4_Crtn_component} // shift sym: T_c_string
+ ,{277,(State*)&S5_Crtn_component} // shift sym: T_unquoted_string
+ ,{279,(State*)&S6_Crtn_component} // shift sym: T_identifier
+ ,{344,(State*)&S7_Crtn_component} // shift sym: T_in_stbl
+ ,{346,(State*)&S8_Crtn_component} // shift sym: rule_in_stbl
+ ,{367,(State*)&S9_Crtn_component} // shift sym: kw_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S2ase_Crtn_component = {6,(State*)&S3_Crtn_component};
+yacco2::State S2_Crtn_component = //State's vectored into symbol: "|||"
+{2
+,0,(Shift_entry*)&S2ase_Crtn_component
+,0,0,(Shift_tbl*)&S2st_Crtn_component,0,0,0,0};
+struct S3rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Crtn_component S3rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs4_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S3_Crtn_component = //State's vectored into symbol: "|+|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Crtn_component,0,0,0};
+struct S4rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crtn_component S4rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs2_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S4_Crtn_component = //State's vectored into symbol: "c-string"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crtn_component,0,0,0};
+struct S5rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crtn_component S5rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs3_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S5_Crtn_component = //State's vectored into symbol: "unquoted-string"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crtn_component,0,0,0};
+struct S6rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crtn_component S6rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs1_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S6_Crtn_component = //State's vectored into symbol: "identifier"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crtn_component,0,0,0};
+struct S7rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crtn_component S7rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs5_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S7_Crtn_component = //State's vectored into symbol: "T-in-stbl"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Crtn_component,0,0,0};
+struct S8rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Crtn_component S8rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs6_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S8_Crtn_component = //State's vectored into symbol: "rule-in-stbl"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Crtn_component,0,0,0};
+struct S9rtd_Crtn_component{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crtn_component S9rt_Crtn_component = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crtn_component,Crtn_component::rhs7_Rrtn_component_}
+ }// end of reduce table
+};
+yacco2::State S9_Crtn_component = //State's vectored into symbol: "kw-in-stbl"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Crtn_component,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rule_def_phrase.cpp b/web/yacco2/compiler/grammars/rule_def_phrase.cpp
new file mode 100644
index 0000000000..82ff379324
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrase.cpp
@@ -0,0 +1,604 @@
+/*
+ File: rule_def_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rule_def_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_def_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 16;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+}
+ Crule_def_phrase::
+ Crule_def_phrase()
+ :yacco2::CAbs_fsm
+ ("rule_def_phrase.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse a grammar's rule definition."
+ ,"Fri Jan 30 18:55:22 2015 "
+ ,S1_Crule_def_phrase){
+
+ rule_def_ = 0;
+
+ }
+
+Crule_def_phrase::~Crule_def_phrase(){
+
+ for(int x = 0;x < 16;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crule_def_phrase::failed(){
+ return false;
+ }
+ void Crule_def_phrase::op(){
+ rule_def_ = 0;
+
+}
+int Crule_def_phrase::rhs_to_rules_mapping_[38] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+ ,3 // subrule 11 for rule 4
+ ,4 // subrule 12 for rule 5
+ ,4 // subrule 13 for rule 5
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+ ,5 // subrule 16 for rule 6
+ ,6 // subrule 17 for rule 7
+ ,6 // subrule 18 for rule 7
+ ,6 // subrule 19 for rule 7
+ ,7 // subrule 20 for rule 8
+ ,7 // subrule 21 for rule 8
+ ,8 // subrule 22 for rule 9
+ ,8 // subrule 23 for rule 9
+ ,9 // subrule 24 for rule 10
+ ,10 // subrule 25 for rule 11
+ ,10 // subrule 26 for rule 11
+ ,10 // subrule 27 for rule 11
+ ,11 // subrule 28 for rule 12
+ ,11 // subrule 29 for rule 12
+ ,12 // subrule 30 for rule 13
+ ,12 // subrule 31 for rule 13
+ ,13 // subrule 32 for rule 14
+ ,13 // subrule 33 for rule 14
+ ,14 // subrule 34 for rule 15
+ ,14 // subrule 35 for rule 15
+ ,15 // subrule 36 for rule 16
+ ,15 // subrule 37 for rule 16
+};
+Rrule_def_phrase::Rrule_def_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def_phrase",0,Crule_def_phrase::R_Rrule_def_phrase_,P,false,false){
+}
+
+void Rrule_def_phrase::sr1(){
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->bld_its_tree();
+ RSVP(fsm->rule_def_);
+ fsm->rule_def_ = 0;
+
+}
+
+Rrule_cweb_k::Rrule_cweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_cweb_k",0,Crule_def_phrase::R_Rrule_cweb_k_,P,false,false){
+}
+
+void Rrule_cweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ fsm->rule_def_->add_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rrule_cweb_k::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rid::Rid(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rid",0,Crule_def_phrase::R_Rid_,P,false,false){
+}
+
+void Rid::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->identifier()->c_str();
+ fsm->rule_def_ = new rule_def(skey);
+ rule_in_stbl* ristbl = new rule_in_stbl(*fsm->rule_def_);
+ fsm->rule_def_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*ristbl,table_entry::defed,table_entry::rule);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ristbl->stbl_idx(report_card.pos_);
+ report_card.tbl_entry_->defined_ = true;
+
+}
+
+void Rid::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->r_def()->rule_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_rule_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->defined_ == true){
+ CAbs_lr1_sym* sym = new Err_rule_already_defined;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_ = sf->p2__->r_def();
+ report_card.tbl_entry_->defined_ = true;
+
+}
+
+void Rid::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_stble_has_entry_but_not_a_rule;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+
+}
+
+void Rid::sr4(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_rule_name_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rad_ab_tags::Rad_ab_tags(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rad_ab_tags",0,Crule_def_phrase::R_Rad_ab_tags_,P,false,false){
+}
+
+Rad_ab_tag::Rad_ab_tag(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rad_ab_tag",0,Crule_def_phrase::R_Rad_ab_tag_,P,false,false){
+}
+
+void Rad_ab_tag::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AD* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->rule_def_->autodelete() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AD;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autodelete(true);
+
+}
+
+void Rad_ab_tag::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AB* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->rule_def_->autoabort() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AB;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autoabort(true);
+
+}
+
+Rrule_parameters::Rrule_parameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_parameters",0,Crule_def_phrase::R_Rrule_parameters_,P,false,false){
+}
+
+Rrule_parameter::Rrule_parameter(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_parameter",0,Crule_def_phrase::R_Rrule_parameter_,P,false,false){
+}
+
+void Rrule_parameter::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_lhs_pcnrl_mntr;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlhs_phrase::Rlhs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlhs_phrase",0,Crule_def_phrase::R_Rlhs_phrase_,P,false,false){
+}
+
+void Rlhs_phrase::sr1(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_rule_lhs_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->rule_lhs(sf->p2__);
+
+}
+
+void Rlhs_phrase::sr2(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparallel_monitor_phrase::Rparallel_monitor_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparallel_monitor_phrase",0,Crule_def_phrase::R_Rparallel_monitor_phrase_,P,false,false){
+}
+
+void Rparallel_monitor_phrase::sr1(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_monitor_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->parallel_mntr(sf->p2__);
+
+}
+
+void Rparallel_monitor_phrase::sr2(){
+ struct SF{
+ LR1_fset_transience_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rrule_body::Rrule_body(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_body",0,Crule_def_phrase::R_Rrule_body_,P,false,false){
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Crule_def_phrase::R_Rsubrules_,P,false,false){
+}
+
+void Rsubrules::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_subrules_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->subrules(sf->p2__);
+ // distribute rule def to its subrules
+ std::vector<T_subrule_def*>::iterator i = sf->p2__->subrules()->begin();
+ std::vector<T_subrule_def*>::iterator ie = sf->p2__->subrules()->end();
+ for(;i != ie;++i){
+ T_subrule_def* srd = *i;
+ srd->its_rule_def(fsm->rule_def_);
+ }
+
+}
+
+void Rsubrules::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsubrules::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_sub_rule_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Crule_def_phrase::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Crule_def_phrase::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Crule_def_phrase::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Crule_def_phrase::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Crule_def_phrase::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/rule_def_phrase.fsc b/web/yacco2/compiler/grammars/rule_def_phrase.fsc
new file mode 100644
index 0000000000..f0ff8d9a5f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrase.fsc
@@ -0,0 +1,26 @@
+/*
+ File: rule_def_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+transitive y
+grammar-name "rule_def_phrase"
+name-space "NS_rule_def_phrase"
+thread-name "TH_rule_def_phrase"
+monolithic n
+file-name "rule_def_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_identifier::TH_identifier
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_subrules_phrase::TH_subrules_phrase
+ NS_t_def_delabort_tags::TH_t_def_delabort_tags
+end-list-of-used-threads
+fsm-comments
+"Parse a grammar's rule definition."
diff --git a/web/yacco2/compiler/grammars/rule_def_phrase.h b/web/yacco2/compiler/grammars/rule_def_phrase.h
new file mode 100644
index 0000000000..6aacd2737c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrase.h
@@ -0,0 +1,231 @@
+/*
+ File: rule_def_phrase.h
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#ifndef __rule_def_phrase_h__
+#define __rule_def_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "t_def_delabort_tags.h"
+#include "subrules_phrase.h"
+#include "rule_lhs_phrase.h"
+#include "yacco2_stbl.h"
+#include "parallel_monitor_ph.h"
+
+extern yacco2::Thread_entry ITH_rule_def_phrase;
+
+extern yacco2::State S1_Crule_def_phrase;
+namespace NS_rule_def_phrase {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rule_def_phrase(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rule_def_phrase(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[16];
+};
+class Crule_def_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrule_def_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrule_def_phrase_ = 1
+ ,R_Rrule_cweb_k_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrule_cweb_k_ = 2
+ ,rhs2_Rrule_cweb_k_ = 3
+ ,rhs3_Rrule_cweb_k_ = 4
+ ,R_Rid_ = 571//start_of_rule_list + 4
+ ,rhs1_Rid_ = 5
+ ,rhs2_Rid_ = 6
+ ,rhs3_Rid_ = 7
+ ,rhs4_Rid_ = 8
+ ,R_Rad_ab_tags_ = 572//start_of_rule_list + 6
+ ,rhs1_Rad_ab_tags_ = 9
+ ,rhs2_Rad_ab_tags_ = 10
+ ,rhs3_Rad_ab_tags_ = 11
+ ,R_Rad_ab_tag_ = 573//start_of_rule_list + 8
+ ,rhs1_Rad_ab_tag_ = 12
+ ,rhs2_Rad_ab_tag_ = 13
+ ,R_Rrule_parameters_ = 574//start_of_rule_list + 10
+ ,rhs1_Rrule_parameters_ = 14
+ ,rhs2_Rrule_parameters_ = 15
+ ,rhs3_Rrule_parameters_ = 16
+ ,R_Rrule_parameter_ = 575//start_of_rule_list + 12
+ ,rhs1_Rrule_parameter_ = 17
+ ,rhs2_Rrule_parameter_ = 18
+ ,rhs3_Rrule_parameter_ = 19
+ ,R_Rlhs_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rlhs_phrase_ = 20
+ ,rhs2_Rlhs_phrase_ = 21
+ ,R_Rparallel_monitor_phrase_ = 577//start_of_rule_list + 16
+ ,rhs1_Rparallel_monitor_phrase_ = 22
+ ,rhs2_Rparallel_monitor_phrase_ = 23
+ ,R_Rrule_body_ = 578//start_of_rule_list + 18
+ ,rhs1_Rrule_body_ = 24
+ ,R_Rsubrules_ = 579//start_of_rule_list + 20
+ ,rhs1_Rsubrules_ = 25
+ ,rhs2_Rsubrules_ = 26
+ ,rhs3_Rsubrules_ = 27
+ ,R_Ropen_par_ = 580//start_of_rule_list + 22
+ ,rhs1_Ropen_par_ = 28
+ ,rhs2_Ropen_par_ = 29
+ ,R_Rclose_par_ = 581//start_of_rule_list + 24
+ ,rhs1_Rclose_par_ = 30
+ ,rhs2_Rclose_par_ = 31
+ ,R_Ropen_brace_ = 582//start_of_rule_list + 26
+ ,rhs1_Ropen_brace_ = 32
+ ,rhs2_Ropen_brace_ = 33
+ ,R_Rclose_brace_ = 583//start_of_rule_list + 28
+ ,rhs1_Rclose_brace_ = 34
+ ,rhs2_Rclose_brace_ = 35
+ ,R_Rlint_ = 584//start_of_rule_list + 30
+ ,rhs1_Rlint_ = 36
+ ,rhs2_Rlint_ = 37
+ };
+ //no of la sets = 10
+ //no of states = 64
+ Crule_def_phrase();
+ ~Crule_def_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[38];
+
+ public:
+ rule_def* rule_def_;
+
+ };
+struct Rrule_def_phrase;
+struct Rrule_cweb_k;
+struct Rid;
+struct Rad_ab_tags;
+struct Rad_ab_tag;
+struct Rrule_parameters;
+struct Rrule_parameter;
+struct Rlhs_phrase;
+struct Rparallel_monitor_phrase;
+struct Rrule_body;
+struct Rsubrules;
+struct Ropen_par;
+struct Rclose_par;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint;
+struct Rrule_def_phrase:public yacco2::CAbs_lr1_sym {
+ Rrule_def_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrule_cweb_k:public yacco2::CAbs_lr1_sym {
+ Rrule_cweb_k(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rid:public yacco2::CAbs_lr1_sym {
+ Rid(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rad_ab_tags:public yacco2::CAbs_lr1_sym {
+ Rad_ab_tags(yacco2::Parser* P);
+ public:
+};
+
+struct Rad_ab_tag:public yacco2::CAbs_lr1_sym {
+ Rad_ab_tag(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rrule_parameters:public yacco2::CAbs_lr1_sym {
+ Rrule_parameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_parameter:public yacco2::CAbs_lr1_sym {
+ Rrule_parameter(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlhs_phrase:public yacco2::CAbs_lr1_sym {
+ Rlhs_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rparallel_monitor_phrase:public yacco2::CAbs_lr1_sym {
+ Rparallel_monitor_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rrule_body:public yacco2::CAbs_lr1_sym {
+ Rrule_body(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rule_def_phrase.lex b/web/yacco2/compiler/grammars/rule_def_phrase.lex
new file mode 100644
index 0000000000..4be40138fb
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrase.lex
@@ -0,0 +1,340 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rule_def_phrase.lex
+Dates: 3 Jun 2004
+Purpose: parse a rule definition construct
+ Verifies if the symbol being defined is duplicate
+ within yacco2's symbol table.
+ Adds symbol to global symbol table.
+Output: rule_def
+ assorted errors
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+Parse a grammar's rule definition.\fbreak
+\fbreak
+Example of a rule definition to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/ruledef.txt"}
+@/
+fsm
+(fsm-id "rule_def_phrase.lex"
+,fsm-filename rule_def_phrase
+,fsm-namespace NS_rule_def_phrase
+,fsm-class Crule_def_phrase{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "t_def_delabort_tags.h"
+#include "subrules_phrase.h"
+#include "rule_lhs_phrase.h"
+#include "yacco2_stbl.h"
+#include "parallel_monitor_ph.h"
+ ***
+ user-declaration
+ public:
+ rule_def* rule_def_;
+ ***
+ op
+ rule_def_ = 0;
+ ***
+ constructor
+ rule_def_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse a grammar's rule definition.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rule_def_phrase
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrule_def_phrase (){
+ -> Rid Rlint Rad_ab_tags
+ Rlint Rrule_cweb_k Rlint
+ Ropen_par Rlint
+ Rrule_parameters
+ Rclose_par Rlint
+ Rrule_body
+ {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->bld_its_tree();
+ RSVP(fsm->rule_def_);
+ fsm->rule_def_ = 0;
+ ***
+ }
+}
+
+Rrule_cweb_k (){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ fsm->rule_def_->add_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+Rid (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->identifier()->c_str();
+ fsm->rule_def_ = new rule_def(skey);
+ rule_in_stbl* ristbl = new rule_in_stbl(*fsm->rule_def_);
+ fsm->rule_def_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*ristbl,table_entry::defed,table_entry::rule);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ristbl->stbl_idx(report_card.pos_);
+ report_card.tbl_entry_->defined_ = true;
+ ***
+ }
+ -> ||| "rule-in-stbl" NULL {// referenced created it, now set defined
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*sf->p2__->r_def()->rule_name()->c_str());
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_rule_not_in_stbl;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ if(report_card.tbl_entry_->defined_ == true){
+ CAbs_lr1_sym* sym = new Err_rule_already_defined;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_ = sf->p2__->r_def();
+ report_card.tbl_entry_->defined_ = true;
+ ***
+ }
+ -> ||| |?| NULL {// other sym. tbl type entry
+ op
+ CAbs_lr1_sym* sym = new Err_stble_has_entry_but_not_a_rule;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_rule_name_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rad_ab_tags (){
+ -> Rad_ab_tag Rlint
+ -> Rad_ab_tags Rad_ab_tag Rlint
+ ->
+}
+
+Rad_ab_tag (){
+ -> ||| "#AD" NS_t_def_delabort_tags::TH_t_def_delabort_tags {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->rule_def_->autodelete() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AD;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autodelete(true);
+ ***
+ }
+ -> ||| "#AB" NULL {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->rule_def_->autoabort() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AB;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autoabort(true);
+ ***
+ }
+}
+
+Rrule_parameters (){
+ -> // correct that epsilon works instead of inv shift
+ -> Rrule_parameter
+ -> Rrule_parameters "," Rrule_parameter
+}
+
+Rrule_parameter (){
+ -> ||| |?| NULL{
+ op
+ CAbs_lr1_sym* sym = new Err_not_lhs_pcnrl_mntr;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lhs" NS_identifier::TH_identifier Rlhs_phrase
+ -> ||| "#parallel-control-monitor" NULL Rparallel_monitor_phrase
+
+}
+
+Rlhs_phrase (){
+ -> |t| "rule-lhs-phrase" NS_rule_lhs_phrase::PROC_TH_rule_lhs_phrase {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->rule_lhs(sf->p2__);
+ ***
+ }
+ -> |t| |?| NULL{ //pass on its error
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rparallel_monitor_phrase (){
+ -> |t| "parallel-monitor-phrase" NS_parallel_monitor_ph::PROC_TH_parallel_monitor_ph {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->parallel_mntr(sf->p2__);
+ ***
+ }
+ -> |t| |?| NULL{
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rrule_body (){
+ -> Ropen_brace Rlint
+ Rsubrules Rlint
+ Rclose_brace Rlint
+}
+
+Rsubrules (){
+ -> ||| "subrules-phrase" NS_subrules_phrase::TH_subrules_phrase{
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_->subrules(sf->p2__);
+ // distribute rule def to its subrules
+ std::vector<T_subrule_def*>::iterator i = sf->p2__->subrules()->begin();
+ std::vector<T_subrule_def*>::iterator ie = sf->p2__->subrules()->end();
+ for(;i != ie;++i){
+ T_subrule_def* srd = *i;
+ srd->its_rule_def(fsm->rule_def_);
+ }
+ ***
+ }
+ -> ||| |?| NULL{
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sub_rule_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rule_def_phrasesym.cpp b/web/yacco2/compiler/grammars/rule_def_phrasesym.cpp
new file mode 100644
index 0000000000..7f25b3e6cc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrasesym.cpp
@@ -0,0 +1,587 @@
+/*
+ File: rule_def_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rule_def_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_def_phrase;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rule_def_phrase::TH_rule_def_phrase(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rule_def_phrase;
+ NS_rule_def_phrase::Crule_def_phrase Crule_def_phrase_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crule_def_phrase_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rule_def_phrase::PROC_TH_rule_def_phrase(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rule_def_phrase";
+ static bool one_time(false);
+ static NS_rule_def_phrase::Crule_def_phrase* NS_rule_def_phrase_Crule_def_phrase_(0);// parallel-parser's fsm table
+ static Parser* NS_rule_def_phrase_Crule_def_phrase_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rule_def_phrase_Crule_def_phrase_ = new NS_rule_def_phrase::Crule_def_phrase();// parallel-parser's fsm table
+ NS_rule_def_phrase_Crule_def_phrase_parser = new Parser(*NS_rule_def_phrase_Crule_def_phrase_,Caller_pp);
+ }
+ proc_parser = NS_rule_def_phrase_Crule_def_phrase_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crule_def_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrule_def_phrase_:{
+ Rrule_def_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 12;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrule_cweb_k_:{
+ Rrule_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rrule_cweb_k_:{
+ Rrule_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rrule_cweb_k_:{
+ Rrule_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rad_ab_tag_:{
+ Rad_ab_tag* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tag(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tag*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rad_ab_tag_:{
+ Rad_ab_tag* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tag(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tag*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rrule_parameters_:{
+ Rrule_parameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rrule_parameters_:{
+ Rrule_parameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rrule_parameters_:{
+ Rrule_parameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rrule_parameter_:{
+ Rrule_parameter* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrule_parameter_:{
+ Rrule_parameter* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rrule_parameter_:{
+ Rrule_parameter* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_parameter(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_parameter*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rlhs_phrase_:{
+ Rlhs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlhs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlhs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rlhs_phrase_:{
+ Rlhs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rlhs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlhs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rparallel_monitor_phrase_:{
+ Rparallel_monitor_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_monitor_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_monitor_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rparallel_monitor_phrase_:{
+ Rparallel_monitor_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rparallel_monitor_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparallel_monitor_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rrule_body_:{
+ Rrule_body* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_body(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_body*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rule_def_phrasetbl.cpp b/web/yacco2/compiler/grammars/rule_def_phrasetbl.cpp
new file mode 100644
index 0000000000..7052ddbc55
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_def_phrasetbl.cpp
@@ -0,0 +1,1361 @@
+/*
+ File: rule_def_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:22 2015
+*/
+#include "rule_def_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_def_phrase;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_bracket
+yacco2::UCHAR LA1_Crule_def_phrase[] ={
+2
+,0,17
+,6,1
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Crule_def_phrase[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// raw_open_bracket
+yacco2::UCHAR LA3_Crule_def_phrase[] ={
+2
+,0,1
+,6,1
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+// raw_comma
+yacco2::UCHAR LA4_Crule_def_phrase[] ={
+2
+,0,17
+,6,18
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+// raw_comma
+yacco2::UCHAR LA5_Crule_def_phrase[] ={
+2
+,0,1
+,6,18
+};
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA6_Crule_def_phrase[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA7_Crule_def_phrase[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA8_Crule_def_phrase[] ={
+2
+,0,1
+,16,32
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA9_Crule_def_phrase[] ={
+2
+,0,17
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA10_Crule_def_phrase[] ={
+2
+,0,17
+,16,32
+};
+extern yacco2::State S1_Crule_def_phrase;
+extern yacco2::State S2_Crule_def_phrase;
+extern yacco2::State S3_Crule_def_phrase;
+struct S3ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Crule_def_phrase S3tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S4_Crule_def_phrase;
+extern yacco2::State S5_Crule_def_phrase;
+extern yacco2::State S6_Crule_def_phrase;
+extern yacco2::State S7_Crule_def_phrase;
+extern yacco2::State S8_Crule_def_phrase;
+extern yacco2::State S9_Crule_def_phrase;
+extern yacco2::State S10_Crule_def_phrase;
+struct S10ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S10ttd_Crule_def_phrase S10tt_Crule_def_phrase = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_t_def_delabort_tags
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S11_Crule_def_phrase;
+extern yacco2::State S12_Crule_def_phrase;
+extern yacco2::State S13_Crule_def_phrase;
+extern yacco2::State S14_Crule_def_phrase;
+extern yacco2::State S15_Crule_def_phrase;
+extern yacco2::State S16_Crule_def_phrase;
+extern yacco2::State S17_Crule_def_phrase;
+extern yacco2::State S18_Crule_def_phrase;
+extern yacco2::State S19_Crule_def_phrase;
+extern yacco2::State S20_Crule_def_phrase;
+extern yacco2::State S21_Crule_def_phrase;
+struct S21ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S21ttd_Crule_def_phrase S21tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S22_Crule_def_phrase;
+extern yacco2::State S23_Crule_def_phrase;
+extern yacco2::State S24_Crule_def_phrase;
+extern yacco2::State S25_Crule_def_phrase;
+extern yacco2::State S26_Crule_def_phrase;
+extern yacco2::State S27_Crule_def_phrase;
+extern yacco2::State S28_Crule_def_phrase;
+extern yacco2::State S29_Crule_def_phrase;
+extern yacco2::State S30_Crule_def_phrase;
+extern yacco2::State S31_Crule_def_phrase;
+extern yacco2::State S32_Crule_def_phrase;
+extern yacco2::State S33_Crule_def_phrase;
+extern yacco2::State S34_Crule_def_phrase;
+extern yacco2::State S35_Crule_def_phrase;
+extern yacco2::State S36_Crule_def_phrase;
+extern yacco2::State S37_Crule_def_phrase;
+extern yacco2::State S38_Crule_def_phrase;
+extern yacco2::State S39_Crule_def_phrase;
+extern yacco2::State S40_Crule_def_phrase;
+extern yacco2::State S41_Crule_def_phrase;
+extern yacco2::State S42_Crule_def_phrase;
+extern yacco2::State S43_Crule_def_phrase;
+extern yacco2::State S44_Crule_def_phrase;
+extern yacco2::State S45_Crule_def_phrase;
+extern yacco2::State S46_Crule_def_phrase;
+struct S46ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S46ttd_Crule_def_phrase S46tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S47_Crule_def_phrase;
+extern yacco2::State S48_Crule_def_phrase;
+struct S48ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S48ttd_Crule_def_phrase S48tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_t_def_delabort_tags
+};
+extern yacco2::State S49_Crule_def_phrase;
+extern yacco2::State S50_Crule_def_phrase;
+extern yacco2::State S51_Crule_def_phrase;
+extern yacco2::State S52_Crule_def_phrase;
+extern yacco2::State S53_Crule_def_phrase;
+struct S53ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S53ttd_Crule_def_phrase S53tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S54_Crule_def_phrase;
+extern yacco2::State S55_Crule_def_phrase;
+extern yacco2::State S56_Crule_def_phrase;
+extern yacco2::State S57_Crule_def_phrase;
+extern yacco2::State S58_Crule_def_phrase;
+extern yacco2::State S59_Crule_def_phrase;
+extern yacco2::State S60_Crule_def_phrase;
+extern yacco2::State S61_Crule_def_phrase;
+extern yacco2::State S62_Crule_def_phrase;
+struct S62ttd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S62ttd_Crule_def_phrase S62tt_Crule_def_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_subrules_phrase
+};
+extern yacco2::State S63_Crule_def_phrase;
+extern yacco2::State S64_Crule_def_phrase;
+struct S1std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Crule_def_phrase S1st_Crule_def_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crule_def_phrase} // accept sym: Rrule_def_phrase
+ ,{571,(State*)&S7_Crule_def_phrase} // shift sym: Rid
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crule_def_phrase = {3,(State*)&S3_Crule_def_phrase};
+yacco2::Shift_entry S1qse_Crule_def_phrase = {0,(State*)&S2_Crule_def_phrase};
+yacco2::State S1_Crule_def_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S1st_Crule_def_phrase,0,(State_s_thread_tbl*)&S3tt_Crule_def_phrase,0,(Shift_entry*)&S1qse_Crule_def_phrase
+};
+struct S2rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crule_def_phrase S2rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs4_Rid_}
+ }// end of reduce table
+};
+yacco2::State S2_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Crule_def_phrase,0,0,0};
+struct S3std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Crule_def_phrase S3st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S4_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S5_Crule_def_phrase} // shift sym: T_identifier
+ ,{346,(State*)&S6_Crule_def_phrase} // shift sym: rule_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Crule_def_phrase = {0,(State*)&S4_Crule_def_phrase};
+yacco2::State S3_Crule_def_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Crule_def_phrase,0,0,0,(Shift_entry*)&S3qse_Crule_def_phrase
+};
+struct S4rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crule_def_phrase S4rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs3_Rid_}
+ }// end of reduce table
+};
+yacco2::State S4_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crule_def_phrase,0,0,0};
+struct S5rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crule_def_phrase S5rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs1_Rid_}
+ }// end of reduce table
+};
+yacco2::State S5_Crule_def_phrase = //State's vectored into symbol: "identifier"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crule_def_phrase,0,0,0};
+struct S6rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crule_def_phrase S6rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rid_}
+ }// end of reduce table
+};
+yacco2::State S6_Crule_def_phrase = //State's vectored into symbol: "rule-in-stbl"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crule_def_phrase,0,0,0};
+struct S7std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Crule_def_phrase S7st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S8_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S7rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crule_def_phrase S7rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Crule_def_phrase = //State's vectored into symbol: "Rid"
+{7
+,(Shift_entry*)&S7pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S7st_Crule_def_phrase,(Reduce_tbl*)&S7rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S8std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Crule_def_phrase S8st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S48_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S9_Crule_def_phrase} // shift sym: Rad_ab_tags
+ ,{573,(State*)&S51_Crule_def_phrase} // shift sym: Rad_ab_tag
+ }// end of shift table
+};
+yacco2::Shift_entry S8pse_Crule_def_phrase = {3,(State*)&S48_Crule_def_phrase};
+struct S8rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Crule_def_phrase S8rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs3_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S8_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{8
+,(Shift_entry*)&S8pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S8st_Crule_def_phrase,(Reduce_tbl*)&S8rt_Crule_def_phrase,(State_s_thread_tbl*)&S48tt_Crule_def_phrase,0,0};
+struct S9std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Crule_def_phrase S9st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S10_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S49_Crule_def_phrase} // shift sym: Rad_ab_tag
+ ,{584,(State*)&S14_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Crule_def_phrase = {3,(State*)&S10_Crule_def_phrase};
+struct S9rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crule_def_phrase S9rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Crule_def_phrase = //State's vectored into symbol: "Rad_ab_tags"
+{9
+,(Shift_entry*)&S9pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S9st_Crule_def_phrase,(Reduce_tbl*)&S9rt_Crule_def_phrase,(State_s_thread_tbl*)&S10tt_Crule_def_phrase,0,0};
+struct S10std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Crule_def_phrase S10st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {285,(State*)&S11_Crule_def_phrase} // shift sym: T_AD
+ ,{286,(State*)&S12_Crule_def_phrase} // shift sym: T_AB
+ ,{375,(State*)&S13_Crule_def_phrase} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S10_Crule_def_phrase = //State's vectored into symbol: "|||"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Crule_def_phrase,0,0,0,0};
+struct S11rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Crule_def_phrase S11rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs1_Rad_ab_tag_}
+ }// end of reduce table
+};
+yacco2::State S11_Crule_def_phrase = //State's vectored into symbol: "#AD"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Crule_def_phrase,0,0,0};
+struct S12rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Crule_def_phrase S12rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rad_ab_tag_}
+ }// end of reduce table
+};
+yacco2::State S12_Crule_def_phrase = //State's vectored into symbol: "#AB"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Crule_def_phrase,0,0,0};
+struct S13rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Crule_def_phrase S13rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S13_Crule_def_phrase = //State's vectored into symbol: "lint"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Crule_def_phrase,0,0,0};
+struct S14std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_Crule_def_phrase S14st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S53_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{570,(State*)&S15_Crule_def_phrase} // shift sym: Rrule_cweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Crule_def_phrase = {3,(State*)&S53_Crule_def_phrase};
+struct S14rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Crule_def_phrase S14rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs1_Rrule_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S14_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{14
+,(Shift_entry*)&S14pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S14st_Crule_def_phrase,(Reduce_tbl*)&S14rt_Crule_def_phrase,(State_s_thread_tbl*)&S53tt_Crule_def_phrase,0,0};
+struct S15std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Crule_def_phrase S15st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S16_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S15rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Crule_def_phrase S15rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S15_Crule_def_phrase = //State's vectored into symbol: "Rrule_cweb_k"
+{15
+,(Shift_entry*)&S15pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S15st_Crule_def_phrase,(Reduce_tbl*)&S15rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S16std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S16std_Crule_def_phrase S16st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S56_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S57_Crule_def_phrase} // shift sym: raw_open_bracket
+ ,{580,(State*)&S17_Crule_def_phrase} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S16qse_Crule_def_phrase = {0,(State*)&S56_Crule_def_phrase};
+yacco2::State S16_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Crule_def_phrase,0,0,0,(Shift_entry*)&S16qse_Crule_def_phrase
+};
+struct S17std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S17std_Crule_def_phrase S17st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S18_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S17pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S17rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Crule_def_phrase S17rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S17_Crule_def_phrase = //State's vectored into symbol: "Ropen_par"
+{17
+,(Shift_entry*)&S17pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S17st_Crule_def_phrase,(Reduce_tbl*)&S17rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S18std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S18std_Crule_def_phrase S18st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S21_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S19_Crule_def_phrase} // shift sym: Rrule_parameters
+ ,{575,(State*)&S58_Crule_def_phrase} // shift sym: Rrule_parameter
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Crule_def_phrase = {3,(State*)&S21_Crule_def_phrase};
+struct S18rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Crule_def_phrase S18rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs1_Rrule_parameters_}
+ }// end of reduce table
+};
+yacco2::State S18_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{18
+,(Shift_entry*)&S18pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S18st_Crule_def_phrase,(Reduce_tbl*)&S18rt_Crule_def_phrase,(State_s_thread_tbl*)&S21tt_Crule_def_phrase,0,0};
+struct S19std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S19std_Crule_def_phrase S19st_Crule_def_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S59_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S60_Crule_def_phrase} // shift sym: raw_close_bracket
+ ,{52,(State*)&S20_Crule_def_phrase} // shift sym: raw_comma
+ ,{581,(State*)&S34_Crule_def_phrase} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S19qse_Crule_def_phrase = {0,(State*)&S59_Crule_def_phrase};
+yacco2::State S19_Crule_def_phrase = //State's vectored into symbol: "Rrule_parameters"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Crule_def_phrase,0,0,0,(Shift_entry*)&S19qse_Crule_def_phrase
+};
+struct S20std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S20std_Crule_def_phrase S20st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S21_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S33_Crule_def_phrase} // shift sym: Rrule_parameter
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Crule_def_phrase = {3,(State*)&S21_Crule_def_phrase};
+yacco2::State S20_Crule_def_phrase = //State's vectored into symbol: ","
+{20
+,(Shift_entry*)&S20pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S20st_Crule_def_phrase,0,(State_s_thread_tbl*)&S21tt_Crule_def_phrase,0,0};
+struct S21std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S21std_Crule_def_phrase S21st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S22_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{291,(State*)&S23_Crule_def_phrase} // shift sym: T_parallel_control_monitor
+ ,{307,(State*)&S28_Crule_def_phrase} // shift sym: T_lhs
+ }// end of shift table
+};
+yacco2::Shift_entry S21qse_Crule_def_phrase = {0,(State*)&S22_Crule_def_phrase};
+yacco2::State S21_Crule_def_phrase = //State's vectored into symbol: "|||"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Crule_def_phrase,0,0,0,(Shift_entry*)&S21qse_Crule_def_phrase
+};
+struct S22rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Crule_def_phrase S22rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs1_Rrule_parameter_}
+ }// end of reduce table
+};
+yacco2::State S22_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Crule_def_phrase,0,0,0};
+struct S23std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S23std_Crule_def_phrase S23st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {7,(State*)&S24_Crule_def_phrase} // shift sym: LR1_fset_transience_operator
+ ,{577,(State*)&S27_Crule_def_phrase} // shift sym: Rparallel_monitor_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S23pcse_Crule_def_phrase = {7,(State*)&S24_Crule_def_phrase};
+yacco2::State S23_Crule_def_phrase = //State's vectored into symbol: "#parallel-control-monitor"
+{23
+,0,0,0,(Shift_entry*)&S23pcse_Crule_def_phrase,(Shift_tbl*)&S23st_Crule_def_phrase,0,0,(yacco2::Type_pc_fnct_ptr)&NS_parallel_monitor_ph::PROC_TH_parallel_monitor_ph,0};
+struct S24std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Crule_def_phrase S24st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S25_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{339,(State*)&S26_Crule_def_phrase} // shift sym: T_parallel_monitor_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S24qse_Crule_def_phrase = {0,(State*)&S25_Crule_def_phrase};
+yacco2::State S24_Crule_def_phrase = //State's vectored into symbol: "|t|"
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Crule_def_phrase,0,0,0,(Shift_entry*)&S24qse_Crule_def_phrase
+};
+struct S25rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Crule_def_phrase S25rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs2_Rparallel_monitor_phrase_}
+ }// end of reduce table
+};
+yacco2::State S25_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Crule_def_phrase,0,0,0};
+struct S26rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Crule_def_phrase S26rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs1_Rparallel_monitor_phrase_}
+ }// end of reduce table
+};
+yacco2::State S26_Crule_def_phrase = //State's vectored into symbol: "parallel-monitor-phrase"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Crule_def_phrase,0,0,0};
+struct S27rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Crule_def_phrase S27rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs3_Rrule_parameter_}
+ }// end of reduce table
+};
+yacco2::State S27_Crule_def_phrase = //State's vectored into symbol: "Rparallel_monitor_phrase"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Crule_def_phrase,0,0,0};
+struct S28std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Crule_def_phrase S28st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {7,(State*)&S29_Crule_def_phrase} // shift sym: LR1_fset_transience_operator
+ ,{576,(State*)&S32_Crule_def_phrase} // shift sym: Rlhs_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S28pcse_Crule_def_phrase = {7,(State*)&S29_Crule_def_phrase};
+yacco2::State S28_Crule_def_phrase = //State's vectored into symbol: "#lhs"
+{28
+,0,0,0,(Shift_entry*)&S28pcse_Crule_def_phrase,(Shift_tbl*)&S28st_Crule_def_phrase,0,0,(yacco2::Type_pc_fnct_ptr)&NS_rule_lhs_phrase::PROC_TH_rule_lhs_phrase,0};
+struct S29std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S29std_Crule_def_phrase S29st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S30_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{338,(State*)&S31_Crule_def_phrase} // shift sym: T_rule_lhs_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S29qse_Crule_def_phrase = {0,(State*)&S30_Crule_def_phrase};
+yacco2::State S29_Crule_def_phrase = //State's vectored into symbol: "|t|"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Crule_def_phrase,0,0,0,(Shift_entry*)&S29qse_Crule_def_phrase
+};
+struct S30rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Crule_def_phrase S30rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs2_Rlhs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S30_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Crule_def_phrase,0,0,0};
+struct S31rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Crule_def_phrase S31rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs1_Rlhs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S31_Crule_def_phrase = //State's vectored into symbol: "rule-lhs-phrase"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Crule_def_phrase,0,0,0};
+struct S32rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Crule_def_phrase S32rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs2_Rrule_parameter_}
+ }// end of reduce table
+};
+yacco2::State S32_Crule_def_phrase = //State's vectored into symbol: "Rlhs_phrase"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Crule_def_phrase,0,0,0};
+struct S33rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Crule_def_phrase S33rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs3_Rrule_parameters_}
+ }// end of reduce table
+};
+yacco2::State S33_Crule_def_phrase = //State's vectored into symbol: "Rrule_parameter"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Crule_def_phrase,0,0,0};
+struct S34std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S34std_Crule_def_phrase S34st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S35_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S34rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Crule_def_phrase S34rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S34_Crule_def_phrase = //State's vectored into symbol: "Rclose_par"
+{34
+,(Shift_entry*)&S34pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S34st_Crule_def_phrase,(Reduce_tbl*)&S34rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S35std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S35std_Crule_def_phrase S35st_Crule_def_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S36_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S37_Crule_def_phrase} // shift sym: raw_open_brace
+ ,{578,(State*)&S38_Crule_def_phrase} // shift sym: Rrule_body
+ ,{582,(State*)&S39_Crule_def_phrase} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S35qse_Crule_def_phrase = {0,(State*)&S36_Crule_def_phrase};
+yacco2::State S35_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{35
+,0,0,0,0,(Shift_tbl*)&S35st_Crule_def_phrase,0,0,0,(Shift_entry*)&S35qse_Crule_def_phrase
+};
+struct S36rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Crule_def_phrase S36rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crule_def_phrase,Crule_def_phrase::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S36_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Crule_def_phrase,0,0,0};
+struct S37rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Crule_def_phrase S37rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crule_def_phrase,Crule_def_phrase::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S37_Crule_def_phrase = //State's vectored into symbol: "{"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Crule_def_phrase,0,0,0};
+struct S38rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Crule_def_phrase S38rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs1_Rrule_def_phrase_}
+ }// end of reduce table
+};
+yacco2::State S38_Crule_def_phrase = //State's vectored into symbol: "Rrule_body"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Crule_def_phrase,0,0,0};
+struct S39std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S39std_Crule_def_phrase S39st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S40_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S39rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Crule_def_phrase S39rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S39_Crule_def_phrase = //State's vectored into symbol: "Ropen_brace"
+{39
+,(Shift_entry*)&S39pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S39st_Crule_def_phrase,(Reduce_tbl*)&S39rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S40std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S40std_Crule_def_phrase S40st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S61_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S62_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S41_Crule_def_phrase} // shift sym: Rsubrules
+ }// end of shift table
+};
+yacco2::Shift_entry S40pse_Crule_def_phrase = {3,(State*)&S62_Crule_def_phrase};
+yacco2::Shift_entry S40qse_Crule_def_phrase = {0,(State*)&S61_Crule_def_phrase};
+yacco2::State S40_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{40
+,(Shift_entry*)&S40pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S40st_Crule_def_phrase,0,(State_s_thread_tbl*)&S62tt_Crule_def_phrase,0,(Shift_entry*)&S40qse_Crule_def_phrase
+};
+struct S41std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S41std_Crule_def_phrase S41st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S42_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S41pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S41rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Crule_def_phrase S41rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S41_Crule_def_phrase = //State's vectored into symbol: "Rsubrules"
+{41
+,(Shift_entry*)&S41pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S41st_Crule_def_phrase,(Reduce_tbl*)&S41rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S42std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S42std_Crule_def_phrase S42st_Crule_def_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S43_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S44_Crule_def_phrase} // shift sym: raw_close_brace
+ ,{583,(State*)&S45_Crule_def_phrase} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S42qse_Crule_def_phrase = {0,(State*)&S43_Crule_def_phrase};
+yacco2::State S42_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{42
+,0,0,0,0,(Shift_tbl*)&S42st_Crule_def_phrase,0,0,0,(Shift_entry*)&S42qse_Crule_def_phrase
+};
+struct S43rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Crule_def_phrase S43rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S43_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Crule_def_phrase,0,0,0};
+struct S44rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Crule_def_phrase S44rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S44_Crule_def_phrase = //State's vectored into symbol: "}"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Crule_def_phrase,0,0,0};
+struct S45std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S45std_Crule_def_phrase S45st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S47_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S45pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S45rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Crule_def_phrase S45rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S45_Crule_def_phrase = //State's vectored into symbol: "Rclose_brace"
+{45
+,(Shift_entry*)&S45pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S45st_Crule_def_phrase,(Reduce_tbl*)&S45rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S46std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S46std_Crule_def_phrase S46st_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S13_Crule_def_phrase} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S46_Crule_def_phrase = //State's vectored into symbol: "|||"
+{46
+,0,0,0,0,(Shift_tbl*)&S46st_Crule_def_phrase,0,0,0,0};
+struct S47rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Crule_def_phrase S47rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_def_phrase,Crule_def_phrase::rhs1_Rrule_body_}
+ }// end of reduce table
+};
+yacco2::State S47_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Crule_def_phrase,0,0,0};
+struct S48std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S48std_Crule_def_phrase S48st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {285,(State*)&S11_Crule_def_phrase} // shift sym: T_AD
+ ,{286,(State*)&S12_Crule_def_phrase} // shift sym: T_AB
+ }// end of shift table
+};
+yacco2::State S48_Crule_def_phrase = //State's vectored into symbol: "|||"
+{48
+,0,0,0,0,(Shift_tbl*)&S48st_Crule_def_phrase,0,0,0,0};
+struct S49std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S49std_Crule_def_phrase S49st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S50_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S49pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S49rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Crule_def_phrase S49rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S49_Crule_def_phrase = //State's vectored into symbol: "Rad_ab_tag"
+{49
+,(Shift_entry*)&S49pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S49st_Crule_def_phrase,(Reduce_tbl*)&S49rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S50rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Crule_def_phrase S50rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S50_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Crule_def_phrase,0,0,0};
+struct S51std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S51std_Crule_def_phrase S51st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S46_Crule_def_phrase} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S52_Crule_def_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S51pse_Crule_def_phrase = {3,(State*)&S46_Crule_def_phrase};
+struct S51rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Crule_def_phrase S51rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S51_Crule_def_phrase = //State's vectored into symbol: "Rad_ab_tag"
+{51
+,(Shift_entry*)&S51pse_Crule_def_phrase,0,0,0,(Shift_tbl*)&S51st_Crule_def_phrase,(Reduce_tbl*)&S51rt_Crule_def_phrase,(State_s_thread_tbl*)&S46tt_Crule_def_phrase,0,0};
+struct S52rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Crule_def_phrase S52rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs1_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S52_Crule_def_phrase = //State's vectored into symbol: "Rlint"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Crule_def_phrase,0,0,0};
+struct S53std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S53std_Crule_def_phrase S53st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S54_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{372,(State*)&S55_Crule_def_phrase} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S53qse_Crule_def_phrase = {0,(State*)&S54_Crule_def_phrase};
+yacco2::State S53_Crule_def_phrase = //State's vectored into symbol: "|||"
+{53
+,0,0,0,0,(Shift_tbl*)&S53st_Crule_def_phrase,0,0,0,(Shift_entry*)&S53qse_Crule_def_phrase
+};
+struct S54rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Crule_def_phrase S54rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs3_Rrule_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S54_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Crule_def_phrase,0,0,0};
+struct S55rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Crule_def_phrase S55rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_def_phrase,Crule_def_phrase::rhs2_Rrule_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S55_Crule_def_phrase = //State's vectored into symbol: "cweb-comment"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Crule_def_phrase,0,0,0};
+struct S56rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Crule_def_phrase S56rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crule_def_phrase,Crule_def_phrase::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S56_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Crule_def_phrase,0,0,0};
+struct S57rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Crule_def_phrase S57rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crule_def_phrase,Crule_def_phrase::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S57_Crule_def_phrase = //State's vectored into symbol: "("
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Crule_def_phrase,0,0,0};
+struct S58rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Crule_def_phrase S58rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_def_phrase,Crule_def_phrase::rhs2_Rrule_parameters_}
+ }// end of reduce table
+};
+yacco2::State S58_Crule_def_phrase = //State's vectored into symbol: "Rrule_parameter"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Crule_def_phrase,0,0,0};
+struct S59rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Crule_def_phrase S59rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Crule_def_phrase,Crule_def_phrase::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S59_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Crule_def_phrase,0,0,0};
+struct S60rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Crule_def_phrase S60rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Crule_def_phrase,Crule_def_phrase::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S60_Crule_def_phrase = //State's vectored into symbol: ")"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Crule_def_phrase,0,0,0};
+struct S61rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Crule_def_phrase S61rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Crule_def_phrase,Crule_def_phrase::rhs3_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S61_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Crule_def_phrase,0,0,0};
+struct S62std_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S62std_Crule_def_phrase S62st_Crule_def_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S63_Crule_def_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{343,(State*)&S64_Crule_def_phrase} // shift sym: T_subrules_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S62qse_Crule_def_phrase = {0,(State*)&S63_Crule_def_phrase};
+yacco2::State S62_Crule_def_phrase = //State's vectored into symbol: "|||"
+{62
+,0,0,0,0,(Shift_tbl*)&S62st_Crule_def_phrase,0,0,0,(Shift_entry*)&S62qse_Crule_def_phrase
+};
+struct S63rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Crule_def_phrase S63rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Crule_def_phrase,Crule_def_phrase::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S63_Crule_def_phrase = //State's vectored into symbol: "|?|"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Crule_def_phrase,0,0,0};
+struct S64rtd_Crule_def_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Crule_def_phrase S64rt_Crule_def_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Crule_def_phrase,Crule_def_phrase::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S64_Crule_def_phrase = //State's vectored into symbol: "subrules-phrase"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Crule_def_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrase.cpp b/web/yacco2/compiler/grammars/rule_lhs_phrase.cpp
new file mode 100644
index 0000000000..b748a5ad2d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrase.cpp
@@ -0,0 +1,779 @@
+/*
+ File: rule_lhs_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rule_lhs_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_lhs_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 16;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+}
+ Crule_lhs_phrase::
+ Crule_lhs_phrase()
+ :yacco2::CAbs_fsm
+ ("rule_lhs_phrase.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse a rule's ``lhs'' directive."
+ ,"Fri Jan 30 18:55:23 2015 "
+ ,S1_Crule_lhs_phrase){
+
+ rule_lhs_phrase_ = 0;
+
+ }
+
+Crule_lhs_phrase::~Crule_lhs_phrase(){
+
+ for(int x = 0;x < 16;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crule_lhs_phrase::failed(){
+ return false;
+ }
+ void Crule_lhs_phrase::op(){
+ if(rule_lhs_phrase_ != 0){
+ delete rule_lhs_phrase_;
+ rule_lhs_phrase_ = 0;
+ }
+ rule_lhs_phrase_ = new T_rule_lhs_phrase;
+ rule_lhs_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rule_lhs_phrase_);
+ rule_lhs_phrase_->phrase_tree(t);
+
+}
+int Crule_lhs_phrase::rhs_to_rules_mapping_[39] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,4 // subrule 11 for rule 5
+ ,4 // subrule 12 for rule 5
+ ,4 // subrule 13 for rule 5
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+ ,6 // subrule 16 for rule 7
+ ,6 // subrule 17 for rule 7
+ ,7 // subrule 18 for rule 8
+ ,7 // subrule 19 for rule 8
+ ,8 // subrule 20 for rule 9
+ ,8 // subrule 21 for rule 9
+ ,9 // subrule 22 for rule 10
+ ,10 // subrule 23 for rule 11
+ ,10 // subrule 24 for rule 11
+ ,10 // subrule 25 for rule 11
+ ,10 // subrule 26 for rule 11
+ ,10 // subrule 27 for rule 11
+ ,10 // subrule 28 for rule 11
+ ,11 // subrule 29 for rule 12
+ ,11 // subrule 30 for rule 12
+ ,12 // subrule 31 for rule 13
+ ,12 // subrule 32 for rule 13
+ ,13 // subrule 33 for rule 14
+ ,14 // subrule 34 for rule 15
+ ,14 // subrule 35 for rule 15
+ ,14 // subrule 36 for rule 15
+ ,15 // subrule 37 for rule 16
+ ,15 // subrule 38 for rule 16
+};
+
+ void Crule_lhs_phrase::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ }
+ rule_lhs_phrase_->add_directive_to_lhs(Dir,parser__);
+ }
+
+Rrule_lhs_phrase::Rrule_lhs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_lhs_phrase",0,Crule_lhs_phrase::R_Rrule_lhs_phrase_,P,false,false){
+}
+
+void Rrule_lhs_phrase::sr1(){
+
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rule_lhs_phrase_);
+ fsm->rule_lhs_phrase_ = 0;
+
+}
+
+Rlhs::Rlhs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlhs",0,Crule_lhs_phrase::R_Rlhs_,P,false,false){
+}
+
+void Rlhs::sr2(){
+
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+Rpotential_directives::Rpotential_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_directives",0,Crule_lhs_phrase::R_Rpotential_directives_,P,false,false){
+}
+
+Rmust_directive_phrase::Rmust_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive_phrase",0,Crule_lhs_phrase::R_Rmust_directive_phrase_,P,false,false){
+}
+
+void Rmust_directive_phrase::sr1(){
+ struct SF{
+ Rdirective_cweb_k* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rmust_directive* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rmust_directive::Rmust_directive(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive",0,Crule_lhs_phrase::R_Rmust_directive_,P,false,false){
+}
+
+void Rmust_directive::ctor(){
+
+ directive_ = 0;
+
+}
+void Rmust_directive::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rmust_directive::sr7(){
+
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Crule_lhs_phrase::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmaybe_more_directives::Rmaybe_more_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_more_directives",0,Crule_lhs_phrase::R_Rmaybe_more_directives_,P,false,false){
+}
+
+Rmaybe_directive_phrases::Rmaybe_directive_phrases(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrases",0,Crule_lhs_phrase::R_Rmaybe_directive_phrases_,P,false,false){
+}
+
+Rmaybe_directive_phrase::Rmaybe_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrase",0,Crule_lhs_phrase::R_Rmaybe_directive_phrase_,P,false,false){
+}
+
+void Rmaybe_directive_phrase::sr1(){
+ struct SF{
+ Rcweb_k* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rdirective* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+void Rmaybe_directive_phrase::sr2(){
+ struct SF{
+ Rdirective* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rsyntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective_phrase::Rdirective_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_phrase",0,Crule_lhs_phrase::R_Rdirective_phrase_,P,false,false){
+}
+
+void Rdirective_phrase::sr1(){
+ struct SF{
+ Rcweb_k* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rdirective* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Crule_lhs_phrase::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::ctor(){
+
+ directive_ = 0;
+
+}
+void Rdirective::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsyntax_code::Rsyntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsyntax_code",0,Crule_lhs_phrase::R_Rsyntax_code_,P,false,false){
+}
+
+void Rsyntax_code::ctor(){
+
+ syntax_code_ = 0;
+
+}
+void Rsyntax_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = sf->p2__;
+
+}
+
+void Rsyntax_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Crule_lhs_phrase::R_Rlint_,P,false,false){
+}
+
+Rcweb_marker::Rcweb_marker(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_marker",0,Crule_lhs_phrase::R_Rcweb_marker_,P,false,false){
+}
+
+void Rcweb_marker::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rcweb_marker::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+
+}
+
+Rdirective_cweb_k::Rdirective_cweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_cweb_k",0,Crule_lhs_phrase::R_Rdirective_cweb_k_,P,false,false){
+}
+
+void Rdirective_cweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rdirective_cweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+
+}
+
+void Rdirective_cweb_k::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rcweb_k::Rcweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_k",0,Crule_lhs_phrase::R_Rcweb_k_,P,false,false){
+}
+
+void Rcweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rcweb_k::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rcweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrase.fsc b/web/yacco2/compiler/grammars/rule_lhs_phrase.fsc
new file mode 100644
index 0000000000..edca8d0ebf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrase.fsc
@@ -0,0 +1,24 @@
+/*
+ File: rule_lhs_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+transitive n
+grammar-name "rule_lhs_phrase"
+name-space "NS_rule_lhs_phrase"
+thread-name "TH_rule_lhs_phrase"
+monolithic n
+file-name "rule_lhs_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ T_lhs
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+end-list-of-used-threads
+fsm-comments
+"Parse a rule's ``lhs'' directive."
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrase.h b/web/yacco2/compiler/grammars/rule_lhs_phrase.h
new file mode 100644
index 0000000000..8a87283e5a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrase.h
@@ -0,0 +1,261 @@
+/*
+ File: rule_lhs_phrase.h
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#ifndef __rule_lhs_phrase_h__
+#define __rule_lhs_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+ using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+
+extern yacco2::Thread_entry ITH_rule_lhs_phrase;
+
+extern yacco2::State S1_Crule_lhs_phrase;
+namespace NS_rule_lhs_phrase {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rule_lhs_phrase(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rule_lhs_phrase(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[16];
+};
+class Crule_lhs_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrule_lhs_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrule_lhs_phrase_ = 1
+ ,R_Rlhs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rlhs_ = 2
+ ,rhs2_Rlhs_ = 3
+ ,R_Rpotential_directives_ = 571//start_of_rule_list + 4
+ ,rhs1_Rpotential_directives_ = 4
+ ,rhs2_Rpotential_directives_ = 5
+ ,R_Rmust_directive_phrase_ = 572//start_of_rule_list + 6
+ ,rhs1_Rmust_directive_phrase_ = 6
+ ,R_Rmust_directive_ = 573//start_of_rule_list + 8
+ ,rhs1_Rmust_directive_ = 7
+ ,rhs2_Rmust_directive_ = 8
+ ,rhs3_Rmust_directive_ = 9
+ ,rhs4_Rmust_directive_ = 10
+ ,rhs5_Rmust_directive_ = 11
+ ,rhs6_Rmust_directive_ = 12
+ ,rhs7_Rmust_directive_ = 13
+ ,R_Rclose_brace_ = 574//start_of_rule_list + 10
+ ,rhs1_Rclose_brace_ = 14
+ ,rhs2_Rclose_brace_ = 15
+ ,R_Rmaybe_more_directives_ = 575//start_of_rule_list + 12
+ ,rhs1_Rmaybe_more_directives_ = 16
+ ,rhs2_Rmaybe_more_directives_ = 17
+ ,R_Rmaybe_directive_phrases_ = 576//start_of_rule_list + 14
+ ,rhs1_Rmaybe_directive_phrases_ = 18
+ ,rhs2_Rmaybe_directive_phrases_ = 19
+ ,R_Rmaybe_directive_phrase_ = 577//start_of_rule_list + 16
+ ,rhs1_Rmaybe_directive_phrase_ = 20
+ ,rhs2_Rmaybe_directive_phrase_ = 21
+ ,R_Rdirective_phrase_ = 578//start_of_rule_list + 18
+ ,rhs1_Rdirective_phrase_ = 22
+ ,R_Rdirective_ = 579//start_of_rule_list + 20
+ ,rhs1_Rdirective_ = 23
+ ,rhs2_Rdirective_ = 24
+ ,rhs3_Rdirective_ = 25
+ ,rhs4_Rdirective_ = 26
+ ,rhs5_Rdirective_ = 27
+ ,rhs6_Rdirective_ = 28
+ ,R_Rsyntax_code_ = 580//start_of_rule_list + 22
+ ,rhs1_Rsyntax_code_ = 29
+ ,rhs2_Rsyntax_code_ = 30
+ ,R_Rlint_ = 581//start_of_rule_list + 24
+ ,rhs1_Rlint_ = 31
+ ,rhs2_Rlint_ = 32
+ ,R_Rcweb_marker_ = 582//start_of_rule_list + 26
+ ,rhs1_Rcweb_marker_ = 33
+ ,R_Rdirective_cweb_k_ = 583//start_of_rule_list + 28
+ ,rhs1_Rdirective_cweb_k_ = 34
+ ,rhs2_Rdirective_cweb_k_ = 35
+ ,rhs3_Rdirective_cweb_k_ = 36
+ ,R_Rcweb_k_ = 584//start_of_rule_list + 30
+ ,rhs1_Rcweb_k_ = 37
+ ,rhs2_Rcweb_k_ = 38
+ };
+ //no of la sets = 6
+ //no of states = 56
+ Crule_lhs_phrase();
+ ~Crule_lhs_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[39];
+
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_rule_lhs_phrase* rule_lhs_phrase_;
+
+ };
+struct Rrule_lhs_phrase;
+struct Rlhs;
+struct Rpotential_directives;
+struct Rmust_directive_phrase;
+struct Rmust_directive;
+struct Rclose_brace;
+struct Rmaybe_more_directives;
+struct Rmaybe_directive_phrases;
+struct Rmaybe_directive_phrase;
+struct Rdirective_phrase;
+struct Rdirective;
+struct Rsyntax_code;
+struct Rlint;
+struct Rcweb_marker;
+struct Rdirective_cweb_k;
+struct Rcweb_k;
+struct Rrule_lhs_phrase:public yacco2::CAbs_lr1_sym {
+ Rrule_lhs_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlhs:public yacco2::CAbs_lr1_sym {
+ Rlhs(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rpotential_directives:public yacco2::CAbs_lr1_sym {
+ Rpotential_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmust_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmust_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rmust_directive:public yacco2::CAbs_lr1_sym {
+ Rmust_directive(yacco2::Parser* P);
+ void ctor();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rmaybe_more_directives:public yacco2::CAbs_lr1_sym {
+ Rmaybe_more_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrases:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrases(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rdirective_phrase:public yacco2::CAbs_lr1_sym {
+ Rdirective_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ void ctor();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rsyntax_code:public yacco2::CAbs_lr1_sym {
+ Rsyntax_code(yacco2::Parser* P);
+ void ctor();
+
+ T_syntax_code* syntax_code_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rcweb_marker:public yacco2::CAbs_lr1_sym {
+ Rcweb_marker(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr1();
+};
+
+struct Rdirective_cweb_k:public yacco2::CAbs_lr1_sym {
+ Rdirective_cweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rcweb_k:public yacco2::CAbs_lr1_sym {
+ Rcweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrase.lex b/web/yacco2/compiler/grammars/rule_lhs_phrase.lex
new file mode 100644
index 0000000000..f5bc58b9c3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrase.lex
@@ -0,0 +1,424 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rule_lhs_phrase.lex
+Dates: 3 Jun 2004
+Purpose: parse rule's lhs construct
+Output: T_rule_lhs_phrase
+ assorted errors
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rule_lhs_phrase| Thread.\fbreak
+Parse rule's lhs construct.\fbreak
+\fbreak
+Example of a rule's lhs to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/rulelhs.txt"}
+This thread is a ``chained procedure call''.
+@/
+fsm
+(fsm-id "rule_lhs_phrase.lex"
+,fsm-filename rule_lhs_phrase
+,fsm-namespace NS_rule_lhs_phrase
+,fsm-class Crule_lhs_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+
+#include "identifier.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+ ***
+ user-declaration
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_rule_lhs_phrase* rule_lhs_phrase_;
+ ***
+ user-implementation
+ void Crule_lhs_phrase::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ return;
+ }
+ }
+ rule_lhs_phrase_->add_directive_to_lhs(Dir,parser__);
+ }
+ ***
+ op
+ if(rule_lhs_phrase_ != 0){
+ delete rule_lhs_phrase_;
+ rule_lhs_phrase_ = 0;
+ }
+ rule_lhs_phrase_ = new T_rule_lhs_phrase;
+ rule_lhs_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rule_lhs_phrase_);
+ rule_lhs_phrase_->phrase_tree(t);
+ ***
+ constructor
+ rule_lhs_phrase_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse a rule's ``lhs'' directive.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rule_lhs_phrase
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrule_lhs_phrase (){
+ -> "#lhs"
+ Rlint Rpotential_directives Rlint {
+ op
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rule_lhs_phrase_);
+ fsm->rule_lhs_phrase_ = 0;
+ ***
+ }
+}
+
+Rlhs (){
+ -> ||| "#lhs" NS_identifier::TH_identifier
+ -> ||| |?| NULL{
+ op
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+}
+
+Rpotential_directives (){
+ -> |.| // no syntax code: end of subsule
+ -> "{" Rlint Rmust_directive_phrase Rmaybe_more_directives Rclose_brace Rlint
+}
+
+Rmust_directive_phrase (){
+ -> Rdirective_cweb_k Rlint Rmust_directive Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rmust_directive (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ constructor
+ directive_ = 0;
+ ***
+ }
+){
+ -> ||| "#user-declaration" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-implementation" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#constructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#destructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#op" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rmaybe_more_directives (){
+ ->
+ -> Rmaybe_directive_phrases
+}
+
+Rmaybe_directive_phrases (){
+ -> Rmaybe_directive_phrase
+ -> Rmaybe_directive_phrases Rmaybe_directive_phrase
+}
+
+Rmaybe_directive_phrase (){
+ -> Rcweb_k Rlint Rdirective Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+ -> Rdirective Rsyntax_code Rlint {
+ op
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective_phrase (){
+ -> Rcweb_k Rlint Rdirective Rsyntax_code Rlint {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0)
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ Crule_lhs_phrase* fsm = (Crule_lhs_phrase*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+
+Rdirective (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ constructor
+ directive_ = 0;
+ ***
+ }
+){
+ -> ||| "#user-declaration" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-implementation" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#constructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#destructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#op" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+
+Rsyntax_code (
+lhs {
+ user-declaration
+ T_syntax_code* syntax_code_;
+ ***
+ constructor
+ syntax_code_ = 0;
+ ***
+ }
+){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ syntax_code_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL { // catcher in the Rye? These are errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Rcweb_marker (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+}
+){
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ ***
+ }
+}
+
+Rdirective_cweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rcweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrasesym.cpp b/web/yacco2/compiler/grammars/rule_lhs_phrasesym.cpp
new file mode 100644
index 0000000000..fa9ff7534b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrasesym.cpp
@@ -0,0 +1,628 @@
+/*
+ File: rule_lhs_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rule_lhs_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_lhs_phrase;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rule_lhs_phrase::TH_rule_lhs_phrase(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rule_lhs_phrase;
+ NS_rule_lhs_phrase::Crule_lhs_phrase Crule_lhs_phrase_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crule_lhs_phrase_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rule_lhs_phrase::PROC_TH_rule_lhs_phrase(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rule_lhs_phrase";
+ static bool one_time(false);
+ static NS_rule_lhs_phrase::Crule_lhs_phrase* NS_rule_lhs_phrase_Crule_lhs_phrase_(0);// parallel-parser's fsm table
+ static Parser* NS_rule_lhs_phrase_Crule_lhs_phrase_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rule_lhs_phrase_Crule_lhs_phrase_ = new NS_rule_lhs_phrase::Crule_lhs_phrase();// parallel-parser's fsm table
+ NS_rule_lhs_phrase_Crule_lhs_phrase_parser = new Parser(*NS_rule_lhs_phrase_Crule_lhs_phrase_,Caller_pp);
+ }
+ proc_parser = NS_rule_lhs_phrase_Crule_lhs_phrase_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crule_lhs_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrule_lhs_phrase_:{
+ Rrule_lhs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_lhs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_lhs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rlhs_:{
+ Rlhs* sym;
+ if(re->rule_ == 0){
+ sym = new Rlhs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlhs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlhs_:{
+ Rlhs* sym;
+ if(re->rule_ == 0){
+ sym = new Rlhs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlhs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Rmust_directive_phrase_:{
+ Rmust_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr7();
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rdirective_phrase_:{
+ Rdirective_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs1_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rcweb_marker_:{
+ Rcweb_marker* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_marker(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_marker*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_cweb_k_:{
+ Rdirective_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rule_lhs_phrasetbl.cpp b/web/yacco2/compiler/grammars/rule_lhs_phrasetbl.cpp
new file mode 100644
index 0000000000..f9d0b0b4fc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rule_lhs_phrasetbl.cpp
@@ -0,0 +1,1176 @@
+/*
+ File: rule_lhs_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rule_lhs_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rule_lhs_phrase;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA1_Crule_lhs_phrase[] ={
+2
+,0,32
+,16,8
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Crule_lhs_phrase[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA3_Crule_lhs_phrase[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA4_Crule_lhs_phrase[] ={
+2
+,0,1
+,16,32
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Crule_lhs_phrase[] ={
+2
+,0,17
+,16,32
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA6_Crule_lhs_phrase[] ={
+1
+,0,16
+};
+extern yacco2::State S1_Crule_lhs_phrase;
+extern yacco2::State S2_Crule_lhs_phrase;
+extern yacco2::State S3_Crule_lhs_phrase;
+extern yacco2::State S4_Crule_lhs_phrase;
+extern yacco2::State S5_Crule_lhs_phrase;
+extern yacco2::State S6_Crule_lhs_phrase;
+extern yacco2::State S7_Crule_lhs_phrase;
+extern yacco2::State S8_Crule_lhs_phrase;
+extern yacco2::State S9_Crule_lhs_phrase;
+extern yacco2::State S10_Crule_lhs_phrase;
+extern yacco2::State S11_Crule_lhs_phrase;
+extern yacco2::State S12_Crule_lhs_phrase;
+struct S12ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S12ttd_Crule_lhs_phrase S12tt_Crule_lhs_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S13_Crule_lhs_phrase;
+extern yacco2::State S14_Crule_lhs_phrase;
+extern yacco2::State S15_Crule_lhs_phrase;
+extern yacco2::State S16_Crule_lhs_phrase;
+extern yacco2::State S17_Crule_lhs_phrase;
+struct S17ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S17ttd_Crule_lhs_phrase S17tt_Crule_lhs_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S18_Crule_lhs_phrase;
+extern yacco2::State S19_Crule_lhs_phrase;
+extern yacco2::State S20_Crule_lhs_phrase;
+extern yacco2::State S21_Crule_lhs_phrase;
+extern yacco2::State S22_Crule_lhs_phrase;
+extern yacco2::State S23_Crule_lhs_phrase;
+struct S23ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S23ttd_Crule_lhs_phrase S23tt_Crule_lhs_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S24_Crule_lhs_phrase;
+extern yacco2::State S25_Crule_lhs_phrase;
+extern yacco2::State S26_Crule_lhs_phrase;
+extern yacco2::State S27_Crule_lhs_phrase;
+extern yacco2::State S28_Crule_lhs_phrase;
+struct S28ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S28ttd_Crule_lhs_phrase S28tt_Crule_lhs_phrase = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S29_Crule_lhs_phrase;
+extern yacco2::State S30_Crule_lhs_phrase;
+extern yacco2::State S31_Crule_lhs_phrase;
+extern yacco2::State S32_Crule_lhs_phrase;
+extern yacco2::State S33_Crule_lhs_phrase;
+extern yacco2::State S34_Crule_lhs_phrase;
+extern yacco2::State S35_Crule_lhs_phrase;
+extern yacco2::State S36_Crule_lhs_phrase;
+extern yacco2::State S37_Crule_lhs_phrase;
+extern yacco2::State S38_Crule_lhs_phrase;
+extern yacco2::State S39_Crule_lhs_phrase;
+extern yacco2::State S40_Crule_lhs_phrase;
+extern yacco2::State S41_Crule_lhs_phrase;
+extern yacco2::State S42_Crule_lhs_phrase;
+extern yacco2::State S43_Crule_lhs_phrase;
+extern yacco2::State S44_Crule_lhs_phrase;
+extern yacco2::State S45_Crule_lhs_phrase;
+extern yacco2::State S46_Crule_lhs_phrase;
+extern yacco2::State S47_Crule_lhs_phrase;
+extern yacco2::State S48_Crule_lhs_phrase;
+extern yacco2::State S49_Crule_lhs_phrase;
+struct S49ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S49ttd_Crule_lhs_phrase S49tt_Crule_lhs_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S50_Crule_lhs_phrase;
+extern yacco2::State S51_Crule_lhs_phrase;
+extern yacco2::State S52_Crule_lhs_phrase;
+extern yacco2::State S53_Crule_lhs_phrase;
+extern yacco2::State S54_Crule_lhs_phrase;
+extern yacco2::State S55_Crule_lhs_phrase;
+extern yacco2::State S56_Crule_lhs_phrase;
+struct S56ttd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S56ttd_Crule_lhs_phrase S56tt_Crule_lhs_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+struct S1std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Crule_lhs_phrase S1st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {307,(State*)&S2_Crule_lhs_phrase} // shift sym: T_lhs
+ ,{569,(State*)&S1_Crule_lhs_phrase} // accept sym: Rrule_lhs_phrase
+ }// end of shift table
+};
+yacco2::State S1_Crule_lhs_phrase = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Crule_lhs_phrase,0,0,0,0};
+struct S2std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Crule_lhs_phrase S2st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S3_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S2pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S2rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crule_lhs_phrase S2rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S2_Crule_lhs_phrase = //State's vectored into symbol: "#lhs"
+{2
+,(Shift_entry*)&S2pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S2st_Crule_lhs_phrase,(Reduce_tbl*)&S2rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S3std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Crule_lhs_phrase S3st_Crule_lhs_phrase = {
+ 3
+ ,
+ {// start of table
+ {5,(State*)&S4_Crule_lhs_phrase} // shift sym: LR1_invisible_shift_operator
+ ,{131,(State*)&S5_Crule_lhs_phrase} // shift sym: raw_open_brace
+ ,{571,(State*)&S15_Crule_lhs_phrase} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Crule_lhs_phrase = {5,(State*)&S4_Crule_lhs_phrase};
+yacco2::State S3_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{3
+,0,0,(Shift_entry*)&S3ise_Crule_lhs_phrase
+,0,(Shift_tbl*)&S3st_Crule_lhs_phrase,0,0,0,0};
+struct S4rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crule_lhs_phrase S4rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S4_Crule_lhs_phrase = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crule_lhs_phrase,0,0,0};
+struct S5std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Crule_lhs_phrase S5st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S6_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S5rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crule_lhs_phrase S5rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Crule_lhs_phrase = //State's vectored into symbol: "{"
+{5
+,(Shift_entry*)&S5pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S5st_Crule_lhs_phrase,(Reduce_tbl*)&S5rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S6std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Crule_lhs_phrase S6st_Crule_lhs_phrase = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S17_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S7_Crule_lhs_phrase} // shift sym: Rmust_directive_phrase
+ ,{583,(State*)&S20_Crule_lhs_phrase} // shift sym: Rdirective_cweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Crule_lhs_phrase = {3,(State*)&S17_Crule_lhs_phrase};
+struct S6rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crule_lhs_phrase S6rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S6_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{6
+,(Shift_entry*)&S6pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S6st_Crule_lhs_phrase,(Reduce_tbl*)&S6rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S17tt_Crule_lhs_phrase,0,0};
+struct S7std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S7std_Crule_lhs_phrase S7st_Crule_lhs_phrase = {
+ 6
+ ,
+ {// start of table
+ {3,(State*)&S28_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S8_Crule_lhs_phrase} // shift sym: Rmaybe_more_directives
+ ,{576,(State*)&S37_Crule_lhs_phrase} // shift sym: Rmaybe_directive_phrases
+ ,{577,(State*)&S47_Crule_lhs_phrase} // shift sym: Rmaybe_directive_phrase
+ ,{579,(State*)&S39_Crule_lhs_phrase} // shift sym: Rdirective
+ ,{584,(State*)&S42_Crule_lhs_phrase} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Crule_lhs_phrase = {3,(State*)&S28_Crule_lhs_phrase};
+struct S7rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crule_lhs_phrase S7rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rmaybe_more_directives_}
+ }// end of reduce table
+};
+yacco2::State S7_Crule_lhs_phrase = //State's vectored into symbol: "Rmust_directive_phrase"
+{7
+,(Shift_entry*)&S7pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S7st_Crule_lhs_phrase,(Reduce_tbl*)&S7rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S28tt_Crule_lhs_phrase,0,0};
+struct S8std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Crule_lhs_phrase S8st_Crule_lhs_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S9_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S10_Crule_lhs_phrase} // shift sym: raw_close_brace
+ ,{574,(State*)&S11_Crule_lhs_phrase} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Crule_lhs_phrase = {0,(State*)&S9_Crule_lhs_phrase};
+yacco2::State S8_Crule_lhs_phrase = //State's vectored into symbol: "Rmaybe_more_directives"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Crule_lhs_phrase,0,0,0,(Shift_entry*)&S8qse_Crule_lhs_phrase
+};
+struct S9rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crule_lhs_phrase S9rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S9_Crule_lhs_phrase = //State's vectored into symbol: "|?|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Crule_lhs_phrase,0,0,0};
+struct S10rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Crule_lhs_phrase S10rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S10_Crule_lhs_phrase = //State's vectored into symbol: "}"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Crule_lhs_phrase,0,0,0};
+struct S11std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Crule_lhs_phrase S11st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S14_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S11rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Crule_lhs_phrase S11rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Crule_lhs_phrase = //State's vectored into symbol: "Rclose_brace"
+{11
+,(Shift_entry*)&S11pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S11st_Crule_lhs_phrase,(Reduce_tbl*)&S11rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S12std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Crule_lhs_phrase S12st_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S13_Crule_lhs_phrase} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S12_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Crule_lhs_phrase,0,0,0,0};
+struct S13rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Crule_lhs_phrase S13rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S13_Crule_lhs_phrase = //State's vectored into symbol: "lint"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Crule_lhs_phrase,0,0,0};
+struct S14rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Crule_lhs_phrase S14rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S14_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Crule_lhs_phrase,0,0,0};
+struct S15std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Crule_lhs_phrase S15st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S16_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S15rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Crule_lhs_phrase S15rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S15_Crule_lhs_phrase = //State's vectored into symbol: "Rpotential_directives"
+{15
+,(Shift_entry*)&S15pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S15st_Crule_lhs_phrase,(Reduce_tbl*)&S15rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S16rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Crule_lhs_phrase S16rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rrule_lhs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S16_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Crule_lhs_phrase,0,0,0};
+struct S17std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S17std_Crule_lhs_phrase S17st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {372,(State*)&S18_Crule_lhs_phrase} // shift sym: T_cweb_comment
+ ,{396,(State*)&S19_Crule_lhs_phrase} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::State S17_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Crule_lhs_phrase,0,0,0,0};
+struct S18rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Crule_lhs_phrase S18rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S18_Crule_lhs_phrase = //State's vectored into symbol: "cweb-comment"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Crule_lhs_phrase,0,0,0};
+struct S19rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Crule_lhs_phrase S19rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_lhs_phrase,Crule_lhs_phrase::rhs3_Rdirective_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S19_Crule_lhs_phrase = //State's vectored into symbol: "comment-overrun"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Crule_lhs_phrase,0,0,0};
+struct S20std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S20std_Crule_lhs_phrase S20st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S21_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S20rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Crule_lhs_phrase S20rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S20_Crule_lhs_phrase = //State's vectored into symbol: "Rdirective_cweb_k"
+{20
+,(Shift_entry*)&S20pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S20st_Crule_lhs_phrase,(Reduce_tbl*)&S20rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S21std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S21std_Crule_lhs_phrase S21st_Crule_lhs_phrase = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S48_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S49_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S22_Crule_lhs_phrase} // shift sym: Rmust_directive
+ }// end of shift table
+};
+yacco2::Shift_entry S21pse_Crule_lhs_phrase = {3,(State*)&S49_Crule_lhs_phrase};
+yacco2::Shift_entry S21qse_Crule_lhs_phrase = {0,(State*)&S48_Crule_lhs_phrase};
+yacco2::State S21_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{21
+,(Shift_entry*)&S21pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S21st_Crule_lhs_phrase,0,(State_s_thread_tbl*)&S49tt_Crule_lhs_phrase,0,(Shift_entry*)&S21qse_Crule_lhs_phrase
+};
+struct S22std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S22std_Crule_lhs_phrase S22st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S23_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S26_Crule_lhs_phrase} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S22pse_Crule_lhs_phrase = {3,(State*)&S23_Crule_lhs_phrase};
+yacco2::State S22_Crule_lhs_phrase = //State's vectored into symbol: "Rmust_directive"
+{22
+,(Shift_entry*)&S22pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S22st_Crule_lhs_phrase,0,(State_s_thread_tbl*)&S23tt_Crule_lhs_phrase,0,0};
+struct S23std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S23std_Crule_lhs_phrase S23st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S24_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S25_Crule_lhs_phrase} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S23qse_Crule_lhs_phrase = {0,(State*)&S24_Crule_lhs_phrase};
+yacco2::State S23_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Crule_lhs_phrase,0,0,0,(Shift_entry*)&S23qse_Crule_lhs_phrase
+};
+struct S24rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Crule_lhs_phrase S24rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S24_Crule_lhs_phrase = //State's vectored into symbol: "|?|"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Crule_lhs_phrase,0,0,0};
+struct S25rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Crule_lhs_phrase S25rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S25_Crule_lhs_phrase = //State's vectored into symbol: "syntax-code"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Crule_lhs_phrase,0,0,0};
+struct S26std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_Crule_lhs_phrase S26st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S27_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S26rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Crule_lhs_phrase S26rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S26_Crule_lhs_phrase = //State's vectored into symbol: "Rsyntax_code"
+{26
+,(Shift_entry*)&S26pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S26st_Crule_lhs_phrase,(Reduce_tbl*)&S26rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S27rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Crule_lhs_phrase S27rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rmust_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S27_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Crule_lhs_phrase,0,0,0};
+struct S28std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[8];
+};
+S28std_Crule_lhs_phrase S28st_Crule_lhs_phrase = {
+ 8
+ ,
+ {// start of table
+ {0,(State*)&S29_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S30_Crule_lhs_phrase} // shift sym: T_user_declaration
+ ,{311,(State*)&S31_Crule_lhs_phrase} // shift sym: T_constructor
+ ,{312,(State*)&S32_Crule_lhs_phrase} // shift sym: T_destructor
+ ,{313,(State*)&S33_Crule_lhs_phrase} // shift sym: T_op
+ ,{315,(State*)&S34_Crule_lhs_phrase} // shift sym: T_user_implementation
+ ,{372,(State*)&S35_Crule_lhs_phrase} // shift sym: T_cweb_comment
+ ,{396,(State*)&S36_Crule_lhs_phrase} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::Shift_entry S28qse_Crule_lhs_phrase = {0,(State*)&S29_Crule_lhs_phrase};
+yacco2::State S28_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{28
+,0,0,0,0,(Shift_tbl*)&S28st_Crule_lhs_phrase,0,0,0,(Shift_entry*)&S28qse_Crule_lhs_phrase
+};
+struct S29rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Crule_lhs_phrase S29rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S29_Crule_lhs_phrase = //State's vectored into symbol: "|?|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Crule_lhs_phrase,0,0,0};
+struct S30rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Crule_lhs_phrase S30rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S30_Crule_lhs_phrase = //State's vectored into symbol: "#user-declaration"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Crule_lhs_phrase,0,0,0};
+struct S31rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Crule_lhs_phrase S31rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S31_Crule_lhs_phrase = //State's vectored into symbol: "#constructor"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Crule_lhs_phrase,0,0,0};
+struct S32rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Crule_lhs_phrase S32rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S32_Crule_lhs_phrase = //State's vectored into symbol: "#destructor"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Crule_lhs_phrase,0,0,0};
+struct S33rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Crule_lhs_phrase S33rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S33_Crule_lhs_phrase = //State's vectored into symbol: "#op"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Crule_lhs_phrase,0,0,0};
+struct S34rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Crule_lhs_phrase S34rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S34_Crule_lhs_phrase = //State's vectored into symbol: "#user-implementation"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Crule_lhs_phrase,0,0,0};
+struct S35rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Crule_lhs_phrase S35rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S35_Crule_lhs_phrase = //State's vectored into symbol: "cweb-comment"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Crule_lhs_phrase,0,0,0};
+struct S36rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Crule_lhs_phrase S36rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S36_Crule_lhs_phrase = //State's vectored into symbol: "comment-overrun"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Crule_lhs_phrase,0,0,0};
+struct S37std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S37std_Crule_lhs_phrase S37st_Crule_lhs_phrase = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S28_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S38_Crule_lhs_phrase} // shift sym: Rmaybe_directive_phrase
+ ,{579,(State*)&S39_Crule_lhs_phrase} // shift sym: Rdirective
+ ,{584,(State*)&S42_Crule_lhs_phrase} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S37pse_Crule_lhs_phrase = {3,(State*)&S28_Crule_lhs_phrase};
+struct S37rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Crule_lhs_phrase S37rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rmaybe_more_directives_}
+ }// end of reduce table
+};
+yacco2::State S37_Crule_lhs_phrase = //State's vectored into symbol: "Rmaybe_directive_phrases"
+{37
+,(Shift_entry*)&S37pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S37st_Crule_lhs_phrase,(Reduce_tbl*)&S37rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S28tt_Crule_lhs_phrase,0,0};
+struct S38rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Crule_lhs_phrase S38rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S38_Crule_lhs_phrase = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Crule_lhs_phrase,0,0,0};
+struct S39std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S39std_Crule_lhs_phrase S39st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S23_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S40_Crule_lhs_phrase} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Crule_lhs_phrase = {3,(State*)&S23_Crule_lhs_phrase};
+yacco2::State S39_Crule_lhs_phrase = //State's vectored into symbol: "Rdirective"
+{39
+,(Shift_entry*)&S39pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S39st_Crule_lhs_phrase,0,(State_s_thread_tbl*)&S23tt_Crule_lhs_phrase,0,0};
+struct S40std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S40std_Crule_lhs_phrase S40st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S41_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S40pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S40rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Crule_lhs_phrase S40rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S40_Crule_lhs_phrase = //State's vectored into symbol: "Rsyntax_code"
+{40
+,(Shift_entry*)&S40pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S40st_Crule_lhs_phrase,(Reduce_tbl*)&S40rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S41rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Crule_lhs_phrase S41rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S41_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Crule_lhs_phrase,0,0,0};
+struct S42std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S42std_Crule_lhs_phrase S42st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S43_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S42pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S42rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Crule_lhs_phrase S42rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S42_Crule_lhs_phrase = //State's vectored into symbol: "Rcweb_k"
+{42
+,(Shift_entry*)&S42pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S42st_Crule_lhs_phrase,(Reduce_tbl*)&S42rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S43std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S43std_Crule_lhs_phrase S43st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S56_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S44_Crule_lhs_phrase} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::Shift_entry S43pse_Crule_lhs_phrase = {3,(State*)&S56_Crule_lhs_phrase};
+yacco2::State S43_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{43
+,(Shift_entry*)&S43pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S43st_Crule_lhs_phrase,0,(State_s_thread_tbl*)&S56tt_Crule_lhs_phrase,0,0};
+struct S44std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S44std_Crule_lhs_phrase S44st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S23_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S45_Crule_lhs_phrase} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S44pse_Crule_lhs_phrase = {3,(State*)&S23_Crule_lhs_phrase};
+yacco2::State S44_Crule_lhs_phrase = //State's vectored into symbol: "Rdirective"
+{44
+,(Shift_entry*)&S44pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S44st_Crule_lhs_phrase,0,(State_s_thread_tbl*)&S23tt_Crule_lhs_phrase,0,0};
+struct S45std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S45std_Crule_lhs_phrase S45st_Crule_lhs_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S12_Crule_lhs_phrase} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S46_Crule_lhs_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S45pse_Crule_lhs_phrase = {3,(State*)&S12_Crule_lhs_phrase};
+struct S45rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Crule_lhs_phrase S45rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S45_Crule_lhs_phrase = //State's vectored into symbol: "Rsyntax_code"
+{45
+,(Shift_entry*)&S45pse_Crule_lhs_phrase,0,0,0,(Shift_tbl*)&S45st_Crule_lhs_phrase,(Reduce_tbl*)&S45rt_Crule_lhs_phrase,(State_s_thread_tbl*)&S12tt_Crule_lhs_phrase,0,0};
+struct S46rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Crule_lhs_phrase S46rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S46_Crule_lhs_phrase = //State's vectored into symbol: "Rlint"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Crule_lhs_phrase,0,0,0};
+struct S47rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Crule_lhs_phrase S47rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S47_Crule_lhs_phrase = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Crule_lhs_phrase,0,0,0};
+struct S48rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Crule_lhs_phrase S48rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs7_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S48_Crule_lhs_phrase = //State's vectored into symbol: "|?|"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Crule_lhs_phrase,0,0,0};
+struct S49std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S49std_Crule_lhs_phrase S49st_Crule_lhs_phrase = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S50_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S51_Crule_lhs_phrase} // shift sym: T_user_declaration
+ ,{311,(State*)&S52_Crule_lhs_phrase} // shift sym: T_constructor
+ ,{312,(State*)&S53_Crule_lhs_phrase} // shift sym: T_destructor
+ ,{313,(State*)&S54_Crule_lhs_phrase} // shift sym: T_op
+ ,{315,(State*)&S55_Crule_lhs_phrase} // shift sym: T_user_implementation
+ }// end of shift table
+};
+yacco2::Shift_entry S49qse_Crule_lhs_phrase = {0,(State*)&S50_Crule_lhs_phrase};
+yacco2::State S49_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{49
+,0,0,0,0,(Shift_tbl*)&S49st_Crule_lhs_phrase,0,0,0,(Shift_entry*)&S49qse_Crule_lhs_phrase
+};
+struct S50rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Crule_lhs_phrase S50rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs6_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S50_Crule_lhs_phrase = //State's vectored into symbol: "|?|"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Crule_lhs_phrase,0,0,0};
+struct S51rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Crule_lhs_phrase S51rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs1_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S51_Crule_lhs_phrase = //State's vectored into symbol: "#user-declaration"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Crule_lhs_phrase,0,0,0};
+struct S52rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Crule_lhs_phrase S52rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs3_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S52_Crule_lhs_phrase = //State's vectored into symbol: "#constructor"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Crule_lhs_phrase,0,0,0};
+struct S53rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Crule_lhs_phrase S53rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs4_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S53_Crule_lhs_phrase = //State's vectored into symbol: "#destructor"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Crule_lhs_phrase,0,0,0};
+struct S54rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Crule_lhs_phrase S54rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs5_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S54_Crule_lhs_phrase = //State's vectored into symbol: "#op"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Crule_lhs_phrase,0,0,0};
+struct S55rtd_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Crule_lhs_phrase S55rt_Crule_lhs_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crule_lhs_phrase,Crule_lhs_phrase::rhs2_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S55_Crule_lhs_phrase = //State's vectored into symbol: "#user-implementation"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Crule_lhs_phrase,0,0,0};
+struct S56std_Crule_lhs_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S56std_Crule_lhs_phrase S56st_Crule_lhs_phrase = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S29_Crule_lhs_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S30_Crule_lhs_phrase} // shift sym: T_user_declaration
+ ,{311,(State*)&S31_Crule_lhs_phrase} // shift sym: T_constructor
+ ,{312,(State*)&S32_Crule_lhs_phrase} // shift sym: T_destructor
+ ,{313,(State*)&S33_Crule_lhs_phrase} // shift sym: T_op
+ ,{315,(State*)&S34_Crule_lhs_phrase} // shift sym: T_user_implementation
+ }// end of shift table
+};
+yacco2::Shift_entry S56qse_Crule_lhs_phrase = {0,(State*)&S29_Crule_lhs_phrase};
+yacco2::State S56_Crule_lhs_phrase = //State's vectored into symbol: "|||"
+{56
+,0,0,0,0,(Shift_tbl*)&S56st_Crule_lhs_phrase,0,0,0,(Shift_entry*)&S56qse_Crule_lhs_phrase
+};
diff --git a/web/yacco2/compiler/grammars/rules_phrase.cpp b/web/yacco2/compiler/grammars/rules_phrase.cpp
new file mode 100644
index 0000000000..9c0f597783
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: rules_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Crules_phrase::
+ Crules_phrase()
+ :yacco2::CAbs_fsm
+ ("rules_phrase.lex"
+ ,"1.0"
+ ,"3 Jun 2004"
+ ,false
+ ,"Dispatcher to parse the grammar's rules."
+ ,"Fri Jan 30 18:55:23 2015 "
+ ,S1_Crules_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+Crules_phrase::~Crules_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crules_phrase::failed(){
+ return false;
+ }
+ void Crules_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Crules_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rrules_phrase::Rrules_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules_phrase",0,Crules_phrase::R_Rrules_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Crules_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_rules_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rules_phrase.fsc b/web/yacco2/compiler/grammars/rules_phrase.fsc
new file mode 100644
index 0000000000..43c0627021
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: rules_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+transitive y
+grammar-name "rules_phrase"
+name-space "NS_rules_phrase"
+thread-name "Crules_phrase"
+monolithic y
+file-name "rules_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_rules_phrase_th::TH_rules_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_rules_phrase_th::TH_rules_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse the grammar's rules."
diff --git a/web/yacco2/compiler/grammars/rules_phrase.h b/web/yacco2/compiler/grammars/rules_phrase.h
new file mode 100644
index 0000000000..bd96d5e022
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase.h
@@ -0,0 +1,69 @@
+/*
+ File: rules_phrase.h
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#ifndef __rules_phrase_h__
+#define __rules_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "rules_phrase_th.h"
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Crules_phrase;
+namespace NS_rules_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Crules_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrules_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrules_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Crules_phrase();
+ ~Crules_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rrules_phrase;
+struct Rphrase;
+struct Rrules_phrase:public yacco2::CAbs_lr1_sym {
+ Rrules_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rules_phrase.lex b/web/yacco2/compiler/grammars/rules_phrase.lex
new file mode 100644
index 0000000000..0a8a332503
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase.lex
@@ -0,0 +1,72 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rules_phrase.lex
+Dates: 24 May 2004
+Purpose: rules alphabet
+Grammar being parsed:
+ rules
+ {
+ 1+ rule definition where def is
+ rule-name [AD AB attributes] ([lhs,arbritrator syn. code])
+ { <subrule defs>+ }
+ }
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rules_phrase| grammar.\fbreak
+Dispatcher to parse rules alphabet.
+@/
+fsm
+(fsm-id "rules_phrase.lex"
+,fsm-filename rules_phrase
+,fsm-namespace NS_rules_phrase
+,fsm-class Crules_phrase{
+ user-prefix-declaration
+#include "rules_phrase_th.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "3 Jun 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse the grammar's rules.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrules_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "rules-phrase" NS_rules_phrase_th::TH_rules_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rules_phrase_th.cpp b/web/yacco2/compiler/grammars/rules_phrase_th.cpp
new file mode 100644
index 0000000000..f7cc9948f6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_th.cpp
@@ -0,0 +1,354 @@
+/*
+ File: rules_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 11;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+}
+ Crules_phrase_th::
+ Crules_phrase_th()
+ :yacco2::CAbs_fsm
+ ("rules_phrase_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Parse all of the grammar's rules."
+ ,"Fri Jan 30 18:55:23 2015 "
+ ,S1_Crules_phrase_th){
+
+ rules_phrase_ = 0;
+ end_rules_t_ = 0;
+
+ }
+
+Crules_phrase_th::~Crules_phrase_th(){
+
+ for(int x = 0;x < 11;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crules_phrase_th::failed(){
+ return false;
+ }
+ void Crules_phrase_th::op(){
+ if(rules_phrase_ != 0){
+ delete rules_phrase_;
+ rules_phrase_ = 0;
+ end_rules_t_ = 0;
+ }
+ rules_phrase_ = new T_rules_phrase;
+ rules_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rules_phrase_);
+ rules_phrase_->phrase_tree(t);
+
+}
+int Crules_phrase_th::rhs_to_rules_mapping_[26] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,5 // subrule 10 for rule 6
+ ,5 // subrule 11 for rule 6
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,7 // subrule 16 for rule 8
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,10 // subrule 21 for rule 11
+ ,10 // subrule 22 for rule 11
+ ,10 // subrule 23 for rule 11
+ ,10 // subrule 24 for rule 11
+ ,10 // subrule 25 for rule 11
+};
+Rrules_phrase::Rrules_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules_phrase",0,Crules_phrase_th::R_Rrules_phrase_,P,false,false){
+}
+
+void Rrules_phrase::sr1(){
+
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rules_phrase_);
+ fsm->rules_phrase_ = 0;
+
+}
+
+Rrule_defs_phrase::Rrule_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_defs_phrase",0,Crules_phrase_th::R_Rrule_defs_phrase_,P,false,false){
+}
+
+Rrule_defs::Rrule_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_defs",0,Crules_phrase_th::R_Rrule_defs_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Crules_phrase_th::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* r =
+ fsm->rules_phrase_->add_r_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ AST* rt = sf->p2__->rule_s_tree();
+ // ms has a bug so use temporary
+ AST* t = fsm->rules_phrase_->phrase_tree();
+ if(fsm->end_rules_t_ == 0){
+ AST::join_pts(*t,*rt);
+ }else{
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ }
+ fsm->end_rules_t_ = rt;
+
+}
+
+void Rrule_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrule_def::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_rule_name_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rrule_def1::Rrule_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def1",0,Crules_phrase_th::R_Rrule_def1_,P,false,false){
+}
+
+void Rrule_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* r = fsm->rules_phrase_->add_r_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ AST* rt = sf->p2__->rule_s_tree();
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ fsm->end_rules_t_ = rt;
+
+}
+
+void Rrule_def1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Crules_phrase_th::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Crules_phrase_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace_ending_rules_defs;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint_or_cweb_or_error::Rlint_or_cweb_or_error(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint_or_cweb_or_error",0,Crules_phrase_th::R_Rlint_or_cweb_or_error_,P,false,false){
+}
+
+void Rlint_or_cweb_or_error::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_improper_closing_of_rules;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint_or_cweb::Rlint_or_cweb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint_or_cweb",0,Crules_phrase_th::R_Rlint_or_cweb_,P,false,false){
+}
+
+Rfluffs_or_cweb::Rfluffs_or_cweb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfluffs_or_cweb",0,Crules_phrase_th::R_Rfluffs_or_cweb_,P,false,false){
+}
+
+Rfluff_or_cweb::Rfluff_or_cweb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfluff_or_cweb",0,Crules_phrase_th::R_Rfluff_or_cweb_,P,false,false){
+}
+
+void Rfluff_or_cweb::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rfluff_or_cweb::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ AST* t = fsm->rules_phrase_->phrase_tree();
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* rt = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(rt);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*rt,*cw);
+ AST::join_pts(*rt,*cwebk_t_);
+
+ if(fsm->end_rules_t_ == 0){
+ AST::join_pts(*t,*rt);
+ }else{
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ }
+ fsm->end_rules_t_ = rt;
+
+}
+
+void Rfluff_or_cweb::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rules_phrase_th.fsc b/web/yacco2/compiler/grammars/rules_phrase_th.fsc
new file mode 100644
index 0000000000..f9408fc6fa
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_th.fsc
@@ -0,0 +1,28 @@
+/*
+ File: rules_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+transitive y
+grammar-name "rules_phrase_th"
+name-space "NS_rules_phrase_th"
+thread-name "TH_rules_phrase_th"
+monolithic n
+file-name "rules_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_brace
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 3
+ NS_eol::TH_eol
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_ws::TH_ws
+end-list-of-transitive-threads
+list-of-used-threads 4
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_eol::TH_eol
+ NS_rule_def_phrase::TH_rule_def_phrase
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Parse all of the grammar's rules."
diff --git a/web/yacco2/compiler/grammars/rules_phrase_th.h b/web/yacco2/compiler/grammars/rules_phrase_th.h
new file mode 100644
index 0000000000..4467c650d3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_th.h
@@ -0,0 +1,174 @@
+/*
+ File: rules_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#ifndef __rules_phrase_th_h__
+#define __rules_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "cweb_or_c_k.h"
+
+#include "rule_def_phrase.h"
+#include "o2_externs.h"
+
+extern yacco2::Thread_entry ITH_rules_phrase_th;
+
+extern yacco2::State S1_Crules_phrase_th;
+namespace NS_rules_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_rules_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_rules_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[11];
+};
+class Crules_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrules_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrules_phrase_ = 1
+ ,R_Rrule_defs_phrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrule_defs_phrase_ = 2
+ ,R_Rrule_defs_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_defs_ = 3
+ ,rhs2_Rrule_defs_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ ,rhs2_Rrule_def_ = 6
+ ,rhs3_Rrule_def_ = 7
+ ,R_Rrule_def1_ = 573//start_of_rule_list + 8
+ ,rhs1_Rrule_def1_ = 8
+ ,rhs2_Rrule_def1_ = 9
+ ,R_Ropen_brace_ = 574//start_of_rule_list + 10
+ ,rhs1_Ropen_brace_ = 10
+ ,rhs2_Ropen_brace_ = 11
+ ,R_Rclose_brace_ = 575//start_of_rule_list + 12
+ ,rhs1_Rclose_brace_ = 12
+ ,rhs2_Rclose_brace_ = 13
+ ,R_Rlint_or_cweb_or_error_ = 576//start_of_rule_list + 14
+ ,rhs1_Rlint_or_cweb_or_error_ = 14
+ ,rhs2_Rlint_or_cweb_or_error_ = 15
+ ,rhs3_Rlint_or_cweb_or_error_ = 16
+ ,R_Rlint_or_cweb_ = 577//start_of_rule_list + 16
+ ,rhs1_Rlint_or_cweb_ = 17
+ ,rhs2_Rlint_or_cweb_ = 18
+ ,R_Rfluffs_or_cweb_ = 578//start_of_rule_list + 18
+ ,rhs1_Rfluffs_or_cweb_ = 19
+ ,rhs2_Rfluffs_or_cweb_ = 20
+ ,R_Rfluff_or_cweb_ = 579//start_of_rule_list + 20
+ ,rhs1_Rfluff_or_cweb_ = 21
+ ,rhs2_Rfluff_or_cweb_ = 22
+ ,rhs3_Rfluff_or_cweb_ = 23
+ ,rhs4_Rfluff_or_cweb_ = 24
+ ,rhs5_Rfluff_or_cweb_ = 25
+ };
+ //no of la sets = 6
+ //no of states = 36
+ Crules_phrase_th();
+ ~Crules_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[26];
+
+ public:
+ T_rules_phrase* rules_phrase_;
+ AST* end_rules_t_;
+
+ };
+struct Rrules_phrase;
+struct Rrule_defs_phrase;
+struct Rrule_defs;
+struct Rrule_def;
+struct Rrule_def1;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint_or_cweb_or_error;
+struct Rlint_or_cweb;
+struct Rfluffs_or_cweb;
+struct Rfluff_or_cweb;
+struct Rrules_phrase:public yacco2::CAbs_lr1_sym {
+ Rrules_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rrule_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rrule_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_defs:public yacco2::CAbs_lr1_sym {
+ Rrule_defs(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rrule_def1:public yacco2::CAbs_lr1_sym {
+ Rrule_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint_or_cweb_or_error:public yacco2::CAbs_lr1_sym {
+ Rlint_or_cweb_or_error(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rlint_or_cweb:public yacco2::CAbs_lr1_sym {
+ Rlint_or_cweb(yacco2::Parser* P);
+ public:
+};
+
+struct Rfluffs_or_cweb:public yacco2::CAbs_lr1_sym {
+ Rfluffs_or_cweb(yacco2::Parser* P);
+ public:
+};
+
+struct Rfluff_or_cweb:public yacco2::CAbs_lr1_sym {
+ Rfluff_or_cweb(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rules_phrase_th.lex b/web/yacco2/compiler/grammars/rules_phrase_th.lex
new file mode 100644
index 0000000000..f179e983a9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_th.lex
@@ -0,0 +1,236 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rules_phrase_th.lex
+Dates: 3 Jun 2004
+Purpose: parse rules phrase
+ The keeps its own local symbol table: map and list.
+ The rule_def_phrase adds symbol to Yacco2's
+ global symbol table.
+Output: rules_phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rules_phrase_th| Thread.\fbreak
+Parse all of the grammar's rules.
+The |rule_def_phrase| adds each rule defined to \O2's
+global symbol table.
+@/
+fsm
+(fsm-id "rules_phrase_th.lex"
+,fsm-filename rules_phrase_th
+,fsm-namespace NS_rules_phrase_th
+,fsm-class Crules_phrase_th{
+ user-prefix-declaration
+#include "ws.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "cweb_or_c_k.h"
+
+#include "rule_def_phrase.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public:
+ T_rules_phrase* rules_phrase_;
+ AST* end_rules_t_;
+ ***
+ constructor
+ rules_phrase_ = 0;
+ end_rules_t_ = 0;
+ ***
+ op
+ if(rules_phrase_ != 0){
+ delete rules_phrase_;
+ rules_phrase_ = 0;
+ end_rules_t_ = 0;
+ }
+ rules_phrase_ = new T_rules_phrase;
+ rules_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*rules_phrase_);
+ rules_phrase_->phrase_tree(t);
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Parse all of the grammar's rules.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rules_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrules_phrase (){
+ -> Rlint_or_cweb Rrule_defs_phrase Rlint_or_cweb_or_error {
+ op
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->rules_phrase_);
+ fsm->rules_phrase_ = 0;
+ ***
+ }
+}
+
+Rrule_defs_phrase (){
+ -> Ropen_brace
+ Rlint_or_cweb
+ Rrule_defs
+ Rlint_or_cweb
+ Rclose_brace
+}
+
+Rrule_defs (){
+ -> Rrule_def Rlint_or_cweb
+ -> Rrule_defs Rrule_def1 Rlint_or_cweb
+}
+
+Rrule_def (){
+ -> ||| "rule-def" NS_rule_def_phrase::TH_rule_def_phrase {
+ op
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* r =
+ fsm->rules_phrase_->add_r_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ AST* rt = sf->p2__->rule_s_tree();
+ // ms has a bug so use temporary
+ AST* t = fsm->rules_phrase_->phrase_tree();
+ if(fsm->end_rules_t_ == 0){
+ AST::join_pts(*t,*rt);
+ }else{
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ }
+ fsm->end_rules_t_ = rt;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_rule_name_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rrule_def1 (){
+ -> ||| "rule-def" NS_rule_def_phrase::TH_rule_def_phrase {
+ op
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* r = fsm->rules_phrase_->add_r_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ AST* rt = sf->p2__->rule_s_tree();
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ fsm->end_rules_t_ = rt;
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace_ending_rules_defs;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint_or_cweb_or_error (){
+ ->
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_improper_closing_of_rules;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> Rfluffs_or_cweb |.|
+}
+
+Rlint_or_cweb (){
+ ->
+ -> Rfluffs_or_cweb
+}
+
+Rfluffs_or_cweb (){
+ -> Rfluff_or_cweb
+ -> Rfluffs_or_cweb Rfluff_or_cweb
+}
+
+Rfluff_or_cweb (){
+ -> ||| ws NS_ws::TH_ws
+ -> ||| comment NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Crules_phrase_th* fsm = (Crules_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ AST* t = fsm->rules_phrase_->phrase_tree();
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* rt = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(rt);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*rt,*cw);
+ AST::join_pts(*rt,*cwebk_t_);
+
+ if(fsm->end_rules_t_ == 0){
+ AST::join_pts(*t,*rt);
+ }else{
+ AST::join_sts(*fsm->end_rules_t_,*rt);
+ }
+ fsm->end_rules_t_ = rt;
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| eol NS_eol::TH_eol
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rules_phrase_thsym.cpp b/web/yacco2/compiler/grammars/rules_phrase_thsym.cpp
new file mode 100644
index 0000000000..147c54ed64
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_thsym.cpp
@@ -0,0 +1,410 @@
+/*
+ File: rules_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_rules_phrase_th::TH_rules_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_rules_phrase_th;
+ NS_rules_phrase_th::Crules_phrase_th Crules_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Crules_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_rules_phrase_th::PROC_TH_rules_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_rules_phrase_th";
+ static bool one_time(false);
+ static NS_rules_phrase_th::Crules_phrase_th* NS_rules_phrase_th_Crules_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_rules_phrase_th_Crules_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_rules_phrase_th_Crules_phrase_th_ = new NS_rules_phrase_th::Crules_phrase_th();// parallel-parser's fsm table
+ NS_rules_phrase_th_Crules_phrase_th_parser = new Parser(*NS_rules_phrase_th_Crules_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_rules_phrase_th_Crules_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Crules_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrules_phrase_:{
+ Rrules_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rrule_defs_phrase_:{
+ Rrule_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rrule_defs_:{
+ Rrule_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rrule_defs_:{
+ Rrule_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rrule_def1_:{
+ Rrule_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrule_def1_:{
+ Rrule_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_or_cweb_or_error_:{
+ Rlint_or_cweb_or_error* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_or_cweb_or_error(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_or_cweb_or_error*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rlint_or_cweb_or_error_:{
+ Rlint_or_cweb_or_error* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_or_cweb_or_error(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_or_cweb_or_error*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rlint_or_cweb_or_error_:{
+ Rlint_or_cweb_or_error* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_or_cweb_or_error(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_or_cweb_or_error*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rlint_or_cweb_:{
+ Rlint_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rlint_or_cweb_:{
+ Rlint_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rfluffs_or_cweb_:{
+ Rfluffs_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluffs_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluffs_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rfluffs_or_cweb_:{
+ Rfluffs_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluffs_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluffs_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rfluff_or_cweb_:{
+ Rfluff_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfluff_or_cweb_:{
+ Rfluff_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfluff_or_cweb_:{
+ Rfluff_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rfluff_or_cweb_:{
+ Rfluff_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rfluff_or_cweb_:{
+ Rfluff_or_cweb* sym;
+ if(re->rule_ == 0){
+ sym = new Rfluff_or_cweb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfluff_or_cweb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rules_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/rules_phrase_thtbl.cpp
new file mode 100644
index 0000000000..6cfcc651e3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrase_thtbl.cpp
@@ -0,0 +1,782 @@
+/*
+ File: rules_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase_th;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA1_Crules_phrase_th[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_open_brace
+// raw_close_brace
+yacco2::UCHAR LA2_Crules_phrase_th[] ={
+2
+,0,49
+,16,40
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA3_Crules_phrase_th[] ={
+1
+,0,17
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Crules_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+// raw_close_brace
+yacco2::UCHAR LA5_Crules_phrase_th[] ={
+2
+,0,17
+,16,40
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA6_Crules_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+extern yacco2::State S1_Crules_phrase_th;
+extern yacco2::State S2_Crules_phrase_th;
+struct S2ttd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[3];
+};
+S2ttd_Crules_phrase_th S2tt_Crules_phrase_th = {
+ 3 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_ws
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S3_Crules_phrase_th;
+extern yacco2::State S4_Crules_phrase_th;
+extern yacco2::State S5_Crules_phrase_th;
+extern yacco2::State S6_Crules_phrase_th;
+extern yacco2::State S7_Crules_phrase_th;
+extern yacco2::State S8_Crules_phrase_th;
+extern yacco2::State S9_Crules_phrase_th;
+extern yacco2::State S10_Crules_phrase_th;
+extern yacco2::State S11_Crules_phrase_th;
+extern yacco2::State S12_Crules_phrase_th;
+extern yacco2::State S13_Crules_phrase_th;
+extern yacco2::State S14_Crules_phrase_th;
+extern yacco2::State S15_Crules_phrase_th;
+extern yacco2::State S16_Crules_phrase_th;
+extern yacco2::State S17_Crules_phrase_th;
+extern yacco2::State S18_Crules_phrase_th;
+extern yacco2::State S19_Crules_phrase_th;
+extern yacco2::State S20_Crules_phrase_th;
+extern yacco2::State S21_Crules_phrase_th;
+struct S21ttd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[4];
+};
+S21ttd_Crules_phrase_th S21tt_Crules_phrase_th = {
+ 4 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_ws
+ ,(yacco2::Thread_entry*)&ITH_rule_def_phrase
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S22_Crules_phrase_th;
+extern yacco2::State S23_Crules_phrase_th;
+extern yacco2::State S24_Crules_phrase_th;
+extern yacco2::State S25_Crules_phrase_th;
+extern yacco2::State S26_Crules_phrase_th;
+extern yacco2::State S27_Crules_phrase_th;
+extern yacco2::State S28_Crules_phrase_th;
+extern yacco2::State S29_Crules_phrase_th;
+extern yacco2::State S30_Crules_phrase_th;
+struct S30ttd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S30ttd_Crules_phrase_th S30tt_Crules_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rule_def_phrase
+};
+extern yacco2::State S31_Crules_phrase_th;
+extern yacco2::State S32_Crules_phrase_th;
+extern yacco2::State S33_Crules_phrase_th;
+extern yacco2::State S34_Crules_phrase_th;
+extern yacco2::State S35_Crules_phrase_th;
+extern yacco2::State S36_Crules_phrase_th;
+struct S1std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Crules_phrase_th S1st_Crules_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crules_phrase_th} // accept sym: Rrules_phrase
+ ,{577,(State*)&S8_Crules_phrase_th} // shift sym: Rlint_or_cweb
+ ,{578,(State*)&S28_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+struct S1rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Crules_phrase_th S1rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S1_Crules_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S1st_Crules_phrase_th,(Reduce_tbl*)&S1rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S2std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S2std_Crules_phrase_th S2st_Crules_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {268,(State*)&S3_Crules_phrase_th} // shift sym: T_eol
+ ,{271,(State*)&S4_Crules_phrase_th} // shift sym: T_comment
+ ,{272,(State*)&S5_Crules_phrase_th} // shift sym: T_ws
+ ,{372,(State*)&S6_Crules_phrase_th} // shift sym: T_cweb_comment
+ ,{396,(State*)&S7_Crules_phrase_th} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::State S2_Crules_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Crules_phrase_th,0,0,0,0};
+struct S3rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Crules_phrase_th S3rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs5_Rfluff_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S3_Crules_phrase_th = //State's vectored into symbol: "eol"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Crules_phrase_th,0,0,0};
+struct S4rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crules_phrase_th S4rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs2_Rfluff_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S4_Crules_phrase_th = //State's vectored into symbol: "comment"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crules_phrase_th,0,0,0};
+struct S5rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crules_phrase_th S5rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs1_Rfluff_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S5_Crules_phrase_th = //State's vectored into symbol: "ws"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crules_phrase_th,0,0,0};
+struct S6rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crules_phrase_th S6rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs3_Rfluff_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S6_Crules_phrase_th = //State's vectored into symbol: "cweb-comment"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crules_phrase_th,0,0,0};
+struct S7rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crules_phrase_th S7rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs4_Rfluff_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S7_Crules_phrase_th = //State's vectored into symbol: "comment-overrun"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Crules_phrase_th,0,0,0};
+struct S8std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Crules_phrase_th S8st_Crules_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S9_Crules_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S10_Crules_phrase_th} // shift sym: raw_open_brace
+ ,{570,(State*)&S11_Crules_phrase_th} // shift sym: Rrule_defs_phrase
+ ,{574,(State*)&S18_Crules_phrase_th} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Crules_phrase_th = {0,(State*)&S9_Crules_phrase_th};
+yacco2::State S8_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Crules_phrase_th,0,0,0,(Shift_entry*)&S8qse_Crules_phrase_th
+};
+struct S9rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crules_phrase_th S9rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_phrase_th,Crules_phrase_th::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S9_Crules_phrase_th = //State's vectored into symbol: "|?|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Crules_phrase_th,0,0,0};
+struct S10rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Crules_phrase_th S10rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_phrase_th,Crules_phrase_th::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S10_Crules_phrase_th = //State's vectored into symbol: "{"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Crules_phrase_th,0,0,0};
+struct S11std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S11std_Crules_phrase_th S11st_Crules_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S12_Crules_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S13_Crules_phrase_th} // shift sym: Rlint_or_cweb_or_error
+ ,{578,(State*)&S14_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+yacco2::Shift_entry S11qse_Crules_phrase_th = {0,(State*)&S12_Crules_phrase_th};
+struct S11rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Crules_phrase_th S11rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_or_error_}
+ }// end of reduce table
+};
+yacco2::State S11_Crules_phrase_th = //State's vectored into symbol: "Rrule_defs_phrase"
+{11
+,(Shift_entry*)&S11pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S11st_Crules_phrase_th,(Reduce_tbl*)&S11rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,(Shift_entry*)&S11qse_Crules_phrase_th
+};
+struct S12rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Crules_phrase_th S12rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs2_Rlint_or_cweb_or_error_}
+ }// end of reduce table
+};
+yacco2::State S12_Crules_phrase_th = //State's vectored into symbol: "|?|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Crules_phrase_th,0,0,0};
+struct S13rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Crules_phrase_th S13rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs1_Rrules_phrase_}
+ }// end of reduce table
+};
+yacco2::State S13_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb_or_error"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Crules_phrase_th,0,0,0};
+struct S14std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S14std_Crules_phrase_th S14st_Crules_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S15_Crules_phrase_th} // shift sym: LR1_invisible_shift_operator
+ ,{579,(State*)&S16_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+yacco2::Shift_entry S14ise_Crules_phrase_th = {5,(State*)&S15_Crules_phrase_th};
+yacco2::State S14_Crules_phrase_th = //State's vectored into symbol: "Rfluffs_or_cweb"
+{14
+,(Shift_entry*)&S14pse_Crules_phrase_th,0,(Shift_entry*)&S14ise_Crules_phrase_th
+,0,(Shift_tbl*)&S14st_Crules_phrase_th,0,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S15rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Crules_phrase_th S15rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs3_Rlint_or_cweb_or_error_}
+ }// end of reduce table
+};
+yacco2::State S15_Crules_phrase_th = //State's vectored into symbol: "|.|"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Crules_phrase_th,0,0,0};
+struct S16rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Crules_phrase_th S16rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs2_Rfluffs_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S16_Crules_phrase_th = //State's vectored into symbol: "Rfluff_or_cweb"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Crules_phrase_th,0,0,0};
+struct S17rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Crules_phrase_th S17rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_phrase_th,Crules_phrase_th::rhs1_Rfluffs_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S17_Crules_phrase_th = //State's vectored into symbol: "Rfluff_or_cweb"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Crules_phrase_th,0,0,0};
+struct S18std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S18std_Crules_phrase_th S18st_Crules_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S19_Crules_phrase_th} // shift sym: Rlint_or_cweb
+ ,{578,(State*)&S28_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+struct S18rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Crules_phrase_th S18rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S18_Crules_phrase_th = //State's vectored into symbol: "Ropen_brace"
+{18
+,(Shift_entry*)&S18pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S18st_Crules_phrase_th,(Reduce_tbl*)&S18rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S19std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S19std_Crules_phrase_th S19st_Crules_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S29_Crules_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S30_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S20_Crules_phrase_th} // shift sym: Rrule_defs
+ ,{572,(State*)&S35_Crules_phrase_th} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::Shift_entry S19pse_Crules_phrase_th = {3,(State*)&S30_Crules_phrase_th};
+yacco2::Shift_entry S19qse_Crules_phrase_th = {0,(State*)&S29_Crules_phrase_th};
+yacco2::State S19_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb"
+{19
+,(Shift_entry*)&S19pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S19st_Crules_phrase_th,0,(State_s_thread_tbl*)&S30tt_Crules_phrase_th,0,(Shift_entry*)&S19qse_Crules_phrase_th
+};
+struct S20std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S20std_Crules_phrase_th S20st_Crules_phrase_th = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S21_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S33_Crules_phrase_th} // shift sym: Rrule_def1
+ ,{577,(State*)&S24_Crules_phrase_th} // shift sym: Rlint_or_cweb
+ ,{578,(State*)&S28_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Crules_phrase_th = {3,(State*)&S21_Crules_phrase_th};
+struct S20rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Crules_phrase_th S20rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S20_Crules_phrase_th = //State's vectored into symbol: "Rrule_defs"
+{20
+,(Shift_entry*)&S20pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S20st_Crules_phrase_th,(Reduce_tbl*)&S20rt_Crules_phrase_th,(State_s_thread_tbl*)&S21tt_Crules_phrase_th,0,0};
+struct S21std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S21std_Crules_phrase_th S21st_Crules_phrase_th = {
+ 7
+ ,
+ {// start of table
+ {6,(State*)&S22_Crules_phrase_th} // shift sym: LR1_all_shift_operator
+ ,{268,(State*)&S3_Crules_phrase_th} // shift sym: T_eol
+ ,{271,(State*)&S4_Crules_phrase_th} // shift sym: T_comment
+ ,{272,(State*)&S5_Crules_phrase_th} // shift sym: T_ws
+ ,{340,(State*)&S23_Crules_phrase_th} // shift sym: rule_def
+ ,{372,(State*)&S6_Crules_phrase_th} // shift sym: T_cweb_comment
+ ,{396,(State*)&S7_Crules_phrase_th} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::Shift_entry S21ase_Crules_phrase_th = {6,(State*)&S22_Crules_phrase_th};
+yacco2::State S21_Crules_phrase_th = //State's vectored into symbol: "|||"
+{21
+,0,(Shift_entry*)&S21ase_Crules_phrase_th
+,0,0,(Shift_tbl*)&S21st_Crules_phrase_th,0,0,0,0};
+struct S22rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Crules_phrase_th S22rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs2_Rrule_def1_}
+ }// end of reduce table
+};
+yacco2::State S22_Crules_phrase_th = //State's vectored into symbol: "|+|"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Crules_phrase_th,0,0,0};
+struct S23rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Crules_phrase_th S23rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs1_Rrule_def1_}
+ }// end of reduce table
+};
+yacco2::State S23_Crules_phrase_th = //State's vectored into symbol: "rule-def"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Crules_phrase_th,0,0,0};
+struct S24std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S24std_Crules_phrase_th S24st_Crules_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S25_Crules_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S26_Crules_phrase_th} // shift sym: raw_close_brace
+ ,{575,(State*)&S27_Crules_phrase_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S24qse_Crules_phrase_th = {0,(State*)&S25_Crules_phrase_th};
+yacco2::State S24_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb"
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Crules_phrase_th,0,0,0,(Shift_entry*)&S24qse_Crules_phrase_th
+};
+struct S25rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Crules_phrase_th S25rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S25_Crules_phrase_th = //State's vectored into symbol: "|?|"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Crules_phrase_th,0,0,0};
+struct S26rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Crules_phrase_th S26rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S26_Crules_phrase_th = //State's vectored into symbol: "}"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Crules_phrase_th,0,0,0};
+struct S27rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Crules_phrase_th S27rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_phrase_th,Crules_phrase_th::rhs1_Rrule_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S27_Crules_phrase_th = //State's vectored into symbol: "Rclose_brace"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Crules_phrase_th,0,0,0};
+struct S28std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Crules_phrase_th S28st_Crules_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S16_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+struct S28rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Crules_phrase_th S28rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_phrase_th,Crules_phrase_th::rhs2_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S28_Crules_phrase_th = //State's vectored into symbol: "Rfluffs_or_cweb"
+{28
+,(Shift_entry*)&S28pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S28st_Crules_phrase_th,(Reduce_tbl*)&S28rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S29rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Crules_phrase_th S29rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs3_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S29_Crules_phrase_th = //State's vectored into symbol: "|?|"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Crules_phrase_th,0,0,0};
+struct S30std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S30std_Crules_phrase_th S30st_Crules_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S31_Crules_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{340,(State*)&S32_Crules_phrase_th} // shift sym: rule_def
+ }// end of shift table
+};
+yacco2::Shift_entry S30qse_Crules_phrase_th = {0,(State*)&S31_Crules_phrase_th};
+yacco2::State S30_Crules_phrase_th = //State's vectored into symbol: "|||"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Crules_phrase_th,0,0,0,(Shift_entry*)&S30qse_Crules_phrase_th
+};
+struct S31rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Crules_phrase_th S31rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs2_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S31_Crules_phrase_th = //State's vectored into symbol: "|?|"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Crules_phrase_th,0,0,0};
+struct S32rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Crules_phrase_th S32rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S32_Crules_phrase_th = //State's vectored into symbol: "rule-def"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Crules_phrase_th,0,0,0};
+struct S33std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S33std_Crules_phrase_th S33st_Crules_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S34_Crules_phrase_th} // shift sym: Rlint_or_cweb
+ ,{578,(State*)&S28_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+struct S33rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Crules_phrase_th S33rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S33_Crules_phrase_th = //State's vectored into symbol: "Rrule_def1"
+{33
+,(Shift_entry*)&S33pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S33st_Crules_phrase_th,(Reduce_tbl*)&S33rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S34rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Crules_phrase_th S34rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs2_Rrule_defs_}
+ }// end of reduce table
+};
+yacco2::State S34_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Crules_phrase_th,0,0,0};
+struct S35std_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S35std_Crules_phrase_th S35st_Crules_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Crules_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S36_Crules_phrase_th} // shift sym: Rlint_or_cweb
+ ,{578,(State*)&S28_Crules_phrase_th} // shift sym: Rfluffs_or_cweb
+ ,{579,(State*)&S17_Crules_phrase_th} // shift sym: Rfluff_or_cweb
+ }// end of shift table
+};
+yacco2::Shift_entry S35pse_Crules_phrase_th = {3,(State*)&S2_Crules_phrase_th};
+struct S35rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Crules_phrase_th S35rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs1_Rlint_or_cweb_}
+ }// end of reduce table
+};
+yacco2::State S35_Crules_phrase_th = //State's vectored into symbol: "Rrule_def"
+{35
+,(Shift_entry*)&S35pse_Crules_phrase_th,0,0,0,(Shift_tbl*)&S35st_Crules_phrase_th,(Reduce_tbl*)&S35rt_Crules_phrase_th,(State_s_thread_tbl*)&S2tt_Crules_phrase_th,0,0};
+struct S36rtd_Crules_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Crules_phrase_th S36rt_Crules_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Crules_phrase_th,Crules_phrase_th::rhs1_Rrule_defs_}
+ }// end of reduce table
+};
+yacco2::State S36_Crules_phrase_th = //State's vectored into symbol: "Rlint_or_cweb"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Crules_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rules_phrasesym.cpp b/web/yacco2/compiler/grammars/rules_phrasesym.cpp
new file mode 100644
index 0000000000..044addb3ba
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: rules_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Crules_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrules_phrase_:{
+ Rrules_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rules_phrasetbl.cpp b/web/yacco2/compiler/grammars/rules_phrasetbl.cpp
new file mode 100644
index 0000000000..b51f7cfa5d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: rules_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Crules_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Crules_phrase;
+extern yacco2::State S2_Crules_phrase;
+extern yacco2::State S3_Crules_phrase;
+struct S3ttd_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Crules_phrase S3tt_Crules_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rules_phrase_th
+};
+extern yacco2::State S4_Crules_phrase;
+extern yacco2::State S5_Crules_phrase;
+extern yacco2::State S6_Crules_phrase;
+struct S1std_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Crules_phrase S1st_Crules_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Crules_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Crules_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Crules_phrase} // accept sym: Rrules_phrase
+ ,{570,(State*)&S6_Crules_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Crules_phrase = {3,(State*)&S3_Crules_phrase};
+yacco2::Shift_entry S1qse_Crules_phrase = {0,(State*)&S2_Crules_phrase};
+yacco2::State S1_Crules_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Crules_phrase,0,0,0,(Shift_tbl*)&S1st_Crules_phrase,0,(State_s_thread_tbl*)&S3tt_Crules_phrase,0,(Shift_entry*)&S1qse_Crules_phrase
+};
+struct S2rtd_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crules_phrase S2rt_Crules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_phrase,Crules_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Crules_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Crules_phrase,0,0,0};
+struct S3std_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Crules_phrase S3st_Crules_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Crules_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{341,(State*)&S5_Crules_phrase} // shift sym: T_rules_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Crules_phrase = {0,(State*)&S4_Crules_phrase};
+yacco2::State S3_Crules_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Crules_phrase,0,0,0,(Shift_entry*)&S3qse_Crules_phrase
+};
+struct S4rtd_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crules_phrase S4rt_Crules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_phrase,Crules_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Crules_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crules_phrase,0,0,0};
+struct S5rtd_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crules_phrase S5rt_Crules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_phrase,Crules_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Crules_phrase = //State's vectored into symbol: "rules-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crules_phrase,0,0,0};
+struct S6rtd_Crules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Crules_phrase S6rt_Crules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_phrase,Crules_phrase::rhs1_Rrules_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Crules_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Crules_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/rules_use_cnt.cpp b/web/yacco2/compiler/grammars/rules_use_cnt.cpp
new file mode 100644
index 0000000000..acc04bfb17
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cnt.cpp
@@ -0,0 +1,262 @@
+/*
+ File: rules_use_cnt.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_use_cnt;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 9;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+}
+ Crules_use_cnt::
+ Crules_use_cnt()
+ :yacco2::CAbs_fsm
+ ("rules_use_cnt.lex"
+ ,"1.0"
+ ,"6 July 2007"
+ ,false
+ ,"Optimization: Count ``rules used'' \n to lower new / delete rule cycles while parsing."
+ ,"Fri Jan 30 18:55:23 2015 "
+ ,S1_Crules_use_cnt){
+
+ }
+
+Crules_use_cnt::~Crules_use_cnt(){
+
+ for(int x = 0;x < 9;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Crules_use_cnt::failed(){
+ return false;
+ }
+ void Crules_use_cnt::op(){
+ tok_can<AST*>* can = (tok_can<AST*>*)parser()->token_supplier();
+ AST* start_rule_t = can->ast(0);
+ AST* t = start_rule_t;
+ for(;t != 0;t=AST::get_younger_sibling(*t,1)){
+ rule_def* rd = (rule_def*)AST::content(*t);
+ AST* use_skeleton_t = bld_rule_s_use_skeleton(t);
+ if(use_skeleton_t != 0) rd->rule_use_skeleton(use_skeleton_t);
+ if(t != start_rule_t) rules_list_for_use_cnt_.push_back(rd);
+ }
+ rule_def_ = 0;
+ subrule_def_ = 0;
+
+}
+int Crules_use_cnt::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,6 // subrule 9 for rule 7
+ ,7 // subrule 10 for rule 8
+ ,7 // subrule 11 for rule 8
+ ,8 // subrule 12 for rule 9
+ ,8 // subrule 13 for rule 9
+};
+
+ void Crules_use_cnt::mark_recursion_rule_use
+ (NS_yacco2_terminals::refered_rule* Refered_rule){
+ using namespace NS_yacco2_terminals;
+ rule_in_stbl* rule_in_tbl = Refered_rule->Rule_in_stbl();
+ rule_def* rd = rule_in_tbl->r_def();
+ if(rd == rule_def_){
+ rd->recursive(YES);
+ rd->lhs_use_cnt(1);
+ }
+ }
+
+ AST* Crules_use_cnt::bld_rule_s_use_skeleton(AST* Rule_t){
+ using namespace NS_yacco2_T_enum;
+ set<int> rules_use_cnt_filter;
+ rules_use_cnt_filter.insert(T_Enum::T_T_subrule_def_);
+ rules_use_cnt_filter.insert(T_Enum::T_rule_def_);
+ rules_use_cnt_filter.insert(T_Enum::T_refered_rule_);
+
+ tok_can_ast_functor rules_use_walk_functr;
+ ast_postfix rules_use_walk(*Rule_t,&rules_use_walk_functr
+ ,&rules_use_cnt_filter,ACCEPT_FILTER);
+ tok_can<AST*> rules_use_can(rules_use_walk);
+ int x(0);
+ CAbs_lr1_sym* sym = rules_use_can[x];
+ rule_def* rd(0);
+ AST* lk_rr_t(0);
+ AST* rr_t(0);
+ AST* sr_t(0);
+ AST* lk_sr_t(0);
+ AST* r_t(0);
+ for(;sym->enumerated_id() != LR1_Eog;++x,sym=rules_use_can[x]){
+ switch(sym->enumerated_id()){
+ case T_Enum::T_rule_def_:{
+ if(sr_t == 0) return 0;// no rhs with refered rules
+ r_t = new AST(*sym);
+ AST::join_pts(*r_t,*sr_t);
+ return r_t;
+ }
+ case T_Enum::T_T_subrule_def_:{
+ if(rr_t == 0) break;// no refered rules
+ AST* srt = new AST(*sym);
+ AST::join_pts(*srt,*rr_t);
+ lk_rr_t = 0;
+ rr_t = 0;
+ if(sr_t == 0){
+ sr_t = srt;
+ lk_sr_t = srt;
+ }else{
+ AST::join_sts(*lk_sr_t,*srt);
+ lk_sr_t = srt;
+ }
+ break;
+ }
+ case T_Enum::T_refered_rule_:{
+ AST* rrt = new AST(*sym);
+ if(rr_t == 0){
+ rr_t = rrt;
+ lk_rr_t = rrt;
+ }else{
+ AST::join_sts(*lk_rr_t,*rrt);
+ lk_rr_t = rrt;
+ }
+ break;
+ }
+ }//switch
+ }//for
+ return 0;
+ }
+
+Rrules_use_cnt::Rrules_use_cnt(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules_use_cnt",0,Crules_use_cnt::R_Rrules_use_cnt_,P,false,false){
+}
+
+Rrules::Rrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrules",0,Crules_use_cnt::R_Rrules_,P,false,false){
+}
+
+Rrule::Rrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule",0,Crules_use_cnt::R_Rrule_,P,false,false){
+}
+
+Rrule_def::Rrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrule_def",0,Crules_use_cnt::R_Rrule_def_,P,false,false){
+}
+
+void Rrule_def::sr1(){
+ struct SF{
+ rule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ std::list<NS_yacco2_terminals::rule_def* >::iterator i = fsm->rules_list_for_use_cnt_.begin();
+ std::list<NS_yacco2_terminals::rule_def* >::iterator ie = fsm->rules_list_for_use_cnt_.end();
+ for(;i != ie;++i){
+ rule_def* for_rule = *i;
+ int use_cnt = MAX_USE_CNT_RxR(for_rule,fsm->rule_def_);
+ if(for_rule->rhs_use_cnt() < use_cnt){
+ for_rule->rhs_use_cnt(use_cnt);
+ }
+ }
+
+}
+
+Rsubrules::Rsubrules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules",0,Crules_use_cnt::R_Rsubrules_,P,false,false){
+}
+
+Rsubrule::Rsubrule(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule",0,Crules_use_cnt::R_Rsubrule_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Crules_use_cnt::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ T_subrule_def* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_ = sf->p1__;
+
+}
+
+Rsubrule_s_used_rules_epi::Rsubrule_s_used_rules_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_s_used_rules_epi",0,Crules_use_cnt::R_Rsubrule_s_used_rules_epi_,P,false,false){
+}
+
+Rsubrule_s_used_rules::Rsubrule_s_used_rules(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_s_used_rules",0,Crules_use_cnt::R_Rsubrule_s_used_rules_,P,false,false){
+}
+
+void Rsubrule_s_used_rules::sr1(){
+ struct SF{
+ refered_rule* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->mark_recursion_rule_use(sf->p1__);
+
+}
+
+void Rsubrule_s_used_rules::sr2(){
+ struct SF{
+ Rsubrule_s_used_rules* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ refered_rule* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->mark_recursion_rule_use(sf->p2__);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/rules_use_cnt.fsc b/web/yacco2/compiler/grammars/rules_use_cnt.fsc
new file mode 100644
index 0000000000..a72925dc54
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cnt.fsc
@@ -0,0 +1,20 @@
+/*
+ File: rules_use_cnt.fsc
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+transitive n
+grammar-name "rules_use_cnt"
+name-space "NS_rules_use_cnt"
+thread-name "Crules_use_cnt"
+monolithic y
+file-name "rules_use_cnt.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ rule_def
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Optimization: Count ``rules used'' \n to lower new / delete rule cycles while parsing."
diff --git a/web/yacco2/compiler/grammars/rules_use_cnt.h b/web/yacco2/compiler/grammars/rules_use_cnt.h
new file mode 100644
index 0000000000..db32fcdad4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cnt.h
@@ -0,0 +1,135 @@
+/*
+ File: rules_use_cnt.h
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#ifndef __rules_use_cnt_h__
+#define __rules_use_cnt_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "o2_externs.h"
+extern int MAX_USE_CNT_RxR
+ (NS_yacco2_terminals::rule_def* Rule_use
+ ,NS_yacco2_terminals::rule_def* Against_rule);
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Crules_use_cnt;
+namespace NS_rules_use_cnt {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[9];
+};
+class Crules_use_cnt: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rrules_use_cnt_ = 569//start_of_rule_list + 0
+ ,rhs1_Rrules_use_cnt_ = 1
+ ,R_Rrules_ = 570//start_of_rule_list + 2
+ ,rhs1_Rrules_ = 2
+ ,rhs2_Rrules_ = 3
+ ,R_Rrule_ = 571//start_of_rule_list + 4
+ ,rhs1_Rrule_ = 4
+ ,R_Rrule_def_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrule_def_ = 5
+ ,R_Rsubrules_ = 573//start_of_rule_list + 8
+ ,rhs1_Rsubrules_ = 6
+ ,rhs2_Rsubrules_ = 7
+ ,R_Rsubrule_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsubrule_ = 8
+ ,R_Rsubrule_def_ = 575//start_of_rule_list + 12
+ ,rhs1_Rsubrule_def_ = 9
+ ,R_Rsubrule_s_used_rules_epi_ = 576//start_of_rule_list + 14
+ ,rhs1_Rsubrule_s_used_rules_epi_ = 10
+ ,rhs2_Rsubrule_s_used_rules_epi_ = 11
+ ,R_Rsubrule_s_used_rules_ = 577//start_of_rule_list + 16
+ ,rhs1_Rsubrule_s_used_rules_ = 12
+ ,rhs2_Rsubrule_s_used_rules_ = 13
+ };
+ //no of la sets = 5
+ //no of states = 17
+ Crules_use_cnt();
+ ~Crules_use_cnt();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+
+ public:
+ std::list<NS_yacco2_terminals::rule_def* > rules_list_for_use_cnt_;
+ NS_yacco2_terminals::rule_def* rule_def_;
+ NS_yacco2_terminals::T_subrule_def* subrule_def_;
+ void mark_recursion_rule_use(NS_yacco2_terminals::refered_rule* Refered_rule);
+ yacco2::AST* bld_rule_s_use_skeleton(yacco2::AST* Rule_t);
+
+ };
+struct Rrules_use_cnt;
+struct Rrules;
+struct Rrule;
+struct Rrule_def;
+struct Rsubrules;
+struct Rsubrule;
+struct Rsubrule_def;
+struct Rsubrule_s_used_rules_epi;
+struct Rsubrule_s_used_rules;
+struct Rrules_use_cnt:public yacco2::CAbs_lr1_sym {
+ Rrules_use_cnt(yacco2::Parser* P);
+ public:
+};
+
+struct Rrules:public yacco2::CAbs_lr1_sym {
+ Rrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule:public yacco2::CAbs_lr1_sym {
+ Rrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rrule_def:public yacco2::CAbs_lr1_sym {
+ Rrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrules:public yacco2::CAbs_lr1_sym {
+ Rsubrules(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule:public yacco2::CAbs_lr1_sym {
+ Rsubrule(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrule_s_used_rules_epi:public yacco2::CAbs_lr1_sym {
+ Rsubrule_s_used_rules_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_s_used_rules:public yacco2::CAbs_lr1_sym {
+ Rsubrule_s_used_rules(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/rules_use_cnt.lex b/web/yacco2/compiler/grammars/rules_use_cnt.lex
new file mode 100644
index 0000000000..e15d041e22
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cnt.lex
@@ -0,0 +1,295 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: rules_use_cnt.lex
+Dates: 23 Sept. 2005
+Purpose: used to optimize the recycled rules table use.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |rules_use_cnt| grammar.\fbreak
+Determine each rule's use count for generating recycled rules tables.
+It answers the question: What is the maximum number of rules
+needed in each recycled rules table?.
+If the rule has recursion then indicate in rule's definition.
+The heart of the algorithm is to determine the maximum rule's use count
+against all rules rhs.
+The grammar tree is walked in top-down fashion: prefix
+using a filter for only rule-def, subrule-def, and referenced-rules. \fbreak
+\fbreak
+Stage 1: Build per rule its rule use skeleton. This is done upon entry
+into the grammar using the ``op directive'' before the grammar parses.
+Removeal of all the T vocabulary from the rhs leave its bones.
+If the resultant rhs is empty then it does not partake
+in the analysis as there are no rule used.
+The rule's skeleton is deposited within its ``rule-def''
+for the balance of the stages.\fbreak
+\fbreak
+Stage 2: Determine rule's use count per skeleton.\fbreak
+The max use count is posted in the rule's definition
+to generate the space requirement for the rule's
+recycling table.
+\fbreak
+\fbreak
+Remarks:\fbreak
+The walked skeleton checks the use count of indirect rule's in use.
+For example:\fbreak
+\settabs\+\indent&1in\qquad&\qquad&\qquad&\cr
+\+&\it Rule&&{\it subrule's symbols}\cr
+\+&Rs &$\rightarrow$ &Ra Rxx Ra Rxxx $\bot$\cr
+\+&Ra &$\rightarrow$ &a \cr
+\+&&$\rightarrow$ &Ra a\cr
+\+&Rxx&$\rightarrow$ &x Ra x Ra b\cr
+\+&Rxxx&$\rightarrow$ &x Ra x Ra x Ra\cr
+\fbreak
+What is the maximum use count of Ra in the above grammar?
+It is 6 caused by the 1st rule.
+Why?
+Here is an example to support my statement.\fbreak
+\settabs\+\indent&a a x a x a b a x a x a x a a\&\qquad&a a x a x a b a x a x a x a a a&Comments\cr
+\+&{\it Parse Stack}&{\it input string to parse}&Comments\cr
+\+& & a a x a x a b a x a x a x a a\cr
+\+&a & a x a x a b a x a x a x a a\cr
+\+&Ra & a x a x a b a x a x a x a a\cr
+\+&Ra a & x a x a b a x a x a x a a& recursion: 2 Ra --- lhs and stacked rhs\cr
+\+&Ra & x a x a b a x a x a x a a& Ra lhs, popped rhs Ra recycled \cr
+\+&Ra x & a x a b a x a x a x a a\cr
+\+&Ra x a & x a b a x a x a x a a\cr
+\+&Ra x Ra & x a b a x a x a x a a\cr
+\+&Ra x Ra x & a b a x a x a x a a\cr
+\+&Ra x Ra x a & b a x a x a x a a\cr
+\+&Ra x Ra x Ra & b a x a x a x a a\cr
+\+&Ra x Ra x Ra b & a x a x a x a a\cr
+\+&Ra Rxx & a x a x a x a a\cr
+\+&Ra Rxx a & x a x a x a a\cr
+\+&Ra Rxx Ra & x a x a x a a\cr
+\+&Ra Rxx Ra x & a x a x a a\cr
+\+&Ra Rxx Ra x a & x a x a a\cr
+\+&Ra Rxx Ra x Ra & x a x a a\cr
+\+&Ra Rxx Ra x Ra x & a x a a\cr
+\+&Ra Rxx Ra x Ra x a& x a a\cr
+\+&Ra Rxx Ra x Ra x Ra& x a a\cr
+\+&Ra Rxx Ra x Ra x Ra x& a a\cr
+\+&Ra Rxx Ra x Ra x Ra x a& a\cr
+\+&Ra Rxx Ra x Ra x Ra x Ra& a\cr
+\+&Ra Rxx Ra x Ra x Ra x Ra a& note: extra Ra for lhs/rhs from recursion\cr
+\+&Ra Rxx Ra x Ra x Ra x Ra& though 5 Ra on stack, above lhs/rhs requires 6\cr
+\+&Ra Rxx Ra Rxxx& where Rxxx's rhs needs 4 before it reduces\cr
+\fbreak
+There are 2 direct Ra used and 4 indirect Ra from Rxxx's rhs
+before it is reduced: 3 direct Ra used + 1 Ra for the recursion
+on its last recognized Ra before Rxxx's rhs is completely recognized.
+Recursion of Ra demands 2 Ra: lhs / rhs.
+The first ``a'' recognized creates a Ra that is pushed onto the stack.
+The following ``a'' get recognized by the Ra left recursion rule.
+The first Ra sits on the parse stack whilst the second Ra
+representing the lhs gets ready for the reduce to take place.
+With each recurse reduction the rhs's popped Ra is freed up for recycling.
+After the Rxxx reduction, its 3 Ra also get recycled for use.
+On the parse stack there still remains 2 active Ra
+ of Rs's rhs that remains
+to be recognized.
+If Rxxx was not present in the grammar, the Ra maximum use count
+would be
+5: 2 direct and 2+1 indirect counts from Rxx.\fbreak
+
+@/
+
+fsm
+(fsm-id "rules_use_cnt.lex"
+,fsm-filename rules_use_cnt
+,fsm-namespace NS_rules_use_cnt
+,fsm-class Crules_use_cnt{
+ user-prefix-declaration
+#include "o2_externs.h"
+extern int MAX_USE_CNT_RxR
+ (NS_yacco2_terminals::rule_def* Rule_use
+ ,NS_yacco2_terminals::rule_def* Against_rule);
+ ***
+ user-declaration
+ public:
+ std::list<NS_yacco2_terminals::rule_def* > rules_list_for_use_cnt_;
+ NS_yacco2_terminals::rule_def* rule_def_;
+ NS_yacco2_terminals::T_subrule_def* subrule_def_;
+ void mark_recursion_rule_use(NS_yacco2_terminals::refered_rule* Refered_rule);
+ yacco2::AST* bld_rule_s_use_skeleton(yacco2::AST* Rule_t);
+ ***
+ user-implementation
+ void Crules_use_cnt::mark_recursion_rule_use
+ (NS_yacco2_terminals::refered_rule* Refered_rule){
+ using namespace NS_yacco2_terminals;
+ rule_in_stbl* rule_in_tbl = Refered_rule->Rule_in_stbl();
+ rule_def* rd = rule_in_tbl->r_def();
+ if(rd == rule_def_){
+ rd->recursive(YES);
+ rd->lhs_use_cnt(1);
+ }
+ }
+/@
+@*3 |bld_rule_s_use_skeleton|.
+@/
+ AST* Crules_use_cnt::bld_rule_s_use_skeleton(AST* Rule_t){
+ using namespace NS_yacco2_T_enum;
+ set<int> rules_use_cnt_filter;
+ rules_use_cnt_filter.insert(T_Enum::T_T_subrule_def_);
+ rules_use_cnt_filter.insert(T_Enum::T_rule_def_);
+ rules_use_cnt_filter.insert(T_Enum::T_refered_rule_);
+
+ tok_can_ast_functor rules_use_walk_functr;
+ ast_postfix rules_use_walk(*Rule_t,&rules_use_walk_functr
+ ,&rules_use_cnt_filter,ACCEPT_FILTER);
+ tok_can<AST*> rules_use_can(rules_use_walk);
+ int x(0);
+ CAbs_lr1_sym* sym = rules_use_can[x];
+ rule_def* rd(0);
+ AST* lk_rr_t(0);
+ AST* rr_t(0);
+ AST* sr_t(0);
+ AST* lk_sr_t(0);
+ AST* r_t(0);
+ for(;sym->enumerated_id() != LR1_Eog;++x,sym=rules_use_can[x]){
+ switch(sym->enumerated_id()){
+ case T_Enum::T_rule_def_:{
+ if(sr_t == 0) return 0;// no rhs with refered rules
+ r_t = new AST(*sym);
+ AST::join_pts(*r_t,*sr_t);
+ return r_t;
+ }
+ case T_Enum::T_T_subrule_def_:{
+ if(rr_t == 0) break;// no refered rules
+ AST* srt = new AST(*sym);
+ AST::join_pts(*srt,*rr_t);
+ lk_rr_t = 0;
+ rr_t = 0;
+ if(sr_t == 0){
+ sr_t = srt;
+ lk_sr_t = srt;
+ }else{
+ AST::join_sts(*lk_sr_t,*srt);
+ lk_sr_t = srt;
+ }
+ break;
+ }
+ case T_Enum::T_refered_rule_:{
+ AST* rrt = new AST(*sym);
+ if(rr_t == 0){
+ rr_t = rrt;
+ lk_rr_t = rrt;
+ }else{
+ AST::join_sts(*lk_rr_t,*rrt);
+ lk_rr_t = rrt;
+ }
+ break;
+ }
+ }//switch
+ }//for
+ return 0;
+ }
+ ***
+/@
+Build use skeletons per rule definition.
+As the container is of tree type, the first token is
+the ``start'' rule.
+I can get its tree node and breadth walk it for its brothers.
+The rules list for ``use count'' assessment is built: Rules vocabulary - ``start'' rule.
+The ``start'' rule is removed as it never appears within a rhs as per a grammar's definition.
+@/
+ op
+ tok_can<AST*>* can = (tok_can<AST*>*)parser()->token_supplier();
+ AST* start_rule_t = can->ast(0);
+ AST* t = start_rule_t;
+ for(;t != 0;t=AST::get_younger_sibling(*t,1)){
+ rule_def* rd = (rule_def*)AST::content(*t);
+ AST* use_skeleton_t = bld_rule_s_use_skeleton(t);
+ if(use_skeleton_t != 0) rd->rule_use_skeleton(use_skeleton_t);
+ if(t != start_rule_t) rules_list_for_use_cnt_.push_back(rd);
+ }
+ rule_def_ = 0;
+ subrule_def_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "6 July 2007",fsm-debug "false"
+,fsm-comments "Optimization: Count ``rules used'' \n to lower new / delete rule cycles while parsing.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrules_use_cnt
+(){
+ -> Rrules eog
+}
+
+Rrules (){
+ -> Rrule
+ -> Rrules Rrule
+}
+
+Rrule (){
+ -> Rrule_def Rsubrules
+}
+
+Rrule_def (){
+ -> "rule-def" {
+/@
+Post the rule's used cnt within its definition to be used
+in generating the recycle tables.
+Remember the current rule is assessing its
+indirect rule usage. It is the rule usage definition that gets updated
+for its recycle table requirements and not the current rule.
+@/
+ op
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->rule_def_ = sf->p1__;
+ std::list<NS_yacco2_terminals::rule_def* >::iterator i = fsm->rules_list_for_use_cnt_.begin();
+ std::list<NS_yacco2_terminals::rule_def* >::iterator ie = fsm->rules_list_for_use_cnt_.end();
+ for(;i != ie;++i){
+ rule_def* for_rule = *i;
+ int use_cnt = MAX_USE_CNT_RxR(for_rule,fsm->rule_def_);
+ if(for_rule->rhs_use_cnt() < use_cnt){
+ for_rule->rhs_use_cnt(use_cnt);
+ }
+ }
+ ***
+ }
+}
+
+Rsubrules (){
+ -> Rsubrule Rsubrule_s_used_rules_epi
+ -> Rsubrules Rsubrule Rsubrule_s_used_rules_epi
+}
+
+Rsubrule (){
+ -> Rsubrule_def
+}
+
+Rsubrule_def (){
+ -> "subrule-def" {
+ op
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_ = sf->p1__;
+ ***
+ }
+}
+
+Rsubrule_s_used_rules_epi (){
+ ->
+ -> Rsubrule_s_used_rules
+}
+
+Rsubrule_s_used_rules (){
+ -> "refered-rule" {
+ op
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->mark_recursion_rule_use(sf->p1__);
+ ***
+ }
+ -> Rsubrule_s_used_rules "refered-rule" {
+ op
+ Crules_use_cnt* fsm = (Crules_use_cnt*)rule_info__.parser__->fsm_tbl__;
+ fsm->mark_recursion_rule_use(sf->p2__);
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/rules_use_cntsym.cpp b/web/yacco2/compiler/grammars/rules_use_cntsym.cpp
new file mode 100644
index 0000000000..2aaad60684
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cntsym.cpp
@@ -0,0 +1,213 @@
+/*
+ File: rules_use_cntsym.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_use_cnt;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Crules_use_cnt::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rrules_use_cnt_:{
+ Rrules_use_cnt* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules_use_cnt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules_use_cnt*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rrules_:{
+ Rrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_:{
+ Rrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rrule_def_:{
+ Rrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsubrules_:{
+ Rsubrules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rsubrule_:{
+ Rsubrule* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrule_s_used_rules_epi_:{
+ Rsubrule_s_used_rules_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_s_used_rules_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_s_used_rules_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rsubrule_s_used_rules_epi_:{
+ Rsubrule_s_used_rules_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_s_used_rules_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_s_used_rules_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rsubrule_s_used_rules_:{
+ Rsubrule_s_used_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_s_used_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_s_used_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsubrule_s_used_rules_:{
+ Rsubrule_s_used_rules* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_s_used_rules(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_s_used_rules*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/rules_use_cnttbl.cpp b/web/yacco2/compiler/grammars/rules_use_cnttbl.cpp
new file mode 100644
index 0000000000..3ff5bed25a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/rules_use_cnttbl.cpp
@@ -0,0 +1,363 @@
+/*
+ File: rules_use_cnttbl.cpp
+ Date and Time: Fri Jan 30 18:55:23 2015
+*/
+#include "rules_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_rules_use_cnt;// grammar's ns
+// first set terminals
+// T_subrule_def
+yacco2::UCHAR LA1_Crules_use_cnt[] ={
+1
+,42,64
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Crules_use_cnt[] ={
+1
+,0,4
+};
+// LR1_eog
+// rule_def
+yacco2::UCHAR LA3_Crules_use_cnt[] ={
+2
+,0,2
+,42,16
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+// refered_rule
+yacco2::UCHAR LA4_Crules_use_cnt[] ={
+3
+,0,2
+,42,80
+,43,8
+};
+// LR1_eog
+// rule_def
+// T_subrule_def
+yacco2::UCHAR LA5_Crules_use_cnt[] ={
+2
+,0,2
+,42,80
+};
+extern yacco2::State S1_Crules_use_cnt;
+extern yacco2::State S2_Crules_use_cnt;
+extern yacco2::State S3_Crules_use_cnt;
+extern yacco2::State S4_Crules_use_cnt;
+extern yacco2::State S5_Crules_use_cnt;
+extern yacco2::State S6_Crules_use_cnt;
+extern yacco2::State S7_Crules_use_cnt;
+extern yacco2::State S8_Crules_use_cnt;
+extern yacco2::State S9_Crules_use_cnt;
+extern yacco2::State S10_Crules_use_cnt;
+extern yacco2::State S11_Crules_use_cnt;
+extern yacco2::State S12_Crules_use_cnt;
+extern yacco2::State S13_Crules_use_cnt;
+extern yacco2::State S14_Crules_use_cnt;
+extern yacco2::State S15_Crules_use_cnt;
+extern yacco2::State S16_Crules_use_cnt;
+extern yacco2::State S17_Crules_use_cnt;
+struct S1std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Crules_use_cnt S1st_Crules_use_cnt = {
+ 5
+ ,
+ {// start of table
+ {340,(State*)&S2_Crules_use_cnt} // shift sym: rule_def
+ ,{569,(State*)&S1_Crules_use_cnt} // accept sym: Rrules_use_cnt
+ ,{570,(State*)&S3_Crules_use_cnt} // shift sym: Rrules
+ ,{571,(State*)&S17_Crules_use_cnt} // shift sym: Rrule
+ ,{572,(State*)&S6_Crules_use_cnt} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S1_Crules_use_cnt = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Crules_use_cnt,0,0,0,0};
+struct S2rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Crules_use_cnt S2rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Crules_use_cnt,Crules_use_cnt::rhs1_Rrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Crules_use_cnt = //State's vectored into symbol: "rule-def"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Crules_use_cnt,0,0,0};
+struct S3std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S3std_Crules_use_cnt S3st_Crules_use_cnt = {
+ 4
+ ,
+ {// start of table
+ {1,(State*)&S4_Crules_use_cnt} // shift sym: LR1_eog
+ ,{340,(State*)&S2_Crules_use_cnt} // shift sym: rule_def
+ ,{571,(State*)&S5_Crules_use_cnt} // shift sym: Rrule
+ ,{572,(State*)&S6_Crules_use_cnt} // shift sym: Rrule_def
+ }// end of shift table
+};
+yacco2::State S3_Crules_use_cnt = //State's vectored into symbol: "Rrules"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Crules_use_cnt,0,0,0,0};
+struct S4rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Crules_use_cnt S4rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Crules_use_cnt,Crules_use_cnt::rhs1_Rrules_use_cnt_}
+ }// end of reduce table
+};
+yacco2::State S4_Crules_use_cnt = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Crules_use_cnt,0,0,0};
+struct S5rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Crules_use_cnt S5rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_use_cnt,Crules_use_cnt::rhs2_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S5_Crules_use_cnt = //State's vectored into symbol: "Rrule"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Crules_use_cnt,0,0,0};
+struct S6std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S6std_Crules_use_cnt S6st_Crules_use_cnt = {
+ 4
+ ,
+ {// start of table
+ {342,(State*)&S7_Crules_use_cnt} // shift sym: T_subrule_def
+ ,{573,(State*)&S8_Crules_use_cnt} // shift sym: Rsubrules
+ ,{574,(State*)&S15_Crules_use_cnt} // shift sym: Rsubrule
+ ,{575,(State*)&S14_Crules_use_cnt} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::State S6_Crules_use_cnt = //State's vectored into symbol: "Rrule_def"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Crules_use_cnt,0,0,0,0};
+struct S7rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Crules_use_cnt S7rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S7_Crules_use_cnt = //State's vectored into symbol: "subrule-def"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Crules_use_cnt,0,0,0};
+struct S8std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Crules_use_cnt S8st_Crules_use_cnt = {
+ 3
+ ,
+ {// start of table
+ {342,(State*)&S7_Crules_use_cnt} // shift sym: T_subrule_def
+ ,{574,(State*)&S9_Crules_use_cnt} // shift sym: Rsubrule
+ ,{575,(State*)&S14_Crules_use_cnt} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+struct S8rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Crules_use_cnt S8rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_use_cnt,Crules_use_cnt::rhs1_Rrule_}
+ }// end of reduce table
+};
+yacco2::State S8_Crules_use_cnt = //State's vectored into symbol: "Rsubrules"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Crules_use_cnt,(Reduce_tbl*)&S8rt_Crules_use_cnt,0,0,0};
+struct S9std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Crules_use_cnt S9st_Crules_use_cnt = {
+ 3
+ ,
+ {// start of table
+ {347,(State*)&S10_Crules_use_cnt} // shift sym: refered_rule
+ ,{576,(State*)&S11_Crules_use_cnt} // shift sym: Rsubrule_s_used_rules_epi
+ ,{577,(State*)&S12_Crules_use_cnt} // shift sym: Rsubrule_s_used_rules
+ }// end of shift table
+};
+struct S9rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Crules_use_cnt S9rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrule_s_used_rules_epi_}
+ }// end of reduce table
+};
+yacco2::State S9_Crules_use_cnt = //State's vectored into symbol: "Rsubrule"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Crules_use_cnt,(Reduce_tbl*)&S9rt_Crules_use_cnt,0,0,0};
+struct S10rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Crules_use_cnt S10rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrule_s_used_rules_}
+ }// end of reduce table
+};
+yacco2::State S10_Crules_use_cnt = //State's vectored into symbol: "refered-rule"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Crules_use_cnt,0,0,0};
+struct S11rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Crules_use_cnt S11rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_use_cnt,Crules_use_cnt::rhs2_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S11_Crules_use_cnt = //State's vectored into symbol: "Rsubrule_s_used_rules_epi"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Crules_use_cnt,0,0,0};
+struct S12std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Crules_use_cnt S12st_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {347,(State*)&S13_Crules_use_cnt} // shift sym: refered_rule
+ }// end of shift table
+};
+struct S12rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Crules_use_cnt S12rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_use_cnt,Crules_use_cnt::rhs2_Rsubrule_s_used_rules_epi_}
+ }// end of reduce table
+};
+yacco2::State S12_Crules_use_cnt = //State's vectored into symbol: "Rsubrule_s_used_rules"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Crules_use_cnt,(Reduce_tbl*)&S12rt_Crules_use_cnt,0,0,0};
+struct S13rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Crules_use_cnt S13rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_use_cnt,Crules_use_cnt::rhs2_Rsubrule_s_used_rules_}
+ }// end of reduce table
+};
+yacco2::State S13_Crules_use_cnt = //State's vectored into symbol: "refered-rule"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Crules_use_cnt,0,0,0};
+struct S14rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Crules_use_cnt S14rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrule_}
+ }// end of reduce table
+};
+yacco2::State S14_Crules_use_cnt = //State's vectored into symbol: "Rsubrule_def"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Crules_use_cnt,0,0,0};
+struct S15std_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S15std_Crules_use_cnt S15st_Crules_use_cnt = {
+ 3
+ ,
+ {// start of table
+ {347,(State*)&S10_Crules_use_cnt} // shift sym: refered_rule
+ ,{576,(State*)&S16_Crules_use_cnt} // shift sym: Rsubrule_s_used_rules_epi
+ ,{577,(State*)&S12_Crules_use_cnt} // shift sym: Rsubrule_s_used_rules
+ }// end of shift table
+};
+struct S15rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Crules_use_cnt S15rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrule_s_used_rules_epi_}
+ }// end of reduce table
+};
+yacco2::State S15_Crules_use_cnt = //State's vectored into symbol: "Rsubrule"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Crules_use_cnt,(Reduce_tbl*)&S15rt_Crules_use_cnt,0,0,0};
+struct S16rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Crules_use_cnt S16rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Crules_use_cnt,Crules_use_cnt::rhs1_Rsubrules_}
+ }// end of reduce table
+};
+yacco2::State S16_Crules_use_cnt = //State's vectored into symbol: "Rsubrule_s_used_rules_epi"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Crules_use_cnt,0,0,0};
+struct S17rtd_Crules_use_cnt{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Crules_use_cnt S17rt_Crules_use_cnt = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Crules_use_cnt,Crules_use_cnt::rhs1_Rrules_}
+ }// end of reduce table
+};
+yacco2::State S17_Crules_use_cnt = //State's vectored into symbol: "Rrule"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Crules_use_cnt,0,0,0};
diff --git a/web/yacco2/compiler/grammars/sp_2.cpp b/web/yacco2/compiler/grammars/sp_2.cpp
new file mode 100644
index 0000000000..879774b321
--- /dev/null
+++ b/web/yacco2/compiler/grammars/sp_2.cpp
@@ -0,0 +1,75 @@
+/*
+ File: sp_2.cpp
+ Date and Time: Fri Jan 30 18:50:21 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Csp_2::
+ Csp_2()
+ :yacco2::CAbs_fsm
+ ("sp_2.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"Test out Spector LR(1) resolution page 61."
+ ,"Fri Jan 30 18:50:21 2015 "
+ ,S1_Csp_2){
+
+ }
+
+Csp_2::~Csp_2(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csp_2::failed(){
+ return false;
+ }
+ void Csp_2::op(){
+}
+int Csp_2::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rg::Rg(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rg",0,Csp_2::R_Rg_,P,false,false){
+}
+
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Csp_2::R_Rs_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Csp_2::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Csp_2::R_Rb_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/sp_2.fsc b/web/yacco2/compiler/grammars/sp_2.fsc
new file mode 100644
index 0000000000..f13234284e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/sp_2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: sp_2.fsc
+ Date and Time: Fri Jan 30 18:50:21 2015
+*/
+transitive n
+grammar-name "sp_2"
+name-space "NS_sp_2"
+thread-name "Csp_2"
+monolithic y
+file-name "sp_2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out Spector LR(1) resolution page 61."
diff --git a/web/yacco2/compiler/grammars/sp_2.h b/web/yacco2/compiler/grammars/sp_2.h
new file mode 100644
index 0000000000..651c2d5ec7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/sp_2.h
@@ -0,0 +1,76 @@
+/*
+ File: sp_2.h
+ Date and Time: Fri Jan 30 18:50:21 2015
+*/
+#ifndef __sp_2_h__
+#define __sp_2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Csp_2;
+namespace NS_sp_2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Csp_2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rg_ = 569//start_of_rule_list + 0
+ ,rhs1_Rg_ = 1
+ ,R_Rs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rs_ = 2
+ ,rhs2_Rs_ = 3
+ ,rhs3_Rs_ = 4
+ ,rhs4_Rs_ = 5
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 6
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 15
+ Csp_2();
+ ~Csp_2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rg;
+struct Rs;
+struct Ra;
+struct Rb;
+struct Rg:public yacco2::CAbs_lr1_sym {
+ Rg(yacco2::Parser* P);
+ public:
+};
+
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/sp_2sym.cpp b/web/yacco2/compiler/grammars/sp_2sym.cpp
new file mode 100644
index 0000000000..aab0d0d17b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/sp_2sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: sp_2sym.cpp
+ Date and Time: Fri Jan 30 18:50:21 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Csp_2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/sp_2tbl.cpp b/web/yacco2/compiler/grammars/sp_2tbl.cpp
new file mode 100644
index 0000000000..b9ea49cd1c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/sp_2tbl.cpp
@@ -0,0 +1,267 @@
+/*
+ File: sp_2tbl.cpp
+ Date and Time: Fri Jan 30 18:50:21 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Csp_2[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Csp_2[] ={
+1
+,0,4
+};
+// raw_c
+yacco2::UCHAR LA3_Csp_2[] ={
+1
+,13,8
+};
+// raw_d
+yacco2::UCHAR LA4_Csp_2[] ={
+1
+,13,16
+};
+extern yacco2::State S1_Csp_2;
+extern yacco2::State S2_Csp_2;
+extern yacco2::State S3_Csp_2;
+extern yacco2::State S4_Csp_2;
+extern yacco2::State S5_Csp_2;
+extern yacco2::State S6_Csp_2;
+extern yacco2::State S7_Csp_2;
+extern yacco2::State S8_Csp_2;
+extern yacco2::State S9_Csp_2;
+extern yacco2::State S10_Csp_2;
+extern yacco2::State S11_Csp_2;
+extern yacco2::State S12_Csp_2;
+extern yacco2::State S13_Csp_2;
+extern yacco2::State S14_Csp_2;
+extern yacco2::State S15_Csp_2;
+struct S1std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Csp_2 S1st_Csp_2 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Csp_2} // shift sym: raw_a
+ ,{106,(State*)&S7_Csp_2} // shift sym: raw_b
+ ,{569,(State*)&S1_Csp_2} // accept sym: Rg
+ ,{570,(State*)&S12_Csp_2} // shift sym: Rs
+ }// end of shift table
+};
+yacco2::State S1_Csp_2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Csp_2,0,0,0,0};
+struct S2std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Csp_2 S2st_Csp_2 = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S14_Csp_2} // shift sym: raw_f
+ ,{571,(State*)&S3_Csp_2} // shift sym: Ra
+ ,{572,(State*)&S5_Csp_2} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S2_Csp_2 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Csp_2,0,0,0,0};
+struct S3std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Csp_2 S3st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S4_Csp_2} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S3_Csp_2 = //State's vectored into symbol: "Ra"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Csp_2,0,0,0,0};
+struct S4rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Csp_2 S4rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S4_Csp_2 = //State's vectored into symbol: "c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Csp_2,0,0,0};
+struct S5std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Csp_2 S5st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S6_Csp_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S5_Csp_2 = //State's vectored into symbol: "Rb"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Csp_2,0,0,0,0};
+struct S6rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Csp_2 S6rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs2_Rs_}
+ }// end of reduce table
+};
+yacco2::State S6_Csp_2 = //State's vectored into symbol: "d"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Csp_2,0,0,0};
+struct S7std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Csp_2 S7st_Csp_2 = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S15_Csp_2} // shift sym: raw_f
+ ,{571,(State*)&S8_Csp_2} // shift sym: Ra
+ ,{572,(State*)&S10_Csp_2} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S7_Csp_2 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Csp_2,0,0,0,0};
+struct S8std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Csp_2 S8st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S9_Csp_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S8_Csp_2 = //State's vectored into symbol: "Ra"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Csp_2,0,0,0,0};
+struct S9rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Csp_2 S9rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs3_Rs_}
+ }// end of reduce table
+};
+yacco2::State S9_Csp_2 = //State's vectored into symbol: "d"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Csp_2,0,0,0};
+struct S10std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Csp_2 S10st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S11_Csp_2} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S10_Csp_2 = //State's vectored into symbol: "Rb"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Csp_2,0,0,0,0};
+struct S11rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Csp_2 S11rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs4_Rs_}
+ }// end of reduce table
+};
+yacco2::State S11_Csp_2 = //State's vectored into symbol: "c"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Csp_2,0,0,0};
+struct S12std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Csp_2 S12st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Csp_2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Csp_2 = //State's vectored into symbol: "Rs"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Csp_2,0,0,0,0};
+struct S13rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Csp_2 S13rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csp_2,Csp_2::rhs1_Rg_}
+ }// end of reduce table
+};
+yacco2::State S13_Csp_2 = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Csp_2,0,0,0};
+struct S14rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S14rtd_Csp_2 S14rt_Csp_2 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csp_2,Csp_2::rhs1_Ra_}
+ ,{(Set_tbl*)&LA4_Csp_2,Csp_2::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S14_Csp_2 = //State's vectored into symbol: "f"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Csp_2,0,0,0};
+struct S15rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S15rtd_Csp_2 S15rt_Csp_2 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csp_2,Csp_2::rhs1_Ra_}
+ ,{(Set_tbl*)&LA3_Csp_2,Csp_2::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S15_Csp_2 = //State's vectored into symbol: "f"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Csp_2,0,0,0};
diff --git a/web/yacco2/compiler/grammars/subrule_def.cpp b/web/yacco2/compiler/grammars/subrule_def.cpp
new file mode 100644
index 0000000000..3a5b537604
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_def.cpp
@@ -0,0 +1,1486 @@
+/*
+ File: subrule_def.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_def.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_def;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 36;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[21] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[22] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[23] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[24] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[25] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[26] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[27] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[28] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[29] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[30] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[31] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[32] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[33] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[34] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[35] = new Per_rule_s_reuse_table();
+}
+ Csubrule_def::
+ Csubrule_def()
+ :yacco2::CAbs_fsm
+ ("subrule_def.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,true
+ ,"Parse a subrule: into the valley of sin..."
+ ,"Fri Jan 30 18:55:24 2015 "
+ ,S1_Csubrule_def){
+
+ subrule_def_ = 0;
+
+ }
+
+Csubrule_def::~Csubrule_def(){
+
+ for(int x = 0;x < 36;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csubrule_def::failed(){
+ return false;
+ }
+ void Csubrule_def::op(){
+ if(subrule_def_ != 0){
+ delete subrule_def_;
+ subrule_def_ = 0;
+ }
+ subrule_def_ = new T_subrule_def;
+ subrule_def_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+
+}
+int Csubrule_def::rhs_to_rules_mapping_[78] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,3 // subrule 4 for rule 4
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,4 // subrule 9 for rule 5
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,6 // subrule 14 for rule 7
+ ,7 // subrule 15 for rule 8
+ ,7 // subrule 16 for rule 8
+ ,8 // subrule 17 for rule 9
+ ,9 // subrule 18 for rule 10
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,10 // subrule 21 for rule 11
+ ,10 // subrule 22 for rule 11
+ ,10 // subrule 23 for rule 11
+ ,11 // subrule 24 for rule 12
+ ,11 // subrule 25 for rule 12
+ ,11 // subrule 26 for rule 12
+ ,12 // subrule 27 for rule 13
+ ,13 // subrule 28 for rule 14
+ ,14 // subrule 29 for rule 15
+ ,14 // subrule 30 for rule 15
+ ,15 // subrule 31 for rule 16
+ ,15 // subrule 32 for rule 16
+ ,16 // subrule 33 for rule 17
+ ,16 // subrule 34 for rule 17
+ ,17 // subrule 35 for rule 18
+ ,17 // subrule 36 for rule 18
+ ,17 // subrule 37 for rule 18
+ ,18 // subrule 38 for rule 19
+ ,18 // subrule 39 for rule 19
+ ,18 // subrule 40 for rule 19
+ ,19 // subrule 41 for rule 20
+ ,19 // subrule 42 for rule 20
+ ,19 // subrule 43 for rule 20
+ ,20 // subrule 44 for rule 21
+ ,20 // subrule 45 for rule 21
+ ,21 // subrule 46 for rule 22
+ ,21 // subrule 47 for rule 22
+ ,22 // subrule 48 for rule 23
+ ,23 // subrule 49 for rule 24
+ ,23 // subrule 50 for rule 24
+ ,24 // subrule 51 for rule 25
+ ,25 // subrule 52 for rule 26
+ ,25 // subrule 53 for rule 26
+ ,25 // subrule 54 for rule 26
+ ,26 // subrule 55 for rule 27
+ ,26 // subrule 56 for rule 27
+ ,27 // subrule 57 for rule 28
+ ,27 // subrule 58 for rule 28
+ ,28 // subrule 59 for rule 29
+ ,28 // subrule 60 for rule 29
+ ,29 // subrule 61 for rule 30
+ ,29 // subrule 62 for rule 30
+ ,30 // subrule 63 for rule 31
+ ,31 // subrule 64 for rule 32
+ ,31 // subrule 65 for rule 32
+ ,32 // subrule 66 for rule 33
+ ,32 // subrule 67 for rule 33
+ ,33 // subrule 68 for rule 34
+ ,33 // subrule 69 for rule 34
+ ,34 // subrule 70 for rule 35
+ ,34 // subrule 71 for rule 35
+ ,34 // subrule 72 for rule 35
+ ,34 // subrule 73 for rule 35
+ ,35 // subrule 74 for rule 36
+ ,35 // subrule 75 for rule 36
+ ,35 // subrule 76 for rule 36
+ ,35 // subrule 77 for rule 36
+};
+
+ void Csubrule_def::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Csubrule_def::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->bld_its_tree();
+ RSVP(fsm->subrule_def_);
+ fsm->subrule_def_ = 0;
+
+}
+
+Rvector::Rvector(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rvector",0,Csubrule_def::R_Rvector_,P,false,false){
+}
+
+Rcommon_comments::Rcommon_comments(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcommon_comments",0,Csubrule_def::R_Rcommon_comments_,P,false,false){
+}
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrule_def::AR_Rrhs_expr(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rrhs_expr";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ CAbs_lr1_sym* sym = Caller_pp->pp_accept_queue__[i].accept_token__;
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rrhs_expr::Rrhs_expr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrhs_expr",0,Csubrule_def::R_Rrhs_expr_,P,false,false){
+}
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrule_def::AR_Rstart_thread(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rstart_thread";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ CAbs_lr1_sym* sym = Caller_pp->pp_accept_queue__[i].accept_token__;
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rstart_thread::Rstart_thread(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart_thread",0,Csubrule_def::R_Rstart_thread_,P,false,false){
+}
+
+void Rstart_thread::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ LR1_parallel_operator* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*sf->p2__->id__);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* t = (T_in_stbl*)sym;
+ refered_T* rT = *(t->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(rT);
+ rT->its_subrule_def(fsm->subrule_def_);
+
+}
+
+Rbal_thread_expr::Rbal_thread_expr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbal_thread_expr",0,Csubrule_def::R_Rbal_thread_expr_,P,false,false){
+}
+
+Rrtned_T::Rrtned_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rrtned_T",0,Csubrule_def::R_Rrtned_T_,P,false,false){
+}
+
+void Rrtned_T::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_T* reft = *(sf->p2__->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(reft);
+ reft->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void Rrtned_T::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtned_T::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rrtned_T::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ LR1_parallel_operator* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+
+}
+
+Rcalled_thread::Rcalled_thread(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalled_thread",0,Csubrule_def::R_Rcalled_thread_,P,false,false){
+}
+
+void Rcalled_thread::sr1(){
+ struct SF{
+ Rns* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rdbl_colon* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rth_name* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_called_thread_eosubrule* sym =
+ new T_called_thread_eosubrule(sf->p1__->ns_,sf->p3__->thd_nm_);
+ sym->set_rc(*sf->p1__->ns_,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+
+}
+
+RNULL::RNULL(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNULL",0,Csubrule_def::R_RNULL_,P,false,false){
+}
+
+void RNULL::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_NULL* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_null_call_thread_eosubrule* sym = new T_null_call_thread_eosubrule;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rns::Rns(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rns",0,Csubrule_def::R_Rns_,P,false,false){
+}
+
+void Rns::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ns_ = sf->p2__;
+
+}
+
+void Rns::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_id_for_ns_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rns::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_id_for_ns_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rdbl_colon::Rdbl_colon(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdbl_colon",0,Csubrule_def::R_Rdbl_colon_,P,false,false){
+}
+
+void Rdbl_colon::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_2colon* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rdbl_colon::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_dbl_colon_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rdbl_colon::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_dbl_colon_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rth_name::Rth_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rth_name",0,Csubrule_def::R_Rth_name_,P,false,false){
+}
+
+void Rth_name::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ thd_nm_ = sf->p2__;
+
+}
+
+void Rth_name::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_id_for_th_name_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rth_name::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_id_for_th_name_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrule_def::AR_Rcalled_proc_op(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rcalled_proc_op";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rcalled_proc_op::Rcalled_proc_op(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalled_proc_op",0,Csubrule_def::R_Rcalled_proc_op_,P,false,false){
+}
+
+void Rcalled_proc_op::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ LR1_fset_transience_operator* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*sf->p2__->id__);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* t = (T_in_stbl*)sym;
+ refered_T* rT = *(t->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(rT);
+ rT->its_subrule_def(fsm->subrule_def_);
+
+}
+
+Rbal_called_proc_expr::Rbal_called_proc_expr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rbal_called_proc_expr",0,Csubrule_def::R_Rbal_called_proc_expr_,P,false,false){
+}
+
+Rcalled_proc_name::Rcalled_proc_name(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalled_proc_name",0,Csubrule_def::R_Rcalled_proc_name_,P,false,false){
+}
+
+void Rcalled_proc_name::sr1(){
+ struct SF{
+ Rns* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rdbl_colon* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rth_name* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_called_thread_eosubrule* sym =
+ new T_called_thread_eosubrule(sf->p1__->ns_,sf->p3__->thd_nm_);
+ sym->set_rc(*sf->p1__->ns_,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+
+}
+
+RTorRcomponents_epi::RTorRcomponents_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RTorRcomponents_epi",0,Csubrule_def::R_RTorRcomponents_epi_,P,false,false){
+}
+
+RTorRcomponents::RTorRcomponents(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RTorRcomponents",0,Csubrule_def::R_RTorRcomponents_,P,false,false){
+}
+
+RTorRcomponent::RTorRcomponent(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RTorRcomponent",0,Csubrule_def::R_RTorRcomponent_,P,false,false){
+}
+
+void RTorRcomponent::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_rule* refr = *(sf->p2__->xref_r()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(refr);
+ refr->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void RTorRcomponent::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_T* reft = *(sf->p2__->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(reft);
+ reft->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void RTorRcomponent::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rchained_dispatcher::Rchained_dispatcher(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchained_dispatcher",0,Csubrule_def::R_Rchained_dispatcher_,P,false,false){
+}
+
+void Rchained_dispatcher::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ rule_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_rule* refr = *(sf->p2__->xref_r()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(refr);
+ refr->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void Rchained_dispatcher::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new Err_not_a_Rule();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rchained_dispatcher::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_a_Rule();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmust_eos::Rmust_eos(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_eos",0,Csubrule_def::R_Rmust_eos_,P,false,false){
+}
+
+void Rmust_eos::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eosubrule* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void Rmust_eos::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rmust_eos::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rcalled_thd_eos::Rcalled_thd_eos(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalled_thd_eos",0,Csubrule_def::R_Rcalled_thd_eos_,P,false,false){
+}
+
+void Rcalled_thd_eos::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eosubrule* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void Rcalled_thd_eos::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rcalled_proc_eos::Rcalled_proc_eos(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcalled_proc_eos",0,Csubrule_def::R_Rcalled_proc_eos_,P,false,false){
+}
+
+void Rcalled_proc_eos::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eosubrule* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+
+}
+
+void Rcalled_proc_eos::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpotential_codeblk::Rpotential_codeblk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_codeblk",0,Csubrule_def::R_Rpotential_codeblk_,P,false,false){
+}
+
+Rpotential_directives::Rpotential_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_directives",0,Csubrule_def::R_Rpotential_directives_,P,false,false){
+}
+
+Rmust_directive_phrase::Rmust_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive_phrase",0,Csubrule_def::R_Rmust_directive_phrase_,P,false,false){
+}
+
+void Rmust_directive_phrase::sr1(){
+ struct SF{
+ Rdirective_cweb_k_epi* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint_epi* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rmust_directive* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint_epi* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rmust_directive::Rmust_directive(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmust_directive",0,Csubrule_def::R_Rmust_directive_,P,false,false){
+}
+
+void Rmust_directive::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->subrule_def_->add_directive_to_subrule(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rmust_directive::ctor(){
+
+ directive_ = 0;
+
+}
+void Rmust_directive::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rmust_directive::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rmust_directive::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Csubrule_def::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rmaybe_more_directives::Rmaybe_more_directives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_more_directives",0,Csubrule_def::R_Rmaybe_more_directives_,P,false,false){
+}
+
+Rmaybe_directive_phrases::Rmaybe_directive_phrases(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrases",0,Csubrule_def::R_Rmaybe_directive_phrases_,P,false,false){
+}
+
+Rmaybe_directive_phrase::Rmaybe_directive_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmaybe_directive_phrase",0,Csubrule_def::R_Rmaybe_directive_phrase_,P,false,false){
+}
+
+void Rmaybe_directive_phrase::sr1(){
+ struct SF{
+ Rdirective_cweb_k_epi* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rlint_epi* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rdirective* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rsyntax_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rlint_epi* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+void Rmaybe_directive_phrase::sr2(){
+ struct SF{
+ Rdirective* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rsyntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint_epi* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective_phrase::Rdirective_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_phrase",0,Csubrule_def::R_Rdirective_phrase_,P,false,false){
+}
+
+void Rdirective_phrase::sr1(){
+ struct SF{
+ Rlint_epi* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rdirective_cweb_k_epi* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint_epi* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rdirective* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rsyntax_code* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ Rlint_epi* p6__;
+ State* s6__;
+ bool abort6__;
+ Rule_s_reuse_entry* rule_s_reuse_entry6__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(6);
+
+ AST* cwebt = sf->p2__->cweb_t_;
+ Rdirective* dir = sf->p4__;
+ Rsyntax_code* sdc = sf->p5__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Csubrule_def::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->subrule_def_->add_directive_to_subrule(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rdirective::ctor(){
+
+ directive_ = 0;
+
+}
+void Rdirective::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsyntax_code::Rsyntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsyntax_code",0,Csubrule_def::R_Rsyntax_code_,P,false,false){
+}
+
+void Rsyntax_code::ctor(){
+
+ syntax_code_ = 0;
+
+}
+void Rsyntax_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = sf->p2__;
+
+}
+
+void Rsyntax_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint_epi::Rlint_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint_epi",0,Csubrule_def::R_Rlint_epi_,P,false,false){
+}
+
+Rdirective_cweb_k_epi::Rdirective_cweb_k_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective_cweb_k_epi",0,Csubrule_def::R_Rdirective_cweb_k_epi_,P,false,false){
+}
+
+void Rdirective_cweb_k_epi::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rdirective_cweb_k_epi::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ AST::set_content(*cweb_t_,*cw);
+
+}
+
+void Rdirective_cweb_k_epi::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rdirective_cweb_k_epi::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rcweb_k_epi::Rcweb_k_epi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_k_epi",0,Csubrule_def::R_Rcweb_k_epi_,P,false,false){
+}
+
+void Rcweb_k_epi::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ AST::set_content(*cweb_t_,*cw);
+ fsm->subrule_def_->add_cweb_marker(cweb_t_);
+
+}
+
+void Rcweb_k_epi::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rcweb_k_epi::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/subrule_def.fsc b/web/yacco2/compiler/grammars/subrule_def.fsc
new file mode 100644
index 0000000000..de7e8bbdba
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_def.fsc
@@ -0,0 +1,30 @@
+/*
+ File: subrule_def.fsc
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+transitive y
+grammar-name "subrule_def"
+name-space "NS_subrule_def"
+thread-name "TH_subrule_def"
+monolithic n
+file-name "subrule_def.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_subrule_vector::TH_subrule_vector
+end-list-of-transitive-threads
+list-of-used-threads 10
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_dbl_colon::TH_dbl_colon
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+ NS_parallel_oper::TH_parallel_oper
+ NS_rhs_bnd::TH_rhs_bnd
+ NS_rhs_component::TH_rhs_component
+ NS_rtn_component::TH_rtn_component
+ NS_subrule_vector::TH_subrule_vector
+end-list-of-used-threads
+fsm-comments
+"Parse a subrule: into the valley of sin..."
diff --git a/web/yacco2/compiler/grammars/subrule_def.h b/web/yacco2/compiler/grammars/subrule_def.h
new file mode 100644
index 0000000000..d08a6bcbe4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_def.h
@@ -0,0 +1,476 @@
+/*
+ File: subrule_def.h
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#ifndef __subrule_def_h__
+#define __subrule_def_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+
+#include "subrule_vector.h"
+#include "o2_sdc.h"
+#include "identifier.h"
+#include "dbl_colon.h"
+#include "rhs_component.h"
+#include "rtn_component.h"
+#include "rhs_bnd.h"
+#include "parallel_oper.h"
+
+extern yacco2::Thread_entry ITH_subrule_def;
+
+extern yacco2::State S1_Csubrule_def;
+namespace NS_subrule_def {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_subrule_def(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_subrule_def(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[36];
+};
+class Csubrule_def: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rsubrule_def_ = 569//start_of_rule_list + 0
+ ,rhs1_Rsubrule_def_ = 1
+ ,R_Rvector_ = 570//start_of_rule_list + 2
+ ,rhs1_Rvector_ = 2
+ ,R_Rcommon_comments_ = 571//start_of_rule_list + 4
+ ,rhs1_Rcommon_comments_ = 3
+ ,R_Rrhs_expr_ = 572//start_of_rule_list + 6
+ ,rhs1_Rrhs_expr_ = 4
+ ,rhs2_Rrhs_expr_ = 5
+ ,rhs3_Rrhs_expr_ = 6
+ ,rhs4_Rrhs_expr_ = 7
+ ,rhs5_Rrhs_expr_ = 8
+ ,R_Rstart_thread_ = 573//start_of_rule_list + 8
+ ,rhs1_Rstart_thread_ = 9
+ ,R_Rbal_thread_expr_ = 574//start_of_rule_list + 10
+ ,rhs1_Rbal_thread_expr_ = 10
+ ,R_Rrtned_T_ = 575//start_of_rule_list + 12
+ ,rhs1_Rrtned_T_ = 11
+ ,rhs2_Rrtned_T_ = 12
+ ,rhs3_Rrtned_T_ = 13
+ ,rhs4_Rrtned_T_ = 14
+ ,R_Rcalled_thread_ = 576//start_of_rule_list + 14
+ ,rhs1_Rcalled_thread_ = 15
+ ,rhs2_Rcalled_thread_ = 16
+ ,R_RNULL_ = 577//start_of_rule_list + 16
+ ,rhs1_RNULL_ = 17
+ ,R_Rns_ = 578//start_of_rule_list + 18
+ ,rhs1_Rns_ = 18
+ ,rhs2_Rns_ = 19
+ ,rhs3_Rns_ = 20
+ ,R_Rdbl_colon_ = 579//start_of_rule_list + 20
+ ,rhs1_Rdbl_colon_ = 21
+ ,rhs2_Rdbl_colon_ = 22
+ ,rhs3_Rdbl_colon_ = 23
+ ,R_Rth_name_ = 580//start_of_rule_list + 22
+ ,rhs1_Rth_name_ = 24
+ ,rhs2_Rth_name_ = 25
+ ,rhs3_Rth_name_ = 26
+ ,R_Rcalled_proc_op_ = 581//start_of_rule_list + 24
+ ,rhs1_Rcalled_proc_op_ = 27
+ ,R_Rbal_called_proc_expr_ = 582//start_of_rule_list + 26
+ ,rhs1_Rbal_called_proc_expr_ = 28
+ ,R_Rcalled_proc_name_ = 583//start_of_rule_list + 28
+ ,rhs1_Rcalled_proc_name_ = 29
+ ,rhs2_Rcalled_proc_name_ = 30
+ ,R_RTorRcomponents_epi_ = 584//start_of_rule_list + 30
+ ,rhs1_RTorRcomponents_epi_ = 31
+ ,rhs2_RTorRcomponents_epi_ = 32
+ ,R_RTorRcomponents_ = 585//start_of_rule_list + 32
+ ,rhs1_RTorRcomponents_ = 33
+ ,rhs2_RTorRcomponents_ = 34
+ ,R_RTorRcomponent_ = 586//start_of_rule_list + 34
+ ,rhs1_RTorRcomponent_ = 35
+ ,rhs2_RTorRcomponent_ = 36
+ ,rhs3_RTorRcomponent_ = 37
+ ,R_Rchained_dispatcher_ = 587//start_of_rule_list + 36
+ ,rhs1_Rchained_dispatcher_ = 38
+ ,rhs2_Rchained_dispatcher_ = 39
+ ,rhs3_Rchained_dispatcher_ = 40
+ ,R_Rmust_eos_ = 588//start_of_rule_list + 38
+ ,rhs1_Rmust_eos_ = 41
+ ,rhs2_Rmust_eos_ = 42
+ ,rhs3_Rmust_eos_ = 43
+ ,R_Rcalled_thd_eos_ = 589//start_of_rule_list + 40
+ ,rhs1_Rcalled_thd_eos_ = 44
+ ,rhs2_Rcalled_thd_eos_ = 45
+ ,R_Rcalled_proc_eos_ = 590//start_of_rule_list + 42
+ ,rhs1_Rcalled_proc_eos_ = 46
+ ,rhs2_Rcalled_proc_eos_ = 47
+ ,R_Rpotential_codeblk_ = 591//start_of_rule_list + 44
+ ,rhs1_Rpotential_codeblk_ = 48
+ ,R_Rpotential_directives_ = 592//start_of_rule_list + 46
+ ,rhs1_Rpotential_directives_ = 49
+ ,rhs2_Rpotential_directives_ = 50
+ ,R_Rmust_directive_phrase_ = 593//start_of_rule_list + 48
+ ,rhs1_Rmust_directive_phrase_ = 51
+ ,R_Rmust_directive_ = 594//start_of_rule_list + 50
+ ,rhs1_Rmust_directive_ = 52
+ ,rhs2_Rmust_directive_ = 53
+ ,rhs3_Rmust_directive_ = 54
+ ,R_Rclose_brace_ = 595//start_of_rule_list + 52
+ ,rhs1_Rclose_brace_ = 55
+ ,rhs2_Rclose_brace_ = 56
+ ,R_Rmaybe_more_directives_ = 596//start_of_rule_list + 54
+ ,rhs1_Rmaybe_more_directives_ = 57
+ ,rhs2_Rmaybe_more_directives_ = 58
+ ,R_Rmaybe_directive_phrases_ = 597//start_of_rule_list + 56
+ ,rhs1_Rmaybe_directive_phrases_ = 59
+ ,rhs2_Rmaybe_directive_phrases_ = 60
+ ,R_Rmaybe_directive_phrase_ = 598//start_of_rule_list + 58
+ ,rhs1_Rmaybe_directive_phrase_ = 61
+ ,rhs2_Rmaybe_directive_phrase_ = 62
+ ,R_Rdirective_phrase_ = 599//start_of_rule_list + 60
+ ,rhs1_Rdirective_phrase_ = 63
+ ,R_Rdirective_ = 600//start_of_rule_list + 62
+ ,rhs1_Rdirective_ = 64
+ ,rhs2_Rdirective_ = 65
+ ,R_Rsyntax_code_ = 601//start_of_rule_list + 64
+ ,rhs1_Rsyntax_code_ = 66
+ ,rhs2_Rsyntax_code_ = 67
+ ,R_Rlint_epi_ = 602//start_of_rule_list + 66
+ ,rhs1_Rlint_epi_ = 68
+ ,rhs2_Rlint_epi_ = 69
+ ,R_Rdirective_cweb_k_epi_ = 603//start_of_rule_list + 68
+ ,rhs1_Rdirective_cweb_k_epi_ = 70
+ ,rhs2_Rdirective_cweb_k_epi_ = 71
+ ,rhs3_Rdirective_cweb_k_epi_ = 72
+ ,rhs4_Rdirective_cweb_k_epi_ = 73
+ ,R_Rcweb_k_epi_ = 604//start_of_rule_list + 70
+ ,rhs1_Rcweb_k_epi_ = 74
+ ,rhs2_Rcweb_k_epi_ = 75
+ ,rhs3_Rcweb_k_epi_ = 76
+ ,rhs4_Rcweb_k_epi_ = 77
+ };
+ //no of la sets = 9
+ //no of states = 151
+ Csubrule_def();
+ ~Csubrule_def();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[78];
+
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_subrule_def* subrule_def_;
+
+ };
+struct Rsubrule_def;
+struct Rvector;
+struct Rcommon_comments;
+struct Rrhs_expr;
+struct Rstart_thread;
+struct Rbal_thread_expr;
+struct Rrtned_T;
+struct Rcalled_thread;
+struct RNULL;
+struct Rns;
+struct Rdbl_colon;
+struct Rth_name;
+struct Rcalled_proc_op;
+struct Rbal_called_proc_expr;
+struct Rcalled_proc_name;
+struct RTorRcomponents_epi;
+struct RTorRcomponents;
+struct RTorRcomponent;
+struct Rchained_dispatcher;
+struct Rmust_eos;
+struct Rcalled_thd_eos;
+struct Rcalled_proc_eos;
+struct Rpotential_codeblk;
+struct Rpotential_directives;
+struct Rmust_directive_phrase;
+struct Rmust_directive;
+struct Rclose_brace;
+struct Rmaybe_more_directives;
+struct Rmaybe_directive_phrases;
+struct Rmaybe_directive_phrase;
+struct Rdirective_phrase;
+struct Rdirective;
+struct Rsyntax_code;
+struct Rlint_epi;
+struct Rdirective_cweb_k_epi;
+struct Rcweb_k_epi;
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rvector:public yacco2::CAbs_lr1_sym {
+ Rvector(yacco2::Parser* P);
+ public:
+};
+
+struct Rcommon_comments:public yacco2::CAbs_lr1_sym {
+ Rcommon_comments(yacco2::Parser* P);
+ public:
+};
+
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rrhs_expr(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rrhs_expr:public yacco2::CAbs_lr1_sym {
+ Rrhs_expr(yacco2::Parser* P);
+ public:
+};
+
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rstart_thread(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rstart_thread:public yacco2::CAbs_lr1_sym {
+ Rstart_thread(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rbal_thread_expr:public yacco2::CAbs_lr1_sym {
+ Rbal_thread_expr(yacco2::Parser* P);
+ public:
+};
+
+struct Rrtned_T:public yacco2::CAbs_lr1_sym {
+ Rrtned_T(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rcalled_thread:public yacco2::CAbs_lr1_sym {
+ Rcalled_thread(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RNULL:public yacco2::CAbs_lr1_sym {
+ RNULL(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rns:public yacco2::CAbs_lr1_sym {
+ Rns(yacco2::Parser* P);
+
+ public:
+ T_identifier* ns_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rdbl_colon:public yacco2::CAbs_lr1_sym {
+ Rdbl_colon(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rth_name:public yacco2::CAbs_lr1_sym {
+ Rth_name(yacco2::Parser* P);
+
+ public:
+ T_identifier* thd_nm_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rcalled_proc_op(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rcalled_proc_op:public yacco2::CAbs_lr1_sym {
+ Rcalled_proc_op(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rbal_called_proc_expr:public yacco2::CAbs_lr1_sym {
+ Rbal_called_proc_expr(yacco2::Parser* P);
+ public:
+};
+
+struct Rcalled_proc_name:public yacco2::CAbs_lr1_sym {
+ Rcalled_proc_name(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RTorRcomponents_epi:public yacco2::CAbs_lr1_sym {
+ RTorRcomponents_epi(yacco2::Parser* P);
+ public:
+};
+
+struct RTorRcomponents:public yacco2::CAbs_lr1_sym {
+ RTorRcomponents(yacco2::Parser* P);
+ public:
+};
+
+struct RTorRcomponent:public yacco2::CAbs_lr1_sym {
+ RTorRcomponent(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rchained_dispatcher:public yacco2::CAbs_lr1_sym {
+ Rchained_dispatcher(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rmust_eos:public yacco2::CAbs_lr1_sym {
+ Rmust_eos(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rcalled_thd_eos:public yacco2::CAbs_lr1_sym {
+ Rcalled_thd_eos(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rcalled_proc_eos:public yacco2::CAbs_lr1_sym {
+ Rcalled_proc_eos(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rpotential_codeblk:public yacco2::CAbs_lr1_sym {
+ Rpotential_codeblk(yacco2::Parser* P);
+ public:
+};
+
+struct Rpotential_directives:public yacco2::CAbs_lr1_sym {
+ Rpotential_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmust_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmust_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rmust_directive:public yacco2::CAbs_lr1_sym {
+ Rmust_directive(yacco2::Parser* P);
+ void op();
+ void ctor();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rmaybe_more_directives:public yacco2::CAbs_lr1_sym {
+ Rmaybe_more_directives(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrases:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrases(yacco2::Parser* P);
+ public:
+};
+
+struct Rmaybe_directive_phrase:public yacco2::CAbs_lr1_sym {
+ Rmaybe_directive_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rdirective_phrase:public yacco2::CAbs_lr1_sym {
+ Rdirective_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ void op();
+ void ctor();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rsyntax_code:public yacco2::CAbs_lr1_sym {
+ Rsyntax_code(yacco2::Parser* P);
+ void ctor();
+
+ T_syntax_code* syntax_code_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlint_epi:public yacco2::CAbs_lr1_sym {
+ Rlint_epi(yacco2::Parser* P);
+ public:
+};
+
+struct Rdirective_cweb_k_epi:public yacco2::CAbs_lr1_sym {
+ Rdirective_cweb_k_epi(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+struct Rcweb_k_epi:public yacco2::CAbs_lr1_sym {
+ Rcweb_k_epi(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/subrule_def.lex b/web/yacco2/compiler/grammars/subrule_def.lex
new file mode 100644
index 0000000000..40027f2b37
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_def.lex
@@ -0,0 +1,849 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: subrule_def.lex
+new definition for subrule_def.lex
+Dates: 3 Jun 2004
+Purpose: parse subrule's expression
+Output: T_subrule_def
+ assorted errors
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |subrule_def| Thread.\fbreak
+Parse a rule's subrule expression.\fbreak
+Example of a parallel-parser construct to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/subrdef.txt"}
+
+@/
+fsm
+(fsm-id "subrule_def.lex"
+,fsm-filename subrule_def
+,fsm-namespace NS_subrule_def
+,fsm-class Csubrule_def{
+ user-prefix-declaration
+using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+
+#include "subrule_vector.h"
+#include "o2_sdc.h"
+#include "identifier.h"
+#include "dbl_colon.h"
+#include "rhs_component.h"
+#include "rtn_component.h"
+#include "rhs_bnd.h"
+#include "parallel_oper.h"
+ ***
+ user-declaration
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_subrule_def* subrule_def_;
+ ***
+ user-implementation
+ void Csubrule_def::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+ ***
+ op
+ if(subrule_def_ != 0){
+ delete subrule_def_;
+ subrule_def_ = 0;
+ }
+ subrule_def_ = new T_subrule_def;
+ subrule_def_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ ***
+ constructor
+ subrule_def_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "true"
+,fsm-comments "Parse a subrule: into the valley of sin...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_subrule_def
+ ***
+ parallel-la-boundary
+ eolr - ||| - |.| - |t|
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rsubrule_def
+/@
+Use of \invisibleshift to make grammar lr(1) due to s/r conflict on \PARshift.
+@/
+(){
+ -> Rvector |.| Rcommon_comments Rrhs_expr {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->bld_its_tree();
+ RSVP(fsm->subrule_def_);
+ fsm->subrule_def_ = 0;
+ ***
+ }
+}
+
+Rvector (){
+ -> ||| "->" NS_subrule_vector::TH_subrule_vector
+}
+
+Rcommon_comments
+/@
+Basic possible lint balls and a single
+ cweb comment fronting the sub rule definition.
+@/
+(){
+ -> Rlint_epi Rcweb_k_epi Rlint_epi
+}
+
+Rrhs_expr
+/@
+Use of \invisibleshift to make grammar lr(1) due to s/r conflict on \PARshift.
+@/
+(
+//lhs,
+parallel-control-monitor{
+/@
+Due to my wanting to emphasize a specific
+ versus a general grammar expression, there are 2 threads recognizing
+ the same token \paralleloperator{} only at the beginning of subrule
+ so zero out the T-in-stbl from the accept queue as
+ this is more general.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ CAbs_lr1_sym* sym = Caller_pp->pp_accept_queue__[i].accept_token__;
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ ->
+/@
+A regular grammar expression containing either \emptyrule{} or an \Alpha{} string
+of symbols drawn from the T or R vocabularies.
+Why the \INVshift{} symbol following |RTorRcomponents_epi|?
+There is a shift / reduce conflict caused by the \PARshift{} so
+let the \emptyrule{} reduce on this meta terminal.
+@/
+RTorRcomponents_epi |.| Rmust_eos Rpotential_codeblk Rlint_epi
+ ->
+/@
+Your standard thread call expression.
+@/
+Rstart_thread Rlint_epi Rbal_thread_expr
+ Rlint_epi |.| Rcalled_thd_eos
+ Rlint_epi Rpotential_codeblk Rlint_epi
+ ->
+/@
+The new back-to-back chained thread call dispatcher expression.
+|Rchained_dispatcher| rule supports nested chained calls.
+The returned output from the \TRAshift{} expression becomes the input
+to the next |Rchained_dispatcher| \TRAshift{} expression.
+@/
+Rstart_thread Rlint_epi Rbal_thread_expr
+ Rlint_epi |.| Rchained_dispatcher
+ Rlint_epi Rcalled_thd_eos
+ Rlint_epi Rpotential_codeblk Rlint_epi
+ ->
+/@
+Your chained procedure call expression.
+It can be used against a previous T element.
+Note: a R element is not allowed as the chained procedure call
+uses the stacked T of the caller parser
+as its First set. So what does |Rxxx| mean to it? nada.
+@/
+Rcalled_proc_op Rlint_epi Rbal_called_proc_expr
+ Rlint_epi |.| Rcalled_proc_eos
+ Rlint_epi Rpotential_codeblk Rlint_epi
+ ->
+/@
+The new back-to-back chained thread call dispatcher expression.
+@/
+Rcalled_proc_op Rlint_epi Rbal_called_proc_expr
+ Rlint_epi |.| Rchained_dispatcher
+ Rlint_epi Rcalled_proc_eos
+ Rlint_epi Rpotential_codeblk Rlint_epi
+}
+
+Rstart_thread (
+//lhs,
+parallel-control-monitor{
+/@
+Due to my wanting to emphasize a specific
+ versus a general grammar expression, there are 2 threads recognizing
+ the same token \paralleloperator{} only at the beginning of subrule
+ so i'll zero out the T-in-stbl from the accept queue to as
+ this is more general.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ CAbs_lr1_sym* sym = Caller_pp->pp_accept_queue__[i].accept_token__;
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(sym->enumerated_id__ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ -> ||| "|||" NS_parallel_oper::TH_parallel_oper {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*sf->p2__->id__);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* t = (T_in_stbl*)sym;
+ refered_T* rT = *(t->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(rT);
+ rT->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+}
+
+Rbal_thread_expr (){
+ -> Rrtned_T Rlint_epi Rcalled_thread
+}
+
+Rrtned_T (){
+ -> ||| "T-in-stbl" NS_rtn_component::TH_rtn_component {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_T* reft = *(sf->p2__->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(reft);
+ reft->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> ||| |?| NULL {
+ /@
+ Other returned types are errors.
+ @/
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_for_rtned_token_from_th();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| ||| NULL {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ ***
+ }
+}
+
+Rcalled_thread (){
+ -> Rns Rdbl_colon Rth_name {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_called_thread_eosubrule* sym =
+ new T_called_thread_eosubrule(sf->p1__->ns_,sf->p3__->thd_nm_);
+ sym->set_rc(*sf->p1__->ns_,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+ ***
+ }
+ -> RNULL
+}
+
+RNULL (){
+ -> ||| "#NULL" NS_identifier::TH_identifier {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_null_call_thread_eosubrule* sym = new T_null_call_thread_eosubrule;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rns (
+lhs {
+ user-declaration
+ public:
+ T_identifier* ns_;
+ ***
+}
+){
+ -> ||| identifier NULL {
+ op
+ ns_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_id_for_ns_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_id_for_ns_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rdbl_colon (){
+ -> ||| "::" NS_dbl_colon::TH_dbl_colon {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_dbl_colon_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_dbl_colon_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rth_name (
+lhs {
+ user-declaration
+ public:
+ T_identifier* thd_nm_;
+ ***
+}
+){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ thd_nm_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_id_for_th_name_in_th_stmt();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_id_for_th_name_in_th_stmt();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rcalled_proc_op (
+//lhs,
+parallel-control-monitor{
+/@
+Due to my wanting to emphasize a specific
+ versus a general grammar expression, there are 2 threads recognizing
+ the same token \TRAshift{} only at the beginning of subrule
+ so i'll zero out the T-in-stbl from the accept queue so as
+ this is more general.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_LR1_parallel_operator_){
+ goto arbitrated_parameter;
+ }
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_yacco2_T_enum::T_Enum::T_LR1_fset_transience_operator_){
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ -> ||| "|t|" NULL {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*sf->p2__->id__);
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ CAbs_lr1_sym* sym = new Err_subrule_use_undefined_T;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ CAbs_lr1_sym* sym = report_card.tbl_entry_->symbol_;
+ T_in_stbl* t = (T_in_stbl*)sym;
+ refered_T* rT = *(t->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(rT);
+ rT->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+}
+
+Rbal_called_proc_expr (){
+ -> Rrtned_T Rlint_epi Rcalled_proc_name
+}
+
+Rcalled_proc_name (){
+ -> Rns Rdbl_colon Rth_name {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_called_thread_eosubrule* sym =
+ new T_called_thread_eosubrule(sf->p1__->ns_,sf->p3__->thd_nm_);
+ sym->set_rc(*sf->p1__->ns_,__FILE__,__LINE__);
+ sym->its_subrule_def(fsm->subrule_def_);
+ fsm->subrule_def_->add_elem_to_subrule_vector(sym);
+ ***
+ }
+ -> RNULL
+}
+
+
+RTorRcomponents_epi (){
+ ->
+ -> RTorRcomponents
+}
+
+RTorRcomponents (){
+ -> RTorRcomponent Rlint_epi
+ -> RTorRcomponents RTorRcomponent Rlint_epi
+}
+
+RTorRcomponent (){
+ -> ||| "rule-in-stbl" NS_rhs_component::TH_rhs_component {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_rule* refr = *(sf->p2__->xref_r()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(refr);
+ refr->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_T* reft = *(sf->p2__->xref_t()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(reft);
+ reft->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_T_or_R_in_subrule_expr();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rchained_dispatcher (){
+ -> ||| "rule-in-stbl" NS_rhs_component::TH_rhs_component {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ refered_rule* refr = *(sf->p2__->xref_r()->rbegin());
+ fsm->subrule_def_->add_elem_to_subrule_vector(refr);
+ refr->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new Err_not_a_Rule();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_a_Rule();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rmust_eos (){
+ -> ||| "eosubrule" NS_rhs_bnd::TH_rhs_bnd {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rcalled_thd_eos (){
+ -> ||| "eosubrule" NS_rhs_bnd::TH_rhs_bnd {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rcalled_proc_eos (){
+ -> ||| "eosubrule" NS_rhs_bnd::TH_rhs_bnd {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ sf->p2__->its_subrule_def(fsm->subrule_def_);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_not_eos_in_subrule_expr();
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpotential_codeblk (){
+ -> Rpotential_directives
+}
+
+Rpotential_directives (){
+ -> // no syntax code: end of subsule
+ -> "{" Rlint_epi Rmust_directive_phrase Rmaybe_more_directives Rclose_brace Rlint_epi
+}
+
+Rmust_directive_phrase (){
+ -> Rdirective_cweb_k_epi Rlint_epi Rmust_directive Rsyntax_code Rlint_epi {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rmust_directive* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rmust_directive (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ constructor
+ directive_ = 0;
+ ***
+ op
+ if(directive_ == 0) return;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->subrule_def_->add_directive_to_subrule(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#op" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_directive_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rmaybe_more_directives (){
+ ->
+ -> Rmaybe_directive_phrases
+}
+
+Rmaybe_directive_phrases (){
+ -> Rmaybe_directive_phrase
+ -> Rmaybe_directive_phrases Rmaybe_directive_phrase
+}
+
+Rmaybe_directive_phrase (){
+ -> Rdirective_cweb_k_epi Rlint_epi Rdirective Rsyntax_code Rlint_epi {
+ op
+ AST* cwebt = sf->p1__->cweb_t_;
+ Rdirective* dir = sf->p3__;
+ Rsyntax_code* sdc = sf->p4__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+ -> Rdirective Rsyntax_code Rlint_epi {
+ op
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective_phrase (){
+ -> Rlint_epi Rdirective_cweb_k_epi Rlint_epi Rdirective Rsyntax_code Rlint_epi {
+ op
+ AST* cwebt = sf->p2__->cweb_t_;
+ Rdirective* dir = sf->p4__;
+ Rsyntax_code* sdc = sf->p5__;
+ if(cwebt != 0){
+ sdc->syntax_code_->add_cweb_marker(cwebt);
+ }
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ constructor
+ directive_ = 0;
+ ***
+ op
+ if(directive_ == 0) return;
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->subrule_def_->add_directive_to_subrule(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#op" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+
+Rsyntax_code (
+lhs {
+ user-declaration
+ T_syntax_code* syntax_code_;
+ ***
+ constructor
+ syntax_code_ = 0;
+ ***
+ }
+){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ syntax_code_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL { // catcher in the Rye? These are errors
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint_epi (){
+ -> ||| "lint" NS_lint_balls::TH_lint_balls
+ -> |.| // needed to stop being not lr1
+}
+
+Rdirective_cweb_k_epi (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ AST::set_content(*cweb_t_,*cw);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "comment" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rcweb_k_epi (){
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ AST::set_content(*cweb_t_,*cw);
+ fsm->subrule_def_->add_cweb_marker(cweb_t_);
+ ***
+ }
+ -> ||| "comment-overrun" NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "comment" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/subrule_defsym.cpp b/web/yacco2/compiler/grammars/subrule_defsym.cpp
new file mode 100644
index 0000000000..e5dfcd3fa1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_defsym.cpp
@@ -0,0 +1,1192 @@
+/*
+ File: subrule_defsym.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_def.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_def;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrule_def::TH_subrule_def(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_subrule_def;
+ NS_subrule_def::Csubrule_def Csubrule_def_;// parallel-parser's parse table
+#define ssPARSE_TABLE Csubrule_def_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_subrule_def::PROC_TH_subrule_def(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_subrule_def";
+ static bool one_time(false);
+ static NS_subrule_def::Csubrule_def* NS_subrule_def_Csubrule_def_(0);// parallel-parser's fsm table
+ static Parser* NS_subrule_def_Csubrule_def_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_subrule_def_Csubrule_def_ = new NS_subrule_def::Csubrule_def();// parallel-parser's fsm table
+ NS_subrule_def_Csubrule_def_parser = new Parser(*NS_subrule_def_Csubrule_def_,Caller_pp);
+ }
+ proc_parser = NS_subrule_def_Csubrule_def_parser;
+#include "wproc_pp_core.h"
+}
+void
+Csubrule_def::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rvector_:{
+ Rvector* sym;
+ if(re->rule_ == 0){
+ sym = new Rvector(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rvector*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rcommon_comments_:{
+ Rcommon_comments* sym;
+ if(re->rule_ == 0){
+ sym = new Rcommon_comments(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcommon_comments*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rrhs_expr_:{
+ Rrhs_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rrhs_expr_:{
+ Rrhs_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 9;
+
+
+ return;}
+ case rhs3_Rrhs_expr_:{
+ Rrhs_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 11;
+
+
+ return;}
+ case rhs4_Rrhs_expr_:{
+ Rrhs_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 9;
+
+
+ return;}
+ case rhs5_Rrhs_expr_:{
+ Rrhs_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rrhs_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrhs_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 11;
+
+
+ return;}
+ case rhs1_Rstart_thread_:{
+ Rstart_thread* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart_thread(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart_thread*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rbal_thread_expr_:{
+ Rbal_thread_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rbal_thread_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbal_thread_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rrtned_T_:{
+ Rrtned_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtned_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtned_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rrtned_T_:{
+ Rrtned_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtned_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtned_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rrtned_T_:{
+ Rrtned_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtned_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtned_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rrtned_T_:{
+ Rrtned_T* sym;
+ if(re->rule_ == 0){
+ sym = new Rrtned_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rrtned_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rcalled_thread_:{
+ Rcalled_thread* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_thread(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_thread*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcalled_thread_:{
+ Rcalled_thread* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_thread(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_thread*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RNULL_:{
+ RNULL* sym;
+ if(re->rule_ == 0){
+ sym = new RNULL(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNULL*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rns_:{
+ Rns* sym;
+ if(re->rule_ == 0){
+ sym = new Rns(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rns*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rns_:{
+ Rns* sym;
+ if(re->rule_ == 0){
+ sym = new Rns(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rns*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rns_:{
+ Rns* sym;
+ if(re->rule_ == 0){
+ sym = new Rns(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rns*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rdbl_colon_:{
+ Rdbl_colon* sym;
+ if(re->rule_ == 0){
+ sym = new Rdbl_colon(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdbl_colon*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdbl_colon_:{
+ Rdbl_colon* sym;
+ if(re->rule_ == 0){
+ sym = new Rdbl_colon(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdbl_colon*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdbl_colon_:{
+ Rdbl_colon* sym;
+ if(re->rule_ == 0){
+ sym = new Rdbl_colon(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdbl_colon*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rth_name_:{
+ Rth_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rth_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rth_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rth_name_:{
+ Rth_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rth_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rth_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rth_name_:{
+ Rth_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rth_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rth_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rcalled_proc_op_:{
+ Rcalled_proc_op* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_proc_op(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_proc_op*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rbal_called_proc_expr_:{
+ Rbal_called_proc_expr* sym;
+ if(re->rule_ == 0){
+ sym = new Rbal_called_proc_expr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rbal_called_proc_expr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rcalled_proc_name_:{
+ Rcalled_proc_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_proc_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_proc_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcalled_proc_name_:{
+ Rcalled_proc_name* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_proc_name(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_proc_name*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RTorRcomponents_epi_:{
+ RTorRcomponents_epi* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponents_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponents_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RTorRcomponents_epi_:{
+ RTorRcomponents_epi* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponents_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponents_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RTorRcomponents_:{
+ RTorRcomponents* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponents(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponents*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RTorRcomponents_:{
+ RTorRcomponents* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponents(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponents*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RTorRcomponent_:{
+ RTorRcomponent* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponent(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponent*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_RTorRcomponent_:{
+ RTorRcomponent* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponent(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponent*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_RTorRcomponent_:{
+ RTorRcomponent* sym;
+ if(re->rule_ == 0){
+ sym = new RTorRcomponent(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RTorRcomponent*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rchained_dispatcher_:{
+ Rchained_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rchained_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchained_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rchained_dispatcher_:{
+ Rchained_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rchained_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchained_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rchained_dispatcher_:{
+ Rchained_dispatcher* sym;
+ if(re->rule_ == 0){
+ sym = new Rchained_dispatcher(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchained_dispatcher*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rmust_eos_:{
+ Rmust_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmust_eos_:{
+ Rmust_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rmust_eos_:{
+ Rmust_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rcalled_thd_eos_:{
+ Rcalled_thd_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_thd_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_thd_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcalled_thd_eos_:{
+ Rcalled_thd_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_thd_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_thd_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rcalled_proc_eos_:{
+ Rcalled_proc_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_proc_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_proc_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcalled_proc_eos_:{
+ Rcalled_proc_eos* sym;
+ if(re->rule_ == 0){
+ sym = new Rcalled_proc_eos(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcalled_proc_eos*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rpotential_codeblk_:{
+ Rpotential_codeblk* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_codeblk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_codeblk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rpotential_directives_:{
+ Rpotential_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Rmust_directive_phrase_:{
+ Rmust_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rmust_directive_:{
+ Rmust_directive* sym;
+ if(re->rule_ == 0){
+ sym = new Rmust_directive(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmust_directive*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rmaybe_more_directives_:{
+ Rmaybe_more_directives* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_more_directives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_more_directives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rmaybe_directive_phrases_:{
+ Rmaybe_directive_phrases* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrases(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrases*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rmaybe_directive_phrase_:{
+ Rmaybe_directive_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rmaybe_directive_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmaybe_directive_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rdirective_phrase_:{
+ Rdirective_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs1_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlint_epi_:{
+ Rlint_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_epi_:{
+ Rlint_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdirective_cweb_k_epi_:{
+ Rdirective_cweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k_epi*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rdirective_cweb_k_epi_:{
+ Rdirective_cweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k_epi*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rdirective_cweb_k_epi_:{
+ Rdirective_cweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k_epi*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rdirective_cweb_k_epi_:{
+ Rdirective_cweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective_cweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective_cweb_k_epi*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs1_Rcweb_k_epi_:{
+ Rcweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_k_epi_:{
+ Rcweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rcweb_k_epi_:{
+ Rcweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rcweb_k_epi_:{
+ Rcweb_k_epi* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k_epi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k_epi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/subrule_deftbl.cpp b/web/yacco2/compiler/grammars/subrule_deftbl.cpp
new file mode 100644
index 0000000000..c098b3d3bc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_deftbl.cpp
@@ -0,0 +1,4291 @@
+/*
+ File: subrule_deftbl.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_def.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_def;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Csubrule_def[] ={
+1
+,0,32
+};
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA2_Csubrule_def[] ={
+1
+,0,48
+};
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA3_Csubrule_def[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+// LR1_questionable_shift_operator
+// LR1_eog
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA4_Csubrule_def[] ={
+72
+,0,51
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA5_Csubrule_def[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA6_Csubrule_def[] ={
+2
+,0,1
+,16,32
+};
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA7_Csubrule_def[] ={
+2
+,0,48
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// LR1_invisible_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA8_Csubrule_def[] ={
+2
+,0,49
+,16,32
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA9_Csubrule_def[] ={
+1
+,0,16
+};
+extern yacco2::State S1_Csubrule_def;
+extern yacco2::State S2_Csubrule_def;
+struct S2ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Csubrule_def S2tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_subrule_vector
+};
+extern yacco2::State S3_Csubrule_def;
+extern yacco2::State S4_Csubrule_def;
+extern yacco2::State S5_Csubrule_def;
+extern yacco2::State S6_Csubrule_def;
+extern yacco2::State S7_Csubrule_def;
+struct S7ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S7ttd_Csubrule_def S7tt_Csubrule_def = {
+ 2 // no of threads
+ ,AR_Rstart_thread //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_parallel_oper
+ ,(yacco2::Thread_entry*)&ITH_rhs_component
+};
+extern yacco2::State S8_Csubrule_def;
+extern yacco2::State S9_Csubrule_def;
+extern yacco2::State S10_Csubrule_def;
+extern yacco2::State S11_Csubrule_def;
+extern yacco2::State S12_Csubrule_def;
+extern yacco2::State S13_Csubrule_def;
+extern yacco2::State S14_Csubrule_def;
+extern yacco2::State S15_Csubrule_def;
+extern yacco2::State S16_Csubrule_def;
+extern yacco2::State S17_Csubrule_def;
+extern yacco2::State S18_Csubrule_def;
+extern yacco2::State S19_Csubrule_def;
+extern yacco2::State S20_Csubrule_def;
+extern yacco2::State S21_Csubrule_def;
+extern yacco2::State S22_Csubrule_def;
+extern yacco2::State S23_Csubrule_def;
+extern yacco2::State S24_Csubrule_def;
+struct S24ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S24ttd_Csubrule_def S24tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S25_Csubrule_def;
+extern yacco2::State S26_Csubrule_def;
+extern yacco2::State S27_Csubrule_def;
+extern yacco2::State S28_Csubrule_def;
+extern yacco2::State S29_Csubrule_def;
+extern yacco2::State S30_Csubrule_def;
+extern yacco2::State S31_Csubrule_def;
+extern yacco2::State S32_Csubrule_def;
+extern yacco2::State S33_Csubrule_def;
+extern yacco2::State S34_Csubrule_def;
+extern yacco2::State S35_Csubrule_def;
+extern yacco2::State S36_Csubrule_def;
+extern yacco2::State S37_Csubrule_def;
+extern yacco2::State S38_Csubrule_def;
+extern yacco2::State S39_Csubrule_def;
+extern yacco2::State S40_Csubrule_def;
+extern yacco2::State S41_Csubrule_def;
+extern yacco2::State S42_Csubrule_def;
+extern yacco2::State S43_Csubrule_def;
+extern yacco2::State S44_Csubrule_def;
+extern yacco2::State S45_Csubrule_def;
+extern yacco2::State S46_Csubrule_def;
+extern yacco2::State S47_Csubrule_def;
+extern yacco2::State S48_Csubrule_def;
+extern yacco2::State S49_Csubrule_def;
+extern yacco2::State S50_Csubrule_def;
+extern yacco2::State S51_Csubrule_def;
+extern yacco2::State S52_Csubrule_def;
+extern yacco2::State S53_Csubrule_def;
+extern yacco2::State S54_Csubrule_def;
+extern yacco2::State S55_Csubrule_def;
+extern yacco2::State S56_Csubrule_def;
+extern yacco2::State S57_Csubrule_def;
+extern yacco2::State S58_Csubrule_def;
+extern yacco2::State S59_Csubrule_def;
+extern yacco2::State S60_Csubrule_def;
+extern yacco2::State S61_Csubrule_def;
+struct S61ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S61ttd_Csubrule_def S61tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rtn_component
+};
+extern yacco2::State S62_Csubrule_def;
+extern yacco2::State S63_Csubrule_def;
+extern yacco2::State S64_Csubrule_def;
+extern yacco2::State S65_Csubrule_def;
+extern yacco2::State S66_Csubrule_def;
+extern yacco2::State S67_Csubrule_def;
+extern yacco2::State S68_Csubrule_def;
+struct S68ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S68ttd_Csubrule_def S68tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S69_Csubrule_def;
+extern yacco2::State S70_Csubrule_def;
+extern yacco2::State S71_Csubrule_def;
+extern yacco2::State S72_Csubrule_def;
+extern yacco2::State S73_Csubrule_def;
+extern yacco2::State S74_Csubrule_def;
+extern yacco2::State S75_Csubrule_def;
+extern yacco2::State S76_Csubrule_def;
+extern yacco2::State S77_Csubrule_def;
+struct S77ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S77ttd_Csubrule_def S77tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S78_Csubrule_def;
+extern yacco2::State S79_Csubrule_def;
+extern yacco2::State S80_Csubrule_def;
+extern yacco2::State S81_Csubrule_def;
+extern yacco2::State S82_Csubrule_def;
+struct S82ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S82ttd_Csubrule_def S82tt_Csubrule_def = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_component
+ ,(yacco2::Thread_entry*)&ITH_rhs_bnd
+};
+extern yacco2::State S83_Csubrule_def;
+extern yacco2::State S84_Csubrule_def;
+extern yacco2::State S85_Csubrule_def;
+extern yacco2::State S86_Csubrule_def;
+extern yacco2::State S87_Csubrule_def;
+struct S87ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S87ttd_Csubrule_def S87tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_bnd
+};
+extern yacco2::State S88_Csubrule_def;
+extern yacco2::State S89_Csubrule_def;
+extern yacco2::State S90_Csubrule_def;
+extern yacco2::State S91_Csubrule_def;
+extern yacco2::State S92_Csubrule_def;
+extern yacco2::State S93_Csubrule_def;
+extern yacco2::State S94_Csubrule_def;
+extern yacco2::State S95_Csubrule_def;
+extern yacco2::State S96_Csubrule_def;
+extern yacco2::State S97_Csubrule_def;
+extern yacco2::State S98_Csubrule_def;
+extern yacco2::State S99_Csubrule_def;
+extern yacco2::State S100_Csubrule_def;
+extern yacco2::State S101_Csubrule_def;
+extern yacco2::State S102_Csubrule_def;
+extern yacco2::State S103_Csubrule_def;
+struct S103ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S103ttd_Csubrule_def S103tt_Csubrule_def = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_component
+ ,(yacco2::Thread_entry*)&ITH_rhs_bnd
+};
+extern yacco2::State S104_Csubrule_def;
+extern yacco2::State S105_Csubrule_def;
+struct S105ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S105ttd_Csubrule_def S105tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_bnd
+};
+extern yacco2::State S106_Csubrule_def;
+extern yacco2::State S107_Csubrule_def;
+struct S107ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S107ttd_Csubrule_def S107tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_bnd
+};
+extern yacco2::State S108_Csubrule_def;
+extern yacco2::State S109_Csubrule_def;
+extern yacco2::State S110_Csubrule_def;
+struct S110ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S110ttd_Csubrule_def S110tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_rhs_component
+};
+extern yacco2::State S111_Csubrule_def;
+struct S111ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S111ttd_Csubrule_def S111tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S112_Csubrule_def;
+extern yacco2::State S113_Csubrule_def;
+extern yacco2::State S114_Csubrule_def;
+extern yacco2::State S115_Csubrule_def;
+extern yacco2::State S116_Csubrule_def;
+struct S116ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S116ttd_Csubrule_def S116tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_dbl_colon
+};
+extern yacco2::State S117_Csubrule_def;
+extern yacco2::State S118_Csubrule_def;
+extern yacco2::State S119_Csubrule_def;
+struct S119ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S119ttd_Csubrule_def S119tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S120_Csubrule_def;
+extern yacco2::State S121_Csubrule_def;
+extern yacco2::State S122_Csubrule_def;
+extern yacco2::State S123_Csubrule_def;
+extern yacco2::State S124_Csubrule_def;
+extern yacco2::State S125_Csubrule_def;
+extern yacco2::State S126_Csubrule_def;
+extern yacco2::State S127_Csubrule_def;
+extern yacco2::State S128_Csubrule_def;
+struct S128ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S128ttd_Csubrule_def S128tt_Csubrule_def = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S129_Csubrule_def;
+extern yacco2::State S130_Csubrule_def;
+extern yacco2::State S131_Csubrule_def;
+extern yacco2::State S132_Csubrule_def;
+extern yacco2::State S133_Csubrule_def;
+extern yacco2::State S134_Csubrule_def;
+extern yacco2::State S135_Csubrule_def;
+extern yacco2::State S136_Csubrule_def;
+extern yacco2::State S137_Csubrule_def;
+extern yacco2::State S138_Csubrule_def;
+extern yacco2::State S139_Csubrule_def;
+extern yacco2::State S140_Csubrule_def;
+extern yacco2::State S141_Csubrule_def;
+extern yacco2::State S142_Csubrule_def;
+extern yacco2::State S143_Csubrule_def;
+extern yacco2::State S144_Csubrule_def;
+extern yacco2::State S145_Csubrule_def;
+struct S145ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S145ttd_Csubrule_def S145tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S146_Csubrule_def;
+extern yacco2::State S147_Csubrule_def;
+extern yacco2::State S148_Csubrule_def;
+struct S148ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S148ttd_Csubrule_def S148tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S149_Csubrule_def;
+extern yacco2::State S150_Csubrule_def;
+extern yacco2::State S151_Csubrule_def;
+struct S151ttd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S151ttd_Csubrule_def S151tt_Csubrule_def = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+struct S1std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Csubrule_def S1st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Csubrule_def} // accept sym: Rsubrule_def
+ ,{570,(State*)&S4_Csubrule_def} // shift sym: Rvector
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Csubrule_def = {3,(State*)&S2_Csubrule_def};
+yacco2::State S1_Csubrule_def = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Csubrule_def,0,0,0,(Shift_tbl*)&S1st_Csubrule_def,0,(State_s_thread_tbl*)&S2tt_Csubrule_def,0,0};
+struct S2std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Csubrule_def S2st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {322,(State*)&S3_Csubrule_def} // shift sym: T_selector
+ }// end of shift table
+};
+yacco2::State S2_Csubrule_def = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Csubrule_def,0,0,0,0};
+struct S3rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Csubrule_def S3rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrule_def,Csubrule_def::rhs1_Rvector_}
+ }// end of reduce table
+};
+yacco2::State S3_Csubrule_def = //State's vectored into symbol: "->"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Csubrule_def,0,0,0};
+struct S4std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Csubrule_def S4st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S5_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S4ise_Csubrule_def = {5,(State*)&S5_Csubrule_def};
+yacco2::State S4_Csubrule_def = //State's vectored into symbol: "Rvector"
+{4
+,0,0,(Shift_entry*)&S4ise_Csubrule_def
+,0,(Shift_tbl*)&S4st_Csubrule_def,0,0,0,0};
+struct S5std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S5std_Csubrule_def S5st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{571,(State*)&S6_Csubrule_def} // shift sym: Rcommon_comments
+ ,{602,(State*)&S57_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S5ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S5_Csubrule_def = //State's vectored into symbol: "|.|"
+{5
+,(Shift_entry*)&S5pse_Csubrule_def,0,(Shift_entry*)&S5ise_Csubrule_def
+,0,(Shift_tbl*)&S5st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S6std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S6std_Csubrule_def S6st_Csubrule_def = {
+ 7
+ ,
+ {// start of table
+ {3,(State*)&S7_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S13_Csubrule_def} // shift sym: Rrhs_expr
+ ,{573,(State*)&S14_Csubrule_def} // shift sym: Rstart_thread
+ ,{581,(State*)&S32_Csubrule_def} // shift sym: Rcalled_proc_op
+ ,{584,(State*)&S47_Csubrule_def} // shift sym: RTorRcomponents_epi
+ ,{585,(State*)&S52_Csubrule_def} // shift sym: RTorRcomponents
+ ,{586,(State*)&S55_Csubrule_def} // shift sym: RTorRcomponent
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Csubrule_def = {3,(State*)&S7_Csubrule_def};
+struct S6rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Csubrule_def S6rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrule_def,Csubrule_def::rhs1_RTorRcomponents_epi_}
+ }// end of reduce table
+};
+yacco2::State S6_Csubrule_def = //State's vectored into symbol: "Rcommon_comments"
+{6
+,(Shift_entry*)&S6pse_Csubrule_def,0,0,0,(Shift_tbl*)&S6st_Csubrule_def,(Reduce_tbl*)&S6rt_Csubrule_def,(State_s_thread_tbl*)&S7tt_Csubrule_def,0,0};
+struct S7std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S7std_Csubrule_def S7st_Csubrule_def = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S8_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S9_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{7,(State*)&S10_Csubrule_def} // shift sym: LR1_fset_transience_operator
+ ,{344,(State*)&S11_Csubrule_def} // shift sym: T_in_stbl
+ ,{346,(State*)&S12_Csubrule_def} // shift sym: rule_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Csubrule_def = {3,(State*)&S9_Csubrule_def};
+yacco2::Shift_entry S7pcse_Csubrule_def = {7,(State*)&S10_Csubrule_def};
+yacco2::Shift_entry S7qse_Csubrule_def = {0,(State*)&S8_Csubrule_def};
+yacco2::State S7_Csubrule_def = //State's vectored into symbol: "|||"
+{7
+,(Shift_entry*)&S7pse_Csubrule_def,0,0,(Shift_entry*)&S7pcse_Csubrule_def,(Shift_tbl*)&S7st_Csubrule_def,0,0,0,(Shift_entry*)&S7qse_Csubrule_def
+};
+struct S8rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Csubrule_def S8rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_RTorRcomponent_}
+ }// end of reduce table
+};
+yacco2::State S8_Csubrule_def = //State's vectored into symbol: "|?|"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Csubrule_def,0,0,0};
+struct S9rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Csubrule_def S9rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rstart_thread_}
+ }// end of reduce table
+};
+yacco2::State S9_Csubrule_def = //State's vectored into symbol: "|||"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Csubrule_def,0,0,0};
+struct S10rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Csubrule_def S10rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcalled_proc_op_}
+ }// end of reduce table
+};
+yacco2::State S10_Csubrule_def = //State's vectored into symbol: "|t|"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Csubrule_def,0,0,0};
+struct S11rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Csubrule_def S11rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_RTorRcomponent_}
+ }// end of reduce table
+};
+yacco2::State S11_Csubrule_def = //State's vectored into symbol: "T-in-stbl"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Csubrule_def,0,0,0};
+struct S12rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Csubrule_def S12rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_RTorRcomponent_}
+ }// end of reduce table
+};
+yacco2::State S12_Csubrule_def = //State's vectored into symbol: "rule-in-stbl"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Csubrule_def,0,0,0};
+struct S13rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Csubrule_def S13rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S13_Csubrule_def = //State's vectored into symbol: "Rrhs_expr"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Csubrule_def,0,0,0};
+struct S14std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S14std_Csubrule_def S14st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S15_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S14ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S14_Csubrule_def = //State's vectored into symbol: "Rstart_thread"
+{14
+,(Shift_entry*)&S14pse_Csubrule_def,0,(Shift_entry*)&S14ise_Csubrule_def
+,0,(Shift_tbl*)&S14st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S15std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S15std_Csubrule_def S15st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S60_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S61_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S16_Csubrule_def} // shift sym: Rbal_thread_expr
+ ,{575,(State*)&S65_Csubrule_def} // shift sym: Rrtned_T
+ }// end of shift table
+};
+yacco2::Shift_entry S15pse_Csubrule_def = {3,(State*)&S61_Csubrule_def};
+yacco2::Shift_entry S15qse_Csubrule_def = {0,(State*)&S60_Csubrule_def};
+yacco2::State S15_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{15
+,(Shift_entry*)&S15pse_Csubrule_def,0,0,0,(Shift_tbl*)&S15st_Csubrule_def,0,(State_s_thread_tbl*)&S61tt_Csubrule_def,0,(Shift_entry*)&S15qse_Csubrule_def
+};
+struct S16std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S16std_Csubrule_def S16st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S17_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S16pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S16ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S16_Csubrule_def = //State's vectored into symbol: "Rbal_thread_expr"
+{16
+,(Shift_entry*)&S16pse_Csubrule_def,0,(Shift_entry*)&S16ise_Csubrule_def
+,0,(Shift_tbl*)&S16st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S17std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Csubrule_def S17st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S18_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S17ise_Csubrule_def = {5,(State*)&S18_Csubrule_def};
+yacco2::State S17_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{17
+,0,0,(Shift_entry*)&S17ise_Csubrule_def
+,0,(Shift_tbl*)&S17st_Csubrule_def,0,0,0,0};
+struct S18std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S18std_Csubrule_def S18st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S81_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S82_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S19_Csubrule_def} // shift sym: Rchained_dispatcher
+ ,{589,(State*)&S28_Csubrule_def} // shift sym: Rcalled_thd_eos
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Csubrule_def = {3,(State*)&S82_Csubrule_def};
+yacco2::Shift_entry S18qse_Csubrule_def = {0,(State*)&S81_Csubrule_def};
+yacco2::State S18_Csubrule_def = //State's vectored into symbol: "|.|"
+{18
+,(Shift_entry*)&S18pse_Csubrule_def,0,0,0,(Shift_tbl*)&S18st_Csubrule_def,0,(State_s_thread_tbl*)&S82tt_Csubrule_def,0,(Shift_entry*)&S18qse_Csubrule_def
+};
+struct S19std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S19std_Csubrule_def S19st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S20_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S19pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S19ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S19_Csubrule_def = //State's vectored into symbol: "Rchained_dispatcher"
+{19
+,(Shift_entry*)&S19pse_Csubrule_def,0,(Shift_entry*)&S19ise_Csubrule_def
+,0,(Shift_tbl*)&S19st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S20std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S20std_Csubrule_def S20st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S81_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S87_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{589,(State*)&S21_Csubrule_def} // shift sym: Rcalled_thd_eos
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Csubrule_def = {3,(State*)&S87_Csubrule_def};
+yacco2::Shift_entry S20qse_Csubrule_def = {0,(State*)&S81_Csubrule_def};
+yacco2::State S20_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{20
+,(Shift_entry*)&S20pse_Csubrule_def,0,0,0,(Shift_tbl*)&S20st_Csubrule_def,0,(State_s_thread_tbl*)&S87tt_Csubrule_def,0,(Shift_entry*)&S20qse_Csubrule_def
+};
+struct S21std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S21std_Csubrule_def S21st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S22_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S21pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S21ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S21_Csubrule_def = //State's vectored into symbol: "Rcalled_thd_eos"
+{21
+,(Shift_entry*)&S21pse_Csubrule_def,0,(Shift_entry*)&S21ise_Csubrule_def
+,0,(Shift_tbl*)&S21st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S22std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S22std_Csubrule_def S22st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {131,(State*)&S88_Csubrule_def} // shift sym: raw_open_brace
+ ,{591,(State*)&S23_Csubrule_def} // shift sym: Rpotential_codeblk
+ ,{592,(State*)&S94_Csubrule_def} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+struct S22rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Csubrule_def S22rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S22_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Csubrule_def,(Reduce_tbl*)&S22rt_Csubrule_def,0,0,0};
+struct S23std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S23std_Csubrule_def S23st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S27_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S23pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S23ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S23_Csubrule_def = //State's vectored into symbol: "Rpotential_codeblk"
+{23
+,(Shift_entry*)&S23pse_Csubrule_def,0,(Shift_entry*)&S23ise_Csubrule_def
+,0,(Shift_tbl*)&S23st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S24std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S24std_Csubrule_def S24st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S25_Csubrule_def} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S24_Csubrule_def = //State's vectored into symbol: "|||"
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Csubrule_def,0,0,0,0};
+struct S25rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Csubrule_def S25rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csubrule_def,Csubrule_def::rhs1_Rlint_epi_}
+ }// end of reduce table
+};
+yacco2::State S25_Csubrule_def = //State's vectored into symbol: "lint"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Csubrule_def,0,0,0};
+struct S26rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Csubrule_def S26rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csubrule_def,Csubrule_def::rhs2_Rlint_epi_}
+ }// end of reduce table
+};
+yacco2::State S26_Csubrule_def = //State's vectored into symbol: "|.|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Csubrule_def,0,0,0};
+struct S27rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Csubrule_def S27rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs3_Rrhs_expr_}
+ }// end of reduce table
+};
+yacco2::State S27_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Csubrule_def,0,0,0};
+struct S28std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S28std_Csubrule_def S28st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S29_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S28ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S28_Csubrule_def = //State's vectored into symbol: "Rcalled_thd_eos"
+{28
+,(Shift_entry*)&S28pse_Csubrule_def,0,(Shift_entry*)&S28ise_Csubrule_def
+,0,(Shift_tbl*)&S28st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S29std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S29std_Csubrule_def S29st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {131,(State*)&S88_Csubrule_def} // shift sym: raw_open_brace
+ ,{591,(State*)&S30_Csubrule_def} // shift sym: Rpotential_codeblk
+ ,{592,(State*)&S94_Csubrule_def} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+struct S29rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Csubrule_def S29rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S29_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Csubrule_def,(Reduce_tbl*)&S29rt_Csubrule_def,0,0,0};
+struct S30std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S30std_Csubrule_def S30st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S31_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S30pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S30ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S30_Csubrule_def = //State's vectored into symbol: "Rpotential_codeblk"
+{30
+,(Shift_entry*)&S30pse_Csubrule_def,0,(Shift_entry*)&S30ise_Csubrule_def
+,0,(Shift_tbl*)&S30st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S31rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Csubrule_def S31rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs2_Rrhs_expr_}
+ }// end of reduce table
+};
+yacco2::State S31_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Csubrule_def,0,0,0};
+struct S32std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S32std_Csubrule_def S32st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S33_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S32ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S32_Csubrule_def = //State's vectored into symbol: "Rcalled_proc_op"
+{32
+,(Shift_entry*)&S32pse_Csubrule_def,0,(Shift_entry*)&S32ise_Csubrule_def
+,0,(Shift_tbl*)&S32st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S33std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S33std_Csubrule_def S33st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S60_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S61_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S95_Csubrule_def} // shift sym: Rrtned_T
+ ,{582,(State*)&S34_Csubrule_def} // shift sym: Rbal_called_proc_expr
+ }// end of shift table
+};
+yacco2::Shift_entry S33pse_Csubrule_def = {3,(State*)&S61_Csubrule_def};
+yacco2::Shift_entry S33qse_Csubrule_def = {0,(State*)&S60_Csubrule_def};
+yacco2::State S33_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{33
+,(Shift_entry*)&S33pse_Csubrule_def,0,0,0,(Shift_tbl*)&S33st_Csubrule_def,0,(State_s_thread_tbl*)&S61tt_Csubrule_def,0,(Shift_entry*)&S33qse_Csubrule_def
+};
+struct S34std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Csubrule_def S34st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S35_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S34ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S34_Csubrule_def = //State's vectored into symbol: "Rbal_called_proc_expr"
+{34
+,(Shift_entry*)&S34pse_Csubrule_def,0,(Shift_entry*)&S34ise_Csubrule_def
+,0,(Shift_tbl*)&S34st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S35std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S35std_Csubrule_def S35st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S36_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S35ise_Csubrule_def = {5,(State*)&S36_Csubrule_def};
+yacco2::State S35_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{35
+,0,0,(Shift_entry*)&S35ise_Csubrule_def
+,0,(Shift_tbl*)&S35st_Csubrule_def,0,0,0,0};
+struct S36std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S36std_Csubrule_def S36st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S102_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S103_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S37_Csubrule_def} // shift sym: Rchained_dispatcher
+ ,{590,(State*)&S43_Csubrule_def} // shift sym: Rcalled_proc_eos
+ }// end of shift table
+};
+yacco2::Shift_entry S36pse_Csubrule_def = {3,(State*)&S103_Csubrule_def};
+yacco2::Shift_entry S36qse_Csubrule_def = {0,(State*)&S102_Csubrule_def};
+yacco2::State S36_Csubrule_def = //State's vectored into symbol: "|.|"
+{36
+,(Shift_entry*)&S36pse_Csubrule_def,0,0,0,(Shift_tbl*)&S36st_Csubrule_def,0,(State_s_thread_tbl*)&S103tt_Csubrule_def,0,(Shift_entry*)&S36qse_Csubrule_def
+};
+struct S37std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S37std_Csubrule_def S37st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S38_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S37pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S37ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S37_Csubrule_def = //State's vectored into symbol: "Rchained_dispatcher"
+{37
+,(Shift_entry*)&S37pse_Csubrule_def,0,(Shift_entry*)&S37ise_Csubrule_def
+,0,(Shift_tbl*)&S37st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S38std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S38std_Csubrule_def S38st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S102_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S105_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{590,(State*)&S39_Csubrule_def} // shift sym: Rcalled_proc_eos
+ }// end of shift table
+};
+yacco2::Shift_entry S38pse_Csubrule_def = {3,(State*)&S105_Csubrule_def};
+yacco2::Shift_entry S38qse_Csubrule_def = {0,(State*)&S102_Csubrule_def};
+yacco2::State S38_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{38
+,(Shift_entry*)&S38pse_Csubrule_def,0,0,0,(Shift_tbl*)&S38st_Csubrule_def,0,(State_s_thread_tbl*)&S105tt_Csubrule_def,0,(Shift_entry*)&S38qse_Csubrule_def
+};
+struct S39std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S39std_Csubrule_def S39st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S40_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S39pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S39ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S39_Csubrule_def = //State's vectored into symbol: "Rcalled_proc_eos"
+{39
+,(Shift_entry*)&S39pse_Csubrule_def,0,(Shift_entry*)&S39ise_Csubrule_def
+,0,(Shift_tbl*)&S39st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S40std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S40std_Csubrule_def S40st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {131,(State*)&S88_Csubrule_def} // shift sym: raw_open_brace
+ ,{591,(State*)&S41_Csubrule_def} // shift sym: Rpotential_codeblk
+ ,{592,(State*)&S94_Csubrule_def} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+struct S40rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Csubrule_def S40rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S40_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{40
+,0,0,0,0,(Shift_tbl*)&S40st_Csubrule_def,(Reduce_tbl*)&S40rt_Csubrule_def,0,0,0};
+struct S41std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S41std_Csubrule_def S41st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S42_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S41pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S41ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S41_Csubrule_def = //State's vectored into symbol: "Rpotential_codeblk"
+{41
+,(Shift_entry*)&S41pse_Csubrule_def,0,(Shift_entry*)&S41ise_Csubrule_def
+,0,(Shift_tbl*)&S41st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S42rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Csubrule_def S42rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs5_Rrhs_expr_}
+ }// end of reduce table
+};
+yacco2::State S42_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Csubrule_def,0,0,0};
+struct S43std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S43std_Csubrule_def S43st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S44_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S43pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S43ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S43_Csubrule_def = //State's vectored into symbol: "Rcalled_proc_eos"
+{43
+,(Shift_entry*)&S43pse_Csubrule_def,0,(Shift_entry*)&S43ise_Csubrule_def
+,0,(Shift_tbl*)&S43st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S44std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S44std_Csubrule_def S44st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {131,(State*)&S88_Csubrule_def} // shift sym: raw_open_brace
+ ,{591,(State*)&S45_Csubrule_def} // shift sym: Rpotential_codeblk
+ ,{592,(State*)&S94_Csubrule_def} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+struct S44rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Csubrule_def S44rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S44_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{44
+,0,0,0,0,(Shift_tbl*)&S44st_Csubrule_def,(Reduce_tbl*)&S44rt_Csubrule_def,0,0,0};
+struct S45std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S45std_Csubrule_def S45st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S46_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S45pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S45ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S45_Csubrule_def = //State's vectored into symbol: "Rpotential_codeblk"
+{45
+,(Shift_entry*)&S45pse_Csubrule_def,0,(Shift_entry*)&S45ise_Csubrule_def
+,0,(Shift_tbl*)&S45st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S46rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Csubrule_def S46rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs4_Rrhs_expr_}
+ }// end of reduce table
+};
+yacco2::State S46_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Csubrule_def,0,0,0};
+struct S47std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S47std_Csubrule_def S47st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S48_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S47ise_Csubrule_def = {5,(State*)&S48_Csubrule_def};
+yacco2::State S47_Csubrule_def = //State's vectored into symbol: "RTorRcomponents_epi"
+{47
+,0,0,(Shift_entry*)&S47ise_Csubrule_def
+,0,(Shift_tbl*)&S47st_Csubrule_def,0,0,0,0};
+struct S48std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S48std_Csubrule_def S48st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S106_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S107_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{588,(State*)&S49_Csubrule_def} // shift sym: Rmust_eos
+ }// end of shift table
+};
+yacco2::Shift_entry S48pse_Csubrule_def = {3,(State*)&S107_Csubrule_def};
+yacco2::Shift_entry S48qse_Csubrule_def = {0,(State*)&S106_Csubrule_def};
+yacco2::State S48_Csubrule_def = //State's vectored into symbol: "|.|"
+{48
+,(Shift_entry*)&S48pse_Csubrule_def,0,0,0,(Shift_tbl*)&S48st_Csubrule_def,0,(State_s_thread_tbl*)&S107tt_Csubrule_def,0,(Shift_entry*)&S48qse_Csubrule_def
+};
+struct S49std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S49std_Csubrule_def S49st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {131,(State*)&S88_Csubrule_def} // shift sym: raw_open_brace
+ ,{591,(State*)&S50_Csubrule_def} // shift sym: Rpotential_codeblk
+ ,{592,(State*)&S94_Csubrule_def} // shift sym: Rpotential_directives
+ }// end of shift table
+};
+struct S49rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Csubrule_def S49rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S49_Csubrule_def = //State's vectored into symbol: "Rmust_eos"
+{49
+,0,0,0,0,(Shift_tbl*)&S49st_Csubrule_def,(Reduce_tbl*)&S49rt_Csubrule_def,0,0,0};
+struct S50std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S50std_Csubrule_def S50st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S51_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S50pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S50ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S50_Csubrule_def = //State's vectored into symbol: "Rpotential_codeblk"
+{50
+,(Shift_entry*)&S50pse_Csubrule_def,0,(Shift_entry*)&S50ise_Csubrule_def
+,0,(Shift_tbl*)&S50st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S51rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Csubrule_def S51rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csubrule_def,Csubrule_def::rhs1_Rrhs_expr_}
+ }// end of reduce table
+};
+yacco2::State S51_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Csubrule_def,0,0,0};
+struct S52std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S52std_Csubrule_def S52st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S110_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{586,(State*)&S53_Csubrule_def} // shift sym: RTorRcomponent
+ }// end of shift table
+};
+yacco2::Shift_entry S52pse_Csubrule_def = {3,(State*)&S110_Csubrule_def};
+struct S52rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Csubrule_def S52rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrule_def,Csubrule_def::rhs2_RTorRcomponents_epi_}
+ }// end of reduce table
+};
+yacco2::State S52_Csubrule_def = //State's vectored into symbol: "RTorRcomponents"
+{52
+,(Shift_entry*)&S52pse_Csubrule_def,0,0,0,(Shift_tbl*)&S52st_Csubrule_def,(Reduce_tbl*)&S52rt_Csubrule_def,(State_s_thread_tbl*)&S110tt_Csubrule_def,0,0};
+struct S53std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S53std_Csubrule_def S53st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S54_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S53pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S53ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S53_Csubrule_def = //State's vectored into symbol: "RTorRcomponent"
+{53
+,(Shift_entry*)&S53pse_Csubrule_def,0,(Shift_entry*)&S53ise_Csubrule_def
+,0,(Shift_tbl*)&S53st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S54rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Csubrule_def S54rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_RTorRcomponents_}
+ }// end of reduce table
+};
+yacco2::State S54_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Csubrule_def,0,0,0};
+struct S55std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S55std_Csubrule_def S55st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S56_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S55pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S55ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S55_Csubrule_def = //State's vectored into symbol: "RTorRcomponent"
+{55
+,(Shift_entry*)&S55pse_Csubrule_def,0,(Shift_entry*)&S55ise_Csubrule_def
+,0,(Shift_tbl*)&S55st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S56rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Csubrule_def S56rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_RTorRcomponents_}
+ }// end of reduce table
+};
+yacco2::State S56_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Csubrule_def,0,0,0};
+struct S57std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S57std_Csubrule_def S57st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S111_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{604,(State*)&S58_Csubrule_def} // shift sym: Rcweb_k_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S57pse_Csubrule_def = {3,(State*)&S111_Csubrule_def};
+struct S57rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Csubrule_def S57rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs4_Rcweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S57_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{57
+,(Shift_entry*)&S57pse_Csubrule_def,0,0,0,(Shift_tbl*)&S57st_Csubrule_def,(Reduce_tbl*)&S57rt_Csubrule_def,(State_s_thread_tbl*)&S111tt_Csubrule_def,0,0};
+struct S58std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S58std_Csubrule_def S58st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S59_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S58pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S58ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S58_Csubrule_def = //State's vectored into symbol: "Rcweb_k_epi"
+{58
+,(Shift_entry*)&S58pse_Csubrule_def,0,(Shift_entry*)&S58ise_Csubrule_def
+,0,(Shift_tbl*)&S58st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S59rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Csubrule_def S59rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcommon_comments_}
+ }// end of reduce table
+};
+yacco2::State S59_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Csubrule_def,0,0,0};
+struct S60rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Csubrule_def S60rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_Rrtned_T_}
+ }// end of reduce table
+};
+yacco2::State S60_Csubrule_def = //State's vectored into symbol: "|?|"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Csubrule_def,0,0,0};
+struct S61std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S61std_Csubrule_def S61st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S62_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S63_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{344,(State*)&S64_Csubrule_def} // shift sym: T_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S61pse_Csubrule_def = {3,(State*)&S63_Csubrule_def};
+yacco2::Shift_entry S61qse_Csubrule_def = {0,(State*)&S62_Csubrule_def};
+yacco2::State S61_Csubrule_def = //State's vectored into symbol: "|||"
+{61
+,(Shift_entry*)&S61pse_Csubrule_def,0,0,0,(Shift_tbl*)&S61st_Csubrule_def,0,0,0,(Shift_entry*)&S61qse_Csubrule_def
+};
+struct S62rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Csubrule_def S62rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rrtned_T_}
+ }// end of reduce table
+};
+yacco2::State S62_Csubrule_def = //State's vectored into symbol: "|?|"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Csubrule_def,0,0,0};
+struct S63rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Csubrule_def S63rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs4_Rrtned_T_}
+ }// end of reduce table
+};
+yacco2::State S63_Csubrule_def = //State's vectored into symbol: "|||"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Csubrule_def,0,0,0};
+struct S64rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Csubrule_def S64rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rrtned_T_}
+ }// end of reduce table
+};
+yacco2::State S64_Csubrule_def = //State's vectored into symbol: "T-in-stbl"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Csubrule_def,0,0,0};
+struct S65std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S65std_Csubrule_def S65st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S66_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S65pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S65ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S65_Csubrule_def = //State's vectored into symbol: "Rrtned_T"
+{65
+,(Shift_entry*)&S65pse_Csubrule_def,0,(Shift_entry*)&S65ise_Csubrule_def
+,0,(Shift_tbl*)&S65st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S66std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S66std_Csubrule_def S66st_Csubrule_def = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S67_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S68_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S72_Csubrule_def} // shift sym: Rcalled_thread
+ ,{577,(State*)&S73_Csubrule_def} // shift sym: RNULL
+ ,{578,(State*)&S74_Csubrule_def} // shift sym: Rns
+ }// end of shift table
+};
+yacco2::Shift_entry S66pse_Csubrule_def = {3,(State*)&S68_Csubrule_def};
+yacco2::Shift_entry S66qse_Csubrule_def = {0,(State*)&S67_Csubrule_def};
+yacco2::State S66_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{66
+,(Shift_entry*)&S66pse_Csubrule_def,0,0,0,(Shift_tbl*)&S66st_Csubrule_def,0,(State_s_thread_tbl*)&S68tt_Csubrule_def,0,(Shift_entry*)&S66qse_Csubrule_def
+};
+struct S67rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Csubrule_def S67rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs3_Rns_}
+ }// end of reduce table
+};
+yacco2::State S67_Csubrule_def = //State's vectored into symbol: "|?|"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Csubrule_def,0,0,0};
+struct S68std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S68std_Csubrule_def S68st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S69_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S70_Csubrule_def} // shift sym: T_identifier
+ ,{323,(State*)&S71_Csubrule_def} // shift sym: T_NULL
+ }// end of shift table
+};
+yacco2::Shift_entry S68qse_Csubrule_def = {0,(State*)&S69_Csubrule_def};
+yacco2::State S68_Csubrule_def = //State's vectored into symbol: "|||"
+{68
+,0,0,0,0,(Shift_tbl*)&S68st_Csubrule_def,0,0,0,(Shift_entry*)&S68qse_Csubrule_def
+};
+struct S69rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Csubrule_def S69rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs2_Rns_}
+ }// end of reduce table
+};
+yacco2::State S69_Csubrule_def = //State's vectored into symbol: "|?|"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Csubrule_def,0,0,0};
+struct S70rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Csubrule_def S70rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs1_Rns_}
+ }// end of reduce table
+};
+yacco2::State S70_Csubrule_def = //State's vectored into symbol: "identifier"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Csubrule_def,0,0,0};
+struct S71rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Csubrule_def S71rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_RNULL_}
+ }// end of reduce table
+};
+yacco2::State S71_Csubrule_def = //State's vectored into symbol: "#NULL"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Csubrule_def,0,0,0};
+struct S72rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Csubrule_def S72rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rbal_thread_expr_}
+ }// end of reduce table
+};
+yacco2::State S72_Csubrule_def = //State's vectored into symbol: "Rcalled_thread"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Csubrule_def,0,0,0};
+struct S73rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Csubrule_def S73rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rcalled_thread_}
+ }// end of reduce table
+};
+yacco2::State S73_Csubrule_def = //State's vectored into symbol: "RNULL"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Csubrule_def,0,0,0};
+struct S74std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S74std_Csubrule_def S74st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S115_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S116_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S75_Csubrule_def} // shift sym: Rdbl_colon
+ }// end of shift table
+};
+yacco2::Shift_entry S74pse_Csubrule_def = {3,(State*)&S116_Csubrule_def};
+yacco2::Shift_entry S74qse_Csubrule_def = {0,(State*)&S115_Csubrule_def};
+yacco2::State S74_Csubrule_def = //State's vectored into symbol: "Rns"
+{74
+,(Shift_entry*)&S74pse_Csubrule_def,0,0,0,(Shift_tbl*)&S74st_Csubrule_def,0,(State_s_thread_tbl*)&S116tt_Csubrule_def,0,(Shift_entry*)&S74qse_Csubrule_def
+};
+struct S75std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S75std_Csubrule_def S75st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S76_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S77_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S80_Csubrule_def} // shift sym: Rth_name
+ }// end of shift table
+};
+yacco2::Shift_entry S75pse_Csubrule_def = {3,(State*)&S77_Csubrule_def};
+yacco2::Shift_entry S75qse_Csubrule_def = {0,(State*)&S76_Csubrule_def};
+yacco2::State S75_Csubrule_def = //State's vectored into symbol: "Rdbl_colon"
+{75
+,(Shift_entry*)&S75pse_Csubrule_def,0,0,0,(Shift_tbl*)&S75st_Csubrule_def,0,(State_s_thread_tbl*)&S77tt_Csubrule_def,0,(Shift_entry*)&S75qse_Csubrule_def
+};
+struct S76rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Csubrule_def S76rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_Rth_name_}
+ }// end of reduce table
+};
+yacco2::State S76_Csubrule_def = //State's vectored into symbol: "|?|"
+{76
+,0,0,0,0,0,(Reduce_tbl*)&S76rt_Csubrule_def,0,0,0};
+struct S77std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S77std_Csubrule_def S77st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S78_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S79_Csubrule_def} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S77qse_Csubrule_def = {0,(State*)&S78_Csubrule_def};
+yacco2::State S77_Csubrule_def = //State's vectored into symbol: "|||"
+{77
+,0,0,0,0,(Shift_tbl*)&S77st_Csubrule_def,0,0,0,(Shift_entry*)&S77qse_Csubrule_def
+};
+struct S78rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Csubrule_def S78rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rth_name_}
+ }// end of reduce table
+};
+yacco2::State S78_Csubrule_def = //State's vectored into symbol: "|?|"
+{78
+,0,0,0,0,0,(Reduce_tbl*)&S78rt_Csubrule_def,0,0,0};
+struct S79rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Csubrule_def S79rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rth_name_}
+ }// end of reduce table
+};
+yacco2::State S79_Csubrule_def = //State's vectored into symbol: "identifier"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Csubrule_def,0,0,0};
+struct S80rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Csubrule_def S80rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcalled_thread_}
+ }// end of reduce table
+};
+yacco2::State S80_Csubrule_def = //State's vectored into symbol: "Rth_name"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Csubrule_def,0,0,0};
+struct S81rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Csubrule_def S81rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rcalled_thd_eos_}
+ }// end of reduce table
+};
+yacco2::State S81_Csubrule_def = //State's vectored into symbol: "|?|"
+{81
+,0,0,0,0,0,(Reduce_tbl*)&S81rt_Csubrule_def,0,0,0};
+struct S82std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S82std_Csubrule_def S82st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S83_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{344,(State*)&S84_Csubrule_def} // shift sym: T_in_stbl
+ ,{346,(State*)&S85_Csubrule_def} // shift sym: rule_in_stbl
+ ,{369,(State*)&S86_Csubrule_def} // shift sym: T_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S82qse_Csubrule_def = {0,(State*)&S83_Csubrule_def};
+yacco2::State S82_Csubrule_def = //State's vectored into symbol: "|||"
+{82
+,0,0,0,0,(Shift_tbl*)&S82st_Csubrule_def,0,0,0,(Shift_entry*)&S82qse_Csubrule_def
+};
+struct S83rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Csubrule_def S83rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_Rchained_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S83_Csubrule_def = //State's vectored into symbol: "|?|"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Csubrule_def,0,0,0};
+struct S84rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S84rtd_Csubrule_def S84rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rchained_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S84_Csubrule_def = //State's vectored into symbol: "T-in-stbl"
+{84
+,0,0,0,0,0,(Reduce_tbl*)&S84rt_Csubrule_def,0,0,0};
+struct S85rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Csubrule_def S85rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rchained_dispatcher_}
+ }// end of reduce table
+};
+yacco2::State S85_Csubrule_def = //State's vectored into symbol: "rule-in-stbl"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Csubrule_def,0,0,0};
+struct S86rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S86rtd_Csubrule_def S86rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcalled_thd_eos_}
+ }// end of reduce table
+};
+yacco2::State S86_Csubrule_def = //State's vectored into symbol: "eosubrule"
+{86
+,0,0,0,0,0,(Reduce_tbl*)&S86rt_Csubrule_def,0,0,0};
+struct S87std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S87std_Csubrule_def S87st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {369,(State*)&S86_Csubrule_def} // shift sym: T_eosubrule
+ }// end of shift table
+};
+yacco2::State S87_Csubrule_def = //State's vectored into symbol: "|||"
+{87
+,0,0,0,0,(Shift_tbl*)&S87st_Csubrule_def,0,0,0,0};
+struct S88std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S88std_Csubrule_def S88st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S89_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S88pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S88ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S88_Csubrule_def = //State's vectored into symbol: "{"
+{88
+,(Shift_entry*)&S88pse_Csubrule_def,0,(Shift_entry*)&S88ise_Csubrule_def
+,0,(Shift_tbl*)&S88st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S89std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S89std_Csubrule_def S89st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S119_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{593,(State*)&S90_Csubrule_def} // shift sym: Rmust_directive_phrase
+ ,{603,(State*)&S123_Csubrule_def} // shift sym: Rdirective_cweb_k_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S89pse_Csubrule_def = {3,(State*)&S119_Csubrule_def};
+struct S89rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S89rtd_Csubrule_def S89rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rdirective_cweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S89_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{89
+,(Shift_entry*)&S89pse_Csubrule_def,0,0,0,(Shift_tbl*)&S89st_Csubrule_def,(Reduce_tbl*)&S89rt_Csubrule_def,(State_s_thread_tbl*)&S119tt_Csubrule_def,0,0};
+struct S90std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S90std_Csubrule_def S90st_Csubrule_def = {
+ 6
+ ,
+ {// start of table
+ {3,(State*)&S128_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{596,(State*)&S91_Csubrule_def} // shift sym: Rmaybe_more_directives
+ ,{597,(State*)&S131_Csubrule_def} // shift sym: Rmaybe_directive_phrases
+ ,{598,(State*)&S141_Csubrule_def} // shift sym: Rmaybe_directive_phrase
+ ,{600,(State*)&S133_Csubrule_def} // shift sym: Rdirective
+ ,{603,(State*)&S136_Csubrule_def} // shift sym: Rdirective_cweb_k_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S90pse_Csubrule_def = {3,(State*)&S128_Csubrule_def};
+struct S90rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S90rtd_Csubrule_def S90rt_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rdirective_cweb_k_epi_}
+ ,{(Set_tbl*)&LA6_Csubrule_def,Csubrule_def::rhs1_Rmaybe_more_directives_}
+ }// end of reduce table
+};
+yacco2::State S90_Csubrule_def = //State's vectored into symbol: "Rmust_directive_phrase"
+{90
+,(Shift_entry*)&S90pse_Csubrule_def,0,0,0,(Shift_tbl*)&S90st_Csubrule_def,(Reduce_tbl*)&S90rt_Csubrule_def,(State_s_thread_tbl*)&S128tt_Csubrule_def,0,0};
+struct S91std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S91std_Csubrule_def S91st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S142_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S143_Csubrule_def} // shift sym: raw_close_brace
+ ,{595,(State*)&S92_Csubrule_def} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S91qse_Csubrule_def = {0,(State*)&S142_Csubrule_def};
+yacco2::State S91_Csubrule_def = //State's vectored into symbol: "Rmaybe_more_directives"
+{91
+,0,0,0,0,(Shift_tbl*)&S91st_Csubrule_def,0,0,0,(Shift_entry*)&S91qse_Csubrule_def
+};
+struct S92std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S92std_Csubrule_def S92st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S93_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S92pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S92ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S92_Csubrule_def = //State's vectored into symbol: "Rclose_brace"
+{92
+,(Shift_entry*)&S92pse_Csubrule_def,0,(Shift_entry*)&S92ise_Csubrule_def
+,0,(Shift_tbl*)&S92st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S93rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S93rtd_Csubrule_def S93rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rpotential_directives_}
+ }// end of reduce table
+};
+yacco2::State S93_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{93
+,0,0,0,0,0,(Reduce_tbl*)&S93rt_Csubrule_def,0,0,0};
+struct S94rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S94rtd_Csubrule_def S94rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rpotential_codeblk_}
+ }// end of reduce table
+};
+yacco2::State S94_Csubrule_def = //State's vectored into symbol: "Rpotential_directives"
+{94
+,0,0,0,0,0,(Reduce_tbl*)&S94rt_Csubrule_def,0,0,0};
+struct S95std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S95std_Csubrule_def S95st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S96_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S95pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S95ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S95_Csubrule_def = //State's vectored into symbol: "Rrtned_T"
+{95
+,(Shift_entry*)&S95pse_Csubrule_def,0,(Shift_entry*)&S95ise_Csubrule_def
+,0,(Shift_tbl*)&S95st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S96std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S96std_Csubrule_def S96st_Csubrule_def = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S67_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S68_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S97_Csubrule_def} // shift sym: RNULL
+ ,{578,(State*)&S98_Csubrule_def} // shift sym: Rns
+ ,{583,(State*)&S101_Csubrule_def} // shift sym: Rcalled_proc_name
+ }// end of shift table
+};
+yacco2::Shift_entry S96pse_Csubrule_def = {3,(State*)&S68_Csubrule_def};
+yacco2::Shift_entry S96qse_Csubrule_def = {0,(State*)&S67_Csubrule_def};
+yacco2::State S96_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{96
+,(Shift_entry*)&S96pse_Csubrule_def,0,0,0,(Shift_tbl*)&S96st_Csubrule_def,0,(State_s_thread_tbl*)&S68tt_Csubrule_def,0,(Shift_entry*)&S96qse_Csubrule_def
+};
+struct S97rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S97rtd_Csubrule_def S97rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rcalled_proc_name_}
+ }// end of reduce table
+};
+yacco2::State S97_Csubrule_def = //State's vectored into symbol: "RNULL"
+{97
+,0,0,0,0,0,(Reduce_tbl*)&S97rt_Csubrule_def,0,0,0};
+struct S98std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S98std_Csubrule_def S98st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S115_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S116_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S99_Csubrule_def} // shift sym: Rdbl_colon
+ }// end of shift table
+};
+yacco2::Shift_entry S98pse_Csubrule_def = {3,(State*)&S116_Csubrule_def};
+yacco2::Shift_entry S98qse_Csubrule_def = {0,(State*)&S115_Csubrule_def};
+yacco2::State S98_Csubrule_def = //State's vectored into symbol: "Rns"
+{98
+,(Shift_entry*)&S98pse_Csubrule_def,0,0,0,(Shift_tbl*)&S98st_Csubrule_def,0,(State_s_thread_tbl*)&S116tt_Csubrule_def,0,(Shift_entry*)&S98qse_Csubrule_def
+};
+struct S99std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S99std_Csubrule_def S99st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S76_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S77_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S100_Csubrule_def} // shift sym: Rth_name
+ }// end of shift table
+};
+yacco2::Shift_entry S99pse_Csubrule_def = {3,(State*)&S77_Csubrule_def};
+yacco2::Shift_entry S99qse_Csubrule_def = {0,(State*)&S76_Csubrule_def};
+yacco2::State S99_Csubrule_def = //State's vectored into symbol: "Rdbl_colon"
+{99
+,(Shift_entry*)&S99pse_Csubrule_def,0,0,0,(Shift_tbl*)&S99st_Csubrule_def,0,(State_s_thread_tbl*)&S77tt_Csubrule_def,0,(Shift_entry*)&S99qse_Csubrule_def
+};
+struct S100rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S100rtd_Csubrule_def S100rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcalled_proc_name_}
+ }// end of reduce table
+};
+yacco2::State S100_Csubrule_def = //State's vectored into symbol: "Rth_name"
+{100
+,0,0,0,0,0,(Reduce_tbl*)&S100rt_Csubrule_def,0,0,0};
+struct S101rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S101rtd_Csubrule_def S101rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rbal_called_proc_expr_}
+ }// end of reduce table
+};
+yacco2::State S101_Csubrule_def = //State's vectored into symbol: "Rcalled_proc_name"
+{101
+,0,0,0,0,0,(Reduce_tbl*)&S101rt_Csubrule_def,0,0,0};
+struct S102rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S102rtd_Csubrule_def S102rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rcalled_proc_eos_}
+ }// end of reduce table
+};
+yacco2::State S102_Csubrule_def = //State's vectored into symbol: "|?|"
+{102
+,0,0,0,0,0,(Reduce_tbl*)&S102rt_Csubrule_def,0,0,0};
+struct S103std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S103std_Csubrule_def S103st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S83_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{344,(State*)&S84_Csubrule_def} // shift sym: T_in_stbl
+ ,{346,(State*)&S85_Csubrule_def} // shift sym: rule_in_stbl
+ ,{369,(State*)&S104_Csubrule_def} // shift sym: T_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S103qse_Csubrule_def = {0,(State*)&S83_Csubrule_def};
+yacco2::State S103_Csubrule_def = //State's vectored into symbol: "|||"
+{103
+,0,0,0,0,(Shift_tbl*)&S103st_Csubrule_def,0,0,0,(Shift_entry*)&S103qse_Csubrule_def
+};
+struct S104rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S104rtd_Csubrule_def S104rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcalled_proc_eos_}
+ }// end of reduce table
+};
+yacco2::State S104_Csubrule_def = //State's vectored into symbol: "eosubrule"
+{104
+,0,0,0,0,0,(Reduce_tbl*)&S104rt_Csubrule_def,0,0,0};
+struct S105std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S105std_Csubrule_def S105st_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {369,(State*)&S104_Csubrule_def} // shift sym: T_eosubrule
+ }// end of shift table
+};
+yacco2::State S105_Csubrule_def = //State's vectored into symbol: "|||"
+{105
+,0,0,0,0,(Shift_tbl*)&S105st_Csubrule_def,0,0,0,0};
+struct S106rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S106rtd_Csubrule_def S106rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Csubrule_def,Csubrule_def::rhs2_Rmust_eos_}
+ }// end of reduce table
+};
+yacco2::State S106_Csubrule_def = //State's vectored into symbol: "|?|"
+{106
+,0,0,0,0,0,(Reduce_tbl*)&S106rt_Csubrule_def,0,0,0};
+struct S107std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S107std_Csubrule_def S107st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S108_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{369,(State*)&S109_Csubrule_def} // shift sym: T_eosubrule
+ }// end of shift table
+};
+yacco2::Shift_entry S107qse_Csubrule_def = {0,(State*)&S108_Csubrule_def};
+yacco2::State S107_Csubrule_def = //State's vectored into symbol: "|||"
+{107
+,0,0,0,0,(Shift_tbl*)&S107st_Csubrule_def,0,0,0,(Shift_entry*)&S107qse_Csubrule_def
+};
+struct S108rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S108rtd_Csubrule_def S108rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Csubrule_def,Csubrule_def::rhs3_Rmust_eos_}
+ }// end of reduce table
+};
+yacco2::State S108_Csubrule_def = //State's vectored into symbol: "|?|"
+{108
+,0,0,0,0,0,(Reduce_tbl*)&S108rt_Csubrule_def,0,0,0};
+struct S109rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S109rtd_Csubrule_def S109rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Csubrule_def,Csubrule_def::rhs1_Rmust_eos_}
+ }// end of reduce table
+};
+yacco2::State S109_Csubrule_def = //State's vectored into symbol: "eosubrule"
+{109
+,0,0,0,0,0,(Reduce_tbl*)&S109rt_Csubrule_def,0,0,0};
+struct S110std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S110std_Csubrule_def S110st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S8_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{344,(State*)&S11_Csubrule_def} // shift sym: T_in_stbl
+ ,{346,(State*)&S12_Csubrule_def} // shift sym: rule_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S110qse_Csubrule_def = {0,(State*)&S8_Csubrule_def};
+yacco2::State S110_Csubrule_def = //State's vectored into symbol: "|||"
+{110
+,0,0,0,0,(Shift_tbl*)&S110st_Csubrule_def,0,0,0,(Shift_entry*)&S110qse_Csubrule_def
+};
+struct S111std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S111std_Csubrule_def S111st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {271,(State*)&S112_Csubrule_def} // shift sym: T_comment
+ ,{372,(State*)&S113_Csubrule_def} // shift sym: T_cweb_comment
+ ,{396,(State*)&S114_Csubrule_def} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::State S111_Csubrule_def = //State's vectored into symbol: "|||"
+{111
+,0,0,0,0,(Shift_tbl*)&S111st_Csubrule_def,0,0,0,0};
+struct S112rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S112rtd_Csubrule_def S112rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_Rcweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S112_Csubrule_def = //State's vectored into symbol: "comment"
+{112
+,0,0,0,0,0,(Reduce_tbl*)&S112rt_Csubrule_def,0,0,0};
+struct S113rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S113rtd_Csubrule_def S113rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rcweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S113_Csubrule_def = //State's vectored into symbol: "cweb-comment"
+{113
+,0,0,0,0,0,(Reduce_tbl*)&S113rt_Csubrule_def,0,0,0};
+struct S114rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S114rtd_Csubrule_def S114rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rcweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S114_Csubrule_def = //State's vectored into symbol: "comment-overrun"
+{114
+,0,0,0,0,0,(Reduce_tbl*)&S114rt_Csubrule_def,0,0,0};
+struct S115rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S115rtd_Csubrule_def S115rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs3_Rdbl_colon_}
+ }// end of reduce table
+};
+yacco2::State S115_Csubrule_def = //State's vectored into symbol: "|?|"
+{115
+,0,0,0,0,0,(Reduce_tbl*)&S115rt_Csubrule_def,0,0,0};
+struct S116std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S116std_Csubrule_def S116st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S117_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{324,(State*)&S118_Csubrule_def} // shift sym: T_2colon
+ }// end of shift table
+};
+yacco2::Shift_entry S116qse_Csubrule_def = {0,(State*)&S117_Csubrule_def};
+yacco2::State S116_Csubrule_def = //State's vectored into symbol: "|||"
+{116
+,0,0,0,0,(Shift_tbl*)&S116st_Csubrule_def,0,0,0,(Shift_entry*)&S116qse_Csubrule_def
+};
+struct S117rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S117rtd_Csubrule_def S117rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs2_Rdbl_colon_}
+ }// end of reduce table
+};
+yacco2::State S117_Csubrule_def = //State's vectored into symbol: "|?|"
+{117
+,0,0,0,0,0,(Reduce_tbl*)&S117rt_Csubrule_def,0,0,0};
+struct S118rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S118rtd_Csubrule_def S118rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Csubrule_def,Csubrule_def::rhs1_Rdbl_colon_}
+ }// end of reduce table
+};
+yacco2::State S118_Csubrule_def = //State's vectored into symbol: "::"
+{118
+,0,0,0,0,0,(Reduce_tbl*)&S118rt_Csubrule_def,0,0,0};
+struct S119std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S119std_Csubrule_def S119st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {271,(State*)&S120_Csubrule_def} // shift sym: T_comment
+ ,{372,(State*)&S121_Csubrule_def} // shift sym: T_cweb_comment
+ ,{396,(State*)&S122_Csubrule_def} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::State S119_Csubrule_def = //State's vectored into symbol: "|||"
+{119
+,0,0,0,0,(Shift_tbl*)&S119st_Csubrule_def,0,0,0,0};
+struct S120rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S120rtd_Csubrule_def S120rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs4_Rdirective_cweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S120_Csubrule_def = //State's vectored into symbol: "comment"
+{120
+,0,0,0,0,0,(Reduce_tbl*)&S120rt_Csubrule_def,0,0,0};
+struct S121rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S121rtd_Csubrule_def S121rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rdirective_cweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S121_Csubrule_def = //State's vectored into symbol: "cweb-comment"
+{121
+,0,0,0,0,0,(Reduce_tbl*)&S121rt_Csubrule_def,0,0,0};
+struct S122rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S122rtd_Csubrule_def S122rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs3_Rdirective_cweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S122_Csubrule_def = //State's vectored into symbol: "comment-overrun"
+{122
+,0,0,0,0,0,(Reduce_tbl*)&S122rt_Csubrule_def,0,0,0};
+struct S123std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S123std_Csubrule_def S123st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S124_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S123pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S123ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S123_Csubrule_def = //State's vectored into symbol: "Rdirective_cweb_k_epi"
+{123
+,(Shift_entry*)&S123pse_Csubrule_def,0,(Shift_entry*)&S123ise_Csubrule_def
+,0,(Shift_tbl*)&S123st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S124std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S124std_Csubrule_def S124st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S144_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S145_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{594,(State*)&S125_Csubrule_def} // shift sym: Rmust_directive
+ }// end of shift table
+};
+yacco2::Shift_entry S124pse_Csubrule_def = {3,(State*)&S145_Csubrule_def};
+yacco2::Shift_entry S124qse_Csubrule_def = {0,(State*)&S144_Csubrule_def};
+yacco2::State S124_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{124
+,(Shift_entry*)&S124pse_Csubrule_def,0,0,0,(Shift_tbl*)&S124st_Csubrule_def,0,(State_s_thread_tbl*)&S145tt_Csubrule_def,0,(Shift_entry*)&S124qse_Csubrule_def
+};
+struct S125std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S125std_Csubrule_def S125st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S148_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{601,(State*)&S126_Csubrule_def} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S125pse_Csubrule_def = {3,(State*)&S148_Csubrule_def};
+yacco2::State S125_Csubrule_def = //State's vectored into symbol: "Rmust_directive"
+{125
+,(Shift_entry*)&S125pse_Csubrule_def,0,0,0,(Shift_tbl*)&S125st_Csubrule_def,0,(State_s_thread_tbl*)&S148tt_Csubrule_def,0,0};
+struct S126std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S126std_Csubrule_def S126st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S127_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S126pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S126ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S126_Csubrule_def = //State's vectored into symbol: "Rsyntax_code"
+{126
+,(Shift_entry*)&S126pse_Csubrule_def,0,(Shift_entry*)&S126ise_Csubrule_def
+,0,(Shift_tbl*)&S126st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S127rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S127rtd_Csubrule_def S127rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Csubrule_def,Csubrule_def::rhs1_Rmust_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S127_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{127
+,0,0,0,0,0,(Reduce_tbl*)&S127rt_Csubrule_def,0,0,0};
+struct S128std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S128std_Csubrule_def S128st_Csubrule_def = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S129_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{271,(State*)&S120_Csubrule_def} // shift sym: T_comment
+ ,{313,(State*)&S130_Csubrule_def} // shift sym: T_op
+ ,{372,(State*)&S121_Csubrule_def} // shift sym: T_cweb_comment
+ ,{396,(State*)&S122_Csubrule_def} // shift sym: Err_comment_overrun
+ }// end of shift table
+};
+yacco2::Shift_entry S128qse_Csubrule_def = {0,(State*)&S129_Csubrule_def};
+yacco2::State S128_Csubrule_def = //State's vectored into symbol: "|||"
+{128
+,0,0,0,0,(Shift_tbl*)&S128st_Csubrule_def,0,0,0,(Shift_entry*)&S128qse_Csubrule_def
+};
+struct S129rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S129rtd_Csubrule_def S129rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Csubrule_def,Csubrule_def::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S129_Csubrule_def = //State's vectored into symbol: "|?|"
+{129
+,0,0,0,0,0,(Reduce_tbl*)&S129rt_Csubrule_def,0,0,0};
+struct S130rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S130rtd_Csubrule_def S130rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Csubrule_def,Csubrule_def::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S130_Csubrule_def = //State's vectored into symbol: "#op"
+{130
+,0,0,0,0,0,(Reduce_tbl*)&S130rt_Csubrule_def,0,0,0};
+struct S131std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S131std_Csubrule_def S131st_Csubrule_def = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S128_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{598,(State*)&S132_Csubrule_def} // shift sym: Rmaybe_directive_phrase
+ ,{600,(State*)&S133_Csubrule_def} // shift sym: Rdirective
+ ,{603,(State*)&S136_Csubrule_def} // shift sym: Rdirective_cweb_k_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S131pse_Csubrule_def = {3,(State*)&S128_Csubrule_def};
+struct S131rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S131rtd_Csubrule_def S131rt_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Csubrule_def,Csubrule_def::rhs2_Rmaybe_more_directives_}
+ ,{(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rdirective_cweb_k_epi_}
+ }// end of reduce table
+};
+yacco2::State S131_Csubrule_def = //State's vectored into symbol: "Rmaybe_directive_phrases"
+{131
+,(Shift_entry*)&S131pse_Csubrule_def,0,0,0,(Shift_tbl*)&S131st_Csubrule_def,(Reduce_tbl*)&S131rt_Csubrule_def,(State_s_thread_tbl*)&S128tt_Csubrule_def,0,0};
+struct S132rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S132rtd_Csubrule_def S132rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Csubrule_def,Csubrule_def::rhs2_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S132_Csubrule_def = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{132
+,0,0,0,0,0,(Reduce_tbl*)&S132rt_Csubrule_def,0,0,0};
+struct S133std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S133std_Csubrule_def S133st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S148_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{601,(State*)&S134_Csubrule_def} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S133pse_Csubrule_def = {3,(State*)&S148_Csubrule_def};
+yacco2::State S133_Csubrule_def = //State's vectored into symbol: "Rdirective"
+{133
+,(Shift_entry*)&S133pse_Csubrule_def,0,0,0,(Shift_tbl*)&S133st_Csubrule_def,0,(State_s_thread_tbl*)&S148tt_Csubrule_def,0,0};
+struct S134std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S134std_Csubrule_def S134st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S135_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S134pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S134ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S134_Csubrule_def = //State's vectored into symbol: "Rsyntax_code"
+{134
+,(Shift_entry*)&S134pse_Csubrule_def,0,(Shift_entry*)&S134ise_Csubrule_def
+,0,(Shift_tbl*)&S134st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S135rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S135rtd_Csubrule_def S135rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Csubrule_def,Csubrule_def::rhs2_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S135_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{135
+,0,0,0,0,0,(Reduce_tbl*)&S135rt_Csubrule_def,0,0,0};
+struct S136std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S136std_Csubrule_def S136st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S137_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S136pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S136ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S136_Csubrule_def = //State's vectored into symbol: "Rdirective_cweb_k_epi"
+{136
+,(Shift_entry*)&S136pse_Csubrule_def,0,(Shift_entry*)&S136ise_Csubrule_def
+,0,(Shift_tbl*)&S136st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S137std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S137std_Csubrule_def S137st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S151_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{600,(State*)&S138_Csubrule_def} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::Shift_entry S137pse_Csubrule_def = {3,(State*)&S151_Csubrule_def};
+yacco2::State S137_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{137
+,(Shift_entry*)&S137pse_Csubrule_def,0,0,0,(Shift_tbl*)&S137st_Csubrule_def,0,(State_s_thread_tbl*)&S151tt_Csubrule_def,0,0};
+struct S138std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S138std_Csubrule_def S138st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S148_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{601,(State*)&S139_Csubrule_def} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S138pse_Csubrule_def = {3,(State*)&S148_Csubrule_def};
+yacco2::State S138_Csubrule_def = //State's vectored into symbol: "Rdirective"
+{138
+,(Shift_entry*)&S138pse_Csubrule_def,0,0,0,(Shift_tbl*)&S138st_Csubrule_def,0,(State_s_thread_tbl*)&S148tt_Csubrule_def,0,0};
+struct S139std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S139std_Csubrule_def S139st_Csubrule_def = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S24_Csubrule_def} // shift sym: LR1_parallel_operator
+ ,{5,(State*)&S26_Csubrule_def} // shift sym: LR1_invisible_shift_operator
+ ,{602,(State*)&S140_Csubrule_def} // shift sym: Rlint_epi
+ }// end of shift table
+};
+yacco2::Shift_entry S139pse_Csubrule_def = {3,(State*)&S24_Csubrule_def};
+yacco2::Shift_entry S139ise_Csubrule_def = {5,(State*)&S26_Csubrule_def};
+yacco2::State S139_Csubrule_def = //State's vectored into symbol: "Rsyntax_code"
+{139
+,(Shift_entry*)&S139pse_Csubrule_def,0,(Shift_entry*)&S139ise_Csubrule_def
+,0,(Shift_tbl*)&S139st_Csubrule_def,0,(State_s_thread_tbl*)&S24tt_Csubrule_def,0,0};
+struct S140rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S140rtd_Csubrule_def S140rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Csubrule_def,Csubrule_def::rhs1_Rmaybe_directive_phrase_}
+ }// end of reduce table
+};
+yacco2::State S140_Csubrule_def = //State's vectored into symbol: "Rlint_epi"
+{140
+,0,0,0,0,0,(Reduce_tbl*)&S140rt_Csubrule_def,0,0,0};
+struct S141rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S141rtd_Csubrule_def S141rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Csubrule_def,Csubrule_def::rhs1_Rmaybe_directive_phrases_}
+ }// end of reduce table
+};
+yacco2::State S141_Csubrule_def = //State's vectored into symbol: "Rmaybe_directive_phrase"
+{141
+,0,0,0,0,0,(Reduce_tbl*)&S141rt_Csubrule_def,0,0,0};
+struct S142rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S142rtd_Csubrule_def S142rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S142_Csubrule_def = //State's vectored into symbol: "|?|"
+{142
+,0,0,0,0,0,(Reduce_tbl*)&S142rt_Csubrule_def,0,0,0};
+struct S143rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S143rtd_Csubrule_def S143rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S143_Csubrule_def = //State's vectored into symbol: "}"
+{143
+,0,0,0,0,0,(Reduce_tbl*)&S143rt_Csubrule_def,0,0,0};
+struct S144rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S144rtd_Csubrule_def S144rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Csubrule_def,Csubrule_def::rhs3_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S144_Csubrule_def = //State's vectored into symbol: "|?|"
+{144
+,0,0,0,0,0,(Reduce_tbl*)&S144rt_Csubrule_def,0,0,0};
+struct S145std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S145std_Csubrule_def S145st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S146_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{313,(State*)&S147_Csubrule_def} // shift sym: T_op
+ }// end of shift table
+};
+yacco2::Shift_entry S145qse_Csubrule_def = {0,(State*)&S146_Csubrule_def};
+yacco2::State S145_Csubrule_def = //State's vectored into symbol: "|||"
+{145
+,0,0,0,0,(Shift_tbl*)&S145st_Csubrule_def,0,0,0,(Shift_entry*)&S145qse_Csubrule_def
+};
+struct S146rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S146rtd_Csubrule_def S146rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Csubrule_def,Csubrule_def::rhs2_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S146_Csubrule_def = //State's vectored into symbol: "|?|"
+{146
+,0,0,0,0,0,(Reduce_tbl*)&S146rt_Csubrule_def,0,0,0};
+struct S147rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S147rtd_Csubrule_def S147rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Csubrule_def,Csubrule_def::rhs1_Rmust_directive_}
+ }// end of reduce table
+};
+yacco2::State S147_Csubrule_def = //State's vectored into symbol: "#op"
+{147
+,0,0,0,0,0,(Reduce_tbl*)&S147rt_Csubrule_def,0,0,0};
+struct S148std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S148std_Csubrule_def S148st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S149_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S150_Csubrule_def} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S148qse_Csubrule_def = {0,(State*)&S149_Csubrule_def};
+yacco2::State S148_Csubrule_def = //State's vectored into symbol: "|||"
+{148
+,0,0,0,0,(Shift_tbl*)&S148st_Csubrule_def,0,0,0,(Shift_entry*)&S148qse_Csubrule_def
+};
+struct S149rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S149rtd_Csubrule_def S149rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs2_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S149_Csubrule_def = //State's vectored into symbol: "|?|"
+{149
+,0,0,0,0,0,(Reduce_tbl*)&S149rt_Csubrule_def,0,0,0};
+struct S150rtd_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S150rtd_Csubrule_def S150rt_Csubrule_def = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrule_def,Csubrule_def::rhs1_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S150_Csubrule_def = //State's vectored into symbol: "syntax-code"
+{150
+,0,0,0,0,0,(Reduce_tbl*)&S150rt_Csubrule_def,0,0,0};
+struct S151std_Csubrule_def{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S151std_Csubrule_def S151st_Csubrule_def = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S129_Csubrule_def} // shift sym: LR1_questionable_shift_operator
+ ,{313,(State*)&S130_Csubrule_def} // shift sym: T_op
+ }// end of shift table
+};
+yacco2::Shift_entry S151qse_Csubrule_def = {0,(State*)&S129_Csubrule_def};
+yacco2::State S151_Csubrule_def = //State's vectored into symbol: "|||"
+{151
+,0,0,0,0,(Shift_tbl*)&S151st_Csubrule_def,0,0,0,(Shift_entry*)&S151qse_Csubrule_def
+};
diff --git a/web/yacco2/compiler/grammars/subrule_vector.cpp b/web/yacco2/compiler/grammars/subrule_vector.cpp
new file mode 100644
index 0000000000..5d88fe4848
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vector.cpp
@@ -0,0 +1,64 @@
+/*
+ File: subrule_vector.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_vector.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_vector;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 1;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+}
+ Csubrule_vector::
+ Csubrule_vector()
+ :yacco2::CAbs_fsm
+ ("subrule_vector.lex"
+ ,"1.0"
+ ,"8 Jun 2004"
+ ,true
+ ,"Lexer of subrule begin operator: \\subrule."
+ ,"Fri Jan 30 18:55:24 2015 "
+ ,S1_Csubrule_vector){
+
+ }
+
+Csubrule_vector::~Csubrule_vector(){
+
+ for(int x = 0;x < 1;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csubrule_vector::failed(){
+ return false;
+ }
+ void Csubrule_vector::op(){
+}
+int Csubrule_vector::rhs_to_rules_mapping_[2] = {
+ -1
+ ,0 // subrule 1 for rule 1
+};
+Rsubrule_vector::Rsubrule_vector(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_vector",0,Csubrule_vector::R_Rsubrule_vector_,P,false,false){
+}
+
+void Rsubrule_vector::op(){
+ sstrace_rulesss
+
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+
+}
+void Rsubrule_vector::sr1(){
+
+ rtn_sym_ = new T_selector;
+
+}
+
diff --git a/web/yacco2/compiler/grammars/subrule_vector.fsc b/web/yacco2/compiler/grammars/subrule_vector.fsc
new file mode 100644
index 0000000000..8cf3ab392c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vector.fsc
@@ -0,0 +1,20 @@
+/*
+ File: subrule_vector.fsc
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+transitive n
+grammar-name "subrule_vector"
+name-space "NS_subrule_vector"
+thread-name "TH_subrule_vector"
+monolithic n
+file-name "subrule_vector.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_minus
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Lexer of subrule begin operator: \\subrule."
diff --git a/web/yacco2/compiler/grammars/subrule_vector.h b/web/yacco2/compiler/grammars/subrule_vector.h
new file mode 100644
index 0000000000..cf83f0a553
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vector.h
@@ -0,0 +1,60 @@
+/*
+ File: subrule_vector.h
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#ifndef __subrule_vector_h__
+#define __subrule_vector_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_subrule_vector;
+
+extern yacco2::State S1_Csubrule_vector;
+namespace NS_subrule_vector {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_subrule_vector(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_subrule_vector(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+class Csubrule_vector: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rsubrule_vector_ = 569//start_of_rule_list + 0
+ ,rhs1_Rsubrule_vector_ = 1
+ };
+ //no of la sets = 1
+ //no of states = 3
+ Csubrule_vector();
+ ~Csubrule_vector();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[2];
+ };
+struct Rsubrule_vector;
+struct Rsubrule_vector:public yacco2::CAbs_lr1_sym {
+ Rsubrule_vector(yacco2::Parser* P);
+ void op();
+
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/subrule_vector.lex b/web/yacco2/compiler/grammars/subrule_vector.lex
new file mode 100644
index 0000000000..ead8e88eb4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vector.lex
@@ -0,0 +1,52 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: subrule_vector.lex
+Dates: 23 Mar 2004
+Purpose: subrule ->
+Output: "#->"
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |subrules_phrase| Thread.\fbreak
+ Keyword that starts off defining the subrule.
+@/
+fsm
+(fsm-id "subrule_vector.lex"
+,fsm-filename subrule_vector
+,fsm-namespace NS_subrule_vector
+,fsm-class Csubrule_vector
+,fsm-version "1.0",fsm-date "8 Jun 2004",fsm-debug "true"
+,fsm-comments "Lexer of subrule begin operator: \\subrule.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_subrule_vector
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rsubrule_vector (
+ lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+ ***
+ op
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ ***
+ }
+){
+ -> "-" ">" {
+ op
+ rtn_sym_ = new T_selector;
+ ***}
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/subrule_vectorsym.cpp b/web/yacco2/compiler/grammars/subrule_vectorsym.cpp
new file mode 100644
index 0000000000..4771cd6da5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vectorsym.cpp
@@ -0,0 +1,64 @@
+/*
+ File: subrule_vectorsym.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_vector.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_vector;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrule_vector::TH_subrule_vector(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_subrule_vector;
+ NS_subrule_vector::Csubrule_vector Csubrule_vector_;// parallel-parser's parse table
+#define ssPARSE_TABLE Csubrule_vector_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_subrule_vector::PROC_TH_subrule_vector(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_subrule_vector";
+ static bool one_time(false);
+ static NS_subrule_vector::Csubrule_vector* NS_subrule_vector_Csubrule_vector_(0);// parallel-parser's fsm table
+ static Parser* NS_subrule_vector_Csubrule_vector_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_subrule_vector_Csubrule_vector_ = new NS_subrule_vector::Csubrule_vector();// parallel-parser's fsm table
+ NS_subrule_vector_Csubrule_vector_parser = new Parser(*NS_subrule_vector_Csubrule_vector_,Caller_pp);
+ }
+ proc_parser = NS_subrule_vector_Csubrule_vector_parser;
+#include "wproc_pp_core.h"
+}
+void
+Csubrule_vector::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rsubrule_vector_:{
+ Rsubrule_vector* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_vector(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_vector*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/subrule_vectortbl.cpp b/web/yacco2/compiler/grammars/subrule_vectortbl.cpp
new file mode 100644
index 0000000000..606363e0ef
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrule_vectortbl.cpp
@@ -0,0 +1,64 @@
+/*
+ File: subrule_vectortbl.cpp
+ Date and Time: Fri Jan 30 18:55:24 2015
+*/
+#include "subrule_vector.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrule_vector;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Csubrule_vector[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Csubrule_vector;
+extern yacco2::State S2_Csubrule_vector;
+extern yacco2::State S3_Csubrule_vector;
+struct S1std_Csubrule_vector{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Csubrule_vector S1st_Csubrule_vector = {
+ 2
+ ,
+ {// start of table
+ {53,(State*)&S2_Csubrule_vector} // shift sym: raw_minus
+ ,{569,(State*)&S1_Csubrule_vector} // accept sym: Rsubrule_vector
+ }// end of shift table
+};
+yacco2::State S1_Csubrule_vector = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Csubrule_vector,0,0,0,0};
+struct S2std_Csubrule_vector{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Csubrule_vector S2st_Csubrule_vector = {
+ 1
+ ,
+ {// start of table
+ {70,(State*)&S3_Csubrule_vector} // shift sym: raw_gt_than
+ }// end of shift table
+};
+yacco2::State S2_Csubrule_vector = //State's vectored into symbol: "-"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Csubrule_vector,0,0,0,0};
+struct S3rtd_Csubrule_vector{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Csubrule_vector S3rt_Csubrule_vector = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrule_vector,Csubrule_vector::rhs1_Rsubrule_vector_}
+ }// end of reduce table
+};
+yacco2::State S3_Csubrule_vector = //State's vectored into symbol: ">"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Csubrule_vector,0,0,0};
diff --git a/web/yacco2/compiler/grammars/subrules_phrase.cpp b/web/yacco2/compiler/grammars/subrules_phrase.cpp
new file mode 100644
index 0000000000..914c7bc1fc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrase.cpp
@@ -0,0 +1,189 @@
+/*
+ File: subrules_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "subrules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrules_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 5;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+}
+ Csubrules_phrase::
+ Csubrules_phrase()
+ :yacco2::CAbs_fsm
+ ("subrules_phrase.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse subrules: into the valley of ..."
+ ,"Fri Jan 30 18:55:25 2015 "
+ ,S1_Csubrules_phrase){
+
+ subrules_phrase_ = 0;
+
+ }
+
+Csubrules_phrase::~Csubrules_phrase(){
+
+ for(int x = 0;x < 5;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csubrules_phrase::failed(){
+ return false;
+ }
+ void Csubrules_phrase::op(){
+ if(subrules_phrase_ != 0){
+ delete subrules_phrase_;
+ subrules_phrase_ = 0;
+ }
+ subrules_phrase_ = new T_subrules_phrase;
+ subrules_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*subrules_phrase_);
+ subrules_phrase_->phrase_tree(t);
+ subrule_no_=0;
+
+}
+int Csubrules_phrase::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+};
+Rsubrules_phrase::Rsubrules_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrules_phrase",0,Csubrules_phrase::R_Rsubrules_phrase_,P,false,false){
+}
+
+void Rsubrules_phrase::sr1(){
+
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->subrules_phrase_);
+ fsm->subrules_phrase_ = 0;
+
+}
+
+Rsubrule_defs::Rsubrule_defs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_defs",0,Csubrules_phrase::R_Rsubrule_defs_,P,false,false){
+}
+
+Rsubrule_def::Rsubrule_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def",0,Csubrules_phrase::R_Rsubrule_def_,P,false,false){
+}
+
+void Rsubrule_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_subrule_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ sf->p2__->subrule_no_of_rule(fsm->subrule_no_);
+ fsm->subrules_phrase_->add_sr_to_subrules(sf->p2__);
+
+}
+
+void Rsubrule_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsubrule_def::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_sub_rule_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsubrule_def1::Rsubrule_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsubrule_def1",0,Csubrules_phrase::R_Rsubrule_def1_,P,false,false){
+}
+
+void Rsubrule_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_subrule_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ sf->p2__->subrule_no_of_rule(fsm->subrule_no_);
+ fsm->subrules_phrase_->add_sr_to_subrules(sf->p2__);
+
+}
+
+void Rsubrule_def1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Csubrules_phrase::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/subrules_phrase.fsc b/web/yacco2/compiler/grammars/subrules_phrase.fsc
new file mode 100644
index 0000000000..e517e50206
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrase.fsc
@@ -0,0 +1,23 @@
+/*
+ File: subrules_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+transitive y
+grammar-name "subrules_phrase"
+name-space "NS_subrules_phrase"
+thread-name "TH_subrules_phrase"
+monolithic n
+file-name "subrules_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_subrule_def::TH_subrule_def
+end-list-of-transitive-threads
+list-of-used-threads 2
+ NS_lint_balls::TH_lint_balls
+ NS_subrule_def::TH_subrule_def
+end-list-of-used-threads
+fsm-comments
+"Parse subrules: into the valley of ..."
diff --git a/web/yacco2/compiler/grammars/subrules_phrase.h b/web/yacco2/compiler/grammars/subrules_phrase.h
new file mode 100644
index 0000000000..394e63b585
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrase.h
@@ -0,0 +1,110 @@
+/*
+ File: subrules_phrase.h
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#ifndef __subrules_phrase_h__
+#define __subrules_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "subrule_def.h"
+
+extern yacco2::Thread_entry ITH_subrules_phrase;
+
+extern yacco2::State S1_Csubrules_phrase;
+namespace NS_subrules_phrase {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_subrules_phrase(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_subrules_phrase(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[5];
+};
+class Csubrules_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rsubrules_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rsubrules_phrase_ = 1
+ ,R_Rsubrule_defs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rsubrule_defs_ = 2
+ ,rhs2_Rsubrule_defs_ = 3
+ ,R_Rsubrule_def_ = 571//start_of_rule_list + 4
+ ,rhs1_Rsubrule_def_ = 4
+ ,rhs2_Rsubrule_def_ = 5
+ ,rhs3_Rsubrule_def_ = 6
+ ,R_Rsubrule_def1_ = 572//start_of_rule_list + 6
+ ,rhs1_Rsubrule_def1_ = 7
+ ,rhs2_Rsubrule_def1_ = 8
+ ,R_Rlint_ = 573//start_of_rule_list + 8
+ ,rhs1_Rlint_ = 9
+ ,rhs2_Rlint_ = 10
+ };
+ //no of la sets = 2
+ //no of states = 15
+ Csubrules_phrase();
+ ~Csubrules_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ T_subrules_phrase* subrules_phrase_;
+ int subrule_no_;
+
+ };
+struct Rsubrules_phrase;
+struct Rsubrule_defs;
+struct Rsubrule_def;
+struct Rsubrule_def1;
+struct Rlint;
+struct Rsubrules_phrase:public yacco2::CAbs_lr1_sym {
+ Rsubrules_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rsubrule_defs:public yacco2::CAbs_lr1_sym {
+ Rsubrule_defs(yacco2::Parser* P);
+ public:
+};
+
+struct Rsubrule_def:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsubrule_def1:public yacco2::CAbs_lr1_sym {
+ Rsubrule_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/subrules_phrase.lex b/web/yacco2/compiler/grammars/subrules_phrase.lex
new file mode 100644
index 0000000000..81f31d24b4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrase.lex
@@ -0,0 +1,127 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: subrules_phrase.lex
+Dates: 3 Jun 2004
+Purpose: parse subrule definitions
+Output: T_subrules_phrase
+ assorted errors
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |subrules_phrase| Thread.\fbreak
+Parse subrule definitions.
+@/
+fsm
+(fsm-id "subrules_phrase.lex"
+,fsm-filename subrules_phrase
+,fsm-namespace NS_subrules_phrase
+,fsm-class Csubrules_phrase{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "eol.h"
+#include "c_comments.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "subrule_def.h"
+ ***
+ user-declaration
+ public:
+ T_subrules_phrase* subrules_phrase_;
+ int subrule_no_;
+ ***
+ op
+ if(subrules_phrase_ != 0){
+ delete subrules_phrase_;
+ subrules_phrase_ = 0;
+ }
+ subrules_phrase_ = new T_subrules_phrase;
+ subrules_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*subrules_phrase_);
+ subrules_phrase_->phrase_tree(t);
+ subrule_no_=0;
+ ***
+ constructor
+ subrules_phrase_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse subrules: into the valley of ...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_subrules_phrase
+ ***
+ parallel-la-boundary
+ eolr - |||
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rsubrules_phrase (){
+ -> Rsubrule_defs {
+ op
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->subrules_phrase_);
+ fsm->subrules_phrase_ = 0;
+ ***
+ }
+}
+
+
+Rsubrule_defs (){
+ -> Rsubrule_def Rlint
+ -> Rsubrule_defs Rsubrule_def1 Rlint
+}
+
+Rsubrule_def (){
+ -> ||| "subrule-def" NS_subrule_def::TH_subrule_def {
+ op
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ sf->p2__->subrule_no_of_rule(fsm->subrule_no_);
+ fsm->subrules_phrase_->add_sr_to_subrules(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sub_rule_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsubrule_def1 (){
+ -> ||| "subrule-def" NS_subrule_def::TH_subrule_def {
+ op
+ Csubrules_phrase* fsm = (Csubrules_phrase*)rule_info__.parser__->fsm_tbl__;
+ ++fsm->subrule_no_;
+ sf->p2__->subrule_no_of_rule(fsm->subrule_no_);
+ fsm->subrules_phrase_->add_sr_to_subrules(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/subrules_phrasesym.cpp b/web/yacco2/compiler/grammars/subrules_phrasesym.cpp
new file mode 100644
index 0000000000..55f76be1e5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrasesym.cpp
@@ -0,0 +1,194 @@
+/*
+ File: subrules_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "subrules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrules_phrase;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_subrules_phrase::TH_subrules_phrase(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_subrules_phrase;
+ NS_subrules_phrase::Csubrules_phrase Csubrules_phrase_;// parallel-parser's parse table
+#define ssPARSE_TABLE Csubrules_phrase_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_subrules_phrase::PROC_TH_subrules_phrase(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_subrules_phrase";
+ static bool one_time(false);
+ static NS_subrules_phrase::Csubrules_phrase* NS_subrules_phrase_Csubrules_phrase_(0);// parallel-parser's fsm table
+ static Parser* NS_subrules_phrase_Csubrules_phrase_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_subrules_phrase_Csubrules_phrase_ = new NS_subrules_phrase::Csubrules_phrase();// parallel-parser's fsm table
+ NS_subrules_phrase_Csubrules_phrase_parser = new Parser(*NS_subrules_phrase_Csubrules_phrase_,Caller_pp);
+ }
+ proc_parser = NS_subrules_phrase_Csubrules_phrase_parser;
+#include "wproc_pp_core.h"
+}
+void
+Csubrules_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rsubrules_phrase_:{
+ Rsubrules_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrules_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrules_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rsubrule_defs_:{
+ Rsubrule_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsubrule_defs_:{
+ Rsubrule_defs* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_defs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_defs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsubrule_def_:{
+ Rsubrule_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsubrule_def1_:{
+ Rsubrule_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsubrule_def1_:{
+ Rsubrule_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsubrule_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsubrule_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/subrules_phrasetbl.cpp b/web/yacco2/compiler/grammars/subrules_phrasetbl.cpp
new file mode 100644
index 0000000000..3b85b2cfe3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/subrules_phrasetbl.cpp
@@ -0,0 +1,1601 @@
+/*
+ File: subrules_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "subrules_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_subrules_phrase;// grammar's ns
+// first set terminals
+// LR1_eog
+// LR1_reduce_operator
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA1_Csubrules_phrase[] ={
+72
+,0,18
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA2_Csubrules_phrase[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Csubrules_phrase;
+extern yacco2::State S2_Csubrules_phrase;
+extern yacco2::State S3_Csubrules_phrase;
+struct S3ttd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Csubrules_phrase S3tt_Csubrules_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_subrule_def
+};
+extern yacco2::State S4_Csubrules_phrase;
+extern yacco2::State S5_Csubrules_phrase;
+extern yacco2::State S6_Csubrules_phrase;
+extern yacco2::State S7_Csubrules_phrase;
+struct S7ttd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S7ttd_Csubrules_phrase S7tt_Csubrules_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_subrule_def
+};
+extern yacco2::State S8_Csubrules_phrase;
+extern yacco2::State S9_Csubrules_phrase;
+extern yacco2::State S10_Csubrules_phrase;
+extern yacco2::State S11_Csubrules_phrase;
+struct S11ttd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S11ttd_Csubrules_phrase S11tt_Csubrules_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S12_Csubrules_phrase;
+extern yacco2::State S13_Csubrules_phrase;
+extern yacco2::State S14_Csubrules_phrase;
+extern yacco2::State S15_Csubrules_phrase;
+struct S1std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Csubrules_phrase S1st_Csubrules_phrase = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S2_Csubrules_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Csubrules_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Csubrules_phrase} // accept sym: Rsubrules_phrase
+ ,{570,(State*)&S6_Csubrules_phrase} // shift sym: Rsubrule_defs
+ ,{571,(State*)&S14_Csubrules_phrase} // shift sym: Rsubrule_def
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Csubrules_phrase = {3,(State*)&S3_Csubrules_phrase};
+yacco2::Shift_entry S1qse_Csubrules_phrase = {0,(State*)&S2_Csubrules_phrase};
+yacco2::State S1_Csubrules_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Csubrules_phrase,0,0,0,(Shift_tbl*)&S1st_Csubrules_phrase,0,(State_s_thread_tbl*)&S3tt_Csubrules_phrase,0,(Shift_entry*)&S1qse_Csubrules_phrase
+};
+struct S2rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Csubrules_phrase S2rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs3_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S2_Csubrules_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Csubrules_phrase,0,0,0};
+struct S3std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Csubrules_phrase S3st_Csubrules_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Csubrules_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{342,(State*)&S5_Csubrules_phrase} // shift sym: T_subrule_def
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Csubrules_phrase = {0,(State*)&S4_Csubrules_phrase};
+yacco2::State S3_Csubrules_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Csubrules_phrase,0,0,0,(Shift_entry*)&S3qse_Csubrules_phrase
+};
+struct S4rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Csubrules_phrase S4rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs2_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S4_Csubrules_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Csubrules_phrase,0,0,0};
+struct S5rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Csubrules_phrase S5rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs1_Rsubrule_def_}
+ }// end of reduce table
+};
+yacco2::State S5_Csubrules_phrase = //State's vectored into symbol: "subrule-def"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Csubrules_phrase,0,0,0};
+struct S6std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S6std_Csubrules_phrase S6st_Csubrules_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S7_Csubrules_phrase} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S10_Csubrules_phrase} // shift sym: Rsubrule_def1
+ }// end of shift table
+};
+yacco2::Shift_entry S6pse_Csubrules_phrase = {3,(State*)&S7_Csubrules_phrase};
+struct S6rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Csubrules_phrase S6rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csubrules_phrase,Csubrules_phrase::rhs1_Rsubrules_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Csubrules_phrase = //State's vectored into symbol: "Rsubrule_defs"
+{6
+,(Shift_entry*)&S6pse_Csubrules_phrase,0,0,0,(Shift_tbl*)&S6st_Csubrules_phrase,(Reduce_tbl*)&S6rt_Csubrules_phrase,(State_s_thread_tbl*)&S7tt_Csubrules_phrase,0,0};
+struct S7std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Csubrules_phrase S7st_Csubrules_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S8_Csubrules_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{342,(State*)&S9_Csubrules_phrase} // shift sym: T_subrule_def
+ }// end of shift table
+};
+yacco2::Shift_entry S7qse_Csubrules_phrase = {0,(State*)&S8_Csubrules_phrase};
+yacco2::State S7_Csubrules_phrase = //State's vectored into symbol: "|||"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Csubrules_phrase,0,0,0,(Shift_entry*)&S7qse_Csubrules_phrase
+};
+struct S8rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Csubrules_phrase S8rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs2_Rsubrule_def1_}
+ }// end of reduce table
+};
+yacco2::State S8_Csubrules_phrase = //State's vectored into symbol: "|?|"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Csubrules_phrase,0,0,0};
+struct S9rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Csubrules_phrase S9rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs1_Rsubrule_def1_}
+ }// end of reduce table
+};
+yacco2::State S9_Csubrules_phrase = //State's vectored into symbol: "subrule-def"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Csubrules_phrase,0,0,0};
+struct S10std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_Csubrules_phrase S10st_Csubrules_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S11_Csubrules_phrase} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S13_Csubrules_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Csubrules_phrase = {3,(State*)&S11_Csubrules_phrase};
+struct S10rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Csubrules_phrase S10rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S10_Csubrules_phrase = //State's vectored into symbol: "Rsubrule_def1"
+{10
+,(Shift_entry*)&S10pse_Csubrules_phrase,0,0,0,(Shift_tbl*)&S10st_Csubrules_phrase,(Reduce_tbl*)&S10rt_Csubrules_phrase,(State_s_thread_tbl*)&S11tt_Csubrules_phrase,0,0};
+struct S11std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Csubrules_phrase S11st_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S12_Csubrules_phrase} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S11_Csubrules_phrase = //State's vectored into symbol: "|||"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Csubrules_phrase,0,0,0,0};
+struct S12rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Csubrules_phrase S12rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S12_Csubrules_phrase = //State's vectored into symbol: "lint"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Csubrules_phrase,0,0,0};
+struct S13rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Csubrules_phrase S13rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs2_Rsubrule_defs_}
+ }// end of reduce table
+};
+yacco2::State S13_Csubrules_phrase = //State's vectored into symbol: "Rlint"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Csubrules_phrase,0,0,0};
+struct S14std_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_Csubrules_phrase S14st_Csubrules_phrase = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S11_Csubrules_phrase} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S15_Csubrules_phrase} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S14pse_Csubrules_phrase = {3,(State*)&S11_Csubrules_phrase};
+struct S14rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Csubrules_phrase S14rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S14_Csubrules_phrase = //State's vectored into symbol: "Rsubrule_def"
+{14
+,(Shift_entry*)&S14pse_Csubrules_phrase,0,0,0,(Shift_tbl*)&S14st_Csubrules_phrase,(Reduce_tbl*)&S14rt_Csubrules_phrase,(State_s_thread_tbl*)&S11tt_Csubrules_phrase,0,0};
+struct S15rtd_Csubrules_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Csubrules_phrase S15rt_Csubrules_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csubrules_phrase,Csubrules_phrase::rhs1_Rsubrule_defs_}
+ }// end of reduce table
+};
+yacco2::State S15_Csubrules_phrase = //State's vectored into symbol: "Rlint"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Csubrules_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/t_alphabet.cpp b/web/yacco2/compiler/grammars/t_alphabet.cpp
new file mode 100644
index 0000000000..969bbf55a9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabet.cpp
@@ -0,0 +1,210 @@
+/*
+ File: t_alphabet.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_alphabet;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Ct_alphabet::
+ Ct_alphabet()
+ :yacco2::CAbs_fsm
+ ("t_alphabet.lex"
+ ,"1.0"
+ ,"9 Feb. 2005"
+ ,false
+ ,"Parse Linker's t-alphabet language."
+ ,"Fri Jan 30 18:55:25 2015 "
+ ,S1_Ct_alphabet){
+
+ enum_cnt_ = 0;
+
+ }
+
+Ct_alphabet::~Ct_alphabet(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ct_alphabet::failed(){
+ return false;
+ }
+ void Ct_alphabet::op(){
+}
+int Ct_alphabet::rhs_to_rules_mapping_[11] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+};
+Rt_alphabet::Rt_alphabet(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_alphabet",0,Ct_alphabet::R_Rt_alphabet_,P,false,false){
+}
+
+void Rt_alphabet::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+Reog::Reog(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reog",0,Ct_alphabet::R_Reog_,P,false,false){
+}
+
+void Reog::sr1(){
+ struct SF{
+ LR1_eog* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ct_alphabet* fsm = (Ct_alphabet*) rule_info__.parser__->fsm_tbl__;
+ if(fsm->T_dictionary_.empty()){
+ CAbs_lr1_sym* sym = new Err_no_terminals_present_in_T_alphabet;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+
+RT_alphabet::RT_alphabet(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT_alphabet",0,Ct_alphabet::R_RT_alphabet_,P,false,false){
+}
+
+void RT_alphabet::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlist_of_Ts::Rlist_of_Ts(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlist_of_Ts",0,Ct_alphabet::R_Rlist_of_Ts_,P,false,false){
+}
+
+void Rlist_of_Ts::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_no_terminals_in_T_alphabet_list;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ra_T::Ra_T(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra_T",0,Ct_alphabet::R_Ra_T_,P,false,false){
+}
+
+void Ra_T::sr1(){
+ struct SF{
+ T_identifier* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Ct_alphabet* fsm = (Ct_alphabet*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ // add to T dictionary
+ std::map<std::string,int>::iterator i =
+ fsm->T_dictionary_.find(k->identifier()->c_str());
+ if(i != fsm->T_dictionary_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->T_dictionary_[k->identifier()->c_str()]=fsm->enum_cnt_;
+ string xxx(k->identifier()->c_str());
+ fsm->enum_T_dictionary_[fsm->enum_cnt_] = xxx;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ T_attributes* T_att = new T_attributes(k->identifier()->c_str(),fsm->enum_cnt_);
+ tth_in_stbl* t = new tth_in_stbl(T_att,k,rule_info__.parser__);
+ add_sym_to_stbl(report_card,*k->identifier()->c_str()
+ ,*t,table_entry::defed,table_entry::terminal);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ t->stbl_idx(report_card.pos_);
+ T_DICTIONARY.push_back(report_card.tbl_entry_);
+ T_THREAD_ID_LIST.push_back(std::set<int>());
+ ++fsm->enum_cnt_;
+
+}
+
+Rend_T_alphabet::Rend_T_alphabet(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rend_T_alphabet",0,Ct_alphabet::R_Rend_T_alphabet_,P,false,false){
+}
+
+void Rend_T_alphabet::sr2(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_end_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/t_alphabet.fsc b/web/yacco2/compiler/grammars/t_alphabet.fsc
new file mode 100644
index 0000000000..8ec73702a7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabet.fsc
@@ -0,0 +1,21 @@
+/*
+ File: t_alphabet.fsc
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+transitive n
+grammar-name "t_alphabet"
+name-space "NS_t_alphabet"
+thread-name "Ct_alphabet"
+monolithic y
+file-name "t_alphabet.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ T_T_alphabet
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Parse Linker's t-alphabet language."
diff --git a/web/yacco2/compiler/grammars/t_alphabet.h b/web/yacco2/compiler/grammars/t_alphabet.h
new file mode 100644
index 0000000000..d0d5084b3a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabet.h
@@ -0,0 +1,110 @@
+/*
+ File: t_alphabet.h
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#ifndef __t_alphabet_h__
+#define __t_alphabet_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+ #include "yacco2_stbl.h"
+ extern std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
+ extern std::vector< std::set<int> > T_THREAD_ID_LIST;
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ct_alphabet;
+namespace NS_t_alphabet {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Ct_alphabet: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rt_alphabet_ = 569//start_of_rule_list + 0
+ ,rhs1_Rt_alphabet_ = 1
+ ,R_Reog_ = 570//start_of_rule_list + 2
+ ,rhs1_Reog_ = 2
+ ,R_RT_alphabet_ = 571//start_of_rule_list + 4
+ ,rhs1_RT_alphabet_ = 3
+ ,rhs2_RT_alphabet_ = 4
+ ,R_Rlist_of_Ts_ = 572//start_of_rule_list + 6
+ ,rhs1_Rlist_of_Ts_ = 5
+ ,rhs2_Rlist_of_Ts_ = 6
+ ,rhs3_Rlist_of_Ts_ = 7
+ ,R_Ra_T_ = 573//start_of_rule_list + 8
+ ,rhs1_Ra_T_ = 8
+ ,R_Rend_T_alphabet_ = 574//start_of_rule_list + 10
+ ,rhs1_Rend_T_alphabet_ = 9
+ ,rhs2_Rend_T_alphabet_ = 10
+ };
+ //no of la sets = 4
+ //no of states = 14
+ Ct_alphabet();
+ ~Ct_alphabet();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ std::map<int,std::string> enum_T_dictionary_;
+ std::map<std::string,int> T_dictionary_;
+ int enum_cnt_;
+
+ };
+struct Rt_alphabet;
+struct Reog;
+struct RT_alphabet;
+struct Rlist_of_Ts;
+struct Ra_T;
+struct Rend_T_alphabet;
+struct Rt_alphabet:public yacco2::CAbs_lr1_sym {
+ Rt_alphabet(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Reog:public yacco2::CAbs_lr1_sym {
+ Reog(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct RT_alphabet:public yacco2::CAbs_lr1_sym {
+ RT_alphabet(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rlist_of_Ts:public yacco2::CAbs_lr1_sym {
+ Rlist_of_Ts(yacco2::Parser* P);
+ public:
+ void sr3();
+};
+
+struct Ra_T:public yacco2::CAbs_lr1_sym {
+ Ra_T(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rend_T_alphabet:public yacco2::CAbs_lr1_sym {
+ Rend_T_alphabet(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/t_alphabet.lex b/web/yacco2/compiler/grammars/t_alphabet.lex
new file mode 100644
index 0000000000..9f622e52cc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabet.lex
@@ -0,0 +1,154 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: t_alphabet.lex
+dates: 10 feb. 2005
+Purpose: parse of t-alphabet language.
+ put T into global T dictionary, yacco2's symbol table
+ and global thread list per terminal.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |t_alphabet| grammar.\fbreak
+Parse Linker's t-alphabet language.
+It's just a list of terminal names.
+\fbreak
+For the Yacco2 grammars, it looks like this:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/intro2.txt"}
+\fbreak
+ @/
+fsm
+(fsm-id "t_alphabet.lex",fsm-filename t_alphabet,fsm-namespace NS_t_alphabet
+,fsm-class Ct_alphabet{
+ user-prefix-declaration
+ #include "yacco2_stbl.h"
+ extern std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
+ extern std::vector< std::set<int> > T_THREAD_ID_LIST;
+ ***
+ user-declaration
+ public:
+ std::map<int,std::string> enum_T_dictionary_;
+ std::map<std::string,int> T_dictionary_;
+ int enum_cnt_;
+ ***
+ constructor
+ enum_cnt_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "9 Feb. 2005",fsm-debug "false"
+,fsm-comments "Parse Linker's t-alphabet language.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rt_alphabet (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> RT_alphabet
+ Rlist_of_Ts
+ Rend_T_alphabet
+ Reog
+}
+Reog (){
+ -> eog {
+ op
+ Ct_alphabet* fsm = (Ct_alphabet*) rule_info__.parser__->fsm_tbl__;
+ if(fsm->T_dictionary_.empty()){
+ CAbs_lr1_sym* sym = new Err_no_terminals_present_in_T_alphabet;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+ }
+}
+
+RT_alphabet (){
+ -> "T-alphabet"
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlist_of_Ts (){
+ -> Ra_T
+ -> Rlist_of_Ts Ra_T
+ -> |?| {
+/@
+ no terminals in list: \fbreak
+ REMEMBER THERE IS NO ASSOCIATED CO-ORDINATES, USE CURRENT TOKEN.
+@/
+ op
+ CAbs_lr1_sym* sym = new Err_no_terminals_in_T_alphabet_list;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ra_T (){
+ -> identifier {
+ op
+ Ct_alphabet* fsm = (Ct_alphabet*) rule_info__.parser__->fsm_tbl__;
+ T_identifier* k = sf->p1__;
+ // add to T dictionary
+ std::map<std::string,int>::iterator i =
+ fsm->T_dictionary_.find(k->identifier()->c_str());
+ if(i != fsm->T_dictionary_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->T_dictionary_[k->identifier()->c_str()]=fsm->enum_cnt_;
+ string xxx(k->identifier()->c_str());
+ fsm->enum_T_dictionary_[fsm->enum_cnt_] = xxx;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ T_attributes* T_att = new T_attributes(k->identifier()->c_str(),fsm->enum_cnt_);
+ tth_in_stbl* t = new tth_in_stbl(T_att,k,rule_info__.parser__);
+ add_sym_to_stbl(report_card,*k->identifier()->c_str()
+ ,*t,table_entry::defed,table_entry::terminal);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ t->stbl_idx(report_card.pos_);
+ T_DICTIONARY.push_back(report_card.tbl_entry_);
+ T_THREAD_ID_LIST.push_back(std::set<int>());
+ ++fsm->enum_cnt_;
+ ***
+ }
+}
+
+Rend_T_alphabet (){
+ -> "end-T-alphabet"
+ -> |?| {
+ /@
+ Random characters or eog to err or not to ?
+ @/
+ op
+ CAbs_lr1_sym* sym = new Err_end_T_alphabet_kw_not_present;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/t_alphabetsym.cpp b/web/yacco2/compiler/grammars/t_alphabetsym.cpp
new file mode 100644
index 0000000000..2657a4a843
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabetsym.cpp
@@ -0,0 +1,173 @@
+/*
+ File: t_alphabetsym.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_alphabet;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ct_alphabet::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rt_alphabet_:{
+ Rt_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->op();
+ return;}
+ case rhs1_Reog_:{
+ Reog* sym;
+ if(re->rule_ == 0){
+ sym = new Reog(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reog*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_RT_alphabet_:{
+ RT_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RT_alphabet_:{
+ RT_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new RT_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlist_of_Ts_:{
+ Rlist_of_Ts* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_Ts(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_Ts*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlist_of_Ts_:{
+ Rlist_of_Ts* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_Ts(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_Ts*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rlist_of_Ts_:{
+ Rlist_of_Ts* sym;
+ if(re->rule_ == 0){
+ sym = new Rlist_of_Ts(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlist_of_Ts*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Ra_T_:{
+ Ra_T* sym;
+ if(re->rule_ == 0){
+ sym = new Ra_T(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra_T*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rend_T_alphabet_:{
+ Rend_T_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_T_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_T_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rend_T_alphabet_:{
+ Rend_T_alphabet* sym;
+ if(re->rule_ == 0){
+ sym = new Rend_T_alphabet(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rend_T_alphabet*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/t_alphabettbl.cpp b/web/yacco2/compiler/grammars/t_alphabettbl.cpp
new file mode 100644
index 0000000000..b1b1ed14a0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_alphabettbl.cpp
@@ -0,0 +1,266 @@
+/*
+ File: t_alphabettbl.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_alphabet.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_alphabet;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// T_identifier
+yacco2::UCHAR LA1_Ct_alphabet[] ={
+2
+,0,1
+,34,128
+};
+// LR1_eog
+yacco2::UCHAR LA2_Ct_alphabet[] ={
+1
+,0,2
+};
+// LR1_questionable_shift_operator
+// T_identifier
+// T_end_T_alphabet
+yacco2::UCHAR LA3_Ct_alphabet[] ={
+3
+,0,1
+,34,128
+,45,2
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Ct_alphabet[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ct_alphabet;
+extern yacco2::State S2_Ct_alphabet;
+extern yacco2::State S3_Ct_alphabet;
+extern yacco2::State S4_Ct_alphabet;
+extern yacco2::State S5_Ct_alphabet;
+extern yacco2::State S6_Ct_alphabet;
+extern yacco2::State S7_Ct_alphabet;
+extern yacco2::State S8_Ct_alphabet;
+extern yacco2::State S9_Ct_alphabet;
+extern yacco2::State S10_Ct_alphabet;
+extern yacco2::State S11_Ct_alphabet;
+extern yacco2::State S12_Ct_alphabet;
+extern yacco2::State S13_Ct_alphabet;
+extern yacco2::State S14_Ct_alphabet;
+struct S1std_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Ct_alphabet S1st_Ct_alphabet = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Ct_alphabet} // shift sym: LR1_questionable_shift_operator
+ ,{360,(State*)&S3_Ct_alphabet} // shift sym: T_T_alphabet
+ ,{569,(State*)&S1_Ct_alphabet} // accept sym: Rt_alphabet
+ ,{571,(State*)&S4_Ct_alphabet} // shift sym: RT_alphabet
+ }// end of shift table
+};
+yacco2::Shift_entry S1qse_Ct_alphabet = {0,(State*)&S2_Ct_alphabet};
+yacco2::State S1_Ct_alphabet = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ct_alphabet,0,0,0,(Shift_entry*)&S1qse_Ct_alphabet
+};
+struct S2rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ct_alphabet S2rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ct_alphabet,Ct_alphabet::rhs2_RT_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S2_Ct_alphabet = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ct_alphabet,0,0,0};
+struct S3rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ct_alphabet S3rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ct_alphabet,Ct_alphabet::rhs1_RT_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S3_Ct_alphabet = //State's vectored into symbol: "T-alphabet"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ct_alphabet,0,0,0};
+struct S4std_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S4std_Ct_alphabet S4st_Ct_alphabet = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S12_Ct_alphabet} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S7_Ct_alphabet} // shift sym: T_identifier
+ ,{572,(State*)&S5_Ct_alphabet} // shift sym: Rlist_of_Ts
+ ,{573,(State*)&S14_Ct_alphabet} // shift sym: Ra_T
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Ct_alphabet = {0,(State*)&S12_Ct_alphabet};
+yacco2::State S4_Ct_alphabet = //State's vectored into symbol: "RT_alphabet"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Ct_alphabet,0,0,0,(Shift_entry*)&S4qse_Ct_alphabet
+};
+struct S5std_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S5std_Ct_alphabet S5st_Ct_alphabet = {
+ 5
+ ,
+ {// start of table
+ {0,(State*)&S6_Ct_alphabet} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S7_Ct_alphabet} // shift sym: T_identifier
+ ,{361,(State*)&S8_Ct_alphabet} // shift sym: T_end_T_alphabet
+ ,{573,(State*)&S13_Ct_alphabet} // shift sym: Ra_T
+ ,{574,(State*)&S9_Ct_alphabet} // shift sym: Rend_T_alphabet
+ }// end of shift table
+};
+yacco2::Shift_entry S5qse_Ct_alphabet = {0,(State*)&S6_Ct_alphabet};
+yacco2::State S5_Ct_alphabet = //State's vectored into symbol: "Rlist_of_Ts"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Ct_alphabet,0,0,0,(Shift_entry*)&S5qse_Ct_alphabet
+};
+struct S6rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ct_alphabet S6rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ct_alphabet,Ct_alphabet::rhs2_Rend_T_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S6_Ct_alphabet = //State's vectored into symbol: "|?|"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ct_alphabet,0,0,0};
+struct S7rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ct_alphabet S7rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ct_alphabet,Ct_alphabet::rhs1_Ra_T_}
+ }// end of reduce table
+};
+yacco2::State S7_Ct_alphabet = //State's vectored into symbol: "identifier"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ct_alphabet,0,0,0};
+struct S8rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ct_alphabet S8rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ct_alphabet,Ct_alphabet::rhs1_Rend_T_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S8_Ct_alphabet = //State's vectored into symbol: "end-T-alphabet"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ct_alphabet,0,0,0};
+struct S9std_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Ct_alphabet S9st_Ct_alphabet = {
+ 2
+ ,
+ {// start of table
+ {1,(State*)&S10_Ct_alphabet} // shift sym: LR1_eog
+ ,{570,(State*)&S11_Ct_alphabet} // shift sym: Reog
+ }// end of shift table
+};
+yacco2::State S9_Ct_alphabet = //State's vectored into symbol: "Rend_T_alphabet"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Ct_alphabet,0,0,0,0};
+struct S10rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ct_alphabet S10rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ct_alphabet,Ct_alphabet::rhs1_Reog_}
+ }// end of reduce table
+};
+yacco2::State S10_Ct_alphabet = //State's vectored into symbol: "eog"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ct_alphabet,0,0,0};
+struct S11rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ct_alphabet S11rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ct_alphabet,Ct_alphabet::rhs1_Rt_alphabet_}
+ }// end of reduce table
+};
+yacco2::State S11_Ct_alphabet = //State's vectored into symbol: "Reog"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ct_alphabet,0,0,0};
+struct S12rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Ct_alphabet S12rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ct_alphabet,Ct_alphabet::rhs3_Rlist_of_Ts_}
+ }// end of reduce table
+};
+yacco2::State S12_Ct_alphabet = //State's vectored into symbol: "|?|"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Ct_alphabet,0,0,0};
+struct S13rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ct_alphabet S13rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ct_alphabet,Ct_alphabet::rhs2_Rlist_of_Ts_}
+ }// end of reduce table
+};
+yacco2::State S13_Ct_alphabet = //State's vectored into symbol: "Ra_T"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ct_alphabet,0,0,0};
+struct S14rtd_Ct_alphabet{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ct_alphabet S14rt_Ct_alphabet = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ct_alphabet,Ct_alphabet::rhs1_Rlist_of_Ts_}
+ }// end of reduce table
+};
+yacco2::State S14_Ct_alphabet = //State's vectored into symbol: "Ra_T"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ct_alphabet,0,0,0};
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tags.cpp b/web/yacco2/compiler/grammars/t_def_delabort_tags.cpp
new file mode 100644
index 0000000000..5fe83e3f72
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tags.cpp
@@ -0,0 +1,177 @@
+/*
+ File: t_def_delabort_tags.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_def_delabort_tags.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_def_delabort_tags;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 7;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+}
+ Ct_def_delabort_tags::
+ Ct_def_delabort_tags()
+ :yacco2::CAbs_fsm
+ ("t_def_delabort_tags.lex"
+ ,"1.0"
+ ,"23 mar 2004"
+ ,false
+ ,"AB AD grammar symbol tags recognizer."
+ ,"Fri Jan 30 18:55:25 2015 "
+ ,S1_Ct_def_delabort_tags){
+
+ }
+
+Ct_def_delabort_tags::~Ct_def_delabort_tags(){
+
+ for(int x = 0;x < 7;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ct_def_delabort_tags::failed(){
+ return false;
+ }
+ void Ct_def_delabort_tags::op(){
+}
+int Ct_def_delabort_tags::rhs_to_rules_mapping_[72] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,1 // subrule 8 for rule 2
+ ,1 // subrule 9 for rule 2
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,2 // subrule 19 for rule 3
+ ,2 // subrule 20 for rule 3
+ ,2 // subrule 21 for rule 3
+ ,2 // subrule 22 for rule 3
+ ,3 // subrule 23 for rule 4
+ ,3 // subrule 24 for rule 4
+ ,3 // subrule 25 for rule 4
+ ,3 // subrule 26 for rule 4
+ ,3 // subrule 27 for rule 4
+ ,3 // subrule 28 for rule 4
+ ,3 // subrule 29 for rule 4
+ ,3 // subrule 30 for rule 4
+ ,3 // subrule 31 for rule 4
+ ,3 // subrule 32 for rule 4
+ ,3 // subrule 33 for rule 4
+ ,3 // subrule 34 for rule 4
+ ,3 // subrule 35 for rule 4
+ ,4 // subrule 36 for rule 5
+ ,4 // subrule 37 for rule 5
+ ,4 // subrule 38 for rule 5
+ ,4 // subrule 39 for rule 5
+ ,4 // subrule 40 for rule 5
+ ,4 // subrule 41 for rule 5
+ ,4 // subrule 42 for rule 5
+ ,4 // subrule 43 for rule 5
+ ,4 // subrule 44 for rule 5
+ ,4 // subrule 45 for rule 5
+ ,4 // subrule 46 for rule 5
+ ,4 // subrule 47 for rule 5
+ ,4 // subrule 48 for rule 5
+ ,5 // subrule 49 for rule 6
+ ,5 // subrule 50 for rule 6
+ ,5 // subrule 51 for rule 6
+ ,5 // subrule 52 for rule 6
+ ,5 // subrule 53 for rule 6
+ ,5 // subrule 54 for rule 6
+ ,5 // subrule 55 for rule 6
+ ,5 // subrule 56 for rule 6
+ ,5 // subrule 57 for rule 6
+ ,5 // subrule 58 for rule 6
+ ,5 // subrule 59 for rule 6
+ ,5 // subrule 60 for rule 6
+ ,5 // subrule 61 for rule 6
+ ,6 // subrule 62 for rule 7
+ ,6 // subrule 63 for rule 7
+ ,6 // subrule 64 for rule 7
+ ,6 // subrule 65 for rule 7
+ ,6 // subrule 66 for rule 7
+ ,6 // subrule 67 for rule 7
+ ,6 // subrule 68 for rule 7
+ ,6 // subrule 69 for rule 7
+ ,6 // subrule 70 for rule 7
+ ,6 // subrule 71 for rule 7
+};
+Rt_def_delabort_tags::Rt_def_delabort_tags(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_def_delabort_tags",0,Ct_def_delabort_tags::R_Rt_def_delabort_tags_,P,false,false){
+}
+
+void Rt_def_delabort_tags::op(){
+ sstrace_rulesss
+
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+
+}
+void Rt_def_delabort_tags::sr1(){
+
+ rtn_sym_ = new T_AD;
+
+}
+
+void Rt_def_delabort_tags::sr2(){
+
+ rtn_sym_ = new T_AB;
+
+}
+
+Rminus_la::Rminus_la(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus_la",0,Ct_def_delabort_tags::R_Rminus_la_,P,false,false){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,Ct_def_delabort_tags::R_RUPPER_A_M_,P,false,false){
+}
+
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,Ct_def_delabort_tags::R_RUPPER_N_Z_,P,false,false){
+}
+
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,Ct_def_delabort_tags::R_Rlower_a_m_,P,false,false){
+}
+
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,Ct_def_delabort_tags::R_Rlower_n_z_,P,false,false){
+}
+
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,Ct_def_delabort_tags::R_RNUMBERS_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tags.fsc b/web/yacco2/compiler/grammars/t_def_delabort_tags.fsc
new file mode 100644
index 0000000000..6691aeccdc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tags.fsc
@@ -0,0 +1,20 @@
+/*
+ File: t_def_delabort_tags.fsc
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+transitive n
+grammar-name "t_def_delabort_tags"
+name-space "NS_t_def_delabort_tags"
+thread-name "TH_t_def_delabort_tags"
+monolithic n
+file-name "t_def_delabort_tags.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_A
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"AB AD grammar symbol tags recognizer."
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tags.h b/web/yacco2/compiler/grammars/t_def_delabort_tags.h
new file mode 100644
index 0000000000..17010a7e32
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tags.h
@@ -0,0 +1,173 @@
+/*
+ File: t_def_delabort_tags.h
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#ifndef __t_def_delabort_tags_h__
+#define __t_def_delabort_tags_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_t_def_delabort_tags;
+
+extern yacco2::State S1_Ct_def_delabort_tags;
+namespace NS_t_def_delabort_tags {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_t_def_delabort_tags(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_t_def_delabort_tags(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[7];
+};
+class Ct_def_delabort_tags: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rt_def_delabort_tags_ = 569//start_of_rule_list + 0
+ ,rhs1_Rt_def_delabort_tags_ = 1
+ ,rhs2_Rt_def_delabort_tags_ = 2
+ ,R_Rminus_la_ = 570//start_of_rule_list + 2
+ ,rhs1_Rminus_la_ = 3
+ ,rhs2_Rminus_la_ = 4
+ ,rhs3_Rminus_la_ = 5
+ ,rhs4_Rminus_la_ = 6
+ ,rhs5_Rminus_la_ = 7
+ ,rhs6_Rminus_la_ = 8
+ ,rhs7_Rminus_la_ = 9
+ ,R_RUPPER_A_M_ = 571//start_of_rule_list + 4
+ ,rhs1_RUPPER_A_M_ = 10
+ ,rhs2_RUPPER_A_M_ = 11
+ ,rhs3_RUPPER_A_M_ = 12
+ ,rhs4_RUPPER_A_M_ = 13
+ ,rhs5_RUPPER_A_M_ = 14
+ ,rhs6_RUPPER_A_M_ = 15
+ ,rhs7_RUPPER_A_M_ = 16
+ ,rhs8_RUPPER_A_M_ = 17
+ ,rhs9_RUPPER_A_M_ = 18
+ ,rhs10_RUPPER_A_M_ = 19
+ ,rhs11_RUPPER_A_M_ = 20
+ ,rhs12_RUPPER_A_M_ = 21
+ ,rhs13_RUPPER_A_M_ = 22
+ ,R_RUPPER_N_Z_ = 572//start_of_rule_list + 6
+ ,rhs1_RUPPER_N_Z_ = 23
+ ,rhs2_RUPPER_N_Z_ = 24
+ ,rhs3_RUPPER_N_Z_ = 25
+ ,rhs4_RUPPER_N_Z_ = 26
+ ,rhs5_RUPPER_N_Z_ = 27
+ ,rhs6_RUPPER_N_Z_ = 28
+ ,rhs7_RUPPER_N_Z_ = 29
+ ,rhs8_RUPPER_N_Z_ = 30
+ ,rhs9_RUPPER_N_Z_ = 31
+ ,rhs10_RUPPER_N_Z_ = 32
+ ,rhs11_RUPPER_N_Z_ = 33
+ ,rhs12_RUPPER_N_Z_ = 34
+ ,rhs13_RUPPER_N_Z_ = 35
+ ,R_Rlower_a_m_ = 573//start_of_rule_list + 8
+ ,rhs1_Rlower_a_m_ = 36
+ ,rhs2_Rlower_a_m_ = 37
+ ,rhs3_Rlower_a_m_ = 38
+ ,rhs4_Rlower_a_m_ = 39
+ ,rhs5_Rlower_a_m_ = 40
+ ,rhs6_Rlower_a_m_ = 41
+ ,rhs7_Rlower_a_m_ = 42
+ ,rhs8_Rlower_a_m_ = 43
+ ,rhs9_Rlower_a_m_ = 44
+ ,rhs10_Rlower_a_m_ = 45
+ ,rhs11_Rlower_a_m_ = 46
+ ,rhs12_Rlower_a_m_ = 47
+ ,rhs13_Rlower_a_m_ = 48
+ ,R_Rlower_n_z_ = 574//start_of_rule_list + 10
+ ,rhs1_Rlower_n_z_ = 49
+ ,rhs2_Rlower_n_z_ = 50
+ ,rhs3_Rlower_n_z_ = 51
+ ,rhs4_Rlower_n_z_ = 52
+ ,rhs5_Rlower_n_z_ = 53
+ ,rhs6_Rlower_n_z_ = 54
+ ,rhs7_Rlower_n_z_ = 55
+ ,rhs8_Rlower_n_z_ = 56
+ ,rhs9_Rlower_n_z_ = 57
+ ,rhs10_Rlower_n_z_ = 58
+ ,rhs11_Rlower_n_z_ = 59
+ ,rhs12_Rlower_n_z_ = 60
+ ,rhs13_Rlower_n_z_ = 61
+ ,R_RNUMBERS_ = 575//start_of_rule_list + 12
+ ,rhs1_RNUMBERS_ = 62
+ ,rhs2_RNUMBERS_ = 63
+ ,rhs3_RNUMBERS_ = 64
+ ,rhs4_RNUMBERS_ = 65
+ ,rhs5_RNUMBERS_ = 66
+ ,rhs6_RNUMBERS_ = 67
+ ,rhs7_RNUMBERS_ = 68
+ ,rhs8_RNUMBERS_ = 69
+ ,rhs9_RNUMBERS_ = 70
+ ,rhs10_RNUMBERS_ = 71
+ };
+ //no of la sets = 1
+ //no of states = 4
+ Ct_def_delabort_tags();
+ ~Ct_def_delabort_tags();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[72];
+ };
+struct Rt_def_delabort_tags;
+struct Rminus_la;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Rt_def_delabort_tags:public yacco2::CAbs_lr1_sym {
+ Rt_def_delabort_tags(yacco2::Parser* P);
+ void op();
+
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rminus_la:public yacco2::CAbs_lr1_sym {
+ Rminus_la(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tags.lex b/web/yacco2/compiler/grammars/t_def_delabort_tags.lex
new file mode 100644
index 0000000000..c8860de689
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tags.lex
@@ -0,0 +1,91 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: t_def_delabort_tags.lex
+Dates: 23 Mar 2004
+Purpose: terminal-def delete / abort tags
+Output: #AD
+ #AB
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |t_def_delabort_tags| Thread.\fbreak
+Recognize delete / abort tags of a symbol definition.
+@/
+fsm
+(fsm-id "t_def_delabort_tags.lex"
+,fsm-filename t_def_delabort_tags
+,fsm-namespace NS_t_def_delabort_tags
+,fsm-class Ct_def_delabort_tags
+,fsm-version "1.0",fsm-date "23 mar 2004",fsm-debug "false"
+,fsm-comments "AB AD grammar symbol tags recognizer.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_t_def_delabort_tags
+ ***
+ parallel-la-boundary
+ eolr - Rminus_la
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rt_def_delabort_tags (
+ lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+ ***
+ op
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+ ***
+ }
+){
+ -> "A" "D" {
+ op
+ rtn_sym_ = new T_AD;
+ ***
+ }
+ -> "A" "B" {
+ op
+ rtn_sym_ = new T_AB;
+ ***
+ }
+}
+Rminus_la () {
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS
+}
+
+RUPPER_A_M (){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z (){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m (){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z (){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS (){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tagssym.cpp b/web/yacco2/compiler/grammars/t_def_delabort_tagssym.cpp
new file mode 100644
index 0000000000..a32c04bdd8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tagssym.cpp
@@ -0,0 +1,1046 @@
+/*
+ File: t_def_delabort_tagssym.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_def_delabort_tags.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_def_delabort_tags;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_t_def_delabort_tags::TH_t_def_delabort_tags(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_t_def_delabort_tags;
+ NS_t_def_delabort_tags::Ct_def_delabort_tags Ct_def_delabort_tags_;// parallel-parser's parse table
+#define ssPARSE_TABLE Ct_def_delabort_tags_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_t_def_delabort_tags::PROC_TH_t_def_delabort_tags(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_t_def_delabort_tags";
+ static bool one_time(false);
+ static NS_t_def_delabort_tags::Ct_def_delabort_tags* NS_t_def_delabort_tags_Ct_def_delabort_tags_(0);// parallel-parser's fsm table
+ static Parser* NS_t_def_delabort_tags_Ct_def_delabort_tags_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_t_def_delabort_tags_Ct_def_delabort_tags_ = new NS_t_def_delabort_tags::Ct_def_delabort_tags();// parallel-parser's fsm table
+ NS_t_def_delabort_tags_Ct_def_delabort_tags_parser = new Parser(*NS_t_def_delabort_tags_Ct_def_delabort_tags_,Caller_pp);
+ }
+ proc_parser = NS_t_def_delabort_tags_Ct_def_delabort_tags_parser;
+#include "wproc_pp_core.h"
+}
+void
+Ct_def_delabort_tags::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rt_def_delabort_tags_:{
+ Rt_def_delabort_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_def_delabort_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_def_delabort_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rt_def_delabort_tags_:{
+ Rt_def_delabort_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_def_delabort_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_def_delabort_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs1_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/t_def_delabort_tagstbl.cpp b/web/yacco2/compiler/grammars/t_def_delabort_tagstbl.cpp
new file mode 100644
index 0000000000..937214c5f9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/t_def_delabort_tagstbl.cpp
@@ -0,0 +1,643 @@
+/*
+ File: t_def_delabort_tagstbl.cpp
+ Date and Time: Fri Jan 30 18:55:25 2015
+*/
+#include "t_def_delabort_tags.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_t_def_delabort_tags;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_period
+// raw_slash
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_left_quote
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA1_Ct_def_delabort_tags[] ={
+67
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,223
+,8,252
+,9,1
+,12,120
+,13,1
+,16,248
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Ct_def_delabort_tags;
+extern yacco2::State S2_Ct_def_delabort_tags;
+extern yacco2::State S3_Ct_def_delabort_tags;
+extern yacco2::State S4_Ct_def_delabort_tags;
+struct S1std_Ct_def_delabort_tags{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Ct_def_delabort_tags S1st_Ct_def_delabort_tags = {
+ 2
+ ,
+ {// start of table
+ {73,(State*)&S2_Ct_def_delabort_tags} // shift sym: raw_A
+ ,{569,(State*)&S1_Ct_def_delabort_tags} // accept sym: Rt_def_delabort_tags
+ }// end of shift table
+};
+yacco2::State S1_Ct_def_delabort_tags = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ct_def_delabort_tags,0,0,0,0};
+struct S2std_Ct_def_delabort_tags{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Ct_def_delabort_tags S2st_Ct_def_delabort_tags = {
+ 2
+ ,
+ {// start of table
+ {74,(State*)&S3_Ct_def_delabort_tags} // shift sym: raw_B
+ ,{76,(State*)&S4_Ct_def_delabort_tags} // shift sym: raw_D
+ }// end of shift table
+};
+yacco2::State S2_Ct_def_delabort_tags = //State's vectored into symbol: "A"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Ct_def_delabort_tags,0,0,0,0};
+struct S3rtd_Ct_def_delabort_tags{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ct_def_delabort_tags S3rt_Ct_def_delabort_tags = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ct_def_delabort_tags,Ct_def_delabort_tags::rhs2_Rt_def_delabort_tags_}
+ }// end of reduce table
+};
+yacco2::State S3_Ct_def_delabort_tags = //State's vectored into symbol: "B"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ct_def_delabort_tags,0,0,0};
+struct S4rtd_Ct_def_delabort_tags{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ct_def_delabort_tags S4rt_Ct_def_delabort_tags = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ct_def_delabort_tags,Ct_def_delabort_tags::rhs1_Rt_def_delabort_tags_}
+ }// end of reduce table
+};
+yacco2::State S4_Ct_def_delabort_tags = //State's vectored into symbol: "D"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ct_def_delabort_tags,0,0,0};
diff --git a/web/yacco2/compiler/grammars/term_def_ph.cpp b/web/yacco2/compiler/grammars/term_def_ph.cpp
new file mode 100644
index 0000000000..82aa72ee2a
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_ph.cpp
@@ -0,0 +1,787 @@
+/*
+ File: term_def_ph.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "term_def_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_term_def_ph;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 16;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+}
+ Cterm_def_ph::
+ Cterm_def_ph()
+ :yacco2::CAbs_fsm
+ ("term_def_ph.lex"
+ ,"1.0"
+ ,"24 mar 2004"
+ ,false
+ ,"Parse a terminal symbol."
+ ,"Fri Jan 30 18:55:26 2015 "
+ ,S1_Cterm_def_ph){
+
+ term_def_ = 0;
+
+ }
+
+Cterm_def_ph::~Cterm_def_ph(){
+
+ for(int x = 0;x < 16;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cterm_def_ph::failed(){
+ return false;
+ }
+ void Cterm_def_ph::op(){
+ if(term_def_ != 0){
+ delete term_def_;
+ term_def_ = 0;
+ }
+ term_def_ = new T_terminal_def;
+ term_def_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+
+}
+int Cterm_def_ph::rhs_to_rules_mapping_[43] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,1 // subrule 8 for rule 2
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,4 // subrule 14 for rule 5
+ ,4 // subrule 15 for rule 5
+ ,4 // subrule 16 for rule 5
+ ,5 // subrule 17 for rule 6
+ ,6 // subrule 18 for rule 7
+ ,6 // subrule 19 for rule 7
+ ,7 // subrule 20 for rule 8
+ ,7 // subrule 21 for rule 8
+ ,7 // subrule 22 for rule 8
+ ,8 // subrule 23 for rule 9
+ ,8 // subrule 24 for rule 9
+ ,9 // subrule 25 for rule 10
+ ,9 // subrule 26 for rule 10
+ ,10 // subrule 27 for rule 11
+ ,10 // subrule 28 for rule 11
+ ,11 // subrule 29 for rule 12
+ ,11 // subrule 30 for rule 12
+ ,12 // subrule 31 for rule 13
+ ,12 // subrule 32 for rule 13
+ ,13 // subrule 33 for rule 14
+ ,13 // subrule 34 for rule 14
+ ,13 // subrule 35 for rule 14
+ ,13 // subrule 36 for rule 14
+ ,13 // subrule 37 for rule 14
+ ,13 // subrule 38 for rule 14
+ ,14 // subrule 39 for rule 15
+ ,14 // subrule 40 for rule 15
+ ,15 // subrule 41 for rule 16
+ ,15 // subrule 42 for rule 16
+};
+
+ void Cterm_def_ph::
+ add_sdc_to_directive(CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+
+Rterminal_def_phrase::Rterminal_def_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterminal_def_phrase",0,Cterm_def_ph::R_Rterminal_def_phrase_,P,false,false){
+}
+
+void Rterminal_def_phrase::sr1(){
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->term_def_);
+ // add to global symbol table
+ const char* skey = fsm->term_def_->t_name()->c_str();
+ T_sym_tbl_report_card report_card;
+ T_in_stbl* tin = new T_in_stbl(fsm->term_def_
+ ,rule_info__.parser__->start_token__,rule_info__.parser__);
+ STBL_T_ITEMS.push_back(tin);
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*tin,table_entry::defed,table_entry::terminal);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ tin->stbl_idx(report_card.pos_);
+ fsm->term_def_ = 0;
+
+}
+
+Rid::Rid(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rid",0,Cterm_def_ph::R_Rid_,P,false,false){
+}
+
+void Rid::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->c_string()->c_str();
+ fsm->term_def_->t_name(skey);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*skey);
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+
+}
+
+void Rid::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->identifier()->c_str();
+ fsm->term_def_->t_name(skey);
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rid::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_in_stbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+
+}
+
+void Rid::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rid::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rid::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rid::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+Rad_ab_tags::Rad_ab_tags(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rad_ab_tags",0,Cterm_def_ph::R_Rad_ab_tags_,P,false,false){
+}
+
+Rad_ab_tag::Rad_ab_tag(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rad_ab_tag",0,Cterm_def_ph::R_Rad_ab_tag_,P,false,false){
+}
+
+void Rad_ab_tag::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AD* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->term_def_->autodelete() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AD;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->term_def_->autodelete(true);
+
+}
+
+void Rad_ab_tag::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AB* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->term_def_->autoabort() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AB;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->term_def_->autoabort(true);
+
+}
+
+Rsym_cweb_k::Rsym_cweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_cweb_k",0,Cterm_def_ph::R_Rsym_cweb_k_,P,false,false){
+}
+
+void Rsym_cweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ fsm->term_def_->add_cweb_marker(cw->ast());
+
+}
+
+void Rsym_cweb_k::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_class_phrase::Rsym_class_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_class_phrase",0,Cterm_def_ph::R_Rsym_class_phrase_,P,false,false){
+}
+
+Rsym_class::Rsym_class(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_class",0,Cterm_def_ph::R_Rsym_class_,P,false,false){
+}
+
+void Rsym_class::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_class_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_class_id::Rsym_class_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_class_id",0,Cterm_def_ph::R_Rsym_class_id_,P,false,false){
+}
+
+void Rsym_class_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->term_def_->classsym(sf->p2__->identifier()->c_str());
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rsym_class_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_class_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_class_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_class_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rpotential_code_blk::Rpotential_code_blk(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpotential_code_blk",0,Cterm_def_ph::R_Rpotential_code_blk_,P,false,false){
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Cterm_def_ph::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Cterm_def_ph::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclosing_brace::Rclosing_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclosing_brace",0,Cterm_def_ph::R_Rclosing_brace_,P,false,false){
+}
+
+void Rclosing_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rdirectives::Rdirectives(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirectives",0,Cterm_def_ph::R_Rdirectives_,P,false,false){
+}
+
+void Rdirectives::sr1(){
+ struct SF{
+ Rdirective* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rsyntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(3);
+
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+void Rdirectives::sr2(){
+ struct SF{
+ Rdirectives* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rdirective* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rsyntax_code* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rlint* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(4);
+
+ Rdirective* dir = sf->p2__;
+ Rsyntax_code* sdc = sf->p3__;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+
+}
+
+Rdirective::Rdirective(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdirective",0,Cterm_def_ph::R_Rdirective_,P,false,false){
+}
+
+void Rdirective::op(){
+ sstrace_rulesss
+
+ if(directive_ == 0) return;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->term_def_->add_directive_to_map(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+void Rdirective::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = sf->p2__;
+
+}
+
+void Rdirective::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsyntax_code::Rsyntax_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsyntax_code",0,Cterm_def_ph::R_Rsyntax_code_,P,false,false){
+}
+
+void Rsyntax_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = sf->p2__;
+
+}
+
+void Rsyntax_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cterm_def_ph::R_Rlint_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/term_def_ph.fsc b/web/yacco2/compiler/grammars/term_def_ph.fsc
new file mode 100644
index 0000000000..2125087638
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_ph.fsc
@@ -0,0 +1,28 @@
+/*
+ File: term_def_ph.fsc
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+transitive y
+grammar-name "term_def_ph"
+name-space "NS_term_def_ph"
+thread-name "TH_term_def_ph"
+monolithic n
+file-name "term_def_ph.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 2
+ NS_c_string::TH_c_string
+ NS_identifier::TH_identifier
+end-list-of-transitive-threads
+list-of-used-threads 7
+ NS_c_string::TH_c_string
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sd::TH_o2_sdc
+ NS_t_def_delabort_tags::TH_t_def_delabort_tags
+ NS_terminal_def_symclass::TH_terminal_def_symclass
+end-list-of-used-threads
+fsm-comments
+"Parse a terminal symbol."
diff --git a/web/yacco2/compiler/grammars/term_def_ph.h b/web/yacco2/compiler/grammars/term_def_ph.h
new file mode 100644
index 0000000000..46a5ee439e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_ph.h
@@ -0,0 +1,253 @@
+/*
+ File: term_def_ph.h
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#ifndef __term_def_ph_h__
+#define __term_def_ph_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "t_def_delabort_tags.h"
+#include "terminal_def_symclass.h"
+#include "o2_sdc.h"
+#include "yacco2_stbl.h"
+#include "o2_externs.h"
+#include "cweb_or_c_k.h"
+
+
+extern yacco2::Thread_entry ITH_term_def_ph;
+
+extern yacco2::State S1_Cterm_def_ph;
+namespace NS_term_def_ph {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_term_def_ph(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_term_def_ph(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[16];
+};
+class Cterm_def_ph: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rterminal_def_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rterminal_def_phrase_ = 1
+ ,R_Rid_ = 570//start_of_rule_list + 2
+ ,rhs1_Rid_ = 2
+ ,rhs2_Rid_ = 3
+ ,rhs3_Rid_ = 4
+ ,rhs4_Rid_ = 5
+ ,rhs5_Rid_ = 6
+ ,rhs6_Rid_ = 7
+ ,rhs7_Rid_ = 8
+ ,R_Rad_ab_tags_ = 571//start_of_rule_list + 4
+ ,rhs1_Rad_ab_tags_ = 9
+ ,rhs2_Rad_ab_tags_ = 10
+ ,rhs3_Rad_ab_tags_ = 11
+ ,R_Rad_ab_tag_ = 572//start_of_rule_list + 6
+ ,rhs1_Rad_ab_tag_ = 12
+ ,rhs2_Rad_ab_tag_ = 13
+ ,R_Rsym_cweb_k_ = 573//start_of_rule_list + 8
+ ,rhs1_Rsym_cweb_k_ = 14
+ ,rhs2_Rsym_cweb_k_ = 15
+ ,rhs3_Rsym_cweb_k_ = 16
+ ,R_Rsym_class_phrase_ = 574//start_of_rule_list + 10
+ ,rhs1_Rsym_class_phrase_ = 17
+ ,R_Rsym_class_ = 575//start_of_rule_list + 12
+ ,rhs1_Rsym_class_ = 18
+ ,rhs2_Rsym_class_ = 19
+ ,R_Rsym_class_id_ = 576//start_of_rule_list + 14
+ ,rhs1_Rsym_class_id_ = 20
+ ,rhs2_Rsym_class_id_ = 21
+ ,rhs3_Rsym_class_id_ = 22
+ ,R_Rpotential_code_blk_ = 577//start_of_rule_list + 16
+ ,rhs1_Rpotential_code_blk_ = 23
+ ,rhs2_Rpotential_code_blk_ = 24
+ ,R_Ropen_par_ = 578//start_of_rule_list + 18
+ ,rhs1_Ropen_par_ = 25
+ ,rhs2_Ropen_par_ = 26
+ ,R_Rclose_par_ = 579//start_of_rule_list + 20
+ ,rhs1_Rclose_par_ = 27
+ ,rhs2_Rclose_par_ = 28
+ ,R_Rclosing_brace_ = 580//start_of_rule_list + 22
+ ,rhs1_Rclosing_brace_ = 29
+ ,rhs2_Rclosing_brace_ = 30
+ ,R_Rdirectives_ = 581//start_of_rule_list + 24
+ ,rhs1_Rdirectives_ = 31
+ ,rhs2_Rdirectives_ = 32
+ ,R_Rdirective_ = 582//start_of_rule_list + 26
+ ,rhs1_Rdirective_ = 33
+ ,rhs2_Rdirective_ = 34
+ ,rhs3_Rdirective_ = 35
+ ,rhs4_Rdirective_ = 36
+ ,rhs5_Rdirective_ = 37
+ ,rhs6_Rdirective_ = 38
+ ,R_Rsyntax_code_ = 583//start_of_rule_list + 28
+ ,rhs1_Rsyntax_code_ = 39
+ ,rhs2_Rsyntax_code_ = 40
+ ,R_Rlint_ = 584//start_of_rule_list + 30
+ ,rhs1_Rlint_ = 41
+ ,rhs2_Rlint_ = 42
+ };
+ //no of la sets = 10
+ //no of states = 75
+ Cterm_def_ph();
+ ~Cterm_def_ph();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[43];
+
+ public:
+ void add_sdc_to_directive(CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_terminal_def* term_def_;
+
+ };
+struct Rterminal_def_phrase;
+struct Rid;
+struct Rad_ab_tags;
+struct Rad_ab_tag;
+struct Rsym_cweb_k;
+struct Rsym_class_phrase;
+struct Rsym_class;
+struct Rsym_class_id;
+struct Rpotential_code_blk;
+struct Ropen_par;
+struct Rclose_par;
+struct Rclosing_brace;
+struct Rdirectives;
+struct Rdirective;
+struct Rsyntax_code;
+struct Rlint;
+struct Rterminal_def_phrase:public yacco2::CAbs_lr1_sym {
+ Rterminal_def_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rid:public yacco2::CAbs_lr1_sym {
+ Rid(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+struct Rad_ab_tags:public yacco2::CAbs_lr1_sym {
+ Rad_ab_tags(yacco2::Parser* P);
+ public:
+};
+
+struct Rad_ab_tag:public yacco2::CAbs_lr1_sym {
+ Rad_ab_tag(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rsym_cweb_k:public yacco2::CAbs_lr1_sym {
+ Rsym_cweb_k(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_class_phrase:public yacco2::CAbs_lr1_sym {
+ Rsym_class_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_class:public yacco2::CAbs_lr1_sym {
+ Rsym_class(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rsym_class_id:public yacco2::CAbs_lr1_sym {
+ Rsym_class_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rpotential_code_blk:public yacco2::CAbs_lr1_sym {
+ Rpotential_code_blk(yacco2::Parser* P);
+ public:
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclosing_brace:public yacco2::CAbs_lr1_sym {
+ Rclosing_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rdirectives:public yacco2::CAbs_lr1_sym {
+ Rdirectives(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rdirective:public yacco2::CAbs_lr1_sym {
+ Rdirective(yacco2::Parser* P);
+ void op();
+
+ CAbs_lr1_sym* directive_;
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+};
+
+struct Rsyntax_code:public yacco2::CAbs_lr1_sym {
+ Rsyntax_code(yacco2::Parser* P);
+
+ T_syntax_code* syntax_code_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/term_def_ph.lex b/web/yacco2/compiler/grammars/term_def_ph.lex
new file mode 100644
index 0000000000..847fc739e2
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_ph.lex
@@ -0,0 +1,455 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: term_def_ph.lex
+Dates: 24 Mar 2004
+Purpose: parse terminal-def phrase
+ Verifies if the symbol being defined is duplicate
+ within yacco2's symbol table.
+ Adds symbol to global symbol table.
+Output: Err_no_syntax_code_present
+ Err_comment_overrun
+ Err_no_identifier_present
+ Err_duplicate_directive
+ Err_no_close_brace
+ Err_no_directive_present
+ Err_already_defined_AB
+ Err_already_defined_AD
+ Err_dup_entry_in_sym_table
+ Err_no_terminal_key_present
+ Err_bad_directive
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |term_def_ph| grammar.\fbreak
+parse terminal-def phrase.
+@/
+fsm
+(fsm-id "term_def_ph.lex"
+,fsm-filename term_def_ph
+,fsm-namespace NS_term_def_ph
+,fsm-class Cterm_def_ph{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "identifier.h"
+#include "c_string.h"
+#include "t_def_delabort_tags.h"
+#include "terminal_def_symclass.h"
+#include "o2_sdc.h"
+#include "yacco2_stbl.h"
+#include "o2_externs.h"
+#include "cweb_or_c_k.h"
+
+ ***
+ user-declaration
+ public:
+ void add_sdc_to_directive(CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_terminal_def* term_def_;
+ ***
+ user-implementation
+ void Cterm_def_ph::
+ add_sdc_to_directive(CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id__;
+ switch (eid){
+ case T_Enum::T_T_user_declaration_: {
+ T_user_declaration* k = (T_user_declaration*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_constructor_: {
+ T_constructor* k = (T_constructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_destructor_: {
+ T_destructor* k = (T_destructor*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_op_: {
+ T_op* k = (T_op*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new Err_improper_directive;
+ sym->set_rc(*Dir,__FILE__,__LINE__);
+ RSVP_FSM(sym);
+ parser__->set_stop_parse(true);
+ }
+ }
+ }
+ ***
+ op
+ if(term_def_ != 0){
+ delete term_def_;
+ term_def_ = 0;
+ }
+ term_def_ = new T_terminal_def;
+ term_def_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ ***
+ constructor
+ term_def_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "false"
+,fsm-comments "Parse a terminal symbol.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_term_def_ph
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rterminal_def_phrase (){
+ -> Rid Rlint Rad_ab_tags
+ Rlint
+ Rsym_cweb_k
+ Rlint
+ Ropen_par Rlint
+ Rsym_class_phrase Rlint
+ Rpotential_code_blk Rlint
+ Rclose_par Rlint {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->term_def_);
+ // add to global symbol table
+ const char* skey = fsm->term_def_->t_name()->c_str();
+ T_sym_tbl_report_card report_card;
+ T_in_stbl* tin = new T_in_stbl(fsm->term_def_
+ ,rule_info__.parser__->start_token__,rule_info__.parser__);
+ STBL_T_ITEMS.push_back(tin);
+ using namespace yacco2_stbl;
+ add_sym_to_stbl(report_card,*skey,*tin,table_entry::defed,table_entry::terminal);
+ if(report_card.status_ != T_sym_tbl_report_card::okay){
+ report_card.err_entry_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*report_card.err_entry_);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ tin->stbl_idx(report_card.pos_);
+ fsm->term_def_ = 0;
+ ***
+ }
+}
+
+Rid (){
+ -> ||| "c-string" NS_c_string::TH_c_string {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->c_string()->c_str();
+ fsm->term_def_->t_name(skey);
+ sf->p2__->set_auto_delete(true);
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_stbl;
+ find_sym_in_stbl(report_card,*skey);
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ***
+ }
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ const char* skey = sf->p2__->identifier()->c_str();
+ fsm->term_def_->t_name(skey);
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| "T-in-stbl" NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_sym_table;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+}
+
+Rad_ab_tags (){
+ -> Rad_ab_tag Rlint
+ -> Rad_ab_tags Rad_ab_tag Rlint
+ ->
+}
+
+Rad_ab_tag (){
+ -> ||| "#AD" NS_t_def_delabort_tags::TH_t_def_delabort_tags {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->term_def_->autodelete() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AD;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->term_def_->autodelete(true);
+ ***
+ }
+ -> ||| "#AB" NULL {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ if(fsm->term_def_->autoabort() == true){
+ CAbs_lr1_sym* sym = new Err_already_defined_AB;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ fsm->term_def_->autoabort(true);
+ ***
+ }
+}
+
+Rsym_cweb_k (){
+ ->
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+
+ AST* cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+ cw->set_rc(*k,__FILE__,__LINE__);
+ AST::set_content(*cweb_t_,*cw);
+ fsm->term_def_->add_cweb_marker(cw->ast());
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_class_phrase (){
+ -> Rsym_class Rlint Rsym_class_id
+}
+
+Rsym_class (){
+ -> ||| "#sym-class" NS_terminal_def_symclass::TH_terminal_def_symclass
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_class_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_class_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->term_def_->classsym(sf->p2__->identifier()->c_str());
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_class_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_class_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rpotential_code_blk (){
+ ->
+ -> "{" Rlint Rdirectives Rlint Rclosing_brace Rlint
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rclosing_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rdirectives (){
+ -> Rdirective Rsyntax_code Rlint {
+ op
+ Rdirective* dir = sf->p1__;
+ Rsyntax_code* sdc = sf->p2__;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+ -> Rdirectives Rdirective Rsyntax_code Rlint {
+ op
+ Rdirective* dir = sf->p2__;
+ Rsyntax_code* sdc = sf->p3__;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ fsm->add_sdc_to_directive(dir->directive_,sdc->syntax_code_);
+ ***
+ }
+}
+
+Rdirective (
+lhs {
+ user-declaration
+ CAbs_lr1_sym* directive_;
+ ***
+ op
+ if(directive_ == 0) return;
+ Cterm_def_ph* fsm = (Cterm_def_ph*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* result =
+ fsm->term_def_->add_directive_to_map(directive_,rule_info__.parser__);
+ if(result == 0) return;// ok added
+ directive_->set_auto_delete(true);//dup: delete when popped from stack
+ RSVP(result);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+){
+ -> ||| "#user-declaration" NS_identifier::TH_identifier {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#user-implementation" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#constructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#destructor" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| "#op" NULL {
+ op
+ directive_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ directive_ = 0;
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_bad_directive;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsyntax_code (
+lhs {
+ user-declaration
+ T_syntax_code* syntax_code_;
+ ***
+ }
+){
+ -> ||| "syntax-code" NS_o2_sd::TH_o2_sdc {
+ op
+ syntax_code_ = sf->p2__;
+ ***
+ }
+ -> ||| |?| NULL { // catcher in the Rye? These are errors
+ op
+ syntax_code_ = 0;
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/term_def_phsym.cpp b/web/yacco2/compiler/grammars/term_def_phsym.cpp
new file mode 100644
index 0000000000..e1438c601e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_phsym.cpp
@@ -0,0 +1,671 @@
+/*
+ File: term_def_phsym.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "term_def_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_term_def_ph;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_term_def_ph::TH_term_def_ph(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_term_def_ph;
+ NS_term_def_ph::Cterm_def_ph Cterm_def_ph_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cterm_def_ph_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_term_def_ph::PROC_TH_term_def_ph(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_term_def_ph";
+ static bool one_time(false);
+ static NS_term_def_ph::Cterm_def_ph* NS_term_def_ph_Cterm_def_ph_(0);// parallel-parser's fsm table
+ static Parser* NS_term_def_ph_Cterm_def_ph_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_term_def_ph_Cterm_def_ph_ = new NS_term_def_ph::Cterm_def_ph();// parallel-parser's fsm table
+ NS_term_def_ph_Cterm_def_ph_parser = new Parser(*NS_term_def_ph_Cterm_def_ph_,Caller_pp);
+ }
+ proc_parser = NS_term_def_ph_Cterm_def_ph_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cterm_def_ph::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rterminal_def_phrase_:{
+ Rterminal_def_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterminal_def_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterminal_def_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 14;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rid_:{
+ Rid* sym;
+ if(re->rule_ == 0){
+ sym = new Rid(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rid*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs1_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rad_ab_tags_:{
+ Rad_ab_tags* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tags(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tags*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rad_ab_tag_:{
+ Rad_ab_tag* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tag(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tag*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rad_ab_tag_:{
+ Rad_ab_tag* sym;
+ if(re->rule_ == 0){
+ sym = new Rad_ab_tag(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rad_ab_tag*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rsym_cweb_k_:{
+ Rsym_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rsym_cweb_k_:{
+ Rsym_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_cweb_k_:{
+ Rsym_cweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_cweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_cweb_k*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_class_phrase_:{
+ Rsym_class_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rsym_class_:{
+ Rsym_class* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsym_class_:{
+ Rsym_class* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rsym_class_id_:{
+ Rsym_class_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_class_id_:{
+ Rsym_class_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_class_id_:{
+ Rsym_class_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_class_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_class_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rpotential_code_blk_:{
+ Rpotential_code_blk* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_code_blk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_code_blk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rpotential_code_blk_:{
+ Rpotential_code_blk* sym;
+ if(re->rule_ == 0){
+ sym = new Rpotential_code_blk(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpotential_code_blk*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclosing_brace_:{
+ Rclosing_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclosing_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclosing_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclosing_brace_:{
+ Rclosing_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclosing_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclosing_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rdirectives_:{
+ Rdirectives* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirectives(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirectives*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rdirective_:{
+ Rdirective* sym;
+ if(re->rule_ == 0){
+ sym = new Rdirective(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdirective*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs1_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsyntax_code_:{
+ Rsyntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rsyntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsyntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/term_def_phtbl.cpp b/web/yacco2/compiler/grammars/term_def_phtbl.cpp
new file mode 100644
index 0000000000..f58064d395
--- /dev/null
+++ b/web/yacco2/compiler/grammars/term_def_phtbl.cpp
@@ -0,0 +1,1636 @@
+/*
+ File: term_def_phtbl.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "term_def_ph.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_term_def_ph;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_bracket
+yacco2::UCHAR LA1_Cterm_def_ph[] ={
+2
+,0,17
+,6,1
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cterm_def_ph[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// raw_open_bracket
+yacco2::UCHAR LA3_Cterm_def_ph[] ={
+2
+,0,1
+,6,1
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA4_Cterm_def_ph[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+// raw_open_brace
+yacco2::UCHAR LA5_Cterm_def_ph[] ={
+3
+,0,17
+,6,2
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA6_Cterm_def_ph[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA7_Cterm_def_ph[] ={
+2
+,0,1
+,6,2
+};
+// LR1_reduce_operator
+yacco2::UCHAR LA8_Cterm_def_ph[] ={
+1
+,0,16
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA9_Cterm_def_ph[] ={
+2
+,0,1
+,16,32
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA10_Cterm_def_ph[] ={
+2
+,0,17
+,16,32
+};
+extern yacco2::State S1_Cterm_def_ph;
+extern yacco2::State S2_Cterm_def_ph;
+struct S2ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S2ttd_Cterm_def_ph S2tt_Cterm_def_ph = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S3_Cterm_def_ph;
+extern yacco2::State S4_Cterm_def_ph;
+extern yacco2::State S5_Cterm_def_ph;
+extern yacco2::State S6_Cterm_def_ph;
+extern yacco2::State S7_Cterm_def_ph;
+extern yacco2::State S8_Cterm_def_ph;
+extern yacco2::State S9_Cterm_def_ph;
+extern yacco2::State S10_Cterm_def_ph;
+extern yacco2::State S11_Cterm_def_ph;
+extern yacco2::State S12_Cterm_def_ph;
+extern yacco2::State S13_Cterm_def_ph;
+struct S13ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S13ttd_Cterm_def_ph S13tt_Cterm_def_ph = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_t_def_delabort_tags
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S14_Cterm_def_ph;
+extern yacco2::State S15_Cterm_def_ph;
+extern yacco2::State S16_Cterm_def_ph;
+extern yacco2::State S17_Cterm_def_ph;
+extern yacco2::State S18_Cterm_def_ph;
+extern yacco2::State S19_Cterm_def_ph;
+extern yacco2::State S20_Cterm_def_ph;
+extern yacco2::State S21_Cterm_def_ph;
+extern yacco2::State S22_Cterm_def_ph;
+extern yacco2::State S23_Cterm_def_ph;
+extern yacco2::State S24_Cterm_def_ph;
+extern yacco2::State S25_Cterm_def_ph;
+extern yacco2::State S26_Cterm_def_ph;
+extern yacco2::State S27_Cterm_def_ph;
+extern yacco2::State S28_Cterm_def_ph;
+extern yacco2::State S29_Cterm_def_ph;
+struct S29ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S29ttd_Cterm_def_ph S29tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S30_Cterm_def_ph;
+extern yacco2::State S31_Cterm_def_ph;
+struct S31ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S31ttd_Cterm_def_ph S31tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_t_def_delabort_tags
+};
+extern yacco2::State S32_Cterm_def_ph;
+extern yacco2::State S33_Cterm_def_ph;
+extern yacco2::State S34_Cterm_def_ph;
+extern yacco2::State S35_Cterm_def_ph;
+extern yacco2::State S36_Cterm_def_ph;
+struct S36ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S36ttd_Cterm_def_ph S36tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S37_Cterm_def_ph;
+extern yacco2::State S38_Cterm_def_ph;
+extern yacco2::State S39_Cterm_def_ph;
+extern yacco2::State S40_Cterm_def_ph;
+extern yacco2::State S41_Cterm_def_ph;
+extern yacco2::State S42_Cterm_def_ph;
+struct S42ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S42ttd_Cterm_def_ph S42tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_terminal_def_symclass
+};
+extern yacco2::State S43_Cterm_def_ph;
+extern yacco2::State S44_Cterm_def_ph;
+extern yacco2::State S45_Cterm_def_ph;
+extern yacco2::State S46_Cterm_def_ph;
+extern yacco2::State S47_Cterm_def_ph;
+struct S47ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S47ttd_Cterm_def_ph S47tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S48_Cterm_def_ph;
+extern yacco2::State S49_Cterm_def_ph;
+extern yacco2::State S50_Cterm_def_ph;
+extern yacco2::State S51_Cterm_def_ph;
+extern yacco2::State S52_Cterm_def_ph;
+extern yacco2::State S53_Cterm_def_ph;
+extern yacco2::State S54_Cterm_def_ph;
+extern yacco2::State S55_Cterm_def_ph;
+struct S55ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S55ttd_Cterm_def_ph S55tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S56_Cterm_def_ph;
+extern yacco2::State S57_Cterm_def_ph;
+extern yacco2::State S58_Cterm_def_ph;
+extern yacco2::State S59_Cterm_def_ph;
+extern yacco2::State S60_Cterm_def_ph;
+extern yacco2::State S61_Cterm_def_ph;
+extern yacco2::State S62_Cterm_def_ph;
+extern yacco2::State S63_Cterm_def_ph;
+extern yacco2::State S64_Cterm_def_ph;
+extern yacco2::State S65_Cterm_def_ph;
+struct S65ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S65ttd_Cterm_def_ph S65tt_Cterm_def_ph = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S66_Cterm_def_ph;
+extern yacco2::State S67_Cterm_def_ph;
+extern yacco2::State S68_Cterm_def_ph;
+extern yacco2::State S69_Cterm_def_ph;
+extern yacco2::State S70_Cterm_def_ph;
+extern yacco2::State S71_Cterm_def_ph;
+extern yacco2::State S72_Cterm_def_ph;
+extern yacco2::State S73_Cterm_def_ph;
+extern yacco2::State S74_Cterm_def_ph;
+extern yacco2::State S75_Cterm_def_ph;
+struct S75ttd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S75ttd_Cterm_def_ph S75tt_Cterm_def_ph = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+struct S1std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cterm_def_ph S1st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cterm_def_ph} // accept sym: Rterminal_def_phrase
+ ,{570,(State*)&S10_Cterm_def_ph} // shift sym: Rid
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cterm_def_ph = {3,(State*)&S2_Cterm_def_ph};
+yacco2::State S1_Cterm_def_ph = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S1st_Cterm_def_ph,0,(State_s_thread_tbl*)&S2tt_Cterm_def_ph,0,0};
+struct S2std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S2std_Cterm_def_ph S2st_Cterm_def_ph = {
+ 7
+ ,
+ {// start of table
+ {0,(State*)&S3_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{275,(State*)&S4_Cterm_def_ph} // shift sym: T_c_string
+ ,{279,(State*)&S5_Cterm_def_ph} // shift sym: T_identifier
+ ,{319,(State*)&S6_Cterm_def_ph} // shift sym: T_terminals_refs
+ ,{320,(State*)&S7_Cterm_def_ph} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S8_Cterm_def_ph} // shift sym: T_lrk_sufx
+ ,{344,(State*)&S9_Cterm_def_ph} // shift sym: T_in_stbl
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Cterm_def_ph = {0,(State*)&S3_Cterm_def_ph};
+yacco2::State S2_Cterm_def_ph = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cterm_def_ph,0,0,0,(Shift_entry*)&S2qse_Cterm_def_ph
+};
+struct S3rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cterm_def_ph S3rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs4_Rid_}
+ }// end of reduce table
+};
+yacco2::State S3_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cterm_def_ph,0,0,0};
+struct S4rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cterm_def_ph S4rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs1_Rid_}
+ }// end of reduce table
+};
+yacco2::State S4_Cterm_def_ph = //State's vectored into symbol: "c-string"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cterm_def_ph,0,0,0};
+struct S5rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cterm_def_ph S5rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rid_}
+ }// end of reduce table
+};
+yacco2::State S5_Cterm_def_ph = //State's vectored into symbol: "identifier"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cterm_def_ph,0,0,0};
+struct S6rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cterm_def_ph S6rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs7_Rid_}
+ }// end of reduce table
+};
+yacco2::State S6_Cterm_def_ph = //State's vectored into symbol: "#terminals-refs"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cterm_def_ph,0,0,0};
+struct S7rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cterm_def_ph S7rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs6_Rid_}
+ }// end of reduce table
+};
+yacco2::State S7_Cterm_def_ph = //State's vectored into symbol: "#terminals-sufx"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cterm_def_ph,0,0,0};
+struct S8rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cterm_def_ph S8rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs5_Rid_}
+ }// end of reduce table
+};
+yacco2::State S8_Cterm_def_ph = //State's vectored into symbol: "#lrk-sufx"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cterm_def_ph,0,0,0};
+struct S9rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cterm_def_ph S9rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs3_Rid_}
+ }// end of reduce table
+};
+yacco2::State S9_Cterm_def_ph = //State's vectored into symbol: "T-in-stbl"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cterm_def_ph,0,0,0};
+struct S10std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_Cterm_def_ph S10st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S11_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S10rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cterm_def_ph S10rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S10_Cterm_def_ph = //State's vectored into symbol: "Rid"
+{10
+,(Shift_entry*)&S10pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S10st_Cterm_def_ph,(Reduce_tbl*)&S10rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S11std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S11std_Cterm_def_ph S11st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S31_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{571,(State*)&S12_Cterm_def_ph} // shift sym: Rad_ab_tags
+ ,{572,(State*)&S34_Cterm_def_ph} // shift sym: Rad_ab_tag
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Cterm_def_ph = {3,(State*)&S31_Cterm_def_ph};
+struct S11rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cterm_def_ph S11rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs3_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S11_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{11
+,(Shift_entry*)&S11pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S11st_Cterm_def_ph,(Reduce_tbl*)&S11rt_Cterm_def_ph,(State_s_thread_tbl*)&S31tt_Cterm_def_ph,0,0};
+struct S12std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S12std_Cterm_def_ph S12st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S13_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S32_Cterm_def_ph} // shift sym: Rad_ab_tag
+ ,{584,(State*)&S17_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S12pse_Cterm_def_ph = {3,(State*)&S13_Cterm_def_ph};
+struct S12rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cterm_def_ph S12rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S12_Cterm_def_ph = //State's vectored into symbol: "Rad_ab_tags"
+{12
+,(Shift_entry*)&S12pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S12st_Cterm_def_ph,(Reduce_tbl*)&S12rt_Cterm_def_ph,(State_s_thread_tbl*)&S13tt_Cterm_def_ph,0,0};
+struct S13std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Cterm_def_ph S13st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {285,(State*)&S14_Cterm_def_ph} // shift sym: T_AD
+ ,{286,(State*)&S15_Cterm_def_ph} // shift sym: T_AB
+ ,{375,(State*)&S16_Cterm_def_ph} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S13_Cterm_def_ph = //State's vectored into symbol: "|||"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cterm_def_ph,0,0,0,0};
+struct S14rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cterm_def_ph S14rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs1_Rad_ab_tag_}
+ }// end of reduce table
+};
+yacco2::State S14_Cterm_def_ph = //State's vectored into symbol: "#AD"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cterm_def_ph,0,0,0};
+struct S15rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cterm_def_ph S15rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rad_ab_tag_}
+ }// end of reduce table
+};
+yacco2::State S15_Cterm_def_ph = //State's vectored into symbol: "#AB"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cterm_def_ph,0,0,0};
+struct S16rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cterm_def_ph S16rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S16_Cterm_def_ph = //State's vectored into symbol: "lint"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cterm_def_ph,0,0,0};
+struct S17std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S17std_Cterm_def_ph S17st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S36_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S18_Cterm_def_ph} // shift sym: Rsym_cweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S17pse_Cterm_def_ph = {3,(State*)&S36_Cterm_def_ph};
+struct S17rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cterm_def_ph S17rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs1_Rsym_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S17_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{17
+,(Shift_entry*)&S17pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S17st_Cterm_def_ph,(Reduce_tbl*)&S17rt_Cterm_def_ph,(State_s_thread_tbl*)&S36tt_Cterm_def_ph,0,0};
+struct S18std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S18std_Cterm_def_ph S18st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S19_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S18pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S18rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cterm_def_ph S18rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S18_Cterm_def_ph = //State's vectored into symbol: "Rsym_cweb_k"
+{18
+,(Shift_entry*)&S18pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S18st_Cterm_def_ph,(Reduce_tbl*)&S18rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S19std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S19std_Cterm_def_ph S19st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S39_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S40_Cterm_def_ph} // shift sym: raw_open_bracket
+ ,{578,(State*)&S20_Cterm_def_ph} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S19qse_Cterm_def_ph = {0,(State*)&S39_Cterm_def_ph};
+yacco2::State S19_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cterm_def_ph,0,0,0,(Shift_entry*)&S19qse_Cterm_def_ph
+};
+struct S20std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S20std_Cterm_def_ph S20st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S21_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S20pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S20rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cterm_def_ph S20rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S20_Cterm_def_ph = //State's vectored into symbol: "Ropen_par"
+{20
+,(Shift_entry*)&S20pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S20st_Cterm_def_ph,(Reduce_tbl*)&S20rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S21std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S21std_Cterm_def_ph S21st_Cterm_def_ph = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S41_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S42_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{574,(State*)&S22_Cterm_def_ph} // shift sym: Rsym_class_phrase
+ ,{575,(State*)&S44_Cterm_def_ph} // shift sym: Rsym_class
+ }// end of shift table
+};
+yacco2::Shift_entry S21pse_Cterm_def_ph = {3,(State*)&S42_Cterm_def_ph};
+yacco2::Shift_entry S21qse_Cterm_def_ph = {0,(State*)&S41_Cterm_def_ph};
+yacco2::State S21_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{21
+,(Shift_entry*)&S21pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S21st_Cterm_def_ph,0,(State_s_thread_tbl*)&S42tt_Cterm_def_ph,0,(Shift_entry*)&S21qse_Cterm_def_ph
+};
+struct S22std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S22std_Cterm_def_ph S22st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S23_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S22pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S22rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cterm_def_ph S22rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S22_Cterm_def_ph = //State's vectored into symbol: "Rsym_class_phrase"
+{22
+,(Shift_entry*)&S22pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S22st_Cterm_def_ph,(Reduce_tbl*)&S22rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S23std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S23std_Cterm_def_ph S23st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {131,(State*)&S51_Cterm_def_ph} // shift sym: raw_open_brace
+ ,{577,(State*)&S24_Cterm_def_ph} // shift sym: Rpotential_code_blk
+ }// end of shift table
+};
+struct S23rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cterm_def_ph S23rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterm_def_ph,Cterm_def_ph::rhs1_Rpotential_code_blk_}
+ }// end of reduce table
+};
+yacco2::State S23_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Cterm_def_ph,(Reduce_tbl*)&S23rt_Cterm_def_ph,0,0,0};
+struct S24std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Cterm_def_ph S24st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S25_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S24rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cterm_def_ph S24rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Cterm_def_ph = //State's vectored into symbol: "Rpotential_code_blk"
+{24
+,(Shift_entry*)&S24pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S24st_Cterm_def_ph,(Reduce_tbl*)&S24rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S25std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S25std_Cterm_def_ph S25st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S26_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S27_Cterm_def_ph} // shift sym: raw_close_bracket
+ ,{579,(State*)&S28_Cterm_def_ph} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S25qse_Cterm_def_ph = {0,(State*)&S26_Cterm_def_ph};
+yacco2::State S25_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cterm_def_ph,0,0,0,(Shift_entry*)&S25qse_Cterm_def_ph
+};
+struct S26rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cterm_def_ph S26rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S26_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Cterm_def_ph,0,0,0};
+struct S27rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Cterm_def_ph S27rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S27_Cterm_def_ph = //State's vectored into symbol: ")"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Cterm_def_ph,0,0,0};
+struct S28std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Cterm_def_ph S28st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S30_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S28rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cterm_def_ph S28rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S28_Cterm_def_ph = //State's vectored into symbol: "Rclose_par"
+{28
+,(Shift_entry*)&S28pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S28st_Cterm_def_ph,(Reduce_tbl*)&S28rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S29std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S29std_Cterm_def_ph S29st_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S16_Cterm_def_ph} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S29_Cterm_def_ph = //State's vectored into symbol: "|||"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cterm_def_ph,0,0,0,0};
+struct S30rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cterm_def_ph S30rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterm_def_ph,Cterm_def_ph::rhs1_Rterminal_def_phrase_}
+ }// end of reduce table
+};
+yacco2::State S30_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cterm_def_ph,0,0,0};
+struct S31std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S31std_Cterm_def_ph S31st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {285,(State*)&S14_Cterm_def_ph} // shift sym: T_AD
+ ,{286,(State*)&S15_Cterm_def_ph} // shift sym: T_AB
+ }// end of shift table
+};
+yacco2::State S31_Cterm_def_ph = //State's vectored into symbol: "|||"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Cterm_def_ph,0,0,0,0};
+struct S32std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S32std_Cterm_def_ph S32st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S33_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S32pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S32rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cterm_def_ph S32rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S32_Cterm_def_ph = //State's vectored into symbol: "Rad_ab_tag"
+{32
+,(Shift_entry*)&S32pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S32st_Cterm_def_ph,(Reduce_tbl*)&S32rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S33rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cterm_def_ph S33rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S33_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cterm_def_ph,0,0,0};
+struct S34std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S34std_Cterm_def_ph S34st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S35_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S34pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S34rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cterm_def_ph S34rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S34_Cterm_def_ph = //State's vectored into symbol: "Rad_ab_tag"
+{34
+,(Shift_entry*)&S34pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S34st_Cterm_def_ph,(Reduce_tbl*)&S34rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S35rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cterm_def_ph S35rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs1_Rad_ab_tags_}
+ }// end of reduce table
+};
+yacco2::State S35_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Cterm_def_ph,0,0,0};
+struct S36std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S36std_Cterm_def_ph S36st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S37_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{372,(State*)&S38_Cterm_def_ph} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S36qse_Cterm_def_ph = {0,(State*)&S37_Cterm_def_ph};
+yacco2::State S36_Cterm_def_ph = //State's vectored into symbol: "|||"
+{36
+,0,0,0,0,(Shift_tbl*)&S36st_Cterm_def_ph,0,0,0,(Shift_entry*)&S36qse_Cterm_def_ph
+};
+struct S37rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cterm_def_ph S37rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs3_Rsym_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S37_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cterm_def_ph,0,0,0};
+struct S38rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cterm_def_ph S38rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterm_def_ph,Cterm_def_ph::rhs2_Rsym_cweb_k_}
+ }// end of reduce table
+};
+yacco2::State S38_Cterm_def_ph = //State's vectored into symbol: "cweb-comment"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cterm_def_ph,0,0,0};
+struct S39rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cterm_def_ph S39rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S39_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cterm_def_ph,0,0,0};
+struct S40rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cterm_def_ph S40rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S40_Cterm_def_ph = //State's vectored into symbol: "("
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cterm_def_ph,0,0,0};
+struct S41rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cterm_def_ph S41rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs2_Rsym_class_}
+ }// end of reduce table
+};
+yacco2::State S41_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cterm_def_ph,0,0,0};
+struct S42std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S42std_Cterm_def_ph S42st_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {305,(State*)&S43_Cterm_def_ph} // shift sym: T_sym_class
+ }// end of shift table
+};
+yacco2::State S42_Cterm_def_ph = //State's vectored into symbol: "|||"
+{42
+,0,0,0,0,(Shift_tbl*)&S42st_Cterm_def_ph,0,0,0,0};
+struct S43rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cterm_def_ph S43rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs1_Rsym_class_}
+ }// end of reduce table
+};
+yacco2::State S43_Cterm_def_ph = //State's vectored into symbol: "#sym-class"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cterm_def_ph,0,0,0};
+struct S44std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S44std_Cterm_def_ph S44st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S45_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S44pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S44rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cterm_def_ph S44rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S44_Cterm_def_ph = //State's vectored into symbol: "Rsym_class"
+{44
+,(Shift_entry*)&S44pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S44st_Cterm_def_ph,(Reduce_tbl*)&S44rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S45std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S45std_Cterm_def_ph S45st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S46_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S47_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{576,(State*)&S50_Cterm_def_ph} // shift sym: Rsym_class_id
+ }// end of shift table
+};
+yacco2::Shift_entry S45pse_Cterm_def_ph = {3,(State*)&S47_Cterm_def_ph};
+yacco2::Shift_entry S45qse_Cterm_def_ph = {0,(State*)&S46_Cterm_def_ph};
+yacco2::State S45_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{45
+,(Shift_entry*)&S45pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S45st_Cterm_def_ph,0,(State_s_thread_tbl*)&S47tt_Cterm_def_ph,0,(Shift_entry*)&S45qse_Cterm_def_ph
+};
+struct S46rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cterm_def_ph S46rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterm_def_ph,Cterm_def_ph::rhs3_Rsym_class_id_}
+ }// end of reduce table
+};
+yacco2::State S46_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cterm_def_ph,0,0,0};
+struct S47std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S47std_Cterm_def_ph S47st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S48_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S49_Cterm_def_ph} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S47qse_Cterm_def_ph = {0,(State*)&S48_Cterm_def_ph};
+yacco2::State S47_Cterm_def_ph = //State's vectored into symbol: "|||"
+{47
+,0,0,0,0,(Shift_tbl*)&S47st_Cterm_def_ph,0,0,0,(Shift_entry*)&S47qse_Cterm_def_ph
+};
+struct S48rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cterm_def_ph S48rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterm_def_ph,Cterm_def_ph::rhs2_Rsym_class_id_}
+ }// end of reduce table
+};
+yacco2::State S48_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Cterm_def_ph,0,0,0};
+struct S49rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Cterm_def_ph S49rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterm_def_ph,Cterm_def_ph::rhs1_Rsym_class_id_}
+ }// end of reduce table
+};
+yacco2::State S49_Cterm_def_ph = //State's vectored into symbol: "identifier"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Cterm_def_ph,0,0,0};
+struct S50rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cterm_def_ph S50rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterm_def_ph,Cterm_def_ph::rhs1_Rsym_class_phrase_}
+ }// end of reduce table
+};
+yacco2::State S50_Cterm_def_ph = //State's vectored into symbol: "Rsym_class_id"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cterm_def_ph,0,0,0};
+struct S51std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S51std_Cterm_def_ph S51st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S52_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S51pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S51rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cterm_def_ph S51rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S51_Cterm_def_ph = //State's vectored into symbol: "{"
+{51
+,(Shift_entry*)&S51pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S51st_Cterm_def_ph,(Reduce_tbl*)&S51rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S52std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S52std_Cterm_def_ph S52st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S65_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{581,(State*)&S53_Cterm_def_ph} // shift sym: Rdirectives
+ ,{582,(State*)&S72_Cterm_def_ph} // shift sym: Rdirective
+ }// end of shift table
+};
+yacco2::Shift_entry S52pse_Cterm_def_ph = {3,(State*)&S65_Cterm_def_ph};
+yacco2::State S52_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{52
+,(Shift_entry*)&S52pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S52st_Cterm_def_ph,0,(State_s_thread_tbl*)&S65tt_Cterm_def_ph,0,0};
+struct S53std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S53std_Cterm_def_ph S53st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S75_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{582,(State*)&S54_Cterm_def_ph} // shift sym: Rdirective
+ ,{584,(State*)&S60_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S53pse_Cterm_def_ph = {3,(State*)&S75_Cterm_def_ph};
+struct S53rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cterm_def_ph S53rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S53_Cterm_def_ph = //State's vectored into symbol: "Rdirectives"
+{53
+,(Shift_entry*)&S53pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S53st_Cterm_def_ph,(Reduce_tbl*)&S53rt_Cterm_def_ph,(State_s_thread_tbl*)&S75tt_Cterm_def_ph,0,0};
+struct S54std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S54std_Cterm_def_ph S54st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S55_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S58_Cterm_def_ph} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S54pse_Cterm_def_ph = {3,(State*)&S55_Cterm_def_ph};
+yacco2::State S54_Cterm_def_ph = //State's vectored into symbol: "Rdirective"
+{54
+,(Shift_entry*)&S54pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S54st_Cterm_def_ph,0,(State_s_thread_tbl*)&S55tt_Cterm_def_ph,0,0};
+struct S55std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S55std_Cterm_def_ph S55st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S56_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S57_Cterm_def_ph} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S55qse_Cterm_def_ph = {0,(State*)&S56_Cterm_def_ph};
+yacco2::State S55_Cterm_def_ph = //State's vectored into symbol: "|||"
+{55
+,0,0,0,0,(Shift_tbl*)&S55st_Cterm_def_ph,0,0,0,(Shift_entry*)&S55qse_Cterm_def_ph
+};
+struct S56rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Cterm_def_ph S56rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs2_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S56_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Cterm_def_ph,0,0,0};
+struct S57rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cterm_def_ph S57rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs1_Rsyntax_code_}
+ }// end of reduce table
+};
+yacco2::State S57_Cterm_def_ph = //State's vectored into symbol: "syntax-code"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cterm_def_ph,0,0,0};
+struct S58std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S58std_Cterm_def_ph S58st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S59_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S58pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S58rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cterm_def_ph S58rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S58_Cterm_def_ph = //State's vectored into symbol: "Rsyntax_code"
+{58
+,(Shift_entry*)&S58pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S58st_Cterm_def_ph,(Reduce_tbl*)&S58rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S59rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cterm_def_ph S59rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs2_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S59_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cterm_def_ph,0,0,0};
+struct S60std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S60std_Cterm_def_ph S60st_Cterm_def_ph = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S61_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S62_Cterm_def_ph} // shift sym: raw_close_brace
+ ,{580,(State*)&S63_Cterm_def_ph} // shift sym: Rclosing_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S60qse_Cterm_def_ph = {0,(State*)&S61_Cterm_def_ph};
+yacco2::State S60_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{60
+,0,0,0,0,(Shift_tbl*)&S60st_Cterm_def_ph,0,0,0,(Shift_entry*)&S60qse_Cterm_def_ph
+};
+struct S61rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Cterm_def_ph S61rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterm_def_ph,Cterm_def_ph::rhs1_Rclosing_brace_}
+ }// end of reduce table
+};
+yacco2::State S61_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Cterm_def_ph,0,0,0};
+struct S62rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Cterm_def_ph S62rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterm_def_ph,Cterm_def_ph::rhs2_Rclosing_brace_}
+ }// end of reduce table
+};
+yacco2::State S62_Cterm_def_ph = //State's vectored into symbol: "}"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Cterm_def_ph,0,0,0};
+struct S63std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S63std_Cterm_def_ph S63st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S64_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S63pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S63rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cterm_def_ph S63rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S63_Cterm_def_ph = //State's vectored into symbol: "Rclosing_brace"
+{63
+,(Shift_entry*)&S63pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S63st_Cterm_def_ph,(Reduce_tbl*)&S63rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S64rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Cterm_def_ph S64rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterm_def_ph,Cterm_def_ph::rhs2_Rpotential_code_blk_}
+ }// end of reduce table
+};
+yacco2::State S64_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Cterm_def_ph,0,0,0};
+struct S65std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S65std_Cterm_def_ph S65st_Cterm_def_ph = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S66_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S67_Cterm_def_ph} // shift sym: T_user_declaration
+ ,{311,(State*)&S68_Cterm_def_ph} // shift sym: T_constructor
+ ,{312,(State*)&S69_Cterm_def_ph} // shift sym: T_destructor
+ ,{313,(State*)&S70_Cterm_def_ph} // shift sym: T_op
+ ,{315,(State*)&S71_Cterm_def_ph} // shift sym: T_user_implementation
+ }// end of shift table
+};
+yacco2::Shift_entry S65qse_Cterm_def_ph = {0,(State*)&S66_Cterm_def_ph};
+yacco2::State S65_Cterm_def_ph = //State's vectored into symbol: "|||"
+{65
+,0,0,0,0,(Shift_tbl*)&S65st_Cterm_def_ph,0,0,0,(Shift_entry*)&S65qse_Cterm_def_ph
+};
+struct S66rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Cterm_def_ph S66rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs6_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S66_Cterm_def_ph = //State's vectored into symbol: "|?|"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Cterm_def_ph,0,0,0};
+struct S67rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Cterm_def_ph S67rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs1_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S67_Cterm_def_ph = //State's vectored into symbol: "#user-declaration"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Cterm_def_ph,0,0,0};
+struct S68rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cterm_def_ph S68rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs3_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S68_Cterm_def_ph = //State's vectored into symbol: "#constructor"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cterm_def_ph,0,0,0};
+struct S69rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cterm_def_ph S69rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs4_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S69_Cterm_def_ph = //State's vectored into symbol: "#destructor"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Cterm_def_ph,0,0,0};
+struct S70rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Cterm_def_ph S70rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs5_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S70_Cterm_def_ph = //State's vectored into symbol: "#op"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Cterm_def_ph,0,0,0};
+struct S71rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Cterm_def_ph S71rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterm_def_ph,Cterm_def_ph::rhs2_Rdirective_}
+ }// end of reduce table
+};
+yacco2::State S71_Cterm_def_ph = //State's vectored into symbol: "#user-implementation"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Cterm_def_ph,0,0,0};
+struct S72std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S72std_Cterm_def_ph S72st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S55_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S73_Cterm_def_ph} // shift sym: Rsyntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S72pse_Cterm_def_ph = {3,(State*)&S55_Cterm_def_ph};
+yacco2::State S72_Cterm_def_ph = //State's vectored into symbol: "Rdirective"
+{72
+,(Shift_entry*)&S72pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S72st_Cterm_def_ph,0,(State_s_thread_tbl*)&S55tt_Cterm_def_ph,0,0};
+struct S73std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S73std_Cterm_def_ph S73st_Cterm_def_ph = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S29_Cterm_def_ph} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S74_Cterm_def_ph} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S73pse_Cterm_def_ph = {3,(State*)&S29_Cterm_def_ph};
+struct S73rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Cterm_def_ph S73rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S73_Cterm_def_ph = //State's vectored into symbol: "Rsyntax_code"
+{73
+,(Shift_entry*)&S73pse_Cterm_def_ph,0,0,0,(Shift_tbl*)&S73st_Cterm_def_ph,(Reduce_tbl*)&S73rt_Cterm_def_ph,(State_s_thread_tbl*)&S29tt_Cterm_def_ph,0,0};
+struct S74rtd_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Cterm_def_ph S74rt_Cterm_def_ph = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterm_def_ph,Cterm_def_ph::rhs1_Rdirectives_}
+ }// end of reduce table
+};
+yacco2::State S74_Cterm_def_ph = //State's vectored into symbol: "Rlint"
+{74
+,0,0,0,0,0,(Reduce_tbl*)&S74rt_Cterm_def_ph,0,0,0};
+struct S75std_Cterm_def_ph{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S75std_Cterm_def_ph S75st_Cterm_def_ph = {
+ 7
+ ,
+ {// start of table
+ {0,(State*)&S66_Cterm_def_ph} // shift sym: LR1_questionable_shift_operator
+ ,{308,(State*)&S67_Cterm_def_ph} // shift sym: T_user_declaration
+ ,{311,(State*)&S68_Cterm_def_ph} // shift sym: T_constructor
+ ,{312,(State*)&S69_Cterm_def_ph} // shift sym: T_destructor
+ ,{313,(State*)&S70_Cterm_def_ph} // shift sym: T_op
+ ,{315,(State*)&S71_Cterm_def_ph} // shift sym: T_user_implementation
+ ,{375,(State*)&S16_Cterm_def_ph} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::Shift_entry S75qse_Cterm_def_ph = {0,(State*)&S66_Cterm_def_ph};
+yacco2::State S75_Cterm_def_ph = //State's vectored into symbol: "|||"
+{75
+,0,0,0,0,(Shift_tbl*)&S75st_Cterm_def_ph,0,0,0,(Shift_entry*)&S75qse_Cterm_def_ph
+};
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclass.cpp b/web/yacco2/compiler/grammars/terminal_def_symclass.cpp
new file mode 100644
index 0000000000..0665d0bc0b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclass.cpp
@@ -0,0 +1,170 @@
+/*
+ File: terminal_def_symclass.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "terminal_def_symclass.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminal_def_symclass;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 7;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+}
+ Cterminal_def_symclass::
+ Cterminal_def_symclass()
+ :yacco2::CAbs_fsm
+ ("terminal_def_symclass.lex"
+ ,"1.0"
+ ,"29 mar 2004"
+ ,false
+ ,"Lexer of ``sym-class'' keyword."
+ ,"Fri Jan 30 18:55:26 2015 "
+ ,S1_Cterminal_def_symclass){
+
+ }
+
+Cterminal_def_symclass::~Cterminal_def_symclass(){
+
+ for(int x = 0;x < 7;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cterminal_def_symclass::failed(){
+ return false;
+ }
+ void Cterminal_def_symclass::op(){
+}
+int Cterminal_def_symclass::rhs_to_rules_mapping_[71] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,1 // subrule 8 for rule 2
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,2 // subrule 12 for rule 3
+ ,2 // subrule 13 for rule 3
+ ,2 // subrule 14 for rule 3
+ ,2 // subrule 15 for rule 3
+ ,2 // subrule 16 for rule 3
+ ,2 // subrule 17 for rule 3
+ ,2 // subrule 18 for rule 3
+ ,2 // subrule 19 for rule 3
+ ,2 // subrule 20 for rule 3
+ ,2 // subrule 21 for rule 3
+ ,3 // subrule 22 for rule 4
+ ,3 // subrule 23 for rule 4
+ ,3 // subrule 24 for rule 4
+ ,3 // subrule 25 for rule 4
+ ,3 // subrule 26 for rule 4
+ ,3 // subrule 27 for rule 4
+ ,3 // subrule 28 for rule 4
+ ,3 // subrule 29 for rule 4
+ ,3 // subrule 30 for rule 4
+ ,3 // subrule 31 for rule 4
+ ,3 // subrule 32 for rule 4
+ ,3 // subrule 33 for rule 4
+ ,3 // subrule 34 for rule 4
+ ,4 // subrule 35 for rule 5
+ ,4 // subrule 36 for rule 5
+ ,4 // subrule 37 for rule 5
+ ,4 // subrule 38 for rule 5
+ ,4 // subrule 39 for rule 5
+ ,4 // subrule 40 for rule 5
+ ,4 // subrule 41 for rule 5
+ ,4 // subrule 42 for rule 5
+ ,4 // subrule 43 for rule 5
+ ,4 // subrule 44 for rule 5
+ ,4 // subrule 45 for rule 5
+ ,4 // subrule 46 for rule 5
+ ,4 // subrule 47 for rule 5
+ ,5 // subrule 48 for rule 6
+ ,5 // subrule 49 for rule 6
+ ,5 // subrule 50 for rule 6
+ ,5 // subrule 51 for rule 6
+ ,5 // subrule 52 for rule 6
+ ,5 // subrule 53 for rule 6
+ ,5 // subrule 54 for rule 6
+ ,5 // subrule 55 for rule 6
+ ,5 // subrule 56 for rule 6
+ ,5 // subrule 57 for rule 6
+ ,5 // subrule 58 for rule 6
+ ,5 // subrule 59 for rule 6
+ ,5 // subrule 60 for rule 6
+ ,6 // subrule 61 for rule 7
+ ,6 // subrule 62 for rule 7
+ ,6 // subrule 63 for rule 7
+ ,6 // subrule 64 for rule 7
+ ,6 // subrule 65 for rule 7
+ ,6 // subrule 66 for rule 7
+ ,6 // subrule 67 for rule 7
+ ,6 // subrule 68 for rule 7
+ ,6 // subrule 69 for rule 7
+ ,6 // subrule 70 for rule 7
+};
+Rterminal_def_symclass::Rterminal_def_symclass(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterminal_def_symclass",0,Cterminal_def_symclass::R_Rterminal_def_symclass_,P,false,false){
+}
+
+void Rterminal_def_symclass::op(){
+ sstrace_rulesss
+
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+
+}
+void Rterminal_def_symclass::sr1(){
+
+ rtn_sym_ = new T_sym_class;
+
+}
+
+Rminus_la::Rminus_la(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus_la",0,Cterminal_def_symclass::R_Rminus_la_,P,false,false){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,Cterminal_def_symclass::R_RUPPER_A_M_,P,false,false){
+}
+
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,Cterminal_def_symclass::R_RUPPER_N_Z_,P,false,false){
+}
+
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,Cterminal_def_symclass::R_Rlower_a_m_,P,false,false){
+}
+
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,Cterminal_def_symclass::R_Rlower_n_z_,P,false,false){
+}
+
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,Cterminal_def_symclass::R_RNUMBERS_,P,false,false){
+}
+
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclass.fsc b/web/yacco2/compiler/grammars/terminal_def_symclass.fsc
new file mode 100644
index 0000000000..190f801a39
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclass.fsc
@@ -0,0 +1,20 @@
+/*
+ File: terminal_def_symclass.fsc
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+transitive n
+grammar-name "terminal_def_symclass"
+name-space "NS_terminal_def_symclass"
+thread-name "TH_terminal_def_symclass"
+monolithic n
+file-name "terminal_def_symclass.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_s
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Lexer of ``sym-class'' keyword."
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclass.h b/web/yacco2/compiler/grammars/terminal_def_symclass.h
new file mode 100644
index 0000000000..8a525f8700
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclass.h
@@ -0,0 +1,171 @@
+/*
+ File: terminal_def_symclass.h
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#ifndef __terminal_def_symclass_h__
+#define __terminal_def_symclass_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_terminal_def_symclass;
+
+extern yacco2::State S1_Cterminal_def_symclass;
+namespace NS_terminal_def_symclass {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_terminal_def_symclass(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_terminal_def_symclass(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[7];
+};
+class Cterminal_def_symclass: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rterminal_def_symclass_ = 569//start_of_rule_list + 0
+ ,rhs1_Rterminal_def_symclass_ = 1
+ ,R_Rminus_la_ = 570//start_of_rule_list + 2
+ ,rhs1_Rminus_la_ = 2
+ ,rhs2_Rminus_la_ = 3
+ ,rhs3_Rminus_la_ = 4
+ ,rhs4_Rminus_la_ = 5
+ ,rhs5_Rminus_la_ = 6
+ ,rhs6_Rminus_la_ = 7
+ ,rhs7_Rminus_la_ = 8
+ ,R_RUPPER_A_M_ = 571//start_of_rule_list + 4
+ ,rhs1_RUPPER_A_M_ = 9
+ ,rhs2_RUPPER_A_M_ = 10
+ ,rhs3_RUPPER_A_M_ = 11
+ ,rhs4_RUPPER_A_M_ = 12
+ ,rhs5_RUPPER_A_M_ = 13
+ ,rhs6_RUPPER_A_M_ = 14
+ ,rhs7_RUPPER_A_M_ = 15
+ ,rhs8_RUPPER_A_M_ = 16
+ ,rhs9_RUPPER_A_M_ = 17
+ ,rhs10_RUPPER_A_M_ = 18
+ ,rhs11_RUPPER_A_M_ = 19
+ ,rhs12_RUPPER_A_M_ = 20
+ ,rhs13_RUPPER_A_M_ = 21
+ ,R_RUPPER_N_Z_ = 572//start_of_rule_list + 6
+ ,rhs1_RUPPER_N_Z_ = 22
+ ,rhs2_RUPPER_N_Z_ = 23
+ ,rhs3_RUPPER_N_Z_ = 24
+ ,rhs4_RUPPER_N_Z_ = 25
+ ,rhs5_RUPPER_N_Z_ = 26
+ ,rhs6_RUPPER_N_Z_ = 27
+ ,rhs7_RUPPER_N_Z_ = 28
+ ,rhs8_RUPPER_N_Z_ = 29
+ ,rhs9_RUPPER_N_Z_ = 30
+ ,rhs10_RUPPER_N_Z_ = 31
+ ,rhs11_RUPPER_N_Z_ = 32
+ ,rhs12_RUPPER_N_Z_ = 33
+ ,rhs13_RUPPER_N_Z_ = 34
+ ,R_Rlower_a_m_ = 573//start_of_rule_list + 8
+ ,rhs1_Rlower_a_m_ = 35
+ ,rhs2_Rlower_a_m_ = 36
+ ,rhs3_Rlower_a_m_ = 37
+ ,rhs4_Rlower_a_m_ = 38
+ ,rhs5_Rlower_a_m_ = 39
+ ,rhs6_Rlower_a_m_ = 40
+ ,rhs7_Rlower_a_m_ = 41
+ ,rhs8_Rlower_a_m_ = 42
+ ,rhs9_Rlower_a_m_ = 43
+ ,rhs10_Rlower_a_m_ = 44
+ ,rhs11_Rlower_a_m_ = 45
+ ,rhs12_Rlower_a_m_ = 46
+ ,rhs13_Rlower_a_m_ = 47
+ ,R_Rlower_n_z_ = 574//start_of_rule_list + 10
+ ,rhs1_Rlower_n_z_ = 48
+ ,rhs2_Rlower_n_z_ = 49
+ ,rhs3_Rlower_n_z_ = 50
+ ,rhs4_Rlower_n_z_ = 51
+ ,rhs5_Rlower_n_z_ = 52
+ ,rhs6_Rlower_n_z_ = 53
+ ,rhs7_Rlower_n_z_ = 54
+ ,rhs8_Rlower_n_z_ = 55
+ ,rhs9_Rlower_n_z_ = 56
+ ,rhs10_Rlower_n_z_ = 57
+ ,rhs11_Rlower_n_z_ = 58
+ ,rhs12_Rlower_n_z_ = 59
+ ,rhs13_Rlower_n_z_ = 60
+ ,R_RNUMBERS_ = 575//start_of_rule_list + 12
+ ,rhs1_RNUMBERS_ = 61
+ ,rhs2_RNUMBERS_ = 62
+ ,rhs3_RNUMBERS_ = 63
+ ,rhs4_RNUMBERS_ = 64
+ ,rhs5_RNUMBERS_ = 65
+ ,rhs6_RNUMBERS_ = 66
+ ,rhs7_RNUMBERS_ = 67
+ ,rhs8_RNUMBERS_ = 68
+ ,rhs9_RNUMBERS_ = 69
+ ,rhs10_RNUMBERS_ = 70
+ };
+ //no of la sets = 1
+ //no of states = 10
+ Cterminal_def_symclass();
+ ~Cterminal_def_symclass();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[71];
+ };
+struct Rterminal_def_symclass;
+struct Rminus_la;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Rterminal_def_symclass:public yacco2::CAbs_lr1_sym {
+ Rterminal_def_symclass(yacco2::Parser* P);
+ void op();
+
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+
+ public:
+ void sr1();
+};
+
+struct Rminus_la:public yacco2::CAbs_lr1_sym {
+ Rminus_la(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclass.lex b/web/yacco2/compiler/grammars/terminal_def_symclass.lex
new file mode 100644
index 0000000000..ce6d369a01
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclass.lex
@@ -0,0 +1,86 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: terminal_def_symclass.lex
+Dates: 29 Mar 2004
+Purpose: terminal-def delete / abort tags
+Output: #sym-class
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |terminal_def_symclass| Thread.\fbreak
+Recognize ``sym-class'' keyword.
+@/
+fsm
+(fsm-id "terminal_def_symclass.lex"
+,fsm-filename terminal_def_symclass
+,fsm-namespace NS_terminal_def_symclass
+,fsm-class Cterminal_def_symclass
+,fsm-version "1.0",fsm-date "29 mar 2004",fsm-debug "false"
+,fsm-comments "Lexer of ``sym-class'' keyword.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_terminal_def_symclass
+ ***
+ parallel-la-boundary
+ eolr - Rminus_la
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rterminal_def_symclass (
+ lhs {
+ user-declaration
+ public:
+ CAbs_lr1_sym* rtn_sym_;
+ ***
+ op
+ rtn_sym_->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(rtn_sym_);
+ rtn_sym_ = 0;
+ ***
+ }
+){
+ -> s y m "-" c l a s s {
+ op
+ rtn_sym_ = new T_sym_class;
+ ***}
+}
+
+Rminus_la () {
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS
+}
+
+RUPPER_A_M (){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z (){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m (){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z (){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS (){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclasssym.cpp b/web/yacco2/compiler/grammars/terminal_def_symclasssym.cpp
new file mode 100644
index 0000000000..717d0e9f02
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclasssym.cpp
@@ -0,0 +1,1030 @@
+/*
+ File: terminal_def_symclasssym.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "terminal_def_symclass.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminal_def_symclass;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_terminal_def_symclass::TH_terminal_def_symclass(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_terminal_def_symclass;
+ NS_terminal_def_symclass::Cterminal_def_symclass Cterminal_def_symclass_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cterminal_def_symclass_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_terminal_def_symclass::PROC_TH_terminal_def_symclass(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_terminal_def_symclass";
+ static bool one_time(false);
+ static NS_terminal_def_symclass::Cterminal_def_symclass* NS_terminal_def_symclass_Cterminal_def_symclass_(0);// parallel-parser's fsm table
+ static Parser* NS_terminal_def_symclass_Cterminal_def_symclass_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_terminal_def_symclass_Cterminal_def_symclass_ = new NS_terminal_def_symclass::Cterminal_def_symclass();// parallel-parser's fsm table
+ NS_terminal_def_symclass_Cterminal_def_symclass_parser = new Parser(*NS_terminal_def_symclass_Cterminal_def_symclass_,Caller_pp);
+ }
+ proc_parser = NS_terminal_def_symclass_Cterminal_def_symclass_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cterminal_def_symclass::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rterminal_def_symclass_:{
+ Rterminal_def_symclass* sym;
+ if(re->rule_ == 0){
+ sym = new Rterminal_def_symclass(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterminal_def_symclass*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 9;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs1_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/terminal_def_symclasstbl.cpp b/web/yacco2/compiler/grammars/terminal_def_symclasstbl.cpp
new file mode 100644
index 0000000000..05a363369e
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminal_def_symclasstbl.cpp
@@ -0,0 +1,732 @@
+/*
+ File: terminal_def_symclasstbl.cpp
+ Date and Time: Fri Jan 30 18:55:26 2015
+*/
+#include "terminal_def_symclass.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminal_def_symclass;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_comma
+// raw_period
+// raw_slash
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_left_quote
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+yacco2::UCHAR LA1_Cterminal_def_symclass[] ={
+67
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,223
+,8,252
+,9,1
+,12,120
+,13,1
+,16,248
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Cterminal_def_symclass;
+extern yacco2::State S2_Cterminal_def_symclass;
+extern yacco2::State S3_Cterminal_def_symclass;
+extern yacco2::State S4_Cterminal_def_symclass;
+extern yacco2::State S5_Cterminal_def_symclass;
+extern yacco2::State S6_Cterminal_def_symclass;
+extern yacco2::State S7_Cterminal_def_symclass;
+extern yacco2::State S8_Cterminal_def_symclass;
+extern yacco2::State S9_Cterminal_def_symclass;
+extern yacco2::State S10_Cterminal_def_symclass;
+struct S1std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cterminal_def_symclass S1st_Cterminal_def_symclass = {
+ 2
+ ,
+ {// start of table
+ {123,(State*)&S2_Cterminal_def_symclass} // shift sym: raw_s
+ ,{569,(State*)&S1_Cterminal_def_symclass} // accept sym: Rterminal_def_symclass
+ }// end of shift table
+};
+yacco2::State S1_Cterminal_def_symclass = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cterminal_def_symclass,0,0,0,0};
+struct S2std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cterminal_def_symclass S2st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {129,(State*)&S3_Cterminal_def_symclass} // shift sym: raw_y
+ }// end of shift table
+};
+yacco2::State S2_Cterminal_def_symclass = //State's vectored into symbol: "s"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cterminal_def_symclass,0,0,0,0};
+struct S3std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cterminal_def_symclass S3st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {117,(State*)&S4_Cterminal_def_symclass} // shift sym: raw_m
+ }// end of shift table
+};
+yacco2::State S3_Cterminal_def_symclass = //State's vectored into symbol: "y"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cterminal_def_symclass,0,0,0,0};
+struct S4std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Cterminal_def_symclass S4st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {53,(State*)&S5_Cterminal_def_symclass} // shift sym: raw_minus
+ }// end of shift table
+};
+yacco2::State S4_Cterminal_def_symclass = //State's vectored into symbol: "m"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cterminal_def_symclass,0,0,0,0};
+struct S5std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cterminal_def_symclass S5st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S6_Cterminal_def_symclass} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S5_Cterminal_def_symclass = //State's vectored into symbol: "-"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cterminal_def_symclass,0,0,0,0};
+struct S6std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S6std_Cterminal_def_symclass S6st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {116,(State*)&S7_Cterminal_def_symclass} // shift sym: raw_l
+ }// end of shift table
+};
+yacco2::State S6_Cterminal_def_symclass = //State's vectored into symbol: "c"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cterminal_def_symclass,0,0,0,0};
+struct S7std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cterminal_def_symclass S7st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S8_Cterminal_def_symclass} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S7_Cterminal_def_symclass = //State's vectored into symbol: "l"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cterminal_def_symclass,0,0,0,0};
+struct S8std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cterminal_def_symclass S8st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {123,(State*)&S9_Cterminal_def_symclass} // shift sym: raw_s
+ }// end of shift table
+};
+yacco2::State S8_Cterminal_def_symclass = //State's vectored into symbol: "a"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cterminal_def_symclass,0,0,0,0};
+struct S9std_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Cterminal_def_symclass S9st_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {123,(State*)&S10_Cterminal_def_symclass} // shift sym: raw_s
+ }// end of shift table
+};
+yacco2::State S9_Cterminal_def_symclass = //State's vectored into symbol: "s"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cterminal_def_symclass,0,0,0,0};
+struct S10rtd_Cterminal_def_symclass{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cterminal_def_symclass S10rt_Cterminal_def_symclass = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminal_def_symclass,Cterminal_def_symclass::rhs1_Rterminal_def_symclass_}
+ }// end of reduce table
+};
+yacco2::State S10_Cterminal_def_symclass = //State's vectored into symbol: "s"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Cterminal_def_symclass,0,0,0};
diff --git a/web/yacco2/compiler/grammars/terminals_phrase.cpp b/web/yacco2/compiler/grammars/terminals_phrase.cpp
new file mode 100644
index 0000000000..9030ce4f7f
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase.cpp
@@ -0,0 +1,109 @@
+/*
+ File: terminals_phrase.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cterminals_phrase::
+ Cterminals_phrase()
+ :yacco2::CAbs_fsm
+ ("terminals_phrase.lex"
+ ,"1.0"
+ ,"24 May 2004"
+ ,false
+ ,"Dispatcher to parse the terminals alphabet."
+ ,"Fri Jan 30 18:55:27 2015 "
+ ,S1_Cterminals_phrase){
+
+ cweb_marker__ = 0;
+
+ }
+
+Cterminals_phrase::~Cterminals_phrase(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cterminals_phrase::failed(){
+ return false;
+ }
+ void Cterminals_phrase::op(){
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+
+}
+int Cterminals_phrase::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Rterminals_phrase::Rterminals_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterminals_phrase",0,Cterminals_phrase::R_Rterminals_phrase_,P,false,false){
+}
+
+Rphrase::Rphrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rphrase",0,Cterminals_phrase::R_Rphrase_,P,false,false){
+}
+
+void Rphrase::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_phrase* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rphrase::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/terminals_phrase.fsc b/web/yacco2/compiler/grammars/terminals_phrase.fsc
new file mode 100644
index 0000000000..d8d78c51b8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase.fsc
@@ -0,0 +1,22 @@
+/*
+ File: terminals_phrase.fsc
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+transitive y
+grammar-name "terminals_phrase"
+name-space "NS_terminals_phrase"
+thread-name "Cterminals_phrase"
+monolithic y
+file-name "terminals_phrase.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_questionable_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_terminals_phrase_th::TH_terminals_phrase_th
+end-list-of-transitive-threads
+list-of-used-threads 1
+ NS_terminals_phrase_th::TH_terminals_phrase_th
+end-list-of-used-threads
+fsm-comments
+"Dispatcher to parse the terminals alphabet."
diff --git a/web/yacco2/compiler/grammars/terminals_phrase.h b/web/yacco2/compiler/grammars/terminals_phrase.h
new file mode 100644
index 0000000000..9a8749ba1b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase.h
@@ -0,0 +1,69 @@
+/*
+ File: terminals_phrase.h
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#ifndef __terminals_phrase_h__
+#define __terminals_phrase_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "terminals_phrase_th.h"
+#include "o2_externs.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Cterminals_phrase;
+namespace NS_terminals_phrase {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cterminals_phrase: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rterminals_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rterminals_phrase_ = 1
+ ,R_Rphrase_ = 570//start_of_rule_list + 2
+ ,rhs1_Rphrase_ = 2
+ ,rhs2_Rphrase_ = 3
+ ,rhs3_Rphrase_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ Cterminals_phrase();
+ ~Cterminals_phrase();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public: yacco2::AST* cweb_marker__;
+
+ };
+struct Rterminals_phrase;
+struct Rphrase;
+struct Rterminals_phrase:public yacco2::CAbs_lr1_sym {
+ Rterminals_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rphrase:public yacco2::CAbs_lr1_sym {
+ Rphrase(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/terminals_phrase.lex b/web/yacco2/compiler/grammars/terminals_phrase.lex
new file mode 100644
index 0000000000..5252c6fb5c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase.lex
@@ -0,0 +1,111 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: terminals_phrase.lex
+Dates: 24 May 2004
+Purpose: terminals alphabet
+Grammar being parsed:
+ terminals
+ (file-name yacco2_terminals
+ ,name-space NS_yacco2_terminals)
+ {
+ [terminals-refs code ***] optional
+ 1+ terminal definitions where def is
+ terminal-key [AD AB attributes] (sym-class C++ name)
+ or
+ terminal-key [AD AB attributes]
+ (sym-class C++ name {C++ directives block} )
+ [terminals-sufx code ***] optional
+ }
+Note: The terminals-refs and terminals-sufx directives
+ bracket the emitted grammar code. Terminals-ref usually
+ provides references for the terminals being defined.
+ The terminals-sufx directive is an option for
+ the grammar writer to append suffix code.
+
+ Why is this pattern different than the other terminal
+ classifications. Error terminals are basically indicators.
+ Raw characters map the raw 8 bit character into its equivalent
+ terminal token. The lrk constant terminals are just that
+ constants. They indicate appropriate global intentions:
+ end-of-file, end-of-grammar, and special meta terminals for
+ parallel parsing --- |+|, ||| etc.
+
+ Terminals are beyond the pedestrian classifications just mentioned.
+ These are the specific terminals being designed by the grammar
+ writer. They go beyond just the lexical and syntactical phases
+ of compiling. One can designate any intent with appropriate
+ behaviors. In fact, the Pascal translator to retarget Oregon
+ Pascal and preproccessor language extensions to HP's Pascal
+ built an extensive set of tree facitities that could be traversed
+ with dynamic filters to create token containers. This allowed
+ one to used grammars against trees to retarget the Pascal source code.
+ It has been a thought of mine for many years to program in
+ grammars instead of procedural thoughts. One speaks in sentences
+ and not in the basic utterances of a stutter --- word: think procedure.
+ The filters provide tree node views in association with the
+ the tree walker to sequential flatten forests of terminals.
+
+ Grammars enhance the thought process with its nested actions
+ accumlating in phrases. It does one thing well. It tells you
+ when things are ambiguous.
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |terminals_phrase| grammar.\fbreak
+Dispatcher to parse the terminals alphabet.
+@/
+fsm
+(fsm-id "terminals_phrase.lex"
+,fsm-filename terminals_phrase
+,fsm-namespace NS_terminals_phrase
+,fsm-class Cterminals_phrase{
+ user-prefix-declaration
+#include "terminals_phrase_th.h"
+#include "o2_externs.h"
+ ***
+ user-declaration
+ public: yacco2::AST* cweb_marker__;
+ ***
+ op
+ if(CWEB_MARKER != 0){
+ cweb_marker__ = CWEB_MARKER;
+ CWEB_MARKER=0;
+ }
+ ***
+ constructor
+ cweb_marker__ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 May 2004",fsm-debug "false"
+,fsm-comments "Dispatcher to parse the terminals alphabet.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rterminals_phrase (){
+ -> Rphrase
+}
+
+Rphrase (){
+ -> ||| "terminals-phrase"
+ NS_terminals_phrase_th::TH_terminals_phrase_th {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL { // thread has stop parsing with RSVP error
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |?| { // error due to no first set to start thread {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE(*sym);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_th.cpp b/web/yacco2/compiler/grammars/terminals_phrase_th.cpp
new file mode 100644
index 0000000000..3061e49905
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_th.cpp
@@ -0,0 +1,967 @@
+/*
+ File: terminals_phrase_th.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase_th;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 28;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[13] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[14] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[15] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[16] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[17] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[18] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[19] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[20] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[21] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[22] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[23] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[24] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[25] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[26] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[27] = new Per_rule_s_reuse_table();
+}
+ Cterminals_phrase_th::
+ Cterminals_phrase_th()
+ :yacco2::CAbs_fsm
+ ("terminals_phrase_th.lex"
+ ,"1.0"
+ ,"22 mar 2004"
+ ,false
+ ,"Parse terminals vocabulary."
+ ,"Fri Jan 30 18:55:27 2015 "
+ ,S1_Cterminals_phrase_th){
+
+ terminals_phrase_ = 0;
+
+ }
+
+Cterminals_phrase_th::~Cterminals_phrase_th(){
+
+ for(int x = 0;x < 28;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cterminals_phrase_th::failed(){
+ return false;
+ }
+ void Cterminals_phrase_th::op(){
+ if(terminals_phrase_ != 0){
+ delete terminals_phrase_;
+ terminals_phrase_ = 0;
+ }
+ terminals_phrase_ = new T_terminals_phrase;
+ terminals_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*terminals_phrase_);
+ terminals_phrase_->phrase_tree(t);
+
+}
+int Cterminals_phrase_th::rhs_to_rules_mapping_[62] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,6 // subrule 11 for rule 7
+ ,6 // subrule 12 for rule 7
+ ,6 // subrule 13 for rule 7
+ ,7 // subrule 14 for rule 8
+ ,7 // subrule 15 for rule 8
+ ,8 // subrule 16 for rule 9
+ ,8 // subrule 17 for rule 9
+ ,8 // subrule 18 for rule 9
+ ,9 // subrule 19 for rule 10
+ ,9 // subrule 20 for rule 10
+ ,9 // subrule 21 for rule 10
+ ,10 // subrule 22 for rule 11
+ ,10 // subrule 23 for rule 11
+ ,11 // subrule 24 for rule 12
+ ,11 // subrule 25 for rule 12
+ ,12 // subrule 26 for rule 13
+ ,13 // subrule 27 for rule 14
+ ,13 // subrule 28 for rule 14
+ ,13 // subrule 29 for rule 14
+ ,14 // subrule 30 for rule 15
+ ,14 // subrule 31 for rule 15
+ ,14 // subrule 32 for rule 15
+ ,15 // subrule 33 for rule 16
+ ,16 // subrule 34 for rule 17
+ ,16 // subrule 35 for rule 17
+ ,16 // subrule 36 for rule 17
+ ,17 // subrule 37 for rule 18
+ ,17 // subrule 38 for rule 18
+ ,17 // subrule 39 for rule 18
+ ,18 // subrule 40 for rule 19
+ ,18 // subrule 41 for rule 19
+ ,18 // subrule 42 for rule 19
+ ,19 // subrule 43 for rule 20
+ ,19 // subrule 44 for rule 20
+ ,20 // subrule 45 for rule 21
+ ,20 // subrule 46 for rule 21
+ ,21 // subrule 47 for rule 22
+ ,22 // subrule 48 for rule 23
+ ,22 // subrule 49 for rule 23
+ ,22 // subrule 50 for rule 23
+ ,23 // subrule 51 for rule 24
+ ,23 // subrule 52 for rule 24
+ ,23 // subrule 53 for rule 24
+ ,24 // subrule 54 for rule 25
+ ,24 // subrule 55 for rule 25
+ ,25 // subrule 56 for rule 26
+ ,25 // subrule 57 for rule 26
+ ,26 // subrule 58 for rule 27
+ ,26 // subrule 59 for rule 27
+ ,27 // subrule 60 for rule 28
+ ,27 // subrule 61 for rule 28
+};
+Rterminals_phrase::Rterminals_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rterminals_phrase",0,Cterminals_phrase_th::R_Rterminals_phrase_,P,false,false){
+}
+
+void Rterminals_phrase::sr1(){
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->terminals_phrase_);
+ fsm->terminals_phrase_ = 0;
+
+}
+
+Ropen_par::Ropen_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_par",0,Cterminals_phrase_th::R_Ropen_par_,P,false,false){
+}
+
+void Ropen_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_par::Rclose_par(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_par",0,Cterminals_phrase_th::R_Rclose_par_,P,false,false){
+}
+
+void Rclose_par::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rparameters::Rparameters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rparameters",0,Cterminals_phrase_th::R_Rparameters_,P,false,false){
+}
+
+Rfilename_phrase::Rfilename_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_phrase",0,Cterminals_phrase_th::R_Rfilename_phrase_,P,false,false){
+}
+
+Rfilename::Rfilename(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename",0,Cterminals_phrase_th::R_Rfilename_,P,false,false){
+}
+
+void Rfilename::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rfilename_id::Rfilename_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rfilename_id",0,Cterminals_phrase_th::R_Rfilename_id_,P,false,false){
+}
+
+void Rfilename_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->filename_id(sf->p2__);
+
+}
+
+void Rfilename_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rfilename_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_phrase::Rnamespace_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_phrase",0,Cterminals_phrase_th::R_Rnamespace_phrase_,P,false,false){
+}
+
+void Rnamespace_phrase::sr2(){
+
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace::Rnamespace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace",0,Cterminals_phrase_th::R_Rnamespace_,P,false,false){
+}
+
+void Rnamespace::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rnamespace_id::Rnamespace_id(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnamespace_id",0,Cterminals_phrase_th::R_Rnamespace_id_,P,false,false){
+}
+
+void Rnamespace_id::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->namespace_id(sf->p2__);
+
+}
+
+void Rnamespace_id::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rnamespace_id::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rt_refs_phrase::Rt_refs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_refs_phrase",0,Cterminals_phrase_th::R_Rt_refs_phrase_,P,false,false){
+}
+
+void Rt_refs_phrase::sr1(){
+ struct SF{
+ Rlint* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rcweb_k* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rlint* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rt_refs_kw_must* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ Rt_refs_code* p5__;
+ State* s5__;
+ bool abort5__;
+ Rule_s_reuse_entry* rule_s_reuse_entry5__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(5);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_refs_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+
+}
+
+Rt_refs_kw_code::Rt_refs_kw_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_refs_kw_code",0,Cterminals_phrase_th::R_Rt_refs_kw_code_,P,false,false){
+}
+
+Rt_refs_kw::Rt_refs_kw(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_refs_kw",0,Cterminals_phrase_th::R_Rt_refs_kw_,P,false,false){
+}
+
+void Rt_refs_kw::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rt_refs_kw_must::Rt_refs_kw_must(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_refs_kw_must",0,Cterminals_phrase_th::R_Rt_refs_kw_must_,P,false,false){
+}
+
+void Rt_refs_kw_must::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rt_refs_kw_must::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_missing_terminals_refs_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_refs_kw_must::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_missing_terminals_refs_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rt_refs_code::Rt_refs_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_refs_code",0,Cterminals_phrase_th::R_Rt_refs_code_,P,false,false){
+}
+
+void Rt_refs_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_refs_code(sf->p2__);
+
+}
+
+void Rt_refs_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_refs_code::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_defs_phrase::Rsym_defs_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_defs_phrase",0,Cterminals_phrase_th::R_Rsym_defs_phrase_,P,false,false){
+}
+
+Rsym_def::Rsym_def(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def",0,Cterminals_phrase_th::R_Rsym_def_,P,false,false){
+}
+
+void Rsym_def::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::t);
+ CAbs_lr1_sym* r =
+ fsm->terminals_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rsym_def1s::Rsym_def1s(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1s",0,Cterminals_phrase_th::R_Rsym_def1s_,P,false,false){
+}
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_terminals_phrase_th::AR_Rsym_def1(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rsym_def1";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ != NS_yacco2_T_enum::T_Enum::T_Err_no_terminal_key_present_){
+ goto arbitrated_parameter;
+ }
+ }
+
+#include "war_end_code.h"
+}
+
+Rsym_def1::Rsym_def1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rsym_def1",0,Cterminals_phrase_th::R_Rsym_def1_,P,false,false){
+}
+
+void Rsym_def1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminal_def* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::t);
+ CAbs_lr1_sym* r = fsm->terminals_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+
+}
+
+void Rsym_def1::sr2(){
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->terminals_phrase_);
+ fsm->terminals_phrase_ = 0;
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rsym_def1::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ using namespace NS_yacco2_T_enum;
+ int id = sf->p2__->enumerated_id__;
+ if(id >= T_Enum::start_ERR && id <= T_Enum::end_ERR){
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ }else{
+ CAbs_lr1_sym* sym = new Err_not_a_terminal_definition;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+
+}
+
+Rt_sufx_phrase::Rt_sufx_phrase(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_phrase",0,Cterminals_phrase_th::R_Rt_sufx_phrase_,P,false,false){
+}
+
+void Rt_sufx_phrase::sr1(){
+ struct SF{
+ Rlint* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Rcweb_k* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ Rt_sufx_kw_must* p3__;
+ State* s3__;
+ bool abort3__;
+ Rule_s_reuse_entry* rule_s_reuse_entry3__;
+ Rt_sufx_code* p4__;
+ State* s4__;
+ bool abort4__;
+ Rule_s_reuse_entry* rule_s_reuse_entry4__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(4);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_sufx_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+
+}
+
+Rt_sufx_kw_code::Rt_sufx_kw_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw_code",0,Cterminals_phrase_th::R_Rt_sufx_kw_code_,P,false,false){
+}
+
+Rt_sufx_kw::Rt_sufx_kw(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw",0,Cterminals_phrase_th::R_Rt_sufx_kw_,P,false,false){
+}
+
+void Rt_sufx_kw::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+Rt_sufx_kw_must::Rt_sufx_kw_must(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_kw_must",0,Cterminals_phrase_th::R_Rt_sufx_kw_must_,P,false,false){
+}
+
+void Rt_sufx_kw_must::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ sf->p2__->set_auto_delete(true);
+
+}
+
+void Rt_sufx_kw_must::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_missing_terminals_sufx_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_sufx_kw_must::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ CAbs_lr1_sym* sym = new Err_missing_terminals_sufx_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+
+}
+
+Rt_sufx_code::Rt_sufx_code(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rt_sufx_code",0,Cterminals_phrase_th::R_Rt_sufx_code_,P,false,false){
+}
+
+void Rt_sufx_code::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_syntax_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_sufx_code(sf->p2__);
+
+}
+
+void Rt_sufx_code::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+void Rt_sufx_code::sr3(){
+
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Ropen_brace::Ropen_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ropen_brace",0,Cterminals_phrase_th::R_Ropen_brace_,P,false,false){
+}
+
+void Ropen_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rclose_brace::Rclose_brace(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rclose_brace",0,Cterminals_phrase_th::R_Rclose_brace_,P,false,false){
+}
+
+void Rclose_brace::sr1(){
+
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
+Rlint::Rlint(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlint",0,Cterminals_phrase_th::R_Rlint_,P,false,false){
+}
+
+Rcweb_k::Rcweb_k(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rcweb_k",0,Cterminals_phrase_th::R_Rcweb_k_,P,false,false){
+}
+
+void Rcweb_k::ctor(){
+
+ cweb_t_ = 0;
+
+}
+void Rcweb_k::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_cweb_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ cweb_t_ = cw->ast();
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+
+}
+
+void Rcweb_k::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_th.fsc b/web/yacco2/compiler/grammars/terminals_phrase_th.fsc
new file mode 100644
index 0000000000..35eed3a342
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_th.fsc
@@ -0,0 +1,27 @@
+/*
+ File: terminals_phrase_th.fsc
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+transitive y
+grammar-name "terminals_phrase_th"
+name-space "NS_terminals_phrase_th"
+thread-name "TH_terminals_phrase_th"
+monolithic n
+file-name "terminals_phrase_th.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_questionable_shift_operator
+ raw_open_bracket
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_lint_balls::TH_lint_balls
+end-list-of-transitive-threads
+list-of-used-threads 5
+ NS_cweb_or_c_k::TH_cweb_or_c_k
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+ NS_term_def_ph::TH_term_def_ph
+end-list-of-used-threads
+fsm-comments
+"Parse terminals vocabulary."
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_th.h b/web/yacco2/compiler/grammars/terminals_phrase_th.h
new file mode 100644
index 0000000000..b71a6060e3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_th.h
@@ -0,0 +1,361 @@
+/*
+ File: terminals_phrase_th.h
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#ifndef __terminals_phrase_th_h__
+#define __terminals_phrase_th_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+
+extern yacco2::Thread_entry ITH_terminals_phrase_th;
+
+extern yacco2::State S1_Cterminals_phrase_th;
+namespace NS_terminals_phrase_th {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_terminals_phrase_th(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_terminals_phrase_th(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[28];
+};
+class Cterminals_phrase_th: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rterminals_phrase_ = 569//start_of_rule_list + 0
+ ,rhs1_Rterminals_phrase_ = 1
+ ,R_Ropen_par_ = 570//start_of_rule_list + 2
+ ,rhs1_Ropen_par_ = 2
+ ,rhs2_Ropen_par_ = 3
+ ,R_Rclose_par_ = 571//start_of_rule_list + 4
+ ,rhs1_Rclose_par_ = 4
+ ,rhs2_Rclose_par_ = 5
+ ,R_Rparameters_ = 572//start_of_rule_list + 6
+ ,rhs1_Rparameters_ = 6
+ ,R_Rfilename_phrase_ = 573//start_of_rule_list + 8
+ ,rhs1_Rfilename_phrase_ = 7
+ ,R_Rfilename_ = 574//start_of_rule_list + 10
+ ,rhs1_Rfilename_ = 8
+ ,rhs2_Rfilename_ = 9
+ ,rhs3_Rfilename_ = 10
+ ,R_Rfilename_id_ = 575//start_of_rule_list + 12
+ ,rhs1_Rfilename_id_ = 11
+ ,rhs2_Rfilename_id_ = 12
+ ,rhs3_Rfilename_id_ = 13
+ ,R_Rnamespace_phrase_ = 576//start_of_rule_list + 14
+ ,rhs1_Rnamespace_phrase_ = 14
+ ,rhs2_Rnamespace_phrase_ = 15
+ ,R_Rnamespace_ = 577//start_of_rule_list + 16
+ ,rhs1_Rnamespace_ = 16
+ ,rhs2_Rnamespace_ = 17
+ ,rhs3_Rnamespace_ = 18
+ ,R_Rnamespace_id_ = 578//start_of_rule_list + 18
+ ,rhs1_Rnamespace_id_ = 19
+ ,rhs2_Rnamespace_id_ = 20
+ ,rhs3_Rnamespace_id_ = 21
+ ,R_Rt_refs_phrase_ = 579//start_of_rule_list + 20
+ ,rhs1_Rt_refs_phrase_ = 22
+ ,rhs2_Rt_refs_phrase_ = 23
+ ,R_Rt_refs_kw_code_ = 580//start_of_rule_list + 22
+ ,rhs1_Rt_refs_kw_code_ = 24
+ ,rhs2_Rt_refs_kw_code_ = 25
+ ,R_Rt_refs_kw_ = 581//start_of_rule_list + 24
+ ,rhs1_Rt_refs_kw_ = 26
+ ,R_Rt_refs_kw_must_ = 582//start_of_rule_list + 26
+ ,rhs1_Rt_refs_kw_must_ = 27
+ ,rhs2_Rt_refs_kw_must_ = 28
+ ,rhs3_Rt_refs_kw_must_ = 29
+ ,R_Rt_refs_code_ = 583//start_of_rule_list + 28
+ ,rhs1_Rt_refs_code_ = 30
+ ,rhs2_Rt_refs_code_ = 31
+ ,rhs3_Rt_refs_code_ = 32
+ ,R_Rsym_defs_phrase_ = 584//start_of_rule_list + 30
+ ,rhs1_Rsym_defs_phrase_ = 33
+ ,R_Rsym_def_ = 585//start_of_rule_list + 32
+ ,rhs1_Rsym_def_ = 34
+ ,rhs2_Rsym_def_ = 35
+ ,rhs3_Rsym_def_ = 36
+ ,R_Rsym_def1s_ = 586//start_of_rule_list + 34
+ ,rhs1_Rsym_def1s_ = 37
+ ,rhs2_Rsym_def1s_ = 38
+ ,rhs3_Rsym_def1s_ = 39
+ ,R_Rsym_def1_ = 587//start_of_rule_list + 36
+ ,rhs1_Rsym_def1_ = 40
+ ,rhs2_Rsym_def1_ = 41
+ ,rhs3_Rsym_def1_ = 42
+ ,R_Rt_sufx_phrase_ = 588//start_of_rule_list + 38
+ ,rhs1_Rt_sufx_phrase_ = 43
+ ,rhs2_Rt_sufx_phrase_ = 44
+ ,R_Rt_sufx_kw_code_ = 589//start_of_rule_list + 40
+ ,rhs1_Rt_sufx_kw_code_ = 45
+ ,rhs2_Rt_sufx_kw_code_ = 46
+ ,R_Rt_sufx_kw_ = 590//start_of_rule_list + 42
+ ,rhs1_Rt_sufx_kw_ = 47
+ ,R_Rt_sufx_kw_must_ = 591//start_of_rule_list + 44
+ ,rhs1_Rt_sufx_kw_must_ = 48
+ ,rhs2_Rt_sufx_kw_must_ = 49
+ ,rhs3_Rt_sufx_kw_must_ = 50
+ ,R_Rt_sufx_code_ = 592//start_of_rule_list + 46
+ ,rhs1_Rt_sufx_code_ = 51
+ ,rhs2_Rt_sufx_code_ = 52
+ ,rhs3_Rt_sufx_code_ = 53
+ ,R_Ropen_brace_ = 593//start_of_rule_list + 48
+ ,rhs1_Ropen_brace_ = 54
+ ,rhs2_Ropen_brace_ = 55
+ ,R_Rclose_brace_ = 594//start_of_rule_list + 50
+ ,rhs1_Rclose_brace_ = 56
+ ,rhs2_Rclose_brace_ = 57
+ ,R_Rlint_ = 595//start_of_rule_list + 52
+ ,rhs1_Rlint_ = 58
+ ,rhs2_Rlint_ = 59
+ ,R_Rcweb_k_ = 596//start_of_rule_list + 54
+ ,rhs1_Rcweb_k_ = 60
+ ,rhs2_Rcweb_k_ = 61
+ };
+ //no of la sets = 10
+ //no of states = 104
+ Cterminals_phrase_th();
+ ~Cterminals_phrase_th();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[62];
+
+ public:
+ T_terminals_phrase* terminals_phrase_;
+
+ };
+struct Rterminals_phrase;
+struct Ropen_par;
+struct Rclose_par;
+struct Rparameters;
+struct Rfilename_phrase;
+struct Rfilename;
+struct Rfilename_id;
+struct Rnamespace_phrase;
+struct Rnamespace;
+struct Rnamespace_id;
+struct Rt_refs_phrase;
+struct Rt_refs_kw_code;
+struct Rt_refs_kw;
+struct Rt_refs_kw_must;
+struct Rt_refs_code;
+struct Rsym_defs_phrase;
+struct Rsym_def;
+struct Rsym_def1s;
+struct Rsym_def1;
+struct Rt_sufx_phrase;
+struct Rt_sufx_kw_code;
+struct Rt_sufx_kw;
+struct Rt_sufx_kw_must;
+struct Rt_sufx_code;
+struct Ropen_brace;
+struct Rclose_brace;
+struct Rlint;
+struct Rcweb_k;
+struct Rterminals_phrase:public yacco2::CAbs_lr1_sym {
+ Rterminals_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Ropen_par:public yacco2::CAbs_lr1_sym {
+ Ropen_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_par:public yacco2::CAbs_lr1_sym {
+ Rclose_par(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rparameters:public yacco2::CAbs_lr1_sym {
+ Rparameters(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename_phrase:public yacco2::CAbs_lr1_sym {
+ Rfilename_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rfilename:public yacco2::CAbs_lr1_sym {
+ Rfilename(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rfilename_id:public yacco2::CAbs_lr1_sym {
+ Rfilename_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_phrase:public yacco2::CAbs_lr1_sym {
+ Rnamespace_phrase(yacco2::Parser* P);
+ public:
+ void sr2();
+};
+
+struct Rnamespace:public yacco2::CAbs_lr1_sym {
+ Rnamespace(yacco2::Parser* P);
+ public:
+ void sr2();
+ void sr3();
+};
+
+struct Rnamespace_id:public yacco2::CAbs_lr1_sym {
+ Rnamespace_id(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_refs_phrase:public yacco2::CAbs_lr1_sym {
+ Rt_refs_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_refs_kw_code:public yacco2::CAbs_lr1_sym {
+ Rt_refs_kw_code(yacco2::Parser* P);
+ public:
+};
+
+struct Rt_refs_kw:public yacco2::CAbs_lr1_sym {
+ Rt_refs_kw(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_refs_kw_must:public yacco2::CAbs_lr1_sym {
+ Rt_refs_kw_must(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_refs_code:public yacco2::CAbs_lr1_sym {
+ Rt_refs_code(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_defs_phrase:public yacco2::CAbs_lr1_sym {
+ Rsym_defs_phrase(yacco2::Parser* P);
+ public:
+};
+
+struct Rsym_def:public yacco2::CAbs_lr1_sym {
+ Rsym_def(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rsym_def1s:public yacco2::CAbs_lr1_sym {
+ Rsym_def1s(yacco2::Parser* P);
+ public:
+};
+
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rsym_def1(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rsym_def1:public yacco2::CAbs_lr1_sym {
+ Rsym_def1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_sufx_phrase:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_phrase(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_sufx_kw_code:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw_code(yacco2::Parser* P);
+ public:
+};
+
+struct Rt_sufx_kw:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rt_sufx_kw_must:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_kw_must(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Rt_sufx_code:public yacco2::CAbs_lr1_sym {
+ Rt_sufx_code(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+struct Ropen_brace:public yacco2::CAbs_lr1_sym {
+ Ropen_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rclose_brace:public yacco2::CAbs_lr1_sym {
+ Rclose_brace(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rlint:public yacco2::CAbs_lr1_sym {
+ Rlint(yacco2::Parser* P);
+ public:
+};
+
+struct Rcweb_k:public yacco2::CAbs_lr1_sym {
+ Rcweb_k(yacco2::Parser* P);
+ void ctor();
+
+ AST* cweb_t_;
+
+ public:
+ void sr1();
+ void sr2();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_th.lex b/web/yacco2/compiler/grammars/terminals_phrase_th.lex
new file mode 100644
index 0000000000..1ccf8b6cf3
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_th.lex
@@ -0,0 +1,588 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: terminals_phrase_th.lex
+Dates: 24 May 2004
+Purpose: parse terminals phrase
+ The keeps its own local symbol table: map and list.
+ The terminal_def_phrase adds symbol to Yacco2's
+ global symbol table.
+Output: terminals_phrase
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |terminals_phrase_th| thread.\fbreak
+Parse terminals phrase. It goes thru the terminal definitions
+and keeps its own local symbol table: map and list.
+The |terminal_def_phrase| thread adds each symbol to \O2's
+global symbol table.
+It calls the common backend |term_def_ph| thread
+extractor of symbol definition.
+
+The only wrinkle is in the handling of pre / post amble directives
+|#terminal-refs| and |#terminals-sufx|.
+These directives are outside the normal containment within a rule, subrule,
+ or ``fsm'' entities.
+They come before or after the terminal definitions.
+Why the wrinkle? |cweb| introductory comments
+for these directives come before the directive declaration:
+just like syntax directed code directives.
+They could stymie the grammar writer by applying
+this approach to introductory comments for rules which
+is an error;
+|cweb| introductory comments for a
+rule or terminals of all colours comes between
+the key / name and just before their class constructs.\fbreak
+
+ \fbreak
+Example of a terminals vocabulary to parse:\fbreak
+\listing{"/usr/local/yacco2/diagrams+etc/Tsym.txt"}
+@/
+fsm
+(fsm-id "terminals_phrase_th.lex"
+,fsm-filename terminals_phrase_th
+,fsm-namespace NS_terminals_phrase_th
+,fsm-class Cterminals_phrase_th{
+ user-prefix-declaration
+#include "lint_balls.h"
+#include "cweb_or_c_k.h"
+#include "identifier.h"
+#include "term_def_ph.h"
+#include "c_string.h"
+#include "o2_sdc.h"
+ ***
+ user-declaration
+ public:
+ T_terminals_phrase* terminals_phrase_;
+ ***
+ op
+ if(terminals_phrase_ != 0){
+ delete terminals_phrase_;
+ terminals_phrase_ = 0;
+ }
+ terminals_phrase_ = new T_terminals_phrase;
+ terminals_phrase_->set_rc(*parser__->start_token__,__FILE__,__LINE__);
+ AST* t = new AST(*terminals_phrase_);
+ terminals_phrase_->phrase_tree(t);
+ ***
+ constructor
+ terminals_phrase_ = 0;
+ ***
+}
+,fsm-version "1.0",fsm-date "22 mar 2004",fsm-debug "false"
+,fsm-comments "Parse terminals vocabulary.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_terminals_phrase_th
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rterminals_phrase (){
+ -> Rlint
+ Ropen_par
+ Rparameters
+ Rclose_par
+ Rlint
+ Ropen_brace
+ Rt_refs_phrase
+ Rsym_defs_phrase
+ Rt_sufx_phrase
+ Rlint
+ Rclose_brace
+ {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->terminals_phrase_);
+ fsm->terminals_phrase_ = 0;
+ ***
+ }
+}
+
+Ropen_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_parenthesis;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Rparameters (){
+ -> Rlint
+ Rfilename_phrase Rlint
+ Rnamespace_phrase Rlint
+}
+
+Rfilename_phrase (){
+ -> Rfilename Rlint Rfilename_id
+}
+
+Rfilename (){
+ -> ||| "#file-name" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rfilename_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->filename_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_filename_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_phrase (){
+ -> "," Rlint Rnamespace Rlint Rnamespace_id
+ -> {
+ op
+ CAbs_lr1_sym* sym = new Err_no_comma_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace (){
+ -> ||| "#name-space" NS_identifier::TH_identifier
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rnamespace_id (){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->namespace_id(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_namespace_id_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rt_refs_phrase (){
+ -> Rlint Rcweb_k Rlint Rt_refs_kw_must Rt_refs_code {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_refs_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+ ***
+ }
+ -> Rlint Rt_refs_kw_code
+}
+
+Rt_refs_kw_code (){
+ -> Rt_refs_kw Rt_refs_code
+ ->
+}
+
+Rt_refs_kw
+/@
+Drop the keyword as it is not needed. So delete at pop time.
+Mark the directive as seen just in case it is repeated and
+so it's an error situation.
+@/
+(){
+ -> ||| "#terminals-refs" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rt_refs_kw_must
+/@
+Drop the keyword as it is not needed. So delete at pop time.
+Mark the directive as seen just in case it is repeated and
+so it's an error situation.
+@/
+(){
+ -> ||| "#terminals-refs" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_terminals_refs_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_terminals_refs_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rt_refs_code (){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_refs_code(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_defs_phrase (){
+ -> Rlint Rsym_def Rlint Rsym_def1s
+}
+
+Rsym_def (){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::t);
+ CAbs_lr1_sym* r =
+ fsm->terminals_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r == 0) return;
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ sf->p2__->set_auto_delete(true);
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_sym_defs_present;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Rsym_def1s (){
+ -> Rsym_def1 Rlint
+ -> Rsym_def1s Rsym_def1 Rlint
+ ->
+}
+
+Rsym_def1 (
+//lhs,
+parallel-control-monitor{
+/@
+ Note how the arbitration is done: list check.
+ In this grammar, at most 2 terminals can be returned.
+ When 2 terminals are returned, one is in error and the other is
+ a result from the terminals-sufx. This is either the
+ syntax-code or an error: eg no code present.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ for(i=1;i<=ie;++i){
+ if(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__
+ != NS_yacco2_T_enum::T_Enum::T_Err_no_terminal_key_present_){
+ goto arbitrated_parameter;
+ }
+ }
+ ***
+ }
+){
+ -> ||| "terminal-def" NS_term_def_ph::TH_term_def_ph {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ sf->p2__->classification(T_terminal_def::t);
+ CAbs_lr1_sym* r = fsm->terminals_phrase_->add_t_to_alphabet(sf->p2__,rule_info__.parser__);
+ if(r != 0){
+ RSVP(r);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ ***
+ }
+ -> ||| "no key-value present in definition" NULL {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ RSVP(fsm->terminals_phrase_);
+ fsm->terminals_phrase_ = 0;
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ using namespace NS_yacco2_T_enum;
+ int id = sf->p2__->enumerated_id__;
+ if(id >= T_Enum::start_ERR && id <= T_Enum::end_ERR){
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ }else{
+ CAbs_lr1_sym* sym = new Err_not_a_terminal_definition;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ }
+ ***
+ }
+}
+
+Rt_sufx_phrase (){
+ -> Rlint Rcweb_k Rt_sufx_kw_must Rt_sufx_code {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_sufx_code()
+ ->add_cweb_marker(sf->p2__->cweb_t_);
+ ***
+ }
+ -> Rlint Rt_sufx_kw_code
+}
+
+Rt_sufx_kw_code
+/@
+If a |cweb| comment is seen, deposit it in the
+directive's syntax directed code.
+@/
+(){
+ -> Rt_sufx_kw Rt_sufx_code
+ ->
+}
+
+Rt_sufx_kw
+/@
+Drop keyword as it's presence is indicated elsewhere.
+So pop the cork and let the good times roll.
+@/
+
+(){
+ -> ||| "#terminals-sufx" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+}
+
+Rt_sufx_kw_must
+/@
+Drop keyword as it's presence is indicated elsewhere.
+So pop the cork and let the good times roll.
+@/
+
+(){
+ -> ||| "#terminals-sufx" NS_identifier::TH_identifier {
+ op
+ sf->p2__->set_auto_delete(true);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_terminals_sufx_kw;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_missing_terminals_sufx_kw;
+ sym->set_rc(*sf->p1__,__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ ***
+ }
+}
+
+Rt_sufx_code (){
+ -> ||| "syntax-code" NS_o2_sdc::TH_o2_sdc {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ fsm->terminals_phrase_->terminals_sufx_code(sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*sf->p2__,__FILE__,__LINE__);
+ RSVP(sym);
+ sf->p2__->set_auto_delete(true);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_syntax_code_present;
+ sym->set_rc(*rule_info__.parser__->start_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+
+Ropen_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_open_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace (){
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new Err_no_close_brace;
+ sym->set_rc(*rule_info__.parser__->current_token(),__FILE__,__LINE__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+ -> "}"
+}
+
+Rlint (){
+ -> ||| lint NS_lint_balls::TH_lint_balls
+ ->
+}
+
+Rcweb_k (
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+ }
+){
+
+ -> ||| "cweb-comment" NS_cweb_or_c_k::TH_cweb_or_c_k {
+ op
+ Cterminals_phrase_th* fsm = (Cterminals_phrase_th*)rule_info__.parser__->fsm_tbl__;
+ T_cweb_comment* k = sf->p2__;
+ AST* cwebk_t_ = new AST(*k);
+ cweb_t_ = new AST();
+ T_cweb_marker* cw = new T_cweb_marker(cweb_t_);
+ cw->set_rc(*k,__FILE__,__LINE__);
+ cweb_t_ = cw->ast();
+ AST::set_content(*cweb_t_,*cw);
+ AST::join_pts(*cweb_t_,*cwebk_t_);
+ ***
+ }
+ -> ||| |?| NULL {
+ op
+ RSVP(sf->p2__);
+ rule_info__.parser__->set_stop_parse(true);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_thsym.cpp b/web/yacco2/compiler/grammars/terminals_phrase_thsym.cpp
new file mode 100644
index 0000000000..a355c76fb0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_thsym.cpp
@@ -0,0 +1,944 @@
+/*
+ File: terminals_phrase_thsym.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase_th;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_terminals_phrase_th::TH_terminals_phrase_th(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_terminals_phrase_th;
+ NS_terminals_phrase_th::Cterminals_phrase_th Cterminals_phrase_th_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cterminals_phrase_th_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_terminals_phrase_th::PROC_TH_terminals_phrase_th(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_terminals_phrase_th";
+ static bool one_time(false);
+ static NS_terminals_phrase_th::Cterminals_phrase_th* NS_terminals_phrase_th_Cterminals_phrase_th_(0);// parallel-parser's fsm table
+ static Parser* NS_terminals_phrase_th_Cterminals_phrase_th_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_terminals_phrase_th_Cterminals_phrase_th_ = new NS_terminals_phrase_th::Cterminals_phrase_th();// parallel-parser's fsm table
+ NS_terminals_phrase_th_Cterminals_phrase_th_parser = new Parser(*NS_terminals_phrase_th_Cterminals_phrase_th_,Caller_pp);
+ }
+ proc_parser = NS_terminals_phrase_th_Cterminals_phrase_th_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cterminals_phrase_th::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rterminals_phrase_:{
+ Rterminals_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterminals_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterminals_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 11;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_par_:{
+ Ropen_par* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_par_:{
+ Rclose_par* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_par(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_par*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rparameters_:{
+ Rparameters* sym;
+ if(re->rule_ == 0){
+ sym = new Rparameters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rparameters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rfilename_phrase_:{
+ Rfilename_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_:{
+ Rfilename* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rfilename_id_:{
+ Rfilename_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rfilename_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rfilename_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rnamespace_phrase_:{
+ Rnamespace_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ sym->sr2();
+ return;}
+ case rhs1_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_:{
+ Rnamespace* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rnamespace_id_:{
+ Rnamespace_id* sym;
+ if(re->rule_ == 0){
+ sym = new Rnamespace_id(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnamespace_id*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_refs_phrase_:{
+ Rt_refs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_refs_phrase_:{
+ Rt_refs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rt_refs_kw_code_:{
+ Rt_refs_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rt_refs_kw_code_:{
+ Rt_refs_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rt_refs_kw_:{
+ Rt_refs_kw* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rt_refs_kw_must_:{
+ Rt_refs_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_refs_kw_must_:{
+ Rt_refs_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_refs_kw_must_:{
+ Rt_refs_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_refs_code_:{
+ Rt_refs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_refs_code_:{
+ Rt_refs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_refs_code_:{
+ Rt_refs_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_refs_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_refs_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_defs_phrase_:{
+ Rsym_defs_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_defs_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_defs_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def_:{
+ Rsym_def* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rsym_def1s_:{
+ Rsym_def1s* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1s(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1s*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rsym_def1_:{
+ Rsym_def1* sym;
+ if(re->rule_ == 0){
+ sym = new Rsym_def1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rsym_def1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_sufx_phrase_:{
+ Rt_sufx_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_phrase_:{
+ Rt_sufx_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rt_sufx_kw_code_:{
+ Rt_sufx_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rt_sufx_kw_code_:{
+ Rt_sufx_kw_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rt_sufx_kw_:{
+ Rt_sufx_kw* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_sufx_kw_must_:{
+ Rt_sufx_kw_must* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_kw_must(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_kw_must*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rt_sufx_code_:{
+ Rt_sufx_code* sym;
+ if(re->rule_ == 0){
+ sym = new Rt_sufx_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rt_sufx_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ case rhs1_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Ropen_brace_:{
+ Ropen_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Ropen_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ropen_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rclose_brace_:{
+ Rclose_brace* sym;
+ if(re->rule_ == 0){
+ sym = new Rclose_brace(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rclose_brace*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rlint_:{
+ Rlint* sym;
+ if(re->rule_ == 0){
+ sym = new Rlint(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlint*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rcweb_k_:{
+ Rcweb_k* sym;
+ if(re->rule_ == 0){
+ sym = new Rcweb_k(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rcweb_k*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/terminals_phrase_thtbl.cpp b/web/yacco2/compiler/grammars/terminals_phrase_thtbl.cpp
new file mode 100644
index 0000000000..a443f144d9
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrase_thtbl.cpp
@@ -0,0 +1,2202 @@
+/*
+ File: terminals_phrase_thtbl.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase_th.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase_th;// grammar's ns
+// first set terminals
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_bracket
+// raw_close_bracket
+// raw_comma
+// raw_open_brace
+// raw_close_brace
+yacco2::UCHAR LA1_Cterminals_phrase_th[] ={
+3
+,0,17
+,6,19
+,16,40
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+yacco2::UCHAR LA2_Cterminals_phrase_th[] ={
+1
+,0,17
+};
+// LR1_questionable_shift_operator
+// raw_open_brace
+yacco2::UCHAR LA3_Cterminals_phrase_th[] ={
+2
+,0,1
+,16,8
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_brace
+yacco2::UCHAR LA4_Cterminals_phrase_th[] ={
+2
+,0,17
+,16,32
+};
+// LR1_questionable_shift_operator
+// raw_close_brace
+yacco2::UCHAR LA5_Cterminals_phrase_th[] ={
+2
+,0,1
+,16,32
+};
+// LR1_eolr
+yacco2::UCHAR LA6_Cterminals_phrase_th[] ={
+1
+,0,4
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+// raw_comma
+yacco2::UCHAR LA7_Cterminals_phrase_th[] ={
+2
+,0,17
+,6,18
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_close_bracket
+yacco2::UCHAR LA8_Cterminals_phrase_th[] ={
+2
+,0,17
+,6,2
+};
+// LR1_questionable_shift_operator
+// raw_close_bracket
+yacco2::UCHAR LA9_Cterminals_phrase_th[] ={
+2
+,0,1
+,6,2
+};
+// LR1_questionable_shift_operator
+// LR1_reduce_operator
+// raw_open_brace
+yacco2::UCHAR LA10_Cterminals_phrase_th[] ={
+2
+,0,17
+,16,8
+};
+extern yacco2::State S1_Cterminals_phrase_th;
+extern yacco2::State S2_Cterminals_phrase_th;
+struct S2ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Cterminals_phrase_th S2tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_lint_balls
+};
+extern yacco2::State S3_Cterminals_phrase_th;
+extern yacco2::State S4_Cterminals_phrase_th;
+extern yacco2::State S5_Cterminals_phrase_th;
+extern yacco2::State S6_Cterminals_phrase_th;
+extern yacco2::State S7_Cterminals_phrase_th;
+extern yacco2::State S8_Cterminals_phrase_th;
+extern yacco2::State S9_Cterminals_phrase_th;
+extern yacco2::State S10_Cterminals_phrase_th;
+extern yacco2::State S11_Cterminals_phrase_th;
+extern yacco2::State S12_Cterminals_phrase_th;
+extern yacco2::State S13_Cterminals_phrase_th;
+extern yacco2::State S14_Cterminals_phrase_th;
+extern yacco2::State S15_Cterminals_phrase_th;
+extern yacco2::State S16_Cterminals_phrase_th;
+extern yacco2::State S17_Cterminals_phrase_th;
+extern yacco2::State S18_Cterminals_phrase_th;
+extern yacco2::State S19_Cterminals_phrase_th;
+extern yacco2::State S20_Cterminals_phrase_th;
+extern yacco2::State S21_Cterminals_phrase_th;
+struct S21ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S21ttd_Cterminals_phrase_th S21tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S22_Cterminals_phrase_th;
+extern yacco2::State S23_Cterminals_phrase_th;
+extern yacco2::State S24_Cterminals_phrase_th;
+extern yacco2::State S25_Cterminals_phrase_th;
+extern yacco2::State S26_Cterminals_phrase_th;
+extern yacco2::State S27_Cterminals_phrase_th;
+extern yacco2::State S28_Cterminals_phrase_th;
+extern yacco2::State S29_Cterminals_phrase_th;
+extern yacco2::State S30_Cterminals_phrase_th;
+extern yacco2::State S31_Cterminals_phrase_th;
+struct S31ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S31ttd_Cterminals_phrase_th S31tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S32_Cterminals_phrase_th;
+extern yacco2::State S33_Cterminals_phrase_th;
+extern yacco2::State S34_Cterminals_phrase_th;
+extern yacco2::State S35_Cterminals_phrase_th;
+extern yacco2::State S36_Cterminals_phrase_th;
+extern yacco2::State S37_Cterminals_phrase_th;
+extern yacco2::State S38_Cterminals_phrase_th;
+extern yacco2::State S39_Cterminals_phrase_th;
+extern yacco2::State S40_Cterminals_phrase_th;
+struct S40ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S40ttd_Cterminals_phrase_th S40tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S41_Cterminals_phrase_th;
+extern yacco2::State S42_Cterminals_phrase_th;
+extern yacco2::State S43_Cterminals_phrase_th;
+extern yacco2::State S44_Cterminals_phrase_th;
+extern yacco2::State S45_Cterminals_phrase_th;
+extern yacco2::State S46_Cterminals_phrase_th;
+extern yacco2::State S47_Cterminals_phrase_th;
+extern yacco2::State S48_Cterminals_phrase_th;
+extern yacco2::State S49_Cterminals_phrase_th;
+struct S49ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S49ttd_Cterminals_phrase_th S49tt_Cterminals_phrase_th = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S50_Cterminals_phrase_th;
+extern yacco2::State S51_Cterminals_phrase_th;
+extern yacco2::State S52_Cterminals_phrase_th;
+extern yacco2::State S53_Cterminals_phrase_th;
+extern yacco2::State S54_Cterminals_phrase_th;
+extern yacco2::State S55_Cterminals_phrase_th;
+extern yacco2::State S56_Cterminals_phrase_th;
+struct S56ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S56ttd_Cterminals_phrase_th S56tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S57_Cterminals_phrase_th;
+extern yacco2::State S58_Cterminals_phrase_th;
+extern yacco2::State S59_Cterminals_phrase_th;
+extern yacco2::State S60_Cterminals_phrase_th;
+extern yacco2::State S61_Cterminals_phrase_th;
+extern yacco2::State S62_Cterminals_phrase_th;
+extern yacco2::State S63_Cterminals_phrase_th;
+extern yacco2::State S64_Cterminals_phrase_th;
+extern yacco2::State S65_Cterminals_phrase_th;
+extern yacco2::State S66_Cterminals_phrase_th;
+struct S66ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S66ttd_Cterminals_phrase_th S66tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S67_Cterminals_phrase_th;
+extern yacco2::State S68_Cterminals_phrase_th;
+extern yacco2::State S69_Cterminals_phrase_th;
+extern yacco2::State S70_Cterminals_phrase_th;
+extern yacco2::State S71_Cterminals_phrase_th;
+struct S71ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S71ttd_Cterminals_phrase_th S71tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,AR_Rsym_def1 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_term_def_ph
+};
+extern yacco2::State S72_Cterminals_phrase_th;
+extern yacco2::State S73_Cterminals_phrase_th;
+extern yacco2::State S74_Cterminals_phrase_th;
+extern yacco2::State S75_Cterminals_phrase_th;
+extern yacco2::State S76_Cterminals_phrase_th;
+extern yacco2::State S77_Cterminals_phrase_th;
+extern yacco2::State S78_Cterminals_phrase_th;
+extern yacco2::State S79_Cterminals_phrase_th;
+extern yacco2::State S80_Cterminals_phrase_th;
+extern yacco2::State S81_Cterminals_phrase_th;
+struct S81ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S81ttd_Cterminals_phrase_th S81tt_Cterminals_phrase_th = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+};
+extern yacco2::State S82_Cterminals_phrase_th;
+extern yacco2::State S83_Cterminals_phrase_th;
+extern yacco2::State S84_Cterminals_phrase_th;
+extern yacco2::State S85_Cterminals_phrase_th;
+extern yacco2::State S86_Cterminals_phrase_th;
+struct S86ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S86ttd_Cterminals_phrase_th S86tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_o2_sdc
+};
+extern yacco2::State S87_Cterminals_phrase_th;
+extern yacco2::State S88_Cterminals_phrase_th;
+extern yacco2::State S89_Cterminals_phrase_th;
+extern yacco2::State S90_Cterminals_phrase_th;
+extern yacco2::State S91_Cterminals_phrase_th;
+extern yacco2::State S92_Cterminals_phrase_th;
+extern yacco2::State S93_Cterminals_phrase_th;
+extern yacco2::State S94_Cterminals_phrase_th;
+struct S94ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S94ttd_Cterminals_phrase_th S94tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S95_Cterminals_phrase_th;
+extern yacco2::State S96_Cterminals_phrase_th;
+extern yacco2::State S97_Cterminals_phrase_th;
+extern yacco2::State S98_Cterminals_phrase_th;
+struct S98ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S98ttd_Cterminals_phrase_th S98tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S99_Cterminals_phrase_th;
+extern yacco2::State S100_Cterminals_phrase_th;
+extern yacco2::State S101_Cterminals_phrase_th;
+extern yacco2::State S102_Cterminals_phrase_th;
+struct S102ttd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S102ttd_Cterminals_phrase_th S102tt_Cterminals_phrase_th = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_identifier
+};
+extern yacco2::State S103_Cterminals_phrase_th;
+extern yacco2::State S104_Cterminals_phrase_th;
+struct S1std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cterminals_phrase_th S1st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cterminals_phrase_th} // accept sym: Rterminals_phrase
+ ,{595,(State*)&S4_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S1rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cterminals_phrase_th S1rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S1_Cterminals_phrase_th = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S1st_Cterminals_phrase_th,(Reduce_tbl*)&S1rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S2std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Cterminals_phrase_th S2st_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {375,(State*)&S3_Cterminals_phrase_th} // shift sym: T_lint
+ }// end of shift table
+};
+yacco2::State S2_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cterminals_phrase_th,0,0,0,0};
+struct S3rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cterminals_phrase_th S3rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S3_Cterminals_phrase_th = //State's vectored into symbol: "lint"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cterminals_phrase_th,0,0,0};
+struct S4std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cterminals_phrase_th S4st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S17_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{48,(State*)&S18_Cterminals_phrase_th} // shift sym: raw_open_bracket
+ ,{570,(State*)&S5_Cterminals_phrase_th} // shift sym: Ropen_par
+ }// end of shift table
+};
+yacco2::Shift_entry S4qse_Cterminals_phrase_th = {0,(State*)&S17_Cterminals_phrase_th};
+yacco2::State S4_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S4qse_Cterminals_phrase_th
+};
+struct S5std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Cterminals_phrase_th S5st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S6_Cterminals_phrase_th} // shift sym: Rparameters
+ ,{595,(State*)&S19_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S5rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cterminals_phrase_th S5rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S5_Cterminals_phrase_th = //State's vectored into symbol: "Ropen_par"
+{5
+,(Shift_entry*)&S5pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S5st_Cterminals_phrase_th,(Reduce_tbl*)&S5rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S6std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cterminals_phrase_th S6st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S44_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{49,(State*)&S45_Cterminals_phrase_th} // shift sym: raw_close_bracket
+ ,{571,(State*)&S7_Cterminals_phrase_th} // shift sym: Rclose_par
+ }// end of shift table
+};
+yacco2::Shift_entry S6qse_Cterminals_phrase_th = {0,(State*)&S44_Cterminals_phrase_th};
+yacco2::State S6_Cterminals_phrase_th = //State's vectored into symbol: "Rparameters"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S6qse_Cterminals_phrase_th
+};
+struct S7std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Cterminals_phrase_th S7st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S8_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S7pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S7rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cterminals_phrase_th S7rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S7_Cterminals_phrase_th = //State's vectored into symbol: "Rclose_par"
+{7
+,(Shift_entry*)&S7pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S7st_Cterminals_phrase_th,(Reduce_tbl*)&S7rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S8std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S8std_Cterminals_phrase_th S8st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S46_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{131,(State*)&S47_Cterminals_phrase_th} // shift sym: raw_open_brace
+ ,{593,(State*)&S9_Cterminals_phrase_th} // shift sym: Ropen_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S8qse_Cterminals_phrase_th = {0,(State*)&S46_Cterminals_phrase_th};
+yacco2::State S8_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S8qse_Cterminals_phrase_th
+};
+struct S9std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S9std_Cterminals_phrase_th S9st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{579,(State*)&S10_Cterminals_phrase_th} // shift sym: Rt_refs_phrase
+ ,{595,(State*)&S48_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S9pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S9rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cterminals_phrase_th S9rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S9_Cterminals_phrase_th = //State's vectored into symbol: "Ropen_brace"
+{9
+,(Shift_entry*)&S9pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S9st_Cterminals_phrase_th,(Reduce_tbl*)&S9rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S10std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Cterminals_phrase_th S10st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{584,(State*)&S11_Cterminals_phrase_th} // shift sym: Rsym_defs_phrase
+ ,{595,(State*)&S64_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S10rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Cterminals_phrase_th S10rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S10_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_phrase"
+{10
+,(Shift_entry*)&S10pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S10st_Cterminals_phrase_th,(Reduce_tbl*)&S10rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S11std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S11std_Cterminals_phrase_th S11st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{588,(State*)&S12_Cterminals_phrase_th} // shift sym: Rt_sufx_phrase
+ ,{595,(State*)&S80_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S11pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S11rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cterminals_phrase_th S11rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S11_Cterminals_phrase_th = //State's vectored into symbol: "Rsym_defs_phrase"
+{11
+,(Shift_entry*)&S11pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S11st_Cterminals_phrase_th,(Reduce_tbl*)&S11rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S12std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S12std_Cterminals_phrase_th S12st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S13_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S12pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S12rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cterminals_phrase_th S12rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S12_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_phrase"
+{12
+,(Shift_entry*)&S12pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S12st_Cterminals_phrase_th,(Reduce_tbl*)&S12rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S13std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Cterminals_phrase_th S13st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S14_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{133,(State*)&S15_Cterminals_phrase_th} // shift sym: raw_close_brace
+ ,{594,(State*)&S16_Cterminals_phrase_th} // shift sym: Rclose_brace
+ }// end of shift table
+};
+yacco2::Shift_entry S13qse_Cterminals_phrase_th = {0,(State*)&S14_Cterminals_phrase_th};
+yacco2::State S13_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S13qse_Cterminals_phrase_th
+};
+struct S14rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cterminals_phrase_th S14rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S14_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cterminals_phrase_th,0,0,0};
+struct S15rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cterminals_phrase_th S15rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rclose_brace_}
+ }// end of reduce table
+};
+yacco2::State S15_Cterminals_phrase_th = //State's vectored into symbol: "}"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cterminals_phrase_th,0,0,0};
+struct S16rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cterminals_phrase_th S16rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rterminals_phrase_}
+ }// end of reduce table
+};
+yacco2::State S16_Cterminals_phrase_th = //State's vectored into symbol: "Rclose_brace"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cterminals_phrase_th,0,0,0};
+struct S17rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Cterminals_phrase_th S17rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S17_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Cterminals_phrase_th,0,0,0};
+struct S18rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cterminals_phrase_th S18rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Ropen_par_}
+ }// end of reduce table
+};
+yacco2::State S18_Cterminals_phrase_th = //State's vectored into symbol: "("
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cterminals_phrase_th,0,0,0};
+struct S19std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S19std_Cterminals_phrase_th S19st_Cterminals_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S20_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S21_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{573,(State*)&S24_Cterminals_phrase_th} // shift sym: Rfilename_phrase
+ ,{574,(State*)&S37_Cterminals_phrase_th} // shift sym: Rfilename
+ }// end of shift table
+};
+yacco2::Shift_entry S19pse_Cterminals_phrase_th = {3,(State*)&S21_Cterminals_phrase_th};
+yacco2::Shift_entry S19qse_Cterminals_phrase_th = {0,(State*)&S20_Cterminals_phrase_th};
+yacco2::State S19_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{19
+,(Shift_entry*)&S19pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S19st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S21tt_Cterminals_phrase_th,0,(Shift_entry*)&S19qse_Cterminals_phrase_th
+};
+struct S20rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cterminals_phrase_th S20rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S20_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cterminals_phrase_th,0,0,0};
+struct S21std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S21std_Cterminals_phrase_th S21st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S22_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{303,(State*)&S23_Cterminals_phrase_th} // shift sym: T_file_name
+ }// end of shift table
+};
+yacco2::Shift_entry S21qse_Cterminals_phrase_th = {0,(State*)&S22_Cterminals_phrase_th};
+yacco2::State S21_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S21qse_Cterminals_phrase_th
+};
+struct S22rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Cterminals_phrase_th S22rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S22_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Cterminals_phrase_th,0,0,0};
+struct S23rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cterminals_phrase_th S23rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rfilename_}
+ }// end of reduce table
+};
+yacco2::State S23_Cterminals_phrase_th = //State's vectored into symbol: "#file-name"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cterminals_phrase_th,0,0,0};
+struct S24std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S24std_Cterminals_phrase_th S24st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S25_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S24pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S24rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Cterminals_phrase_th S24rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S24_Cterminals_phrase_th = //State's vectored into symbol: "Rfilename_phrase"
+{24
+,(Shift_entry*)&S24pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S24st_Cterminals_phrase_th,(Reduce_tbl*)&S24rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S25std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S25std_Cterminals_phrase_th S25st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {52,(State*)&S26_Cterminals_phrase_th} // shift sym: raw_comma
+ ,{576,(State*)&S35_Cterminals_phrase_th} // shift sym: Rnamespace_phrase
+ }// end of shift table
+};
+struct S25rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cterminals_phrase_th S25rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S25_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Cterminals_phrase_th,(Reduce_tbl*)&S25rt_Cterminals_phrase_th,0,0,0};
+struct S26std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S26std_Cterminals_phrase_th S26st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S27_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S26pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S26rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Cterminals_phrase_th S26rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S26_Cterminals_phrase_th = //State's vectored into symbol: ","
+{26
+,(Shift_entry*)&S26pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S26st_Cterminals_phrase_th,(Reduce_tbl*)&S26rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S27std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S27std_Cterminals_phrase_th S27st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S93_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S94_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{577,(State*)&S28_Cterminals_phrase_th} // shift sym: Rnamespace
+ }// end of shift table
+};
+yacco2::Shift_entry S27pse_Cterminals_phrase_th = {3,(State*)&S94_Cterminals_phrase_th};
+yacco2::Shift_entry S27qse_Cterminals_phrase_th = {0,(State*)&S93_Cterminals_phrase_th};
+yacco2::State S27_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{27
+,(Shift_entry*)&S27pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S27st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S94tt_Cterminals_phrase_th,0,(Shift_entry*)&S27qse_Cterminals_phrase_th
+};
+struct S28std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S28std_Cterminals_phrase_th S28st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S29_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S28pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S28rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cterminals_phrase_th S28rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S28_Cterminals_phrase_th = //State's vectored into symbol: "Rnamespace"
+{28
+,(Shift_entry*)&S28pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S28st_Cterminals_phrase_th,(Reduce_tbl*)&S28rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S29std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S29std_Cterminals_phrase_th S29st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S30_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S31_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{578,(State*)&S34_Cterminals_phrase_th} // shift sym: Rnamespace_id
+ }// end of shift table
+};
+yacco2::Shift_entry S29pse_Cterminals_phrase_th = {3,(State*)&S31_Cterminals_phrase_th};
+yacco2::Shift_entry S29qse_Cterminals_phrase_th = {0,(State*)&S30_Cterminals_phrase_th};
+yacco2::State S29_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{29
+,(Shift_entry*)&S29pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S29st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S31tt_Cterminals_phrase_th,0,(Shift_entry*)&S29qse_Cterminals_phrase_th
+};
+struct S30rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cterminals_phrase_th S30rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S30_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cterminals_phrase_th,0,0,0};
+struct S31std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S31std_Cterminals_phrase_th S31st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S32_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S33_Cterminals_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S31qse_Cterminals_phrase_th = {0,(State*)&S32_Cterminals_phrase_th};
+yacco2::State S31_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S31qse_Cterminals_phrase_th
+};
+struct S32rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cterminals_phrase_th S32rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S32_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cterminals_phrase_th,0,0,0};
+struct S33rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cterminals_phrase_th S33rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rnamespace_id_}
+ }// end of reduce table
+};
+yacco2::State S33_Cterminals_phrase_th = //State's vectored into symbol: "identifier"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cterminals_phrase_th,0,0,0};
+struct S34rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Cterminals_phrase_th S34rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA8_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rnamespace_phrase_}
+ }// end of reduce table
+};
+yacco2::State S34_Cterminals_phrase_th = //State's vectored into symbol: "Rnamespace_id"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Cterminals_phrase_th,0,0,0};
+struct S35std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S35std_Cterminals_phrase_th S35st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S36_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S35pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S35rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Cterminals_phrase_th S35rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S35_Cterminals_phrase_th = //State's vectored into symbol: "Rnamespace_phrase"
+{35
+,(Shift_entry*)&S35pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S35st_Cterminals_phrase_th,(Reduce_tbl*)&S35rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S36rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cterminals_phrase_th S36rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA9_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rparameters_}
+ }// end of reduce table
+};
+yacco2::State S36_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cterminals_phrase_th,0,0,0};
+struct S37std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S37std_Cterminals_phrase_th S37st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S38_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S37pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S37rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cterminals_phrase_th S37rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S37_Cterminals_phrase_th = //State's vectored into symbol: "Rfilename"
+{37
+,(Shift_entry*)&S37pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S37st_Cterminals_phrase_th,(Reduce_tbl*)&S37rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S38std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S38std_Cterminals_phrase_th S38st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S39_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S40_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{575,(State*)&S43_Cterminals_phrase_th} // shift sym: Rfilename_id
+ }// end of shift table
+};
+yacco2::Shift_entry S38pse_Cterminals_phrase_th = {3,(State*)&S40_Cterminals_phrase_th};
+yacco2::Shift_entry S38qse_Cterminals_phrase_th = {0,(State*)&S39_Cterminals_phrase_th};
+yacco2::State S38_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{38
+,(Shift_entry*)&S38pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S38st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S40tt_Cterminals_phrase_th,0,(Shift_entry*)&S38qse_Cterminals_phrase_th
+};
+struct S39rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Cterminals_phrase_th S39rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S39_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Cterminals_phrase_th,0,0,0};
+struct S40std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S40std_Cterminals_phrase_th S40st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S41_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{279,(State*)&S42_Cterminals_phrase_th} // shift sym: T_identifier
+ }// end of shift table
+};
+yacco2::Shift_entry S40qse_Cterminals_phrase_th = {0,(State*)&S41_Cterminals_phrase_th};
+yacco2::State S40_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{40
+,0,0,0,0,(Shift_tbl*)&S40st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S40qse_Cterminals_phrase_th
+};
+struct S41rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Cterminals_phrase_th S41rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S41_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Cterminals_phrase_th,0,0,0};
+struct S42rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Cterminals_phrase_th S42rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rfilename_id_}
+ }// end of reduce table
+};
+yacco2::State S42_Cterminals_phrase_th = //State's vectored into symbol: "identifier"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Cterminals_phrase_th,0,0,0};
+struct S43rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Cterminals_phrase_th S43rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rfilename_phrase_}
+ }// end of reduce table
+};
+yacco2::State S43_Cterminals_phrase_th = //State's vectored into symbol: "Rfilename_id"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Cterminals_phrase_th,0,0,0};
+struct S44rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Cterminals_phrase_th S44rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S44_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Cterminals_phrase_th,0,0,0};
+struct S45rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Cterminals_phrase_th S45rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA10_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rclose_par_}
+ }// end of reduce table
+};
+yacco2::State S45_Cterminals_phrase_th = //State's vectored into symbol: ")"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Cterminals_phrase_th,0,0,0};
+struct S46rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Cterminals_phrase_th S46rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S46_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Cterminals_phrase_th,0,0,0};
+struct S47rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Cterminals_phrase_th S47rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Ropen_brace_}
+ }// end of reduce table
+};
+yacco2::State S47_Cterminals_phrase_th = //State's vectored into symbol: "{"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Cterminals_phrase_th,0,0,0};
+struct S48std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S48std_Cterminals_phrase_th S48st_Cterminals_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S49_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{580,(State*)&S53_Cterminals_phrase_th} // shift sym: Rt_refs_kw_code
+ ,{581,(State*)&S54_Cterminals_phrase_th} // shift sym: Rt_refs_kw
+ ,{596,(State*)&S60_Cterminals_phrase_th} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S48pse_Cterminals_phrase_th = {3,(State*)&S49_Cterminals_phrase_th};
+struct S48rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Cterminals_phrase_th S48rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_refs_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S48_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{48
+,(Shift_entry*)&S48pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S48st_Cterminals_phrase_th,(Reduce_tbl*)&S48rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S49tt_Cterminals_phrase_th,0,0};
+struct S49std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S49std_Cterminals_phrase_th S49st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S50_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{319,(State*)&S51_Cterminals_phrase_th} // shift sym: T_terminals_refs
+ ,{372,(State*)&S52_Cterminals_phrase_th} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S49qse_Cterminals_phrase_th = {0,(State*)&S50_Cterminals_phrase_th};
+yacco2::State S49_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{49
+,0,0,0,0,(Shift_tbl*)&S49st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S49qse_Cterminals_phrase_th
+};
+struct S50rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Cterminals_phrase_th S50rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S50_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Cterminals_phrase_th,0,0,0};
+struct S51rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Cterminals_phrase_th S51rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_refs_kw_}
+ }// end of reduce table
+};
+yacco2::State S51_Cterminals_phrase_th = //State's vectored into symbol: "#terminals-refs"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Cterminals_phrase_th,0,0,0};
+struct S52rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Cterminals_phrase_th S52rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rcweb_k_}
+ }// end of reduce table
+};
+yacco2::State S52_Cterminals_phrase_th = //State's vectored into symbol: "cweb-comment"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Cterminals_phrase_th,0,0,0};
+struct S53rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Cterminals_phrase_th S53rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_refs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S53_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_kw_code"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Cterminals_phrase_th,0,0,0};
+struct S54std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S54std_Cterminals_phrase_th S54st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S55_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S56_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S59_Cterminals_phrase_th} // shift sym: Rt_refs_code
+ }// end of shift table
+};
+yacco2::Shift_entry S54pse_Cterminals_phrase_th = {3,(State*)&S56_Cterminals_phrase_th};
+yacco2::Shift_entry S54qse_Cterminals_phrase_th = {0,(State*)&S55_Cterminals_phrase_th};
+yacco2::State S54_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_kw"
+{54
+,(Shift_entry*)&S54pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S54st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S56tt_Cterminals_phrase_th,0,(Shift_entry*)&S54qse_Cterminals_phrase_th
+};
+struct S55rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Cterminals_phrase_th S55rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rt_refs_code_}
+ }// end of reduce table
+};
+yacco2::State S55_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Cterminals_phrase_th,0,0,0};
+struct S56std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S56std_Cterminals_phrase_th S56st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S57_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S58_Cterminals_phrase_th} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S56qse_Cterminals_phrase_th = {0,(State*)&S57_Cterminals_phrase_th};
+yacco2::State S56_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{56
+,0,0,0,0,(Shift_tbl*)&S56st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S56qse_Cterminals_phrase_th
+};
+struct S57rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Cterminals_phrase_th S57rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_refs_code_}
+ }// end of reduce table
+};
+yacco2::State S57_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Cterminals_phrase_th,0,0,0};
+struct S58rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Cterminals_phrase_th S58rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_refs_code_}
+ }// end of reduce table
+};
+yacco2::State S58_Cterminals_phrase_th = //State's vectored into symbol: "syntax-code"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Cterminals_phrase_th,0,0,0};
+struct S59rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Cterminals_phrase_th S59rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_refs_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S59_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_code"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Cterminals_phrase_th,0,0,0};
+struct S60std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S60std_Cterminals_phrase_th S60st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S61_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S60pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S60rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Cterminals_phrase_th S60rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S60_Cterminals_phrase_th = //State's vectored into symbol: "Rcweb_k"
+{60
+,(Shift_entry*)&S60pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S60st_Cterminals_phrase_th,(Reduce_tbl*)&S60rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S61std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S61std_Cterminals_phrase_th S61st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S97_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S98_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{582,(State*)&S62_Cterminals_phrase_th} // shift sym: Rt_refs_kw_must
+ }// end of shift table
+};
+yacco2::Shift_entry S61pse_Cterminals_phrase_th = {3,(State*)&S98_Cterminals_phrase_th};
+yacco2::Shift_entry S61qse_Cterminals_phrase_th = {0,(State*)&S97_Cterminals_phrase_th};
+yacco2::State S61_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{61
+,(Shift_entry*)&S61pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S61st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S98tt_Cterminals_phrase_th,0,(Shift_entry*)&S61qse_Cterminals_phrase_th
+};
+struct S62std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S62std_Cterminals_phrase_th S62st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S55_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S56_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{583,(State*)&S63_Cterminals_phrase_th} // shift sym: Rt_refs_code
+ }// end of shift table
+};
+yacco2::Shift_entry S62pse_Cterminals_phrase_th = {3,(State*)&S56_Cterminals_phrase_th};
+yacco2::Shift_entry S62qse_Cterminals_phrase_th = {0,(State*)&S55_Cterminals_phrase_th};
+yacco2::State S62_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_kw_must"
+{62
+,(Shift_entry*)&S62pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S62st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S56tt_Cterminals_phrase_th,0,(Shift_entry*)&S62qse_Cterminals_phrase_th
+};
+struct S63rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S63rtd_Cterminals_phrase_th S63rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_refs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S63_Cterminals_phrase_th = //State's vectored into symbol: "Rt_refs_code"
+{63
+,0,0,0,0,0,(Reduce_tbl*)&S63rt_Cterminals_phrase_th,0,0,0};
+struct S64std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S64std_Cterminals_phrase_th S64st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S65_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S66_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{585,(State*)&S69_Cterminals_phrase_th} // shift sym: Rsym_def
+ }// end of shift table
+};
+yacco2::Shift_entry S64pse_Cterminals_phrase_th = {3,(State*)&S66_Cterminals_phrase_th};
+yacco2::Shift_entry S64qse_Cterminals_phrase_th = {0,(State*)&S65_Cterminals_phrase_th};
+yacco2::State S64_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{64
+,(Shift_entry*)&S64pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S64st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S66tt_Cterminals_phrase_th,0,(Shift_entry*)&S64qse_Cterminals_phrase_th
+};
+struct S65rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Cterminals_phrase_th S65rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S65_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Cterminals_phrase_th,0,0,0};
+struct S66std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S66std_Cterminals_phrase_th S66st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S67_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{331,(State*)&S68_Cterminals_phrase_th} // shift sym: T_terminal_def
+ }// end of shift table
+};
+yacco2::Shift_entry S66qse_Cterminals_phrase_th = {0,(State*)&S67_Cterminals_phrase_th};
+yacco2::State S66_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{66
+,0,0,0,0,(Shift_tbl*)&S66st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S66qse_Cterminals_phrase_th
+};
+struct S67rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Cterminals_phrase_th S67rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S67_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Cterminals_phrase_th,0,0,0};
+struct S68rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Cterminals_phrase_th S68rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rsym_def_}
+ }// end of reduce table
+};
+yacco2::State S68_Cterminals_phrase_th = //State's vectored into symbol: "terminal-def"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Cterminals_phrase_th,0,0,0};
+struct S69std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S69std_Cterminals_phrase_th S69st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S70_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S69pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S69rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Cterminals_phrase_th S69rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S69_Cterminals_phrase_th = //State's vectored into symbol: "Rsym_def"
+{69
+,(Shift_entry*)&S69pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S69st_Cterminals_phrase_th,(Reduce_tbl*)&S69rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S70std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S70std_Cterminals_phrase_th S70st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S71_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{586,(State*)&S75_Cterminals_phrase_th} // shift sym: Rsym_def1s
+ ,{587,(State*)&S78_Cterminals_phrase_th} // shift sym: Rsym_def1
+ }// end of shift table
+};
+yacco2::Shift_entry S70pse_Cterminals_phrase_th = {3,(State*)&S71_Cterminals_phrase_th};
+struct S70rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Cterminals_phrase_th S70rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S70_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{70
+,(Shift_entry*)&S70pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S70st_Cterminals_phrase_th,(Reduce_tbl*)&S70rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S71tt_Cterminals_phrase_th,0,0};
+struct S71std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S71std_Cterminals_phrase_th S71st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S72_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{331,(State*)&S73_Cterminals_phrase_th} // shift sym: T_terminal_def
+ ,{443,(State*)&S74_Cterminals_phrase_th} // shift sym: Err_no_terminal_key_present
+ }// end of shift table
+};
+yacco2::Shift_entry S71qse_Cterminals_phrase_th = {0,(State*)&S72_Cterminals_phrase_th};
+yacco2::State S71_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{71
+,0,0,0,0,(Shift_tbl*)&S71st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S71qse_Cterminals_phrase_th
+};
+struct S72rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Cterminals_phrase_th S72rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S72_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Cterminals_phrase_th,0,0,0};
+struct S73rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Cterminals_phrase_th S73rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S73_Cterminals_phrase_th = //State's vectored into symbol: "terminal-def"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Cterminals_phrase_th,0,0,0};
+struct S74rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S74rtd_Cterminals_phrase_th S74rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rsym_def1_}
+ }// end of reduce table
+};
+yacco2::State S74_Cterminals_phrase_th = //State's vectored into symbol: "no key-value present in definition"
+{74
+,0,0,0,0,0,(Reduce_tbl*)&S74rt_Cterminals_phrase_th,0,0,0};
+struct S75std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S75std_Cterminals_phrase_th S75st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S71_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{587,(State*)&S76_Cterminals_phrase_th} // shift sym: Rsym_def1
+ }// end of shift table
+};
+yacco2::Shift_entry S75pse_Cterminals_phrase_th = {3,(State*)&S71_Cterminals_phrase_th};
+struct S75rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Cterminals_phrase_th S75rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rsym_defs_phrase_}
+ }// end of reduce table
+};
+yacco2::State S75_Cterminals_phrase_th = //State's vectored into symbol: "Rsym_def1s"
+{75
+,(Shift_entry*)&S75pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S75st_Cterminals_phrase_th,(Reduce_tbl*)&S75rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S71tt_Cterminals_phrase_th,0,0};
+struct S76std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S76std_Cterminals_phrase_th S76st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S77_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S76pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S76rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Cterminals_phrase_th S76rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S76_Cterminals_phrase_th = //State's vectored into symbol: "Rsym_def1"
+{76
+,(Shift_entry*)&S76pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S76st_Cterminals_phrase_th,(Reduce_tbl*)&S76rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S77rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Cterminals_phrase_th S77rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S77_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Cterminals_phrase_th,0,0,0};
+struct S78std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S78std_Cterminals_phrase_th S78st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {3,(State*)&S2_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{595,(State*)&S79_Cterminals_phrase_th} // shift sym: Rlint
+ }// end of shift table
+};
+yacco2::Shift_entry S78pse_Cterminals_phrase_th = {3,(State*)&S2_Cterminals_phrase_th};
+struct S78rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Cterminals_phrase_th S78rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rlint_}
+ }// end of reduce table
+};
+yacco2::State S78_Cterminals_phrase_th = //State's vectored into symbol: "Rsym_def1"
+{78
+,(Shift_entry*)&S78pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S78st_Cterminals_phrase_th,(Reduce_tbl*)&S78rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S2tt_Cterminals_phrase_th,0,0};
+struct S79rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S79rtd_Cterminals_phrase_th S79rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rsym_def1s_}
+ }// end of reduce table
+};
+yacco2::State S79_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{79
+,0,0,0,0,0,(Reduce_tbl*)&S79rt_Cterminals_phrase_th,0,0,0};
+struct S80std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S80std_Cterminals_phrase_th S80st_Cterminals_phrase_th = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S81_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{589,(State*)&S83_Cterminals_phrase_th} // shift sym: Rt_sufx_kw_code
+ ,{590,(State*)&S84_Cterminals_phrase_th} // shift sym: Rt_sufx_kw
+ ,{596,(State*)&S90_Cterminals_phrase_th} // shift sym: Rcweb_k
+ }// end of shift table
+};
+yacco2::Shift_entry S80pse_Cterminals_phrase_th = {3,(State*)&S81_Cterminals_phrase_th};
+struct S80rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Cterminals_phrase_th S80rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_sufx_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S80_Cterminals_phrase_th = //State's vectored into symbol: "Rlint"
+{80
+,(Shift_entry*)&S80pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S80st_Cterminals_phrase_th,(Reduce_tbl*)&S80rt_Cterminals_phrase_th,(State_s_thread_tbl*)&S81tt_Cterminals_phrase_th,0,0};
+struct S81std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S81std_Cterminals_phrase_th S81st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S50_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{320,(State*)&S82_Cterminals_phrase_th} // shift sym: T_terminals_sufx
+ ,{372,(State*)&S52_Cterminals_phrase_th} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S81qse_Cterminals_phrase_th = {0,(State*)&S50_Cterminals_phrase_th};
+yacco2::State S81_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{81
+,0,0,0,0,(Shift_tbl*)&S81st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S81qse_Cterminals_phrase_th
+};
+struct S82rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Cterminals_phrase_th S82rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_sufx_kw_}
+ }// end of reduce table
+};
+yacco2::State S82_Cterminals_phrase_th = //State's vectored into symbol: "#terminals-sufx"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Cterminals_phrase_th,0,0,0};
+struct S83rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Cterminals_phrase_th S83rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_sufx_phrase_}
+ }// end of reduce table
+};
+yacco2::State S83_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_kw_code"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Cterminals_phrase_th,0,0,0};
+struct S84std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S84std_Cterminals_phrase_th S84st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S85_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S86_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{592,(State*)&S89_Cterminals_phrase_th} // shift sym: Rt_sufx_code
+ }// end of shift table
+};
+yacco2::Shift_entry S84pse_Cterminals_phrase_th = {3,(State*)&S86_Cterminals_phrase_th};
+yacco2::Shift_entry S84qse_Cterminals_phrase_th = {0,(State*)&S85_Cterminals_phrase_th};
+yacco2::State S84_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_kw"
+{84
+,(Shift_entry*)&S84pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S84st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S86tt_Cterminals_phrase_th,0,(Shift_entry*)&S84qse_Cterminals_phrase_th
+};
+struct S85rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S85rtd_Cterminals_phrase_th S85rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S85_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{85
+,0,0,0,0,0,(Reduce_tbl*)&S85rt_Cterminals_phrase_th,0,0,0};
+struct S86std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S86std_Cterminals_phrase_th S86st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S87_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{326,(State*)&S88_Cterminals_phrase_th} // shift sym: T_syntax_code
+ }// end of shift table
+};
+yacco2::Shift_entry S86qse_Cterminals_phrase_th = {0,(State*)&S87_Cterminals_phrase_th};
+yacco2::State S86_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{86
+,0,0,0,0,(Shift_tbl*)&S86st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S86qse_Cterminals_phrase_th
+};
+struct S87rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S87rtd_Cterminals_phrase_th S87rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S87_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{87
+,0,0,0,0,0,(Reduce_tbl*)&S87rt_Cterminals_phrase_th,0,0,0};
+struct S88rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S88rtd_Cterminals_phrase_th S88rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_sufx_code_}
+ }// end of reduce table
+};
+yacco2::State S88_Cterminals_phrase_th = //State's vectored into symbol: "syntax-code"
+{88
+,0,0,0,0,0,(Reduce_tbl*)&S88rt_Cterminals_phrase_th,0,0,0};
+struct S89rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S89rtd_Cterminals_phrase_th S89rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_sufx_kw_code_}
+ }// end of reduce table
+};
+yacco2::State S89_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_code"
+{89
+,0,0,0,0,0,(Reduce_tbl*)&S89rt_Cterminals_phrase_th,0,0,0};
+struct S90std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S90std_Cterminals_phrase_th S90st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S101_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S102_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{591,(State*)&S91_Cterminals_phrase_th} // shift sym: Rt_sufx_kw_must
+ }// end of shift table
+};
+yacco2::Shift_entry S90pse_Cterminals_phrase_th = {3,(State*)&S102_Cterminals_phrase_th};
+yacco2::Shift_entry S90qse_Cterminals_phrase_th = {0,(State*)&S101_Cterminals_phrase_th};
+yacco2::State S90_Cterminals_phrase_th = //State's vectored into symbol: "Rcweb_k"
+{90
+,(Shift_entry*)&S90pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S90st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S102tt_Cterminals_phrase_th,0,(Shift_entry*)&S90qse_Cterminals_phrase_th
+};
+struct S91std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S91std_Cterminals_phrase_th S91st_Cterminals_phrase_th = {
+ 3
+ ,
+ {// start of table
+ {0,(State*)&S85_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S86_Cterminals_phrase_th} // shift sym: LR1_parallel_operator
+ ,{592,(State*)&S92_Cterminals_phrase_th} // shift sym: Rt_sufx_code
+ }// end of shift table
+};
+yacco2::Shift_entry S91pse_Cterminals_phrase_th = {3,(State*)&S86_Cterminals_phrase_th};
+yacco2::Shift_entry S91qse_Cterminals_phrase_th = {0,(State*)&S85_Cterminals_phrase_th};
+yacco2::State S91_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_kw_must"
+{91
+,(Shift_entry*)&S91pse_Cterminals_phrase_th,0,0,0,(Shift_tbl*)&S91st_Cterminals_phrase_th,0,(State_s_thread_tbl*)&S86tt_Cterminals_phrase_th,0,(Shift_entry*)&S91qse_Cterminals_phrase_th
+};
+struct S92rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S92rtd_Cterminals_phrase_th S92rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_sufx_phrase_}
+ }// end of reduce table
+};
+yacco2::State S92_Cterminals_phrase_th = //State's vectored into symbol: "Rt_sufx_code"
+{92
+,0,0,0,0,0,(Reduce_tbl*)&S92rt_Cterminals_phrase_th,0,0,0};
+struct S93rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S93rtd_Cterminals_phrase_th S93rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S93_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{93
+,0,0,0,0,0,(Reduce_tbl*)&S93rt_Cterminals_phrase_th,0,0,0};
+struct S94std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S94std_Cterminals_phrase_th S94st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S95_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{304,(State*)&S96_Cterminals_phrase_th} // shift sym: T_name_space
+ }// end of shift table
+};
+yacco2::Shift_entry S94qse_Cterminals_phrase_th = {0,(State*)&S95_Cterminals_phrase_th};
+yacco2::State S94_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{94
+,0,0,0,0,(Shift_tbl*)&S94st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S94qse_Cterminals_phrase_th
+};
+struct S95rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S95rtd_Cterminals_phrase_th S95rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S95_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{95
+,0,0,0,0,0,(Reduce_tbl*)&S95rt_Cterminals_phrase_th,0,0,0};
+struct S96rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S96rtd_Cterminals_phrase_th S96rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rnamespace_}
+ }// end of reduce table
+};
+yacco2::State S96_Cterminals_phrase_th = //State's vectored into symbol: "#name-space"
+{96
+,0,0,0,0,0,(Reduce_tbl*)&S96rt_Cterminals_phrase_th,0,0,0};
+struct S97rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S97rtd_Cterminals_phrase_th S97rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rt_refs_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S97_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{97
+,0,0,0,0,0,(Reduce_tbl*)&S97rt_Cterminals_phrase_th,0,0,0};
+struct S98std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S98std_Cterminals_phrase_th S98st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S99_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{319,(State*)&S100_Cterminals_phrase_th} // shift sym: T_terminals_refs
+ }// end of shift table
+};
+yacco2::Shift_entry S98qse_Cterminals_phrase_th = {0,(State*)&S99_Cterminals_phrase_th};
+yacco2::State S98_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{98
+,0,0,0,0,(Shift_tbl*)&S98st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S98qse_Cterminals_phrase_th
+};
+struct S99rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S99rtd_Cterminals_phrase_th S99rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_refs_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S99_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{99
+,0,0,0,0,0,(Reduce_tbl*)&S99rt_Cterminals_phrase_th,0,0,0};
+struct S100rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S100rtd_Cterminals_phrase_th S100rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_refs_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S100_Cterminals_phrase_th = //State's vectored into symbol: "#terminals-refs"
+{100
+,0,0,0,0,0,(Reduce_tbl*)&S100rt_Cterminals_phrase_th,0,0,0};
+struct S101rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S101rtd_Cterminals_phrase_th S101rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs3_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S101_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{101
+,0,0,0,0,0,(Reduce_tbl*)&S101rt_Cterminals_phrase_th,0,0,0};
+struct S102std_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S102std_Cterminals_phrase_th S102st_Cterminals_phrase_th = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S103_Cterminals_phrase_th} // shift sym: LR1_questionable_shift_operator
+ ,{320,(State*)&S104_Cterminals_phrase_th} // shift sym: T_terminals_sufx
+ }// end of shift table
+};
+yacco2::Shift_entry S102qse_Cterminals_phrase_th = {0,(State*)&S103_Cterminals_phrase_th};
+yacco2::State S102_Cterminals_phrase_th = //State's vectored into symbol: "|||"
+{102
+,0,0,0,0,(Shift_tbl*)&S102st_Cterminals_phrase_th,0,0,0,(Shift_entry*)&S102qse_Cterminals_phrase_th
+};
+struct S103rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S103rtd_Cterminals_phrase_th S103rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs2_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S103_Cterminals_phrase_th = //State's vectored into symbol: "|?|"
+{103
+,0,0,0,0,0,(Reduce_tbl*)&S103rt_Cterminals_phrase_th,0,0,0};
+struct S104rtd_Cterminals_phrase_th{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S104rtd_Cterminals_phrase_th S104rt_Cterminals_phrase_th = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cterminals_phrase_th,Cterminals_phrase_th::rhs1_Rt_sufx_kw_must_}
+ }// end of reduce table
+};
+yacco2::State S104_Cterminals_phrase_th = //State's vectored into symbol: "#terminals-sufx"
+{104
+,0,0,0,0,0,(Reduce_tbl*)&S104rt_Cterminals_phrase_th,0,0,0};
diff --git a/web/yacco2/compiler/grammars/terminals_phrasesym.cpp b/web/yacco2/compiler/grammars/terminals_phrasesym.cpp
new file mode 100644
index 0000000000..42647549e6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrasesym.cpp
@@ -0,0 +1,86 @@
+/*
+ File: terminals_phrasesym.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cterminals_phrase::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rterminals_phrase_:{
+ Rterminals_phrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rterminals_phrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rterminals_phrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rphrase_:{
+ Rphrase* sym;
+ if(re->rule_ == 0){
+ sym = new Rphrase(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rphrase*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/terminals_phrasetbl.cpp b/web/yacco2/compiler/grammars/terminals_phrasetbl.cpp
new file mode 100644
index 0000000000..079d77f9a7
--- /dev/null
+++ b/web/yacco2/compiler/grammars/terminals_phrasetbl.cpp
@@ -0,0 +1,129 @@
+/*
+ File: terminals_phrasetbl.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "terminals_phrase.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_terminals_phrase;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cterminals_phrase[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cterminals_phrase;
+extern yacco2::State S2_Cterminals_phrase;
+extern yacco2::State S3_Cterminals_phrase;
+struct S3ttd_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S3ttd_Cterminals_phrase S3tt_Cterminals_phrase = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_terminals_phrase_th
+};
+extern yacco2::State S4_Cterminals_phrase;
+extern yacco2::State S5_Cterminals_phrase;
+extern yacco2::State S6_Cterminals_phrase;
+struct S1std_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cterminals_phrase S1st_Cterminals_phrase = {
+ 4
+ ,
+ {// start of table
+ {0,(State*)&S2_Cterminals_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{3,(State*)&S3_Cterminals_phrase} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Cterminals_phrase} // accept sym: Rterminals_phrase
+ ,{570,(State*)&S6_Cterminals_phrase} // shift sym: Rphrase
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Cterminals_phrase = {3,(State*)&S3_Cterminals_phrase};
+yacco2::Shift_entry S1qse_Cterminals_phrase = {0,(State*)&S2_Cterminals_phrase};
+yacco2::State S1_Cterminals_phrase = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Cterminals_phrase,0,0,0,(Shift_tbl*)&S1st_Cterminals_phrase,0,(State_s_thread_tbl*)&S3tt_Cterminals_phrase,0,(Shift_entry*)&S1qse_Cterminals_phrase
+};
+struct S2rtd_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cterminals_phrase S2rt_Cterminals_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase,Cterminals_phrase::rhs3_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S2_Cterminals_phrase = //State's vectored into symbol: "|?|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cterminals_phrase,0,0,0};
+struct S3std_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cterminals_phrase S3st_Cterminals_phrase = {
+ 2
+ ,
+ {// start of table
+ {0,(State*)&S4_Cterminals_phrase} // shift sym: LR1_questionable_shift_operator
+ ,{334,(State*)&S5_Cterminals_phrase} // shift sym: T_terminals_phrase
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Cterminals_phrase = {0,(State*)&S4_Cterminals_phrase};
+yacco2::State S3_Cterminals_phrase = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cterminals_phrase,0,0,0,(Shift_entry*)&S3qse_Cterminals_phrase
+};
+struct S4rtd_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cterminals_phrase S4rt_Cterminals_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase,Cterminals_phrase::rhs2_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S4_Cterminals_phrase = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cterminals_phrase,0,0,0};
+struct S5rtd_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cterminals_phrase S5rt_Cterminals_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase,Cterminals_phrase::rhs1_Rphrase_}
+ }// end of reduce table
+};
+yacco2::State S5_Cterminals_phrase = //State's vectored into symbol: "terminals-phrase"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cterminals_phrase,0,0,0};
+struct S6rtd_Cterminals_phrase{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cterminals_phrase S6rt_Cterminals_phrase = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cterminals_phrase,Cterminals_phrase::rhs1_Rterminals_phrase_}
+ }// end of reduce table
+};
+yacco2::State S6_Cterminals_phrase = //State's vectored into symbol: "Rphrase"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cterminals_phrase,0,0,0};
diff --git a/web/yacco2/compiler/grammars/test_components.cpp b/web/yacco2/compiler/grammars/test_components.cpp
new file mode 100644
index 0000000000..867b0cfc9c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_components.cpp
@@ -0,0 +1,1216 @@
+/*
+ File: test_components.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "test_components.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_components;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 8;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+}
+ Ctest_components::
+ Ctest_components()
+ :yacco2::CAbs_fsm
+ ("test_components.lex"
+ ,"1.0"
+ ,"17 Apr 2001"
+ ,true
+ ,"Tester: lexical stage constructing tokens for syntax parser."
+ ,"Fri Jan 30 18:55:27 2015 "
+ ,S1_Ctest_components){
+
+ }
+
+Ctest_components::~Ctest_components(){
+
+ for(int x = 0;x < 8;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ctest_components::failed(){
+ return false;
+ }
+ void Ctest_components::op(){
+}
+int Ctest_components::rhs_to_rules_mapping_[69] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,3 // subrule 10 for rule 4
+ ,3 // subrule 11 for rule 4
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,3 // subrule 14 for rule 4
+ ,3 // subrule 15 for rule 4
+ ,3 // subrule 16 for rule 4
+ ,3 // subrule 17 for rule 4
+ ,3 // subrule 18 for rule 4
+ ,3 // subrule 19 for rule 4
+ ,3 // subrule 20 for rule 4
+ ,3 // subrule 21 for rule 4
+ ,3 // subrule 22 for rule 4
+ ,3 // subrule 23 for rule 4
+ ,4 // subrule 24 for rule 5
+ ,4 // subrule 25 for rule 5
+ ,4 // subrule 26 for rule 5
+ ,4 // subrule 27 for rule 5
+ ,4 // subrule 28 for rule 5
+ ,4 // subrule 29 for rule 5
+ ,4 // subrule 30 for rule 5
+ ,4 // subrule 31 for rule 5
+ ,4 // subrule 32 for rule 5
+ ,4 // subrule 33 for rule 5
+ ,4 // subrule 34 for rule 5
+ ,4 // subrule 35 for rule 5
+ ,5 // subrule 36 for rule 6
+ ,5 // subrule 37 for rule 6
+ ,5 // subrule 38 for rule 6
+ ,5 // subrule 39 for rule 6
+ ,5 // subrule 40 for rule 6
+ ,5 // subrule 41 for rule 6
+ ,5 // subrule 42 for rule 6
+ ,5 // subrule 43 for rule 6
+ ,5 // subrule 44 for rule 6
+ ,5 // subrule 45 for rule 6
+ ,5 // subrule 46 for rule 6
+ ,5 // subrule 47 for rule 6
+ ,5 // subrule 48 for rule 6
+ ,5 // subrule 49 for rule 6
+ ,6 // subrule 50 for rule 7
+ ,6 // subrule 51 for rule 7
+ ,6 // subrule 52 for rule 7
+ ,6 // subrule 53 for rule 7
+ ,6 // subrule 54 for rule 7
+ ,6 // subrule 55 for rule 7
+ ,6 // subrule 56 for rule 7
+ ,6 // subrule 57 for rule 7
+ ,6 // subrule 58 for rule 7
+ ,6 // subrule 59 for rule 7
+ ,6 // subrule 60 for rule 7
+ ,6 // subrule 61 for rule 7
+ ,6 // subrule 62 for rule 7
+ ,6 // subrule 63 for rule 7
+ ,6 // subrule 64 for rule 7
+ ,7 // subrule 65 for rule 8
+ ,7 // subrule 66 for rule 8
+ ,7 // subrule 67 for rule 8
+ ,7 // subrule 68 for rule 8
+};
+Rpass3::Rpass3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rpass3",0,Ctest_components::R_Rpass3_,P,false,false){
+}
+
+void Rpass3::op(){
+ sstrace_rulesss
+
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+
+}
+Relems::Relems(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Relems",0,Ctest_components::R_Relems_,P,false,false){
+}
+
+Rtoken::Rtoken(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken",0,Ctest_components::R_Rtoken_,P,false,false){
+}
+
+yacco2::THR _YACCO2_CALL_TYPE
+NS_test_components::AR_Rtoken_grp1(yacco2::Parser* Caller_pp){
+ yacco2::KCHARP ar_name = "AR_Rtoken_grp1";
+#include "war_begin_code.h"
+
+ using namespace NS_yacco2_T_enum;
+ int kw_id(0);
+ int kw_id_len(0);
+ int unstr(0);
+ int unstr_len(0);
+ for(i=1;i<=ie;++i){
+ switch(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__){
+ case T_Enum::T_T_unquoted_string_:{
+ unstr=i;
+ T_unquoted_string* unq =
+ (T_unquoted_string*)Caller_pp->pp_accept_queue__[i].accept_token__;
+ unstr_len = unq->unquoted_string()->size();
+ continue;
+ }
+ case T_Enum::T_T_identifier_:{
+ kw_id=i;
+ T_identifier* id = (T_identifier*)Caller_pp->pp_accept_queue__[i].accept_token__;
+ kw_id_len = id->identifier()->size();
+ continue;
+ }
+ default:{
+ kw_id=i;
+ kw_id_len = 4048;//fake it: too many kws so make it longest
+ continue;
+ }
+
+ }
+ }
+ // out of for loop
+ if(unstr_len > kw_id_len){
+ i = unstr;
+ goto arbitrated_parameter;
+ }else{
+ i = kw_id;
+ goto arbitrated_parameter;
+ }
+
+#include "war_end_code.h"
+}
+
+Rtoken_grp1::Rtoken_grp1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken_grp1",0,Ctest_components::R_Rtoken_grp1_,P,false,false){
+}
+
+void Rtoken_grp1::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eocode* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_angled_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_char* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_comment* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_literal* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_c_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_2colon* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_eol* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+ // token stream marker
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_esc_seq* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+ // token stream marker
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_identifier* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_int_no* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_ws* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr13(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_unquoted_string* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp1::sr14(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ CAbs_lr1_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+Rtoken_grp2::Rtoken_grp2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken_grp2",0,Ctest_components::R_Rtoken_grp2_,P,false,false){
+}
+
+void Rtoken_grp2::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_eos* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken_grp2::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_comment_overrun* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken_grp2::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ Err_bad_esc* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+
+}
+
+void Rtoken_grp2::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_id* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_filename* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_namespace* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_class* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_version* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_date* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_debug* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp2::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_fsm_comments* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+Rtoken_grp3::Rtoken_grp3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken_grp3",0,Ctest_components::R_Rtoken_grp3_,P,false,false){
+}
+
+void Rtoken_grp3::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_raw_characters* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lr1_constant_symbols* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_error_symbols* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AD* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_AB* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_parser* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_la_boundary* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_thread_function* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_parallel_control_monitor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_enumeration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_file_name* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr13(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_name_space* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp3::sr14(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_sym_class* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+Rtoken_grp4::Rtoken_grp4(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken_grp4",0,Ctest_components::R_Rtoken_grp4_,P,false,false){
+}
+
+void Rtoken_grp4::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_rules* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lhs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr4(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_prefix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr5(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_suffix_declaration* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr6(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr7(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_destructor* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr8(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_op* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr9(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_implementation* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr10(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_tbl* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr11(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_user_imp_sym* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr12(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_constant_defs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr13(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_refs* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr14(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_terminals_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp4::sr15(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_lrk_sufx* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+Rtoken_grp5::Rtoken_grp5(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtoken_grp5",0,Ctest_components::R_Rtoken_grp5_,P,false,false){
+}
+
+void Rtoken_grp5::sr1(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_arbitrator_code* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp5::sr2(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_NULL* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp5::sr3(){
+ struct SF{
+ LR1_parallel_operator* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ T_failed* p2__;
+ State* s2__;
+ bool abort2__;
+ Rule_s_reuse_entry* rule_s_reuse_entry2__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(2);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+
+}
+
+void Rtoken_grp5::sr4(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+
+}
+
diff --git a/web/yacco2/compiler/grammars/test_components.fsc b/web/yacco2/compiler/grammars/test_components.fsc
new file mode 100644
index 0000000000..10fb47b9dc
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_components.fsc
@@ -0,0 +1,47 @@
+/*
+ File: test_components.fsc
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+transitive y
+grammar-name "test_components"
+name-space "NS_test_components"
+thread-name "Ctest_components"
+monolithic y
+file-name "test_components.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ LR1_eog
+ LR1_all_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 13
+ NS_o2_code_end::TH_o2_code_end
+ NS_c_comments::TH_c_comments
+ NS_c_string::TH_c_string
+ NS_eol::TH_eol
+ NS_int_no::TH_int_no
+ NS_unq_str::TH_unq_str
+ NS_angled_string::TH_angled_string
+ NS_bad_char_set::TH_bad_char_set
+ NS_c_literal::TH_c_literal
+ NS_dbl_colon::TH_dbl_colon
+ NS_esc_seq::TH_esc_seq
+ NS_identifier::TH_identifier
+ NS_ws::TH_ws
+end-list-of-transitive-threads
+list-of-used-threads 13
+ NS_angled_string::TH_angled_string
+ NS_bad_char_set::TH_bad_char_set
+ NS_c_comments::TH_c_comments
+ NS_c_literal::TH_c_literal
+ NS_c_string::TH_c_string
+ NS_dbl_colon::TH_dbl_colon
+ NS_eol::TH_eol
+ NS_esc_seq::TH_esc_seq
+ NS_identifier::TH_identifier
+ NS_int_no::TH_int_no
+ NS_o2_code_end::TH_o2_code_end
+ NS_unq_str::TH_unq_str
+ NS_ws::TH_ws
+end-list-of-used-threads
+fsm-comments
+"Tester: lexical stage constructing tokens for syntax parser."
diff --git a/web/yacco2/compiler/grammars/test_components.h b/web/yacco2/compiler/grammars/test_components.h
new file mode 100644
index 0000000000..8886157ed0
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_components.h
@@ -0,0 +1,244 @@
+/*
+ File: test_components.h
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#ifndef __test_components_h__
+#define __test_components_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "angled_string.h"
+#include "bad_char_set.h"
+#include "c_comments.h"
+#include "c_literal.h"
+#include "c_string.h"
+#include "dbl_colon.h"
+#include "eol.h"
+#include "esc_seq.h"
+#include "identifier.h"
+#include "int_no.h"
+#include "linker_id.h"
+#include "unq_str.h"
+#include "ws.h"
+#include "o2_externs.h"
+#include "o2_code_end.h"
+
+// monolithic grammar: no thread
+extern yacco2::State S1_Ctest_components;
+namespace NS_test_components {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[8];
+};
+class Ctest_components: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rpass3_ = 569//start_of_rule_list + 0
+ ,rhs1_Rpass3_ = 1
+ ,rhs2_Rpass3_ = 2
+ ,R_Relems_ = 570//start_of_rule_list + 2
+ ,rhs1_Relems_ = 3
+ ,rhs2_Relems_ = 4
+ ,R_Rtoken_ = 571//start_of_rule_list + 4
+ ,rhs1_Rtoken_ = 5
+ ,rhs2_Rtoken_ = 6
+ ,rhs3_Rtoken_ = 7
+ ,rhs4_Rtoken_ = 8
+ ,rhs5_Rtoken_ = 9
+ ,R_Rtoken_grp1_ = 572//start_of_rule_list + 6
+ ,rhs1_Rtoken_grp1_ = 10
+ ,rhs2_Rtoken_grp1_ = 11
+ ,rhs3_Rtoken_grp1_ = 12
+ ,rhs4_Rtoken_grp1_ = 13
+ ,rhs5_Rtoken_grp1_ = 14
+ ,rhs6_Rtoken_grp1_ = 15
+ ,rhs7_Rtoken_grp1_ = 16
+ ,rhs8_Rtoken_grp1_ = 17
+ ,rhs9_Rtoken_grp1_ = 18
+ ,rhs10_Rtoken_grp1_ = 19
+ ,rhs11_Rtoken_grp1_ = 20
+ ,rhs12_Rtoken_grp1_ = 21
+ ,rhs13_Rtoken_grp1_ = 22
+ ,rhs14_Rtoken_grp1_ = 23
+ ,R_Rtoken_grp2_ = 573//start_of_rule_list + 8
+ ,rhs1_Rtoken_grp2_ = 24
+ ,rhs2_Rtoken_grp2_ = 25
+ ,rhs3_Rtoken_grp2_ = 26
+ ,rhs4_Rtoken_grp2_ = 27
+ ,rhs5_Rtoken_grp2_ = 28
+ ,rhs6_Rtoken_grp2_ = 29
+ ,rhs7_Rtoken_grp2_ = 30
+ ,rhs8_Rtoken_grp2_ = 31
+ ,rhs9_Rtoken_grp2_ = 32
+ ,rhs10_Rtoken_grp2_ = 33
+ ,rhs11_Rtoken_grp2_ = 34
+ ,rhs12_Rtoken_grp2_ = 35
+ ,R_Rtoken_grp3_ = 574//start_of_rule_list + 10
+ ,rhs1_Rtoken_grp3_ = 36
+ ,rhs2_Rtoken_grp3_ = 37
+ ,rhs3_Rtoken_grp3_ = 38
+ ,rhs4_Rtoken_grp3_ = 39
+ ,rhs5_Rtoken_grp3_ = 40
+ ,rhs6_Rtoken_grp3_ = 41
+ ,rhs7_Rtoken_grp3_ = 42
+ ,rhs8_Rtoken_grp3_ = 43
+ ,rhs9_Rtoken_grp3_ = 44
+ ,rhs10_Rtoken_grp3_ = 45
+ ,rhs11_Rtoken_grp3_ = 46
+ ,rhs12_Rtoken_grp3_ = 47
+ ,rhs13_Rtoken_grp3_ = 48
+ ,rhs14_Rtoken_grp3_ = 49
+ ,R_Rtoken_grp4_ = 575//start_of_rule_list + 12
+ ,rhs1_Rtoken_grp4_ = 50
+ ,rhs2_Rtoken_grp4_ = 51
+ ,rhs3_Rtoken_grp4_ = 52
+ ,rhs4_Rtoken_grp4_ = 53
+ ,rhs5_Rtoken_grp4_ = 54
+ ,rhs6_Rtoken_grp4_ = 55
+ ,rhs7_Rtoken_grp4_ = 56
+ ,rhs8_Rtoken_grp4_ = 57
+ ,rhs9_Rtoken_grp4_ = 58
+ ,rhs10_Rtoken_grp4_ = 59
+ ,rhs11_Rtoken_grp4_ = 60
+ ,rhs12_Rtoken_grp4_ = 61
+ ,rhs13_Rtoken_grp4_ = 62
+ ,rhs14_Rtoken_grp4_ = 63
+ ,rhs15_Rtoken_grp4_ = 64
+ ,R_Rtoken_grp5_ = 576//start_of_rule_list + 14
+ ,rhs1_Rtoken_grp5_ = 65
+ ,rhs2_Rtoken_grp5_ = 66
+ ,rhs3_Rtoken_grp5_ = 67
+ ,rhs4_Rtoken_grp5_ = 68
+ };
+ //no of la sets = 2
+ //no of states = 71
+ Ctest_components();
+ ~Ctest_components();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[69];
+ };
+struct Rpass3;
+struct Relems;
+struct Rtoken;
+struct Rtoken_grp1;
+struct Rtoken_grp2;
+struct Rtoken_grp3;
+struct Rtoken_grp4;
+struct Rtoken_grp5;
+struct Rpass3:public yacco2::CAbs_lr1_sym {
+ Rpass3(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Relems:public yacco2::CAbs_lr1_sym {
+ Relems(yacco2::Parser* P);
+ public:
+};
+
+struct Rtoken:public yacco2::CAbs_lr1_sym {
+ Rtoken(yacco2::Parser* P);
+ public:
+};
+
+yacco2::THR _YACCO2_CALL_TYPE
+AR_Rtoken_grp1(yacco2::Parser* Caller_pp);// rule's arbitrator
+struct Rtoken_grp1:public yacco2::CAbs_lr1_sym {
+ Rtoken_grp1(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+};
+
+struct Rtoken_grp2:public yacco2::CAbs_lr1_sym {
+ Rtoken_grp2(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+};
+
+struct Rtoken_grp3:public yacco2::CAbs_lr1_sym {
+ Rtoken_grp3(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+};
+
+struct Rtoken_grp4:public yacco2::CAbs_lr1_sym {
+ Rtoken_grp4(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+ void sr8();
+ void sr9();
+ void sr10();
+ void sr11();
+ void sr12();
+ void sr13();
+ void sr14();
+ void sr15();
+};
+
+struct Rtoken_grp5:public yacco2::CAbs_lr1_sym {
+ Rtoken_grp5(yacco2::Parser* P);
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/test_components.lex b/web/yacco2/compiler/grammars/test_components.lex
new file mode 100644
index 0000000000..c083888f32
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_components.lex
@@ -0,0 +1,436 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: test_components.lex
+dates: 7 Juin 2003
+Purpose: Tester of component grammars in Lexical Phase
+ works with the simple testdriver.cpp program in /usr/local/yacco2/testdriver
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** Testdriver.\fbreak
+It tests out the lexical parts to \o2.
+The |testdriver| is just a lexical caller to
+various threaded grammars that handle the lexical portion of \o2.
+The test files that feed it are concocted test data
+to exercise strings and things...
+These data files reside in /usr/local/yacco2/qa/*dat.
+Examples of test data file flavours testing are t0.bat and t1.bat.
+@/
+fsm
+(fsm-id "test_components.lex",fsm-filename test_components,fsm-namespace NS_test_components
+,fsm-class Ctest_components{
+ user-prefix-declaration
+#include "angled_string.h"
+#include "bad_char_set.h"
+#include "c_comments.h"
+#include "c_literal.h"
+#include "c_string.h"
+#include "dbl_colon.h"
+#include "eol.h"
+#include "esc_seq.h"
+#include "identifier.h"
+#include "int_no.h"
+#include "linker_id.h"
+#include "unq_str.h"
+#include "ws.h"
+#include "o2_externs.h"
+#include "o2_code_end.h"
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments "Tester: lexical stage constructing tokens for syntax parser.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rpass3 (
+lhs{
+ op
+ using namespace NS_yacco2_k_symbols;
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*yacco2::PTR_LR1_eog__);
+ ***
+ }
+){
+ -> eog
+ -> Relems eog
+}
+
+Relems (){
+ -> Rtoken
+ -> Relems Rtoken
+}
+
+Rtoken () {
+ -> Rtoken_grp1
+ -> Rtoken_grp2
+ -> Rtoken_grp3
+ -> Rtoken_grp4
+ -> Rtoken_grp5
+}
+
+Rtoken_grp1(
+//lhs,
+parallel-control-monitor{
+/@
+unquoted-string supersets identifier if it is longer in size
+and also includes other Tes like $-$$\>$ and cweb comments ie ``cweb-marker''.
+The arbitration code walks the ``accept-queue'' recording the T's position and length.
+Then it chooses the T to return by its length.
+@/
+ arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ int kw_id(0);
+ int kw_id_len(0);
+ int unstr(0);
+ int unstr_len(0);
+ for(i=1;i<=ie;++i){
+ switch(Caller_pp->pp_accept_queue__[i].accept_token__->enumerated_id__){
+ case T_Enum::T_T_unquoted_string_:{
+ unstr=i;
+ T_unquoted_string* unq =
+ (T_unquoted_string*)Caller_pp->pp_accept_queue__[i].accept_token__;
+ unstr_len = unq->unquoted_string()->size();
+ continue;
+ }
+ case T_Enum::T_T_identifier_:{
+ kw_id=i;
+ T_identifier* id = (T_identifier*)Caller_pp->pp_accept_queue__[i].accept_token__;
+ kw_id_len = id->identifier()->size();
+ continue;
+ }
+ default:{
+ kw_id=i;
+ kw_id_len = 4048;//fake it: too many kws so make it longest
+ continue;
+ }
+
+ }
+ }
+ // out of for loop
+ if(unstr_len > kw_id_len){
+ i = unstr;
+ goto arbitrated_parameter;
+ }else{
+ i = kw_id;
+ goto arbitrated_parameter;
+ }
+ ***
+ }
+
+){
+ -> ||| "#***" NS_o2_code_end::TH_o2_code_end{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "angled-string" NS_angled_string::TH_angled_string{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "bad char" NS_bad_char_set::TH_bad_char_set{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "comment" NS_c_comments::TH_c_comments {
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "c-literal" NS_c_literal::TH_c_literal{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "c-string" NS_c_string::TH_c_string{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "::" NS_dbl_colon::TH_dbl_colon{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| eol NS_eol::TH_eol{
+ op // token stream marker
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "esc-seq" NS_esc_seq::TH_esc_seq{
+ op // token stream marker
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "identifier" NS_identifier::TH_identifier{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "int-no" NS_int_no::TH_int_no{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| ws NS_ws::TH_ws{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "unquoted-string" NS_unq_str::TH_unq_str{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| |?| NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+}
+
+Rtoken_grp2 (){
+ -> ||| "bad eos" NULL { //
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "comment-overrun" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "bad esc" NULL{
+ op
+ ADD_TOKEN_TO_ERROR_QUEUE(*sf->p2__);
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+ -> ||| "#fsm" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-id" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-filename" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-namespace" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-class" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-version" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-date" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-debug" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#fsm-comments" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+}
+
+Rtoken_grp3 (){
+ -> ||| "#raw-characters" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#lr1-constant-symbols" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#error-symbols" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#AD" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#AB" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#parallel-parser" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#parallel-la-boundary" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#parallel-thread-function" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#parallel-control-monitor" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#terminals" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#T-enumeration" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#file-name" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#name-space" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#sym-class" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+}
+
+Rtoken_grp4 (){
+ -> ||| "#rules" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#lhs" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-declaration" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-prefix-declaration" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-suffix-declaration" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#constructor" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#destructor" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#op" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-implementation" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-imp-tbl" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#user-imp-sym" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#constant-defs" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#terminals-refs" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#terminals-sufx" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#lrk-sufx" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+}
+
+Rtoken_grp5 (){
+ -> ||| "#arbitrator-code" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#NULL" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> ||| "#failed" NULL{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p2__);
+ ***
+ }
+ -> |+|{
+ op
+ ADD_TOKEN_TO_PRODUCER_QUEUE(*sf->p1__);
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/test_componentssym.cpp b/web/yacco2/compiler/grammars/test_componentssym.cpp
new file mode 100644
index 0000000000..2089a58d5d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_componentssym.cpp
@@ -0,0 +1,1040 @@
+/*
+ File: test_componentssym.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "test_components.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_components;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ctest_components::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rpass3_:{
+ Rpass3* sym;
+ if(re->rule_ == 0){
+ sym = new Rpass3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rpass3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->op();
+ return;}
+ case rhs1_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Relems_:{
+ Relems* sym;
+ if(re->rule_ == 0){
+ sym = new Relems(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Relems*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rtoken_:{
+ Rtoken* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rtoken_grp1_:{
+ Rtoken_grp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs1_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_grp2_:{
+ Rtoken_grp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs1_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rtoken_grp3_:{
+ Rtoken_grp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs1_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ return;}
+ case rhs5_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ return;}
+ case rhs6_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr6();
+ return;}
+ case rhs7_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ return;}
+ case rhs8_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr8();
+ return;}
+ case rhs9_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr9();
+ return;}
+ case rhs10_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr10();
+ return;}
+ case rhs11_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr11();
+ return;}
+ case rhs12_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr12();
+ return;}
+ case rhs13_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr13();
+ return;}
+ case rhs14_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr14();
+ return;}
+ case rhs15_Rtoken_grp4_:{
+ Rtoken_grp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr15();
+ return;}
+ case rhs1_Rtoken_grp5_:{
+ Rtoken_grp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rtoken_grp5_:{
+ Rtoken_grp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rtoken_grp5_:{
+ Rtoken_grp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ return;}
+ case rhs4_Rtoken_grp5_:{
+ Rtoken_grp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rtoken_grp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtoken_grp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr4();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/test_componentstbl.cpp b/web/yacco2/compiler/grammars/test_componentstbl.cpp
new file mode 100644
index 0000000000..aa56afe9b4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/test_componentstbl.cpp
@@ -0,0 +1,1197 @@
+/*
+ File: test_componentstbl.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "test_components.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_components;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Ctest_components[] ={
+1
+,0,4
+};
+// LR1_eog
+// LR1_reduce_operator
+// LR1_all_shift_operator
+yacco2::UCHAR LA2_Ctest_components[] ={
+1
+,0,82
+};
+extern yacco2::State S1_Ctest_components;
+extern yacco2::State S2_Ctest_components;
+extern yacco2::State S3_Ctest_components;
+struct S3ttd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[13];
+};
+S3ttd_Ctest_components S3tt_Ctest_components = {
+ 13 // no of threads
+ ,AR_Rtoken_grp1 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_esc_seq
+ ,(yacco2::Thread_entry*)&ITH_eol
+ ,(yacco2::Thread_entry*)&ITH_c_comments
+ ,(yacco2::Thread_entry*)&ITH_ws
+ ,(yacco2::Thread_entry*)&ITH_angled_string
+ ,(yacco2::Thread_entry*)&ITH_c_literal
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_unq_str
+ ,(yacco2::Thread_entry*)&ITH_identifier
+ ,(yacco2::Thread_entry*)&ITH_int_no
+ ,(yacco2::Thread_entry*)&ITH_o2_code_end
+ ,(yacco2::Thread_entry*)&ITH_dbl_colon
+ ,(yacco2::Thread_entry*)&ITH_bad_char_set
+};
+extern yacco2::State S4_Ctest_components;
+extern yacco2::State S5_Ctest_components;
+extern yacco2::State S6_Ctest_components;
+extern yacco2::State S7_Ctest_components;
+extern yacco2::State S8_Ctest_components;
+extern yacco2::State S9_Ctest_components;
+extern yacco2::State S10_Ctest_components;
+extern yacco2::State S11_Ctest_components;
+extern yacco2::State S12_Ctest_components;
+extern yacco2::State S13_Ctest_components;
+extern yacco2::State S14_Ctest_components;
+extern yacco2::State S15_Ctest_components;
+extern yacco2::State S16_Ctest_components;
+extern yacco2::State S17_Ctest_components;
+extern yacco2::State S18_Ctest_components;
+extern yacco2::State S19_Ctest_components;
+extern yacco2::State S20_Ctest_components;
+extern yacco2::State S21_Ctest_components;
+extern yacco2::State S22_Ctest_components;
+extern yacco2::State S23_Ctest_components;
+extern yacco2::State S24_Ctest_components;
+extern yacco2::State S25_Ctest_components;
+extern yacco2::State S26_Ctest_components;
+extern yacco2::State S27_Ctest_components;
+extern yacco2::State S28_Ctest_components;
+extern yacco2::State S29_Ctest_components;
+extern yacco2::State S30_Ctest_components;
+extern yacco2::State S31_Ctest_components;
+extern yacco2::State S32_Ctest_components;
+extern yacco2::State S33_Ctest_components;
+extern yacco2::State S34_Ctest_components;
+extern yacco2::State S35_Ctest_components;
+extern yacco2::State S36_Ctest_components;
+extern yacco2::State S37_Ctest_components;
+extern yacco2::State S38_Ctest_components;
+extern yacco2::State S39_Ctest_components;
+extern yacco2::State S40_Ctest_components;
+extern yacco2::State S41_Ctest_components;
+extern yacco2::State S42_Ctest_components;
+extern yacco2::State S43_Ctest_components;
+extern yacco2::State S44_Ctest_components;
+extern yacco2::State S45_Ctest_components;
+extern yacco2::State S46_Ctest_components;
+extern yacco2::State S47_Ctest_components;
+extern yacco2::State S48_Ctest_components;
+extern yacco2::State S49_Ctest_components;
+extern yacco2::State S50_Ctest_components;
+extern yacco2::State S51_Ctest_components;
+extern yacco2::State S52_Ctest_components;
+extern yacco2::State S53_Ctest_components;
+extern yacco2::State S54_Ctest_components;
+extern yacco2::State S55_Ctest_components;
+extern yacco2::State S56_Ctest_components;
+extern yacco2::State S57_Ctest_components;
+extern yacco2::State S58_Ctest_components;
+extern yacco2::State S59_Ctest_components;
+extern yacco2::State S60_Ctest_components;
+extern yacco2::State S61_Ctest_components;
+extern yacco2::State S62_Ctest_components;
+extern yacco2::State S63_Ctest_components;
+extern yacco2::State S64_Ctest_components;
+extern yacco2::State S65_Ctest_components;
+extern yacco2::State S66_Ctest_components;
+extern yacco2::State S67_Ctest_components;
+extern yacco2::State S68_Ctest_components;
+extern yacco2::State S69_Ctest_components;
+extern yacco2::State S70_Ctest_components;
+extern yacco2::State S71_Ctest_components;
+struct S1std_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[11];
+};
+S1std_Ctest_components S1st_Ctest_components = {
+ 11
+ ,
+ {// start of table
+ {1,(State*)&S2_Ctest_components} // shift sym: LR1_eog
+ ,{3,(State*)&S3_Ctest_components} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S62_Ctest_components} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Ctest_components} // accept sym: Rpass3
+ ,{570,(State*)&S63_Ctest_components} // shift sym: Relems
+ ,{571,(State*)&S71_Ctest_components} // shift sym: Rtoken
+ ,{572,(State*)&S66_Ctest_components} // shift sym: Rtoken_grp1
+ ,{573,(State*)&S67_Ctest_components} // shift sym: Rtoken_grp2
+ ,{574,(State*)&S68_Ctest_components} // shift sym: Rtoken_grp3
+ ,{575,(State*)&S69_Ctest_components} // shift sym: Rtoken_grp4
+ ,{576,(State*)&S70_Ctest_components} // shift sym: Rtoken_grp5
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Ctest_components = {3,(State*)&S3_Ctest_components};
+yacco2::Shift_entry S1ase_Ctest_components = {6,(State*)&S62_Ctest_components};
+yacco2::State S1_Ctest_components = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Ctest_components,(Shift_entry*)&S1ase_Ctest_components
+,0,0,(Shift_tbl*)&S1st_Ctest_components,0,(State_s_thread_tbl*)&S3tt_Ctest_components,0,0};
+struct S2rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ctest_components S2rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctest_components,Ctest_components::rhs1_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S2_Ctest_components = //State's vectored into symbol: "eog"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ctest_components,0,0,0};
+struct S3std_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[58];
+};
+S3std_Ctest_components S3st_Ctest_components = {
+ 58
+ ,
+ {// start of table
+ {0,(State*)&S4_Ctest_components} // shift sym: LR1_questionable_shift_operator
+ ,{267,(State*)&S5_Ctest_components} // shift sym: T_esc_seq
+ ,{268,(State*)&S6_Ctest_components} // shift sym: T_eol
+ ,{271,(State*)&S7_Ctest_components} // shift sym: T_comment
+ ,{272,(State*)&S8_Ctest_components} // shift sym: T_ws
+ ,{273,(State*)&S9_Ctest_components} // shift sym: T_angled_string
+ ,{274,(State*)&S10_Ctest_components} // shift sym: T_c_literal
+ ,{275,(State*)&S11_Ctest_components} // shift sym: T_c_string
+ ,{277,(State*)&S12_Ctest_components} // shift sym: T_unquoted_string
+ ,{279,(State*)&S13_Ctest_components} // shift sym: T_identifier
+ ,{280,(State*)&S14_Ctest_components} // shift sym: T_int_no
+ ,{281,(State*)&S15_Ctest_components} // shift sym: T_raw_characters
+ ,{282,(State*)&S16_Ctest_components} // shift sym: T_lr1_constant_symbols
+ ,{283,(State*)&S17_Ctest_components} // shift sym: T_error_symbols
+ ,{284,(State*)&S18_Ctest_components} // shift sym: T_eocode
+ ,{285,(State*)&S19_Ctest_components} // shift sym: T_AD
+ ,{286,(State*)&S20_Ctest_components} // shift sym: T_AB
+ ,{287,(State*)&S21_Ctest_components} // shift sym: T_parallel_la_boundary
+ ,{288,(State*)&S22_Ctest_components} // shift sym: T_arbitrator_code
+ ,{289,(State*)&S23_Ctest_components} // shift sym: T_parallel_parser
+ ,{290,(State*)&S24_Ctest_components} // shift sym: T_parallel_thread_function
+ ,{291,(State*)&S25_Ctest_components} // shift sym: T_parallel_control_monitor
+ ,{292,(State*)&S26_Ctest_components} // shift sym: T_fsm
+ ,{293,(State*)&S27_Ctest_components} // shift sym: T_fsm_id
+ ,{294,(State*)&S28_Ctest_components} // shift sym: T_fsm_filename
+ ,{295,(State*)&S29_Ctest_components} // shift sym: T_fsm_namespace
+ ,{296,(State*)&S30_Ctest_components} // shift sym: T_fsm_class
+ ,{297,(State*)&S31_Ctest_components} // shift sym: T_fsm_version
+ ,{298,(State*)&S32_Ctest_components} // shift sym: T_fsm_date
+ ,{299,(State*)&S33_Ctest_components} // shift sym: T_fsm_debug
+ ,{300,(State*)&S34_Ctest_components} // shift sym: T_fsm_comments
+ ,{301,(State*)&S35_Ctest_components} // shift sym: T_terminals
+ ,{302,(State*)&S36_Ctest_components} // shift sym: T_enumeration
+ ,{303,(State*)&S37_Ctest_components} // shift sym: T_file_name
+ ,{304,(State*)&S38_Ctest_components} // shift sym: T_name_space
+ ,{305,(State*)&S39_Ctest_components} // shift sym: T_sym_class
+ ,{306,(State*)&S40_Ctest_components} // shift sym: T_rules
+ ,{307,(State*)&S41_Ctest_components} // shift sym: T_lhs
+ ,{308,(State*)&S42_Ctest_components} // shift sym: T_user_declaration
+ ,{309,(State*)&S43_Ctest_components} // shift sym: T_user_prefix_declaration
+ ,{310,(State*)&S44_Ctest_components} // shift sym: T_user_suffix_declaration
+ ,{311,(State*)&S45_Ctest_components} // shift sym: T_constructor
+ ,{312,(State*)&S46_Ctest_components} // shift sym: T_destructor
+ ,{313,(State*)&S47_Ctest_components} // shift sym: T_op
+ ,{314,(State*)&S48_Ctest_components} // shift sym: T_failed
+ ,{315,(State*)&S49_Ctest_components} // shift sym: T_user_implementation
+ ,{316,(State*)&S50_Ctest_components} // shift sym: T_user_imp_tbl
+ ,{317,(State*)&S51_Ctest_components} // shift sym: T_user_imp_sym
+ ,{318,(State*)&S52_Ctest_components} // shift sym: T_constant_defs
+ ,{319,(State*)&S53_Ctest_components} // shift sym: T_terminals_refs
+ ,{320,(State*)&S54_Ctest_components} // shift sym: T_terminals_sufx
+ ,{321,(State*)&S55_Ctest_components} // shift sym: T_lrk_sufx
+ ,{323,(State*)&S56_Ctest_components} // shift sym: T_NULL
+ ,{324,(State*)&S57_Ctest_components} // shift sym: T_2colon
+ ,{394,(State*)&S58_Ctest_components} // shift sym: Err_bad_eos
+ ,{395,(State*)&S59_Ctest_components} // shift sym: Err_bad_esc
+ ,{396,(State*)&S60_Ctest_components} // shift sym: Err_comment_overrun
+ ,{397,(State*)&S61_Ctest_components} // shift sym: Err_bad_char
+ }// end of shift table
+};
+yacco2::Shift_entry S3qse_Ctest_components = {0,(State*)&S4_Ctest_components};
+yacco2::State S3_Ctest_components = //State's vectored into symbol: "|||"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Ctest_components,0,0,0,(Shift_entry*)&S3qse_Ctest_components
+};
+struct S4rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ctest_components S4rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs14_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S4_Ctest_components = //State's vectored into symbol: "|?|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ctest_components,0,0,0};
+struct S5rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ctest_components S5rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs9_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S5_Ctest_components = //State's vectored into symbol: "esc-seq"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ctest_components,0,0,0};
+struct S6rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ctest_components S6rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs8_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S6_Ctest_components = //State's vectored into symbol: "eol"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ctest_components,0,0,0};
+struct S7rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ctest_components S7rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S7_Ctest_components = //State's vectored into symbol: "comment"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ctest_components,0,0,0};
+struct S8rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ctest_components S8rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs12_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S8_Ctest_components = //State's vectored into symbol: "ws"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ctest_components,0,0,0};
+struct S9rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ctest_components S9rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S9_Ctest_components = //State's vectored into symbol: "angled-string"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ctest_components,0,0,0};
+struct S10rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ctest_components S10rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs5_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S10_Ctest_components = //State's vectored into symbol: "c-literal"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ctest_components,0,0,0};
+struct S11rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ctest_components S11rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs6_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S11_Ctest_components = //State's vectored into symbol: "c-string"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ctest_components,0,0,0};
+struct S12rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Ctest_components S12rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs13_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S12_Ctest_components = //State's vectored into symbol: "unquoted-string"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Ctest_components,0,0,0};
+struct S13rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ctest_components S13rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs10_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S13_Ctest_components = //State's vectored into symbol: "identifier"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ctest_components,0,0,0};
+struct S14rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ctest_components S14rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs11_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S14_Ctest_components = //State's vectored into symbol: "int-no"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ctest_components,0,0,0};
+struct S15rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Ctest_components S15rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S15_Ctest_components = //State's vectored into symbol: "#raw-characters"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Ctest_components,0,0,0};
+struct S16rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Ctest_components S16rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S16_Ctest_components = //State's vectored into symbol: "#lr1-constant-symbols"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Ctest_components,0,0,0};
+struct S17rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Ctest_components S17rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S17_Ctest_components = //State's vectored into symbol: "#error-symbols"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Ctest_components,0,0,0};
+struct S18rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Ctest_components S18rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S18_Ctest_components = //State's vectored into symbol: "#***"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Ctest_components,0,0,0};
+struct S19rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Ctest_components S19rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S19_Ctest_components = //State's vectored into symbol: "#AD"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Ctest_components,0,0,0};
+struct S20rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Ctest_components S20rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs5_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S20_Ctest_components = //State's vectored into symbol: "#AB"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Ctest_components,0,0,0};
+struct S21rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Ctest_components S21rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs7_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S21_Ctest_components = //State's vectored into symbol: "#parallel-la-boundary"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Ctest_components,0,0,0};
+struct S22rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Ctest_components S22rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_grp5_}
+ }// end of reduce table
+};
+yacco2::State S22_Ctest_components = //State's vectored into symbol: "#arbitrator-code"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Ctest_components,0,0,0};
+struct S23rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Ctest_components S23rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs6_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S23_Ctest_components = //State's vectored into symbol: "#parallel-parser"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Ctest_components,0,0,0};
+struct S24rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Ctest_components S24rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs8_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S24_Ctest_components = //State's vectored into symbol: "#parallel-thread-function"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Ctest_components,0,0,0};
+struct S25rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Ctest_components S25rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs9_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S25_Ctest_components = //State's vectored into symbol: "#parallel-control-monitor"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Ctest_components,0,0,0};
+struct S26rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Ctest_components S26rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S26_Ctest_components = //State's vectored into symbol: "#fsm"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Ctest_components,0,0,0};
+struct S27rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Ctest_components S27rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs5_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S27_Ctest_components = //State's vectored into symbol: "#fsm-id"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Ctest_components,0,0,0};
+struct S28rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Ctest_components S28rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs6_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S28_Ctest_components = //State's vectored into symbol: "#fsm-filename"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Ctest_components,0,0,0};
+struct S29rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S29rtd_Ctest_components S29rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs7_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S29_Ctest_components = //State's vectored into symbol: "#fsm-namespace"
+{29
+,0,0,0,0,0,(Reduce_tbl*)&S29rt_Ctest_components,0,0,0};
+struct S30rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Ctest_components S30rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs8_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S30_Ctest_components = //State's vectored into symbol: "#fsm-class"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Ctest_components,0,0,0};
+struct S31rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Ctest_components S31rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs9_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S31_Ctest_components = //State's vectored into symbol: "#fsm-version"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Ctest_components,0,0,0};
+struct S32rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Ctest_components S32rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs10_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S32_Ctest_components = //State's vectored into symbol: "#fsm-date"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Ctest_components,0,0,0};
+struct S33rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Ctest_components S33rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs11_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S33_Ctest_components = //State's vectored into symbol: "#fsm-debug"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Ctest_components,0,0,0};
+struct S34rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Ctest_components S34rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs12_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S34_Ctest_components = //State's vectored into symbol: "#fsm-comments"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Ctest_components,0,0,0};
+struct S35rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Ctest_components S35rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs10_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S35_Ctest_components = //State's vectored into symbol: "#terminals"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Ctest_components,0,0,0};
+struct S36rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Ctest_components S36rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs11_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S36_Ctest_components = //State's vectored into symbol: "#T-enumeration"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Ctest_components,0,0,0};
+struct S37rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Ctest_components S37rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs12_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S37_Ctest_components = //State's vectored into symbol: "#file-name"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Ctest_components,0,0,0};
+struct S38rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Ctest_components S38rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs13_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S38_Ctest_components = //State's vectored into symbol: "#name-space"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Ctest_components,0,0,0};
+struct S39rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Ctest_components S39rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs14_Rtoken_grp3_}
+ }// end of reduce table
+};
+yacco2::State S39_Ctest_components = //State's vectored into symbol: "#sym-class"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Ctest_components,0,0,0};
+struct S40rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Ctest_components S40rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S40_Ctest_components = //State's vectored into symbol: "#rules"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Ctest_components,0,0,0};
+struct S41rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Ctest_components S41rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S41_Ctest_components = //State's vectored into symbol: "#lhs"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Ctest_components,0,0,0};
+struct S42rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Ctest_components S42rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S42_Ctest_components = //State's vectored into symbol: "#user-declaration"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Ctest_components,0,0,0};
+struct S43rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Ctest_components S43rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S43_Ctest_components = //State's vectored into symbol: "#user-prefix-declaration"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Ctest_components,0,0,0};
+struct S44rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Ctest_components S44rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs5_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S44_Ctest_components = //State's vectored into symbol: "#user-suffix-declaration"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Ctest_components,0,0,0};
+struct S45rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Ctest_components S45rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs6_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S45_Ctest_components = //State's vectored into symbol: "#constructor"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Ctest_components,0,0,0};
+struct S46rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S46rtd_Ctest_components S46rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs7_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S46_Ctest_components = //State's vectored into symbol: "#destructor"
+{46
+,0,0,0,0,0,(Reduce_tbl*)&S46rt_Ctest_components,0,0,0};
+struct S47rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Ctest_components S47rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs8_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S47_Ctest_components = //State's vectored into symbol: "#op"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Ctest_components,0,0,0};
+struct S48rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Ctest_components S48rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_grp5_}
+ }// end of reduce table
+};
+yacco2::State S48_Ctest_components = //State's vectored into symbol: "#failed"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Ctest_components,0,0,0};
+struct S49rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Ctest_components S49rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs9_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S49_Ctest_components = //State's vectored into symbol: "#user-implementation"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Ctest_components,0,0,0};
+struct S50rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Ctest_components S50rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs10_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S50_Ctest_components = //State's vectored into symbol: "#user-imp-tbl"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Ctest_components,0,0,0};
+struct S51rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Ctest_components S51rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs11_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S51_Ctest_components = //State's vectored into symbol: "#user-imp-sym"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Ctest_components,0,0,0};
+struct S52rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S52rtd_Ctest_components S52rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs12_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S52_Ctest_components = //State's vectored into symbol: "#constant-defs"
+{52
+,0,0,0,0,0,(Reduce_tbl*)&S52rt_Ctest_components,0,0,0};
+struct S53rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Ctest_components S53rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs13_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S53_Ctest_components = //State's vectored into symbol: "#terminals-refs"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Ctest_components,0,0,0};
+struct S54rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Ctest_components S54rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs14_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S54_Ctest_components = //State's vectored into symbol: "#terminals-sufx"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Ctest_components,0,0,0};
+struct S55rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Ctest_components S55rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs15_Rtoken_grp4_}
+ }// end of reduce table
+};
+yacco2::State S55_Ctest_components = //State's vectored into symbol: "#lrk-sufx"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Ctest_components,0,0,0};
+struct S56rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Ctest_components S56rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_grp5_}
+ }// end of reduce table
+};
+yacco2::State S56_Ctest_components = //State's vectored into symbol: "#NULL"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Ctest_components,0,0,0};
+struct S57rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S57rtd_Ctest_components S57rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs7_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S57_Ctest_components = //State's vectored into symbol: "::"
+{57
+,0,0,0,0,0,(Reduce_tbl*)&S57rt_Ctest_components,0,0,0};
+struct S58rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S58rtd_Ctest_components S58rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S58_Ctest_components = //State's vectored into symbol: "bad eos"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Ctest_components,0,0,0};
+struct S59rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Ctest_components S59rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S59_Ctest_components = //State's vectored into symbol: "bad esc"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Ctest_components,0,0,0};
+struct S60rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Ctest_components S60rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_grp2_}
+ }// end of reduce table
+};
+yacco2::State S60_Ctest_components = //State's vectored into symbol: "comment-overrun"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Ctest_components,0,0,0};
+struct S61rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Ctest_components S61rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_grp1_}
+ }// end of reduce table
+};
+yacco2::State S61_Ctest_components = //State's vectored into symbol: "bad char"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Ctest_components,0,0,0};
+struct S62rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Ctest_components S62rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_grp5_}
+ }// end of reduce table
+};
+yacco2::State S62_Ctest_components = //State's vectored into symbol: "|+|"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Ctest_components,0,0,0};
+struct S63std_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S63std_Ctest_components S63st_Ctest_components = {
+ 9
+ ,
+ {// start of table
+ {1,(State*)&S64_Ctest_components} // shift sym: LR1_eog
+ ,{3,(State*)&S3_Ctest_components} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S62_Ctest_components} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S65_Ctest_components} // shift sym: Rtoken
+ ,{572,(State*)&S66_Ctest_components} // shift sym: Rtoken_grp1
+ ,{573,(State*)&S67_Ctest_components} // shift sym: Rtoken_grp2
+ ,{574,(State*)&S68_Ctest_components} // shift sym: Rtoken_grp3
+ ,{575,(State*)&S69_Ctest_components} // shift sym: Rtoken_grp4
+ ,{576,(State*)&S70_Ctest_components} // shift sym: Rtoken_grp5
+ }// end of shift table
+};
+yacco2::Shift_entry S63pse_Ctest_components = {3,(State*)&S3_Ctest_components};
+yacco2::Shift_entry S63ase_Ctest_components = {6,(State*)&S62_Ctest_components};
+yacco2::State S63_Ctest_components = //State's vectored into symbol: "Relems"
+{63
+,(Shift_entry*)&S63pse_Ctest_components,(Shift_entry*)&S63ase_Ctest_components
+,0,0,(Shift_tbl*)&S63st_Ctest_components,0,(State_s_thread_tbl*)&S3tt_Ctest_components,0,0};
+struct S64rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Ctest_components S64rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctest_components,Ctest_components::rhs2_Rpass3_}
+ }// end of reduce table
+};
+yacco2::State S64_Ctest_components = //State's vectored into symbol: "eog"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Ctest_components,0,0,0};
+struct S65rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Ctest_components S65rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Relems_}
+ }// end of reduce table
+};
+yacco2::State S65_Ctest_components = //State's vectored into symbol: "Rtoken"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Ctest_components,0,0,0};
+struct S66rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Ctest_components S66rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S66_Ctest_components = //State's vectored into symbol: "Rtoken_grp1"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Ctest_components,0,0,0};
+struct S67rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Ctest_components S67rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs2_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S67_Ctest_components = //State's vectored into symbol: "Rtoken_grp2"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Ctest_components,0,0,0};
+struct S68rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S68rtd_Ctest_components S68rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs3_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S68_Ctest_components = //State's vectored into symbol: "Rtoken_grp3"
+{68
+,0,0,0,0,0,(Reduce_tbl*)&S68rt_Ctest_components,0,0,0};
+struct S69rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S69rtd_Ctest_components S69rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs4_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S69_Ctest_components = //State's vectored into symbol: "Rtoken_grp4"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Ctest_components,0,0,0};
+struct S70rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Ctest_components S70rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs5_Rtoken_}
+ }// end of reduce table
+};
+yacco2::State S70_Ctest_components = //State's vectored into symbol: "Rtoken_grp5"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Ctest_components,0,0,0};
+struct S71rtd_Ctest_components{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Ctest_components S71rt_Ctest_components = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_components,Ctest_components::rhs1_Relems_}
+ }// end of reduce table
+};
+yacco2::State S71_Ctest_components = //State's vectored into symbol: "Rtoken"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Ctest_components,0,0,0};
diff --git a/web/yacco2/compiler/grammars/unq_str.cpp b/web/yacco2/compiler/grammars/unq_str.cpp
new file mode 100644
index 0000000000..2eb2067654
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_str.cpp
@@ -0,0 +1,98 @@
+/*
+ File: unq_str.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "unq_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_unq_str;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Cunq_str::
+ Cunq_str()
+ :yacco2::CAbs_fsm
+ ("unq_str.lex"
+ ,"1.0"
+ ,"29 Nov. 2002"
+ ,false
+ ,"Unquoted string of characters: raw and basic."
+ ,"Fri Jan 30 18:55:27 2015 "
+ ,S1_Cunq_str){
+
+ }
+
+Cunq_str::~Cunq_str(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cunq_str::failed(){
+ return false;
+ }
+ void Cunq_str::op(){
+ parser__->set_use_all_shift_on();
+ c_.erase();
+ if(la_bnds_fnd(parser__->start_token__) == true)
+ parser__->set_use_all_shift_off();// stop the parse
+
+}
+int Cunq_str::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+};
+Runq_str::Runq_str(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Runq_str",0,Cunq_str::R_Runq_str_,P,false,false){
+}
+
+void Runq_str::sr1(){
+
+ Cunq_str* fsm = (Cunq_str*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_unquoted_string(fsm->c_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+
+}
+
+Rchr::Rchr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchr",0,Cunq_str::R_Rchr_,P,false,false){
+}
+
+Rall_shift::Rall_shift(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rall_shift",0,Cunq_str::R_Rall_shift_,P,false,false){
+}
+
+void Rall_shift::sr1(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ Cunq_str* fsm = (Cunq_str*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = sf->p1__;
+ fsm->c_ += sym->id__;
+ if(fsm->la_bnds_fnd(rule_info__.parser__->current_token()) == true){// chk LA
+ rule_info__.parser__->set_use_all_shift_off();
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/unq_str.fsc b/web/yacco2/compiler/grammars/unq_str.fsc
new file mode 100644
index 0000000000..33001a0267
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_str.fsc
@@ -0,0 +1,20 @@
+/*
+ File: unq_str.fsc
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+transitive n
+grammar-name "unq_str"
+name-space "NS_unq_str"
+thread-name "TH_unq_str"
+monolithic n
+file-name "unq_str.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_all_shift_operator
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Unquoted string of characters: raw and basic."
diff --git a/web/yacco2/compiler/grammars/unq_str.h b/web/yacco2/compiler/grammars/unq_str.h
new file mode 100644
index 0000000000..35e82d2845
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_str.h
@@ -0,0 +1,98 @@
+/*
+ File: unq_str.h
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#ifndef __unq_str_h__
+#define __unq_str_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_unq_str;
+
+extern yacco2::State S1_Cunq_str;
+namespace NS_unq_str {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_unq_str(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_unq_str(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Cunq_str: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Runq_str_ = 569//start_of_rule_list + 0
+ ,rhs1_Runq_str_ = 1
+ ,R_Rchr_ = 570//start_of_rule_list + 2
+ ,rhs1_Rchr_ = 2
+ ,rhs2_Rchr_ = 3
+ ,R_Rall_shift_ = 571//start_of_rule_list + 4
+ ,rhs1_Rall_shift_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 5
+ Cunq_str();
+ ~Cunq_str();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+
+ public:
+ bool la_bnds_fnd(CAbs_lr1_sym* Sym){
+ using namespace NS_yacco2_terminals;
+ int id = Sym->enumerated_id__;
+ switch (id){
+ case T_Enum::T_raw_open_brace_: break;
+ case T_Enum::T_raw_close_brace_: break;
+ case T_Enum::T_raw_lf_: break;
+ case T_Enum::T_raw_cr_: break;
+ case T_Enum::T_LR1_eog_: break;
+ case T_Enum::T_T_eol_: break;
+ case T_Enum::T_raw_ht_: break;
+ case T_Enum::T_raw_sp_: break;
+ case T_Enum::T_raw_vt_: break;
+ case T_Enum::T_raw_ff_: break;
+ case T_Enum::T_raw_dbl_quote_: break;
+ default:{
+ return false;
+ }
+ }
+ return true;
+ };
+ std::string c_;
+
+ };
+struct Runq_str;
+struct Rchr;
+struct Rall_shift;
+struct Runq_str:public yacco2::CAbs_lr1_sym {
+ Runq_str(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rchr:public yacco2::CAbs_lr1_sym {
+ Rchr(yacco2::Parser* P);
+ public:
+};
+
+struct Rall_shift:public yacco2::CAbs_lr1_sym {
+ Rall_shift(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/unq_str.lex b/web/yacco2/compiler/grammars/unq_str.lex
new file mode 100644
index 0000000000..4a6f205c77
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_str.lex
@@ -0,0 +1,111 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: unq_str.lex
+Date: 1 Juin 2003
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |unq_str| Thread.\fbreak
+This recognizer could be
+ used in a ``file name'' option of
+ a command line sequence: a quoted filename is used if it
+contains spaces or other abnormal characters
+to be included as part of it.
+The expression recognized is crude: just a wild character loop.
+Once parsed, it does no checking.
+It is left for the calling context to do the validity check.
+Regarding file processing,
+one must still go to the file system for the existance check.
+\fbreak
+Note how the lookahead (LA) character (current token)
+is checked using fsm's
+|la_bnds_chk|
+function to turn off the \allshift consumption.
+
+Why is there no escape sequence like UNIX's scripting:
+the blackslash character-to-literal-accept?
+Well i'm not fighting different contexts and
+how many variants do u need?
+Hear the stomping of my foot? Enough ... just quote it!
+@/
+fsm
+(fsm-id "unq_str.lex",fsm-filename unq_str,fsm-namespace NS_unq_str
+,fsm-class Cunq_str{
+ user-declaration
+ public:
+ bool la_bnds_fnd(CAbs_lr1_sym* Sym){
+ using namespace NS_yacco2_terminals;
+ int id = Sym->enumerated_id__;
+ switch (id){
+ case T_Enum::T_raw_open_brace_: break;
+ case T_Enum::T_raw_close_brace_: break;
+ case T_Enum::T_raw_lf_: break;
+ case T_Enum::T_raw_cr_: break;
+ case T_Enum::T_LR1_eog_: break;
+ case T_Enum::T_T_eol_: break;
+ case T_Enum::T_raw_ht_: break;
+ case T_Enum::T_raw_sp_: break;
+ case T_Enum::T_raw_vt_: break;
+ case T_Enum::T_raw_ff_: break;
+ case T_Enum::T_raw_dbl_quote_: break;
+ default:{
+ return false;
+ }
+ }
+ return true;
+ };
+ std::string c_;
+ ***
+ op
+ parser__->set_use_all_shift_on();
+ c_.erase();
+ if(la_bnds_fnd(parser__->start_token__) == true)
+ parser__->set_use_all_shift_off();// stop the parse
+ ***
+ }
+,fsm-version "1.0" ,fsm-date "29 Nov. 2002"
+,fsm-debug "false" ,fsm-comments "Unquoted string of characters: raw and basic.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_unq_str
+ ***
+ parallel-la-boundary
+eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Runq_str (){
+ -> Rchr {
+ op
+ Cunq_str* fsm = (Cunq_str*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_unquoted_string(fsm->c_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ RSVP(sym);
+ ***
+ }
+}
+
+Rchr (){
+ -> Rall_shift
+ -> Rchr Rall_shift
+}
+
+Rall_shift (){
+ -> |+|{
+ op
+ Cunq_str* fsm = (Cunq_str*)rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = sf->p1__;
+ fsm->c_ += sym->id__;
+ if(fsm->la_bnds_fnd(rule_info__.parser__->current_token()) == true){// chk LA
+ rule_info__.parser__->set_use_all_shift_off();
+ }
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/unq_strsym.cpp b/web/yacco2/compiler/grammars/unq_strsym.cpp
new file mode 100644
index 0000000000..2ffd17f30d
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_strsym.cpp
@@ -0,0 +1,106 @@
+/*
+ File: unq_strsym.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "unq_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_unq_str;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_unq_str::TH_unq_str(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_unq_str;
+ NS_unq_str::Cunq_str Cunq_str_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cunq_str_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_unq_str::PROC_TH_unq_str(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_unq_str";
+ static bool one_time(false);
+ static NS_unq_str::Cunq_str* NS_unq_str_Cunq_str_(0);// parallel-parser's fsm table
+ static Parser* NS_unq_str_Cunq_str_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_unq_str_Cunq_str_ = new NS_unq_str::Cunq_str();// parallel-parser's fsm table
+ NS_unq_str_Cunq_str_parser = new Parser(*NS_unq_str_Cunq_str_,Caller_pp);
+ }
+ proc_parser = NS_unq_str_Cunq_str_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cunq_str::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Runq_str_:{
+ Runq_str* sym;
+ if(re->rule_ == 0){
+ sym = new Runq_str(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Runq_str*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rall_shift_:{
+ Rall_shift* sym;
+ if(re->rule_ == 0){
+ sym = new Rall_shift(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rall_shift*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/unq_strtbl.cpp b/web/yacco2/compiler/grammars/unq_strtbl.cpp
new file mode 100644
index 0000000000..492a1501c5
--- /dev/null
+++ b/web/yacco2/compiler/grammars/unq_strtbl.cpp
@@ -0,0 +1,112 @@
+/*
+ File: unq_strtbl.cpp
+ Date and Time: Fri Jan 30 18:55:27 2015
+*/
+#include "unq_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_unq_str;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cunq_str[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cunq_str;
+extern yacco2::State S2_Cunq_str;
+extern yacco2::State S3_Cunq_str;
+extern yacco2::State S4_Cunq_str;
+extern yacco2::State S5_Cunq_str;
+struct S1std_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cunq_str S1st_Cunq_str = {
+ 4
+ ,
+ {// start of table
+ {6,(State*)&S2_Cunq_str} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Cunq_str} // accept sym: Runq_str
+ ,{570,(State*)&S3_Cunq_str} // shift sym: Rchr
+ ,{571,(State*)&S5_Cunq_str} // shift sym: Rall_shift
+ }// end of shift table
+};
+yacco2::Shift_entry S1ase_Cunq_str = {6,(State*)&S2_Cunq_str};
+yacco2::State S1_Cunq_str = //State's vectored into symbol: " No symbol"
+{1
+,0,(Shift_entry*)&S1ase_Cunq_str
+,0,0,(Shift_tbl*)&S1st_Cunq_str,0,0,0,0};
+struct S2rtd_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cunq_str S2rt_Cunq_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cunq_str,Cunq_str::rhs1_Rall_shift_}
+ }// end of reduce table
+};
+yacco2::State S2_Cunq_str = //State's vectored into symbol: "|+|"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cunq_str,0,0,0};
+struct S3std_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Cunq_str S3st_Cunq_str = {
+ 2
+ ,
+ {// start of table
+ {6,(State*)&S2_Cunq_str} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S4_Cunq_str} // shift sym: Rall_shift
+ }// end of shift table
+};
+yacco2::Shift_entry S3ase_Cunq_str = {6,(State*)&S2_Cunq_str};
+struct S3rtd_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cunq_str S3rt_Cunq_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cunq_str,Cunq_str::rhs1_Runq_str_}
+ }// end of reduce table
+};
+yacco2::State S3_Cunq_str = //State's vectored into symbol: "Rchr"
+{3
+,0,(Shift_entry*)&S3ase_Cunq_str
+,0,0,(Shift_tbl*)&S3st_Cunq_str,(Reduce_tbl*)&S3rt_Cunq_str,0,0,0};
+struct S4rtd_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cunq_str S4rt_Cunq_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cunq_str,Cunq_str::rhs2_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S4_Cunq_str = //State's vectored into symbol: "Rall_shift"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cunq_str,0,0,0};
+struct S5rtd_Cunq_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cunq_str S5rt_Cunq_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cunq_str,Cunq_str::rhs1_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S5_Cunq_str = //State's vectored into symbol: "Rall_shift"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cunq_str,0,0,0};
diff --git a/web/yacco2/compiler/grammars/ws.cpp b/web/yacco2/compiler/grammars/ws.cpp
new file mode 100644
index 0000000000..4cf3a26fa1
--- /dev/null
+++ b/web/yacco2/compiler/grammars/ws.cpp
@@ -0,0 +1,95 @@
+/*
+ File: ws.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "ws.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_ws;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cws::
+ Cws()
+ :yacco2::CAbs_fsm
+ ("ws.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,false
+ ,"White space globber."
+ ,"Fri Jan 30 18:55:28 2015 "
+ ,S1_Cws){
+
+ }
+
+Cws::~Cws(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cws::failed(){
+ return false;
+ }
+ void Cws::op(){
+}
+int Cws::rhs_to_rules_mapping_[6] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+};
+
+ void Cws::read_white_stuff(){
+loop:
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_sp_: goto other;
+ case T_Enum::T_raw_ht_: goto other;
+ case T_Enum::T_raw_vt_: goto other;
+ case T_Enum::T_raw_ff_: goto other;
+ default: return;
+ }
+ other:{
+ parser__->get_next_token();
+goto loop;
+ }
+
+ }
+
+Rws::Rws(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rws",0,Cws::R_Rws_,P,false,false){
+}
+
+void Rws::sr1(){
+
+ Cws* fsm = (Cws*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_ws__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+
+}
+
+Rchr::Rchr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rchr",0,Cws::R_Rchr_,P,false,false){
+}
+
+void Rchr::op(){
+ sstrace_rulesss
+
+ Cws* fsm = (Cws*) rule_info__.parser__->fsm_tbl__;
+ fsm->read_white_stuff();// current token is the next character to assess
+
+}
diff --git a/web/yacco2/compiler/grammars/ws.fsc b/web/yacco2/compiler/grammars/ws.fsc
new file mode 100644
index 0000000000..0c6120c051
--- /dev/null
+++ b/web/yacco2/compiler/grammars/ws.fsc
@@ -0,0 +1,23 @@
+/*
+ File: ws.fsc
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+transitive n
+grammar-name "ws"
+name-space "NS_ws"
+thread-name "TH_ws"
+monolithic n
+file-name "ws.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ raw_ht
+ raw_vt
+ raw_ff
+ raw_sp
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"White space globber."
diff --git a/web/yacco2/compiler/grammars/ws.h b/web/yacco2/compiler/grammars/ws.h
new file mode 100644
index 0000000000..d6d8d08f83
--- /dev/null
+++ b/web/yacco2/compiler/grammars/ws.h
@@ -0,0 +1,71 @@
+/*
+ File: ws.h
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#ifndef __ws_h__
+#define __ws_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_ws;
+
+extern yacco2::State S1_Cws;
+namespace NS_ws {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_ws(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_ws(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cws: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rws_ = 569//start_of_rule_list + 0
+ ,rhs1_Rws_ = 1
+ ,R_Rchr_ = 570//start_of_rule_list + 2
+ ,rhs1_Rchr_ = 2
+ ,rhs2_Rchr_ = 3
+ ,rhs3_Rchr_ = 4
+ ,rhs4_Rchr_ = 5
+ };
+ //no of la sets = 2
+ //no of states = 7
+ Cws();
+ ~Cws();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[6];
+
+ public:
+ void read_white_stuff();
+
+ };
+struct Rws;
+struct Rchr;
+struct Rws:public yacco2::CAbs_lr1_sym {
+ Rws(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rchr:public yacco2::CAbs_lr1_sym {
+ Rchr(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/ws.lex b/web/yacco2/compiler/grammars/ws.lex
new file mode 100644
index 0000000000..3104becb50
--- /dev/null
+++ b/web/yacco2/compiler/grammars/ws.lex
@@ -0,0 +1,105 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: ws.lex
+Date: 17 Juin 2003
+Purpose: white space lexer
+Conduit: ws
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |ws| Thread.\fbreak
+White space globber of:\fbreak
+\ptindent{1) \] --- space}
+\ptindent{2) horizontal tab}
+\ptindent{3) vertical tab}
+\ptindent{4) form feed}
+Use a global pointer to it as it is just an indicator.
+The new / delete cycle is too expensive.
+
+As the data accepted is not needed, i skip building up its characters
+in a local string.
+@/
+fsm
+(fsm-id "ws.lex",fsm-filename ws,fsm-namespace NS_ws
+,fsm-class Cws{
+ user-declaration
+ public:
+ void read_white_stuff();
+ ***
+ user-implementation
+ void Cws::read_white_stuff(){
+loop:
+ switch (parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_sp_: goto other;
+ case T_Enum::T_raw_ht_: goto other;
+ case T_Enum::T_raw_vt_: goto other;
+ case T_Enum::T_raw_ff_: goto other;
+ default: return;
+ }
+ other:{
+ parser__->get_next_token();
+goto loop;
+ }
+
+ }
+ ***
+ }
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false",fsm-comments "White space globber.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_ws
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rws (){
+ -> Rchr |.|{
+ op
+ Cws* fsm = (Cws*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = NS_yacco2_terminals::PTR_ws__;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ ***
+ }
+}
+
+Rchr (
+lhs{
+/@
+Why the previous stack frame?
+Cuz the finite state implementation has the
+vectoring symbol associated with its state and
+the current stack frame is its goto state
+with no associated symbol.
+
+Why the delayed grabbing of the character here instead of
+at its subrule?
+To prevent code bloat and to improvize.
+@/
+ op
+ Cws* fsm = (Cws*) rule_info__.parser__->fsm_tbl__;
+ fsm->read_white_stuff();// current token is the next character to assess
+ ***
+ }
+){
+ ->
+ /@
+The white space is dotted in the
+diagram due to |convertMPtoPDF| limitations.
+ @/
+
+" "
+ -> "x09" // ht
+ -> "x0b" // vt
+ -> "x0c" // ff
+}
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/wssym.cpp b/web/yacco2/compiler/grammars/wssym.cpp
new file mode 100644
index 0000000000..a2bca394cf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/wssym.cpp
@@ -0,0 +1,123 @@
+/*
+ File: wssym.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "ws.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_ws;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_ws::TH_ws(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_ws;
+ NS_ws::Cws Cws_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cws_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_ws::PROC_TH_ws(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_ws";
+ static bool one_time(false);
+ static NS_ws::Cws* NS_ws_Cws_(0);// parallel-parser's fsm table
+ static Parser* NS_ws_Cws_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_ws_Cws_ = new NS_ws::Cws();// parallel-parser's fsm table
+ NS_ws_Cws_parser = new Parser(*NS_ws_Cws_,Caller_pp);
+ }
+ proc_parser = NS_ws_Cws_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cws::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rws_:{
+ Rws* sym;
+ if(re->rule_ == 0){
+ sym = new Rws(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rws*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs2_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/wstbl.cpp b/web/yacco2/compiler/grammars/wstbl.cpp
new file mode 100644
index 0000000000..3baac8de71
--- /dev/null
+++ b/web/yacco2/compiler/grammars/wstbl.cpp
@@ -0,0 +1,135 @@
+/*
+ File: wstbl.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "ws.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_ws;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cws[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cws[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cws;
+extern yacco2::State S2_Cws;
+extern yacco2::State S3_Cws;
+extern yacco2::State S4_Cws;
+extern yacco2::State S5_Cws;
+extern yacco2::State S6_Cws;
+extern yacco2::State S7_Cws;
+struct S1std_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Cws S1st_Cws = {
+ 6
+ ,
+ {// start of table
+ {17,(State*)&S2_Cws} // shift sym: raw_ht
+ ,{19,(State*)&S3_Cws} // shift sym: raw_vt
+ ,{20,(State*)&S4_Cws} // shift sym: raw_ff
+ ,{40,(State*)&S5_Cws} // shift sym: raw_sp
+ ,{569,(State*)&S1_Cws} // accept sym: Rws
+ ,{570,(State*)&S6_Cws} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::State S1_Cws = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cws,0,0,0,0};
+struct S2rtd_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cws S2rt_Cws = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cws,Cws::rhs2_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S2_Cws = //State's vectored into symbol: "x09"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cws,0,0,0};
+struct S3rtd_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cws S3rt_Cws = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cws,Cws::rhs3_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S3_Cws = //State's vectored into symbol: "x0b"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Cws,0,0,0};
+struct S4rtd_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cws S4rt_Cws = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cws,Cws::rhs4_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S4_Cws = //State's vectored into symbol: "x0c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cws,0,0,0};
+struct S5rtd_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cws S5rt_Cws = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cws,Cws::rhs1_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S5_Cws = //State's vectored into symbol: " "
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cws,0,0,0};
+struct S6std_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S6std_Cws S6st_Cws = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S7_Cws} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S6ise_Cws = {5,(State*)&S7_Cws};
+yacco2::State S6_Cws = //State's vectored into symbol: "Rchr"
+{6
+,0,0,(Shift_entry*)&S6ise_Cws
+,0,(Shift_tbl*)&S6st_Cws,0,0,0,0};
+struct S7rtd_Cws{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cws S7rt_Cws = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cws,Cws::rhs1_Rws_}
+ }// end of reduce table
+};
+yacco2::State S7_Cws = //State's vectored into symbol: "|.|"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cws,0,0,0};
diff --git a/web/yacco2/compiler/grammars/xc_str.cpp b/web/yacco2/compiler/grammars/xc_str.cpp
new file mode 100644
index 0000000000..42dae4878c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_str.cpp
@@ -0,0 +1,126 @@
+/*
+ File: xc_str.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "xc_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_xc_str;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cxc_str::
+ Cxc_str()
+ :yacco2::CAbs_fsm
+ ("xc_str.lex"
+ ,"1.0"
+ ,"27 Juin 2005"
+ ,false
+ ,"No escape sequence check: accept all characters between dbl. quoted string."
+ ,"Fri Jan 30 18:55:28 2015 "
+ ,S1_Cxc_str){
+
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+ }
+
+Cxc_str::~Cxc_str(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cxc_str::failed(){
+ return false;
+ }
+ void Cxc_str::op(){
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+
+}
+int Cxc_str::rhs_to_rules_mapping_[3] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+};
+
+ void Cxc_str::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cxc_str::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+
+Rxc_str::Rxc_str(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rxc_str",0,Cxc_str::R_Rxc_str_,P,false,false){
+}
+
+void Rxc_str::sr1(){
+
+ Cxc_str* fsm = (Cxc_str*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_xc_str((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+
+}
+
+Rquote::Rquote(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rquote",0,Cxc_str::R_Rquote_,P,false,false){
+}
+
+void Rquote::sr1(){
+
+ Cxc_str* fsm = (Cxc_str*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_dbl_quote_: goto dblquote;
+ default: goto other;
+ }
+ dblquote:{ // end of string
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_dbl_quote_){
+ fsm->copy_kstr_into_buffer("\"");// due to lex scanner
+ fsm->copy_kstr_into_buffer("\"");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of c string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+
+}
+
diff --git a/web/yacco2/compiler/grammars/xc_str.fsc b/web/yacco2/compiler/grammars/xc_str.fsc
new file mode 100644
index 0000000000..c4f1ca7214
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_str.fsc
@@ -0,0 +1,20 @@
+/*
+ File: xc_str.fsc
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+transitive n
+grammar-name "xc_str"
+name-space "NS_xc_str"
+thread-name "TH_xc_str"
+monolithic n
+file-name "xc_str.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_dbl_quote
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"No escape sequence check: accept all characters between dbl. quoted string."
diff --git a/web/yacco2/compiler/grammars/xc_str.h b/web/yacco2/compiler/grammars/xc_str.h
new file mode 100644
index 0000000000..c943840463
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_str.h
@@ -0,0 +1,71 @@
+/*
+ File: xc_str.h
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#ifndef __xc_str_h__
+#define __xc_str_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_xc_str;
+
+extern yacco2::State S1_Cxc_str;
+namespace NS_xc_str {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_xc_str(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_xc_str(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cxc_str: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rxc_str_ = 569//start_of_rule_list + 0
+ ,rhs1_Rxc_str_ = 1
+ ,R_Rquote_ = 570//start_of_rule_list + 2
+ ,rhs1_Rquote_ = 2
+ };
+ //no of la sets = 2
+ //no of states = 4
+ Cxc_str();
+ ~Cxc_str();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[3];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Rxc_str;
+struct Rquote;
+struct Rxc_str:public yacco2::CAbs_lr1_sym {
+ Rxc_str(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+struct Rquote:public yacco2::CAbs_lr1_sym {
+ Rquote(yacco2::Parser* P);
+ public:
+ void sr1();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/compiler/grammars/xc_str.lex b/web/yacco2/compiler/grammars/xc_str.lex
new file mode 100644
index 0000000000..6f67720bba
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_str.lex
@@ -0,0 +1,130 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: xc_str.lex
+Dates: 17 Juin 2003
+Purpose: double quoted string with no escape seq.
+Returned: T_xc_str
+ Err_bad_eos - meta terminal indicating an improper end-of-string
+ this occurs on eof,eog, or an eol terminal ending the string
+Note: Stripped of its double quotes for ease of use
+*/
+/@
+@i "/usr/local/yacco2/copyright.w"
+@** |xc_str| Thread.\fbreak
+Doubled quoted string without the escape sequences.
+@/
+fsm
+(fsm-id "xc_str.lex",fsm-filename xc_str,fsm-namespace NS_xc_str
+,fsm-class Cxc_str {
+ user-declaration
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+ ***
+ user-implementation
+ void Cxc_str::copy_str_into_buffer(std::string* Str){
+ const char* y = Str->c_str();
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ void Cxc_str::copy_kstr_into_buffer(const char* Str){
+ const char* y = Str;
+ int x(0);
+ for(;y[x]!=0;++x,++ddd_idx_)ddd_[ddd_idx_] = y[x];
+ ddd_[ddd_idx_] = 0;
+ }
+ ***
+ constructor
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+ op
+ ddd_idx_ = 0;
+ ddd_[ddd_idx_] = 0;
+ ***
+}
+,fsm-version "1.0" ,fsm-date "27 Juin 2005"
+,fsm-debug "false"
+,fsm-comments "No escape sequence check: accept all characters between dbl. quoted string.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_xc_str
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rxc_str
+/@
+Use of \invisibleshift to lower the number of members in the lookahead set.
+@/
+()
+{
+ -> Rquote |.| {
+ op
+ Cxc_str* fsm = (Cxc_str*) rule_info__.parser__->fsm_tbl__;
+ CAbs_lr1_sym* sym = new T_xc_str((const char*)&fsm->ddd_);
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ ***
+ }
+}
+
+Rquote (){
+ -> "\"" {
+ /@
+ Mpost weakness in literal form so substitute the double quote for
+``char(34)'' in diagram. The finite state automata recognition is to lower
+the push / pop lr1 activity as this is a lexical automata.
+ @/
+
+ op
+ Cxc_str* fsm = (Cxc_str*) rule_info__.parser__->fsm_tbl__;
+loop:
+ switch (rule_info__.parser__->current_token()->enumerated_id__){
+ case T_Enum::T_raw_lf_: goto overrun;
+ case T_Enum::T_raw_cr_: goto overrun;
+ case T_Enum::T_LR1_eog_: goto overrun;
+ case T_Enum::T_raw_dbl_quote_: goto dblquote;
+ default: goto other;
+ }
+ dblquote:{ // end of string
+ rule_info__.parser__->get_next_token();
+ if(rule_info__.parser__->current_token()->enumerated_id__
+ == T_Enum::T_raw_dbl_quote_){
+ fsm->copy_kstr_into_buffer("\"");// due to lex scanner
+ fsm->copy_kstr_into_buffer("\"");
+ rule_info__.parser__->get_next_token();
+ goto loop;
+ }
+ return;// end of c string
+ }
+ overrun:{
+ CAbs_lr1_sym* sym = new Err_bad_eos;
+ sym->set_rc(*rule_info__.parser__->start_token__,__FILE__,__LINE__);
+ sym->set_line_no_and_pos_in_line(*rule_info__.parser__->start_token__);
+ RSVP(sym);
+ rule_info__.parser__->set_stop_parse(true);
+ return;
+ }
+ other:{
+ fsm->copy_kstr_into_buffer(rule_info__.parser__->current_token()->id__);
+ rule_info__.parser__->get_next_token();
+goto loop;
+ }
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/compiler/grammars/xc_strsym.cpp b/web/yacco2/compiler/grammars/xc_strsym.cpp
new file mode 100644
index 0000000000..5178c843de
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_strsym.cpp
@@ -0,0 +1,78 @@
+/*
+ File: xc_strsym.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "xc_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_xc_str;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_xc_str::TH_xc_str(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_xc_str;
+ NS_xc_str::Cxc_str Cxc_str_;// parallel-parser's parse table
+#define ssPARSE_TABLE Cxc_str_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_xc_str::PROC_TH_xc_str(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_xc_str";
+ static bool one_time(false);
+ static NS_xc_str::Cxc_str* NS_xc_str_Cxc_str_(0);// parallel-parser's fsm table
+ static Parser* NS_xc_str_Cxc_str_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_xc_str_Cxc_str_ = new NS_xc_str::Cxc_str();// parallel-parser's fsm table
+ NS_xc_str_Cxc_str_parser = new Parser(*NS_xc_str_Cxc_str_,Caller_pp);
+ }
+ proc_parser = NS_xc_str_Cxc_str_parser;
+#include "wproc_pp_core.h"
+}
+void
+Cxc_str::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rxc_str_:{
+ Rxc_str* sym;
+ if(re->rule_ == 0){
+ sym = new Rxc_str(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rxc_str*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ return;}
+ case rhs1_Rquote_:{
+ Rquote* sym;
+ if(re->rule_ == 0){
+ sym = new Rquote(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rquote*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/compiler/grammars/xc_strtbl.cpp b/web/yacco2/compiler/grammars/xc_strtbl.cpp
new file mode 100644
index 0000000000..034327182b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/xc_strtbl.cpp
@@ -0,0 +1,87 @@
+/*
+ File: xc_strtbl.cpp
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#include "xc_str.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_xc_str;// grammar's ns
+// first set terminals
+// LR1_invisible_shift_operator
+yacco2::UCHAR LA1_Cxc_str[] ={
+1
+,0,32
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cxc_str[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cxc_str;
+extern yacco2::State S2_Cxc_str;
+extern yacco2::State S3_Cxc_str;
+extern yacco2::State S4_Cxc_str;
+struct S1std_Cxc_str{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cxc_str S1st_Cxc_str = {
+ 3
+ ,
+ {// start of table
+ {42,(State*)&S2_Cxc_str} // shift sym: raw_dbl_quote
+ ,{569,(State*)&S1_Cxc_str} // accept sym: Rxc_str
+ ,{570,(State*)&S3_Cxc_str} // shift sym: Rquote
+ }// end of shift table
+};
+yacco2::State S1_Cxc_str = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cxc_str,0,0,0,0};
+struct S2rtd_Cxc_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cxc_str S2rt_Cxc_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cxc_str,Cxc_str::rhs1_Rquote_}
+ }// end of reduce table
+};
+yacco2::State S2_Cxc_str = //State's vectored into symbol: "\""
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cxc_str,0,0,0};
+struct S3std_Cxc_str{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cxc_str S3st_Cxc_str = {
+ 1
+ ,
+ {// start of table
+ {5,(State*)&S4_Cxc_str} // shift sym: LR1_invisible_shift_operator
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_Cxc_str = {5,(State*)&S4_Cxc_str};
+yacco2::State S3_Cxc_str = //State's vectored into symbol: "Rquote"
+{3
+,0,0,(Shift_entry*)&S3ise_Cxc_str
+,0,(Shift_tbl*)&S3st_Cxc_str,0,0,0,0};
+struct S4rtd_Cxc_str{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cxc_str S4rt_Cxc_str = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cxc_str,Cxc_str::rhs1_Rxc_str_}
+ }// end of reduce table
+};
+yacco2::State S4_Cxc_str = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cxc_str,0,0,0};
diff --git a/web/yacco2/compiler/grammars/yacco2.fsc b/web/yacco2/compiler/grammars/yacco2.fsc
new file mode 100644
index 0000000000..9b5114ea49
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2.fsc
@@ -0,0 +1,91 @@
+file-of-T-alphabet "/usr/local/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+emitfile "/usr/local/yacco2/compiler/grammars/yacco2_fsc.cpp"
+preamble
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+end-preamble
+"/usr/local/yacco2/compiler/grammars/rules_use_cnt.fsc"
+"/usr/local/yacco2/compiler/grammars/enumerate_grammar.fsc"
+"/usr/local/yacco2/compiler/grammars/enumerate_T_alphabet.fsc"
+"/usr/local/yacco2/compiler/grammars/angled_string.fsc"
+"/usr/local/yacco2/compiler/grammars/bad_char_set.fsc"
+"/usr/local/yacco2/compiler/grammars/c_comments.fsc"
+"/usr/local/yacco2/compiler/grammars/c_literal.fsc"
+"/usr/local/yacco2/compiler/grammars/c_string.fsc"
+"/usr/local/yacco2/compiler/grammars/cweb_or_c_k.fsc"
+"/usr/local/yacco2/compiler/grammars/cweave_fsm_sdc.fsc"
+"/usr/local/yacco2/compiler/grammars/cweave_lhs_sdc.fsc"
+"/usr/local/yacco2/compiler/grammars/cweave_sdc.fsc"
+"/usr/local/yacco2/compiler/grammars/cweave_T_sdc.fsc"
+"/usr/local/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc"
+"/usr/local/yacco2/compiler/grammars/dbl_colon.fsc"
+"/usr/local/yacco2/compiler/grammars/eol.fsc"
+"/usr/local/yacco2/compiler/grammars/epsilon_rules.fsc"
+"/usr/local/yacco2/compiler/grammars/err_symbols_ph.fsc"
+"/usr/local/yacco2/compiler/grammars/err_symbols_ph_th.fsc"
+"/usr/local/yacco2/compiler/grammars/esc_seq.fsc"
+"/usr/local/yacco2/compiler/grammars/eval_phrases.fsc"
+"/usr/local/yacco2/compiler/grammars/fsc_file.fsc"
+"/usr/local/yacco2/compiler/grammars/fsm_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/fsm_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/fsm_class_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/identifier.fsc"
+"/usr/local/yacco2/compiler/grammars/int_no.fsc"
+"/usr/local/yacco2/compiler/grammars/la_expr.fsc"
+"/usr/local/yacco2/compiler/grammars/la_expr_lexical.fsc"
+"/usr/local/yacco2/compiler/grammars/la_expr_src.fsc"
+"/usr/local/yacco2/compiler/grammars/la_lrk_T.fsc"
+"/usr/local/yacco2/compiler/grammars/lr1_k_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/link_cleanser.fsc"
+"/usr/local/yacco2/compiler/grammars/linker_id.fsc"
+"/usr/local/yacco2/compiler/grammars/linker_pass3.fsc"
+"/usr/local/yacco2/compiler/grammars/linker_preamble_code.fsc"
+"/usr/local/yacco2/compiler/grammars/lint_balls.fsc"
+"/usr/local/yacco2/compiler/grammars/lr1_k_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/mpost_output.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_sdc.fsc"
+"/usr/local/yacco2/compiler/grammars/parallel_monitor_ph.fsc"
+"/usr/local/yacco2/compiler/grammars/parallel_parser_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/parallel_parser_ph_th.fsc"
+"/usr/local/yacco2/compiler/grammars/parallel_oper.fsc"
+"/usr/local/yacco2/compiler/grammars/pass3.fsc"
+"/usr/local/yacco2/compiler/grammars/prefile_include.fsc"
+"/usr/local/yacco2/compiler/grammars/prt_xrefs_docs.fsc"
+"/usr/local/yacco2/compiler/grammars/prt_sr_elements.fsc"
+"/usr/local/yacco2/compiler/grammars/rc_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/rc_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/rhs_bnd.fsc"
+"/usr/local/yacco2/compiler/grammars/rhs_component.fsc"
+"/usr/local/yacco2/compiler/grammars/rtn_component.fsc"
+"/usr/local/yacco2/compiler/grammars/rule_def_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/rules_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/rules_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/rule_lhs_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/subrule_def.fsc"
+"/usr/local/yacco2/compiler/grammars/subrules_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/subrule_vector.fsc"
+"/usr/local/yacco2/compiler/grammars/terminals_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/terminals_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/test_components.fsc"
+"/usr/local/yacco2/compiler/grammars/t_alphabet.fsc"
+"/usr/local/yacco2/compiler/grammars/T_enum_phrase.fsc"
+"/usr/local/yacco2/compiler/grammars/T_enum_phrase_th.fsc"
+"/usr/local/yacco2/compiler/grammars/t_def_delabort_tags.fsc"
+"/usr/local/yacco2/compiler/grammars/term_def_ph.fsc"
+"/usr/local/yacco2/compiler/grammars/terminal_def_symclass.fsc"
+"/usr/local/yacco2/compiler/grammars/unq_str.fsc"
+"/usr/local/yacco2/compiler/grammars/ws.fsc"
+"/usr/local/yacco2/compiler/grammars/xc_str.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_code_end.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_err_hdlr.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_lcl_opt.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_lcl_opts.fsc"
+"/usr/local/yacco2/compiler/grammars/o2_linker_opts.fsc"
diff --git a/web/yacco2/compiler/grammars/yacco2_T_enumeration.T b/web/yacco2/compiler/grammars/yacco2_T_enumeration.T
new file mode 100644
index 0000000000..de883be962
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_T_enumeration.T
@@ -0,0 +1,39 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: yacco2_T_enumeration.lex
+Date: 10 July 00
+Author: Dave Bone
+Purpose:
+ Supplies emitted enumeration file name and namespace. The lr1 compiler/compiler
+ generates the "enum" type for the 4 classes of terminals:
+ 1) lr1 constants
+ 2) raw characters
+ 3) errors
+ 4) terminals
+ Note:
+ The enumerated type is emitted which is referenced in the other
+ emitted grammars via the "#include" directive having a symbol ordering:
+ 0 <= Lr1_K < raw chars < error terminals < Terminals < grammar's Rules
+ The subrules of a grammar's rule are locally enumerated within the grammar
+ starting from 1.
+
+ This order is per emitted grammar. That is to say, each parallel grammar has
+ its own generated lr1 table using the enumerated terminal class symbols with
+ its enumerated rules starting 1 after the high bound of the enumerated terminal
+ classes.
+ After the parameters, a { k-body } can follow. This k-body
+ is used for global definitions of contants:
+ {
+ constant-defs
+ C++ syntax directed code for constant definitions
+ ***
+ }
+
+*/
+T-enumeration
+(file-name yacco2_T_enumeration
+,name-space NS_yacco2_T_enum) {
+}
diff --git a/web/yacco2/compiler/grammars/yacco2_T_enumeration.fsc b/web/yacco2/compiler/grammars/yacco2_T_enumeration.fsc
new file mode 100644
index 0000000000..019d2958ca
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_T_enumeration.fsc
@@ -0,0 +1,575 @@
+/*
+ File: yacco2_T_enumeration.fsc
+ Date and Time: Sun Apr 20 13:54:30 2014
+*/
+T-alphabet
+LR1_questionable_shift_operator
+LR1_eog
+LR1_eolr
+LR1_parallel_operator
+LR1_reduce_operator
+LR1_invisible_shift_operator
+LR1_all_shift_operator
+LR1_fset_transience_operator
+raw_nul
+raw_soh
+raw_stx
+raw_etx
+raw_eot
+raw_enq
+raw_ack
+raw_bel
+raw_bs
+raw_ht
+raw_lf
+raw_vt
+raw_ff
+raw_cr
+raw_so
+raw_si
+raw_dle
+raw_dc1
+raw_dc2
+raw_dc3
+raw_dc4
+raw_nak
+raw_syn
+raw_etb
+raw_can
+raw_em
+raw_sub
+raw_esc
+raw_fs
+raw_gs
+raw_rs
+raw_us
+raw_sp
+raw_exclam
+raw_dbl_quote
+raw_no_sign
+raw_dollar_sign
+raw_percent
+raw_ampersign
+raw_right_quote
+raw_open_bracket
+raw_close_bracket
+raw_asteric
+raw_plus
+raw_comma
+raw_minus
+raw_period
+raw_slash
+raw_0
+raw_1
+raw_2
+raw_3
+raw_4
+raw_5
+raw_6
+raw_7
+raw_8
+raw_9
+raw_colon
+raw_semi_colon
+raw_less_than
+raw_eq
+raw_gt_than
+raw_question_mark
+raw_at_sign
+raw_A
+raw_B
+raw_C
+raw_D
+raw_E
+raw_F
+raw_G
+raw_H
+raw_I
+raw_J
+raw_K
+raw_L
+raw_M
+raw_N
+raw_O
+raw_P
+raw_Q
+raw_R
+raw_S
+raw_T
+raw_U
+raw_V
+raw_W
+raw_X
+raw_Y
+raw_Z
+raw_open_sq_bracket
+raw_back_slash
+raw_close_sq_bracket
+raw_up_arrow
+raw_under_score
+raw_left_quote
+raw_a
+raw_b
+raw_c
+raw_d
+raw_e
+raw_f
+raw_g
+raw_h
+raw_i
+raw_j
+raw_k
+raw_l
+raw_m
+raw_n
+raw_o
+raw_p
+raw_q
+raw_r
+raw_s
+raw_t
+raw_u
+raw_v
+raw_w
+raw_x
+raw_y
+raw_z
+raw_open_brace
+raw_vertical_line
+raw_close_brace
+raw_tilde
+raw_del
+raw_x80
+raw_x81
+raw_x82
+raw_x83
+raw_x84
+raw_x85
+raw_x86
+raw_x87
+raw_x88
+raw_x89
+raw_x8a
+raw_x8b
+raw_x8c
+raw_x8d
+raw_x8e
+raw_x8f
+raw_x90
+raw_x91
+raw_x92
+raw_x93
+raw_x94
+raw_x95
+raw_x96
+raw_x97
+raw_x98
+raw_x99
+raw_x9a
+raw_x9b
+raw_x9c
+raw_x9d
+raw_x9e
+raw_x9f
+raw_xa0
+raw_xa1
+raw_xa2
+raw_xa3
+raw_xa4
+raw_xa5
+raw_xa6
+raw_xa7
+raw_xa8
+raw_xa9
+raw_xaa
+raw_xab
+raw_xac
+raw_xad
+raw_xae
+raw_xaf
+raw_xb0
+raw_xb1
+raw_xb2
+raw_xb3
+raw_xb4
+raw_xb5
+raw_xb6
+raw_xb7
+raw_xb8
+raw_xb9
+raw_xba
+raw_xbb
+raw_xbc
+raw_xbd
+raw_xbe
+raw_xbf
+raw_xc0
+raw_xc1
+raw_xc2
+raw_xc3
+raw_xc4
+raw_xc5
+raw_xc6
+raw_xc7
+raw_xc8
+raw_xc9
+raw_xca
+raw_xcb
+raw_xcc
+raw_xcd
+raw_xce
+raw_xcf
+raw_xd0
+raw_xd1
+raw_xd2
+raw_xd3
+raw_xd4
+raw_xd5
+raw_xd6
+raw_xd7
+raw_xd8
+raw_xd9
+raw_xda
+raw_xdb
+raw_xdc
+raw_xdd
+raw_xde
+raw_xdf
+raw_xe0
+raw_xe1
+raw_xe2
+raw_xe3
+raw_xe4
+raw_xe5
+raw_xe6
+raw_xe7
+raw_xe8
+raw_xe9
+raw_xea
+raw_xeb
+raw_xec
+raw_xed
+raw_xee
+raw_xef
+raw_xf0
+raw_xf1
+raw_xf2
+raw_xf3
+raw_xf4
+raw_xf5
+raw_xf6
+raw_xf7
+raw_xf8
+raw_xf9
+raw_xfa
+raw_xfb
+raw_xfc
+raw_xfd
+raw_xfe
+raw_xff
+T_option_t
+T_option_p
+T_option_err
+T_esc_seq
+T_eol
+T_basic_char
+T_raw_char
+T_comment
+T_ws
+T_angled_string
+T_c_literal
+T_c_string
+T_xc_str
+T_unquoted_string
+T_file_inclusion
+T_identifier
+T_int_no
+T_raw_characters
+T_lr1_constant_symbols
+T_error_symbols
+T_eocode
+T_AD
+T_AB
+T_parallel_la_boundary
+T_arbitrator_code
+T_parallel_parser
+T_parallel_thread_function
+T_parallel_control_monitor
+T_fsm
+T_fsm_id
+T_fsm_filename
+T_fsm_namespace
+T_fsm_class
+T_fsm_version
+T_fsm_date
+T_fsm_debug
+T_fsm_comments
+T_terminals
+T_enumeration
+T_file_name
+T_name_space
+T_sym_class
+T_rules
+T_lhs
+T_user_declaration
+T_user_prefix_declaration
+T_user_suffix_declaration
+T_constructor
+T_destructor
+T_op
+T_failed
+T_user_implementation
+T_user_imp_tbl
+T_user_imp_sym
+T_constant_defs
+T_terminals_refs
+T_terminals_sufx
+T_lrk_sufx
+T_selector
+T_NULL
+T_2colon
+T_block
+T_syntax_code
+T_fsm_class_phrase
+T_fsm_phrase
+T_parallel_parser_phrase
+T_enum_phrase
+T_terminal_def
+table_entry
+T_sym_tbl_report_card
+T_terminals_phrase
+T_error_symbols_phrase
+T_lr1_k_phrase
+T_rc_phrase
+T_rule_lhs_phrase
+T_parallel_monitor_phrase
+rule_def
+T_rules_phrase
+T_subrule_def
+T_subrules_phrase
+T_in_stbl
+refered_T
+rule_in_stbl
+refered_rule
+T_transitive
+T_grammar_name
+T_thread_name
+T_monolithic
+T_no_of_T
+T_list_of_native_first_set_terminals
+T_end_list_of_native_first_set_terminals
+T_list_of_transitive_threads
+T_end_list_of_transitive_threads
+T_emitfile
+T_preamble
+T_end_preamble
+T_T_alphabet
+T_end_T_alphabet
+T_file_of_T_alphabet
+T_attributes
+tth_in_stbl
+thread_attributes
+th_in_stbl
+kw_in_stbl
+T_la_expr_src
+T_eosubrule
+T_called_thread_eosubrule
+T_null_call_thread_eosubrule
+T_cweb_comment
+T_grammar_phrase
+T_cweb_marker
+T_lint
+T_list_of_used_threads
+T_end_list_of_used_threads
+Err_nested_files_exceeded
+Err_no_end_of_code
+Err_no_cmd_lne_data
+Err_no_filename
+Err_bad_filename
+Err_bad_fsmheader_filename
+Err_bad_fsmcpp_filename
+Err_bad_fsmsym_filename
+Err_bad_fsmtbl_filename
+Err_bad_enum_filename
+Err_bad_errors_hdrfilename
+Err_bad_errors_impfilename
+Err_bad_cmd_lne_opt
+Err_bad_int_no
+Err_bad_int_no_range
+Err_no_int_present
+Err_bad_eos
+Err_bad_esc
+Err_comment_overrun
+Err_bad_char
+Err_bad_univ_seq
+Err_improper_closing_of_rules
+Err_no_identifier_present
+Err_no_directive_present
+Err_duplicate_directive
+Err_no_syntax_code_present
+Err_no_open_parenthesis
+Err_no_close_parenthesis
+Err_no_fsm_id_present
+Err_no_fsm_id_string
+Err_no_fsm_filename_present
+Err_no_fsm_filename_id_present
+Err_no_comma_present
+Err_no_fsm_namespace_present
+Err_no_fsm_namespace_id_present
+Err_no_fsm_class_present
+Err_no_fsm_version_present
+Err_no_fsm_version_string
+Err_no_fsm_date_present
+Err_no_fsm_date_string
+Err_no_fsm_debug_present
+Err_no_fsm_debug_string
+Err_no_fsm_comments_present
+Err_no_fsm_comments_string
+Err_fsm_debug_string_not_true_or_false
+Err_no_pp_thread_function_present
+Err_no_pp_ctrl_mntor_kw_present
+Err_no_pp_fnct_id_present
+Err_no_pp_bndry_present
+Err_no_pp_la_bndary_expr_present
+Err_no_syntax_code_end_present
+Err_no_pp_code_present
+Err_no_pp_code_stc_present
+Err_not_arbitration_code_kw
+Err_no_open_brace
+Err_no_close_brace
+Err_no_constant_defs_present
+Err_no_filename_present
+Err_no_filename_id_present
+Err_no_namespace_present
+Err_no_namespace_id_present
+Err_no_kdefs_code_present
+Err_no_kdefs_kw_present
+Err_no_tdef_code_present
+Err_no_sym_defs_present
+Err_no_terminal_key_present
+Err_dup_entry_in_alphabet
+Err_already_defined_AB
+Err_already_defined_AD
+Err_improper_directive
+Err_no_sym_class_present
+Err_no_sym_class_id_present
+Err_zero_len_sym
+Err_sym_tbl_full
+Err_sym_tbl_char_pool_full
+Err_dup_entry_in_sym_table
+Err_subscript_out_of_range
+Err_sym_tbl_nested_scope_stk_overflow
+Err_sym_tbl_nested_scope_stk_underflow
+Err_sym_tbl_context_buf_overflow
+Err_report_card_ptr_0
+Err_cannot_define_term_after_sufx_dir
+Err_dup_sufx_directive
+Err_terminals_refs_def_after_terminals
+Err_terminals_refs_dup_def
+Err_no_rule_name_present
+Err_no_sub_rule_present
+Err_subrule_use_undefined_T
+Err_stbl_entry_unknown
+Err_subrule_overrun
+Err_stble_has_entry_but_not_a_rule
+Err_file_of_T_alphabet_kw_not_present
+Err_emitfile_kw_not_present
+Err_preamble_kw_not_present
+Err_preamble_srce_code_not_present
+Err_end_preamble_kw_not_present
+Err_cmd_line_chaffe
+Err_T_alphabet_kw_not_present
+Err_T_alphabet_file_not_present
+Err_end_T_alphabet_kw_not_present
+Err_no_terminals_in_T_alphabet_list
+Err_rotten_chr_in_T_alphabet
+Err_transitive_kw_not_present
+Err_grammar_name_kw_not_present
+Err_namespace_kw_not_present
+Err_filename_kw_not_present
+Err_threadname_kw_not_present
+Err_monolithic_kw_not_present
+Err_no_of_T_kw_not_present
+Err_list_of_terminals_kw_not_present
+Err_no_list_of_trans_threads_kw
+Err_no_terminals_present_in_T_alphabet
+Err_transitive_value_bad
+Err_monolithic_value_bad
+Err_grammar_name_value_not_present
+Err_namespace_value_not_present
+Err_threadname_value_not_present
+Err_filename_value_not_present
+Err_no_of_T_value_not_present
+Err_no_of_terminals_not_present
+Err_end_list_native_T_kw_not_present
+Err_end_list_of_transitive_threads_kw_not_present
+Err_no_of_native_Ts_in_list_not_equal
+Err_no_of_threads_in_list_not_equal
+Err_thread_refed_but_not_defined
+Err_bad_T_in_list
+Err_bad_th_in_list
+Err_already_defined_in_fsc_file
+Err_bad_thread_subscript
+Err_not_a_keyword
+Err_no_of_threads_not_present
+Err_bad_T_alphabet
+Err_fsc_file_does_not_exist
+Err_filename_file_does_not_exist
+Err_T_alphabet_file_does_not_exist
+Err_emitfile_file_does_not_exist
+Err_emitfile_file_not_present
+Err_fsc_cntl_file_not_present
+Err_file_of_T_alphabet_not_present
+Err_epsilon_pass_thru
+Err_epsilon_pass_thru_no_Ts
+Err_rule_not_in_stbl
+Err_T_not_in_stbl
+Err_bad_directive
+Err_bad_term_in_la_expr
+Err_empty_set_removal_in_la_expr
+Err_bad_operator_in_la_expr
+Err_not_a_lhs_kw
+Err_pp_la_boundary_attribute_not_fnd
+Err_already_processed_fsm_phase
+Err_already_processed_pp_phase
+Err_already_processed_T_enum_phase
+Err_already_processed_error_phase
+Err_already_processed_rc_phase
+Err_already_processed_lrk_phase
+Err_already_processed_T_phase
+Err_already_processed_rule_phase
+Err_not_T_for_rtned_token_from_th
+Err_not_id_for_ns_in_th_stmt
+Err_not_id_for_th_name_in_th_stmt
+Err_bad_th_qualifier
+Err_not_dbl_colon_in_th_stmt
+Err_not_T_or_R_in_subrule_expr
+Err_not_T_or_R_or_eos_in_subrule_expr
+Err_not_eos_in_subrule_expr
+Err_invalid_logical_name
+Err_invalid_logical_value
+Err_duplicate_logical_name
+Err_missing_terminals_refs_kw
+Err_missing_terminals_sufx_kw
+Err_not_a_terminal_definition
+Err_missing_lrk_sufx_kw
+ERR_sick_grammar
+ERR_no_fsm_phrase
+ERR_no_T_enum_phrase
+ERR_no_lrk_phrase
+ERR_no_rc_phrase
+ERR_no_errors_phrase
+ERR_no_terminals_phrase
+ERR_no_rules_phrase
+Err_used_rule_but_undefined
+Err_rule_already_defined
+Err_la_expr_calc_empty_set
+Err_no_close_brace_ending_rules_defs
+Err_use_of_T_outside_Rules_construct
+Err_not_kw_defining_grammar_construct
+Err_use_of_N_outside_Rules_construct
+Err_misplaced_or_misspelt_Rule_or_T
+Err_not_a_Rule
+Err_empty_file
+Err_not_lhs_pcnrl_mntr
+end-T-alphabet
diff --git a/web/yacco2/compiler/grammars/yacco2_T_enumeration.h b/web/yacco2/compiler/grammars/yacco2_T_enumeration.h
new file mode 100644
index 0000000000..6119af36d8
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_T_enumeration.h
@@ -0,0 +1,592 @@
+/*
+ File: yacco2_T_enumeration.h
+ Date and Time: Fri Jan 30 18:55:28 2015
+*/
+#ifndef __yacco2_T_enumeration_h__
+#define __yacco2_T_enumeration_h__ 1
+namespace NS_yacco2_T_enum {
+ struct T_Enum {
+ enum enumerated_terminals {
+ sum_total_T = 569
+ ,no_of_terminals = 114
+ ,no_of_raw_chars = 256
+ ,no_of_lr1_constants = 8
+ ,no_of_error_terminals = 191
+ ,start_LRK=0,end_LRK=7
+ ,start_RC=8,end_RC=263
+ ,start_T=264,end_T=377
+ ,start_ERR=378,end_ERR=568
+ ,start_R=569
+ ,T_LR1_questionable_shift_operator_ = 0
+ ,T_LR1_eog_ = 1
+ ,T_LR1_eolr_ = 2
+ ,T_LR1_parallel_operator_ = 3
+ ,T_LR1_reduce_operator_ = 4
+ ,T_LR1_invisible_shift_operator_ = 5
+ ,T_LR1_all_shift_operator_ = 6
+ ,T_LR1_fset_transience_operator_ = 7
+ ,T_raw_nul_ = 8
+ ,T_raw_soh_ = 9
+ ,T_raw_stx_ = 10
+ ,T_raw_etx_ = 11
+ ,T_raw_eot_ = 12
+ ,T_raw_enq_ = 13
+ ,T_raw_ack_ = 14
+ ,T_raw_bel_ = 15
+ ,T_raw_bs_ = 16
+ ,T_raw_ht_ = 17
+ ,T_raw_lf_ = 18
+ ,T_raw_vt_ = 19
+ ,T_raw_ff_ = 20
+ ,T_raw_cr_ = 21
+ ,T_raw_so_ = 22
+ ,T_raw_si_ = 23
+ ,T_raw_dle_ = 24
+ ,T_raw_dc1_ = 25
+ ,T_raw_dc2_ = 26
+ ,T_raw_dc3_ = 27
+ ,T_raw_dc4_ = 28
+ ,T_raw_nak_ = 29
+ ,T_raw_syn_ = 30
+ ,T_raw_etb_ = 31
+ ,T_raw_can_ = 32
+ ,T_raw_em_ = 33
+ ,T_raw_sub_ = 34
+ ,T_raw_esc_ = 35
+ ,T_raw_fs_ = 36
+ ,T_raw_gs_ = 37
+ ,T_raw_rs_ = 38
+ ,T_raw_us_ = 39
+ ,T_raw_sp_ = 40
+ ,T_raw_exclam_ = 41
+ ,T_raw_dbl_quote_ = 42
+ ,T_raw_no_sign_ = 43
+ ,T_raw_dollar_sign_ = 44
+ ,T_raw_percent_ = 45
+ ,T_raw_ampersign_ = 46
+ ,T_raw_right_quote_ = 47
+ ,T_raw_open_bracket_ = 48
+ ,T_raw_close_bracket_ = 49
+ ,T_raw_asteric_ = 50
+ ,T_raw_plus_ = 51
+ ,T_raw_comma_ = 52
+ ,T_raw_minus_ = 53
+ ,T_raw_period_ = 54
+ ,T_raw_slash_ = 55
+ ,T_raw_0_ = 56
+ ,T_raw_1_ = 57
+ ,T_raw_2_ = 58
+ ,T_raw_3_ = 59
+ ,T_raw_4_ = 60
+ ,T_raw_5_ = 61
+ ,T_raw_6_ = 62
+ ,T_raw_7_ = 63
+ ,T_raw_8_ = 64
+ ,T_raw_9_ = 65
+ ,T_raw_colon_ = 66
+ ,T_raw_semi_colon_ = 67
+ ,T_raw_less_than_ = 68
+ ,T_raw_eq_ = 69
+ ,T_raw_gt_than_ = 70
+ ,T_raw_question_mark_ = 71
+ ,T_raw_at_sign_ = 72
+ ,T_raw_A_ = 73
+ ,T_raw_B_ = 74
+ ,T_raw_C_ = 75
+ ,T_raw_D_ = 76
+ ,T_raw_E_ = 77
+ ,T_raw_F_ = 78
+ ,T_raw_G_ = 79
+ ,T_raw_H_ = 80
+ ,T_raw_I_ = 81
+ ,T_raw_J_ = 82
+ ,T_raw_K_ = 83
+ ,T_raw_L_ = 84
+ ,T_raw_M_ = 85
+ ,T_raw_N_ = 86
+ ,T_raw_O_ = 87
+ ,T_raw_P_ = 88
+ ,T_raw_Q_ = 89
+ ,T_raw_R_ = 90
+ ,T_raw_S_ = 91
+ ,T_raw_T_ = 92
+ ,T_raw_U_ = 93
+ ,T_raw_V_ = 94
+ ,T_raw_W_ = 95
+ ,T_raw_X_ = 96
+ ,T_raw_Y_ = 97
+ ,T_raw_Z_ = 98
+ ,T_raw_open_sq_bracket_ = 99
+ ,T_raw_back_slash_ = 100
+ ,T_raw_close_sq_bracket_ = 101
+ ,T_raw_up_arrow_ = 102
+ ,T_raw_under_score_ = 103
+ ,T_raw_left_quote_ = 104
+ ,T_raw_a_ = 105
+ ,T_raw_b_ = 106
+ ,T_raw_c_ = 107
+ ,T_raw_d_ = 108
+ ,T_raw_e_ = 109
+ ,T_raw_f_ = 110
+ ,T_raw_g_ = 111
+ ,T_raw_h_ = 112
+ ,T_raw_i_ = 113
+ ,T_raw_j_ = 114
+ ,T_raw_k_ = 115
+ ,T_raw_l_ = 116
+ ,T_raw_m_ = 117
+ ,T_raw_n_ = 118
+ ,T_raw_o_ = 119
+ ,T_raw_p_ = 120
+ ,T_raw_q_ = 121
+ ,T_raw_r_ = 122
+ ,T_raw_s_ = 123
+ ,T_raw_t_ = 124
+ ,T_raw_u_ = 125
+ ,T_raw_v_ = 126
+ ,T_raw_w_ = 127
+ ,T_raw_x_ = 128
+ ,T_raw_y_ = 129
+ ,T_raw_z_ = 130
+ ,T_raw_open_brace_ = 131
+ ,T_raw_vertical_line_ = 132
+ ,T_raw_close_brace_ = 133
+ ,T_raw_tilde_ = 134
+ ,T_raw_del_ = 135
+ ,T_raw_x80_ = 136
+ ,T_raw_x81_ = 137
+ ,T_raw_x82_ = 138
+ ,T_raw_x83_ = 139
+ ,T_raw_x84_ = 140
+ ,T_raw_x85_ = 141
+ ,T_raw_x86_ = 142
+ ,T_raw_x87_ = 143
+ ,T_raw_x88_ = 144
+ ,T_raw_x89_ = 145
+ ,T_raw_x8a_ = 146
+ ,T_raw_x8b_ = 147
+ ,T_raw_x8c_ = 148
+ ,T_raw_x8d_ = 149
+ ,T_raw_x8e_ = 150
+ ,T_raw_x8f_ = 151
+ ,T_raw_x90_ = 152
+ ,T_raw_x91_ = 153
+ ,T_raw_x92_ = 154
+ ,T_raw_x93_ = 155
+ ,T_raw_x94_ = 156
+ ,T_raw_x95_ = 157
+ ,T_raw_x96_ = 158
+ ,T_raw_x97_ = 159
+ ,T_raw_x98_ = 160
+ ,T_raw_x99_ = 161
+ ,T_raw_x9a_ = 162
+ ,T_raw_x9b_ = 163
+ ,T_raw_x9c_ = 164
+ ,T_raw_x9d_ = 165
+ ,T_raw_x9e_ = 166
+ ,T_raw_x9f_ = 167
+ ,T_raw_xa0_ = 168
+ ,T_raw_xa1_ = 169
+ ,T_raw_xa2_ = 170
+ ,T_raw_xa3_ = 171
+ ,T_raw_xa4_ = 172
+ ,T_raw_xa5_ = 173
+ ,T_raw_xa6_ = 174
+ ,T_raw_xa7_ = 175
+ ,T_raw_xa8_ = 176
+ ,T_raw_xa9_ = 177
+ ,T_raw_xaa_ = 178
+ ,T_raw_xab_ = 179
+ ,T_raw_xac_ = 180
+ ,T_raw_xad_ = 181
+ ,T_raw_xae_ = 182
+ ,T_raw_xaf_ = 183
+ ,T_raw_xb0_ = 184
+ ,T_raw_xb1_ = 185
+ ,T_raw_xb2_ = 186
+ ,T_raw_xb3_ = 187
+ ,T_raw_xb4_ = 188
+ ,T_raw_xb5_ = 189
+ ,T_raw_xb6_ = 190
+ ,T_raw_xb7_ = 191
+ ,T_raw_xb8_ = 192
+ ,T_raw_xb9_ = 193
+ ,T_raw_xba_ = 194
+ ,T_raw_xbb_ = 195
+ ,T_raw_xbc_ = 196
+ ,T_raw_xbd_ = 197
+ ,T_raw_xbe_ = 198
+ ,T_raw_xbf_ = 199
+ ,T_raw_xc0_ = 200
+ ,T_raw_xc1_ = 201
+ ,T_raw_xc2_ = 202
+ ,T_raw_xc3_ = 203
+ ,T_raw_xc4_ = 204
+ ,T_raw_xc5_ = 205
+ ,T_raw_xc6_ = 206
+ ,T_raw_xc7_ = 207
+ ,T_raw_xc8_ = 208
+ ,T_raw_xc9_ = 209
+ ,T_raw_xca_ = 210
+ ,T_raw_xcb_ = 211
+ ,T_raw_xcc_ = 212
+ ,T_raw_xcd_ = 213
+ ,T_raw_xce_ = 214
+ ,T_raw_xcf_ = 215
+ ,T_raw_xd0_ = 216
+ ,T_raw_xd1_ = 217
+ ,T_raw_xd2_ = 218
+ ,T_raw_xd3_ = 219
+ ,T_raw_xd4_ = 220
+ ,T_raw_xd5_ = 221
+ ,T_raw_xd6_ = 222
+ ,T_raw_xd7_ = 223
+ ,T_raw_xd8_ = 224
+ ,T_raw_xd9_ = 225
+ ,T_raw_xda_ = 226
+ ,T_raw_xdb_ = 227
+ ,T_raw_xdc_ = 228
+ ,T_raw_xdd_ = 229
+ ,T_raw_xde_ = 230
+ ,T_raw_xdf_ = 231
+ ,T_raw_xe0_ = 232
+ ,T_raw_xe1_ = 233
+ ,T_raw_xe2_ = 234
+ ,T_raw_xe3_ = 235
+ ,T_raw_xe4_ = 236
+ ,T_raw_xe5_ = 237
+ ,T_raw_xe6_ = 238
+ ,T_raw_xe7_ = 239
+ ,T_raw_xe8_ = 240
+ ,T_raw_xe9_ = 241
+ ,T_raw_xea_ = 242
+ ,T_raw_xeb_ = 243
+ ,T_raw_xec_ = 244
+ ,T_raw_xed_ = 245
+ ,T_raw_xee_ = 246
+ ,T_raw_xef_ = 247
+ ,T_raw_xf0_ = 248
+ ,T_raw_xf1_ = 249
+ ,T_raw_xf2_ = 250
+ ,T_raw_xf3_ = 251
+ ,T_raw_xf4_ = 252
+ ,T_raw_xf5_ = 253
+ ,T_raw_xf6_ = 254
+ ,T_raw_xf7_ = 255
+ ,T_raw_xf8_ = 256
+ ,T_raw_xf9_ = 257
+ ,T_raw_xfa_ = 258
+ ,T_raw_xfb_ = 259
+ ,T_raw_xfc_ = 260
+ ,T_raw_xfd_ = 261
+ ,T_raw_xfe_ = 262
+ ,T_raw_xff_ = 263
+ ,T_T_option_t_ = 264
+ ,T_T_option_p_ = 265
+ ,T_T_option_err_ = 266
+ ,T_T_esc_seq_ = 267
+ ,T_T_eol_ = 268
+ ,T_T_basic_char_ = 269
+ ,T_T_raw_char_ = 270
+ ,T_T_comment_ = 271
+ ,T_T_ws_ = 272
+ ,T_T_angled_string_ = 273
+ ,T_T_c_literal_ = 274
+ ,T_T_c_string_ = 275
+ ,T_T_xc_str_ = 276
+ ,T_T_unquoted_string_ = 277
+ ,T_T_file_inclusion_ = 278
+ ,T_T_identifier_ = 279
+ ,T_T_int_no_ = 280
+ ,T_T_raw_characters_ = 281
+ ,T_T_lr1_constant_symbols_ = 282
+ ,T_T_error_symbols_ = 283
+ ,T_T_eocode_ = 284
+ ,T_T_AD_ = 285
+ ,T_T_AB_ = 286
+ ,T_T_parallel_la_boundary_ = 287
+ ,T_T_arbitrator_code_ = 288
+ ,T_T_parallel_parser_ = 289
+ ,T_T_parallel_thread_function_ = 290
+ ,T_T_parallel_control_monitor_ = 291
+ ,T_T_fsm_ = 292
+ ,T_T_fsm_id_ = 293
+ ,T_T_fsm_filename_ = 294
+ ,T_T_fsm_namespace_ = 295
+ ,T_T_fsm_class_ = 296
+ ,T_T_fsm_version_ = 297
+ ,T_T_fsm_date_ = 298
+ ,T_T_fsm_debug_ = 299
+ ,T_T_fsm_comments_ = 300
+ ,T_T_terminals_ = 301
+ ,T_T_enumeration_ = 302
+ ,T_T_file_name_ = 303
+ ,T_T_name_space_ = 304
+ ,T_T_sym_class_ = 305
+ ,T_T_rules_ = 306
+ ,T_T_lhs_ = 307
+ ,T_T_user_declaration_ = 308
+ ,T_T_user_prefix_declaration_ = 309
+ ,T_T_user_suffix_declaration_ = 310
+ ,T_T_constructor_ = 311
+ ,T_T_destructor_ = 312
+ ,T_T_op_ = 313
+ ,T_T_failed_ = 314
+ ,T_T_user_implementation_ = 315
+ ,T_T_user_imp_tbl_ = 316
+ ,T_T_user_imp_sym_ = 317
+ ,T_T_constant_defs_ = 318
+ ,T_T_terminals_refs_ = 319
+ ,T_T_terminals_sufx_ = 320
+ ,T_T_lrk_sufx_ = 321
+ ,T_T_selector_ = 322
+ ,T_T_NULL_ = 323
+ ,T_T_2colon_ = 324
+ ,T_T_block_ = 325
+ ,T_T_syntax_code_ = 326
+ ,T_T_fsm_class_phrase_ = 327
+ ,T_T_fsm_phrase_ = 328
+ ,T_T_parallel_parser_phrase_ = 329
+ ,T_T_enum_phrase_ = 330
+ ,T_T_terminal_def_ = 331
+ ,T_table_entry_ = 332
+ ,T_T_sym_tbl_report_card_ = 333
+ ,T_T_terminals_phrase_ = 334
+ ,T_T_error_symbols_phrase_ = 335
+ ,T_T_lr1_k_phrase_ = 336
+ ,T_T_rc_phrase_ = 337
+ ,T_T_rule_lhs_phrase_ = 338
+ ,T_T_parallel_monitor_phrase_ = 339
+ ,T_rule_def_ = 340
+ ,T_T_rules_phrase_ = 341
+ ,T_T_subrule_def_ = 342
+ ,T_T_subrules_phrase_ = 343
+ ,T_T_in_stbl_ = 344
+ ,T_refered_T_ = 345
+ ,T_rule_in_stbl_ = 346
+ ,T_refered_rule_ = 347
+ ,T_T_transitive_ = 348
+ ,T_T_grammar_name_ = 349
+ ,T_T_thread_name_ = 350
+ ,T_T_monolithic_ = 351
+ ,T_T_no_of_T_ = 352
+ ,T_T_list_of_native_first_set_terminals_ = 353
+ ,T_T_end_list_of_native_first_set_terminals_ = 354
+ ,T_T_list_of_transitive_threads_ = 355
+ ,T_T_end_list_of_transitive_threads_ = 356
+ ,T_T_emitfile_ = 357
+ ,T_T_preamble_ = 358
+ ,T_T_end_preamble_ = 359
+ ,T_T_T_alphabet_ = 360
+ ,T_T_end_T_alphabet_ = 361
+ ,T_T_file_of_T_alphabet_ = 362
+ ,T_T_attributes_ = 363
+ ,T_tth_in_stbl_ = 364
+ ,T_thread_attributes_ = 365
+ ,T_th_in_stbl_ = 366
+ ,T_kw_in_stbl_ = 367
+ ,T_T_la_expr_src_ = 368
+ ,T_T_eosubrule_ = 369
+ ,T_T_called_thread_eosubrule_ = 370
+ ,T_T_null_call_thread_eosubrule_ = 371
+ ,T_T_cweb_comment_ = 372
+ ,T_T_grammar_phrase_ = 373
+ ,T_T_cweb_marker_ = 374
+ ,T_T_lint_ = 375
+ ,T_T_list_of_used_threads_ = 376
+ ,T_T_end_list_of_used_threads_ = 377
+ ,T_Err_nested_files_exceeded_ = 378
+ ,T_Err_no_end_of_code_ = 379
+ ,T_Err_no_cmd_lne_data_ = 380
+ ,T_Err_no_filename_ = 381
+ ,T_Err_bad_filename_ = 382
+ ,T_Err_bad_fsmheader_filename_ = 383
+ ,T_Err_bad_fsmcpp_filename_ = 384
+ ,T_Err_bad_fsmsym_filename_ = 385
+ ,T_Err_bad_fsmtbl_filename_ = 386
+ ,T_Err_bad_enum_filename_ = 387
+ ,T_Err_bad_errors_hdrfilename_ = 388
+ ,T_Err_bad_errors_impfilename_ = 389
+ ,T_Err_bad_cmd_lne_opt_ = 390
+ ,T_Err_bad_int_no_ = 391
+ ,T_Err_bad_int_no_range_ = 392
+ ,T_Err_no_int_present_ = 393
+ ,T_Err_bad_eos_ = 394
+ ,T_Err_bad_esc_ = 395
+ ,T_Err_comment_overrun_ = 396
+ ,T_Err_bad_char_ = 397
+ ,T_Err_bad_univ_seq_ = 398
+ ,T_Err_improper_closing_of_rules_ = 399
+ ,T_Err_no_identifier_present_ = 400
+ ,T_Err_no_directive_present_ = 401
+ ,T_Err_duplicate_directive_ = 402
+ ,T_Err_no_syntax_code_present_ = 403
+ ,T_Err_no_open_parenthesis_ = 404
+ ,T_Err_no_close_parenthesis_ = 405
+ ,T_Err_no_fsm_id_present_ = 406
+ ,T_Err_no_fsm_id_string_ = 407
+ ,T_Err_no_fsm_filename_present_ = 408
+ ,T_Err_no_fsm_filename_id_present_ = 409
+ ,T_Err_no_comma_present_ = 410
+ ,T_Err_no_fsm_namespace_present_ = 411
+ ,T_Err_no_fsm_namespace_id_present_ = 412
+ ,T_Err_no_fsm_class_present_ = 413
+ ,T_Err_no_fsm_version_present_ = 414
+ ,T_Err_no_fsm_version_string_ = 415
+ ,T_Err_no_fsm_date_present_ = 416
+ ,T_Err_no_fsm_date_string_ = 417
+ ,T_Err_no_fsm_debug_present_ = 418
+ ,T_Err_no_fsm_debug_string_ = 419
+ ,T_Err_no_fsm_comments_present_ = 420
+ ,T_Err_no_fsm_comments_string_ = 421
+ ,T_Err_fsm_debug_string_not_true_or_false_ = 422
+ ,T_Err_no_pp_thread_function_present_ = 423
+ ,T_Err_no_pp_ctrl_mntor_kw_present_ = 424
+ ,T_Err_no_pp_fnct_id_present_ = 425
+ ,T_Err_no_pp_bndry_present_ = 426
+ ,T_Err_no_pp_la_bndary_expr_present_ = 427
+ ,T_Err_no_syntax_code_end_present_ = 428
+ ,T_Err_no_pp_code_present_ = 429
+ ,T_Err_no_pp_code_stc_present_ = 430
+ ,T_Err_not_arbitration_code_kw_ = 431
+ ,T_Err_no_open_brace_ = 432
+ ,T_Err_no_close_brace_ = 433
+ ,T_Err_no_constant_defs_present_ = 434
+ ,T_Err_no_filename_present_ = 435
+ ,T_Err_no_filename_id_present_ = 436
+ ,T_Err_no_namespace_present_ = 437
+ ,T_Err_no_namespace_id_present_ = 438
+ ,T_Err_no_kdefs_code_present_ = 439
+ ,T_Err_no_kdefs_kw_present_ = 440
+ ,T_Err_no_tdef_code_present_ = 441
+ ,T_Err_no_sym_defs_present_ = 442
+ ,T_Err_no_terminal_key_present_ = 443
+ ,T_Err_dup_entry_in_alphabet_ = 444
+ ,T_Err_already_defined_AB_ = 445
+ ,T_Err_already_defined_AD_ = 446
+ ,T_Err_improper_directive_ = 447
+ ,T_Err_no_sym_class_present_ = 448
+ ,T_Err_no_sym_class_id_present_ = 449
+ ,T_Err_zero_len_sym_ = 450
+ ,T_Err_sym_tbl_full_ = 451
+ ,T_Err_sym_tbl_char_pool_full_ = 452
+ ,T_Err_dup_entry_in_sym_table_ = 453
+ ,T_Err_subscript_out_of_range_ = 454
+ ,T_Err_sym_tbl_nested_scope_stk_overflow_ = 455
+ ,T_Err_sym_tbl_nested_scope_stk_underflow_ = 456
+ ,T_Err_sym_tbl_context_buf_overflow_ = 457
+ ,T_Err_report_card_ptr_0_ = 458
+ ,T_Err_cannot_define_term_after_sufx_dir_ = 459
+ ,T_Err_dup_sufx_directive_ = 460
+ ,T_Err_terminals_refs_def_after_terminals_ = 461
+ ,T_Err_terminals_refs_dup_def_ = 462
+ ,T_Err_no_rule_name_present_ = 463
+ ,T_Err_no_sub_rule_present_ = 464
+ ,T_Err_subrule_use_undefined_T_ = 465
+ ,T_Err_stbl_entry_unknown_ = 466
+ ,T_Err_subrule_overrun_ = 467
+ ,T_Err_stble_has_entry_but_not_a_rule_ = 468
+ ,T_Err_file_of_T_alphabet_kw_not_present_ = 469
+ ,T_Err_emitfile_kw_not_present_ = 470
+ ,T_Err_preamble_kw_not_present_ = 471
+ ,T_Err_preamble_srce_code_not_present_ = 472
+ ,T_Err_end_preamble_kw_not_present_ = 473
+ ,T_Err_cmd_line_chaffe_ = 474
+ ,T_Err_T_alphabet_kw_not_present_ = 475
+ ,T_Err_T_alphabet_file_not_present_ = 476
+ ,T_Err_end_T_alphabet_kw_not_present_ = 477
+ ,T_Err_no_terminals_in_T_alphabet_list_ = 478
+ ,T_Err_rotten_chr_in_T_alphabet_ = 479
+ ,T_Err_transitive_kw_not_present_ = 480
+ ,T_Err_grammar_name_kw_not_present_ = 481
+ ,T_Err_namespace_kw_not_present_ = 482
+ ,T_Err_filename_kw_not_present_ = 483
+ ,T_Err_threadname_kw_not_present_ = 484
+ ,T_Err_monolithic_kw_not_present_ = 485
+ ,T_Err_no_of_T_kw_not_present_ = 486
+ ,T_Err_list_of_terminals_kw_not_present_ = 487
+ ,T_Err_no_list_of_trans_threads_kw_ = 488
+ ,T_Err_no_terminals_present_in_T_alphabet_ = 489
+ ,T_Err_transitive_value_bad_ = 490
+ ,T_Err_monolithic_value_bad_ = 491
+ ,T_Err_grammar_name_value_not_present_ = 492
+ ,T_Err_namespace_value_not_present_ = 493
+ ,T_Err_threadname_value_not_present_ = 494
+ ,T_Err_filename_value_not_present_ = 495
+ ,T_Err_no_of_T_value_not_present_ = 496
+ ,T_Err_no_of_terminals_not_present_ = 497
+ ,T_Err_end_list_native_T_kw_not_present_ = 498
+ ,T_Err_end_list_of_transitive_threads_kw_not_present_ = 499
+ ,T_Err_no_of_native_Ts_in_list_not_equal_ = 500
+ ,T_Err_no_of_threads_in_list_not_equal_ = 501
+ ,T_Err_thread_refed_but_not_defined_ = 502
+ ,T_Err_bad_T_in_list_ = 503
+ ,T_Err_bad_th_in_list_ = 504
+ ,T_Err_already_defined_in_fsc_file_ = 505
+ ,T_Err_bad_thread_subscript_ = 506
+ ,T_Err_not_a_keyword_ = 507
+ ,T_Err_no_of_threads_not_present_ = 508
+ ,T_Err_bad_T_alphabet_ = 509
+ ,T_Err_fsc_file_does_not_exist_ = 510
+ ,T_Err_filename_file_does_not_exist_ = 511
+ ,T_Err_T_alphabet_file_does_not_exist_ = 512
+ ,T_Err_emitfile_file_does_not_exist_ = 513
+ ,T_Err_emitfile_file_not_present_ = 514
+ ,T_Err_fsc_cntl_file_not_present_ = 515
+ ,T_Err_file_of_T_alphabet_not_present_ = 516
+ ,T_Err_epsilon_pass_thru_ = 517
+ ,T_Err_epsilon_pass_thru_no_Ts_ = 518
+ ,T_Err_rule_not_in_stbl_ = 519
+ ,T_Err_T_not_in_stbl_ = 520
+ ,T_Err_bad_directive_ = 521
+ ,T_Err_bad_term_in_la_expr_ = 522
+ ,T_Err_empty_set_removal_in_la_expr_ = 523
+ ,T_Err_bad_operator_in_la_expr_ = 524
+ ,T_Err_not_a_lhs_kw_ = 525
+ ,T_Err_pp_la_boundary_attribute_not_fnd_ = 526
+ ,T_Err_already_processed_fsm_phase_ = 527
+ ,T_Err_already_processed_pp_phase_ = 528
+ ,T_Err_already_processed_T_enum_phase_ = 529
+ ,T_Err_already_processed_error_phase_ = 530
+ ,T_Err_already_processed_rc_phase_ = 531
+ ,T_Err_already_processed_lrk_phase_ = 532
+ ,T_Err_already_processed_T_phase_ = 533
+ ,T_Err_already_processed_rule_phase_ = 534
+ ,T_Err_not_T_for_rtned_token_from_th_ = 535
+ ,T_Err_not_id_for_ns_in_th_stmt_ = 536
+ ,T_Err_not_id_for_th_name_in_th_stmt_ = 537
+ ,T_Err_bad_th_qualifier_ = 538
+ ,T_Err_not_dbl_colon_in_th_stmt_ = 539
+ ,T_Err_not_T_or_R_in_subrule_expr_ = 540
+ ,T_Err_not_T_or_R_or_eos_in_subrule_expr_ = 541
+ ,T_Err_not_eos_in_subrule_expr_ = 542
+ ,T_Err_invalid_logical_name_ = 543
+ ,T_Err_invalid_logical_value_ = 544
+ ,T_Err_duplicate_logical_name_ = 545
+ ,T_Err_missing_terminals_refs_kw_ = 546
+ ,T_Err_missing_terminals_sufx_kw_ = 547
+ ,T_Err_not_a_terminal_definition_ = 548
+ ,T_Err_missing_lrk_sufx_kw_ = 549
+ ,T_ERR_sick_grammar_ = 550
+ ,T_ERR_no_fsm_phrase_ = 551
+ ,T_ERR_no_T_enum_phrase_ = 552
+ ,T_ERR_no_lrk_phrase_ = 553
+ ,T_ERR_no_rc_phrase_ = 554
+ ,T_ERR_no_errors_phrase_ = 555
+ ,T_ERR_no_terminals_phrase_ = 556
+ ,T_ERR_no_rules_phrase_ = 557
+ ,T_Err_used_rule_but_undefined_ = 558
+ ,T_Err_rule_already_defined_ = 559
+ ,T_Err_la_expr_calc_empty_set_ = 560
+ ,T_Err_no_close_brace_ending_rules_defs_ = 561
+ ,T_Err_use_of_T_outside_Rules_construct_ = 562
+ ,T_Err_not_kw_defining_grammar_construct_ = 563
+ ,T_Err_use_of_N_outside_Rules_construct_ = 564
+ ,T_Err_misplaced_or_misspelt_Rule_or_T_ = 565
+ ,T_Err_not_a_Rule_ = 566
+ ,T_Err_empty_file_ = 567
+ ,T_Err_not_lhs_pcnrl_mntr_ = 568
+ }; // close defining enum list
+ }; // close defining T_enum
+} // end of namespace
+#endif
diff --git a/web/yacco2/compiler/grammars/yacco2_T_includes.T b/web/yacco2/compiler/grammars/yacco2_T_includes.T
new file mode 100644
index 0000000000..cd592a07ee
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_T_includes.T
@@ -0,0 +1,15 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: yacco2_T_includes.T
+Purpose: Terminal alphabet definitions used by yacco2's grammars.
+Author: Dave Bone
+Date: 28 May 2003
+*/
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_enumeration.T"
+@"/usr/local/yacco2/library/grammars/yacco2_k_symbols.T"
+@"/usr/local/yacco2/library/grammars/yacco2_characters.T"
+@"/usr/local/yacco2/compiler/grammars/yacco2_terminals.T"
+@"/usr/local/yacco2/compiler/grammars/yacco2_err_symbols.T"
diff --git a/web/yacco2/compiler/grammars/yacco2_err_symbols.T b/web/yacco2/compiler/grammars/yacco2_err_symbols.T
new file mode 100644
index 0000000000..a2eab128da
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_err_symbols.T
@@ -0,0 +1,704 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: yacco2_err_symbols.lex
+Date: 7 July 2003
+Author: Dave Bone
+*/
+/@
+@i "/yacco2/copyright.w"
+@** Error symbols vocabulary.\fbreak
+Error symbols for the telling.\fbreak
+Due to my verbosity and |cweb|'s (\TeX) black slug output
+some of my symbol keys are
+more cryptic in description as i wanted to title them with
+their enumeration symbol.
+Now, the enumeration symbol is removed from the index so there is
+no blob of ...
+If the truth be told, these descriptions should
+be indirect key values that allow for
+multilingual translation.
+One step at a time...
+
+Upon experimentation with error keys
+having a suffixed Exxx indicator in the key itself
+whereby
+the xxx is a number: 001 and
+associating a translation file with the error construct, i nixed the ideas.
+It is simply a post error evaluation on the given
+error keys to translate them using some form of associated map.
+The error enumeration key with a language indicator would suffice.
+A simple database could be used.
+For example T\_Enum::T\_LR1\_err\_nested\_files\_exceeded\_ with
+ a country code of ``DE'' for
+German would translate ``nested files exceeded''.
+Not finding a translation should default to the error token's
+literal key.
+See grammar ``o2\_err\_hdr.lex'' for a context sensitive approach to error reporting.
+
+
+Ahh... grandeur. Now what about unicode?
+@/
+
+error-symbols
+(file-name yacco2_err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested files exceeded"
+(sym-class Err_nested_files_exceeded {
+ user-declaration
+ public:
+ Err_nested_files_exceeded(yacco2::INT Nested_file_cnt,std::string& File_name);
+ yacco2::INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ yacco2::INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+ user-implementation
+ Err_nested_files_exceeded::
+ Err_nested_files_exceeded(yacco2::INT Nested_cnt,std::string& File_name)
+ T_CTOR("nested files exceeded",T_Enum::T_Err_nested_files_exceeded_,0,false,false)
+ {nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+ ***
+ }
+)
+"no end-of-code" (sym-class Err_no_end_of_code)
+"no cmd-lne-data" (sym-class Err_no_cmd_lne_data)
+"no filename" (sym-class Err_no_filename)
+"bad filename"
+(sym-class Err_bad_filename {
+ user-declaration
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"bad filename to output grammar header"
+(sym-class Err_bad_fsmheader_filename {
+ user-declaration
+ public:
+ Err_bad_fsmheader_filename(std::string& File_name);
+ Err_bad_fsmheader_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(std::string& File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(const char* File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmheader_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"bad filename to output cpp"
+(sym-class Err_bad_fsmcpp_filename {
+ user-declaration
+ public:
+ Err_bad_fsmcpp_filename(std::string& File_name);
+ Err_bad_fsmcpp_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(std::string& File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(const char* File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmcpp_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"bad filename to output sym"
+(sym-class Err_bad_fsmsym_filename {
+ user-declaration
+ public:
+ Err_bad_fsmsym_filename(std::string& File_name);
+ Err_bad_fsmsym_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(std::string& File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(const char* File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmsym_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"bad filename to output tbl"
+(sym-class Err_bad_fsmtbl_filename {
+ user-declaration
+ public:
+ Err_bad_fsmtbl_filename(std::string& File_name);
+ Err_bad_fsmtbl_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(std::string& File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(const char* File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmtbl_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"bad filename to output enumeration header"
+(sym-class Err_bad_enum_filename {
+ user-declaration
+ public:
+ Err_bad_enum_filename(std::string& File_name);
+ Err_bad_enum_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(std::string& File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(const char* File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_enum_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+
+"bad filename for Errors vocabulary header"
+(sym-class Err_bad_errors_hdrfilename {
+ user-declaration
+ public:
+ Err_bad_errors_hdrfilename(std::string& File_name);
+ Err_bad_errors_hdrfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_hdrfilename::file_name(){return &file_name_;}
+ ***
+ }
+)
+
+"bad filename for Errors vocabulary implementation"
+(sym-class Err_bad_errors_impfilename {
+ user-declaration
+ public:
+ Err_bad_errors_impfilename(std::string& File_name);
+ Err_bad_errors_impfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_impfilename::file_name(){return &file_name_;}
+ ***
+ }
+)
+
+"bad cmd-opt" (sym-class Err_bad_cmd_lne_opt)
+"bad int-no" (sym-class Err_bad_int_no)
+"bad int-no range"(sym-class Err_bad_int_no_range)
+"no int present" (sym-class Err_no_int_present)
+"bad eos" (sym-class Err_bad_eos)
+"bad esc" (sym-class Err_bad_esc)
+"comment-overrun" (sym-class Err_comment_overrun)
+
+"bad char"
+ (sym-class Err_bad_char{
+ user-declaration
+ public:
+ Err_bad_char(CAbs_lr1_sym* Err_char);
+ yacco2::CAbs_lr1_sym* bad_char()const;
+ void zero_out_bad_char();
+ private:
+ yacco2::CAbs_lr1_sym* bad_char_;
+ ***
+ destructor
+ if(R->bad_char_!=0)
+ delete R->bad_char();
+ ***
+ user-implementation
+ Err_bad_char::
+ Err_bad_char(CAbs_lr1_sym* Bad_char)
+T_CTOR("bad char",T_Enum::T_Err_bad_char_,&dtor_Err_bad_char,false,false)
+ {bad_char_ = Bad_char;}
+ yacco2::CAbs_lr1_sym* Err_bad_char::bad_char()const{return bad_char_;}
+ void Err_bad_char::zero_out_bad_char(){bad_char_ = 0;}
+ ***
+ }
+)
+
+"bad univ-seq" (sym-class Err_bad_univ_seq{
+ user-declaration
+ public:
+ Err_bad_univ_seq(unsigned long Value);
+ unsigned long bad_univ_seq()const;
+ private:unsigned long bad_univ_seq_;
+ ***
+ user-implementation
+ Err_bad_univ_seq::
+ Err_bad_univ_seq(unsigned long Bad_univ_seq)
+ T_CTOR("bad univ seq",T_Enum::T_Err_bad_univ_seq_,0,false,false)
+ {bad_univ_seq_ = Bad_univ_seq;
+ }
+ unsigned long
+ Err_bad_univ_seq::bad_univ_seq()const{return bad_univ_seq_;}
+ ***
+ }
+)
+"improper closing of rules construct"
+ (sym-class Err_improper_closing_of_rules)
+"no identifier present" (sym-class Err_no_identifier_present)
+"no directive present" (sym-class Err_no_directive_present)
+"duplicate directive" (sym-class Err_duplicate_directive)
+"no syntax-code present" (sym-class Err_no_syntax_code_present)
+"no open-parenthesis" (sym-class Err_no_open_parenthesis)
+"no close-parenthesis" (sym-class Err_no_close_parenthesis)
+"no fsm-id-present" (sym-class Err_no_fsm_id_present)
+"no fsm-id-string present" (sym-class Err_no_fsm_id_string)
+"no fsm-filename present" (sym-class Err_no_fsm_filename_present)
+"no fsm-filename id present"(sym-class Err_no_fsm_filename_id_present)
+
+"no comma present" (sym-class Err_no_comma_present)
+"no fsm-namespace present" (sym-class Err_no_fsm_namespace_present)
+"no fsm-namespace id present"(sym-class Err_no_fsm_namespace_id_present)
+"no fsm-class present" (sym-class Err_no_fsm_class_present)
+
+"no fsm-version present" (sym-class Err_no_fsm_version_present)
+"no fsm-version string present" (sym-class Err_no_fsm_version_string)
+"no fsm-date present" (sym-class Err_no_fsm_date_present)
+"no fsm-date string present" (sym-class Err_no_fsm_date_string)
+"no fsm-debug present" (sym-class Err_no_fsm_debug_present)
+"no fsm-debug string present" (sym-class Err_no_fsm_debug_string)
+"no fsm-comments present" (sym-class Err_no_fsm_comments_present)
+"no fsm-comments string present" (sym-class Err_no_fsm_comments_string)
+"invalid fsm-debug value" (sym-class Err_fsm_debug_string_not_true_or_false)
+
+"no parallel-thread-function" (sym-class Err_no_pp_thread_function_present)
+"no parallel-control-monitor" (sym-class Err_no_pp_ctrl_mntor_kw_present)
+"no parallel thread function" (sym-class Err_no_pp_fnct_id_present)
+"no parallel-la-boundary" (sym-class Err_no_pp_bndry_present)
+"no parallel-la-boundary-expr" (sym-class Err_no_pp_la_bndary_expr_present)
+"no ***" (sym-class Err_no_syntax_code_end_present)
+"no parallel-code" (sym-class Err_no_pp_code_present)
+"no parallel-code-syntax-code" (sym-class Err_no_pp_code_stc_present)
+"not an arbitration-code keyword" (sym-class Err_not_arbitration_code_kw)
+
+"no open-brace" (sym-class Err_no_open_brace)
+"no close-brace" (sym-class Err_no_close_brace)
+"no constant-defs-directive present" (sym-class Err_no_constant_defs_present)
+"no file-name present" (sym-class Err_no_filename_present)
+"no file-name-id present"(sym-class Err_no_filename_id_present)
+"no name-space present" (sym-class Err_no_namespace_present)
+"no name-space-id present"(sym-class Err_no_namespace_id_present)
+"no constant-defs-code present"(sym-class Err_no_kdefs_code_present)
+"no constant-defs keyword present"(sym-class Err_no_kdefs_kw_present)
+"no terminal-def-code present"(sym-class Err_no_tdef_code_present)
+
+"no symbol definition present" (sym-class Err_no_sym_defs_present)
+"no key-value present in definition" (sym-class Err_no_terminal_key_present)
+"duplicate-entry in alphabet" (sym-class Err_dup_entry_in_alphabet)
+"already defined AB tag" (sym-class Err_already_defined_AB)
+"already defined AD tag" (sym-class Err_already_defined_AD)
+"improper directive" (sym-class Err_improper_directive)
+"no sym-class present" (sym-class Err_no_sym_class_present)
+"no sym-class id present" (sym-class Err_no_sym_class_id_present)
+
+"zero len symbol" (sym-class Err_zero_len_sym)
+"stbl full" (sym-class Err_sym_tbl_full)
+"stbl char-pool full" (sym-class Err_sym_tbl_char_pool_full)
+"dup-entry in sym-table" (sym-class Err_dup_entry_in_sym_table)
+"subscript out-of-range" (sym-class Err_subscript_out_of_range)
+"stbl scope-stk overflow" (sym-class Err_sym_tbl_nested_scope_stk_overflow)
+"stbl scope-stk underflow" (sym-class Err_sym_tbl_nested_scope_stk_underflow)
+"stbl context-buf-overflow" (sym-class Err_sym_tbl_context_buf_overflow)
+"report-card-ptr-0" (sym-class Err_report_card_ptr_0)
+"bad pos of t def" (sym-class Err_cannot_define_term_after_sufx_dir)
+"dup ? sufx directive" (sym-class Err_dup_sufx_directive)
+"bad pos of terminals-refs" (sym-class Err_terminals_refs_def_after_terminals)
+"terminals-refs duplicate" (sym-class Err_terminals_refs_dup_def)
+"no rule name present" (sym-class Err_no_rule_name_present)
+"no sub rule present" (sym-class Err_no_sub_rule_present)
+"undefined terminal in subrule" (sym-class Err_subrule_use_undefined_T)
+"unknown symbol type in stbl" (sym-class Err_stbl_entry_unknown)
+"subrule overrun" (sym-class Err_subrule_overrun)
+"stbl has entry but not a rule" (sym-class Err_stble_has_entry_but_not_a_rule)
+
+"no file-of-T-alphabet" (sym-class Err_file_of_T_alphabet_kw_not_present)
+"emitfile kw not present" (sym-class Err_emitfile_kw_not_present)
+"preamble kw not present" (sym-class Err_preamble_kw_not_present)
+"no preamble source code" (sym-class Err_preamble_srce_code_not_present)
+"no end-preamble present" (sym-class Err_end_preamble_kw_not_present)
+"command line chaffe" (sym-class Err_cmd_line_chaffe)
+"T-alphabet kw not present" (sym-class Err_T_alphabet_kw_not_present)
+"T-alphabet file not present" (sym-class Err_T_alphabet_file_not_present)
+"no end-T-alphabet present" (sym-class Err_end_T_alphabet_kw_not_present)
+"no T in T-alphabet list" (sym-class Err_no_terminals_in_T_alphabet_list)
+"rotten chr in T-alphabet" (sym-class Err_rotten_chr_in_T_alphabet)
+"no transitive present" (sym-class Err_transitive_kw_not_present)
+"no grammar-name present" (sym-class Err_grammar_name_kw_not_present)
+"no name-space" (sym-class Err_namespace_kw_not_present)
+"no file-name kw present" (sym-class Err_filename_kw_not_present)
+"no thread-name present" (sym-class Err_threadname_kw_not_present)
+"no monolithic present" (sym-class Err_monolithic_kw_not_present)
+"no no-of-T present" (sym-class Err_no_of_T_kw_not_present)
+"no list-of-native-terminals" (sym-class Err_list_of_terminals_kw_not_present)
+"no list-of-transit..." (sym-class Err_no_list_of_trans_threads_kw)
+"no Ts in T-alphabet" (sym-class Err_no_terminals_present_in_T_alphabet)
+"linker's transitive value not n or y" (sym-class Err_transitive_value_bad)
+"linker's monolithic value not n or y" (sym-class Err_monolithic_value_bad)
+"no grammar-name value" (sym-class Err_grammar_name_value_not_present)
+"no name-space value" (sym-class Err_namespace_value_not_present)
+"no thread-name value" (sym-class Err_threadname_value_not_present)
+"no file-name value" (sym-class Err_filename_value_not_present)
+"no-of-T value not present" (sym-class Err_no_of_T_value_not_present)
+"no# in list-of-native-term..." (sym-class Err_no_of_terminals_not_present)
+"no end-list-of-native..." (sym-class Err_end_list_native_T_kw_not_present)
+"no end-list-of-trans..." (sym-class Err_end_list_of_transitive_threads_kw_not_present)
+
+"# T in list not eq" (sym-class Err_no_of_native_Ts_in_list_not_equal{
+ user-declaration
+ public:
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long Value);
+ unsigned long no()const;
+ private:unsigned long no_;
+ ***
+ user-implementation
+ Err_no_of_native_Ts_in_list_not_equal::
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long No)
+T_CTOR("no terminals in list not equal, chk items in list",T_Enum::T_Err_no_of_native_Ts_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_native_Ts_in_list_not_equal::no()const{return no_;}
+ ***
+ }
+)
+
+"# threads in list not eq" (sym-class Err_no_of_threads_in_list_not_equal{
+ user-declaration
+ public:
+ Err_no_of_threads_in_list_not_equal(unsigned long No);
+ unsigned long no()const;
+ private:unsigned long no_;
+ ***
+ user-implementation
+ Err_no_of_threads_in_list_not_equal::
+ Err_no_of_threads_in_list_not_equal(unsigned long No)
+T_CTOR("no threads in list not equal, chk list",T_Enum::T_Err_no_of_threads_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_threads_in_list_not_equal::no()const{return no_;}
+ ***
+ }
+)
+
+"thread xrefed, but not defed"
+ (sym-class Err_thread_refed_but_not_defined{
+ user-declaration
+ public:
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id);
+ CAbs_lr1_sym* th_id();
+ private:CAbs_lr1_sym* th_id_;
+ ***
+ user-implementation
+ Err_thread_refed_but_not_defined::
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id)
+T_CTOR("thread xrefed, but not defed",T_Enum::T_Err_thread_refed_but_not_defined_,0,false,false)
+ { th_id_ = Th_id;}
+yacco2::CAbs_lr1_sym* Err_thread_refed_but_not_defined::th_id(){return th_id_;};
+ ***
+ }
+)
+"T in list not defined in T-alphabet"
+/@
+\Olinker message. It indicates that the terminal
+is not defined in ``T-alphabet'' construct.
+This is the T vocabulary.
+If the terminal is not defined, it means that the
+grammar writer has not generated the vocabulary.
+So turn on the /t option and re-compile a grammar thus
+creating the updated list.
+@/
+ (sym-class Err_bad_T_in_list)
+
+"transitive list thread not defined by fsc files"
+/@
+The hand coded ``???.fsc'' control file provides
+all the threads' ``fsc'' files has thread entries missing.
+Typically the grammar writer created a new thread but forgot the
+include it in the global ``fsc'' file.
+So go add the missing thread entries in the global ``fsc'' file.
+@/
+ (sym-class Err_bad_th_in_list)
+"thread defined by another fsc file"
+/@
+Each individual thread's fsc file contains its bio.
+This error indicates that the grammar writer probably
+cloned off a grammar but did not
+edit properly the vital statistics.
+So go edit the erroneous grammar and correct
+its thread name, namespace etc.
+@/
+(sym-class Err_already_defined_in_fsc_file)
+
+"thread in stbl but subscript badly set"
+/@
+More of a sanity check in the symbol table.
+If this occurs i'm really in trouble.
+@/
+(sym-class Err_bad_thread_subscript)
+
+"token found in stbl but not a kw"
+/@
+The symbol is not a keyword. Could be an initialization
+problem with my \O2 setup.
+@/
+ (sym-class Err_not_a_keyword)
+
+"no# in list-of-trans..."
+/@
+Cross check against the \O2 linker ``fsc'' info.
+The ``list-of-transitive-threads'' construct also
+states the number of entries in its list.
+Some how they don't jive.
+i think thar's something rotten in the fingers and
+diletants playing with the file?
+@/
+(sym-class Err_no_of_threads_not_present)
+
+"re-compile grammar: bad T-alphabet"
+/@
+Mismatch with the contents of the ``T-alphabet'' construct and the
+number of terminals stated in each individual grammar ``fsc'' file.
+Usually means that terminals of some ilk have changed the
+population and requires a recompilation per grammar
+to match the vocabulary numbers.
+That is regen grammars with the ``-t'' and ``-err'' switches.
+This gens the eumeration file that ``o2linker'' depends on.
+@/
+(sym-class Err_bad_T_alphabet)
+
+"fsc file does not exist" (sym-class Err_fsc_file_does_not_exist)
+"file-name file does not exist" (sym-class Err_filename_file_does_not_exist)
+"T-alphabet file does not exist"
+ (sym-class Err_T_alphabet_file_does_not_exist)
+"emitfile file does not exist" (sym-class Err_emitfile_file_does_not_exist)
+"emitfile file not present" (sym-class Err_emitfile_file_not_present)
+"fsc file not present" (sym-class Err_fsc_cntl_file_not_present)
+"file of T-alphabet not present" (sym-class Err_file_of_T_alphabet_not_present)
+
+"O2 epsilon badly gened: 0 items in fsc lists"
+/@
+\O2 states that a thread has epsilon pass thru of thread calling.
+Example the called thread start state has an epsilon subrule.
+Sanity check or paranoia on my work.
+@/
+(sym-class Err_epsilon_pass_thru)
+
+"O2 epsilon: T present, but no T list"
+/@
+\O2 states that a thread has epsilon pass thru of thread calling.
+Example the called thread start state has an epsilon subrule.
+Sanity check or paranoia on my work.
+@/
+(sym-class Err_epsilon_pass_thru_no_Ts)
+
+"rule not found in stbl"
+/@
+Post process the grammar's vocabulary.
+A rule can be referenced before
+its definition.
+Just help the grammar writer of misselling or forgetfulness.
+@/
+(sym-class Err_rule_not_in_stbl)
+
+"T not found in stbl"
+/@
+Either the grammmar writer forgot to add a new T definition or
+its a mistype.
+@/
+(sym-class Err_T_not_in_stbl)
+
+"bad directive" (sym-class Err_bad_directive)
+
+"bad term in la expr"
+/@
+Must be a Rule or a T term within the subrule expression.
+@/
+(sym-class Err_bad_term_in_la_expr)
+
+"removal of term against empty set in la expr"
+/@
+Bad expression where a removal expression is against an empty set.
+For example, a - eolr - b is invalid. The eolr empties the set.
+a - eolr + b is a round about way of having just b in the set.
+@/
+(sym-class Err_empty_set_removal_in_la_expr)
+
+"bad operator la expr: not a + or -"
+/@
+Thread's lookahead expression malformed.
+@/
+(sym-class Err_bad_operator_in_la_expr)
+
+"not a lhs kw" (sym-class Err_not_a_lhs_kw)
+"no parallel-la-bndary expr"
+ (sym-class Err_pp_la_boundary_attribute_not_fnd)
+"duplicate fsm phrase" (sym-class Err_already_processed_fsm_phase)
+"duplicate parallel-parse phrase" (sym-class Err_already_processed_pp_phase)
+"duplicate T_enum phrase" (sym-class Err_already_processed_T_enum_phase)
+"duplicate error phrase" (sym-class Err_already_processed_error_phase)
+"duplicate raw character phrase" (sym-class Err_already_processed_rc_phase)
+"duplicate lrk phrase" (sym-class Err_already_processed_lrk_phase)
+"duplicate terminal phrase" (sym-class Err_already_processed_T_phase)
+"duplicate rule phrase" (sym-class Err_already_processed_rule_phase)
+"T not returned from a thread" (sym-class Err_not_T_for_rtned_token_from_th)
+"not a namespace id in thread expr" (sym-class Err_not_id_for_ns_in_th_stmt)
+"not a thread name id in expr" (sym-class Err_not_id_for_th_name_in_th_stmt)
+"bad thread expr" (sym-class Err_bad_th_qualifier)
+"not :: in thread expr" (sym-class Err_not_dbl_colon_in_th_stmt)
+"bad term in subrule expr" (sym-class Err_not_T_or_R_in_subrule_expr)
+"? ended subrule expr" (sym-class Err_not_T_or_R_or_eos_in_subrule_expr)
+"not an eosr in subrule expr" (sym-class Err_not_eos_in_subrule_expr)
+"invalid logical name" (sym-class Err_invalid_logical_name)
+"invalid logical value" (sym-class Err_invalid_logical_value)
+"duplicate logical name" (sym-class Err_duplicate_logical_name)
+"missing terminals-refs kw" (sym-class Err_missing_terminals_refs_kw)
+"missing terminals-sufx kw" (sym-class Err_missing_terminals_sufx_kw)
+"not a terminal definition" (sym-class Err_not_a_terminal_definition)
+"missing lrk-sufx kw" (sym-class Err_missing_lrk_sufx_kw)
+"rule does not gen T strings - sick grammar" (sym-class ERR_sick_grammar)
+"misplaced or missing fsm phrase" (sym-class ERR_no_fsm_phrase)
+"misplaced or missing T enumeration phrase" (sym-class ERR_no_T_enum_phrase)
+"misplaced or missing lrk phrase" (sym-class ERR_no_lrk_phrase)
+"misplaced or missing rc phrase" (sym-class ERR_no_rc_phrase)
+"misplaced or missing errors phrase" (sym-class ERR_no_errors_phrase)
+"misplaced or missing terminals phrase" (sym-class ERR_no_terminals_phrase)
+"misplaced or missing rules phrase" (sym-class ERR_no_rules_phrase)
+"rule used but undefined" (sym-class Err_used_rule_but_undefined)
+"rule already defined" (sym-class Err_rule_already_defined)
+"la expression calculates an empty set" (sym-class Err_la_expr_calc_empty_set)
+"no closing brace ending rules defs"
+ (sym-class Err_no_close_brace_ending_rules_defs)
+
+"use of T outside Rules's construct"
+/@
+Thrown by |pass3.lex| grammar.
+The terminal definitions have already been parsed and
+stored in the symbol table.
+The symbol table returns the found item as a terminal rather than
+the unfound identifier.
+Cause is reference of a terminal outside of the Rules construct.
+Probably a typo by the grammar writer.
+@/
+ (sym-class Err_use_of_T_outside_Rules_construct)
+
+"not a kw to start the top/down parse construct"
+/@
+Thrown by |pass3.lex| grammar.
+Caused by an identifier that has been misplaced.
+Could be a typo
+where the item should be within the
+defining Rules Vocabulary or
+a premature ending of the Rules construct by an extra close brace
+whereby it is trying to define a rule.
+@/
+ (sym-class Err_not_kw_defining_grammar_construct)
+
+"use of Non-terminal (rule) outside Rules's construct"
+/@
+Thrown by |pass3.lex| grammar.
+The rule reference has already been
+seen by the parsed Rules construct and
+stored in the symbol table.
+The symbol table returns the found item as a rule.
+Cause is a reference to the rule outside of the Rules construct.
+Probably a typo by the grammar writer caused by the premature
+parsing of the Rules Vocabulary.
+@/
+ (sym-class Err_use_of_N_outside_Rules_construct)
+
+"misplaced or misspelt Rule or T outside of Rules defs"
+/@
+Thrown by |pass3.lex| grammar.
+It is outside of a proper grammar's construct and
+does not have a symbol table entry.
+So it could be a misspelt T or an orphanned rule outside of its
+defining Rules construct.
+@/
+ (sym-class Err_misplaced_or_misspelt_Rule_or_T)
+
+"not a Rule in chained dispatcher expr"
+/@
+Thrown by |subrule_def.lex| grammar supporting the
+new back-to-back thread call construct whereby the following procedure call is chained to
+the pushed ``return T'' of the 1st thread call.
+The term following the 1st thread call expression must be a rule whose
+contents use the \\TRAshift operator.
+@/
+(sym-class Err_not_a_Rule)
+"Empty file no grammar constructs present" (sym-class Err_empty_file)
+"term not a lhs or parallel-control-monitor kw" (sym-class Err_not_lhs_pcnrl_mntr)
+}// end of error symbol definitions
+
+
diff --git a/web/yacco2/compiler/grammars/yacco2_err_symbols.cpp b/web/yacco2/compiler/grammars/yacco2_err_symbols.cpp
new file mode 100644
index 0000000000..a51522d83b
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_err_symbols.cpp
@@ -0,0 +1,665 @@
+/*
+ File: yacco2_err_symbols.cpp
+ Date and Time: Sun Apr 20 13:54:30 2014
+*/
+#include "yacco2_err_symbols.h"
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_T_enum;
+
+ Err_nested_files_exceeded::
+ Err_nested_files_exceeded(yacco2::INT Nested_cnt,std::string& File_name)
+ T_CTOR("nested files exceeded",T_Enum::T_Err_nested_files_exceeded_,0,false,false)
+ {nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+ Err_no_end_of_code::
+Err_no_end_of_code()
+ T_CTOR("no end-of-code",T_Enum::T_Err_no_end_of_code_,0,false,false){}
+Err_no_cmd_lne_data::
+Err_no_cmd_lne_data()
+ T_CTOR("no cmd-lne-data",T_Enum::T_Err_no_cmd_lne_data_,0,false,false){}
+Err_no_filename::
+Err_no_filename()
+ T_CTOR("no filename",T_Enum::T_Err_no_filename_,0,false,false){}
+
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(std::string& File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmheader_filename::
+ Err_bad_fsmheader_filename(const char* File_name)
+T_CTOR("bad filename to output grammar header",T_Enum::T_Err_bad_fsmheader_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmheader_filename::file_name(){return &file_name_;}
+
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(std::string& File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmcpp_filename::
+ Err_bad_fsmcpp_filename(const char* File_name)
+T_CTOR("bad filename to output cpp",T_Enum::T_Err_bad_fsmcpp_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmcpp_filename::file_name(){return &file_name_;}
+
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(std::string& File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmsym_filename::
+ Err_bad_fsmsym_filename(const char* File_name)
+T_CTOR("bad filename to output sym",T_Enum::T_Err_bad_fsmsym_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmsym_filename::file_name(){return &file_name_;}
+
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(std::string& File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_fsmtbl_filename::
+ Err_bad_fsmtbl_filename(const char* File_name)
+T_CTOR("bad filename to output tbl",T_Enum::T_Err_bad_fsmtbl_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_fsmtbl_filename::file_name(){return &file_name_;}
+
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(std::string& File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_enum_filename::
+ Err_bad_enum_filename(const char* File_name)
+T_CTOR("bad filename to output enumeration header",T_Enum::T_Err_bad_enum_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_enum_filename::file_name(){return &file_name_;}
+
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_hdrfilename::
+ Err_bad_errors_hdrfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary header",T_Enum::T_Err_bad_errors_hdrfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_hdrfilename::file_name(){return &file_name_;}
+
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(std::string& File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_errors_impfilename::
+ Err_bad_errors_impfilename(const char* File_name)
+T_CTOR("bad filename for Errors vocabulary implementation",T_Enum::T_Err_bad_errors_impfilename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_errors_impfilename::file_name(){return &file_name_;}
+ Err_bad_cmd_lne_opt::
+Err_bad_cmd_lne_opt()
+ T_CTOR("bad cmd-opt",T_Enum::T_Err_bad_cmd_lne_opt_,0,false,false){}
+Err_bad_int_no::
+Err_bad_int_no()
+ T_CTOR("bad int-no",T_Enum::T_Err_bad_int_no_,0,false,false){}
+Err_bad_int_no_range::
+Err_bad_int_no_range()
+ T_CTOR("bad int-no range",T_Enum::T_Err_bad_int_no_range_,0,false,false){}
+Err_no_int_present::
+Err_no_int_present()
+ T_CTOR("no int present",T_Enum::T_Err_no_int_present_,0,false,false){}
+Err_bad_eos::
+Err_bad_eos()
+ T_CTOR("bad eos",T_Enum::T_Err_bad_eos_,0,false,false){}
+Err_bad_esc::
+Err_bad_esc()
+ T_CTOR("bad esc",T_Enum::T_Err_bad_esc_,0,false,false){}
+Err_comment_overrun::
+Err_comment_overrun()
+ T_CTOR("comment-overrun",T_Enum::T_Err_comment_overrun_,0,false,false){}
+
+ Err_bad_char::
+ Err_bad_char(CAbs_lr1_sym* Bad_char)
+T_CTOR("bad char",T_Enum::T_Err_bad_char_,&dtor_Err_bad_char,false,false)
+ {bad_char_ = Bad_char;}
+ yacco2::CAbs_lr1_sym* Err_bad_char::bad_char()const{return bad_char_;}
+ void Err_bad_char::zero_out_bad_char(){bad_char_ = 0;}
+ void Err_bad_char::dtor_Err_bad_char(yacco2::VOIDP This,yacco2::VOIDP P){
+ Err_bad_char* R = (Err_bad_char*)(This);
+
+ if(R->bad_char_!=0)
+ delete R->bad_char();
+
+}
+
+ Err_bad_univ_seq::
+ Err_bad_univ_seq(unsigned long Bad_univ_seq)
+ T_CTOR("bad univ seq",T_Enum::T_Err_bad_univ_seq_,0,false,false)
+ {bad_univ_seq_ = Bad_univ_seq;
+ }
+ unsigned long
+ Err_bad_univ_seq::bad_univ_seq()const{return bad_univ_seq_;}
+ Err_improper_closing_of_rules::
+Err_improper_closing_of_rules()
+ T_CTOR("improper closing of rules construct",T_Enum::T_Err_improper_closing_of_rules_,0,false,false){}
+Err_no_identifier_present::
+Err_no_identifier_present()
+ T_CTOR("no identifier present",T_Enum::T_Err_no_identifier_present_,0,false,false){}
+Err_no_directive_present::
+Err_no_directive_present()
+ T_CTOR("no directive present",T_Enum::T_Err_no_directive_present_,0,false,false){}
+Err_duplicate_directive::
+Err_duplicate_directive()
+ T_CTOR("duplicate directive",T_Enum::T_Err_duplicate_directive_,0,false,false){}
+Err_no_syntax_code_present::
+Err_no_syntax_code_present()
+ T_CTOR("no syntax-code present",T_Enum::T_Err_no_syntax_code_present_,0,false,false){}
+Err_no_open_parenthesis::
+Err_no_open_parenthesis()
+ T_CTOR("no open-parenthesis",T_Enum::T_Err_no_open_parenthesis_,0,false,false){}
+Err_no_close_parenthesis::
+Err_no_close_parenthesis()
+ T_CTOR("no close-parenthesis",T_Enum::T_Err_no_close_parenthesis_,0,false,false){}
+Err_no_fsm_id_present::
+Err_no_fsm_id_present()
+ T_CTOR("no fsm-id-present",T_Enum::T_Err_no_fsm_id_present_,0,false,false){}
+Err_no_fsm_id_string::
+Err_no_fsm_id_string()
+ T_CTOR("no fsm-id-string present",T_Enum::T_Err_no_fsm_id_string_,0,false,false){}
+Err_no_fsm_filename_present::
+Err_no_fsm_filename_present()
+ T_CTOR("no fsm-filename present",T_Enum::T_Err_no_fsm_filename_present_,0,false,false){}
+Err_no_fsm_filename_id_present::
+Err_no_fsm_filename_id_present()
+ T_CTOR("no fsm-filename id present",T_Enum::T_Err_no_fsm_filename_id_present_,0,false,false){}
+Err_no_comma_present::
+Err_no_comma_present()
+ T_CTOR("no comma present",T_Enum::T_Err_no_comma_present_,0,false,false){}
+Err_no_fsm_namespace_present::
+Err_no_fsm_namespace_present()
+ T_CTOR("no fsm-namespace present",T_Enum::T_Err_no_fsm_namespace_present_,0,false,false){}
+Err_no_fsm_namespace_id_present::
+Err_no_fsm_namespace_id_present()
+ T_CTOR("no fsm-namespace id present",T_Enum::T_Err_no_fsm_namespace_id_present_,0,false,false){}
+Err_no_fsm_class_present::
+Err_no_fsm_class_present()
+ T_CTOR("no fsm-class present",T_Enum::T_Err_no_fsm_class_present_,0,false,false){}
+Err_no_fsm_version_present::
+Err_no_fsm_version_present()
+ T_CTOR("no fsm-version present",T_Enum::T_Err_no_fsm_version_present_,0,false,false){}
+Err_no_fsm_version_string::
+Err_no_fsm_version_string()
+ T_CTOR("no fsm-version string present",T_Enum::T_Err_no_fsm_version_string_,0,false,false){}
+Err_no_fsm_date_present::
+Err_no_fsm_date_present()
+ T_CTOR("no fsm-date present",T_Enum::T_Err_no_fsm_date_present_,0,false,false){}
+Err_no_fsm_date_string::
+Err_no_fsm_date_string()
+ T_CTOR("no fsm-date string present",T_Enum::T_Err_no_fsm_date_string_,0,false,false){}
+Err_no_fsm_debug_present::
+Err_no_fsm_debug_present()
+ T_CTOR("no fsm-debug present",T_Enum::T_Err_no_fsm_debug_present_,0,false,false){}
+Err_no_fsm_debug_string::
+Err_no_fsm_debug_string()
+ T_CTOR("no fsm-debug string present",T_Enum::T_Err_no_fsm_debug_string_,0,false,false){}
+Err_no_fsm_comments_present::
+Err_no_fsm_comments_present()
+ T_CTOR("no fsm-comments present",T_Enum::T_Err_no_fsm_comments_present_,0,false,false){}
+Err_no_fsm_comments_string::
+Err_no_fsm_comments_string()
+ T_CTOR("no fsm-comments string present",T_Enum::T_Err_no_fsm_comments_string_,0,false,false){}
+Err_fsm_debug_string_not_true_or_false::
+Err_fsm_debug_string_not_true_or_false()
+ T_CTOR("invalid fsm-debug value",T_Enum::T_Err_fsm_debug_string_not_true_or_false_,0,false,false){}
+Err_no_pp_thread_function_present::
+Err_no_pp_thread_function_present()
+ T_CTOR("no parallel-thread-function",T_Enum::T_Err_no_pp_thread_function_present_,0,false,false){}
+Err_no_pp_ctrl_mntor_kw_present::
+Err_no_pp_ctrl_mntor_kw_present()
+ T_CTOR("no parallel-control-monitor",T_Enum::T_Err_no_pp_ctrl_mntor_kw_present_,0,false,false){}
+Err_no_pp_fnct_id_present::
+Err_no_pp_fnct_id_present()
+ T_CTOR("no parallel thread function",T_Enum::T_Err_no_pp_fnct_id_present_,0,false,false){}
+Err_no_pp_bndry_present::
+Err_no_pp_bndry_present()
+ T_CTOR("no parallel-la-boundary",T_Enum::T_Err_no_pp_bndry_present_,0,false,false){}
+Err_no_pp_la_bndary_expr_present::
+Err_no_pp_la_bndary_expr_present()
+ T_CTOR("no parallel-la-boundary-expr",T_Enum::T_Err_no_pp_la_bndary_expr_present_,0,false,false){}
+Err_no_syntax_code_end_present::
+Err_no_syntax_code_end_present()
+ T_CTOR("no ***",T_Enum::T_Err_no_syntax_code_end_present_,0,false,false){}
+Err_no_pp_code_present::
+Err_no_pp_code_present()
+ T_CTOR("no parallel-code",T_Enum::T_Err_no_pp_code_present_,0,false,false){}
+Err_no_pp_code_stc_present::
+Err_no_pp_code_stc_present()
+ T_CTOR("no parallel-code-syntax-code",T_Enum::T_Err_no_pp_code_stc_present_,0,false,false){}
+Err_not_arbitration_code_kw::
+Err_not_arbitration_code_kw()
+ T_CTOR("not an arbitration-code keyword",T_Enum::T_Err_not_arbitration_code_kw_,0,false,false){}
+Err_no_open_brace::
+Err_no_open_brace()
+ T_CTOR("no open-brace",T_Enum::T_Err_no_open_brace_,0,false,false){}
+Err_no_close_brace::
+Err_no_close_brace()
+ T_CTOR("no close-brace",T_Enum::T_Err_no_close_brace_,0,false,false){}
+Err_no_constant_defs_present::
+Err_no_constant_defs_present()
+ T_CTOR("no constant-defs-directive present",T_Enum::T_Err_no_constant_defs_present_,0,false,false){}
+Err_no_filename_present::
+Err_no_filename_present()
+ T_CTOR("no file-name present",T_Enum::T_Err_no_filename_present_,0,false,false){}
+Err_no_filename_id_present::
+Err_no_filename_id_present()
+ T_CTOR("no file-name-id present",T_Enum::T_Err_no_filename_id_present_,0,false,false){}
+Err_no_namespace_present::
+Err_no_namespace_present()
+ T_CTOR("no name-space present",T_Enum::T_Err_no_namespace_present_,0,false,false){}
+Err_no_namespace_id_present::
+Err_no_namespace_id_present()
+ T_CTOR("no name-space-id present",T_Enum::T_Err_no_namespace_id_present_,0,false,false){}
+Err_no_kdefs_code_present::
+Err_no_kdefs_code_present()
+ T_CTOR("no constant-defs-code present",T_Enum::T_Err_no_kdefs_code_present_,0,false,false){}
+Err_no_kdefs_kw_present::
+Err_no_kdefs_kw_present()
+ T_CTOR("no constant-defs keyword present",T_Enum::T_Err_no_kdefs_kw_present_,0,false,false){}
+Err_no_tdef_code_present::
+Err_no_tdef_code_present()
+ T_CTOR("no terminal-def-code present",T_Enum::T_Err_no_tdef_code_present_,0,false,false){}
+Err_no_sym_defs_present::
+Err_no_sym_defs_present()
+ T_CTOR("no symbol definition present",T_Enum::T_Err_no_sym_defs_present_,0,false,false){}
+Err_no_terminal_key_present::
+Err_no_terminal_key_present()
+ T_CTOR("no key-value present in definition",T_Enum::T_Err_no_terminal_key_present_,0,false,false){}
+Err_dup_entry_in_alphabet::
+Err_dup_entry_in_alphabet()
+ T_CTOR("duplicate-entry in alphabet",T_Enum::T_Err_dup_entry_in_alphabet_,0,false,false){}
+Err_already_defined_AB::
+Err_already_defined_AB()
+ T_CTOR("already defined AB tag",T_Enum::T_Err_already_defined_AB_,0,false,false){}
+Err_already_defined_AD::
+Err_already_defined_AD()
+ T_CTOR("already defined AD tag",T_Enum::T_Err_already_defined_AD_,0,false,false){}
+Err_improper_directive::
+Err_improper_directive()
+ T_CTOR("improper directive",T_Enum::T_Err_improper_directive_,0,false,false){}
+Err_no_sym_class_present::
+Err_no_sym_class_present()
+ T_CTOR("no sym-class present",T_Enum::T_Err_no_sym_class_present_,0,false,false){}
+Err_no_sym_class_id_present::
+Err_no_sym_class_id_present()
+ T_CTOR("no sym-class id present",T_Enum::T_Err_no_sym_class_id_present_,0,false,false){}
+Err_zero_len_sym::
+Err_zero_len_sym()
+ T_CTOR("zero len symbol",T_Enum::T_Err_zero_len_sym_,0,false,false){}
+Err_sym_tbl_full::
+Err_sym_tbl_full()
+ T_CTOR("stbl full",T_Enum::T_Err_sym_tbl_full_,0,false,false){}
+Err_sym_tbl_char_pool_full::
+Err_sym_tbl_char_pool_full()
+ T_CTOR("stbl char-pool full",T_Enum::T_Err_sym_tbl_char_pool_full_,0,false,false){}
+Err_dup_entry_in_sym_table::
+Err_dup_entry_in_sym_table()
+ T_CTOR("dup-entry in sym-table",T_Enum::T_Err_dup_entry_in_sym_table_,0,false,false){}
+Err_subscript_out_of_range::
+Err_subscript_out_of_range()
+ T_CTOR("subscript out-of-range",T_Enum::T_Err_subscript_out_of_range_,0,false,false){}
+Err_sym_tbl_nested_scope_stk_overflow::
+Err_sym_tbl_nested_scope_stk_overflow()
+ T_CTOR("stbl scope-stk overflow",T_Enum::T_Err_sym_tbl_nested_scope_stk_overflow_,0,false,false){}
+Err_sym_tbl_nested_scope_stk_underflow::
+Err_sym_tbl_nested_scope_stk_underflow()
+ T_CTOR("stbl scope-stk underflow",T_Enum::T_Err_sym_tbl_nested_scope_stk_underflow_,0,false,false){}
+Err_sym_tbl_context_buf_overflow::
+Err_sym_tbl_context_buf_overflow()
+ T_CTOR("stbl context-buf-overflow",T_Enum::T_Err_sym_tbl_context_buf_overflow_,0,false,false){}
+Err_report_card_ptr_0::
+Err_report_card_ptr_0()
+ T_CTOR("report-card-ptr-0",T_Enum::T_Err_report_card_ptr_0_,0,false,false){}
+Err_cannot_define_term_after_sufx_dir::
+Err_cannot_define_term_after_sufx_dir()
+ T_CTOR("bad pos of t def",T_Enum::T_Err_cannot_define_term_after_sufx_dir_,0,false,false){}
+Err_dup_sufx_directive::
+Err_dup_sufx_directive()
+ T_CTOR("dup ? sufx directive",T_Enum::T_Err_dup_sufx_directive_,0,false,false){}
+Err_terminals_refs_def_after_terminals::
+Err_terminals_refs_def_after_terminals()
+ T_CTOR("bad pos of terminals-refs",T_Enum::T_Err_terminals_refs_def_after_terminals_,0,false,false){}
+Err_terminals_refs_dup_def::
+Err_terminals_refs_dup_def()
+ T_CTOR("terminals-refs duplicate",T_Enum::T_Err_terminals_refs_dup_def_,0,false,false){}
+Err_no_rule_name_present::
+Err_no_rule_name_present()
+ T_CTOR("no rule name present",T_Enum::T_Err_no_rule_name_present_,0,false,false){}
+Err_no_sub_rule_present::
+Err_no_sub_rule_present()
+ T_CTOR("no sub rule present",T_Enum::T_Err_no_sub_rule_present_,0,false,false){}
+Err_subrule_use_undefined_T::
+Err_subrule_use_undefined_T()
+ T_CTOR("undefined terminal in subrule",T_Enum::T_Err_subrule_use_undefined_T_,0,false,false){}
+Err_stbl_entry_unknown::
+Err_stbl_entry_unknown()
+ T_CTOR("unknown symbol type in stbl",T_Enum::T_Err_stbl_entry_unknown_,0,false,false){}
+Err_subrule_overrun::
+Err_subrule_overrun()
+ T_CTOR("subrule overrun",T_Enum::T_Err_subrule_overrun_,0,false,false){}
+Err_stble_has_entry_but_not_a_rule::
+Err_stble_has_entry_but_not_a_rule()
+ T_CTOR("stbl has entry but not a rule",T_Enum::T_Err_stble_has_entry_but_not_a_rule_,0,false,false){}
+Err_file_of_T_alphabet_kw_not_present::
+Err_file_of_T_alphabet_kw_not_present()
+ T_CTOR("no file-of-T-alphabet",T_Enum::T_Err_file_of_T_alphabet_kw_not_present_,0,false,false){}
+Err_emitfile_kw_not_present::
+Err_emitfile_kw_not_present()
+ T_CTOR("emitfile kw not present",T_Enum::T_Err_emitfile_kw_not_present_,0,false,false){}
+Err_preamble_kw_not_present::
+Err_preamble_kw_not_present()
+ T_CTOR("preamble kw not present",T_Enum::T_Err_preamble_kw_not_present_,0,false,false){}
+Err_preamble_srce_code_not_present::
+Err_preamble_srce_code_not_present()
+ T_CTOR("no preamble source code",T_Enum::T_Err_preamble_srce_code_not_present_,0,false,false){}
+Err_end_preamble_kw_not_present::
+Err_end_preamble_kw_not_present()
+ T_CTOR("no end-preamble present",T_Enum::T_Err_end_preamble_kw_not_present_,0,false,false){}
+Err_cmd_line_chaffe::
+Err_cmd_line_chaffe()
+ T_CTOR("command line chaffe",T_Enum::T_Err_cmd_line_chaffe_,0,false,false){}
+Err_T_alphabet_kw_not_present::
+Err_T_alphabet_kw_not_present()
+ T_CTOR("T-alphabet kw not present",T_Enum::T_Err_T_alphabet_kw_not_present_,0,false,false){}
+Err_T_alphabet_file_not_present::
+Err_T_alphabet_file_not_present()
+ T_CTOR("T-alphabet file not present",T_Enum::T_Err_T_alphabet_file_not_present_,0,false,false){}
+Err_end_T_alphabet_kw_not_present::
+Err_end_T_alphabet_kw_not_present()
+ T_CTOR("no end-T-alphabet present",T_Enum::T_Err_end_T_alphabet_kw_not_present_,0,false,false){}
+Err_no_terminals_in_T_alphabet_list::
+Err_no_terminals_in_T_alphabet_list()
+ T_CTOR("no T in T-alphabet list",T_Enum::T_Err_no_terminals_in_T_alphabet_list_,0,false,false){}
+Err_rotten_chr_in_T_alphabet::
+Err_rotten_chr_in_T_alphabet()
+ T_CTOR("rotten chr in T-alphabet",T_Enum::T_Err_rotten_chr_in_T_alphabet_,0,false,false){}
+Err_transitive_kw_not_present::
+Err_transitive_kw_not_present()
+ T_CTOR("no transitive present",T_Enum::T_Err_transitive_kw_not_present_,0,false,false){}
+Err_grammar_name_kw_not_present::
+Err_grammar_name_kw_not_present()
+ T_CTOR("no grammar-name present",T_Enum::T_Err_grammar_name_kw_not_present_,0,false,false){}
+Err_namespace_kw_not_present::
+Err_namespace_kw_not_present()
+ T_CTOR("no name-space",T_Enum::T_Err_namespace_kw_not_present_,0,false,false){}
+Err_filename_kw_not_present::
+Err_filename_kw_not_present()
+ T_CTOR("no file-name kw present",T_Enum::T_Err_filename_kw_not_present_,0,false,false){}
+Err_threadname_kw_not_present::
+Err_threadname_kw_not_present()
+ T_CTOR("no thread-name present",T_Enum::T_Err_threadname_kw_not_present_,0,false,false){}
+Err_monolithic_kw_not_present::
+Err_monolithic_kw_not_present()
+ T_CTOR("no monolithic present",T_Enum::T_Err_monolithic_kw_not_present_,0,false,false){}
+Err_no_of_T_kw_not_present::
+Err_no_of_T_kw_not_present()
+ T_CTOR("no no-of-T present",T_Enum::T_Err_no_of_T_kw_not_present_,0,false,false){}
+Err_list_of_terminals_kw_not_present::
+Err_list_of_terminals_kw_not_present()
+ T_CTOR("no list-of-native-terminals",T_Enum::T_Err_list_of_terminals_kw_not_present_,0,false,false){}
+Err_no_list_of_trans_threads_kw::
+Err_no_list_of_trans_threads_kw()
+ T_CTOR("no list-of-transit...",T_Enum::T_Err_no_list_of_trans_threads_kw_,0,false,false){}
+Err_no_terminals_present_in_T_alphabet::
+Err_no_terminals_present_in_T_alphabet()
+ T_CTOR("no Ts in T-alphabet",T_Enum::T_Err_no_terminals_present_in_T_alphabet_,0,false,false){}
+Err_transitive_value_bad::
+Err_transitive_value_bad()
+ T_CTOR("linker's transitive value not n or y",T_Enum::T_Err_transitive_value_bad_,0,false,false){}
+Err_monolithic_value_bad::
+Err_monolithic_value_bad()
+ T_CTOR("linker's monolithic value not n or y",T_Enum::T_Err_monolithic_value_bad_,0,false,false){}
+Err_grammar_name_value_not_present::
+Err_grammar_name_value_not_present()
+ T_CTOR("no grammar-name value",T_Enum::T_Err_grammar_name_value_not_present_,0,false,false){}
+Err_namespace_value_not_present::
+Err_namespace_value_not_present()
+ T_CTOR("no name-space value",T_Enum::T_Err_namespace_value_not_present_,0,false,false){}
+Err_threadname_value_not_present::
+Err_threadname_value_not_present()
+ T_CTOR("no thread-name value",T_Enum::T_Err_threadname_value_not_present_,0,false,false){}
+Err_filename_value_not_present::
+Err_filename_value_not_present()
+ T_CTOR("no file-name value",T_Enum::T_Err_filename_value_not_present_,0,false,false){}
+Err_no_of_T_value_not_present::
+Err_no_of_T_value_not_present()
+ T_CTOR("no-of-T value not present",T_Enum::T_Err_no_of_T_value_not_present_,0,false,false){}
+Err_no_of_terminals_not_present::
+Err_no_of_terminals_not_present()
+ T_CTOR("no# in list-of-native-term...",T_Enum::T_Err_no_of_terminals_not_present_,0,false,false){}
+Err_end_list_native_T_kw_not_present::
+Err_end_list_native_T_kw_not_present()
+ T_CTOR("no end-list-of-native...",T_Enum::T_Err_end_list_native_T_kw_not_present_,0,false,false){}
+Err_end_list_of_transitive_threads_kw_not_present::
+Err_end_list_of_transitive_threads_kw_not_present()
+ T_CTOR("no end-list-of-trans...",T_Enum::T_Err_end_list_of_transitive_threads_kw_not_present_,0,false,false){}
+
+ Err_no_of_native_Ts_in_list_not_equal::
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long No)
+T_CTOR("no terminals in list not equal, chk items in list",T_Enum::T_Err_no_of_native_Ts_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_native_Ts_in_list_not_equal::no()const{return no_;}
+
+ Err_no_of_threads_in_list_not_equal::
+ Err_no_of_threads_in_list_not_equal(unsigned long No)
+T_CTOR("no threads in list not equal, chk list",T_Enum::T_Err_no_of_threads_in_list_not_equal_,0,false,false)
+ { no_ = No;}
+ unsigned long
+ Err_no_of_threads_in_list_not_equal::no()const{return no_;}
+
+ Err_thread_refed_but_not_defined::
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id)
+T_CTOR("thread xrefed, but not defed",T_Enum::T_Err_thread_refed_but_not_defined_,0,false,false)
+ { th_id_ = Th_id;}
+yacco2::CAbs_lr1_sym* Err_thread_refed_but_not_defined::th_id(){return th_id_;};
+ Err_bad_T_in_list::
+Err_bad_T_in_list()
+ T_CTOR("T in list not defined in T-alphabet",T_Enum::T_Err_bad_T_in_list_,0,false,false){}
+Err_bad_th_in_list::
+Err_bad_th_in_list()
+ T_CTOR("transitive list thread not defined by fsc files",T_Enum::T_Err_bad_th_in_list_,0,false,false){}
+Err_already_defined_in_fsc_file::
+Err_already_defined_in_fsc_file()
+ T_CTOR("thread defined by another fsc file",T_Enum::T_Err_already_defined_in_fsc_file_,0,false,false){}
+Err_bad_thread_subscript::
+Err_bad_thread_subscript()
+ T_CTOR("thread in stbl but subscript badly set",T_Enum::T_Err_bad_thread_subscript_,0,false,false){}
+Err_not_a_keyword::
+Err_not_a_keyword()
+ T_CTOR("token found in stbl but not a kw",T_Enum::T_Err_not_a_keyword_,0,false,false){}
+Err_no_of_threads_not_present::
+Err_no_of_threads_not_present()
+ T_CTOR("no# in list-of-trans...",T_Enum::T_Err_no_of_threads_not_present_,0,false,false){}
+Err_bad_T_alphabet::
+Err_bad_T_alphabet()
+ T_CTOR("re-compile grammar: bad T-alphabet",T_Enum::T_Err_bad_T_alphabet_,0,false,false){}
+Err_fsc_file_does_not_exist::
+Err_fsc_file_does_not_exist()
+ T_CTOR("fsc file does not exist",T_Enum::T_Err_fsc_file_does_not_exist_,0,false,false){}
+Err_filename_file_does_not_exist::
+Err_filename_file_does_not_exist()
+ T_CTOR("file-name file does not exist",T_Enum::T_Err_filename_file_does_not_exist_,0,false,false){}
+Err_T_alphabet_file_does_not_exist::
+Err_T_alphabet_file_does_not_exist()
+ T_CTOR("T-alphabet file does not exist",T_Enum::T_Err_T_alphabet_file_does_not_exist_,0,false,false){}
+Err_emitfile_file_does_not_exist::
+Err_emitfile_file_does_not_exist()
+ T_CTOR("emitfile file does not exist",T_Enum::T_Err_emitfile_file_does_not_exist_,0,false,false){}
+Err_emitfile_file_not_present::
+Err_emitfile_file_not_present()
+ T_CTOR("emitfile file not present",T_Enum::T_Err_emitfile_file_not_present_,0,false,false){}
+Err_fsc_cntl_file_not_present::
+Err_fsc_cntl_file_not_present()
+ T_CTOR("fsc file not present",T_Enum::T_Err_fsc_cntl_file_not_present_,0,false,false){}
+Err_file_of_T_alphabet_not_present::
+Err_file_of_T_alphabet_not_present()
+ T_CTOR("file of T-alphabet not present",T_Enum::T_Err_file_of_T_alphabet_not_present_,0,false,false){}
+Err_epsilon_pass_thru::
+Err_epsilon_pass_thru()
+ T_CTOR("O2 epsilon badly gened: 0 items in fsc lists",T_Enum::T_Err_epsilon_pass_thru_,0,false,false){}
+Err_epsilon_pass_thru_no_Ts::
+Err_epsilon_pass_thru_no_Ts()
+ T_CTOR("O2 epsilon: T present, but no T list",T_Enum::T_Err_epsilon_pass_thru_no_Ts_,0,false,false){}
+Err_rule_not_in_stbl::
+Err_rule_not_in_stbl()
+ T_CTOR("rule not found in stbl",T_Enum::T_Err_rule_not_in_stbl_,0,false,false){}
+Err_T_not_in_stbl::
+Err_T_not_in_stbl()
+ T_CTOR("T not found in stbl",T_Enum::T_Err_T_not_in_stbl_,0,false,false){}
+Err_bad_directive::
+Err_bad_directive()
+ T_CTOR("bad directive",T_Enum::T_Err_bad_directive_,0,false,false){}
+Err_bad_term_in_la_expr::
+Err_bad_term_in_la_expr()
+ T_CTOR("bad term in la expr",T_Enum::T_Err_bad_term_in_la_expr_,0,false,false){}
+Err_empty_set_removal_in_la_expr::
+Err_empty_set_removal_in_la_expr()
+ T_CTOR("removal of term against empty set in la expr",T_Enum::T_Err_empty_set_removal_in_la_expr_,0,false,false){}
+Err_bad_operator_in_la_expr::
+Err_bad_operator_in_la_expr()
+ T_CTOR("bad operator la expr: not a + or -",T_Enum::T_Err_bad_operator_in_la_expr_,0,false,false){}
+Err_not_a_lhs_kw::
+Err_not_a_lhs_kw()
+ T_CTOR("not a lhs kw",T_Enum::T_Err_not_a_lhs_kw_,0,false,false){}
+Err_pp_la_boundary_attribute_not_fnd::
+Err_pp_la_boundary_attribute_not_fnd()
+ T_CTOR("no parallel-la-bndary expr",T_Enum::T_Err_pp_la_boundary_attribute_not_fnd_,0,false,false){}
+Err_already_processed_fsm_phase::
+Err_already_processed_fsm_phase()
+ T_CTOR("duplicate fsm phrase",T_Enum::T_Err_already_processed_fsm_phase_,0,false,false){}
+Err_already_processed_pp_phase::
+Err_already_processed_pp_phase()
+ T_CTOR("duplicate parallel-parse phrase",T_Enum::T_Err_already_processed_pp_phase_,0,false,false){}
+Err_already_processed_T_enum_phase::
+Err_already_processed_T_enum_phase()
+ T_CTOR("duplicate T_enum phrase",T_Enum::T_Err_already_processed_T_enum_phase_,0,false,false){}
+Err_already_processed_error_phase::
+Err_already_processed_error_phase()
+ T_CTOR("duplicate error phrase",T_Enum::T_Err_already_processed_error_phase_,0,false,false){}
+Err_already_processed_rc_phase::
+Err_already_processed_rc_phase()
+ T_CTOR("duplicate raw character phrase",T_Enum::T_Err_already_processed_rc_phase_,0,false,false){}
+Err_already_processed_lrk_phase::
+Err_already_processed_lrk_phase()
+ T_CTOR("duplicate lrk phrase",T_Enum::T_Err_already_processed_lrk_phase_,0,false,false){}
+Err_already_processed_T_phase::
+Err_already_processed_T_phase()
+ T_CTOR("duplicate terminal phrase",T_Enum::T_Err_already_processed_T_phase_,0,false,false){}
+Err_already_processed_rule_phase::
+Err_already_processed_rule_phase()
+ T_CTOR("duplicate rule phrase",T_Enum::T_Err_already_processed_rule_phase_,0,false,false){}
+Err_not_T_for_rtned_token_from_th::
+Err_not_T_for_rtned_token_from_th()
+ T_CTOR("T not returned from a thread",T_Enum::T_Err_not_T_for_rtned_token_from_th_,0,false,false){}
+Err_not_id_for_ns_in_th_stmt::
+Err_not_id_for_ns_in_th_stmt()
+ T_CTOR("not a namespace id in thread expr",T_Enum::T_Err_not_id_for_ns_in_th_stmt_,0,false,false){}
+Err_not_id_for_th_name_in_th_stmt::
+Err_not_id_for_th_name_in_th_stmt()
+ T_CTOR("not a thread name id in expr",T_Enum::T_Err_not_id_for_th_name_in_th_stmt_,0,false,false){}
+Err_bad_th_qualifier::
+Err_bad_th_qualifier()
+ T_CTOR("bad thread expr",T_Enum::T_Err_bad_th_qualifier_,0,false,false){}
+Err_not_dbl_colon_in_th_stmt::
+Err_not_dbl_colon_in_th_stmt()
+ T_CTOR("not :: in thread expr",T_Enum::T_Err_not_dbl_colon_in_th_stmt_,0,false,false){}
+Err_not_T_or_R_in_subrule_expr::
+Err_not_T_or_R_in_subrule_expr()
+ T_CTOR("bad term in subrule expr",T_Enum::T_Err_not_T_or_R_in_subrule_expr_,0,false,false){}
+Err_not_T_or_R_or_eos_in_subrule_expr::
+Err_not_T_or_R_or_eos_in_subrule_expr()
+ T_CTOR("? ended subrule expr",T_Enum::T_Err_not_T_or_R_or_eos_in_subrule_expr_,0,false,false){}
+Err_not_eos_in_subrule_expr::
+Err_not_eos_in_subrule_expr()
+ T_CTOR("not an eosr in subrule expr",T_Enum::T_Err_not_eos_in_subrule_expr_,0,false,false){}
+Err_invalid_logical_name::
+Err_invalid_logical_name()
+ T_CTOR("invalid logical name",T_Enum::T_Err_invalid_logical_name_,0,false,false){}
+Err_invalid_logical_value::
+Err_invalid_logical_value()
+ T_CTOR("invalid logical value",T_Enum::T_Err_invalid_logical_value_,0,false,false){}
+Err_duplicate_logical_name::
+Err_duplicate_logical_name()
+ T_CTOR("duplicate logical name",T_Enum::T_Err_duplicate_logical_name_,0,false,false){}
+Err_missing_terminals_refs_kw::
+Err_missing_terminals_refs_kw()
+ T_CTOR("missing terminals-refs kw",T_Enum::T_Err_missing_terminals_refs_kw_,0,false,false){}
+Err_missing_terminals_sufx_kw::
+Err_missing_terminals_sufx_kw()
+ T_CTOR("missing terminals-sufx kw",T_Enum::T_Err_missing_terminals_sufx_kw_,0,false,false){}
+Err_not_a_terminal_definition::
+Err_not_a_terminal_definition()
+ T_CTOR("not a terminal definition",T_Enum::T_Err_not_a_terminal_definition_,0,false,false){}
+Err_missing_lrk_sufx_kw::
+Err_missing_lrk_sufx_kw()
+ T_CTOR("missing lrk-sufx kw",T_Enum::T_Err_missing_lrk_sufx_kw_,0,false,false){}
+ERR_sick_grammar::
+ERR_sick_grammar()
+ T_CTOR("rule does not gen T strings - sick grammar",T_Enum::T_ERR_sick_grammar_,0,false,false){}
+ERR_no_fsm_phrase::
+ERR_no_fsm_phrase()
+ T_CTOR("misplaced or missing fsm phrase",T_Enum::T_ERR_no_fsm_phrase_,0,false,false){}
+ERR_no_T_enum_phrase::
+ERR_no_T_enum_phrase()
+ T_CTOR("misplaced or missing T enumeration phrase",T_Enum::T_ERR_no_T_enum_phrase_,0,false,false){}
+ERR_no_lrk_phrase::
+ERR_no_lrk_phrase()
+ T_CTOR("misplaced or missing lrk phrase",T_Enum::T_ERR_no_lrk_phrase_,0,false,false){}
+ERR_no_rc_phrase::
+ERR_no_rc_phrase()
+ T_CTOR("misplaced or missing rc phrase",T_Enum::T_ERR_no_rc_phrase_,0,false,false){}
+ERR_no_errors_phrase::
+ERR_no_errors_phrase()
+ T_CTOR("misplaced or missing errors phrase",T_Enum::T_ERR_no_errors_phrase_,0,false,false){}
+ERR_no_terminals_phrase::
+ERR_no_terminals_phrase()
+ T_CTOR("misplaced or missing terminals phrase",T_Enum::T_ERR_no_terminals_phrase_,0,false,false){}
+ERR_no_rules_phrase::
+ERR_no_rules_phrase()
+ T_CTOR("misplaced or missing rules phrase",T_Enum::T_ERR_no_rules_phrase_,0,false,false){}
+Err_used_rule_but_undefined::
+Err_used_rule_but_undefined()
+ T_CTOR("rule used but undefined",T_Enum::T_Err_used_rule_but_undefined_,0,false,false){}
+Err_rule_already_defined::
+Err_rule_already_defined()
+ T_CTOR("rule already defined",T_Enum::T_Err_rule_already_defined_,0,false,false){}
+Err_la_expr_calc_empty_set::
+Err_la_expr_calc_empty_set()
+ T_CTOR("la expression calculates an empty set",T_Enum::T_Err_la_expr_calc_empty_set_,0,false,false){}
+Err_no_close_brace_ending_rules_defs::
+Err_no_close_brace_ending_rules_defs()
+ T_CTOR("no closing brace ending rules defs",T_Enum::T_Err_no_close_brace_ending_rules_defs_,0,false,false){}
+Err_use_of_T_outside_Rules_construct::
+Err_use_of_T_outside_Rules_construct()
+ T_CTOR("use of T outside Rules's construct",T_Enum::T_Err_use_of_T_outside_Rules_construct_,0,false,false){}
+Err_not_kw_defining_grammar_construct::
+Err_not_kw_defining_grammar_construct()
+ T_CTOR("not a kw to start the top/down parse construct",T_Enum::T_Err_not_kw_defining_grammar_construct_,0,false,false){}
+Err_use_of_N_outside_Rules_construct::
+Err_use_of_N_outside_Rules_construct()
+ T_CTOR("use of Non-terminal (rule) outside Rules's construct",T_Enum::T_Err_use_of_N_outside_Rules_construct_,0,false,false){}
+Err_misplaced_or_misspelt_Rule_or_T::
+Err_misplaced_or_misspelt_Rule_or_T()
+ T_CTOR("misplaced or misspelt Rule or T outside of Rules defs",T_Enum::T_Err_misplaced_or_misspelt_Rule_or_T_,0,false,false){}
+Err_not_a_Rule::
+Err_not_a_Rule()
+ T_CTOR("not a Rule in chained dispatcher expr",T_Enum::T_Err_not_a_Rule_,0,false,false){}
+Err_empty_file::
+Err_empty_file()
+ T_CTOR("Empty file no grammar constructs present",T_Enum::T_Err_empty_file_,0,false,false){}
+Err_not_lhs_pcnrl_mntr::
+Err_not_lhs_pcnrl_mntr()
+ T_CTOR("term not a lhs or parallel-control-monitor kw",T_Enum::T_Err_not_lhs_pcnrl_mntr_,0,false,false){}
diff --git a/web/yacco2/compiler/grammars/yacco2_err_symbols.h b/web/yacco2/compiler/grammars/yacco2_err_symbols.h
new file mode 100644
index 0000000000..5593ca7ecf
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_err_symbols.h
@@ -0,0 +1,679 @@
+/*
+ File: yacco2_err_symbols.h
+ Date and Time: Sun Apr 20 13:54:30 2014
+*/
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#ifndef __yacco2_err_symbols_h__
+#define __yacco2_err_symbols_h__ 1
+namespace NS_yacco2_err_symbols{
+ using namespace NS_yacco2_T_enum;
+ struct Err_nested_files_exceeded:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_nested_files_exceeded(yacco2::INT Nested_file_cnt,std::string& File_name);
+ yacco2::INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ yacco2::INT nested_cnt_;
+ std::string file_exceeded_;
+
+ };
+ struct Err_no_end_of_code:public yacco2::CAbs_lr1_sym{
+ Err_no_end_of_code();
+ };
+ struct Err_no_cmd_lne_data:public yacco2::CAbs_lr1_sym{
+ Err_no_cmd_lne_data();
+ };
+ struct Err_no_filename:public yacco2::CAbs_lr1_sym{
+ Err_no_filename();
+ };
+ struct Err_bad_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_fsmheader_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_fsmheader_filename(std::string& File_name);
+ Err_bad_fsmheader_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_fsmcpp_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_fsmcpp_filename(std::string& File_name);
+ Err_bad_fsmcpp_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_fsmsym_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_fsmsym_filename(std::string& File_name);
+ Err_bad_fsmsym_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_fsmtbl_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_fsmtbl_filename(std::string& File_name);
+ Err_bad_fsmtbl_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_enum_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_enum_filename(std::string& File_name);
+ Err_bad_enum_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_errors_hdrfilename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_errors_hdrfilename(std::string& File_name);
+ Err_bad_errors_hdrfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_errors_impfilename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_errors_impfilename(std::string& File_name);
+ Err_bad_errors_impfilename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_cmd_lne_opt:public yacco2::CAbs_lr1_sym{
+ Err_bad_cmd_lne_opt();
+ };
+ struct Err_bad_int_no:public yacco2::CAbs_lr1_sym{
+ Err_bad_int_no();
+ };
+ struct Err_bad_int_no_range:public yacco2::CAbs_lr1_sym{
+ Err_bad_int_no_range();
+ };
+ struct Err_no_int_present:public yacco2::CAbs_lr1_sym{
+ Err_no_int_present();
+ };
+ struct Err_bad_eos:public yacco2::CAbs_lr1_sym{
+ Err_bad_eos();
+ };
+ struct Err_bad_esc:public yacco2::CAbs_lr1_sym{
+ Err_bad_esc();
+ };
+ struct Err_comment_overrun:public yacco2::CAbs_lr1_sym{
+ Err_comment_overrun();
+ };
+ struct Err_bad_char:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_char(CAbs_lr1_sym* Err_char);
+ yacco2::CAbs_lr1_sym* bad_char()const;
+ void zero_out_bad_char();
+ private:
+ yacco2::CAbs_lr1_sym* bad_char_;
+
+ static void dtor_Err_bad_char(yacco2::VOIDP This,yacco2::VOIDP P);
+
+ };
+ struct Err_bad_univ_seq:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_univ_seq(unsigned long Value);
+ unsigned long bad_univ_seq()const;
+ private:unsigned long bad_univ_seq_;
+
+ };
+ struct Err_improper_closing_of_rules:public yacco2::CAbs_lr1_sym{
+ Err_improper_closing_of_rules();
+ };
+ struct Err_no_identifier_present:public yacco2::CAbs_lr1_sym{
+ Err_no_identifier_present();
+ };
+ struct Err_no_directive_present:public yacco2::CAbs_lr1_sym{
+ Err_no_directive_present();
+ };
+ struct Err_duplicate_directive:public yacco2::CAbs_lr1_sym{
+ Err_duplicate_directive();
+ };
+ struct Err_no_syntax_code_present:public yacco2::CAbs_lr1_sym{
+ Err_no_syntax_code_present();
+ };
+ struct Err_no_open_parenthesis:public yacco2::CAbs_lr1_sym{
+ Err_no_open_parenthesis();
+ };
+ struct Err_no_close_parenthesis:public yacco2::CAbs_lr1_sym{
+ Err_no_close_parenthesis();
+ };
+ struct Err_no_fsm_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_id_present();
+ };
+ struct Err_no_fsm_id_string:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_id_string();
+ };
+ struct Err_no_fsm_filename_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_filename_present();
+ };
+ struct Err_no_fsm_filename_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_filename_id_present();
+ };
+ struct Err_no_comma_present:public yacco2::CAbs_lr1_sym{
+ Err_no_comma_present();
+ };
+ struct Err_no_fsm_namespace_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_namespace_present();
+ };
+ struct Err_no_fsm_namespace_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_namespace_id_present();
+ };
+ struct Err_no_fsm_class_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_class_present();
+ };
+ struct Err_no_fsm_version_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_version_present();
+ };
+ struct Err_no_fsm_version_string:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_version_string();
+ };
+ struct Err_no_fsm_date_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_date_present();
+ };
+ struct Err_no_fsm_date_string:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_date_string();
+ };
+ struct Err_no_fsm_debug_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_debug_present();
+ };
+ struct Err_no_fsm_debug_string:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_debug_string();
+ };
+ struct Err_no_fsm_comments_present:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_comments_present();
+ };
+ struct Err_no_fsm_comments_string:public yacco2::CAbs_lr1_sym{
+ Err_no_fsm_comments_string();
+ };
+ struct Err_fsm_debug_string_not_true_or_false:public yacco2::CAbs_lr1_sym{
+ Err_fsm_debug_string_not_true_or_false();
+ };
+ struct Err_no_pp_thread_function_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_thread_function_present();
+ };
+ struct Err_no_pp_ctrl_mntor_kw_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_ctrl_mntor_kw_present();
+ };
+ struct Err_no_pp_fnct_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_fnct_id_present();
+ };
+ struct Err_no_pp_bndry_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_bndry_present();
+ };
+ struct Err_no_pp_la_bndary_expr_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_la_bndary_expr_present();
+ };
+ struct Err_no_syntax_code_end_present:public yacco2::CAbs_lr1_sym{
+ Err_no_syntax_code_end_present();
+ };
+ struct Err_no_pp_code_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_code_present();
+ };
+ struct Err_no_pp_code_stc_present:public yacco2::CAbs_lr1_sym{
+ Err_no_pp_code_stc_present();
+ };
+ struct Err_not_arbitration_code_kw:public yacco2::CAbs_lr1_sym{
+ Err_not_arbitration_code_kw();
+ };
+ struct Err_no_open_brace:public yacco2::CAbs_lr1_sym{
+ Err_no_open_brace();
+ };
+ struct Err_no_close_brace:public yacco2::CAbs_lr1_sym{
+ Err_no_close_brace();
+ };
+ struct Err_no_constant_defs_present:public yacco2::CAbs_lr1_sym{
+ Err_no_constant_defs_present();
+ };
+ struct Err_no_filename_present:public yacco2::CAbs_lr1_sym{
+ Err_no_filename_present();
+ };
+ struct Err_no_filename_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_filename_id_present();
+ };
+ struct Err_no_namespace_present:public yacco2::CAbs_lr1_sym{
+ Err_no_namespace_present();
+ };
+ struct Err_no_namespace_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_namespace_id_present();
+ };
+ struct Err_no_kdefs_code_present:public yacco2::CAbs_lr1_sym{
+ Err_no_kdefs_code_present();
+ };
+ struct Err_no_kdefs_kw_present:public yacco2::CAbs_lr1_sym{
+ Err_no_kdefs_kw_present();
+ };
+ struct Err_no_tdef_code_present:public yacco2::CAbs_lr1_sym{
+ Err_no_tdef_code_present();
+ };
+ struct Err_no_sym_defs_present:public yacco2::CAbs_lr1_sym{
+ Err_no_sym_defs_present();
+ };
+ struct Err_no_terminal_key_present:public yacco2::CAbs_lr1_sym{
+ Err_no_terminal_key_present();
+ };
+ struct Err_dup_entry_in_alphabet:public yacco2::CAbs_lr1_sym{
+ Err_dup_entry_in_alphabet();
+ };
+ struct Err_already_defined_AB:public yacco2::CAbs_lr1_sym{
+ Err_already_defined_AB();
+ };
+ struct Err_already_defined_AD:public yacco2::CAbs_lr1_sym{
+ Err_already_defined_AD();
+ };
+ struct Err_improper_directive:public yacco2::CAbs_lr1_sym{
+ Err_improper_directive();
+ };
+ struct Err_no_sym_class_present:public yacco2::CAbs_lr1_sym{
+ Err_no_sym_class_present();
+ };
+ struct Err_no_sym_class_id_present:public yacco2::CAbs_lr1_sym{
+ Err_no_sym_class_id_present();
+ };
+ struct Err_zero_len_sym:public yacco2::CAbs_lr1_sym{
+ Err_zero_len_sym();
+ };
+ struct Err_sym_tbl_full:public yacco2::CAbs_lr1_sym{
+ Err_sym_tbl_full();
+ };
+ struct Err_sym_tbl_char_pool_full:public yacco2::CAbs_lr1_sym{
+ Err_sym_tbl_char_pool_full();
+ };
+ struct Err_dup_entry_in_sym_table:public yacco2::CAbs_lr1_sym{
+ Err_dup_entry_in_sym_table();
+ };
+ struct Err_subscript_out_of_range:public yacco2::CAbs_lr1_sym{
+ Err_subscript_out_of_range();
+ };
+ struct Err_sym_tbl_nested_scope_stk_overflow:public yacco2::CAbs_lr1_sym{
+ Err_sym_tbl_nested_scope_stk_overflow();
+ };
+ struct Err_sym_tbl_nested_scope_stk_underflow:public yacco2::CAbs_lr1_sym{
+ Err_sym_tbl_nested_scope_stk_underflow();
+ };
+ struct Err_sym_tbl_context_buf_overflow:public yacco2::CAbs_lr1_sym{
+ Err_sym_tbl_context_buf_overflow();
+ };
+ struct Err_report_card_ptr_0:public yacco2::CAbs_lr1_sym{
+ Err_report_card_ptr_0();
+ };
+ struct Err_cannot_define_term_after_sufx_dir:public yacco2::CAbs_lr1_sym{
+ Err_cannot_define_term_after_sufx_dir();
+ };
+ struct Err_dup_sufx_directive:public yacco2::CAbs_lr1_sym{
+ Err_dup_sufx_directive();
+ };
+ struct Err_terminals_refs_def_after_terminals:public yacco2::CAbs_lr1_sym{
+ Err_terminals_refs_def_after_terminals();
+ };
+ struct Err_terminals_refs_dup_def:public yacco2::CAbs_lr1_sym{
+ Err_terminals_refs_dup_def();
+ };
+ struct Err_no_rule_name_present:public yacco2::CAbs_lr1_sym{
+ Err_no_rule_name_present();
+ };
+ struct Err_no_sub_rule_present:public yacco2::CAbs_lr1_sym{
+ Err_no_sub_rule_present();
+ };
+ struct Err_subrule_use_undefined_T:public yacco2::CAbs_lr1_sym{
+ Err_subrule_use_undefined_T();
+ };
+ struct Err_stbl_entry_unknown:public yacco2::CAbs_lr1_sym{
+ Err_stbl_entry_unknown();
+ };
+ struct Err_subrule_overrun:public yacco2::CAbs_lr1_sym{
+ Err_subrule_overrun();
+ };
+ struct Err_stble_has_entry_but_not_a_rule:public yacco2::CAbs_lr1_sym{
+ Err_stble_has_entry_but_not_a_rule();
+ };
+ struct Err_file_of_T_alphabet_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_file_of_T_alphabet_kw_not_present();
+ };
+ struct Err_emitfile_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_emitfile_kw_not_present();
+ };
+ struct Err_preamble_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_preamble_kw_not_present();
+ };
+ struct Err_preamble_srce_code_not_present:public yacco2::CAbs_lr1_sym{
+ Err_preamble_srce_code_not_present();
+ };
+ struct Err_end_preamble_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_end_preamble_kw_not_present();
+ };
+ struct Err_cmd_line_chaffe:public yacco2::CAbs_lr1_sym{
+ Err_cmd_line_chaffe();
+ };
+ struct Err_T_alphabet_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_T_alphabet_kw_not_present();
+ };
+ struct Err_T_alphabet_file_not_present:public yacco2::CAbs_lr1_sym{
+ Err_T_alphabet_file_not_present();
+ };
+ struct Err_end_T_alphabet_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_end_T_alphabet_kw_not_present();
+ };
+ struct Err_no_terminals_in_T_alphabet_list:public yacco2::CAbs_lr1_sym{
+ Err_no_terminals_in_T_alphabet_list();
+ };
+ struct Err_rotten_chr_in_T_alphabet:public yacco2::CAbs_lr1_sym{
+ Err_rotten_chr_in_T_alphabet();
+ };
+ struct Err_transitive_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_transitive_kw_not_present();
+ };
+ struct Err_grammar_name_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_grammar_name_kw_not_present();
+ };
+ struct Err_namespace_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_namespace_kw_not_present();
+ };
+ struct Err_filename_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_filename_kw_not_present();
+ };
+ struct Err_threadname_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_threadname_kw_not_present();
+ };
+ struct Err_monolithic_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_monolithic_kw_not_present();
+ };
+ struct Err_no_of_T_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_no_of_T_kw_not_present();
+ };
+ struct Err_list_of_terminals_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_list_of_terminals_kw_not_present();
+ };
+ struct Err_no_list_of_trans_threads_kw:public yacco2::CAbs_lr1_sym{
+ Err_no_list_of_trans_threads_kw();
+ };
+ struct Err_no_terminals_present_in_T_alphabet:public yacco2::CAbs_lr1_sym{
+ Err_no_terminals_present_in_T_alphabet();
+ };
+ struct Err_transitive_value_bad:public yacco2::CAbs_lr1_sym{
+ Err_transitive_value_bad();
+ };
+ struct Err_monolithic_value_bad:public yacco2::CAbs_lr1_sym{
+ Err_monolithic_value_bad();
+ };
+ struct Err_grammar_name_value_not_present:public yacco2::CAbs_lr1_sym{
+ Err_grammar_name_value_not_present();
+ };
+ struct Err_namespace_value_not_present:public yacco2::CAbs_lr1_sym{
+ Err_namespace_value_not_present();
+ };
+ struct Err_threadname_value_not_present:public yacco2::CAbs_lr1_sym{
+ Err_threadname_value_not_present();
+ };
+ struct Err_filename_value_not_present:public yacco2::CAbs_lr1_sym{
+ Err_filename_value_not_present();
+ };
+ struct Err_no_of_T_value_not_present:public yacco2::CAbs_lr1_sym{
+ Err_no_of_T_value_not_present();
+ };
+ struct Err_no_of_terminals_not_present:public yacco2::CAbs_lr1_sym{
+ Err_no_of_terminals_not_present();
+ };
+ struct Err_end_list_native_T_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_end_list_native_T_kw_not_present();
+ };
+ struct Err_end_list_of_transitive_threads_kw_not_present:public yacco2::CAbs_lr1_sym{
+ Err_end_list_of_transitive_threads_kw_not_present();
+ };
+ struct Err_no_of_native_Ts_in_list_not_equal:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_no_of_native_Ts_in_list_not_equal(unsigned long Value);
+ unsigned long no()const;
+ private:unsigned long no_;
+
+ };
+ struct Err_no_of_threads_in_list_not_equal:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_no_of_threads_in_list_not_equal(unsigned long No);
+ unsigned long no()const;
+ private:unsigned long no_;
+
+ };
+ struct Err_thread_refed_but_not_defined:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_thread_refed_but_not_defined(CAbs_lr1_sym* Th_id);
+ CAbs_lr1_sym* th_id();
+ private:CAbs_lr1_sym* th_id_;
+
+ };
+ struct Err_bad_T_in_list:public yacco2::CAbs_lr1_sym{
+ Err_bad_T_in_list();
+ };
+ struct Err_bad_th_in_list:public yacco2::CAbs_lr1_sym{
+ Err_bad_th_in_list();
+ };
+ struct Err_already_defined_in_fsc_file:public yacco2::CAbs_lr1_sym{
+ Err_already_defined_in_fsc_file();
+ };
+ struct Err_bad_thread_subscript:public yacco2::CAbs_lr1_sym{
+ Err_bad_thread_subscript();
+ };
+ struct Err_not_a_keyword:public yacco2::CAbs_lr1_sym{
+ Err_not_a_keyword();
+ };
+ struct Err_no_of_threads_not_present:public yacco2::CAbs_lr1_sym{
+ Err_no_of_threads_not_present();
+ };
+ struct Err_bad_T_alphabet:public yacco2::CAbs_lr1_sym{
+ Err_bad_T_alphabet();
+ };
+ struct Err_fsc_file_does_not_exist:public yacco2::CAbs_lr1_sym{
+ Err_fsc_file_does_not_exist();
+ };
+ struct Err_filename_file_does_not_exist:public yacco2::CAbs_lr1_sym{
+ Err_filename_file_does_not_exist();
+ };
+ struct Err_T_alphabet_file_does_not_exist:public yacco2::CAbs_lr1_sym{
+ Err_T_alphabet_file_does_not_exist();
+ };
+ struct Err_emitfile_file_does_not_exist:public yacco2::CAbs_lr1_sym{
+ Err_emitfile_file_does_not_exist();
+ };
+ struct Err_emitfile_file_not_present:public yacco2::CAbs_lr1_sym{
+ Err_emitfile_file_not_present();
+ };
+ struct Err_fsc_cntl_file_not_present:public yacco2::CAbs_lr1_sym{
+ Err_fsc_cntl_file_not_present();
+ };
+ struct Err_file_of_T_alphabet_not_present:public yacco2::CAbs_lr1_sym{
+ Err_file_of_T_alphabet_not_present();
+ };
+ struct Err_epsilon_pass_thru:public yacco2::CAbs_lr1_sym{
+ Err_epsilon_pass_thru();
+ };
+ struct Err_epsilon_pass_thru_no_Ts:public yacco2::CAbs_lr1_sym{
+ Err_epsilon_pass_thru_no_Ts();
+ };
+ struct Err_rule_not_in_stbl:public yacco2::CAbs_lr1_sym{
+ Err_rule_not_in_stbl();
+ };
+ struct Err_T_not_in_stbl:public yacco2::CAbs_lr1_sym{
+ Err_T_not_in_stbl();
+ };
+ struct Err_bad_directive:public yacco2::CAbs_lr1_sym{
+ Err_bad_directive();
+ };
+ struct Err_bad_term_in_la_expr:public yacco2::CAbs_lr1_sym{
+ Err_bad_term_in_la_expr();
+ };
+ struct Err_empty_set_removal_in_la_expr:public yacco2::CAbs_lr1_sym{
+ Err_empty_set_removal_in_la_expr();
+ };
+ struct Err_bad_operator_in_la_expr:public yacco2::CAbs_lr1_sym{
+ Err_bad_operator_in_la_expr();
+ };
+ struct Err_not_a_lhs_kw:public yacco2::CAbs_lr1_sym{
+ Err_not_a_lhs_kw();
+ };
+ struct Err_pp_la_boundary_attribute_not_fnd:public yacco2::CAbs_lr1_sym{
+ Err_pp_la_boundary_attribute_not_fnd();
+ };
+ struct Err_already_processed_fsm_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_fsm_phase();
+ };
+ struct Err_already_processed_pp_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_pp_phase();
+ };
+ struct Err_already_processed_T_enum_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_T_enum_phase();
+ };
+ struct Err_already_processed_error_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_error_phase();
+ };
+ struct Err_already_processed_rc_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_rc_phase();
+ };
+ struct Err_already_processed_lrk_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_lrk_phase();
+ };
+ struct Err_already_processed_T_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_T_phase();
+ };
+ struct Err_already_processed_rule_phase:public yacco2::CAbs_lr1_sym{
+ Err_already_processed_rule_phase();
+ };
+ struct Err_not_T_for_rtned_token_from_th:public yacco2::CAbs_lr1_sym{
+ Err_not_T_for_rtned_token_from_th();
+ };
+ struct Err_not_id_for_ns_in_th_stmt:public yacco2::CAbs_lr1_sym{
+ Err_not_id_for_ns_in_th_stmt();
+ };
+ struct Err_not_id_for_th_name_in_th_stmt:public yacco2::CAbs_lr1_sym{
+ Err_not_id_for_th_name_in_th_stmt();
+ };
+ struct Err_bad_th_qualifier:public yacco2::CAbs_lr1_sym{
+ Err_bad_th_qualifier();
+ };
+ struct Err_not_dbl_colon_in_th_stmt:public yacco2::CAbs_lr1_sym{
+ Err_not_dbl_colon_in_th_stmt();
+ };
+ struct Err_not_T_or_R_in_subrule_expr:public yacco2::CAbs_lr1_sym{
+ Err_not_T_or_R_in_subrule_expr();
+ };
+ struct Err_not_T_or_R_or_eos_in_subrule_expr:public yacco2::CAbs_lr1_sym{
+ Err_not_T_or_R_or_eos_in_subrule_expr();
+ };
+ struct Err_not_eos_in_subrule_expr:public yacco2::CAbs_lr1_sym{
+ Err_not_eos_in_subrule_expr();
+ };
+ struct Err_invalid_logical_name:public yacco2::CAbs_lr1_sym{
+ Err_invalid_logical_name();
+ };
+ struct Err_invalid_logical_value:public yacco2::CAbs_lr1_sym{
+ Err_invalid_logical_value();
+ };
+ struct Err_duplicate_logical_name:public yacco2::CAbs_lr1_sym{
+ Err_duplicate_logical_name();
+ };
+ struct Err_missing_terminals_refs_kw:public yacco2::CAbs_lr1_sym{
+ Err_missing_terminals_refs_kw();
+ };
+ struct Err_missing_terminals_sufx_kw:public yacco2::CAbs_lr1_sym{
+ Err_missing_terminals_sufx_kw();
+ };
+ struct Err_not_a_terminal_definition:public yacco2::CAbs_lr1_sym{
+ Err_not_a_terminal_definition();
+ };
+ struct Err_missing_lrk_sufx_kw:public yacco2::CAbs_lr1_sym{
+ Err_missing_lrk_sufx_kw();
+ };
+ struct ERR_sick_grammar:public yacco2::CAbs_lr1_sym{
+ ERR_sick_grammar();
+ };
+ struct ERR_no_fsm_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_fsm_phrase();
+ };
+ struct ERR_no_T_enum_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_T_enum_phrase();
+ };
+ struct ERR_no_lrk_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_lrk_phrase();
+ };
+ struct ERR_no_rc_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_rc_phrase();
+ };
+ struct ERR_no_errors_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_errors_phrase();
+ };
+ struct ERR_no_terminals_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_terminals_phrase();
+ };
+ struct ERR_no_rules_phrase:public yacco2::CAbs_lr1_sym{
+ ERR_no_rules_phrase();
+ };
+ struct Err_used_rule_but_undefined:public yacco2::CAbs_lr1_sym{
+ Err_used_rule_but_undefined();
+ };
+ struct Err_rule_already_defined:public yacco2::CAbs_lr1_sym{
+ Err_rule_already_defined();
+ };
+ struct Err_la_expr_calc_empty_set:public yacco2::CAbs_lr1_sym{
+ Err_la_expr_calc_empty_set();
+ };
+ struct Err_no_close_brace_ending_rules_defs:public yacco2::CAbs_lr1_sym{
+ Err_no_close_brace_ending_rules_defs();
+ };
+ struct Err_use_of_T_outside_Rules_construct:public yacco2::CAbs_lr1_sym{
+ Err_use_of_T_outside_Rules_construct();
+ };
+ struct Err_not_kw_defining_grammar_construct:public yacco2::CAbs_lr1_sym{
+ Err_not_kw_defining_grammar_construct();
+ };
+ struct Err_use_of_N_outside_Rules_construct:public yacco2::CAbs_lr1_sym{
+ Err_use_of_N_outside_Rules_construct();
+ };
+ struct Err_misplaced_or_misspelt_Rule_or_T:public yacco2::CAbs_lr1_sym{
+ Err_misplaced_or_misspelt_Rule_or_T();
+ };
+ struct Err_not_a_Rule:public yacco2::CAbs_lr1_sym{
+ Err_not_a_Rule();
+ };
+ struct Err_empty_file:public yacco2::CAbs_lr1_sym{
+ Err_empty_file();
+ };
+ struct Err_not_lhs_pcnrl_mntr:public yacco2::CAbs_lr1_sym{
+ Err_not_lhs_pcnrl_mntr();
+ };
+}//namespace
+#endif
diff --git a/web/yacco2/compiler/grammars/yacco2_fsc.cpp b/web/yacco2/compiler/grammars/yacco2_fsc.cpp
new file mode 100644
index 0000000000..9e226cc37c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_fsc.cpp
@@ -0,0 +1,9776 @@
+//
+// File: /usr/local/yacco2/compiler/grammars/yacco2_fsc.cpp
+// Generated by linker.exe
+// Date and Time: Mon Oct 27 12:07:42 2014
+//
+
+// Preamble code
+
+
+#include "yacco2.h"
+
+#include "yacco2_T_enumeration.h"
+
+#include "yacco2_k_symbols.h"
+
+#include "yacco2_terminals.h"
+
+#include "yacco2_characters.h"
+
+using namespace NS_yacco2_T_enum;
+
+using namespace NS_yacco2_err_symbols;
+
+using namespace NS_yacco2_k_symbols;
+
+using namespace NS_yacco2_terminals;
+
+using namespace NS_yacco2_characters;
+
+
+// thread include and namespace
+#include "angled_string.h"
+#include "bad_char_set.h"
+#include "cweb_or_c_k.h"
+#include "c_comments.h"
+#include "c_literal.h"
+#include "c_string.h"
+#include "dbl_colon.h"
+#include "eol.h"
+#include "err_symbols_ph_th.h"
+#include "esc_seq.h"
+#include "fsm_class_phrase_th.h"
+#include "fsm_phrase_th.h"
+#include "identifier.h"
+#include "int_no.h"
+#include "la_expr_src.h"
+#include "la_lrk_T.h"
+#include "linker_id.h"
+#include "linker_preamble_code.h"
+#include "lint_balls.h"
+#include "lr1_k_phrase_th.h"
+#include "o2_code_end.h"
+#include "o2_lcl_opt.h"
+#include "o2_sdc.h"
+#include "parallel_monitor_ph.h"
+#include "parallel_oper.h"
+#include "parallel_parser_ph_th.h"
+#include "prefile_include.h"
+#include "rc_phrase_th.h"
+#include "rhs_bnd.h"
+#include "rhs_component.h"
+#include "rtn_component.h"
+#include "rules_phrase_th.h"
+#include "rule_def_phrase.h"
+#include "rule_lhs_phrase.h"
+#include "subrules_phrase.h"
+#include "subrule_def.h"
+#include "subrule_vector.h"
+#include "terminals_phrase_th.h"
+#include "terminal_def_symclass.h"
+#include "term_def_ph.h"
+#include "t_def_delabort_tags.h"
+#include "T_enum_phrase_th.h"
+#include "unq_str.h"
+#include "ws.h"
+#include "xc_str.h"
+// BIT MAPS
+#define TOTAL_NO_BIT_WORDS 2*1024*50
+int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);
+yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];
+void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;
+int yacco2::BIT_MAP_IDX__(0);
+// THREAD STABLE
+yacco2::Thread_entry ITH_angled_string = {"TH_angled_string",NS_angled_string::TH_angled_string,0,NS_angled_string::PROC_TH_angled_string};
+yacco2::Thread_entry ITH_bad_char_set = {"TH_bad_char_set",NS_bad_char_set::TH_bad_char_set,1,NS_bad_char_set::PROC_TH_bad_char_set};
+yacco2::Thread_entry ITH_cweb_or_c_k = {"TH_cweb_or_c_k",NS_cweb_or_c_k::TH_cweb_or_c_k,2,NS_cweb_or_c_k::PROC_TH_cweb_or_c_k};
+yacco2::Thread_entry ITH_c_comments = {"TH_c_comments",NS_c_comments::TH_c_comments,3,NS_c_comments::PROC_TH_c_comments};
+yacco2::Thread_entry ITH_c_literal = {"TH_c_literal",NS_c_literal::TH_c_literal,4,NS_c_literal::PROC_TH_c_literal};
+yacco2::Thread_entry ITH_c_string = {"TH_c_string",NS_c_string::TH_c_string,5,NS_c_string::PROC_TH_c_string};
+yacco2::Thread_entry ITH_dbl_colon = {"TH_dbl_colon",NS_dbl_colon::TH_dbl_colon,6,NS_dbl_colon::PROC_TH_dbl_colon};
+yacco2::Thread_entry ITH_eol = {"TH_eol",NS_eol::TH_eol,7,NS_eol::PROC_TH_eol};
+yacco2::Thread_entry ITH_err_symbols_ph_th = {"TH_err_symbols_ph_th",NS_err_symbols_ph_th::TH_err_symbols_ph_th,8,NS_err_symbols_ph_th::PROC_TH_err_symbols_ph_th};
+yacco2::Thread_entry ITH_esc_seq = {"TH_esc_seq",NS_esc_seq::TH_esc_seq,9,NS_esc_seq::PROC_TH_esc_seq};
+yacco2::Thread_entry ITH_fsm_class_phrase_th = {"TH_fsm_class_phrase_th",NS_fsm_class_phrase_th::TH_fsm_class_phrase_th,10,NS_fsm_class_phrase_th::PROC_TH_fsm_class_phrase_th};
+yacco2::Thread_entry ITH_fsm_phrase_th = {"TH_fsm_phrase_th",NS_fsm_phrase_th::TH_fsm_phrase_th,11,NS_fsm_phrase_th::PROC_TH_fsm_phrase_th};
+yacco2::Thread_entry ITH_identifier = {"TH_identifier",NS_identifier::TH_identifier,12,NS_identifier::PROC_TH_identifier};
+yacco2::Thread_entry ITH_int_no = {"TH_int_no",NS_int_no::TH_int_no,13,NS_int_no::PROC_TH_int_no};
+yacco2::Thread_entry ITH_la_expr_src = {"TH_la_expr_src",NS_la_expr_src::TH_la_expr_src,14,NS_la_expr_src::PROC_TH_la_expr_src};
+yacco2::Thread_entry ITH_la_lrk_T = {"TH_la_lrk_T",NS_la_lrk_T::TH_la_lrk_T,15,NS_la_lrk_T::PROC_TH_la_lrk_T};
+yacco2::Thread_entry ITH_linker_id = {"TH_linker_id",NS_linker_id::TH_linker_id,16,NS_linker_id::PROC_TH_linker_id};
+yacco2::Thread_entry ITH_linker_preamble_code = {"TH_linker_preamble_code",NS_linker_preamble_code::TH_linker_preamble_code,17,NS_linker_preamble_code::PROC_TH_linker_preamble_code};
+yacco2::Thread_entry ITH_lint_balls = {"TH_lint_balls",NS_lint_balls::TH_lint_balls,18,NS_lint_balls::PROC_TH_lint_balls};
+yacco2::Thread_entry ITH_lr1_k_phrase_th = {"TH_lr1_k_phrase_th",NS_lr1_k_phrase_th::TH_lr1_k_phrase_th,19,NS_lr1_k_phrase_th::PROC_TH_lr1_k_phrase_th};
+yacco2::Thread_entry ITH_o2_code_end = {"TH_o2_code_end",NS_o2_code_end::TH_o2_code_end,20,NS_o2_code_end::PROC_TH_o2_code_end};
+yacco2::Thread_entry ITH_o2_lcl_opt = {"TH_o2_lcl_opt",NS_o2_lcl_opt::TH_o2_lcl_opt,21,NS_o2_lcl_opt::PROC_TH_o2_lcl_opt};
+yacco2::Thread_entry ITH_o2_sdc = {"TH_o2_sdc",NS_o2_sdc::TH_o2_sdc,22,NS_o2_sdc::PROC_TH_o2_sdc};
+yacco2::Thread_entry ITH_parallel_monitor_ph = {"TH_parallel_monitor_ph",NS_parallel_monitor_ph::TH_parallel_monitor_ph,23,NS_parallel_monitor_ph::PROC_TH_parallel_monitor_ph};
+yacco2::Thread_entry ITH_parallel_oper = {"TH_parallel_oper",NS_parallel_oper::TH_parallel_oper,24,NS_parallel_oper::PROC_TH_parallel_oper};
+yacco2::Thread_entry ITH_parallel_parser_ph_th = {"TH_parallel_parser_ph_th",NS_parallel_parser_ph_th::TH_parallel_parser_ph_th,25,NS_parallel_parser_ph_th::PROC_TH_parallel_parser_ph_th};
+yacco2::Thread_entry ITH_prefile_include = {"TH_prefile_include",NS_prefile_include::TH_prefile_include,26,NS_prefile_include::PROC_TH_prefile_include};
+yacco2::Thread_entry ITH_rc_phrase_th = {"TH_rc_phrase_th",NS_rc_phrase_th::TH_rc_phrase_th,27,NS_rc_phrase_th::PROC_TH_rc_phrase_th};
+yacco2::Thread_entry ITH_rhs_bnd = {"TH_rhs_bnd",NS_rhs_bnd::TH_rhs_bnd,28,NS_rhs_bnd::PROC_TH_rhs_bnd};
+yacco2::Thread_entry ITH_rhs_component = {"TH_rhs_component",NS_rhs_component::TH_rhs_component,29,NS_rhs_component::PROC_TH_rhs_component};
+yacco2::Thread_entry ITH_rtn_component = {"TH_rtn_component",NS_rtn_component::TH_rtn_component,30,NS_rtn_component::PROC_TH_rtn_component};
+yacco2::Thread_entry ITH_rules_phrase_th = {"TH_rules_phrase_th",NS_rules_phrase_th::TH_rules_phrase_th,31,NS_rules_phrase_th::PROC_TH_rules_phrase_th};
+yacco2::Thread_entry ITH_rule_def_phrase = {"TH_rule_def_phrase",NS_rule_def_phrase::TH_rule_def_phrase,32,NS_rule_def_phrase::PROC_TH_rule_def_phrase};
+yacco2::Thread_entry ITH_rule_lhs_phrase = {"TH_rule_lhs_phrase",NS_rule_lhs_phrase::TH_rule_lhs_phrase,33,NS_rule_lhs_phrase::PROC_TH_rule_lhs_phrase};
+yacco2::Thread_entry ITH_subrules_phrase = {"TH_subrules_phrase",NS_subrules_phrase::TH_subrules_phrase,34,NS_subrules_phrase::PROC_TH_subrules_phrase};
+yacco2::Thread_entry ITH_subrule_def = {"TH_subrule_def",NS_subrule_def::TH_subrule_def,35,NS_subrule_def::PROC_TH_subrule_def};
+yacco2::Thread_entry ITH_subrule_vector = {"TH_subrule_vector",NS_subrule_vector::TH_subrule_vector,36,NS_subrule_vector::PROC_TH_subrule_vector};
+yacco2::Thread_entry ITH_terminals_phrase_th = {"TH_terminals_phrase_th",NS_terminals_phrase_th::TH_terminals_phrase_th,37,NS_terminals_phrase_th::PROC_TH_terminals_phrase_th};
+yacco2::Thread_entry ITH_terminal_def_symclass = {"TH_terminal_def_symclass",NS_terminal_def_symclass::TH_terminal_def_symclass,38,NS_terminal_def_symclass::PROC_TH_terminal_def_symclass};
+yacco2::Thread_entry ITH_term_def_ph = {"TH_term_def_ph",NS_term_def_ph::TH_term_def_ph,39,NS_term_def_ph::PROC_TH_term_def_ph};
+yacco2::Thread_entry ITH_t_def_delabort_tags = {"TH_t_def_delabort_tags",NS_t_def_delabort_tags::TH_t_def_delabort_tags,40,NS_t_def_delabort_tags::PROC_TH_t_def_delabort_tags};
+yacco2::Thread_entry ITH_T_enum_phrase_th = {"TH_T_enum_phrase_th",NS_T_enum_phrase_th::TH_T_enum_phrase_th,41,NS_T_enum_phrase_th::PROC_TH_T_enum_phrase_th};
+yacco2::Thread_entry ITH_unq_str = {"TH_unq_str",NS_unq_str::TH_unq_str,42,NS_unq_str::PROC_TH_unq_str};
+yacco2::Thread_entry ITH_ws = {"TH_ws",NS_ws::TH_ws,43,NS_ws::PROC_TH_ws};
+yacco2::Thread_entry ITH_xc_str = {"TH_xc_str",NS_xc_str::TH_xc_str,44,NS_xc_str::PROC_TH_xc_str};
+struct thd_array_type {
+ yacco2::USINT no_entries__;
+ yacco2::Thread_entry* first_entry__[45];};
+thd_array_type thd_array = {
+ 45
+ ,
+ {
+
+ &ITH_angled_string
+ ,&ITH_bad_char_set
+ ,&ITH_cweb_or_c_k
+ ,&ITH_c_comments
+ ,&ITH_c_literal
+ ,&ITH_c_string
+ ,&ITH_dbl_colon
+ ,&ITH_eol
+ ,&ITH_err_symbols_ph_th
+ ,&ITH_esc_seq
+ ,&ITH_fsm_class_phrase_th
+ ,&ITH_fsm_phrase_th
+ ,&ITH_identifier
+ ,&ITH_int_no
+ ,&ITH_la_expr_src
+ ,&ITH_la_lrk_T
+ ,&ITH_linker_id
+ ,&ITH_linker_preamble_code
+ ,&ITH_lint_balls
+ ,&ITH_lr1_k_phrase_th
+ ,&ITH_o2_code_end
+ ,&ITH_o2_lcl_opt
+ ,&ITH_o2_sdc
+ ,&ITH_parallel_monitor_ph
+ ,&ITH_parallel_oper
+ ,&ITH_parallel_parser_ph_th
+ ,&ITH_prefile_include
+ ,&ITH_rc_phrase_th
+ ,&ITH_rhs_bnd
+ ,&ITH_rhs_component
+ ,&ITH_rtn_component
+ ,&ITH_rules_phrase_th
+ ,&ITH_rule_def_phrase
+ ,&ITH_rule_lhs_phrase
+ ,&ITH_subrules_phrase
+ ,&ITH_subrule_def
+ ,&ITH_subrule_vector
+ ,&ITH_terminals_phrase_th
+ ,&ITH_terminal_def_symclass
+ ,&ITH_term_def_ph
+ ,&ITH_t_def_delabort_tags
+ ,&ITH_T_enum_phrase_th
+ ,&ITH_unq_str
+ ,&ITH_ws
+ ,&ITH_xc_str
+ }
+};
+void* yacco2::THDS_STABLE__ = (void*)&thd_array;
+// Terminal thread sets
+struct T_0_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_0_type T_0 = {// for T: LR1_questionable_shift_operator
+//8: TH_err_symbols_ph_th
+//10: TH_fsm_class_phrase_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//32: TH_rule_def_phrase
+//34: TH_subrules_phrase
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+ {3930737920
+ ,1573
+ }
+};
+struct T_1_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_1_type T_1 = {// for T: LR1_eog
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//28: TH_rhs_bnd
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1883389952
+ ,1024
+ }
+};
+struct T_6_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_6_type T_6 = {// for T: LR1_all_shift_operator
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_7_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_7_type T_7 = {// for T: LR1_fset_transience_operator
+//14: TH_la_expr_src
+ {16384
+ ,0
+ }
+};
+struct T_8_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_8_type T_8 = {// for T: raw_nul
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_9_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_9_type T_9 = {// for T: raw_soh
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_10_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_10_type T_10 = {// for T: raw_stx
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_11_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_11_type T_11 = {// for T: raw_etx
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_12_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_12_type T_12 = {// for T: raw_eot
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_13_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_13_type T_13 = {// for T: raw_enq
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_14_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_14_type T_14 = {// for T: raw_ack
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_15_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_15_type T_15 = {// for T: raw_bel
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_16_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_16_type T_16 = {// for T: raw_bs
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_17_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_17_type T_17 = {// for T: raw_ht
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+//43: TH_ws
+ {3930999040
+ ,3616
+ }
+};
+struct T_18_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_18_type T_18 = {// for T: raw_lf
+//7: TH_eol
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+ {3930999168
+ ,1568
+ }
+};
+struct T_19_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_19_type T_19 = {// for T: raw_vt
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+//43: TH_ws
+ {3930999040
+ ,3616
+ }
+};
+struct T_20_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_20_type T_20 = {// for T: raw_ff
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+//43: TH_ws
+ {3930999040
+ ,3616
+ }
+};
+struct T_21_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_21_type T_21 = {// for T: raw_cr
+//7: TH_eol
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+ {3930999168
+ ,1568
+ }
+};
+struct T_22_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_22_type T_22 = {// for T: raw_so
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_23_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_23_type T_23 = {// for T: raw_si
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_24_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_24_type T_24 = {// for T: raw_dle
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_25_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_25_type T_25 = {// for T: raw_dc1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_26_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_26_type T_26 = {// for T: raw_dc2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_27_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_27_type T_27 = {// for T: raw_dc3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_28_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_28_type T_28 = {// for T: raw_dc4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_29_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_29_type T_29 = {// for T: raw_nak
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_30_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_30_type T_30 = {// for T: raw_syn
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_31_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_31_type T_31 = {// for T: raw_etb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_32_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_32_type T_32 = {// for T: raw_can
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_33_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_33_type T_33 = {// for T: raw_em
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_34_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_34_type T_34 = {// for T: raw_sub
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_35_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_35_type T_35 = {// for T: raw_esc
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_36_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_36_type T_36 = {// for T: raw_fs
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_37_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_37_type T_37 = {// for T: raw_gs
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_38_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_38_type T_38 = {// for T: raw_rs
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_39_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_39_type T_39 = {// for T: raw_us
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_40_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_40_type T_40 = {// for T: raw_sp
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+//43: TH_ws
+ {3930999040
+ ,3616
+ }
+};
+struct T_41_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_41_type T_41 = {// for T: raw_exclam
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_42_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_42_type T_42 = {// for T: raw_dbl_quote
+//5: TH_c_string
+//14: TH_la_expr_src
+//15: TH_la_lrk_T
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//24: TH_parallel_oper
+//29: TH_rhs_component
+//30: TH_rtn_component
+//39: TH_term_def_ph
+//42: TH_unq_str
+//44: TH_xc_str
+ {1631764512
+ ,5248
+ }
+};
+struct T_43_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_43_type T_43 = {// for T: raw_no_sign
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_44_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_44_type T_44 = {// for T: raw_dollar_sign
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_45_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_45_type T_45 = {// for T: raw_percent
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_46_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_46_type T_46 = {// for T: raw_ampersign
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_47_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_47_type T_47 = {// for T: raw_right_quote
+//4: TH_c_literal
+//14: TH_la_expr_src
+//15: TH_la_lrk_T
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614987280
+ ,1024
+ }
+};
+struct T_48_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_48_type T_48 = {// for T: raw_open_bracket
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+ {1783253248
+ ,1568
+ }
+};
+struct T_49_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_49_type T_49 = {// for T: raw_close_bracket
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_50_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_50_type T_50 = {// for T: raw_asteric
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//20: TH_o2_code_end
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1616003072
+ ,1024
+ }
+};
+struct T_51_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_51_type T_51 = {// for T: raw_plus
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_52_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_52_type T_52 = {// for T: raw_comma
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_53_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_53_type T_53 = {// for T: raw_minus
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//21: TH_o2_lcl_opt
+//22: TH_o2_sdc
+//28: TH_rhs_bnd
+//29: TH_rhs_component
+//30: TH_rtn_component
+//34: TH_subrules_phrase
+//35: TH_subrule_def
+//36: TH_subrule_vector
+//42: TH_unq_str
+ {1885487104
+ ,1052
+ }
+};
+struct T_54_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_54_type T_54 = {// for T: raw_period
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_55_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_55_type T_55 = {// for T: raw_slash
+//2: TH_cweb_or_c_k
+//3: TH_c_comments
+//8: TH_err_symbols_ph_th
+//11: TH_fsm_phrase_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//18: TH_lint_balls
+//19: TH_lr1_k_phrase_th
+//22: TH_o2_sdc
+//25: TH_parallel_parser_ph_th
+//27: TH_rc_phrase_th
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//37: TH_terminals_phrase_th
+//41: TH_T_enum_phrase_th
+//42: TH_unq_str
+ {3930999052
+ ,1568
+ }
+};
+struct T_56_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_56_type T_56 = {// for T: raw_0
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_57_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_57_type T_57 = {// for T: raw_1
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_58_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_58_type T_58 = {// for T: raw_2
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_59_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_59_type T_59 = {// for T: raw_3
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_60_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_60_type T_60 = {// for T: raw_4
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_61_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_61_type T_61 = {// for T: raw_5
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_62_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_62_type T_62 = {// for T: raw_6
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_63_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_63_type T_63 = {// for T: raw_7
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_64_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_64_type T_64 = {// for T: raw_8
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_65_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_65_type T_65 = {// for T: raw_9
+//13: TH_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614962688
+ ,1024
+ }
+};
+struct T_66_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_66_type T_66 = {// for T: raw_colon
+//6: TH_dbl_colon
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954560
+ ,1024
+ }
+};
+struct T_67_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_67_type T_67 = {// for T: raw_semi_colon
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_68_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_68_type T_68 = {// for T: raw_less_than
+//0: TH_angled_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954497
+ ,1024
+ }
+};
+struct T_69_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_69_type T_69 = {// for T: raw_eq
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_70_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_70_type T_70 = {// for T: raw_gt_than
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_71_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_71_type T_71 = {// for T: raw_question_mark
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_72_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_72_type T_72 = {// for T: raw_at_sign
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//26: TH_prefile_include
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1682063360
+ ,1024
+ }
+};
+struct T_73_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_73_type T_73 = {// for T: raw_A
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//40: TH_t_def_delabort_tags
+//42: TH_unq_str
+ {1615025152
+ ,1409
+ }
+};
+struct T_74_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_74_type T_74 = {// for T: raw_B
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_75_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_75_type T_75 = {// for T: raw_C
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_76_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_76_type T_76 = {// for T: raw_D
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_77_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_77_type T_77 = {// for T: raw_E
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_78_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_78_type T_78 = {// for T: raw_F
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_79_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_79_type T_79 = {// for T: raw_G
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_80_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_80_type T_80 = {// for T: raw_H
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_81_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_81_type T_81 = {// for T: raw_I
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_82_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_82_type T_82 = {// for T: raw_J
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_83_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_83_type T_83 = {// for T: raw_K
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_84_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_84_type T_84 = {// for T: raw_L
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_85_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_85_type T_85 = {// for T: raw_M
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_86_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_86_type T_86 = {// for T: raw_N
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_87_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_87_type T_87 = {// for T: raw_O
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_88_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_88_type T_88 = {// for T: raw_P
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_89_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_89_type T_89 = {// for T: raw_Q
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_90_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_90_type T_90 = {// for T: raw_R
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_91_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_91_type T_91 = {// for T: raw_S
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_92_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_92_type T_92 = {// for T: raw_T
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_93_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_93_type T_93 = {// for T: raw_U
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_94_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_94_type T_94 = {// for T: raw_V
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_95_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_95_type T_95 = {// for T: raw_W
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_96_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_96_type T_96 = {// for T: raw_X
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_97_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_97_type T_97 = {// for T: raw_Y
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_98_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_98_type T_98 = {// for T: raw_Z
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_99_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_99_type T_99 = {// for T: raw_open_sq_bracket
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_100_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_100_type T_100 = {// for T: raw_back_slash
+//9: TH_esc_seq
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614955008
+ ,1024
+ }
+};
+struct T_101_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_101_type T_101 = {// for T: raw_close_sq_bracket
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_102_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_102_type T_102 = {// for T: raw_up_arrow
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_103_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_103_type T_103 = {// for T: raw_under_score
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_104_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_104_type T_104 = {// for T: raw_left_quote
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_105_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_105_type T_105 = {// for T: raw_a
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_106_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_106_type T_106 = {// for T: raw_b
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_107_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_107_type T_107 = {// for T: raw_c
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_108_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_108_type T_108 = {// for T: raw_d
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_109_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_109_type T_109 = {// for T: raw_e
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_110_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_110_type T_110 = {// for T: raw_f
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_111_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_111_type T_111 = {// for T: raw_g
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_112_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_112_type T_112 = {// for T: raw_h
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_113_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_113_type T_113 = {// for T: raw_i
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_114_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_114_type T_114 = {// for T: raw_j
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_115_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_115_type T_115 = {// for T: raw_k
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_116_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_116_type T_116 = {// for T: raw_l
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_117_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_117_type T_117 = {// for T: raw_m
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_118_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_118_type T_118 = {// for T: raw_n
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_119_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_119_type T_119 = {// for T: raw_o
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_120_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_120_type T_120 = {// for T: raw_p
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_121_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_121_type T_121 = {// for T: raw_q
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_122_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_122_type T_122 = {// for T: raw_r
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_123_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_123_type T_123 = {// for T: raw_s
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//38: TH_terminal_def_symclass
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1217
+ }
+};
+struct T_124_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_124_type T_124 = {// for T: raw_t
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_125_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_125_type T_125 = {// for T: raw_u
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_126_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_126_type T_126 = {// for T: raw_v
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_127_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_127_type T_127 = {// for T: raw_w
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_128_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_128_type T_128 = {// for T: raw_x
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_129_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_129_type T_129 = {// for T: raw_y
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_130_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_130_type T_130 = {// for T: raw_z
+//10: TH_fsm_class_phrase_th
+//12: TH_identifier
+//14: TH_la_expr_src
+//16: TH_linker_id
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//32: TH_rule_def_phrase
+//39: TH_term_def_ph
+//42: TH_unq_str
+ {1615025152
+ ,1153
+ }
+};
+struct T_131_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_131_type T_131 = {// for T: raw_open_brace
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//28: TH_rhs_bnd
+//29: TH_rhs_component
+//30: TH_rtn_component
+//31: TH_rules_phrase_th
+//42: TH_unq_str
+ {4030873600
+ ,1024
+ }
+};
+struct T_132_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_132_type T_132 = {// for T: raw_vertical_line
+//14: TH_la_expr_src
+//15: TH_la_lrk_T
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//24: TH_parallel_oper
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1631764480
+ ,1024
+ }
+};
+struct T_133_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_133_type T_133 = {// for T: raw_close_brace
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//28: TH_rhs_bnd
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1883389952
+ ,1024
+ }
+};
+struct T_134_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_134_type T_134 = {// for T: raw_tilde
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_135_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_135_type T_135 = {// for T: raw_del
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_136_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_136_type T_136 = {// for T: raw_x80
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_137_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_137_type T_137 = {// for T: raw_x81
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_138_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_138_type T_138 = {// for T: raw_x82
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_139_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_139_type T_139 = {// for T: raw_x83
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_140_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_140_type T_140 = {// for T: raw_x84
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_141_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_141_type T_141 = {// for T: raw_x85
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_142_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_142_type T_142 = {// for T: raw_x86
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_143_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_143_type T_143 = {// for T: raw_x87
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_144_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_144_type T_144 = {// for T: raw_x88
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_145_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_145_type T_145 = {// for T: raw_x89
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_146_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_146_type T_146 = {// for T: raw_x8a
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_147_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_147_type T_147 = {// for T: raw_x8b
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_148_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_148_type T_148 = {// for T: raw_x8c
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_149_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_149_type T_149 = {// for T: raw_x8d
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_150_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_150_type T_150 = {// for T: raw_x8e
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_151_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_151_type T_151 = {// for T: raw_x8f
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_152_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_152_type T_152 = {// for T: raw_x90
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_153_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_153_type T_153 = {// for T: raw_x91
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_154_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_154_type T_154 = {// for T: raw_x92
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_155_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_155_type T_155 = {// for T: raw_x93
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_156_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_156_type T_156 = {// for T: raw_x94
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_157_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_157_type T_157 = {// for T: raw_x95
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_158_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_158_type T_158 = {// for T: raw_x96
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_159_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_159_type T_159 = {// for T: raw_x97
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_160_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_160_type T_160 = {// for T: raw_x98
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_161_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_161_type T_161 = {// for T: raw_x99
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_162_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_162_type T_162 = {// for T: raw_x9a
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_163_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_163_type T_163 = {// for T: raw_x9b
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_164_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_164_type T_164 = {// for T: raw_x9c
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_165_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_165_type T_165 = {// for T: raw_x9d
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_166_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_166_type T_166 = {// for T: raw_x9e
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_167_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_167_type T_167 = {// for T: raw_x9f
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_168_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_168_type T_168 = {// for T: raw_xa0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_169_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_169_type T_169 = {// for T: raw_xa1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_170_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_170_type T_170 = {// for T: raw_xa2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_171_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_171_type T_171 = {// for T: raw_xa3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_172_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_172_type T_172 = {// for T: raw_xa4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_173_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_173_type T_173 = {// for T: raw_xa5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_174_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_174_type T_174 = {// for T: raw_xa6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_175_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_175_type T_175 = {// for T: raw_xa7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_176_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_176_type T_176 = {// for T: raw_xa8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_177_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_177_type T_177 = {// for T: raw_xa9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_178_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_178_type T_178 = {// for T: raw_xaa
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_179_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_179_type T_179 = {// for T: raw_xab
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_180_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_180_type T_180 = {// for T: raw_xac
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_181_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_181_type T_181 = {// for T: raw_xad
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_182_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_182_type T_182 = {// for T: raw_xae
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_183_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_183_type T_183 = {// for T: raw_xaf
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_184_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_184_type T_184 = {// for T: raw_xb0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_185_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_185_type T_185 = {// for T: raw_xb1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_186_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_186_type T_186 = {// for T: raw_xb2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_187_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_187_type T_187 = {// for T: raw_xb3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_188_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_188_type T_188 = {// for T: raw_xb4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_189_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_189_type T_189 = {// for T: raw_xb5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_190_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_190_type T_190 = {// for T: raw_xb6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_191_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_191_type T_191 = {// for T: raw_xb7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_192_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_192_type T_192 = {// for T: raw_xb8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_193_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_193_type T_193 = {// for T: raw_xb9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_194_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_194_type T_194 = {// for T: raw_xba
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_195_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_195_type T_195 = {// for T: raw_xbb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_196_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_196_type T_196 = {// for T: raw_xbc
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_197_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_197_type T_197 = {// for T: raw_xbd
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_198_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_198_type T_198 = {// for T: raw_xbe
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_199_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_199_type T_199 = {// for T: raw_xbf
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_200_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_200_type T_200 = {// for T: raw_xc0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_201_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_201_type T_201 = {// for T: raw_xc1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_202_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_202_type T_202 = {// for T: raw_xc2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_203_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_203_type T_203 = {// for T: raw_xc3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_204_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_204_type T_204 = {// for T: raw_xc4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_205_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_205_type T_205 = {// for T: raw_xc5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_206_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_206_type T_206 = {// for T: raw_xc6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_207_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_207_type T_207 = {// for T: raw_xc7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_208_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_208_type T_208 = {// for T: raw_xc8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_209_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_209_type T_209 = {// for T: raw_xc9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_210_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_210_type T_210 = {// for T: raw_xca
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_211_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_211_type T_211 = {// for T: raw_xcb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_212_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_212_type T_212 = {// for T: raw_xcc
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_213_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_213_type T_213 = {// for T: raw_xcd
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_214_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_214_type T_214 = {// for T: raw_xce
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_215_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_215_type T_215 = {// for T: raw_xcf
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_216_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_216_type T_216 = {// for T: raw_xd0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_217_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_217_type T_217 = {// for T: raw_xd1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_218_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_218_type T_218 = {// for T: raw_xd2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_219_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_219_type T_219 = {// for T: raw_xd3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_220_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_220_type T_220 = {// for T: raw_xd4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_221_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_221_type T_221 = {// for T: raw_xd5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_222_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_222_type T_222 = {// for T: raw_xd6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_223_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_223_type T_223 = {// for T: raw_xd7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_224_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_224_type T_224 = {// for T: raw_xd8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_225_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_225_type T_225 = {// for T: raw_xd9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_226_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_226_type T_226 = {// for T: raw_xda
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_227_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_227_type T_227 = {// for T: raw_xdb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_228_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_228_type T_228 = {// for T: raw_xdc
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_229_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_229_type T_229 = {// for T: raw_xdd
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_230_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_230_type T_230 = {// for T: raw_xde
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_231_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_231_type T_231 = {// for T: raw_xdf
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_232_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_232_type T_232 = {// for T: raw_xe0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_233_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_233_type T_233 = {// for T: raw_xe1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_234_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_234_type T_234 = {// for T: raw_xe2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_235_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_235_type T_235 = {// for T: raw_xe3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_236_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_236_type T_236 = {// for T: raw_xe4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_237_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_237_type T_237 = {// for T: raw_xe5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_238_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_238_type T_238 = {// for T: raw_xe6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_239_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_239_type T_239 = {// for T: raw_xe7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_240_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_240_type T_240 = {// for T: raw_xe8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_241_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_241_type T_241 = {// for T: raw_xe9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_242_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_242_type T_242 = {// for T: raw_xea
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_243_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_243_type T_243 = {// for T: raw_xeb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_244_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_244_type T_244 = {// for T: raw_xec
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_245_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_245_type T_245 = {// for T: raw_xed
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_246_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_246_type T_246 = {// for T: raw_xee
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_247_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_247_type T_247 = {// for T: raw_xef
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_248_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_248_type T_248 = {// for T: raw_xf0
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_249_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_249_type T_249 = {// for T: raw_xf1
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_250_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_250_type T_250 = {// for T: raw_xf2
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_251_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_251_type T_251 = {// for T: raw_xf3
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_252_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_252_type T_252 = {// for T: raw_xf4
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_253_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_253_type T_253 = {// for T: raw_xf5
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_254_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_254_type T_254 = {// for T: raw_xf6
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_255_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_255_type T_255 = {// for T: raw_xf7
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_256_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_256_type T_256 = {// for T: raw_xf8
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_257_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_257_type T_257 = {// for T: raw_xf9
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_258_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_258_type T_258 = {// for T: raw_xfa
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_259_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_259_type T_259 = {// for T: raw_xfb
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_260_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_260_type T_260 = {// for T: raw_xfc
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_261_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_261_type T_261 = {// for T: raw_xfd
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_262_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_262_type T_262 = {// for T: raw_xfe
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_263_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_263_type T_263 = {// for T: raw_xff
+//1: TH_bad_char_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954498
+ ,1024
+ }
+};
+struct T_264_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_264_type T_264 = {// for T: T_option_t
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_265_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_265_type T_265 = {// for T: T_option_p
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_266_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_266_type T_266 = {// for T: T_option_err
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_267_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_267_type T_267 = {// for T: T_esc_seq
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_268_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_268_type T_268 = {// for T: T_eol
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_269_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_269_type T_269 = {// for T: T_basic_char
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_270_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_270_type T_270 = {// for T: T_raw_char
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_271_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_271_type T_271 = {// for T: T_comment
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_272_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_272_type T_272 = {// for T: T_ws
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_273_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_273_type T_273 = {// for T: T_angled_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_274_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_274_type T_274 = {// for T: T_c_literal
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_275_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_275_type T_275 = {// for T: T_c_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_276_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_276_type T_276 = {// for T: T_xc_str
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_277_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_277_type T_277 = {// for T: T_unquoted_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_278_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_278_type T_278 = {// for T: T_file_inclusion
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_279_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_279_type T_279 = {// for T: T_identifier
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_280_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_280_type T_280 = {// for T: T_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_281_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_281_type T_281 = {// for T: T_raw_characters
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_282_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_282_type T_282 = {// for T: T_lr1_constant_symbols
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_283_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_283_type T_283 = {// for T: T_error_symbols
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_284_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_284_type T_284 = {// for T: T_eocode
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_285_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_285_type T_285 = {// for T: T_AD
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_286_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_286_type T_286 = {// for T: T_AB
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_287_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_287_type T_287 = {// for T: T_parallel_la_boundary
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_288_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_288_type T_288 = {// for T: T_arbitrator_code
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_289_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_289_type T_289 = {// for T: T_parallel_parser
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_290_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_290_type T_290 = {// for T: T_parallel_thread_function
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_291_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_291_type T_291 = {// for T: T_parallel_control_monitor
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//23: TH_parallel_monitor_ph
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1623343104
+ ,1024
+ }
+};
+struct T_292_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_292_type T_292 = {// for T: T_fsm
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_293_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_293_type T_293 = {// for T: T_fsm_id
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_294_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_294_type T_294 = {// for T: T_fsm_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_295_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_295_type T_295 = {// for T: T_fsm_namespace
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_296_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_296_type T_296 = {// for T: T_fsm_class
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_297_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_297_type T_297 = {// for T: T_fsm_version
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_298_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_298_type T_298 = {// for T: T_fsm_date
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_299_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_299_type T_299 = {// for T: T_fsm_debug
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_300_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_300_type T_300 = {// for T: T_fsm_comments
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_301_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_301_type T_301 = {// for T: T_terminals
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_302_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_302_type T_302 = {// for T: T_enumeration
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_303_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_303_type T_303 = {// for T: T_file_name
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_304_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_304_type T_304 = {// for T: T_name_space
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_305_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_305_type T_305 = {// for T: T_sym_class
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_306_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_306_type T_306 = {// for T: T_rules
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_307_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_307_type T_307 = {// for T: T_lhs
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//33: TH_rule_lhs_phrase
+//42: TH_unq_str
+ {1614954496
+ ,1026
+ }
+};
+struct T_308_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_308_type T_308 = {// for T: T_user_declaration
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_309_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_309_type T_309 = {// for T: T_user_prefix_declaration
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_310_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_310_type T_310 = {// for T: T_user_suffix_declaration
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_311_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_311_type T_311 = {// for T: T_constructor
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_312_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_312_type T_312 = {// for T: T_destructor
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_313_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_313_type T_313 = {// for T: T_op
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_314_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_314_type T_314 = {// for T: T_failed
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_315_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_315_type T_315 = {// for T: T_user_implementation
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_316_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_316_type T_316 = {// for T: T_user_imp_tbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_317_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_317_type T_317 = {// for T: T_user_imp_sym
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_318_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_318_type T_318 = {// for T: T_constant_defs
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_319_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_319_type T_319 = {// for T: T_terminals_refs
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_320_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_320_type T_320 = {// for T: T_terminals_sufx
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_321_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_321_type T_321 = {// for T: T_lrk_sufx
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_322_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_322_type T_322 = {// for T: T_selector
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_323_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_323_type T_323 = {// for T: T_NULL
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_324_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_324_type T_324 = {// for T: T_2colon
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_325_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_325_type T_325 = {// for T: T_block
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_326_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_326_type T_326 = {// for T: T_syntax_code
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_327_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_327_type T_327 = {// for T: T_fsm_class_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_328_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_328_type T_328 = {// for T: T_fsm_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_329_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_329_type T_329 = {// for T: T_parallel_parser_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_330_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_330_type T_330 = {// for T: T_enum_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_331_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_331_type T_331 = {// for T: T_terminal_def
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_332_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_332_type T_332 = {// for T: table_entry
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_333_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_333_type T_333 = {// for T: T_sym_tbl_report_card
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_334_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_334_type T_334 = {// for T: T_terminals_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_335_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_335_type T_335 = {// for T: T_error_symbols_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_336_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_336_type T_336 = {// for T: T_lr1_k_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_337_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_337_type T_337 = {// for T: T_rc_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_338_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_338_type T_338 = {// for T: T_rule_lhs_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_339_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_339_type T_339 = {// for T: T_parallel_monitor_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_340_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_340_type T_340 = {// for T: rule_def
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_341_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_341_type T_341 = {// for T: T_rules_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_342_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_342_type T_342 = {// for T: T_subrule_def
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_343_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_343_type T_343 = {// for T: T_subrules_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_344_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_344_type T_344 = {// for T: T_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_345_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_345_type T_345 = {// for T: refered_T
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_346_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_346_type T_346 = {// for T: rule_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_347_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_347_type T_347 = {// for T: refered_rule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_348_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_348_type T_348 = {// for T: T_transitive
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_349_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_349_type T_349 = {// for T: T_grammar_name
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_350_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_350_type T_350 = {// for T: T_thread_name
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_351_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_351_type T_351 = {// for T: T_monolithic
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_352_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_352_type T_352 = {// for T: T_no_of_T
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_353_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_353_type T_353 = {// for T: T_list_of_native_first_set_terminals
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_354_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_354_type T_354 = {// for T: T_end_list_of_native_first_set_terminals
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_355_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_355_type T_355 = {// for T: T_list_of_transitive_threads
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_356_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_356_type T_356 = {// for T: T_end_list_of_transitive_threads
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_357_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_357_type T_357 = {// for T: T_emitfile
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_358_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_358_type T_358 = {// for T: T_preamble
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_359_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_359_type T_359 = {// for T: T_end_preamble
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_360_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_360_type T_360 = {// for T: T_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_361_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_361_type T_361 = {// for T: T_end_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_362_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_362_type T_362 = {// for T: T_file_of_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_363_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_363_type T_363 = {// for T: T_attributes
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_364_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_364_type T_364 = {// for T: tth_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_365_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_365_type T_365 = {// for T: thread_attributes
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_366_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_366_type T_366 = {// for T: th_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_367_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_367_type T_367 = {// for T: kw_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_368_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_368_type T_368 = {// for T: T_la_expr_src
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_369_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_369_type T_369 = {// for T: T_eosubrule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_370_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_370_type T_370 = {// for T: T_called_thread_eosubrule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_371_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_371_type T_371 = {// for T: T_null_call_thread_eosubrule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_372_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_372_type T_372 = {// for T: T_cweb_comment
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_373_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_373_type T_373 = {// for T: T_grammar_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_374_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_374_type T_374 = {// for T: T_cweb_marker
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_375_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_375_type T_375 = {// for T: T_lint
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_376_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_376_type T_376 = {// for T: T_list_of_used_threads
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_377_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_377_type T_377 = {// for T: T_end_list_of_used_threads
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_378_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_378_type T_378 = {// for T: Err_nested_files_exceeded
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_379_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_379_type T_379 = {// for T: Err_no_end_of_code
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_380_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_380_type T_380 = {// for T: Err_no_cmd_lne_data
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_381_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_381_type T_381 = {// for T: Err_no_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_382_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_382_type T_382 = {// for T: Err_bad_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_383_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_383_type T_383 = {// for T: Err_bad_fsmheader_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_384_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_384_type T_384 = {// for T: Err_bad_fsmcpp_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_385_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_385_type T_385 = {// for T: Err_bad_fsmsym_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_386_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_386_type T_386 = {// for T: Err_bad_fsmtbl_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_387_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_387_type T_387 = {// for T: Err_bad_enum_filename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_388_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_388_type T_388 = {// for T: Err_bad_errors_hdrfilename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_389_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_389_type T_389 = {// for T: Err_bad_errors_impfilename
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_390_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_390_type T_390 = {// for T: Err_bad_cmd_lne_opt
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_391_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_391_type T_391 = {// for T: Err_bad_int_no
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_392_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_392_type T_392 = {// for T: Err_bad_int_no_range
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_393_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_393_type T_393 = {// for T: Err_no_int_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_394_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_394_type T_394 = {// for T: Err_bad_eos
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_395_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_395_type T_395 = {// for T: Err_bad_esc
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_396_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_396_type T_396 = {// for T: Err_comment_overrun
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_397_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_397_type T_397 = {// for T: Err_bad_char
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_398_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_398_type T_398 = {// for T: Err_bad_univ_seq
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_399_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_399_type T_399 = {// for T: Err_improper_closing_of_rules
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_400_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_400_type T_400 = {// for T: Err_no_identifier_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_401_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_401_type T_401 = {// for T: Err_no_directive_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_402_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_402_type T_402 = {// for T: Err_duplicate_directive
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_403_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_403_type T_403 = {// for T: Err_no_syntax_code_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_404_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_404_type T_404 = {// for T: Err_no_open_parenthesis
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_405_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_405_type T_405 = {// for T: Err_no_close_parenthesis
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_406_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_406_type T_406 = {// for T: Err_no_fsm_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_407_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_407_type T_407 = {// for T: Err_no_fsm_id_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_408_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_408_type T_408 = {// for T: Err_no_fsm_filename_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_409_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_409_type T_409 = {// for T: Err_no_fsm_filename_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_410_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_410_type T_410 = {// for T: Err_no_comma_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_411_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_411_type T_411 = {// for T: Err_no_fsm_namespace_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_412_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_412_type T_412 = {// for T: Err_no_fsm_namespace_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_413_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_413_type T_413 = {// for T: Err_no_fsm_class_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_414_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_414_type T_414 = {// for T: Err_no_fsm_version_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_415_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_415_type T_415 = {// for T: Err_no_fsm_version_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_416_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_416_type T_416 = {// for T: Err_no_fsm_date_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_417_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_417_type T_417 = {// for T: Err_no_fsm_date_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_418_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_418_type T_418 = {// for T: Err_no_fsm_debug_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_419_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_419_type T_419 = {// for T: Err_no_fsm_debug_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_420_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_420_type T_420 = {// for T: Err_no_fsm_comments_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_421_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_421_type T_421 = {// for T: Err_no_fsm_comments_string
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_422_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_422_type T_422 = {// for T: Err_fsm_debug_string_not_true_or_false
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_423_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_423_type T_423 = {// for T: Err_no_pp_thread_function_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_424_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_424_type T_424 = {// for T: Err_no_pp_ctrl_mntor_kw_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_425_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_425_type T_425 = {// for T: Err_no_pp_fnct_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_426_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_426_type T_426 = {// for T: Err_no_pp_bndry_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_427_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_427_type T_427 = {// for T: Err_no_pp_la_bndary_expr_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_428_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_428_type T_428 = {// for T: Err_no_syntax_code_end_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_429_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_429_type T_429 = {// for T: Err_no_pp_code_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_430_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_430_type T_430 = {// for T: Err_no_pp_code_stc_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_431_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_431_type T_431 = {// for T: Err_not_arbitration_code_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_432_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_432_type T_432 = {// for T: Err_no_open_brace
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_433_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_433_type T_433 = {// for T: Err_no_close_brace
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_434_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_434_type T_434 = {// for T: Err_no_constant_defs_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_435_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_435_type T_435 = {// for T: Err_no_filename_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_436_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_436_type T_436 = {// for T: Err_no_filename_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_437_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_437_type T_437 = {// for T: Err_no_namespace_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_438_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_438_type T_438 = {// for T: Err_no_namespace_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_439_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_439_type T_439 = {// for T: Err_no_kdefs_code_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_440_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_440_type T_440 = {// for T: Err_no_kdefs_kw_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_441_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_441_type T_441 = {// for T: Err_no_tdef_code_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_442_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_442_type T_442 = {// for T: Err_no_sym_defs_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_443_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_443_type T_443 = {// for T: Err_no_terminal_key_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_444_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_444_type T_444 = {// for T: Err_dup_entry_in_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_445_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_445_type T_445 = {// for T: Err_already_defined_AB
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_446_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_446_type T_446 = {// for T: Err_already_defined_AD
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_447_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_447_type T_447 = {// for T: Err_improper_directive
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_448_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_448_type T_448 = {// for T: Err_no_sym_class_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_449_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_449_type T_449 = {// for T: Err_no_sym_class_id_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_450_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_450_type T_450 = {// for T: Err_zero_len_sym
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_451_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_451_type T_451 = {// for T: Err_sym_tbl_full
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_452_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_452_type T_452 = {// for T: Err_sym_tbl_char_pool_full
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_453_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_453_type T_453 = {// for T: Err_dup_entry_in_sym_table
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_454_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_454_type T_454 = {// for T: Err_subscript_out_of_range
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_455_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_455_type T_455 = {// for T: Err_sym_tbl_nested_scope_stk_overflow
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_456_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_456_type T_456 = {// for T: Err_sym_tbl_nested_scope_stk_underflow
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_457_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_457_type T_457 = {// for T: Err_sym_tbl_context_buf_overflow
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_458_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_458_type T_458 = {// for T: Err_report_card_ptr_0
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_459_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_459_type T_459 = {// for T: Err_cannot_define_term_after_sufx_dir
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_460_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_460_type T_460 = {// for T: Err_dup_sufx_directive
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_461_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_461_type T_461 = {// for T: Err_terminals_refs_def_after_terminals
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_462_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_462_type T_462 = {// for T: Err_terminals_refs_dup_def
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_463_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_463_type T_463 = {// for T: Err_no_rule_name_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_464_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_464_type T_464 = {// for T: Err_no_sub_rule_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_465_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_465_type T_465 = {// for T: Err_subrule_use_undefined_T
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_466_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_466_type T_466 = {// for T: Err_stbl_entry_unknown
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_467_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_467_type T_467 = {// for T: Err_subrule_overrun
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_468_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_468_type T_468 = {// for T: Err_stble_has_entry_but_not_a_rule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_469_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_469_type T_469 = {// for T: Err_file_of_T_alphabet_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_470_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_470_type T_470 = {// for T: Err_emitfile_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_471_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_471_type T_471 = {// for T: Err_preamble_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_472_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_472_type T_472 = {// for T: Err_preamble_srce_code_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_473_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_473_type T_473 = {// for T: Err_end_preamble_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_474_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_474_type T_474 = {// for T: Err_cmd_line_chaffe
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_475_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_475_type T_475 = {// for T: Err_T_alphabet_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_476_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_476_type T_476 = {// for T: Err_T_alphabet_file_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_477_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_477_type T_477 = {// for T: Err_end_T_alphabet_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_478_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_478_type T_478 = {// for T: Err_no_terminals_in_T_alphabet_list
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_479_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_479_type T_479 = {// for T: Err_rotten_chr_in_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_480_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_480_type T_480 = {// for T: Err_transitive_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_481_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_481_type T_481 = {// for T: Err_grammar_name_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_482_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_482_type T_482 = {// for T: Err_namespace_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_483_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_483_type T_483 = {// for T: Err_filename_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_484_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_484_type T_484 = {// for T: Err_threadname_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_485_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_485_type T_485 = {// for T: Err_monolithic_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_486_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_486_type T_486 = {// for T: Err_no_of_T_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_487_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_487_type T_487 = {// for T: Err_list_of_terminals_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_488_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_488_type T_488 = {// for T: Err_no_list_of_trans_threads_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_489_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_489_type T_489 = {// for T: Err_no_terminals_present_in_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_490_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_490_type T_490 = {// for T: Err_transitive_value_bad
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_491_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_491_type T_491 = {// for T: Err_monolithic_value_bad
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_492_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_492_type T_492 = {// for T: Err_grammar_name_value_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_493_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_493_type T_493 = {// for T: Err_namespace_value_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_494_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_494_type T_494 = {// for T: Err_threadname_value_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_495_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_495_type T_495 = {// for T: Err_filename_value_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_496_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_496_type T_496 = {// for T: Err_no_of_T_value_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_497_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_497_type T_497 = {// for T: Err_no_of_terminals_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_498_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_498_type T_498 = {// for T: Err_end_list_native_T_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_499_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_499_type T_499 = {// for T: Err_end_list_of_transitive_threads_kw_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_500_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_500_type T_500 = {// for T: Err_no_of_native_Ts_in_list_not_equal
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_501_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_501_type T_501 = {// for T: Err_no_of_threads_in_list_not_equal
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_502_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_502_type T_502 = {// for T: Err_thread_refed_but_not_defined
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_503_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_503_type T_503 = {// for T: Err_bad_T_in_list
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_504_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_504_type T_504 = {// for T: Err_bad_th_in_list
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_505_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_505_type T_505 = {// for T: Err_already_defined_in_fsc_file
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_506_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_506_type T_506 = {// for T: Err_bad_thread_subscript
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_507_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_507_type T_507 = {// for T: Err_not_a_keyword
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_508_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_508_type T_508 = {// for T: Err_no_of_threads_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_509_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_509_type T_509 = {// for T: Err_bad_T_alphabet
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_510_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_510_type T_510 = {// for T: Err_fsc_file_does_not_exist
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_511_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_511_type T_511 = {// for T: Err_filename_file_does_not_exist
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_512_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_512_type T_512 = {// for T: Err_T_alphabet_file_does_not_exist
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_513_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_513_type T_513 = {// for T: Err_emitfile_file_does_not_exist
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_514_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_514_type T_514 = {// for T: Err_emitfile_file_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_515_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_515_type T_515 = {// for T: Err_fsc_cntl_file_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_516_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_516_type T_516 = {// for T: Err_file_of_T_alphabet_not_present
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_517_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_517_type T_517 = {// for T: Err_epsilon_pass_thru
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_518_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_518_type T_518 = {// for T: Err_epsilon_pass_thru_no_Ts
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_519_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_519_type T_519 = {// for T: Err_rule_not_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_520_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_520_type T_520 = {// for T: Err_T_not_in_stbl
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_521_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_521_type T_521 = {// for T: Err_bad_directive
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_522_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_522_type T_522 = {// for T: Err_bad_term_in_la_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_523_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_523_type T_523 = {// for T: Err_empty_set_removal_in_la_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_524_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_524_type T_524 = {// for T: Err_bad_operator_in_la_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_525_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_525_type T_525 = {// for T: Err_not_a_lhs_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_526_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_526_type T_526 = {// for T: Err_pp_la_boundary_attribute_not_fnd
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_527_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_527_type T_527 = {// for T: Err_already_processed_fsm_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_528_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_528_type T_528 = {// for T: Err_already_processed_pp_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_529_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_529_type T_529 = {// for T: Err_already_processed_T_enum_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_530_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_530_type T_530 = {// for T: Err_already_processed_error_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_531_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_531_type T_531 = {// for T: Err_already_processed_rc_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_532_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_532_type T_532 = {// for T: Err_already_processed_lrk_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_533_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_533_type T_533 = {// for T: Err_already_processed_T_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_534_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_534_type T_534 = {// for T: Err_already_processed_rule_phase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_535_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_535_type T_535 = {// for T: Err_not_T_for_rtned_token_from_th
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_536_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_536_type T_536 = {// for T: Err_not_id_for_ns_in_th_stmt
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_537_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_537_type T_537 = {// for T: Err_not_id_for_th_name_in_th_stmt
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_538_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_538_type T_538 = {// for T: Err_bad_th_qualifier
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_539_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_539_type T_539 = {// for T: Err_not_dbl_colon_in_th_stmt
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_540_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_540_type T_540 = {// for T: Err_not_T_or_R_in_subrule_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_541_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_541_type T_541 = {// for T: Err_not_T_or_R_or_eos_in_subrule_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_542_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_542_type T_542 = {// for T: Err_not_eos_in_subrule_expr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_543_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_543_type T_543 = {// for T: Err_invalid_logical_name
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_544_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_544_type T_544 = {// for T: Err_invalid_logical_value
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_545_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_545_type T_545 = {// for T: Err_duplicate_logical_name
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_546_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_546_type T_546 = {// for T: Err_missing_terminals_refs_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_547_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_547_type T_547 = {// for T: Err_missing_terminals_sufx_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_548_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_548_type T_548 = {// for T: Err_not_a_terminal_definition
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_549_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_549_type T_549 = {// for T: Err_missing_lrk_sufx_kw
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_550_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_550_type T_550 = {// for T: ERR_sick_grammar
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_551_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_551_type T_551 = {// for T: ERR_no_fsm_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_552_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_552_type T_552 = {// for T: ERR_no_T_enum_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_553_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_553_type T_553 = {// for T: ERR_no_lrk_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_554_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_554_type T_554 = {// for T: ERR_no_rc_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_555_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_555_type T_555 = {// for T: ERR_no_errors_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_556_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_556_type T_556 = {// for T: ERR_no_terminals_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_557_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_557_type T_557 = {// for T: ERR_no_rules_phrase
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_558_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_558_type T_558 = {// for T: Err_used_rule_but_undefined
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_559_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_559_type T_559 = {// for T: Err_rule_already_defined
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_560_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_560_type T_560 = {// for T: Err_la_expr_calc_empty_set
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_561_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_561_type T_561 = {// for T: Err_no_close_brace_ending_rules_defs
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_562_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_562_type T_562 = {// for T: Err_use_of_T_outside_Rules_construct
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_563_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_563_type T_563 = {// for T: Err_not_kw_defining_grammar_construct
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_564_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_564_type T_564 = {// for T: Err_use_of_N_outside_Rules_construct
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_565_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_565_type T_565 = {// for T: Err_misplaced_or_misspelt_Rule_or_T
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_566_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_566_type T_566 = {// for T: Err_not_a_Rule
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_567_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_567_type T_567 = {// for T: Err_empty_file
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct T_568_type{
+ yacco2::ULINT first_entry__[2];
+};
+
+T_568_type T_568 = {// for T: Err_not_lhs_pcnrl_mntr
+//14: TH_la_expr_src
+//17: TH_linker_preamble_code
+//22: TH_o2_sdc
+//29: TH_rhs_component
+//30: TH_rtn_component
+//42: TH_unq_str
+ {1614954496
+ ,1024
+ }
+};
+struct t_array_type {
+ yacco2::USINT no_entries__;
+ yacco2::thd_ids_having_T* first_entry__[569];
+};
+t_array_type t_array = {
+ 569
+ ,{
+(yacco2::thd_ids_having_T*)&T_0 // LR1_questionable_shift_operator
+ ,(yacco2::thd_ids_having_T*)&T_1 // LR1_eog
+ ,0// LR1_eolr
+ ,0// LR1_parallel_operator
+ ,0// LR1_reduce_operator
+ ,0// LR1_invisible_shift_operator
+ ,(yacco2::thd_ids_having_T*)&T_6 // LR1_all_shift_operator
+ ,(yacco2::thd_ids_having_T*)&T_7 // LR1_fset_transience_operator
+ ,(yacco2::thd_ids_having_T*)&T_8 // raw_nul
+ ,(yacco2::thd_ids_having_T*)&T_9 // raw_soh
+ ,(yacco2::thd_ids_having_T*)&T_10 // raw_stx
+ ,(yacco2::thd_ids_having_T*)&T_11 // raw_etx
+ ,(yacco2::thd_ids_having_T*)&T_12 // raw_eot
+ ,(yacco2::thd_ids_having_T*)&T_13 // raw_enq
+ ,(yacco2::thd_ids_having_T*)&T_14 // raw_ack
+ ,(yacco2::thd_ids_having_T*)&T_15 // raw_bel
+ ,(yacco2::thd_ids_having_T*)&T_16 // raw_bs
+ ,(yacco2::thd_ids_having_T*)&T_17 // raw_ht
+ ,(yacco2::thd_ids_having_T*)&T_18 // raw_lf
+ ,(yacco2::thd_ids_having_T*)&T_19 // raw_vt
+ ,(yacco2::thd_ids_having_T*)&T_20 // raw_ff
+ ,(yacco2::thd_ids_having_T*)&T_21 // raw_cr
+ ,(yacco2::thd_ids_having_T*)&T_22 // raw_so
+ ,(yacco2::thd_ids_having_T*)&T_23 // raw_si
+ ,(yacco2::thd_ids_having_T*)&T_24 // raw_dle
+ ,(yacco2::thd_ids_having_T*)&T_25 // raw_dc1
+ ,(yacco2::thd_ids_having_T*)&T_26 // raw_dc2
+ ,(yacco2::thd_ids_having_T*)&T_27 // raw_dc3
+ ,(yacco2::thd_ids_having_T*)&T_28 // raw_dc4
+ ,(yacco2::thd_ids_having_T*)&T_29 // raw_nak
+ ,(yacco2::thd_ids_having_T*)&T_30 // raw_syn
+ ,(yacco2::thd_ids_having_T*)&T_31 // raw_etb
+ ,(yacco2::thd_ids_having_T*)&T_32 // raw_can
+ ,(yacco2::thd_ids_having_T*)&T_33 // raw_em
+ ,(yacco2::thd_ids_having_T*)&T_34 // raw_sub
+ ,(yacco2::thd_ids_having_T*)&T_35 // raw_esc
+ ,(yacco2::thd_ids_having_T*)&T_36 // raw_fs
+ ,(yacco2::thd_ids_having_T*)&T_37 // raw_gs
+ ,(yacco2::thd_ids_having_T*)&T_38 // raw_rs
+ ,(yacco2::thd_ids_having_T*)&T_39 // raw_us
+ ,(yacco2::thd_ids_having_T*)&T_40 // raw_sp
+ ,(yacco2::thd_ids_having_T*)&T_41 // raw_exclam
+ ,(yacco2::thd_ids_having_T*)&T_42 // raw_dbl_quote
+ ,(yacco2::thd_ids_having_T*)&T_43 // raw_no_sign
+ ,(yacco2::thd_ids_having_T*)&T_44 // raw_dollar_sign
+ ,(yacco2::thd_ids_having_T*)&T_45 // raw_percent
+ ,(yacco2::thd_ids_having_T*)&T_46 // raw_ampersign
+ ,(yacco2::thd_ids_having_T*)&T_47 // raw_right_quote
+ ,(yacco2::thd_ids_having_T*)&T_48 // raw_open_bracket
+ ,(yacco2::thd_ids_having_T*)&T_49 // raw_close_bracket
+ ,(yacco2::thd_ids_having_T*)&T_50 // raw_asteric
+ ,(yacco2::thd_ids_having_T*)&T_51 // raw_plus
+ ,(yacco2::thd_ids_having_T*)&T_52 // raw_comma
+ ,(yacco2::thd_ids_having_T*)&T_53 // raw_minus
+ ,(yacco2::thd_ids_having_T*)&T_54 // raw_period
+ ,(yacco2::thd_ids_having_T*)&T_55 // raw_slash
+ ,(yacco2::thd_ids_having_T*)&T_56 // raw_0
+ ,(yacco2::thd_ids_having_T*)&T_57 // raw_1
+ ,(yacco2::thd_ids_having_T*)&T_58 // raw_2
+ ,(yacco2::thd_ids_having_T*)&T_59 // raw_3
+ ,(yacco2::thd_ids_having_T*)&T_60 // raw_4
+ ,(yacco2::thd_ids_having_T*)&T_61 // raw_5
+ ,(yacco2::thd_ids_having_T*)&T_62 // raw_6
+ ,(yacco2::thd_ids_having_T*)&T_63 // raw_7
+ ,(yacco2::thd_ids_having_T*)&T_64 // raw_8
+ ,(yacco2::thd_ids_having_T*)&T_65 // raw_9
+ ,(yacco2::thd_ids_having_T*)&T_66 // raw_colon
+ ,(yacco2::thd_ids_having_T*)&T_67 // raw_semi_colon
+ ,(yacco2::thd_ids_having_T*)&T_68 // raw_less_than
+ ,(yacco2::thd_ids_having_T*)&T_69 // raw_eq
+ ,(yacco2::thd_ids_having_T*)&T_70 // raw_gt_than
+ ,(yacco2::thd_ids_having_T*)&T_71 // raw_question_mark
+ ,(yacco2::thd_ids_having_T*)&T_72 // raw_at_sign
+ ,(yacco2::thd_ids_having_T*)&T_73 // raw_A
+ ,(yacco2::thd_ids_having_T*)&T_74 // raw_B
+ ,(yacco2::thd_ids_having_T*)&T_75 // raw_C
+ ,(yacco2::thd_ids_having_T*)&T_76 // raw_D
+ ,(yacco2::thd_ids_having_T*)&T_77 // raw_E
+ ,(yacco2::thd_ids_having_T*)&T_78 // raw_F
+ ,(yacco2::thd_ids_having_T*)&T_79 // raw_G
+ ,(yacco2::thd_ids_having_T*)&T_80 // raw_H
+ ,(yacco2::thd_ids_having_T*)&T_81 // raw_I
+ ,(yacco2::thd_ids_having_T*)&T_82 // raw_J
+ ,(yacco2::thd_ids_having_T*)&T_83 // raw_K
+ ,(yacco2::thd_ids_having_T*)&T_84 // raw_L
+ ,(yacco2::thd_ids_having_T*)&T_85 // raw_M
+ ,(yacco2::thd_ids_having_T*)&T_86 // raw_N
+ ,(yacco2::thd_ids_having_T*)&T_87 // raw_O
+ ,(yacco2::thd_ids_having_T*)&T_88 // raw_P
+ ,(yacco2::thd_ids_having_T*)&T_89 // raw_Q
+ ,(yacco2::thd_ids_having_T*)&T_90 // raw_R
+ ,(yacco2::thd_ids_having_T*)&T_91 // raw_S
+ ,(yacco2::thd_ids_having_T*)&T_92 // raw_T
+ ,(yacco2::thd_ids_having_T*)&T_93 // raw_U
+ ,(yacco2::thd_ids_having_T*)&T_94 // raw_V
+ ,(yacco2::thd_ids_having_T*)&T_95 // raw_W
+ ,(yacco2::thd_ids_having_T*)&T_96 // raw_X
+ ,(yacco2::thd_ids_having_T*)&T_97 // raw_Y
+ ,(yacco2::thd_ids_having_T*)&T_98 // raw_Z
+ ,(yacco2::thd_ids_having_T*)&T_99 // raw_open_sq_bracket
+ ,(yacco2::thd_ids_having_T*)&T_100 // raw_back_slash
+ ,(yacco2::thd_ids_having_T*)&T_101 // raw_close_sq_bracket
+ ,(yacco2::thd_ids_having_T*)&T_102 // raw_up_arrow
+ ,(yacco2::thd_ids_having_T*)&T_103 // raw_under_score
+ ,(yacco2::thd_ids_having_T*)&T_104 // raw_left_quote
+ ,(yacco2::thd_ids_having_T*)&T_105 // raw_a
+ ,(yacco2::thd_ids_having_T*)&T_106 // raw_b
+ ,(yacco2::thd_ids_having_T*)&T_107 // raw_c
+ ,(yacco2::thd_ids_having_T*)&T_108 // raw_d
+ ,(yacco2::thd_ids_having_T*)&T_109 // raw_e
+ ,(yacco2::thd_ids_having_T*)&T_110 // raw_f
+ ,(yacco2::thd_ids_having_T*)&T_111 // raw_g
+ ,(yacco2::thd_ids_having_T*)&T_112 // raw_h
+ ,(yacco2::thd_ids_having_T*)&T_113 // raw_i
+ ,(yacco2::thd_ids_having_T*)&T_114 // raw_j
+ ,(yacco2::thd_ids_having_T*)&T_115 // raw_k
+ ,(yacco2::thd_ids_having_T*)&T_116 // raw_l
+ ,(yacco2::thd_ids_having_T*)&T_117 // raw_m
+ ,(yacco2::thd_ids_having_T*)&T_118 // raw_n
+ ,(yacco2::thd_ids_having_T*)&T_119 // raw_o
+ ,(yacco2::thd_ids_having_T*)&T_120 // raw_p
+ ,(yacco2::thd_ids_having_T*)&T_121 // raw_q
+ ,(yacco2::thd_ids_having_T*)&T_122 // raw_r
+ ,(yacco2::thd_ids_having_T*)&T_123 // raw_s
+ ,(yacco2::thd_ids_having_T*)&T_124 // raw_t
+ ,(yacco2::thd_ids_having_T*)&T_125 // raw_u
+ ,(yacco2::thd_ids_having_T*)&T_126 // raw_v
+ ,(yacco2::thd_ids_having_T*)&T_127 // raw_w
+ ,(yacco2::thd_ids_having_T*)&T_128 // raw_x
+ ,(yacco2::thd_ids_having_T*)&T_129 // raw_y
+ ,(yacco2::thd_ids_having_T*)&T_130 // raw_z
+ ,(yacco2::thd_ids_having_T*)&T_131 // raw_open_brace
+ ,(yacco2::thd_ids_having_T*)&T_132 // raw_vertical_line
+ ,(yacco2::thd_ids_having_T*)&T_133 // raw_close_brace
+ ,(yacco2::thd_ids_having_T*)&T_134 // raw_tilde
+ ,(yacco2::thd_ids_having_T*)&T_135 // raw_del
+ ,(yacco2::thd_ids_having_T*)&T_136 // raw_x80
+ ,(yacco2::thd_ids_having_T*)&T_137 // raw_x81
+ ,(yacco2::thd_ids_having_T*)&T_138 // raw_x82
+ ,(yacco2::thd_ids_having_T*)&T_139 // raw_x83
+ ,(yacco2::thd_ids_having_T*)&T_140 // raw_x84
+ ,(yacco2::thd_ids_having_T*)&T_141 // raw_x85
+ ,(yacco2::thd_ids_having_T*)&T_142 // raw_x86
+ ,(yacco2::thd_ids_having_T*)&T_143 // raw_x87
+ ,(yacco2::thd_ids_having_T*)&T_144 // raw_x88
+ ,(yacco2::thd_ids_having_T*)&T_145 // raw_x89
+ ,(yacco2::thd_ids_having_T*)&T_146 // raw_x8a
+ ,(yacco2::thd_ids_having_T*)&T_147 // raw_x8b
+ ,(yacco2::thd_ids_having_T*)&T_148 // raw_x8c
+ ,(yacco2::thd_ids_having_T*)&T_149 // raw_x8d
+ ,(yacco2::thd_ids_having_T*)&T_150 // raw_x8e
+ ,(yacco2::thd_ids_having_T*)&T_151 // raw_x8f
+ ,(yacco2::thd_ids_having_T*)&T_152 // raw_x90
+ ,(yacco2::thd_ids_having_T*)&T_153 // raw_x91
+ ,(yacco2::thd_ids_having_T*)&T_154 // raw_x92
+ ,(yacco2::thd_ids_having_T*)&T_155 // raw_x93
+ ,(yacco2::thd_ids_having_T*)&T_156 // raw_x94
+ ,(yacco2::thd_ids_having_T*)&T_157 // raw_x95
+ ,(yacco2::thd_ids_having_T*)&T_158 // raw_x96
+ ,(yacco2::thd_ids_having_T*)&T_159 // raw_x97
+ ,(yacco2::thd_ids_having_T*)&T_160 // raw_x98
+ ,(yacco2::thd_ids_having_T*)&T_161 // raw_x99
+ ,(yacco2::thd_ids_having_T*)&T_162 // raw_x9a
+ ,(yacco2::thd_ids_having_T*)&T_163 // raw_x9b
+ ,(yacco2::thd_ids_having_T*)&T_164 // raw_x9c
+ ,(yacco2::thd_ids_having_T*)&T_165 // raw_x9d
+ ,(yacco2::thd_ids_having_T*)&T_166 // raw_x9e
+ ,(yacco2::thd_ids_having_T*)&T_167 // raw_x9f
+ ,(yacco2::thd_ids_having_T*)&T_168 // raw_xa0
+ ,(yacco2::thd_ids_having_T*)&T_169 // raw_xa1
+ ,(yacco2::thd_ids_having_T*)&T_170 // raw_xa2
+ ,(yacco2::thd_ids_having_T*)&T_171 // raw_xa3
+ ,(yacco2::thd_ids_having_T*)&T_172 // raw_xa4
+ ,(yacco2::thd_ids_having_T*)&T_173 // raw_xa5
+ ,(yacco2::thd_ids_having_T*)&T_174 // raw_xa6
+ ,(yacco2::thd_ids_having_T*)&T_175 // raw_xa7
+ ,(yacco2::thd_ids_having_T*)&T_176 // raw_xa8
+ ,(yacco2::thd_ids_having_T*)&T_177 // raw_xa9
+ ,(yacco2::thd_ids_having_T*)&T_178 // raw_xaa
+ ,(yacco2::thd_ids_having_T*)&T_179 // raw_xab
+ ,(yacco2::thd_ids_having_T*)&T_180 // raw_xac
+ ,(yacco2::thd_ids_having_T*)&T_181 // raw_xad
+ ,(yacco2::thd_ids_having_T*)&T_182 // raw_xae
+ ,(yacco2::thd_ids_having_T*)&T_183 // raw_xaf
+ ,(yacco2::thd_ids_having_T*)&T_184 // raw_xb0
+ ,(yacco2::thd_ids_having_T*)&T_185 // raw_xb1
+ ,(yacco2::thd_ids_having_T*)&T_186 // raw_xb2
+ ,(yacco2::thd_ids_having_T*)&T_187 // raw_xb3
+ ,(yacco2::thd_ids_having_T*)&T_188 // raw_xb4
+ ,(yacco2::thd_ids_having_T*)&T_189 // raw_xb5
+ ,(yacco2::thd_ids_having_T*)&T_190 // raw_xb6
+ ,(yacco2::thd_ids_having_T*)&T_191 // raw_xb7
+ ,(yacco2::thd_ids_having_T*)&T_192 // raw_xb8
+ ,(yacco2::thd_ids_having_T*)&T_193 // raw_xb9
+ ,(yacco2::thd_ids_having_T*)&T_194 // raw_xba
+ ,(yacco2::thd_ids_having_T*)&T_195 // raw_xbb
+ ,(yacco2::thd_ids_having_T*)&T_196 // raw_xbc
+ ,(yacco2::thd_ids_having_T*)&T_197 // raw_xbd
+ ,(yacco2::thd_ids_having_T*)&T_198 // raw_xbe
+ ,(yacco2::thd_ids_having_T*)&T_199 // raw_xbf
+ ,(yacco2::thd_ids_having_T*)&T_200 // raw_xc0
+ ,(yacco2::thd_ids_having_T*)&T_201 // raw_xc1
+ ,(yacco2::thd_ids_having_T*)&T_202 // raw_xc2
+ ,(yacco2::thd_ids_having_T*)&T_203 // raw_xc3
+ ,(yacco2::thd_ids_having_T*)&T_204 // raw_xc4
+ ,(yacco2::thd_ids_having_T*)&T_205 // raw_xc5
+ ,(yacco2::thd_ids_having_T*)&T_206 // raw_xc6
+ ,(yacco2::thd_ids_having_T*)&T_207 // raw_xc7
+ ,(yacco2::thd_ids_having_T*)&T_208 // raw_xc8
+ ,(yacco2::thd_ids_having_T*)&T_209 // raw_xc9
+ ,(yacco2::thd_ids_having_T*)&T_210 // raw_xca
+ ,(yacco2::thd_ids_having_T*)&T_211 // raw_xcb
+ ,(yacco2::thd_ids_having_T*)&T_212 // raw_xcc
+ ,(yacco2::thd_ids_having_T*)&T_213 // raw_xcd
+ ,(yacco2::thd_ids_having_T*)&T_214 // raw_xce
+ ,(yacco2::thd_ids_having_T*)&T_215 // raw_xcf
+ ,(yacco2::thd_ids_having_T*)&T_216 // raw_xd0
+ ,(yacco2::thd_ids_having_T*)&T_217 // raw_xd1
+ ,(yacco2::thd_ids_having_T*)&T_218 // raw_xd2
+ ,(yacco2::thd_ids_having_T*)&T_219 // raw_xd3
+ ,(yacco2::thd_ids_having_T*)&T_220 // raw_xd4
+ ,(yacco2::thd_ids_having_T*)&T_221 // raw_xd5
+ ,(yacco2::thd_ids_having_T*)&T_222 // raw_xd6
+ ,(yacco2::thd_ids_having_T*)&T_223 // raw_xd7
+ ,(yacco2::thd_ids_having_T*)&T_224 // raw_xd8
+ ,(yacco2::thd_ids_having_T*)&T_225 // raw_xd9
+ ,(yacco2::thd_ids_having_T*)&T_226 // raw_xda
+ ,(yacco2::thd_ids_having_T*)&T_227 // raw_xdb
+ ,(yacco2::thd_ids_having_T*)&T_228 // raw_xdc
+ ,(yacco2::thd_ids_having_T*)&T_229 // raw_xdd
+ ,(yacco2::thd_ids_having_T*)&T_230 // raw_xde
+ ,(yacco2::thd_ids_having_T*)&T_231 // raw_xdf
+ ,(yacco2::thd_ids_having_T*)&T_232 // raw_xe0
+ ,(yacco2::thd_ids_having_T*)&T_233 // raw_xe1
+ ,(yacco2::thd_ids_having_T*)&T_234 // raw_xe2
+ ,(yacco2::thd_ids_having_T*)&T_235 // raw_xe3
+ ,(yacco2::thd_ids_having_T*)&T_236 // raw_xe4
+ ,(yacco2::thd_ids_having_T*)&T_237 // raw_xe5
+ ,(yacco2::thd_ids_having_T*)&T_238 // raw_xe6
+ ,(yacco2::thd_ids_having_T*)&T_239 // raw_xe7
+ ,(yacco2::thd_ids_having_T*)&T_240 // raw_xe8
+ ,(yacco2::thd_ids_having_T*)&T_241 // raw_xe9
+ ,(yacco2::thd_ids_having_T*)&T_242 // raw_xea
+ ,(yacco2::thd_ids_having_T*)&T_243 // raw_xeb
+ ,(yacco2::thd_ids_having_T*)&T_244 // raw_xec
+ ,(yacco2::thd_ids_having_T*)&T_245 // raw_xed
+ ,(yacco2::thd_ids_having_T*)&T_246 // raw_xee
+ ,(yacco2::thd_ids_having_T*)&T_247 // raw_xef
+ ,(yacco2::thd_ids_having_T*)&T_248 // raw_xf0
+ ,(yacco2::thd_ids_having_T*)&T_249 // raw_xf1
+ ,(yacco2::thd_ids_having_T*)&T_250 // raw_xf2
+ ,(yacco2::thd_ids_having_T*)&T_251 // raw_xf3
+ ,(yacco2::thd_ids_having_T*)&T_252 // raw_xf4
+ ,(yacco2::thd_ids_having_T*)&T_253 // raw_xf5
+ ,(yacco2::thd_ids_having_T*)&T_254 // raw_xf6
+ ,(yacco2::thd_ids_having_T*)&T_255 // raw_xf7
+ ,(yacco2::thd_ids_having_T*)&T_256 // raw_xf8
+ ,(yacco2::thd_ids_having_T*)&T_257 // raw_xf9
+ ,(yacco2::thd_ids_having_T*)&T_258 // raw_xfa
+ ,(yacco2::thd_ids_having_T*)&T_259 // raw_xfb
+ ,(yacco2::thd_ids_having_T*)&T_260 // raw_xfc
+ ,(yacco2::thd_ids_having_T*)&T_261 // raw_xfd
+ ,(yacco2::thd_ids_having_T*)&T_262 // raw_xfe
+ ,(yacco2::thd_ids_having_T*)&T_263 // raw_xff
+ ,(yacco2::thd_ids_having_T*)&T_264 // T_option_t
+ ,(yacco2::thd_ids_having_T*)&T_265 // T_option_p
+ ,(yacco2::thd_ids_having_T*)&T_266 // T_option_err
+ ,(yacco2::thd_ids_having_T*)&T_267 // T_esc_seq
+ ,(yacco2::thd_ids_having_T*)&T_268 // T_eol
+ ,(yacco2::thd_ids_having_T*)&T_269 // T_basic_char
+ ,(yacco2::thd_ids_having_T*)&T_270 // T_raw_char
+ ,(yacco2::thd_ids_having_T*)&T_271 // T_comment
+ ,(yacco2::thd_ids_having_T*)&T_272 // T_ws
+ ,(yacco2::thd_ids_having_T*)&T_273 // T_angled_string
+ ,(yacco2::thd_ids_having_T*)&T_274 // T_c_literal
+ ,(yacco2::thd_ids_having_T*)&T_275 // T_c_string
+ ,(yacco2::thd_ids_having_T*)&T_276 // T_xc_str
+ ,(yacco2::thd_ids_having_T*)&T_277 // T_unquoted_string
+ ,(yacco2::thd_ids_having_T*)&T_278 // T_file_inclusion
+ ,(yacco2::thd_ids_having_T*)&T_279 // T_identifier
+ ,(yacco2::thd_ids_having_T*)&T_280 // T_int_no
+ ,(yacco2::thd_ids_having_T*)&T_281 // T_raw_characters
+ ,(yacco2::thd_ids_having_T*)&T_282 // T_lr1_constant_symbols
+ ,(yacco2::thd_ids_having_T*)&T_283 // T_error_symbols
+ ,(yacco2::thd_ids_having_T*)&T_284 // T_eocode
+ ,(yacco2::thd_ids_having_T*)&T_285 // T_AD
+ ,(yacco2::thd_ids_having_T*)&T_286 // T_AB
+ ,(yacco2::thd_ids_having_T*)&T_287 // T_parallel_la_boundary
+ ,(yacco2::thd_ids_having_T*)&T_288 // T_arbitrator_code
+ ,(yacco2::thd_ids_having_T*)&T_289 // T_parallel_parser
+ ,(yacco2::thd_ids_having_T*)&T_290 // T_parallel_thread_function
+ ,(yacco2::thd_ids_having_T*)&T_291 // T_parallel_control_monitor
+ ,(yacco2::thd_ids_having_T*)&T_292 // T_fsm
+ ,(yacco2::thd_ids_having_T*)&T_293 // T_fsm_id
+ ,(yacco2::thd_ids_having_T*)&T_294 // T_fsm_filename
+ ,(yacco2::thd_ids_having_T*)&T_295 // T_fsm_namespace
+ ,(yacco2::thd_ids_having_T*)&T_296 // T_fsm_class
+ ,(yacco2::thd_ids_having_T*)&T_297 // T_fsm_version
+ ,(yacco2::thd_ids_having_T*)&T_298 // T_fsm_date
+ ,(yacco2::thd_ids_having_T*)&T_299 // T_fsm_debug
+ ,(yacco2::thd_ids_having_T*)&T_300 // T_fsm_comments
+ ,(yacco2::thd_ids_having_T*)&T_301 // T_terminals
+ ,(yacco2::thd_ids_having_T*)&T_302 // T_enumeration
+ ,(yacco2::thd_ids_having_T*)&T_303 // T_file_name
+ ,(yacco2::thd_ids_having_T*)&T_304 // T_name_space
+ ,(yacco2::thd_ids_having_T*)&T_305 // T_sym_class
+ ,(yacco2::thd_ids_having_T*)&T_306 // T_rules
+ ,(yacco2::thd_ids_having_T*)&T_307 // T_lhs
+ ,(yacco2::thd_ids_having_T*)&T_308 // T_user_declaration
+ ,(yacco2::thd_ids_having_T*)&T_309 // T_user_prefix_declaration
+ ,(yacco2::thd_ids_having_T*)&T_310 // T_user_suffix_declaration
+ ,(yacco2::thd_ids_having_T*)&T_311 // T_constructor
+ ,(yacco2::thd_ids_having_T*)&T_312 // T_destructor
+ ,(yacco2::thd_ids_having_T*)&T_313 // T_op
+ ,(yacco2::thd_ids_having_T*)&T_314 // T_failed
+ ,(yacco2::thd_ids_having_T*)&T_315 // T_user_implementation
+ ,(yacco2::thd_ids_having_T*)&T_316 // T_user_imp_tbl
+ ,(yacco2::thd_ids_having_T*)&T_317 // T_user_imp_sym
+ ,(yacco2::thd_ids_having_T*)&T_318 // T_constant_defs
+ ,(yacco2::thd_ids_having_T*)&T_319 // T_terminals_refs
+ ,(yacco2::thd_ids_having_T*)&T_320 // T_terminals_sufx
+ ,(yacco2::thd_ids_having_T*)&T_321 // T_lrk_sufx
+ ,(yacco2::thd_ids_having_T*)&T_322 // T_selector
+ ,(yacco2::thd_ids_having_T*)&T_323 // T_NULL
+ ,(yacco2::thd_ids_having_T*)&T_324 // T_2colon
+ ,(yacco2::thd_ids_having_T*)&T_325 // T_block
+ ,(yacco2::thd_ids_having_T*)&T_326 // T_syntax_code
+ ,(yacco2::thd_ids_having_T*)&T_327 // T_fsm_class_phrase
+ ,(yacco2::thd_ids_having_T*)&T_328 // T_fsm_phrase
+ ,(yacco2::thd_ids_having_T*)&T_329 // T_parallel_parser_phrase
+ ,(yacco2::thd_ids_having_T*)&T_330 // T_enum_phrase
+ ,(yacco2::thd_ids_having_T*)&T_331 // T_terminal_def
+ ,(yacco2::thd_ids_having_T*)&T_332 // table_entry
+ ,(yacco2::thd_ids_having_T*)&T_333 // T_sym_tbl_report_card
+ ,(yacco2::thd_ids_having_T*)&T_334 // T_terminals_phrase
+ ,(yacco2::thd_ids_having_T*)&T_335 // T_error_symbols_phrase
+ ,(yacco2::thd_ids_having_T*)&T_336 // T_lr1_k_phrase
+ ,(yacco2::thd_ids_having_T*)&T_337 // T_rc_phrase
+ ,(yacco2::thd_ids_having_T*)&T_338 // T_rule_lhs_phrase
+ ,(yacco2::thd_ids_having_T*)&T_339 // T_parallel_monitor_phrase
+ ,(yacco2::thd_ids_having_T*)&T_340 // rule_def
+ ,(yacco2::thd_ids_having_T*)&T_341 // T_rules_phrase
+ ,(yacco2::thd_ids_having_T*)&T_342 // T_subrule_def
+ ,(yacco2::thd_ids_having_T*)&T_343 // T_subrules_phrase
+ ,(yacco2::thd_ids_having_T*)&T_344 // T_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_345 // refered_T
+ ,(yacco2::thd_ids_having_T*)&T_346 // rule_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_347 // refered_rule
+ ,(yacco2::thd_ids_having_T*)&T_348 // T_transitive
+ ,(yacco2::thd_ids_having_T*)&T_349 // T_grammar_name
+ ,(yacco2::thd_ids_having_T*)&T_350 // T_thread_name
+ ,(yacco2::thd_ids_having_T*)&T_351 // T_monolithic
+ ,(yacco2::thd_ids_having_T*)&T_352 // T_no_of_T
+ ,(yacco2::thd_ids_having_T*)&T_353 // T_list_of_native_first_set_terminals
+ ,(yacco2::thd_ids_having_T*)&T_354 // T_end_list_of_native_first_set_terminals
+ ,(yacco2::thd_ids_having_T*)&T_355 // T_list_of_transitive_threads
+ ,(yacco2::thd_ids_having_T*)&T_356 // T_end_list_of_transitive_threads
+ ,(yacco2::thd_ids_having_T*)&T_357 // T_emitfile
+ ,(yacco2::thd_ids_having_T*)&T_358 // T_preamble
+ ,(yacco2::thd_ids_having_T*)&T_359 // T_end_preamble
+ ,(yacco2::thd_ids_having_T*)&T_360 // T_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_361 // T_end_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_362 // T_file_of_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_363 // T_attributes
+ ,(yacco2::thd_ids_having_T*)&T_364 // tth_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_365 // thread_attributes
+ ,(yacco2::thd_ids_having_T*)&T_366 // th_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_367 // kw_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_368 // T_la_expr_src
+ ,(yacco2::thd_ids_having_T*)&T_369 // T_eosubrule
+ ,(yacco2::thd_ids_having_T*)&T_370 // T_called_thread_eosubrule
+ ,(yacco2::thd_ids_having_T*)&T_371 // T_null_call_thread_eosubrule
+ ,(yacco2::thd_ids_having_T*)&T_372 // T_cweb_comment
+ ,(yacco2::thd_ids_having_T*)&T_373 // T_grammar_phrase
+ ,(yacco2::thd_ids_having_T*)&T_374 // T_cweb_marker
+ ,(yacco2::thd_ids_having_T*)&T_375 // T_lint
+ ,(yacco2::thd_ids_having_T*)&T_376 // T_list_of_used_threads
+ ,(yacco2::thd_ids_having_T*)&T_377 // T_end_list_of_used_threads
+ ,(yacco2::thd_ids_having_T*)&T_378 // Err_nested_files_exceeded
+ ,(yacco2::thd_ids_having_T*)&T_379 // Err_no_end_of_code
+ ,(yacco2::thd_ids_having_T*)&T_380 // Err_no_cmd_lne_data
+ ,(yacco2::thd_ids_having_T*)&T_381 // Err_no_filename
+ ,(yacco2::thd_ids_having_T*)&T_382 // Err_bad_filename
+ ,(yacco2::thd_ids_having_T*)&T_383 // Err_bad_fsmheader_filename
+ ,(yacco2::thd_ids_having_T*)&T_384 // Err_bad_fsmcpp_filename
+ ,(yacco2::thd_ids_having_T*)&T_385 // Err_bad_fsmsym_filename
+ ,(yacco2::thd_ids_having_T*)&T_386 // Err_bad_fsmtbl_filename
+ ,(yacco2::thd_ids_having_T*)&T_387 // Err_bad_enum_filename
+ ,(yacco2::thd_ids_having_T*)&T_388 // Err_bad_errors_hdrfilename
+ ,(yacco2::thd_ids_having_T*)&T_389 // Err_bad_errors_impfilename
+ ,(yacco2::thd_ids_having_T*)&T_390 // Err_bad_cmd_lne_opt
+ ,(yacco2::thd_ids_having_T*)&T_391 // Err_bad_int_no
+ ,(yacco2::thd_ids_having_T*)&T_392 // Err_bad_int_no_range
+ ,(yacco2::thd_ids_having_T*)&T_393 // Err_no_int_present
+ ,(yacco2::thd_ids_having_T*)&T_394 // Err_bad_eos
+ ,(yacco2::thd_ids_having_T*)&T_395 // Err_bad_esc
+ ,(yacco2::thd_ids_having_T*)&T_396 // Err_comment_overrun
+ ,(yacco2::thd_ids_having_T*)&T_397 // Err_bad_char
+ ,(yacco2::thd_ids_having_T*)&T_398 // Err_bad_univ_seq
+ ,(yacco2::thd_ids_having_T*)&T_399 // Err_improper_closing_of_rules
+ ,(yacco2::thd_ids_having_T*)&T_400 // Err_no_identifier_present
+ ,(yacco2::thd_ids_having_T*)&T_401 // Err_no_directive_present
+ ,(yacco2::thd_ids_having_T*)&T_402 // Err_duplicate_directive
+ ,(yacco2::thd_ids_having_T*)&T_403 // Err_no_syntax_code_present
+ ,(yacco2::thd_ids_having_T*)&T_404 // Err_no_open_parenthesis
+ ,(yacco2::thd_ids_having_T*)&T_405 // Err_no_close_parenthesis
+ ,(yacco2::thd_ids_having_T*)&T_406 // Err_no_fsm_id_present
+ ,(yacco2::thd_ids_having_T*)&T_407 // Err_no_fsm_id_string
+ ,(yacco2::thd_ids_having_T*)&T_408 // Err_no_fsm_filename_present
+ ,(yacco2::thd_ids_having_T*)&T_409 // Err_no_fsm_filename_id_present
+ ,(yacco2::thd_ids_having_T*)&T_410 // Err_no_comma_present
+ ,(yacco2::thd_ids_having_T*)&T_411 // Err_no_fsm_namespace_present
+ ,(yacco2::thd_ids_having_T*)&T_412 // Err_no_fsm_namespace_id_present
+ ,(yacco2::thd_ids_having_T*)&T_413 // Err_no_fsm_class_present
+ ,(yacco2::thd_ids_having_T*)&T_414 // Err_no_fsm_version_present
+ ,(yacco2::thd_ids_having_T*)&T_415 // Err_no_fsm_version_string
+ ,(yacco2::thd_ids_having_T*)&T_416 // Err_no_fsm_date_present
+ ,(yacco2::thd_ids_having_T*)&T_417 // Err_no_fsm_date_string
+ ,(yacco2::thd_ids_having_T*)&T_418 // Err_no_fsm_debug_present
+ ,(yacco2::thd_ids_having_T*)&T_419 // Err_no_fsm_debug_string
+ ,(yacco2::thd_ids_having_T*)&T_420 // Err_no_fsm_comments_present
+ ,(yacco2::thd_ids_having_T*)&T_421 // Err_no_fsm_comments_string
+ ,(yacco2::thd_ids_having_T*)&T_422 // Err_fsm_debug_string_not_true_or_false
+ ,(yacco2::thd_ids_having_T*)&T_423 // Err_no_pp_thread_function_present
+ ,(yacco2::thd_ids_having_T*)&T_424 // Err_no_pp_ctrl_mntor_kw_present
+ ,(yacco2::thd_ids_having_T*)&T_425 // Err_no_pp_fnct_id_present
+ ,(yacco2::thd_ids_having_T*)&T_426 // Err_no_pp_bndry_present
+ ,(yacco2::thd_ids_having_T*)&T_427 // Err_no_pp_la_bndary_expr_present
+ ,(yacco2::thd_ids_having_T*)&T_428 // Err_no_syntax_code_end_present
+ ,(yacco2::thd_ids_having_T*)&T_429 // Err_no_pp_code_present
+ ,(yacco2::thd_ids_having_T*)&T_430 // Err_no_pp_code_stc_present
+ ,(yacco2::thd_ids_having_T*)&T_431 // Err_not_arbitration_code_kw
+ ,(yacco2::thd_ids_having_T*)&T_432 // Err_no_open_brace
+ ,(yacco2::thd_ids_having_T*)&T_433 // Err_no_close_brace
+ ,(yacco2::thd_ids_having_T*)&T_434 // Err_no_constant_defs_present
+ ,(yacco2::thd_ids_having_T*)&T_435 // Err_no_filename_present
+ ,(yacco2::thd_ids_having_T*)&T_436 // Err_no_filename_id_present
+ ,(yacco2::thd_ids_having_T*)&T_437 // Err_no_namespace_present
+ ,(yacco2::thd_ids_having_T*)&T_438 // Err_no_namespace_id_present
+ ,(yacco2::thd_ids_having_T*)&T_439 // Err_no_kdefs_code_present
+ ,(yacco2::thd_ids_having_T*)&T_440 // Err_no_kdefs_kw_present
+ ,(yacco2::thd_ids_having_T*)&T_441 // Err_no_tdef_code_present
+ ,(yacco2::thd_ids_having_T*)&T_442 // Err_no_sym_defs_present
+ ,(yacco2::thd_ids_having_T*)&T_443 // Err_no_terminal_key_present
+ ,(yacco2::thd_ids_having_T*)&T_444 // Err_dup_entry_in_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_445 // Err_already_defined_AB
+ ,(yacco2::thd_ids_having_T*)&T_446 // Err_already_defined_AD
+ ,(yacco2::thd_ids_having_T*)&T_447 // Err_improper_directive
+ ,(yacco2::thd_ids_having_T*)&T_448 // Err_no_sym_class_present
+ ,(yacco2::thd_ids_having_T*)&T_449 // Err_no_sym_class_id_present
+ ,(yacco2::thd_ids_having_T*)&T_450 // Err_zero_len_sym
+ ,(yacco2::thd_ids_having_T*)&T_451 // Err_sym_tbl_full
+ ,(yacco2::thd_ids_having_T*)&T_452 // Err_sym_tbl_char_pool_full
+ ,(yacco2::thd_ids_having_T*)&T_453 // Err_dup_entry_in_sym_table
+ ,(yacco2::thd_ids_having_T*)&T_454 // Err_subscript_out_of_range
+ ,(yacco2::thd_ids_having_T*)&T_455 // Err_sym_tbl_nested_scope_stk_overflow
+ ,(yacco2::thd_ids_having_T*)&T_456 // Err_sym_tbl_nested_scope_stk_underflow
+ ,(yacco2::thd_ids_having_T*)&T_457 // Err_sym_tbl_context_buf_overflow
+ ,(yacco2::thd_ids_having_T*)&T_458 // Err_report_card_ptr_0
+ ,(yacco2::thd_ids_having_T*)&T_459 // Err_cannot_define_term_after_sufx_dir
+ ,(yacco2::thd_ids_having_T*)&T_460 // Err_dup_sufx_directive
+ ,(yacco2::thd_ids_having_T*)&T_461 // Err_terminals_refs_def_after_terminals
+ ,(yacco2::thd_ids_having_T*)&T_462 // Err_terminals_refs_dup_def
+ ,(yacco2::thd_ids_having_T*)&T_463 // Err_no_rule_name_present
+ ,(yacco2::thd_ids_having_T*)&T_464 // Err_no_sub_rule_present
+ ,(yacco2::thd_ids_having_T*)&T_465 // Err_subrule_use_undefined_T
+ ,(yacco2::thd_ids_having_T*)&T_466 // Err_stbl_entry_unknown
+ ,(yacco2::thd_ids_having_T*)&T_467 // Err_subrule_overrun
+ ,(yacco2::thd_ids_having_T*)&T_468 // Err_stble_has_entry_but_not_a_rule
+ ,(yacco2::thd_ids_having_T*)&T_469 // Err_file_of_T_alphabet_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_470 // Err_emitfile_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_471 // Err_preamble_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_472 // Err_preamble_srce_code_not_present
+ ,(yacco2::thd_ids_having_T*)&T_473 // Err_end_preamble_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_474 // Err_cmd_line_chaffe
+ ,(yacco2::thd_ids_having_T*)&T_475 // Err_T_alphabet_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_476 // Err_T_alphabet_file_not_present
+ ,(yacco2::thd_ids_having_T*)&T_477 // Err_end_T_alphabet_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_478 // Err_no_terminals_in_T_alphabet_list
+ ,(yacco2::thd_ids_having_T*)&T_479 // Err_rotten_chr_in_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_480 // Err_transitive_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_481 // Err_grammar_name_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_482 // Err_namespace_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_483 // Err_filename_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_484 // Err_threadname_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_485 // Err_monolithic_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_486 // Err_no_of_T_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_487 // Err_list_of_terminals_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_488 // Err_no_list_of_trans_threads_kw
+ ,(yacco2::thd_ids_having_T*)&T_489 // Err_no_terminals_present_in_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_490 // Err_transitive_value_bad
+ ,(yacco2::thd_ids_having_T*)&T_491 // Err_monolithic_value_bad
+ ,(yacco2::thd_ids_having_T*)&T_492 // Err_grammar_name_value_not_present
+ ,(yacco2::thd_ids_having_T*)&T_493 // Err_namespace_value_not_present
+ ,(yacco2::thd_ids_having_T*)&T_494 // Err_threadname_value_not_present
+ ,(yacco2::thd_ids_having_T*)&T_495 // Err_filename_value_not_present
+ ,(yacco2::thd_ids_having_T*)&T_496 // Err_no_of_T_value_not_present
+ ,(yacco2::thd_ids_having_T*)&T_497 // Err_no_of_terminals_not_present
+ ,(yacco2::thd_ids_having_T*)&T_498 // Err_end_list_native_T_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_499 // Err_end_list_of_transitive_threads_kw_not_present
+ ,(yacco2::thd_ids_having_T*)&T_500 // Err_no_of_native_Ts_in_list_not_equal
+ ,(yacco2::thd_ids_having_T*)&T_501 // Err_no_of_threads_in_list_not_equal
+ ,(yacco2::thd_ids_having_T*)&T_502 // Err_thread_refed_but_not_defined
+ ,(yacco2::thd_ids_having_T*)&T_503 // Err_bad_T_in_list
+ ,(yacco2::thd_ids_having_T*)&T_504 // Err_bad_th_in_list
+ ,(yacco2::thd_ids_having_T*)&T_505 // Err_already_defined_in_fsc_file
+ ,(yacco2::thd_ids_having_T*)&T_506 // Err_bad_thread_subscript
+ ,(yacco2::thd_ids_having_T*)&T_507 // Err_not_a_keyword
+ ,(yacco2::thd_ids_having_T*)&T_508 // Err_no_of_threads_not_present
+ ,(yacco2::thd_ids_having_T*)&T_509 // Err_bad_T_alphabet
+ ,(yacco2::thd_ids_having_T*)&T_510 // Err_fsc_file_does_not_exist
+ ,(yacco2::thd_ids_having_T*)&T_511 // Err_filename_file_does_not_exist
+ ,(yacco2::thd_ids_having_T*)&T_512 // Err_T_alphabet_file_does_not_exist
+ ,(yacco2::thd_ids_having_T*)&T_513 // Err_emitfile_file_does_not_exist
+ ,(yacco2::thd_ids_having_T*)&T_514 // Err_emitfile_file_not_present
+ ,(yacco2::thd_ids_having_T*)&T_515 // Err_fsc_cntl_file_not_present
+ ,(yacco2::thd_ids_having_T*)&T_516 // Err_file_of_T_alphabet_not_present
+ ,(yacco2::thd_ids_having_T*)&T_517 // Err_epsilon_pass_thru
+ ,(yacco2::thd_ids_having_T*)&T_518 // Err_epsilon_pass_thru_no_Ts
+ ,(yacco2::thd_ids_having_T*)&T_519 // Err_rule_not_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_520 // Err_T_not_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_521 // Err_bad_directive
+ ,(yacco2::thd_ids_having_T*)&T_522 // Err_bad_term_in_la_expr
+ ,(yacco2::thd_ids_having_T*)&T_523 // Err_empty_set_removal_in_la_expr
+ ,(yacco2::thd_ids_having_T*)&T_524 // Err_bad_operator_in_la_expr
+ ,(yacco2::thd_ids_having_T*)&T_525 // Err_not_a_lhs_kw
+ ,(yacco2::thd_ids_having_T*)&T_526 // Err_pp_la_boundary_attribute_not_fnd
+ ,(yacco2::thd_ids_having_T*)&T_527 // Err_already_processed_fsm_phase
+ ,(yacco2::thd_ids_having_T*)&T_528 // Err_already_processed_pp_phase
+ ,(yacco2::thd_ids_having_T*)&T_529 // Err_already_processed_T_enum_phase
+ ,(yacco2::thd_ids_having_T*)&T_530 // Err_already_processed_error_phase
+ ,(yacco2::thd_ids_having_T*)&T_531 // Err_already_processed_rc_phase
+ ,(yacco2::thd_ids_having_T*)&T_532 // Err_already_processed_lrk_phase
+ ,(yacco2::thd_ids_having_T*)&T_533 // Err_already_processed_T_phase
+ ,(yacco2::thd_ids_having_T*)&T_534 // Err_already_processed_rule_phase
+ ,(yacco2::thd_ids_having_T*)&T_535 // Err_not_T_for_rtned_token_from_th
+ ,(yacco2::thd_ids_having_T*)&T_536 // Err_not_id_for_ns_in_th_stmt
+ ,(yacco2::thd_ids_having_T*)&T_537 // Err_not_id_for_th_name_in_th_stmt
+ ,(yacco2::thd_ids_having_T*)&T_538 // Err_bad_th_qualifier
+ ,(yacco2::thd_ids_having_T*)&T_539 // Err_not_dbl_colon_in_th_stmt
+ ,(yacco2::thd_ids_having_T*)&T_540 // Err_not_T_or_R_in_subrule_expr
+ ,(yacco2::thd_ids_having_T*)&T_541 // Err_not_T_or_R_or_eos_in_subrule_expr
+ ,(yacco2::thd_ids_having_T*)&T_542 // Err_not_eos_in_subrule_expr
+ ,(yacco2::thd_ids_having_T*)&T_543 // Err_invalid_logical_name
+ ,(yacco2::thd_ids_having_T*)&T_544 // Err_invalid_logical_value
+ ,(yacco2::thd_ids_having_T*)&T_545 // Err_duplicate_logical_name
+ ,(yacco2::thd_ids_having_T*)&T_546 // Err_missing_terminals_refs_kw
+ ,(yacco2::thd_ids_having_T*)&T_547 // Err_missing_terminals_sufx_kw
+ ,(yacco2::thd_ids_having_T*)&T_548 // Err_not_a_terminal_definition
+ ,(yacco2::thd_ids_having_T*)&T_549 // Err_missing_lrk_sufx_kw
+ ,(yacco2::thd_ids_having_T*)&T_550 // ERR_sick_grammar
+ ,(yacco2::thd_ids_having_T*)&T_551 // ERR_no_fsm_phrase
+ ,(yacco2::thd_ids_having_T*)&T_552 // ERR_no_T_enum_phrase
+ ,(yacco2::thd_ids_having_T*)&T_553 // ERR_no_lrk_phrase
+ ,(yacco2::thd_ids_having_T*)&T_554 // ERR_no_rc_phrase
+ ,(yacco2::thd_ids_having_T*)&T_555 // ERR_no_errors_phrase
+ ,(yacco2::thd_ids_having_T*)&T_556 // ERR_no_terminals_phrase
+ ,(yacco2::thd_ids_having_T*)&T_557 // ERR_no_rules_phrase
+ ,(yacco2::thd_ids_having_T*)&T_558 // Err_used_rule_but_undefined
+ ,(yacco2::thd_ids_having_T*)&T_559 // Err_rule_already_defined
+ ,(yacco2::thd_ids_having_T*)&T_560 // Err_la_expr_calc_empty_set
+ ,(yacco2::thd_ids_having_T*)&T_561 // Err_no_close_brace_ending_rules_defs
+ ,(yacco2::thd_ids_having_T*)&T_562 // Err_use_of_T_outside_Rules_construct
+ ,(yacco2::thd_ids_having_T*)&T_563 // Err_not_kw_defining_grammar_construct
+ ,(yacco2::thd_ids_having_T*)&T_564 // Err_use_of_N_outside_Rules_construct
+ ,(yacco2::thd_ids_having_T*)&T_565 // Err_misplaced_or_misspelt_Rule_or_T
+ ,(yacco2::thd_ids_having_T*)&T_566 // Err_not_a_Rule
+ ,(yacco2::thd_ids_having_T*)&T_567 // Err_empty_file
+ ,(yacco2::thd_ids_having_T*)&T_568 // Err_not_lhs_pcnrl_mntr
+ }
+};
+void* yacco2::T_ARRAY_HAVING_THD_IDS__ = (void*)&t_array;
diff --git a/web/yacco2/compiler/grammars/yacco2_stbl.cpp b/web/yacco2/compiler/grammars/yacco2_stbl.cpp
new file mode 100644
index 0000000000..c60f711da6
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_stbl.cpp
@@ -0,0 +1,391 @@
+/*9:*/
+#line 260 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+/*22:*/
+#line 462 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+#include "yacco2_stbl.h"
+
+/*:22*/
+#line 261 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+/*20:*/
+#line 454 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+table_entry yacco2_stbl::stbl[hash_table_size]= {table_entry()};
+char yacco2_stbl::char_pool_[char_pool_size]= {};
+int yacco2_stbl::char_pool_idx_(0);
+
+/*:20*//*24:*/
+#line 504 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+void yacco2_stbl::hash_fnct(T_sym_tbl_report_card&Report,const char&Key)
+{
+Report.pos_= -1;
+Report.key_len_= strlen(&Key);
+if(Report.key_len_==0){
+Report.status_= T_sym_tbl_report_card::failure;
+Report.err_entry_= new Err_zero_len_sym;
+return;
+}
+Report.key_len_+= 1;
+const char*k= &Key;
+Report.pos_= *k++;
+for(;*k!=0;++k){
+Report.pos_= ((Report.pos_*257)+*k)%hash_table_size;
+}
+Report.status_= T_sym_tbl_report_card::okay;
+}
+
+/*:24*//*25:*/
+#line 548 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+void yacco2_stbl::add_sym_to_stbl
+(T_sym_tbl_report_card&Report
+,const char&Name
+,yacco2::CAbs_lr1_sym&Sym
+,table_entry::defined_or_used_typ Why
+,table_entry::entry_typ What)
+{
+static int guest_cnt(0);
+hash:/*21:*/
+#line 459 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+yacco2_stbl::hash_fnct(Report,Name);
+/*:21*/
+#line 557 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*26:*/
+#line 566 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+if(Report.status_==T_sym_tbl_report_card::failure)return;
+if(Report.status_==T_sym_tbl_report_card::fatal)return;
+
+
+/*:26*/
+#line 558 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+compare:/*27:*/
+#line 572 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+table_entry*te= &yacco2_stbl::stbl[Report.pos_];
+int r(0);
+if(te->vacant_==true)goto insert;
+
+r= strcmp(te->key_,&Name);
+if(r==0){
+Report.status_= T_sym_tbl_report_card::failure;
+Report.err_entry_= new Err_dup_entry_in_sym_table;
+Report.tbl_entry_= te;
+Report.key_len_= 0;
+return;
+}
+
+/*:27*/
+#line 559 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+advance:/*28:*/
+#line 587 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+--Report.pos_;
+if(Report.pos_<0)Report.pos_+= hash_table_size;
+goto compare;
+
+/*:28*/
+#line 560 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+insert:/*29:*/
+#line 593 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+if(guest_cnt==hash_table_full){
+Report.status_= T_sym_tbl_report_card::failure;
+Report.err_entry_= new Err_sym_tbl_full;
+return;
+}
+if(char_pool_idx_+Report.key_len_> char_pool_size){
+Report.status_= T_sym_tbl_report_card::failure;
+Report.err_entry_= new Err_sym_tbl_char_pool_full;
+return;
+}
+++guest_cnt;
+te->pos_= Report.pos_;
+te->vacant_= false;
+char*key_name= &char_pool_[char_pool_idx_];
+strncpy(key_name,&Name,Report.key_len_);
+te->key_= key_name;
+te->key_len_= Report.key_len_;
+char_pool_idx_+= Report.key_len_;
+te->symbol_= &Sym;
+te->type_= What;
+if(Why==table_entry::used)
+te->used_= true;
+else
+te->defined_= true;
+Report.status_= T_sym_tbl_report_card::okay;
+Report.action_= T_sym_tbl_report_card::inserted;
+Report.tbl_entry_= te;
+
+
+
+/*:29*/
+#line 561 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+}
+
+
+/*:25*//*30:*/
+#line 644 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+void yacco2_stbl::find_sym_in_stbl(T_sym_tbl_report_card&Report,const char&Name)
+{
+hash:/*21:*/
+#line 459 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+yacco2_stbl::hash_fnct(Report,Name);
+/*:21*/
+#line 647 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*26:*/
+#line 566 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+if(Report.status_==T_sym_tbl_report_card::failure)return;
+if(Report.status_==T_sym_tbl_report_card::fatal)return;
+
+
+/*:26*/
+#line 648 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+compare:/*31:*/
+#line 654 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+Report.tbl_entry_= &yacco2_stbl::stbl[Report.pos_];
+table_entry*te= Report.tbl_entry_;
+if(te->vacant_==true){
+Report.status_= T_sym_tbl_report_card::okay;
+Report.action_= T_sym_tbl_report_card::not_fnd;
+return;
+}
+int r= strcmp(te->key_,&Name);
+if(r==0){
+Report.status_= T_sym_tbl_report_card::okay;
+Report.action_= T_sym_tbl_report_card::fnd;
+return;
+}
+
+/*:31*/
+#line 649 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+advance:/*32:*/
+#line 670 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+--Report.pos_;
+if(Report.pos_<0)Report.pos_+= hash_table_size;
+goto compare;
+
+/*:32*/
+#line 650 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+}
+
+/*:30*//*33:*/
+#line 684 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+void yacco2_stbl::get_sym_entry_by_sub(T_sym_tbl_report_card&Report,int Sub)
+{
+Report.pos_= Sub;
+if((Sub<0)||(Sub> hash_table_full)){
+Report.status_= T_sym_tbl_report_card::failure;
+Report.err_entry_= new Err_subscript_out_of_range;
+return;
+}
+Report.tbl_entry_= &yacco2_stbl::stbl[Sub];
+Report.status_= T_sym_tbl_report_card::okay;
+if(Report.tbl_entry_->vacant_==false)
+Report.action_= T_sym_tbl_report_card::fnd;
+else
+Report.action_= T_sym_tbl_report_card::not_fnd;
+}
+
+
+/*:33*//*34:*/
+#line 710 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+void yacco2_stbl::test_program()
+{
+/*8:*/
+#line 256 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+using namespace yacco2_stbl;
+
+/*:8*/
+#line 713 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*35:*/
+#line 724 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+const char*zero_len_name= "";
+T_eol*a_good_sym= new T_eol;
+int cnt(0);
+T_sym_tbl_report_card report_card;
+std::cout<<"Prime number used: "<<hash_table_size<<std::endl;
+std::cout<<"Test zero len key"<<std::endl;
+add_sym_to_stbl(report_card,*zero_len_name,*a_good_sym,table_entry::used,table_entry::terminal);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error zero_len_name: "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+std::cout<<"Should have been a zero_len_name error "<<std::endl;
+}
+
+/*:35*/
+#line 714 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*36:*/
+#line 740 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+char buf[256];
+std::string*sbuf[hash_table_size];
+sbuf[1]= new string("1");
+const char*f1st_dup= "1";
+std::cout<<"1st entry test"<<std::endl;
+add_sym_to_stbl(report_card,*sbuf[1]->c_str(),*a_good_sym,table_entry::defed,table_entry::rule);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error first entry failed: "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}
+
+std::cout<<"duplicate entry test"<<std::endl;
+add_sym_to_stbl(report_card,*f1st_dup,*a_good_sym,table_entry::defed,table_entry::rule);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error duplicate entry: "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+std::cout<<"Should have been a duplicate entry error "<<std::endl;
+}
+
+cout<<"Same key address test "<<endl;
+add_sym_to_stbl(report_card,*sbuf[1]->c_str(),*a_good_sym,table_entry::defed,table_entry::rule);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error same key address: "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+std::cout<<"Should have been a same key address error "<<std::endl;
+}
+
+/*:36*/
+#line 715 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*37:*/
+#line 771 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+const char*numeric_key= "%i";
+std::cout<<"Fill up balance of table"<<std::endl;
+for(cnt= 2;cnt<=hash_table_full;++cnt){
+sprintf(buf,numeric_key,cnt);
+sbuf[cnt]= new string(buf);
+add_sym_to_stbl(report_card,*sbuf[cnt]->c_str()
+,*a_good_sym,table_entry::defed,table_entry::rule);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error entry failed: "<<cnt<<" "
+<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}
+}
+
+/*:37*/
+#line 716 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*38:*/
+#line 787 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+const char*overflow_key= "overflow";
+std::cout<<"Overflow test"<<std::endl;
+add_sym_to_stbl(report_card,*overflow_key,*a_good_sym,table_entry::defed,table_entry::rule);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error overflow: "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+std::cout<<"Should be overflow error"<<std::endl;
+}
+
+/*:38*/
+#line 717 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*39:*/
+#line 801 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+std::cout<<"Find symbol test"<<std::endl;
+for(cnt= 1;cnt<=hash_table_full;++cnt){
+find_sym_in_stbl(report_card,*sbuf[cnt]->c_str());
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error Should have been found: "<<cnt
+<<" "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+if(report_card.action_==T_sym_tbl_report_card::not_fnd){
+std::cout<<"Error Action should have been found: "<<cnt<<std::endl;
+}
+}
+}
+std::cout<<"Not found test"<<std::endl;
+find_sym_in_stbl(report_card,*overflow_key);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Should not be an error: "<<cnt
+<<" "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+if(report_card.action_==T_sym_tbl_report_card::fnd){
+std::cout<<"Error should be not found: "<<std::endl;
+}
+}
+
+/*:39*/
+#line 718 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*40:*/
+#line 832 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+std::cout<<"get symbol by subscript test"<<std::endl;
+for(cnt= -1;cnt<=hash_table_size;++cnt){
+get_sym_entry_by_sub(report_card,cnt);
+if(report_card.status_==T_sym_tbl_report_card::failure){
+std::cout<<"Error subscript out of range: "
+<<cnt<<" "<<report_card.err_entry_->id__<<std::endl;
+delete report_card.err_entry_;
+}else{
+if(report_card.action_==T_sym_tbl_report_card::not_fnd){
+std::cout<<"Error not found if this message appears more than once: "
+<<cnt<<std::endl;
+std::cout<<"Remember 1 spot is left vacant in the algorithm!"<<std::endl;
+}
+}
+}
+
+/*:40*/
+#line 719 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+/*41:*/
+#line 850 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+std::cout<<"Clean up"<<std::endl;
+delete a_good_sym;
+for(cnt= 1;cnt<=hash_table_full;++cnt){
+delete sbuf[cnt];
+}
+
+/*:41*/
+#line 720 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+}
+
+/*:34*/
+#line 265 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+;
+
+
+
+
+/*:9*/
diff --git a/web/yacco2/compiler/grammars/yacco2_stbl.h b/web/yacco2/compiler/grammars/yacco2_stbl.h
new file mode 100644
index 0000000000..f9dc346932
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_stbl.h
@@ -0,0 +1,36 @@
+/*19:*/
+#line 426 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+#define hash_table_size 20011
+#define hash_table_full hash_table_size-1
+#define str_delimiter '\x00'
+#define char_pool_size 100*1024
+
+#line 427 "/usr/local/yacco2/compiler/stbl/yacco2_stbl.w"
+
+#ifndef yacco2_stbl_
+#define yacco2_stbl_ 0
+#include "yacco2.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include <cstring>
+namespace yacco2_stbl{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+extern table_entry stbl[hash_table_size];
+void hash_fnct(T_sym_tbl_report_card&Report,const char&Key);
+extern void add_sym_to_stbl
+(T_sym_tbl_report_card&Report
+,const char&Name
+,yacco2::CAbs_lr1_sym&Sym
+,table_entry::defined_or_used_typ Why
+,table_entry::entry_typ What);
+extern void find_sym_in_stbl(T_sym_tbl_report_card&Report,const char&Name);
+extern void test_program();
+extern void get_sym_entry_by_sub(T_sym_tbl_report_card&Report,int Sub);
+extern char char_pool_[char_pool_size];
+extern int char_pool_idx_;
+};
+#endif
+
+/*:19*/
diff --git a/web/yacco2/compiler/grammars/yacco2_terminals.T b/web/yacco2/compiler/grammars/yacco2_terminals.T
new file mode 100644
index 0000000000..db91f81bd4
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_terminals.T
@@ -0,0 +1,3381 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+ file: yacco2_terminals.lex
+*/
+/@
+@i "/yacco2/copyright.w"
+@** Terminal vocabulary.\fbreak
+There are some terminals that spoof the grammar's keywords like
+``\#fsm''. The keyword recognizer recognizes the character string
+of ``fsm'' but how do u define it and reference it within the
+grammars defining \O2's very own language: the
+conundrum of the grammar defining itself?
+Ahh to recurse or not to curse, that is the?
+Well this is my take.
+The logical keys are just proxy material.
+@/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+/@
+Makesure c++ forward references compile.
+@/
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+struct T_called_thread_eosubrule;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+struct T_rules_phrase;
+struct T_subrules_phrase;
+struct T_rhs_bnd;
+struct refered_rule;
+struct rule_def;
+struct refered_T;
+struct T_in_stbl;
+struct rule_in_stbl;
+extern yacco2::CAbs_lr1_sym* PTR_lint__;
+extern yacco2::CAbs_lr1_sym* PTR_ws__;
+extern yacco2::CAbs_lr1_sym* PTR_eol__;
+ ***
+"option-t" AD
+/@
+Command line option for \O2 indicating generate T vocabulary code.
+Returned from |yacco2_lcl_option| thread.
+@/
+(sym-class T_option_t)
+"option-p" AD
+/@
+Command line option for \O2 indicating generate
+cweb type documents.
+Returned from |yacco2_lcl_option| thread.
+@/
+(sym-class T_option_p)
+
+"option-err" AD
+/@
+Command line option for \O2 indicating generate Error vocabulary code.
+Returned from |yacco2_lcl_option| thread.
+@/
+(sym-class T_option_err)
+
+"esc-seq" AD
+/@
+Returned T from the |esc_seq| thread.
+Note within the |ctor| macro
+that the ``auto delete'' indicator is
+explicitly turned on and matches the ``AD'' switch.
+As i do not parse the c++ code, {\bf watch your self}.
+This is a dangerous bend in \TeX parlance.
+@/
+(sym-class T_esc_seq{
+ user-declaration
+ public:
+ T_esc_seq(const char* Esc_data);
+ std::string* esc_data();
+ private:std::string esc_data_;
+ ***
+ user-implementation
+ T_esc_seq::
+ T_esc_seq(const char* Esc_data)
+ T_CTOR("esc-seq",T_Enum::T_T_esc_seq_,0,true,false)
+ {
+ esc_data_ += Esc_data;
+ }
+ std::string* T_esc_seq::esc_data(){return &esc_data_;};
+ ***
+ }
+)
+"eol"
+/@
+This is the end-of-line indicator returned from the |eol| thread.
+@/
+(sym-class T_eol{
+ user-declaration
+ public:
+ T_eol();
+ ***
+ user-implementation
+ T_eol::
+ T_eol()
+ T_CTOR("eol",T_Enum::T_T_eol_,0,false,false)
+ {}
+ T_eol eol__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_eol__ = &eol__;
+ ***
+ }
+)
+
+"basic-char"
+/@
+Basic source character set indicator.
+It can be used to assess the good, the bad, and the ulgy
+character traits.
+For example, prescan the characters against the
+|bad_char_set| thread and return one of the 2 terminals.
+It is left here but not used.
+ @/
+(sym-class T_basic_char{
+ user-declaration
+ public:
+ T_basic_char(CAbs_lr1_sym* Basic_char);
+ CAbs_lr1_sym* basic_char()const;
+ void zero_out_basic_char();
+ private:CAbs_lr1_sym* basic_char_;
+ ***
+ destructor
+ if(R->basic_char_!=0)
+ delete R->basic_char();
+ ***
+ user-implementation
+ T_basic_char::
+ T_basic_char(CAbs_lr1_sym* Basic_char)
+ T_CTOR("basic-char",T_Enum::T_T_basic_char_,&dtor_T_basic_char,false,false)
+ {basic_char_ = Basic_char;}
+ void T_basic_char::zero_out_basic_char(){basic_char_ = 0;}
+ CAbs_lr1_sym* T_basic_char::basic_char()const{return basic_char_;}
+ ***
+ }
+)
+
+"raw-char"
+/@
+A universal carrier from the raw text character into
+c++ objects.
+Still don't know why there is also a |raw-characters| terminal.
+@/
+(sym-class T_raw_char{
+ user-declaration
+ public:
+ T_raw_char(CAbs_lr1_sym* Raw_char);
+ CAbs_lr1_sym* raw_char()const;
+ void zero_out_raw_char();
+ private:CAbs_lr1_sym* raw_char_;
+ ***
+ destructor
+ if(R->raw_char_!=0)
+ delete R->raw_char();
+ ***
+ user-implementation
+ T_raw_char::
+ T_raw_char(CAbs_lr1_sym* Raw_char)
+ T_CTOR("raw-char",T_Enum::T_T_raw_char_,0,false,false)
+ {raw_char_ = Raw_char;}
+ void T_raw_char::zero_out_raw_char(){raw_char_ = 0;}
+ CAbs_lr1_sym* T_raw_char::raw_char()const{return raw_char_;}
+ ***
+ }
+)
+
+"comment"
+/@
+Basic c++ comment in its 2 forms:\fbreak
+/* ...*/ and single line //.
+The |c_comment| grammar returns it.
+@/
+(sym-class T_comment{
+ user-declaration
+ public:
+ T_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+ ***
+ user-implementation
+ T_comment::
+ T_comment(const std::string& Comment_data)
+ T_CTOR("comment",T_Enum::T_T_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_comment::comment_data(){return &comment_data_;}
+ ***
+ }
+)
+
+"ws"
+/@
+Just white space of spaces, vertical and horizontal tabs,
+and form feeds. This is a vacuum cleaner of
+inter-word separators.
+@/
+(sym-class T_ws{
+ user-declaration
+ public:
+ T_ws(const std::string& White_space_data);
+ T_ws();
+ std::string* ws_data();
+ private:std::string ws_data_;
+ ***
+ user-implementation
+ T_ws::
+ T_ws(const std::string& Ws_data)
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {ws_data_+= Ws_data;}
+ T_ws::
+ T_ws()
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {}
+ std::string* T_ws::ws_data(){return &ws_data_;}
+ T_ws ws__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_ws__ = &ws__;
+ ***
+ }
+)
+
+"angled-string"
+/@
+Returned from |angled_string| grammar whereby the
+|angled_string_| contains its content without the angle bars.
+Escape sequences are verified and not converted but
+just concatenated to its content.
+@/
+(sym-class T_angled_string{
+ user-declaration
+ public:
+ T_angled_string(const std::string& Angled_string);
+ std::string* angled_string();
+ private:std::string angled_string_;
+ ***
+ user-implementation
+ T_angled_string::T_angled_string(const string& Angled_string)
+ T_CTOR("angled-string",T_Enum::T_T_angled_string_,0,false,false)
+ {angled_string_ = Angled_string;}
+ std::string* T_angled_string::angled_string(){return &angled_string_;}
+ ***
+ }
+)
+
+"c-literal"
+/@
+Returned from |c_literal| grammar
+ recognizing a c++ literal.
+|c_literal_| contains its content without the single quotes.
+'hi there' is an example.
+Escape sequences are verified and not converted but
+ concatenated to its content.
+@/
+(sym-class T_c_literal{
+ user-declaration
+ public:
+ T_c_literal(const std::string& C_literal);
+ std::string* c_literal();
+ private:std::string c_literal_;
+ ***
+ user-implementation
+ T_c_literal::T_c_literal(const string& C_literal)
+ T_CTOR("c-literal",T_Enum::T_T_c_literal_,0,false,false)
+ {c_literal_ = C_literal;}
+ std::string* T_c_literal::c_literal(){return &c_literal_;}
+ ***
+ }
+)
+
+"c-string"
+/@
+Returned from |c_string| grammar recognizing a c++ string.
+|c_string_| contains its content without the double quotes.
+@/
+(sym-class T_c_string{
+ user-declaration
+ public:
+ T_c_string(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+ ***
+ user-implementation
+ T_c_string::T_c_string(const std::string& C_string)
+ T_CTOR("c-string",T_Enum::T_T_c_string_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_c_string::c_string(){return &c_string_;}
+ ***
+ }
+)
+
+"xc-str"
+/@
+Returned from |xc_str| grammar recognizing a c++ string
+without the escape sequence check. This allows one to input
+at the command level a string containing backslash etc in
+single quantities. Example, "\\nogood\\b".
+This does not end a line nor ring your bell.
+The surrounding double quotes are not added to the content.
+It's just a slight variation on ``c-string'' using
+a different grammar.
+@/
+(sym-class T_xc_str{
+ user-declaration
+ public:
+ T_xc_str(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+ ***
+ user-implementation
+ T_xc_str::T_xc_str(const std::string& C_string)
+ T_CTOR("xc-str",T_Enum::T_T_xc_str_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_xc_str::c_string(){return &c_string_;}
+ ***
+ }
+)
+
+"unquoted-string"
+/@
+Just as described. Gather all the characters until
+an end-of-line met.
+Used in the command line.
+Watch yourself as this is a gobbler:
+marginal utility.
+@/
+(sym-class T_unquoted_string{
+ user-declaration
+ public:
+ T_unquoted_string(const std::string& String);
+ std::string* unquoted_string();
+ private:std::string unquoted_string_;
+ ***
+ user-implementation
+ T_unquoted_string::T_unquoted_string(const std::string& String)
+ T_CTOR("unquoted-string",T_Enum::T_T_unquoted_string_,0,false,false)
+ {unquoted_string_ = String;}
+ std::string* T_unquoted_string::unquoted_string(){return &unquoted_string_;}
+ ***
+ }
+)
+
+"file-inclusion"
+/@
+Used in processing file inclusion: hence the name.
+Why the |error_sym_| variable?
+Normally i use this terminal by calling a file processing procedure.
+Deposited in this variable are conditions found to not allow
+the reading of the file.
+See |pass3| thread of how it applies.
+@/
+(sym-class T_file_inclusion{
+ user-declaration
+ public:
+ T_file_inclusion(T_c_string* File_name_,CAbs_lr1_sym* Error);
+ ~T_file_inclusion();
+ T_c_string* file_name();
+ CAbs_lr1_sym* error_sym();
+ void error_sym(CAbs_lr1_sym* Error);
+ private:T_c_string* file_name_;
+ CAbs_lr1_sym* error_sym_;
+ ***
+ user-implementation
+ T_file_inclusion::T_file_inclusion
+ (T_c_string* File_name,CAbs_lr1_sym* Error)
+ T_CTOR("file-inclusion",T_Enum::T_T_file_inclusion_,0,false,false)
+ {file_name_ = File_name;
+ error_sym_ = Error;}
+ CAbs_lr1_sym* T_file_inclusion::error_sym(){
+ return error_sym_;
+ }
+ void T_file_inclusion::error_sym(CAbs_lr1_sym* Error){
+ error_sym_ = Error;
+ }
+ T_c_string* T_file_inclusion::file_name(){return file_name_;}
+ T_file_inclusion::~T_file_inclusion(){delete file_name_;delete error_sym_;}
+ ***
+ }
+)
+
+"identifier"
+/@
+Returned terminal from the |identifier| thread.
+Just your basic word classifier.
+@/
+(sym-class T_identifier{
+ user-declaration
+ public:
+ T_identifier(yacco2::KCHARP Identifier);
+ std::string* identifier();
+ private:std::string identifier_;
+ ***
+ user-implementation
+ T_identifier::T_identifier(yacco2::KCHARP Identifier)
+ T_CTOR("identifier",T_Enum::T_T_identifier_,0,false,false)
+ {identifier_ = Identifier;}
+ std::string* T_identifier::identifier(){return &identifier_;}
+ ***
+ }
+)
+"int-no"
+/@
+Carrier returned from |integer_no| thread.
+Within |integer_no| the number is converted into its binary
+format.
+@/
+(sym-class T_int_no{
+ user-declaration
+ public:
+ T_int_no(long S_no);
+ long no();
+ private:
+ long no_;
+ ***
+ user-implementation
+ T_int_no::
+ T_int_no(long S_no)
+ T_CTOR("int-no",T_Enum::T_T_int_no_,0,false,false)
+ {no_ = S_no;}
+ long T_int_no::no(){return no_;};
+ ***
+ }
+)
+//
+// Yacco2 keywords
+//
+"#raw-characters"
+/@
+\O2's keyword introducing the raw characters vocabulary.
+@/
+(sym-class T_raw_characters{
+ user-declaration
+ public:
+ T_raw_characters();
+ void rc_phrase(T_rc_phrase* Phrase);
+ T_rc_phrase* rc_phrase();
+ private:T_rc_phrase* rc_phrase_;
+ ***
+ user-implementation
+ T_raw_characters::T_raw_characters()
+ T_CTOR("#raw-characters",T_Enum::T_T_raw_characters_,&dtor_T_raw_characters,false,false)
+ {rc_phrase_ = 0;}
+ T_rc_phrase* T_raw_characters::rc_phrase(){return rc_phrase_;}
+ void T_raw_characters::rc_phrase(T_rc_phrase* Phrase){rc_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->rc_phrase_!=0)
+ delete R->rc_phrase_;
+ ***
+ }
+)
+
+"#lr1-constant-symbols"
+/@
+\O2's keyword introducing the lr constants vocabulary.
+@/
+ (sym-class T_lr1_constant_symbols{
+ user-declaration
+ public:
+ T_lr1_constant_symbols();
+ void lr1_k_phrase(T_lr1_k_phrase* Phrase);
+ T_lr1_k_phrase* lr1_k_phrase();
+ private:T_lr1_k_phrase* lr1_k_phrase_;
+ ***
+ user-implementation
+ T_lr1_constant_symbols::T_lr1_constant_symbols()
+T_CTOR("#lr1-constant-symbols",T_Enum::T_T_lr1_constant_symbols_,&dtor_T_lr1_constant_symbols,false,false)
+ {lr1_k_phrase_ = 0;}
+ T_lr1_k_phrase* T_lr1_constant_symbols::lr1_k_phrase(){return lr1_k_phrase_;}
+ void T_lr1_constant_symbols::lr1_k_phrase(T_lr1_k_phrase* Phrase){lr1_k_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->lr1_k_phrase_ != 0)
+ delete R->lr1_k_phrase_;
+ ***
+ }
+)
+
+"#error-symbols"
+/@
+\O2's keyword introducing the Errors vocabulary.
+@/
+ (sym-class T_error_symbols{
+ user-declaration
+ public:
+ T_error_symbols();
+ void error_symbols_phrase(T_error_symbols_phrase* Phrase);
+ T_error_symbols_phrase* error_symbols_phrase();
+ private:T_error_symbols_phrase* error_symbols_phrase_;
+ ***
+ user-implementation
+ T_error_symbols::T_error_symbols()
+T_CTOR("#error-symbols",T_Enum::T_T_error_symbols_,&dtor_T_error_symbols,false,false)
+ {error_symbols_phrase_ = 0;}
+ T_error_symbols_phrase*
+ T_error_symbols::error_symbols_phrase(){return error_symbols_phrase_;}
+ void T_error_symbols::
+ error_symbols_phrase(T_error_symbols_phrase* Phrase){error_symbols_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->error_symbols_phrase_ != 0)
+ delete R->error_symbols_phrase_;
+ ***
+ }
+)
+
+"#***"
+/@
+\O2's keyword ending syntax directed code block.
+@/
+
+ (sym-class T_eocode)
+
+"#AD"
+/@
+``AD'' means auto-delete.
+This attribute when present with any grammar's vocabulary definition ---
+rules or terminals,
+indicates
+that the symbol is deleted when popped from
+the parse stack.
+Rules always have this attribute turned on.
+@/
+ (sym-class T_AD)
+"#AB"
+/@
+``AB'' means auto-abort.
+This attribute when present with any grammar's vocabulary definition ---
+rules or terminals,
+allows proper cleanup when a grammar aborts parsing.
+Rules always have this attribute turned on to
+house clean their parse tracings in any situation.
+Terminal definitions left on the aborted parse stack
+are also deleted if their ``AB'' attribute is on.
+This forced cleanup of the parse stack brings the grammar
+back to normalcy.
+@/
+ (sym-class T_AB)
+"#parallel-la-boundary"
+/@
+Thread lookahead first set.
+@/
+(sym-class T_parallel_la_boundary{
+ user-declaration
+ public:
+ T_parallel_la_boundary();
+ void la_first_set(std::set<T_in_stbl*>& Supplier);
+ std::set<T_in_stbl*>* la_first_set();
+ void la_supplier(yacco2::TOKEN_GAGGLE* Supplier);
+ yacco2::TOKEN_GAGGLE* la_supplier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void cweb_la_srce_expr(const char* Srce_expr);
+ std::string* cweb_la_srce_expr();
+ private:
+ std::set<T_in_stbl*> la_first_set_;
+ std::string cweb_la_srce_expr_;
+ AST* cweb_marker_;
+ yacco2::TOKEN_GAGGLE* la_supplier_;
+ ***
+ user-implementation
+ T_parallel_la_boundary::T_parallel_la_boundary()
+ T_CTOR("#parallel-la-boundary",T_Enum::T_T_parallel_la_boundary_,0,false,false)
+ {la_supplier_ = 0;
+ cweb_marker_=0;
+ }
+ void T_parallel_la_boundary::cweb_la_srce_expr(const char* Srce_expr){
+ cweb_la_srce_expr_.append(Srce_expr);
+ }
+ std::string* T_parallel_la_boundary::cweb_la_srce_expr(){
+ return &cweb_la_srce_expr_;
+ }
+
+ yacco2::TOKEN_GAGGLE* T_parallel_la_boundary::la_supplier(){return la_supplier_;}
+ void T_parallel_la_boundary::la_supplier(yacco2::TOKEN_GAGGLE* Supplier)
+ {la_supplier_ = Supplier;}
+
+ void T_parallel_la_boundary::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_la_boundary::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ std::set<T_in_stbl*>* T_parallel_la_boundary::la_first_set()
+ {return &la_first_set_;}
+ void T_parallel_la_boundary::la_first_set(std::set<T_in_stbl*>& Supplier)
+ {
+ la_first_set_.insert(Supplier.begin(),Supplier.end());
+ }
+ ***
+ }
+)
+
+"#arbitrator-code"
+/@
+\O2's keyword introducing c++ arbitration code within the grammar's rule.
+@/
+
+(sym-class T_arbitrator_code{
+ user-declaration
+ public:
+ T_arbitrator_code();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_syntax_code* syntax_code_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_arbitrator_code::T_arbitrator_code()
+ T_CTOR("#arbitrator-code",T_Enum::T_T_arbitrator_code_,0,false,false)
+ {syntax_code_ = 0;cweb_marker_=0;}
+ T_syntax_code* T_arbitrator_code::syntax_code(){return syntax_code_;}
+ void T_arbitrator_code::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ void T_arbitrator_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_arbitrator_code::cweb_marker(){
+ return cweb_marker_;
+ }
+ ***
+ }
+)
+
+"#parallel-parser"
+/@
+\O2's keyword introducing the grammar as a thread:
+all the debutant's coming out like its thread name
+and look ahead expression.
+@/
+ (sym-class T_parallel_parser{
+ user-declaration
+ public:
+ T_parallel_parser();
+ void parallel_parser_phrase(T_parallel_parser_phrase* Phrase);
+ T_parallel_parser_phrase* parallel_parser_phrase();
+ private:T_parallel_parser_phrase* parallel_parser_phrase_;
+ ***
+ user-implementation
+ T_parallel_parser::T_parallel_parser()
+ T_CTOR("#parallel-parser",T_Enum::T_T_parallel_parser_,&dtor_T_parallel_parser,false,false)
+ {parallel_parser_phrase_ = 0;}
+ T_parallel_parser_phrase*
+ T_parallel_parser::parallel_parser_phrase(){return parallel_parser_phrase_;}
+ void T_parallel_parser::parallel_parser_phrase
+ (T_parallel_parser_phrase* Phrase){parallel_parser_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->parallel_parser_phrase_ != 0)
+ delete R->parallel_parser_phrase_;
+ ***
+ }
+)
+
+"#parallel-thread-function"
+/@
+The grammar thread's name construct.
+@/
+(sym-class T_parallel_thread_function{
+ user-declaration
+ public:
+ T_parallel_thread_function();
+ void identifier(T_identifier* Id);
+ T_identifier* identifier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_identifier* id_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_parallel_thread_function::T_parallel_thread_function()
+ T_CTOR("#parallel-thread-function",T_Enum::T_T_parallel_thread_function_,0,false,false)
+ {id_ = 0;cweb_marker_=0;}
+ T_identifier* T_parallel_thread_function::identifier(){return id_;}
+ void T_parallel_thread_function::identifier(T_identifier* Id){id_ = Id;}
+ void T_parallel_thread_function::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_parallel_thread_function::cweb_marker(){
+ return cweb_marker_;
+ }
+ ***
+ }
+)
+
+"#parallel-control-monitor"
+/@
+Introduction of the rule's arbitration.
+For the moment, all rules using a thread call need this
+grammar construct that introduces
+the arbitration logic.
+Most rules do not need to arbitrate.
+It is determinist in the returned terminal from
+threads.
+So why must it be present?
+Only cuz of my frontend hacking of ideas.
+It will be corrected to simplifiy the grammar code.
+@/
+
+(sym-class T_parallel_control_monitor)
+
+"#fsm" (sym-class T_fsm{
+ user-declaration
+ public:
+ T_fsm();
+ void fsm_phrase(T_fsm_phrase* Phrase);
+ T_fsm_phrase* fsm_phrase();
+ private:T_fsm_phrase* fsm_phrase_;
+ ***
+ user-implementation
+ T_fsm::T_fsm()
+ T_CTOR("#fsm",T_Enum::T_T_fsm_,&dtor_T_fsm,false,false)
+ {fsm_phrase_ = 0;}
+ T_fsm_phrase* T_fsm::fsm_phrase(){return fsm_phrase_;}
+ void T_fsm::fsm_phrase(T_fsm_phrase* Phrase){fsm_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->fsm_phrase_ != 0)
+ delete R->fsm_phrase_;
+ ***
+ }
+)
+
+"#fsm-id" (sym-class T_fsm_id)
+"#fsm-filename" (sym-class T_fsm_filename)
+"#fsm-namespace" (sym-class T_fsm_namespace)
+"#fsm-class" (sym-class T_fsm_class)
+"#fsm-version" (sym-class T_fsm_version)
+"#fsm-date" (sym-class T_fsm_date)
+"#fsm-debug" (sym-class T_fsm_debug)
+"#fsm-comments" (sym-class T_fsm_comments)
+
+"#terminals" AB
+/@
+Introduces the Terminal vocabulary phrase of the grammar.
+Note the ``auto abort'' indicator that should match with the |CTOR| macro.
+Which vice is it?
+@/
+ (sym-class T_terminals{
+ user-declaration
+ public:
+ T_terminals();
+ void terminals_phrase(T_terminals_phrase* Phrase);
+ T_terminals_phrase* terminals_phrase();
+ private:T_terminals_phrase* terminals_phrase_;
+ ***
+ user-implementation
+ T_terminals::T_terminals()
+ T_CTOR("#terminals",T_Enum::T_T_terminals_,&dtor_T_terminals,false,true)
+ {terminals_phrase_ = 0;}
+ T_terminals_phrase* T_terminals::terminals_phrase(){return terminals_phrase_;}
+ void T_terminals::terminals_phrase(T_terminals_phrase* Phrase)
+ {terminals_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->terminals_phrase_ != 0)
+ delete R->terminals_phrase_;
+ ***
+ }
+)
+
+"#T-enumeration" AB
+/@
+Introduces the enumeration construct of the grammar.
+The 1 + 2 + 3 scheme counting of the symbols.
+@/
+ (sym-class T_enumeration{
+ user-declaration
+ public:
+ T_enumeration();
+ void enum_phrase(T_enum_phrase* Phrase);
+ T_enum_phrase* enum_phrase();
+ private:T_enum_phrase* enum_phrase_;
+ ***
+ user-implementation
+ T_enumeration::T_enumeration()
+ T_CTOR("#T-enumeration",T_Enum::T_T_enumeration_,&dtor_T_enumeration,false,true)
+ {enum_phrase_ = 0;}
+ T_enum_phrase* T_enumeration::enum_phrase(){return enum_phrase_;}
+ void T_enumeration::enum_phrase(T_enum_phrase* Phrase){enum_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->enum_phrase_ != 0)
+ delete R->enum_phrase_;
+ ***
+ }
+)
+
+
+"#file-name" (sym-class T_file_name)
+"#name-space" (sym-class T_name_space)
+"#sym-class" (sym-class T_sym_class)
+
+"#rules" AB
+/@
+Introduces the rules construct of the grammar.
+@/
+
+ (sym-class T_rules {
+ user-declaration
+ public:
+ T_rules();
+ void rules_phrase(T_rules_phrase* Phrase);
+ T_rules_phrase* rules_phrase();
+ private:T_rules_phrase* rules_phrase_;
+ ***
+ user-implementation
+ T_rules::T_rules()
+ T_CTOR("#rules",T_Enum::T_T_rules_,&dtor_T_rules,false,true)
+ {rules_phrase_ = 0;}
+ T_rules_phrase* T_rules::rules_phrase(){return rules_phrase_;}
+ void T_rules::rules_phrase(T_rules_phrase* Phrase){rules_phrase_ = Phrase;}
+ ***
+ destructor
+ if(R->rules_phrase_ != 0)
+ delete R->rules_phrase_;
+ ***
+ }
+)
+
+"#lhs" (sym-class T_lhs)
+
+"#user-declaration"
+(sym-class T_user_declaration{
+ user-declaration
+ public:
+ T_user_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_declaration::T_user_declaration()
+ T_CTOR("#user-declaration",T_Enum::T_T_user_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_declaration::syntax_code(){return syntax_code_;}
+ void T_user_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#user-prefix-declaration"
+(sym-class T_user_prefix_declaration{
+ user-declaration
+ public:
+ T_user_prefix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_prefix_declaration::T_user_prefix_declaration()
+ T_CTOR("#user-prefix-declaration",T_Enum::T_T_user_prefix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_prefix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_prefix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#user-suffix-declaration"
+(sym-class T_user_suffix_declaration{
+ user-declaration
+ public:
+ T_user_suffix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_suffix_declaration::T_user_suffix_declaration()
+ T_CTOR("#user-suffix-declaration",T_Enum::T_T_user_suffix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_suffix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_suffix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#constructor"
+(sym-class T_constructor{
+ user-declaration
+ public:
+ T_constructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_constructor::T_constructor()
+ T_CTOR("#constructor",T_Enum::T_T_constructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_constructor::syntax_code(){return syntax_code_;}
+ void T_constructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#destructor"
+(sym-class T_destructor{
+ user-declaration
+ public:
+ T_destructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_destructor::T_destructor()
+ T_CTOR("#destructor",T_Enum::T_T_destructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_destructor::syntax_code(){return syntax_code_;}
+ void T_destructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#op"
+(sym-class T_op{
+ user-declaration
+ public:
+ T_op();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_op::T_op()
+ T_CTOR("#op",T_Enum::T_T_op_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_op::syntax_code(){return syntax_code_;}
+ void T_op::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#failed"
+(sym-class T_failed{
+ user-declaration
+ public:
+ T_failed();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_failed::T_failed()
+ T_CTOR("#failed",T_Enum::T_T_failed_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_failed::syntax_code(){return syntax_code_;}
+ void T_failed::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#user-implementation"
+(sym-class T_user_implementation{
+ user-declaration
+ public:
+ T_user_implementation();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_implementation::T_user_implementation()
+ T_CTOR("#user-implementation",T_Enum::T_T_user_implementation_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_implementation::syntax_code(){return syntax_code_;}
+ void T_user_implementation::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#user-imp-tbl"
+(sym-class T_user_imp_tbl{
+ user-declaration
+ public:
+ T_user_imp_tbl();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_imp_tbl::T_user_imp_tbl()
+ T_CTOR("#user-imp-tbl",T_Enum::T_T_user_imp_tbl_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_tbl::syntax_code(){return syntax_code_;}
+ void T_user_imp_tbl::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#user-imp-sym"
+(sym-class T_user_imp_sym{
+ user-declaration
+ public:
+ T_user_imp_sym();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ ***
+ user-implementation
+ T_user_imp_sym::T_user_imp_sym()
+ T_CTOR("#user-imp-sym",T_Enum::T_T_user_imp_sym_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_sym::syntax_code(){return syntax_code_;}
+ void T_user_imp_sym::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ ***
+ }
+)
+
+"#constant-defs" (sym-class T_constant_defs)
+"#terminals-refs" (sym-class T_terminals_refs)
+"#terminals-sufx" (sym-class T_terminals_sufx)
+"#lrk-sufx" (sym-class T_lrk_sufx)
+
+"->" (sym-class T_selector)
+"#NULL" (sym-class T_NULL)
+"::" (sym-class T_2colon)
+
+
+
+"block" AB
+(sym-class T_block{
+ user-declaration
+ public:
+ T_block(yacco2::AST* Ast);
+ yacco2::AST* ast();
+ private: yacco2::AST* ast_;
+ ***
+ user-implementation
+ T_block::
+ T_block(yacco2::AST* Ast)
+ T_CTOR("block",T_Enum::T_T_block_,&dtor_T_block,false,true)
+ {ast_ = Ast;}
+ yacco2::AST* T_block::ast(){return ast_;}
+ ***
+ destructor
+ if(ABORT_STATUS == true){
+ yacco2::AST::zero_content(*R->ast());// break dbl delete of self
+ yacco2::AST::ast_delete(*R->ast(),ABORT_STATUS);
+ }
+ ***
+ }
+)
+
+"syntax-code"
+(sym-class T_syntax_code{
+ user-declaration
+ public:
+ T_syntax_code(const char* Syntax_code);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ std::string* syntax_code();
+ private:std::string syntax_code_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_syntax_code::T_syntax_code(const char* Syntax_code)
+ T_CTOR("syntax-code",T_Enum::T_T_syntax_code_,0,false,false)
+ {syntax_code_ += Syntax_code;
+ cweb_marker_=0;}
+ std::string* T_syntax_code::syntax_code(){return &syntax_code_;}
+ void T_syntax_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_syntax_code::cweb_marker(){
+ return cweb_marker_;
+ }
+ ***
+ }
+)
+
+"fsm-class-phrase" (sym-class T_fsm_class_phrase {
+ user-declaration
+ public:
+ T_fsm_class_phrase();
+ T_identifier* identifier();
+ void identifier(T_identifier* Id);
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ T_identifier* identifier_;
+ std::map<std::string,CAbs_lr1_sym*> directives_map_;
+ AST* phrase_tree_;
+ ***
+ user-implementation
+ T_fsm_class_phrase::T_fsm_class_phrase()
+T_CTOR("fsm-class-phrase",T_Enum::T_T_fsm_class_phrase_,&dtor_T_fsm_class_phrase,false,false)
+ {identifier_ = 0;phrase_tree_=0;}
+
+ void T_fsm_class_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_class_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_fsm_class_phrase::identifier(){return identifier_;}
+ void T_fsm_class_phrase::identifier(T_identifier* Id){identifier_ = Id;}
+
+ std::map<string,CAbs_lr1_sym*>*
+ T_fsm_class_phrase::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_fsm_class_phrase::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_fsm_class_phrase::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+ ***
+ destructor
+ if(R->identifier_ != 0)
+ delete R->identifier_;
+ R->remove_directives_from_map();
+ ***
+ }
+)
+//
+"fsm-phrase" (sym-class T_fsm_phrase {
+ user-declaration
+ public:
+ T_fsm_phrase();
+ T_c_string* fsm_id();
+ void fsm_id(T_c_string* Id);
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_fsm_class_phrase* fsm_class_phrase();
+ void fsm_class_phrase(T_fsm_class_phrase* Id);
+ T_c_string* version();
+ void version(T_c_string* Id);
+ T_c_string* date();
+ void date(T_c_string* Id);
+ T_c_string* debug();
+ void debug(T_c_string* Id);
+ T_c_string* comment();
+ void comment(T_c_string* Id);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_c_string* fsm_id_;
+ T_identifier* filename_id_;
+ string filename_no_ext_;
+ T_identifier* namespace_id_;
+ T_fsm_class_phrase* fsm_class_phrase_;
+ T_c_string* version_;
+ T_c_string* date_;
+ T_c_string* debug_;
+ T_c_string* comment_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_fsm_phrase::T_fsm_phrase()
+ T_CTOR("fsm-phrase",T_Enum::T_T_fsm_phrase_,&dtor_T_fsm_phrase,false,false)
+ {fsm_id_ = 0;
+ filename_id_ = 0;
+ namespace_id_ = 0;
+ fsm_class_phrase_ = 0;
+ version_ = 0;
+ date_ = 0;
+ debug_ = 0;
+ comment_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_fsm_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_fsm_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_fsm_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_c_string* T_fsm_phrase::fsm_id(){return fsm_id_;}
+ void T_fsm_phrase::fsm_id(T_c_string* Id){fsm_id_ = Id;}
+ T_identifier* T_fsm_phrase::filename_id(){return filename_id_;}
+ void T_fsm_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_fsm_phrase::namespace_id(){return namespace_id_;}
+ void T_fsm_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_fsm_class_phrase* T_fsm_phrase::fsm_class_phrase(){return fsm_class_phrase_;}
+ void T_fsm_phrase::fsm_class_phrase(T_fsm_class_phrase* Id)
+ {fsm_class_phrase_ = Id;}
+
+
+ T_c_string* T_fsm_phrase::version(){return version_;}
+ void T_fsm_phrase::version(T_c_string* Id){version_ = Id;}
+ T_c_string* T_fsm_phrase::date(){return date_;}
+ void T_fsm_phrase::date(T_c_string* Id){date_ = Id;}
+ T_c_string* T_fsm_phrase::debug(){return debug_;}
+ void T_fsm_phrase::debug(T_c_string* Id){debug_ = Id;}
+ T_c_string* T_fsm_phrase::comment(){return comment_;}
+ void T_fsm_phrase::comment(T_c_string* Id){comment_ = Id;}
+ ***
+ destructor
+ delete R->fsm_id_;
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->fsm_class_phrase_;
+ delete R->version_;
+ delete R->date_;
+ delete R->debug_;
+ delete R->comment_;
+ ***
+ }
+)
+//
+"parallel-parser-phrase" (sym-class T_parallel_parser_phrase {
+ user-declaration
+ public:
+ T_parallel_parser_phrase();
+ T_parallel_thread_function* pp_funct();
+ void pp_funct(T_parallel_thread_function* PP_fnct);
+ T_parallel_la_boundary* la_bndry();
+ void la_bndry(T_parallel_la_boundary* La_bndry);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_parallel_thread_function* pp_funct_;
+ T_parallel_la_boundary* la_bndry_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_parallel_parser_phrase::T_parallel_parser_phrase()
+ T_CTOR("parallel-parser-phrase",T_Enum::T_T_parallel_parser_phrase_,&dtor_T_parallel_parser_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_parallel_parser_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_parser_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_parallel_parser_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_parser_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_parallel_thread_function* T_parallel_parser_phrase::pp_funct(){
+ return pp_funct_;
+ }
+ void T_parallel_parser_phrase::pp_funct(T_parallel_thread_function* PP_fnct){
+ pp_funct_ = PP_fnct;
+ }
+ T_parallel_la_boundary* T_parallel_parser_phrase::la_bndry(){
+ return la_bndry_;
+ }
+ void T_parallel_parser_phrase::la_bndry(T_parallel_la_boundary* La_bndry){
+ la_bndry_ = La_bndry;
+ }
+ ***
+ destructor
+ delete R->la_bndry_;
+ delete R->pp_funct_;
+ ***
+ }
+)
+//
+"T-enum-phrase" (sym-class T_enum_phrase {
+ user-declaration
+ public:
+ T_enum_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_syntax_code* kdefs();
+ void kdefs(T_syntax_code* Kdefs);
+ void start_lrk_enumerate(int Enum);
+ void stop_lrk_enumerate(int Enum);
+ int start_lrk_enumerate();
+ int stop_lrk_enumerate();
+ void start_err_enumerate(int Enum);
+ void stop_err_enumerate(int Enum);
+ int start_err_enumerate();
+ int stop_err_enumerate();
+ void start_rc_enumerate(int Enum);
+ void stop_rc_enumerate(int Enum);
+ int start_rc_enumerate();
+ int stop_rc_enumerate();
+ void start_T_enumerate(int Enum);
+ void stop_T_enumerate(int Enum);
+ int start_T_enumerate();
+ int stop_T_enumerate();
+
+ int total_T_enumerate();
+ void total_T_enumerate(int Enum);
+ int total_rc_enumerate();
+ void total_rc_enumerate(int Enum);
+ int total_err_enumerate();
+ void total_err_enumerate(int Enum);
+ int total_lrk_enumerate();
+ void total_lrk_enumerate(int Enum);
+ void total_enumerate(int Enum);
+ int total_enumerate();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ int total_no_subrules();
+ void total_no_subrules(int Total_subrules);
+ private:
+ T_syntax_code* kdefs_;
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ int start_lrk_enumerate_;
+ int stop_lrk_enumerate_;
+ int start_err_enumerate_;
+ int stop_err_enumerate_;
+ int start_rc_enumerate_;
+ int stop_rc_enumerate_;
+ int start_T_enumerate_;
+ int stop_T_enumerate_;
+ int total_enumerate_;
+ int total_T_enumerate_;
+ int total_rc_enumerate_;
+ int total_err_enumerate_;
+ int total_lrk_enumerate_;
+ int total_no_subrules_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_enum_phrase::T_enum_phrase()
+ T_CTOR("T-enum-phrase",T_Enum::T_T_enum_phrase_,&dtor_T_enum_phrase,false,false)
+ {kdefs_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_enum_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_enum_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_enum_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_enum_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_enum_phrase::filename_id(){return filename_id_;}
+ void T_enum_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_enum_phrase::namespace_id(){return namespace_id_;}
+ void T_enum_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_syntax_code*
+ T_enum_phrase::kdefs(){return kdefs_;}
+
+ void T_enum_phrase::kdefs(T_syntax_code* Kdefs){
+ kdefs_ = Kdefs;
+ }
+ void T_enum_phrase::start_lrk_enumerate(int Enum){start_lrk_enumerate_ = Enum;}
+ void T_enum_phrase::stop_lrk_enumerate(int Enum){stop_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::start_lrk_enumerate(){return start_lrk_enumerate_;}
+ int T_enum_phrase::stop_lrk_enumerate(){return stop_lrk_enumerate_;}
+ void T_enum_phrase::start_err_enumerate(int Enum){start_err_enumerate_ = Enum;}
+ void T_enum_phrase::stop_err_enumerate(int Enum){stop_err_enumerate_ = Enum;}
+ int T_enum_phrase::start_err_enumerate(){return start_err_enumerate_;}
+ int T_enum_phrase::stop_err_enumerate(){return stop_err_enumerate_;}
+ void T_enum_phrase::start_rc_enumerate(int Enum){start_rc_enumerate_ = Enum;}
+ void T_enum_phrase::stop_rc_enumerate(int Enum){stop_rc_enumerate_ = Enum;}
+ int T_enum_phrase::start_rc_enumerate(){return start_rc_enumerate_;}
+ int T_enum_phrase::stop_rc_enumerate(){return stop_rc_enumerate_;}
+ void T_enum_phrase::start_T_enumerate(int Enum){start_T_enumerate_ = Enum;}
+ void T_enum_phrase::stop_T_enumerate(int Enum){stop_T_enumerate_ = Enum;}
+ int T_enum_phrase::start_T_enumerate(){return start_T_enumerate_;}
+ int T_enum_phrase::stop_T_enumerate(){return stop_T_enumerate_;}
+ void T_enum_phrase::total_enumerate(int Enum){total_enumerate_ = Enum;}
+ int T_enum_phrase::total_enumerate(){return total_enumerate_;}
+
+ void T_enum_phrase::total_T_enumerate(int Enum){total_T_enumerate_ = Enum;}
+ int T_enum_phrase::total_T_enumerate(){return total_T_enumerate_;}
+ void T_enum_phrase::total_rc_enumerate(int Enum){total_rc_enumerate_ = Enum;}
+ int T_enum_phrase::total_rc_enumerate(){return total_rc_enumerate_;}
+ void T_enum_phrase::total_err_enumerate(int Enum){total_err_enumerate_ = Enum;}
+ int T_enum_phrase::total_err_enumerate(){return total_err_enumerate_;}
+ void T_enum_phrase::total_lrk_enumerate(int Enum){total_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::total_lrk_enumerate(){return total_lrk_enumerate_;}
+ int T_enum_phrase::total_no_subrules(){return total_no_subrules_;}
+ void T_enum_phrase::total_no_subrules(int Total_subrules){
+ total_no_subrules_ = Total_subrules;
+ }
+ ***
+ destructor
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->kdefs_;
+ ***
+ }
+)
+
+"terminal-def"
+/@
+Watch out.\fbreak
+The individual syntax directed code directives
+are unique whereby each directive terminal contains their source code.
+Depending on their key within the ``directives\_map\_'',
+u recast the abstract symbol
+into the specific directive.\fbreak
+For example:\fbreak
+The ``SDC\_user\_declaration'' key representing the ``user-declaration'' directive
+would cast the mapped symbol to |T_user_declaration|.
+@/
+
+(sym-class T_terminal_def {
+ user-declaration
+ public:
+ enum classification_typ {not_classed,err,rc,lrk,t};
+ T_terminal_def();
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+
+ std::string* t_name();
+ void t_name(const char* Id);
+ std::string* classsym();
+ void classsym(const char* Id);
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ classification_typ classification();
+ void classification(classification_typ C);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void enum_id(int Id);
+ int enum_id();
+ private:
+ std::string t_name_;
+ std::string class_sym_;
+ bool auto_delete_;
+ bool auto_abort_;
+ map<std::string,CAbs_lr1_sym*> directives_map_;
+ classification_typ classification_;
+ AST* cweb_marker_;
+ int enum_id_;
+ ***
+ user-implementation
+ T_terminal_def::T_terminal_def()
+T_CTOR("terminal-def",T_Enum::T_T_terminal_def_,&dtor_T_terminal_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ classification_ = T_terminal_def::not_classed;
+ cweb_marker_ = 0;
+ enum_id_ = -1;
+ }
+ void T_terminal_def::enum_id(int Id){enum_id_=Id;}
+ int T_terminal_def::enum_id(){return enum_id_;}
+ void T_terminal_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminal_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_terminal_def::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_terminal_def::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_terminal_def::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+
+ std::string* T_terminal_def::t_name(){return &t_name_;}
+ void T_terminal_def::t_name(const char* Id){t_name_ += Id;}
+
+ std::string* T_terminal_def::classsym(){return &class_sym_;}
+ void T_terminal_def::classsym(const char* Id){class_sym_ += Id;}
+
+ bool T_terminal_def::autodelete(){return auto_delete_;}
+ void T_terminal_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool T_terminal_def::autoabort(){return auto_abort_;}
+ void T_terminal_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ T_terminal_def::classification_typ
+ T_terminal_def::classification(){return classification_;}
+ void
+ T_terminal_def::classification(T_terminal_def::classification_typ C)
+ {classification_ = C;}
+ ***
+ destructor
+ R->remove_directives_from_map();
+ ***
+ }
+)
+//
+"table-entry" (sym-class table_entry {
+ user-declaration
+ public:
+ enum entry_typ {terminal,rule,keyword,unknown,thread};
+ enum defined_or_used_typ {defed,used};
+ table_entry();
+ bool vacant_;
+ bool defined_;
+ bool used_;
+ entry_typ type_;
+ CAbs_lr1_sym* symbol_;
+ const char* key_;
+ int pos_;
+ int key_len_;
+ ***
+ user-implementation
+ table_entry::
+ table_entry()
+ T_CTOR("symbol-table",T_Enum::T_table_entry_,0,false,false)
+ {vacant_ = true;
+ defined_ = false;
+ used_ = false;
+ type_ = table_entry::unknown;
+ symbol_ = 0;
+ key_ = 0;
+ pos_ = -1;
+ key_len_ = 0;
+ }
+ ***
+ }
+)
+//
+"sym-tbl-report-card" (sym-class T_sym_tbl_report_card {
+ user-declaration
+ public:
+ enum status {okay,failure,fatal};
+ enum action {not_fnd,fnd,inserted,aborted,unknown};
+ T_sym_tbl_report_card();
+ T_sym_tbl_report_card::status status_;
+ T_sym_tbl_report_card::action action_;
+ table_entry* tbl_entry_;
+ CAbs_lr1_sym* err_entry_;
+ int pos_;
+ int key_len_;
+ ***
+ user-implementation
+ T_sym_tbl_report_card::
+ T_sym_tbl_report_card()
+ T_CTOR("sym-tbl-report-card",T_Enum::T_T_sym_tbl_report_card_,0,false,false)
+ {status_ = okay;
+ action_ = unknown;
+ tbl_entry_ = 0;
+ pos_ = 0;
+ key_len_ = 0;
+ }
+ ***
+ }
+)
+//
+"terminals-phrase" (sym-class T_terminals_phrase {
+ user-declaration
+ public:
+ T_terminals_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* terminals_refs_code();
+ void terminals_refs_code(T_syntax_code* Code);
+ T_syntax_code* terminals_sufx_code();
+ void terminals_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* terminals_refs_code_;
+ T_syntax_code* terminals_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_terminals_phrase::T_terminals_phrase()
+T_CTOR("terminals-phrase",T_Enum::T_T_terminals_phrase_,&dtor_T_terminals_phrase,false,false)
+ {terminals_refs_code_ = 0;
+ terminals_sufx_code_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_terminals_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminals_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_terminals_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_terminals_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_terminals_phrase::filename_id(){return filename_id_;}
+ void T_terminals_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_terminals_phrase::namespace_id(){return namespace_id_;}
+ void T_terminals_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_terminals_phrase::alphabet(){
+ return &alphabet_;
+ }
+ std::vector<T_terminal_def*>*
+ T_terminals_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_terminals_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_terminals_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_refs_code(){return terminals_refs_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_refs_code(T_syntax_code* Code){
+ terminals_refs_code_ = Code;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_sufx_code(){return terminals_sufx_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_sufx_code(T_syntax_code* Code){
+ terminals_sufx_code_ = Code;
+ }
+ ***
+ destructor
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->terminals_refs_code_;
+ delete R->terminals_sufx_code_;
+ ***
+ }
+)
+//
+"error-symbols-phrase" (sym-class T_error_symbols_phrase {
+ user-declaration
+ public:
+ T_error_symbols_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_error_symbols_phrase::T_error_symbols_phrase()
+T_CTOR("error-symbols-phrase",T_Enum::T_T_error_symbols_phrase_,&dtor_T_error_symbols_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_error_symbols_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_error_symbols_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_error_symbols_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_error_symbols_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_error_symbols_phrase::filename_id(){return filename_id_;}
+ void T_error_symbols_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_error_symbols_phrase::namespace_id(){return namespace_id_;}
+ void T_error_symbols_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_error_symbols_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_error_symbols_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_error_symbols_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_error_symbols_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ ***
+ destructor
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ ***
+ }
+)
+
+"lr1-k-phrase" (sym-class T_lr1_k_phrase {
+ user-declaration
+ public:
+ T_lr1_k_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* lrk_sufx_code();
+ void lrk_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* lrk_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_lr1_k_phrase::T_lr1_k_phrase()
+ T_CTOR("lr1-k-phrase",T_Enum::T_T_lr1_k_phrase_,&dtor_T_lr1_k_phrase,false,false)
+ {lrk_sufx_code_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_lr1_k_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_lr1_k_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_lr1_k_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_lr1_k_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_lr1_k_phrase::filename_id(){return filename_id_;}
+ void T_lr1_k_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_lr1_k_phrase::namespace_id(){return namespace_id_;}
+ void T_lr1_k_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_lr1_k_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_lr1_k_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_lr1_k_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_lr1_k_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ T_syntax_code*
+ T_lr1_k_phrase::
+ lrk_sufx_code(){return lrk_sufx_code_;}
+
+ void
+ T_lr1_k_phrase::
+ lrk_sufx_code(T_syntax_code* Code){
+ lrk_sufx_code_ = Code;
+ }
+ ***
+ destructor
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->lrk_sufx_code_;
+ ***
+ }
+)
+//
+"rc-phrase" (sym-class T_rc_phrase {
+ user-declaration
+ public:
+ T_rc_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_rc_phrase::T_rc_phrase()
+ T_CTOR("rc-phrase",T_Enum::T_T_rc_phrase_,&dtor_T_rc_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rc_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rc_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rc_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rc_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_rc_phrase::filename_id(){return filename_id_;}
+ void T_rc_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_rc_phrase::namespace_id(){return namespace_id_;}
+ void T_rc_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_rc_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_rc_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_rc_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rc_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ ***
+ destructor
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ ***
+ }
+)
+//
+"rule-lhs-phrase" (sym-class T_rule_lhs_phrase {
+ user-declaration
+ public:
+ T_rule_lhs_phrase();
+ void remove_lhs_directives();
+ std::map<std::string,CAbs_lr1_sym*>* lhs_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ map<std::string,CAbs_lr1_sym*> lhs_directives_map_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_rule_lhs_phrase::T_rule_lhs_phrase()
+T_CTOR("rule-lhs-phrase",T_Enum::T_T_rule_lhs_phrase_,&dtor_T_rule_lhs_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+
+ void T_rule_lhs_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rule_lhs_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rule_lhs_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rule_lhs_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_rule_lhs_phrase::lhs_directives_map(){
+ return &lhs_directives_map_;
+ }
+
+ void T_rule_lhs_phrase::remove_lhs_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = lhs_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = lhs_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_rule_lhs_phrase::
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = lhs_directives_map_.find(key);
+ if(i == lhs_directives_map_.end()){
+ lhs_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_lhs_directives();
+ return sym;
+ }
+ ***
+ destructor
+ R->remove_lhs_directives();
+ ***
+ }
+)
+
+"parallel-monitor-phrase" (sym-class T_parallel_monitor_phrase {
+ user-declaration
+ public:
+ T_parallel_monitor_phrase();
+ void remove_mntr_directives();
+ std::map<std::string,CAbs_lr1_sym*>* mntr_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ map<std::string,CAbs_lr1_sym*> mntr_directives_map_;
+ AST* phrase_tree_;
+ ***
+ user-implementation
+ T_parallel_monitor_phrase::T_parallel_monitor_phrase()
+T_CTOR("parallel-monitor-phrase",T_Enum::T_T_parallel_monitor_phrase_,&dtor_T_parallel_monitor_phrase,false,false)
+ {phrase_tree_=0;}
+
+ void T_parallel_monitor_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_monitor_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<string,CAbs_lr1_sym*>*
+ T_parallel_monitor_phrase::mntr_directives_map(){
+ return &mntr_directives_map_;
+ }
+
+ void T_parallel_monitor_phrase::remove_mntr_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = mntr_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = mntr_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_parallel_monitor_phrase::
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = mntr_directives_map_.find(key);
+ if(i == mntr_directives_map_.end()){
+ mntr_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_mntr_directives();
+ return sym;
+ }
+ ***
+ destructor
+ R->remove_mntr_directives();
+ ***
+ }
+)
+
+"rule-def" (sym-class rule_def {
+ user-declaration
+ public:
+ rule_def(const char* Key);
+ T_rule_lhs_phrase* rule_lhs();
+ void rule_lhs(T_rule_lhs_phrase* Lhs);
+ int rule_no();
+ void rule_no(int Rule_no);
+ int lhs_use_cnt();
+ void lhs_use_cnt(int Use_cnt);
+ int rhs_use_cnt();
+ void rhs_use_cnt(int Use_cnt);
+ bool recursive();
+ void recursive(bool Recursive);
+
+ void parallel_mntr(T_parallel_monitor_phrase* Mntr);
+ T_parallel_monitor_phrase* parallel_mntr();
+ T_subrules_phrase* subrules();
+ void subrules(T_subrules_phrase* Subrules);
+
+ std::string* rule_name();
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ bool epsilon();
+ void epsilon(bool Ton);
+ bool derive_t();
+ void derive_t(bool Ton);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* rule_s_tree();
+ void enum_id(int Id);
+ int enum_id();
+ std::set<T_in_stbl*>* first_set();
+ void add_to_first_set(T_in_stbl& T);
+ std::set<T_called_thread_eosubrule*>* called_thread_first_set();
+ void add_to_called_thread_first_set(T_called_thread_eosubrule* T);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ void add_closure_rule_making_up_first_set(rule_in_stbl* Rule);
+ std::set<rule_in_stbl*>* closure_rules_making_up_first_set();
+ void add_rule_adding_T_in_first_set(T_in_stbl* T,std::string* Rule_enumerate);
+ std::map<T_in_stbl*,std::set<std::string*> >* rule_adding_T_in_first_set();
+ AST* rule_use_skeleton();
+ void rule_use_skeleton(AST* Tree);
+ private:
+ std::string rule_name_;
+ T_parallel_monitor_phrase* parallel_mntr_;
+ T_subrules_phrase* subrules_;
+ T_rule_lhs_phrase* rule_lhs_;
+ bool auto_delete_;
+ bool auto_abort_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int enum_id_;
+ int rule_no_;
+ int lhs_use_cnt_;// for rule recycling
+ int rhs_use_cnt_;// for rule recycling
+ bool recursive_;
+ bool epsilon_;
+ bool derive_t_;
+ std::string grammar_s_enumerate_;
+ std::set<T_in_stbl*> first_set_;
+ std::set<T_called_thread_eosubrule*> called_thread_first_set_;
+ std::set<rule_in_stbl*> closure_rules_making_up_first_set_;
+ std::map<T_in_stbl*,std::set<std::string*> > rules_adding_T_in_first_set_;
+ AST* rule_use_skeleton_;
+ ***
+ user-implementation
+ rule_def::rule_def(const char* Key)
+ T_CTOR("rule-def",T_Enum::T_rule_def_,&dtor_rule_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ rule_no_ = 0;//starts cnt at 1
+ recursive_ = NO;
+ lhs_use_cnt_ = 0;
+ rhs_use_cnt_ = 0;
+ rule_use_skeleton_ = 0;
+ parallel_mntr_ = 0;
+ subrules_ = 0;
+ rule_lhs_ = 0;
+ rule_name_ += Key;
+ epsilon_ = false;
+ derive_t_ = false;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ enum_id_ = -1;
+ first_set_.clear();
+ }
+ std::set<rule_in_stbl*>* rule_def::closure_rules_making_up_first_set(){
+ return &closure_rules_making_up_first_set_;
+ }
+ AST* rule_def::rule_use_skeleton(){return rule_use_skeleton_;}
+ void rule_def::rule_use_skeleton(AST* Tree){rule_use_skeleton_ = Tree;}
+
+ std::map<T_in_stbl*,std::set<std::string*> >*
+ rule_def::rule_adding_T_in_first_set(){
+ return &rules_adding_T_in_first_set_;
+ }
+ int rule_def::rule_no(){return rule_no_;}
+ void rule_def::rule_no(int Rule_no){rule_no_ = Rule_no;}
+ bool rule_def::recursive(){return recursive_;}
+ void rule_def::recursive(bool Recursive){recursive_ = Recursive;}
+ int rule_def::lhs_use_cnt(){return lhs_use_cnt_;};
+ void rule_def::lhs_use_cnt(int Use_cnt){lhs_use_cnt_ = Use_cnt;}
+ int rule_def::rhs_use_cnt(){return rhs_use_cnt_;}
+ void rule_def::rhs_use_cnt(int Use_cnt){rhs_use_cnt_ = Use_cnt;}
+
+ void rule_def::add_closure_rule_making_up_first_set(rule_in_stbl* Rule){
+ if(closure_rules_making_up_first_set_.find(Rule)
+ !=
+ closure_rules_making_up_first_set_ .end()) return;
+ closure_rules_making_up_first_set_.insert(Rule);
+ }
+ void rule_def::add_rule_adding_T_in_first_set
+ (T_in_stbl* T,std::string* Rule_enumerate){
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator i;
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator ie;
+ ie = rules_adding_T_in_first_set_.end();
+ i = rules_adding_T_in_first_set_.find(T);
+ if(i == ie){
+ rules_adding_T_in_first_set_[T] = std::set<std::string*>();
+ i = rules_adding_T_in_first_set_.find(T);
+ i->second.insert(Rule_enumerate);
+ return;
+ }
+ i->second.insert(Rule_enumerate);
+ }
+
+ std::string* rule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void rule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ std::set<T_in_stbl*>* rule_def::first_set(){
+ return &first_set_;
+ }
+ std::set<T_called_thread_eosubrule*>* rule_def::called_thread_first_set(){
+ return &called_thread_first_set_;
+ }
+
+ void rule_def::add_to_first_set(T_in_stbl& T){
+ T_in_stbl* t = &T;
+ std::set<T_in_stbl*>::iterator i;
+ i = first_set_.find(t);
+ if(i == first_set_.end()){
+ first_set_.insert(t);
+ }
+ }
+ void rule_def::add_to_called_thread_first_set(T_called_thread_eosubrule* T){
+ std::set<T_called_thread_eosubrule*>::iterator i;
+ i = called_thread_first_set_.find(T);
+ if(i == called_thread_first_set_.end()){
+ called_thread_first_set_.insert(T);
+ }
+ }
+
+ void rule_def::enum_id(int Id){enum_id_=Id;}
+ int rule_def::enum_id(){return enum_id_;}
+ void rule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ T_subrules_phrase* subrules_ph = subrules();
+ std::vector<T_subrule_def*>* subrule_list = subrules_ph->subrules();
+ std::vector<T_subrule_def*>::iterator sri = subrule_list->begin();
+ std::vector<T_subrule_def*>::iterator srie = subrule_list->end();
+ AST* subrule_lvl = 0;
+ for(;sri!=srie;++sri){// walk subrules
+ T_subrule_def* srdef = *sri;
+ AST* srt = srdef->subrule_s_tree();
+ if(subrule_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*srt);
+ subrule_lvl = srt;
+ }else{ // subrule brothers
+ AST::join_sts(*subrule_lvl,*srt);
+ subrule_lvl = srt;
+ }
+ }
+ }
+
+ AST* rule_def::rule_s_tree(){
+ return its_tree_;
+ }
+
+ void rule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* rule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ T_rule_lhs_phrase* rule_def::rule_lhs(){
+ return rule_lhs_;
+ }
+
+ void rule_def::rule_lhs(T_rule_lhs_phrase* Lhs){
+ rule_lhs_ = Lhs;
+ }
+
+ void rule_def::parallel_mntr(T_parallel_monitor_phrase* Mntr){
+ parallel_mntr_ = Mntr;
+ }
+
+ T_parallel_monitor_phrase* rule_def::parallel_mntr(){
+ return parallel_mntr_;
+ }
+
+ T_subrules_phrase* rule_def::subrules(){
+ return subrules_;
+ }
+
+ void rule_def::subrules(T_subrules_phrase* Subrules){
+ subrules_ = Subrules;
+ }
+
+ std::string* rule_def::rule_name(){return &rule_name_;}
+
+ bool rule_def::autodelete(){return auto_delete_;}
+ void rule_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool rule_def::autoabort(){return auto_abort_;}
+ void rule_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ bool rule_def::epsilon(){return epsilon_;}
+ void rule_def::epsilon(bool Ton){epsilon_ = Ton;}
+
+ bool rule_def::derive_t(){return derive_t_;}
+ void rule_def::derive_t(bool Ton){derive_t_ = Ton;}
+
+ ***
+ destructor
+ delete R->parallel_mntr_;
+ delete R->rule_lhs_;
+ delete R->subrules_;
+ ***
+ }
+)
+
+"rules-phrase" (sym-class T_rules_phrase {
+ user-declaration
+ public:
+ T_rules_phrase();
+ void destroy_rules_alphabet();
+ std::map<std::string,rule_def*>* rules_alphabet();
+ CAbs_lr1_sym* add_r_to_alphabet(rule_def* R,yacco2::Parser* P);
+ std::vector<rule_def*>* crt_order();
+ void rules_tree(AST* Tree);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ std::map<std::string,rule_def*> rules_alphabet_;
+ std::vector<rule_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ ***
+ user-implementation
+ T_rules_phrase::T_rules_phrase()
+T_CTOR("rules-phrase",T_Enum::T_T_rules_phrase_,&dtor_T_rules_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rules_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rules_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+
+ void T_rules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rules_phrase::phrase_tree(){return phrase_tree_;}
+
+ std::map<string,rule_def*>*
+ T_rules_phrase::rules_alphabet(){
+ return &rules_alphabet_;
+ }
+
+ void T_rules_phrase::destroy_rules_alphabet(){
+ std::vector<rule_def*>::iterator i = crt_order_.begin();
+ std::vector<rule_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ rules_alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rules_phrase::
+ add_r_to_alphabet(rule_def* R,yacco2::Parser* P){
+ std::string key(R->rule_name()->c_str());
+ std::map<std::string,rule_def*>::iterator i = rules_alphabet_.find(key);
+ if(i != rules_alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*R,__FILE__,__LINE__);
+ return sym;
+ }
+ rules_alphabet_[key] = R;
+ crt_order_.push_back(R);
+ return 0;
+ }
+ std::vector<rule_def*>*
+ T_rules_phrase::
+ crt_order(){return &crt_order_;}
+ ***
+ destructor
+ R->destroy_rules_alphabet();
+ ***
+ }
+)
+
+"subrule-def"
+/@
+The |its_grammar_s_pos_| provides its position within the grammar.
+Not important in gening of the grammar but used in the cross reference document.
+As the address of the |T_subrule_def| object
+does not garantee ascending order, this does.
+@/
+(sym-class T_subrule_def {
+ user-declaration
+ public:
+ T_subrule_def();
+ int subrule_no_of_rule();
+ void subrule_no_of_rule(int Subrule_no);
+ void remove_subrule_directives();
+ std::map<std::string,CAbs_lr1_sym*>* subrule_directives();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ std::vector<CAbs_lr1_sym*>* subrule_elems();
+ void add_elem_to_subrule_vector(CAbs_lr1_sym* Elem);
+ int no_of_elems();
+ void remove_subrule_elems_from_vector();
+ bool epsilon();
+ void epsilon(bool Epsilon);
+ bool derive_t();
+ void derive_t(bool Epsilon);
+ rule_def* its_rule_def();
+ void its_rule_def(rule_def* Its_rule_def);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* subrule_s_tree();
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ int its_grammar_s_pos();
+ void its_grammar_s_pos(int Pos);
+ private:
+ std::map<std::string,CAbs_lr1_sym*> subrule_directives_;
+ std::vector<CAbs_lr1_sym*> subrule_elems_;
+ int subrule_no_of_rule_;// rel 1
+ int no_of_elems_;
+ bool epsilon_;
+ bool derive_t_;
+ rule_def* its_rule_def_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int its_grammar_s_pos_;
+ std::string grammar_s_enumerate_;
+ ***
+ user-implementation
+ T_subrule_def::T_subrule_def()
+T_CTOR("subrule-def",T_Enum::T_T_subrule_def_,&dtor_T_subrule_def,false,false)
+ {subrule_no_of_rule_ = 0;
+ no_of_elems_ = 0;
+ epsilon_ = false;
+ derive_t_ = false;
+ its_rule_def_ = 0;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ its_grammar_s_pos_ = 0;
+ }
+ int T_subrule_def::its_grammar_s_pos(){return its_grammar_s_pos_;}
+ void T_subrule_def::its_grammar_s_pos(int Pos){its_grammar_s_pos_ = Pos;}
+ int T_subrule_def::subrule_no_of_rule(){
+ return subrule_no_of_rule_;
+ }
+ void T_subrule_def::subrule_no_of_rule(int Subrule_no){
+ subrule_no_of_rule_ = Subrule_no;
+ }
+
+ std::string* T_subrule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_subrule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ void T_subrule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ std::vector<CAbs_lr1_sym*>* element_list = subrule_elems();
+ std::vector<CAbs_lr1_sym*>::iterator ei = element_list->begin();
+ std::vector<CAbs_lr1_sym*>::iterator eie = element_list->end();
+ AST* element_lvl = 0;
+ for(;ei!=eie;++ei){// walk elements of subrule
+ CAbs_lr1_sym* elem_def = *ei;
+ AST* elemtt = new AST(*elem_def);
+ int id = elem_def->enumerated_id__;
+ using namespace NS_yacco2_terminals;
+ switch (id){
+ case T_Enum::T_refered_rule_: {
+ refered_rule* rrule = (refered_rule*)elem_def;
+ rrule->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_: {
+ T_eosubrule* eos = (T_eosubrule*)elem_def;
+ eos->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_refered_T_: {
+ refered_T* rt = (refered_T*)elem_def;
+ rt->tree_node(elemtt);
+ break;
+ }
+ }
+ if(element_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*elemtt);
+ element_lvl = elemtt;
+ }else{ // element brothers
+ AST::join_sts(*element_lvl,*elemtt);
+ element_lvl = elemtt;
+ }
+ }
+ }
+
+ AST* T_subrule_def::subrule_s_tree(){
+ return its_tree_;
+ }
+
+ void T_subrule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_subrule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ rule_def* T_subrule_def::its_rule_def(){
+ return its_rule_def_;
+ }
+
+ void T_subrule_def::its_rule_def(rule_def* Its_rule_def){
+ its_rule_def_ = Its_rule_def;
+ }
+
+ std::vector<CAbs_lr1_sym*>* T_subrule_def::subrule_elems(){
+ return &subrule_elems_;
+ }
+
+ bool T_subrule_def::epsilon(){
+ return epsilon_;
+ }
+
+ void T_subrule_def::epsilon(bool Epsilon){
+ epsilon_ = Epsilon;
+ }
+
+ bool T_subrule_def::derive_t(){
+ return derive_t_;
+ }
+
+ void T_subrule_def::derive_t(bool Ton){
+ derive_t_ = Ton;
+ }
+
+ void T_subrule_def::
+ add_elem_to_subrule_vector(CAbs_lr1_sym* Elem){
+ ++no_of_elems_;
+ subrule_elems_.push_back(Elem);
+ }
+ int T_subrule_def::no_of_elems(){
+ return no_of_elems_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_subrule_def::subrule_directives(){
+ return &subrule_directives_;
+ }
+
+ void T_subrule_def::remove_subrule_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = subrule_directives_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = subrule_directives_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_subrule_def::
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = subrule_directives_.find(key);
+ if(i == subrule_directives_.end()){
+ subrule_directives_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_subrule_directives();
+ return sym;
+ }
+ void T_subrule_def::remove_subrule_elems_from_vector(){
+ std::vector<CAbs_lr1_sym*>::iterator i = subrule_elems_.begin();
+ std::vector<CAbs_lr1_sym*>::iterator ie = subrule_elems_.end();
+ for(;i != ie;++i){
+ delete *i;
+ }
+ }
+ ***
+ destructor
+ R->remove_subrule_directives();
+ R->remove_subrule_elems_from_vector();
+ ***
+ }
+)
+//
+"subrules-phrase" (sym-class T_subrules_phrase {
+ user-declaration
+ public:
+ T_subrules_phrase();
+ void destroy_subrules();
+ std::vector<T_subrule_def*>* subrules();
+ void add_sr_to_subrules(T_subrule_def* R);
+ int no_subrules();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ std::vector<T_subrule_def*> subrules_;
+ int no_subrules_;
+ AST* phrase_tree_;
+ ***
+ user-implementation
+ T_subrules_phrase::T_subrules_phrase()
+T_CTOR("subrules-phrase",T_Enum::T_T_subrules_phrase_,&dtor_T_subrules_phrase,false,false)
+ {no_subrules_ = 0;phrase_tree_=0;}
+ void T_subrules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_subrules_phrase::phrase_tree(){return phrase_tree_;}
+
+ int T_subrules_phrase::no_subrules(){
+ return no_subrules_;
+ }
+ std::vector<T_subrule_def*>*
+ T_subrules_phrase::subrules(){
+ return &subrules_;
+ }
+
+ void T_subrules_phrase::destroy_subrules(){
+ std::vector<T_subrule_def*>::iterator i = subrules_.begin();
+ std::vector<T_subrule_def*>::iterator ie = subrules_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ }
+
+ void
+ T_subrules_phrase::
+ add_sr_to_subrules(T_subrule_def* R){
+ ++no_subrules_;
+ subrules_.push_back(R);
+ }
+ ***
+ destructor
+ R->destroy_subrules();
+ ***
+ }
+)
+
+"T-in-stbl" (sym-class T_in_stbl { // Yacco2
+ user-declaration
+ public:
+ T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_terminal_def* t_def();
+ std::list<refered_T*>* xref_t();
+ void add_T_into_xref(refered_T& T);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_terminal_def* t_def_;
+ std::list<refered_T*> xref_t_;
+ int stbl_idx_;
+ ***
+ user-implementation
+T_in_stbl::T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("T-in-stbl",T_Enum::T_T_in_stbl_,0,false,false)
+ {t_def_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_terminal_def* T_in_stbl::t_def(){
+ return t_def_;
+ }
+ std::list<refered_T*>* T_in_stbl::xref_t(){
+ return &xref_t_;;
+ }
+ void T_in_stbl::add_T_into_xref(refered_T& T){
+ xref_t_.push_back(&T);
+ }
+ void T_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int T_in_stbl::stbl_idx(){return stbl_idx_;}
+ ***
+ }
+)
+
+"refered-T" (sym-class refered_T {
+ user-declaration
+ public:
+ refered_T(T_in_stbl& Term_in_stbl);
+ T_in_stbl* t_in_stbl();
+ T_terminal_def* its_t_def();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_in_stbl* t_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ ***
+ user-implementation
+ refered_T::refered_T(T_in_stbl& Term_in_stbl)
+ T_CTOR("refered-T",T_Enum::T_refered_T_,0,false,false)
+ {t_in_stbl_ = &Term_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_T::element_pos(){return element_pos_;}
+ void refered_T::element_pos(int Pos){element_pos_ = Pos;}
+
+ T_terminal_def* refered_T::its_t_def(){
+ return t_in_stbl_->t_def();
+ }
+ rule_def* refered_T::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* refered_T::tree_node(){
+ return tree_node_;
+ }
+ void refered_T::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_T::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_T::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_in_stbl* refered_T::t_in_stbl(){
+ return t_in_stbl_;
+ }
+
+ T_subrule_def* refered_T::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_T::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+ ***
+ }
+)
+
+"rule-in-stbl" (sym-class rule_in_stbl {
+ user-declaration
+ public:
+ rule_in_stbl(rule_def& Rule_def);
+ rule_def* r_def();
+ std::list<refered_rule*>* xref_r();
+ void add_R_into_xref(refered_rule& R);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ rule_def* r_def_;
+ std::list<refered_rule*> xref_r_;
+ int stbl_idx_;
+ ***
+ user-implementation
+ rule_in_stbl::rule_in_stbl(rule_def& Rule_def)
+ T_CTOR("rule-in-stbl",T_Enum::T_rule_in_stbl_,0,false,false)
+ {r_def_ = &Rule_def;
+ stbl_idx_ = -1;
+ }
+ rule_def* rule_in_stbl::r_def(){
+ return r_def_;
+ }
+ std::list<refered_rule*>* rule_in_stbl::xref_r(){
+ return &xref_r_;;
+ }
+ void rule_in_stbl::add_R_into_xref(refered_rule& R){
+ xref_r_.push_back(&R);
+ }
+ void rule_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int rule_in_stbl::stbl_idx(){return stbl_idx_;}
+ ***
+ }
+)
+
+"refered-rule" (sym-class refered_rule {
+ user-declaration
+ public:
+ refered_rule(rule_in_stbl& Rule_in_stbl);
+ rule_in_stbl* Rule_in_stbl();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ rule_in_stbl* rule_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ ***
+ user-implementation
+ refered_rule::refered_rule(rule_in_stbl& Rule_in_stbl)
+ T_CTOR("refered-rule",T_Enum::T_refered_rule_,0,false,false)
+ {rule_in_stbl_ = &Rule_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_rule::element_pos(){return element_pos_;}
+ void refered_rule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* refered_rule::its_rule_def(){
+ return rule_in_stbl_->r_def();
+ }
+ AST* refered_rule::tree_node(){
+ return tree_node_;
+ }
+ void refered_rule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_rule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_rule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_subrule_def* refered_rule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_rule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ rule_in_stbl* refered_rule::Rule_in_stbl(){
+ return rule_in_stbl_;
+ }
+ ***
+ }
+)
+
+"transitive" (sym-class T_transitive)
+"grammar-name" (sym-class T_grammar_name)
+"thread-name" (sym-class T_thread_name)
+"monolithic" (sym-class T_monolithic)
+"no-of-T" (sym-class T_no_of_T)
+"list-of-native-first-set-terminals"
+ (sym-class T_list_of_native_first_set_terminals)
+"end-list-of-native-first-set-terminals"
+ (sym-class T_end_list_of_native_first_set_terminals)
+"list-of-transitive-threads"
+ (sym-class T_list_of_transitive_threads)
+"end-list-of-transitive-threads"
+ (sym-class T_end_list_of_transitive_threads)
+"emitfile" (sym-class T_emitfile)
+"preamble" (sym-class T_preamble)
+"end-preamble" (sym-class T_end_preamble)
+"T-alphabet" (sym-class T_T_alphabet)
+"end-T-alphabet" (sym-class T_end_T_alphabet)
+"file-of-T-alphabet" (sym-class T_file_of_T_alphabet)
+
+
+"T-attributes" (sym-class T_attributes {
+ user-declaration
+ public:
+T_attributes(const char* Fully_qualified_T_name,int Enum);
+std::string fully_qualified_T_name_;
+ int T_enum_;
+ ***
+ user-implementation
+ T_attributes::T_attributes(const char* Fully_qualified_T_name,int Enum)
+ T_CTOR("T-attributes",T_Enum::T_T_attributes_,0,false,false)
+ {fully_qualified_T_name_ += Fully_qualified_T_name;
+ T_enum_ = Enum;
+ }
+ ***
+ }
+)
+
+"tth-in-stbl" (sym-class tth_in_stbl { // linker terminals
+ user-declaration
+ public:
+ tth_in_stbl(T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_attributes* t_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_attributes* t_in_stbl_;
+ int stbl_idx_;
+ ***
+ user-implementation
+ tth_in_stbl::tth_in_stbl
+ (T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("tth-in-stbl",T_Enum::T_tth_in_stbl_,0,false,false)
+ {t_in_stbl_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_attributes* tth_in_stbl::t_in_stbl(){
+ return t_in_stbl_;
+ }
+ void tth_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int tth_in_stbl::stbl_idx(){return stbl_idx_;}
+ ***
+ }
+)
+
+"thread-attributes" (sym-class thread_attributes {
+ user-declaration
+ public:
+ thread_attributes(const char* Fully_qualified_th_name);
+ thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments);
+ std::string fully_qualified_th_name_;
+ char transitive_;
+ T_c_string* grammar_file_name_;
+ T_c_string* name_space_name_;
+ T_c_string* thread_name_;
+ char monolithic_;
+ T_c_string* file_name_;
+ std::vector<int> list_of_Ts_;
+ std::set<int> fs_;
+ std::vector<thread_attributes*> list_of_transitive_threads_;
+ int th_enum_;
+ T_c_string* fsm_comments_;
+ AST* called_thread_graph_;
+
+ ***
+ user-implementation
+ thread_attributes::thread_attributes(const char* Fully_qualified_th_name)
+T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = ' ';
+ grammar_file_name_ = 0;
+ name_space_name_ = 0;
+ thread_name_ = 0;
+ monolithic_ = ' ';
+ file_name_ = 0;
+ th_enum_ = -1;
+ fsm_comments_ = 0;
+ called_thread_graph_ = 0;
+ }
+ thread_attributes::thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments)
+ T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = Transitive;
+ grammar_file_name_ = Grammar_name;
+ name_space_name_ = Name_space_name;
+ thread_name_ = Thread_name;
+ monolithic_ = Monolithic;
+ file_name_ = File_name;
+ if(!List_of_Ts.empty()){
+ copy(List_of_Ts.begin()
+ ,List_of_Ts.end()
+ ,back_inserter(list_of_Ts_));
+ std::vector<int>::iterator i = List_of_Ts.begin();
+ std::vector<int>::iterator ie = List_of_Ts.end();
+ for(;i!=ie;++i){
+ fs_.insert(*i);
+ }
+ }
+ if(!List_of_transitive_thds.empty())
+ copy(List_of_transitive_thds.begin()
+ ,List_of_transitive_thds.end()
+ ,back_inserter(list_of_transitive_threads_));
+ th_enum_ = -1;
+ fsm_comments_ = Fsm_comments;
+ called_thread_graph_ = 0;
+ }
+ ***
+ }
+)
+"th-in-stbl" (sym-class th_in_stbl {
+ user-declaration
+ public:
+ th_in_stbl(thread_attributes* Fnd_th_in_stbl);
+ thread_attributes* thread_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ thread_attributes* th_in_stbl_;
+ int stbl_idx_;
+ ***
+ user-implementation
+ th_in_stbl::th_in_stbl(thread_attributes* Fnd_th_in_stbl)
+ T_CTOR("th-in-stbl",T_Enum::T_th_in_stbl_,0,false,false)
+ {th_in_stbl_ = Fnd_th_in_stbl;
+ stbl_idx_ = -1;
+ }
+ thread_attributes* th_in_stbl::thread_in_stbl(){
+ return th_in_stbl_;
+ }
+ void th_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int th_in_stbl::stbl_idx(){return stbl_idx_;}
+ ***
+ }
+)
+"kw-in-stbl" (sym-class kw_in_stbl {
+ user-declaration
+ public:
+ kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl);
+ CAbs_lr1_sym* keyword_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ CAbs_lr1_sym* kw_in_stbl_;
+ int stbl_idx_;
+ ***
+ user-implementation
+ kw_in_stbl::kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl)
+ T_CTOR("kw-in-stbl",T_Enum::T_kw_in_stbl_,0,false,false)
+ {kw_in_stbl_ = Fnd_kw_in_stbl;
+ stbl_idx_ = -1;
+ }
+ CAbs_lr1_sym* kw_in_stbl::keyword_in_stbl(){
+ return kw_in_stbl_;
+ }
+ void kw_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int kw_in_stbl::stbl_idx(){return stbl_idx_;}
+ ***
+ }
+)
+"la-express-source" (sym-class T_la_expr_src {
+ user-declaration
+ public:
+ T_la_expr_src();
+ yacco2::TOKEN_GAGGLE* la_tok_can();
+ void zero_la_tok_can();
+ private:
+ yacco2::TOKEN_GAGGLE* la_tok_can_;
+ ***
+ user-implementation
+ T_la_expr_src::T_la_expr_src()
+T_CTOR("la-express-source",T_Enum::T_T_la_expr_src_,0,false,false)
+ {la_tok_can_ = new yacco2::TOKEN_GAGGLE;
+ }
+ void T_la_expr_src::zero_la_tok_can(){
+ la_tok_can_ = 0;
+ }
+ yacco2::TOKEN_GAGGLE* T_la_expr_src::la_tok_can(){
+ return la_tok_can_;
+ }
+ ***
+ }
+)
+"eosubrule" (sym-class T_eosubrule{
+ user-declaration
+ public:
+ T_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ ***
+ user-implementation
+ T_eosubrule::T_eosubrule()
+ T_CTOR("eosubrule",T_Enum::T_T_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_eosubrule::element_pos(){return element_pos_;}
+ void T_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+
+ rule_def* T_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+ ***
+ }
+)
+
+"called thread eosubrule" (sym-class T_called_thread_eosubrule{
+ user-declaration
+ public:
+ T_called_thread_eosubrule(T_identifier* Ns,T_identifier* Thread_name);
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ T_identifier* ns();
+ T_identifier* called_thread_name();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ T_identifier* ns_;
+ T_identifier* called_thread_name_;
+ int element_pos_;
+ ***
+ user-implementation
+T_called_thread_eosubrule::T_called_thread_eosubrule
+ (T_identifier* Ns,T_identifier* Thd_name)
+T_CTOR("called thread eosubrule",T_Enum::T_T_called_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ ns_ = Ns;
+ called_thread_name_ = Thd_name;
+ element_pos_ = 0;
+ }
+ int T_called_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_called_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ T_identifier* T_called_thread_eosubrule::ns(){
+ return ns_;
+ }
+ T_identifier* T_called_thread_eosubrule::called_thread_name(){
+ return called_thread_name_;
+ }
+ rule_def* T_called_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_called_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_called_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_called_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_called_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_called_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_called_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+ ***
+ }
+)
+
+"null call thread eosubrule" (sym-class T_null_call_thread_eosubrule{
+ user-declaration
+ public:
+ T_null_call_thread_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ ***
+ user-implementation
+ T_null_call_thread_eosubrule::T_null_call_thread_eosubrule()
+T_CTOR("null call thread eosubrule",T_Enum::T_T_null_call_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_null_call_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_null_call_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* T_null_call_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_null_call_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_null_call_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_null_call_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_null_call_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_null_call_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_null_call_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+ ***
+ }
+)
+
+"cweb-comment"
+(sym-class T_cweb_comment{
+ user-declaration
+ public:
+ T_cweb_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+ ***
+ user-implementation
+ T_cweb_comment::
+ T_cweb_comment(const std::string& Comment_data)
+ T_CTOR("cweb-comment",T_Enum::T_T_cweb_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_cweb_comment::comment_data(){return &comment_data_;}
+ ***
+ }
+)
+"grammar-phrase" (sym-class T_grammar_phrase)
+"cweb-marker"
+(sym-class T_cweb_marker{
+ user-declaration
+ public:
+ T_cweb_marker(AST* Node);
+ T_cweb_marker();
+ AST* ast();
+ private:AST* ast_;
+ ***
+ user-implementation
+ T_cweb_marker::
+ T_cweb_marker(AST* Node)
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = Node;}
+ T_cweb_marker::
+ T_cweb_marker()
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = 0;}
+ AST* T_cweb_marker::ast(){return ast_;}
+ ***
+ }
+)
+
+"lint"
+ /@
+ Gathers the fluff.
+ @/
+ (sym-class T_lint{
+ user-declaration
+ T_lint();
+ ***
+ user-implementation
+ T_lint::T_lint()
+ T_CTOR("lint",T_Enum::T_T_lint_,0,false,false)
+ {}
+ T_lint lint__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_lint__ = &lint__;
+ ***
+ }
+)
+
+"list-of-used-threads"
+ (sym-class T_list_of_used_threads)
+"end-list-of-used-threads"
+ (sym-class T_end_list_of_used_threads)
+} // end of terminals
diff --git a/web/yacco2/compiler/grammars/yacco2_terminals.cpp b/web/yacco2/compiler/grammars/yacco2_terminals.cpp
new file mode 100644
index 0000000000..faec51e511
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_terminals.cpp
@@ -0,0 +1,1946 @@
+/*
+ File: yacco2_terminals.cpp
+ Date and Time: Sun Apr 20 13:54:30 2014
+*/
+#include "yacco2_terminals.h"
+ using namespace NS_yacco2_terminals;
+ using namespace NS_yacco2_T_enum;
+T_option_t::
+T_option_t()
+ T_CTOR("option-t",T_Enum::T_T_option_t_,0,true,false){}
+T_option_p::
+T_option_p()
+ T_CTOR("option-p",T_Enum::T_T_option_p_,0,true,false){}
+T_option_err::
+T_option_err()
+ T_CTOR("option-err",T_Enum::T_T_option_err_,0,true,false){}
+
+ T_esc_seq::
+ T_esc_seq(const char* Esc_data)
+ T_CTOR("esc-seq",T_Enum::T_T_esc_seq_,0,true,false)
+ {
+ esc_data_ += Esc_data;
+ }
+ std::string* T_esc_seq::esc_data(){return &esc_data_;};
+
+ T_eol::
+ T_eol()
+ T_CTOR("eol",T_Enum::T_T_eol_,0,false,false)
+ {}
+ T_eol eol__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_eol__ = &eol__;
+
+ T_basic_char::
+ T_basic_char(CAbs_lr1_sym* Basic_char)
+ T_CTOR("basic-char",T_Enum::T_T_basic_char_,&dtor_T_basic_char,false,false)
+ {basic_char_ = Basic_char;}
+ void T_basic_char::zero_out_basic_char(){basic_char_ = 0;}
+ CAbs_lr1_sym* T_basic_char::basic_char()const{return basic_char_;}
+ void T_basic_char::dtor_T_basic_char(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_basic_char* R = (T_basic_char*)(This);
+
+ if(R->basic_char_!=0)
+ delete R->basic_char();
+
+}
+
+ T_raw_char::
+ T_raw_char(CAbs_lr1_sym* Raw_char)
+ T_CTOR("raw-char",T_Enum::T_T_raw_char_,0,false,false)
+ {raw_char_ = Raw_char;}
+ void T_raw_char::zero_out_raw_char(){raw_char_ = 0;}
+ CAbs_lr1_sym* T_raw_char::raw_char()const{return raw_char_;}
+ void T_raw_char::dtor_T_raw_char(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_raw_char* R = (T_raw_char*)(This);
+
+ if(R->raw_char_!=0)
+ delete R->raw_char();
+
+}
+
+ T_comment::
+ T_comment(const std::string& Comment_data)
+ T_CTOR("comment",T_Enum::T_T_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_comment::comment_data(){return &comment_data_;}
+
+ T_ws::
+ T_ws(const std::string& Ws_data)
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {ws_data_+= Ws_data;}
+ T_ws::
+ T_ws()
+ T_CTOR("ws",T_Enum::T_T_ws_,0,false,false)
+ {}
+ std::string* T_ws::ws_data(){return &ws_data_;}
+ T_ws ws__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_ws__ = &ws__;
+
+ T_angled_string::T_angled_string(const string& Angled_string)
+ T_CTOR("angled-string",T_Enum::T_T_angled_string_,0,false,false)
+ {angled_string_ = Angled_string;}
+ std::string* T_angled_string::angled_string(){return &angled_string_;}
+
+ T_c_literal::T_c_literal(const string& C_literal)
+ T_CTOR("c-literal",T_Enum::T_T_c_literal_,0,false,false)
+ {c_literal_ = C_literal;}
+ std::string* T_c_literal::c_literal(){return &c_literal_;}
+
+ T_c_string::T_c_string(const std::string& C_string)
+ T_CTOR("c-string",T_Enum::T_T_c_string_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_c_string::c_string(){return &c_string_;}
+
+ T_xc_str::T_xc_str(const std::string& C_string)
+ T_CTOR("xc-str",T_Enum::T_T_xc_str_,0,false,false)
+ {c_string_ = C_string;}
+ std::string* T_xc_str::c_string(){return &c_string_;}
+
+ T_unquoted_string::T_unquoted_string(const std::string& String)
+ T_CTOR("unquoted-string",T_Enum::T_T_unquoted_string_,0,false,false)
+ {unquoted_string_ = String;}
+ std::string* T_unquoted_string::unquoted_string(){return &unquoted_string_;}
+
+ T_file_inclusion::T_file_inclusion
+ (T_c_string* File_name,CAbs_lr1_sym* Error)
+ T_CTOR("file-inclusion",T_Enum::T_T_file_inclusion_,0,false,false)
+ {file_name_ = File_name;
+ error_sym_ = Error;}
+ CAbs_lr1_sym* T_file_inclusion::error_sym(){
+ return error_sym_;
+ }
+ void T_file_inclusion::error_sym(CAbs_lr1_sym* Error){
+ error_sym_ = Error;
+ }
+ T_c_string* T_file_inclusion::file_name(){return file_name_;}
+ T_file_inclusion::~T_file_inclusion(){delete file_name_;delete error_sym_;}
+
+ T_identifier::T_identifier(yacco2::KCHARP Identifier)
+ T_CTOR("identifier",T_Enum::T_T_identifier_,0,false,false)
+ {identifier_ = Identifier;}
+ std::string* T_identifier::identifier(){return &identifier_;}
+
+ T_int_no::
+ T_int_no(long S_no)
+ T_CTOR("int-no",T_Enum::T_T_int_no_,0,false,false)
+ {no_ = S_no;}
+ long T_int_no::no(){return no_;};
+
+ T_raw_characters::T_raw_characters()
+ T_CTOR("#raw-characters",T_Enum::T_T_raw_characters_,&dtor_T_raw_characters,false,false)
+ {rc_phrase_ = 0;}
+ T_rc_phrase* T_raw_characters::rc_phrase(){return rc_phrase_;}
+ void T_raw_characters::rc_phrase(T_rc_phrase* Phrase){rc_phrase_ = Phrase;}
+ void T_raw_characters::dtor_T_raw_characters(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_raw_characters* R = (T_raw_characters*)(This);
+
+ if(R->rc_phrase_!=0)
+ delete R->rc_phrase_;
+
+}
+
+ T_lr1_constant_symbols::T_lr1_constant_symbols()
+T_CTOR("#lr1-constant-symbols",T_Enum::T_T_lr1_constant_symbols_,&dtor_T_lr1_constant_symbols,false,false)
+ {lr1_k_phrase_ = 0;}
+ T_lr1_k_phrase* T_lr1_constant_symbols::lr1_k_phrase(){return lr1_k_phrase_;}
+ void T_lr1_constant_symbols::lr1_k_phrase(T_lr1_k_phrase* Phrase){lr1_k_phrase_ = Phrase;}
+ void T_lr1_constant_symbols::dtor_T_lr1_constant_symbols(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_lr1_constant_symbols* R = (T_lr1_constant_symbols*)(This);
+
+ if(R->lr1_k_phrase_ != 0)
+ delete R->lr1_k_phrase_;
+
+}
+
+ T_error_symbols::T_error_symbols()
+T_CTOR("#error-symbols",T_Enum::T_T_error_symbols_,&dtor_T_error_symbols,false,false)
+ {error_symbols_phrase_ = 0;}
+ T_error_symbols_phrase*
+ T_error_symbols::error_symbols_phrase(){return error_symbols_phrase_;}
+ void T_error_symbols::
+ error_symbols_phrase(T_error_symbols_phrase* Phrase){error_symbols_phrase_ = Phrase;}
+ void T_error_symbols::dtor_T_error_symbols(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_error_symbols* R = (T_error_symbols*)(This);
+
+ if(R->error_symbols_phrase_ != 0)
+ delete R->error_symbols_phrase_;
+
+}
+T_eocode::
+T_eocode()
+ T_CTOR("#***",T_Enum::T_T_eocode_,0,false,false){}
+T_AD::
+T_AD()
+ T_CTOR("#AD",T_Enum::T_T_AD_,0,false,false){}
+T_AB::
+T_AB()
+ T_CTOR("#AB",T_Enum::T_T_AB_,0,false,false){}
+
+ T_parallel_la_boundary::T_parallel_la_boundary()
+ T_CTOR("#parallel-la-boundary",T_Enum::T_T_parallel_la_boundary_,0,false,false)
+ {la_supplier_ = 0;
+ cweb_marker_=0;
+ }
+ void T_parallel_la_boundary::cweb_la_srce_expr(const char* Srce_expr){
+ cweb_la_srce_expr_.append(Srce_expr);
+ }
+ std::string* T_parallel_la_boundary::cweb_la_srce_expr(){
+ return &cweb_la_srce_expr_;
+ }
+
+ yacco2::TOKEN_GAGGLE* T_parallel_la_boundary::la_supplier(){return la_supplier_;}
+ void T_parallel_la_boundary::la_supplier(yacco2::TOKEN_GAGGLE* Supplier)
+ {la_supplier_ = Supplier;}
+
+ void T_parallel_la_boundary::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_la_boundary::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ std::set<T_in_stbl*>* T_parallel_la_boundary::la_first_set()
+ {return &la_first_set_;}
+ void T_parallel_la_boundary::la_first_set(std::set<T_in_stbl*>& Supplier)
+ {
+ la_first_set_.insert(Supplier.begin(),Supplier.end());
+ }
+
+ T_arbitrator_code::T_arbitrator_code()
+ T_CTOR("#arbitrator-code",T_Enum::T_T_arbitrator_code_,0,false,false)
+ {syntax_code_ = 0;cweb_marker_=0;}
+ T_syntax_code* T_arbitrator_code::syntax_code(){return syntax_code_;}
+ void T_arbitrator_code::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ void T_arbitrator_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_arbitrator_code::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ T_parallel_parser::T_parallel_parser()
+ T_CTOR("#parallel-parser",T_Enum::T_T_parallel_parser_,&dtor_T_parallel_parser,false,false)
+ {parallel_parser_phrase_ = 0;}
+ T_parallel_parser_phrase*
+ T_parallel_parser::parallel_parser_phrase(){return parallel_parser_phrase_;}
+ void T_parallel_parser::parallel_parser_phrase
+ (T_parallel_parser_phrase* Phrase){parallel_parser_phrase_ = Phrase;}
+ void T_parallel_parser::dtor_T_parallel_parser(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_parallel_parser* R = (T_parallel_parser*)(This);
+
+ if(R->parallel_parser_phrase_ != 0)
+ delete R->parallel_parser_phrase_;
+
+}
+
+ T_parallel_thread_function::T_parallel_thread_function()
+ T_CTOR("#parallel-thread-function",T_Enum::T_T_parallel_thread_function_,0,false,false)
+ {id_ = 0;cweb_marker_=0;}
+ T_identifier* T_parallel_thread_function::identifier(){return id_;}
+ void T_parallel_thread_function::identifier(T_identifier* Id){id_ = Id;}
+ void T_parallel_thread_function::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_parallel_thread_function::cweb_marker(){
+ return cweb_marker_;
+ }
+ T_parallel_control_monitor::
+T_parallel_control_monitor()
+ T_CTOR("#parallel-control-monitor",T_Enum::T_T_parallel_control_monitor_,0,false,false){}
+
+ T_fsm::T_fsm()
+ T_CTOR("#fsm",T_Enum::T_T_fsm_,&dtor_T_fsm,false,false)
+ {fsm_phrase_ = 0;}
+ T_fsm_phrase* T_fsm::fsm_phrase(){return fsm_phrase_;}
+ void T_fsm::fsm_phrase(T_fsm_phrase* Phrase){fsm_phrase_ = Phrase;}
+ void T_fsm::dtor_T_fsm(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_fsm* R = (T_fsm*)(This);
+
+ if(R->fsm_phrase_ != 0)
+ delete R->fsm_phrase_;
+
+}
+T_fsm_id::
+T_fsm_id()
+ T_CTOR("#fsm-id",T_Enum::T_T_fsm_id_,0,false,false){}
+T_fsm_filename::
+T_fsm_filename()
+ T_CTOR("#fsm-filename",T_Enum::T_T_fsm_filename_,0,false,false){}
+T_fsm_namespace::
+T_fsm_namespace()
+ T_CTOR("#fsm-namespace",T_Enum::T_T_fsm_namespace_,0,false,false){}
+T_fsm_class::
+T_fsm_class()
+ T_CTOR("#fsm-class",T_Enum::T_T_fsm_class_,0,false,false){}
+T_fsm_version::
+T_fsm_version()
+ T_CTOR("#fsm-version",T_Enum::T_T_fsm_version_,0,false,false){}
+T_fsm_date::
+T_fsm_date()
+ T_CTOR("#fsm-date",T_Enum::T_T_fsm_date_,0,false,false){}
+T_fsm_debug::
+T_fsm_debug()
+ T_CTOR("#fsm-debug",T_Enum::T_T_fsm_debug_,0,false,false){}
+T_fsm_comments::
+T_fsm_comments()
+ T_CTOR("#fsm-comments",T_Enum::T_T_fsm_comments_,0,false,false){}
+
+ T_terminals::T_terminals()
+ T_CTOR("#terminals",T_Enum::T_T_terminals_,&dtor_T_terminals,false,true)
+ {terminals_phrase_ = 0;}
+ T_terminals_phrase* T_terminals::terminals_phrase(){return terminals_phrase_;}
+ void T_terminals::terminals_phrase(T_terminals_phrase* Phrase)
+ {terminals_phrase_ = Phrase;}
+ void T_terminals::dtor_T_terminals(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_terminals* R = (T_terminals*)(This);
+
+ if(R->terminals_phrase_ != 0)
+ delete R->terminals_phrase_;
+
+}
+
+ T_enumeration::T_enumeration()
+ T_CTOR("#T-enumeration",T_Enum::T_T_enumeration_,&dtor_T_enumeration,false,true)
+ {enum_phrase_ = 0;}
+ T_enum_phrase* T_enumeration::enum_phrase(){return enum_phrase_;}
+ void T_enumeration::enum_phrase(T_enum_phrase* Phrase){enum_phrase_ = Phrase;}
+ void T_enumeration::dtor_T_enumeration(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_enumeration* R = (T_enumeration*)(This);
+
+ if(R->enum_phrase_ != 0)
+ delete R->enum_phrase_;
+
+}
+T_file_name::
+T_file_name()
+ T_CTOR("#file-name",T_Enum::T_T_file_name_,0,false,false){}
+T_name_space::
+T_name_space()
+ T_CTOR("#name-space",T_Enum::T_T_name_space_,0,false,false){}
+T_sym_class::
+T_sym_class()
+ T_CTOR("#sym-class",T_Enum::T_T_sym_class_,0,false,false){}
+
+ T_rules::T_rules()
+ T_CTOR("#rules",T_Enum::T_T_rules_,&dtor_T_rules,false,true)
+ {rules_phrase_ = 0;}
+ T_rules_phrase* T_rules::rules_phrase(){return rules_phrase_;}
+ void T_rules::rules_phrase(T_rules_phrase* Phrase){rules_phrase_ = Phrase;}
+ void T_rules::dtor_T_rules(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_rules* R = (T_rules*)(This);
+
+ if(R->rules_phrase_ != 0)
+ delete R->rules_phrase_;
+
+}
+T_lhs::
+T_lhs()
+ T_CTOR("#lhs",T_Enum::T_T_lhs_,0,false,false){}
+
+ T_user_declaration::T_user_declaration()
+ T_CTOR("#user-declaration",T_Enum::T_T_user_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_declaration::syntax_code(){return syntax_code_;}
+ void T_user_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_user_prefix_declaration::T_user_prefix_declaration()
+ T_CTOR("#user-prefix-declaration",T_Enum::T_T_user_prefix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_prefix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_prefix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_user_suffix_declaration::T_user_suffix_declaration()
+ T_CTOR("#user-suffix-declaration",T_Enum::T_T_user_suffix_declaration_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_suffix_declaration::syntax_code(){return syntax_code_;}
+ void T_user_suffix_declaration::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_constructor::T_constructor()
+ T_CTOR("#constructor",T_Enum::T_T_constructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_constructor::syntax_code(){return syntax_code_;}
+ void T_constructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_destructor::T_destructor()
+ T_CTOR("#destructor",T_Enum::T_T_destructor_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_destructor::syntax_code(){return syntax_code_;}
+ void T_destructor::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_op::T_op()
+ T_CTOR("#op",T_Enum::T_T_op_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_op::syntax_code(){return syntax_code_;}
+ void T_op::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_failed::T_failed()
+ T_CTOR("#failed",T_Enum::T_T_failed_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_failed::syntax_code(){return syntax_code_;}
+ void T_failed::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_user_implementation::T_user_implementation()
+ T_CTOR("#user-implementation",T_Enum::T_T_user_implementation_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_implementation::syntax_code(){return syntax_code_;}
+ void T_user_implementation::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_user_imp_tbl::T_user_imp_tbl()
+ T_CTOR("#user-imp-tbl",T_Enum::T_T_user_imp_tbl_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_tbl::syntax_code(){return syntax_code_;}
+ void T_user_imp_tbl::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+
+ T_user_imp_sym::T_user_imp_sym()
+ T_CTOR("#user-imp-sym",T_Enum::T_T_user_imp_sym_,0,false,false)
+ {syntax_code_ = 0;}
+ T_syntax_code* T_user_imp_sym::syntax_code(){return syntax_code_;}
+ void T_user_imp_sym::syntax_code(T_syntax_code* Stc){syntax_code_ = Stc;}
+ T_constant_defs::
+T_constant_defs()
+ T_CTOR("#constant-defs",T_Enum::T_T_constant_defs_,0,false,false){}
+T_terminals_refs::
+T_terminals_refs()
+ T_CTOR("#terminals-refs",T_Enum::T_T_terminals_refs_,0,false,false){}
+T_terminals_sufx::
+T_terminals_sufx()
+ T_CTOR("#terminals-sufx",T_Enum::T_T_terminals_sufx_,0,false,false){}
+T_lrk_sufx::
+T_lrk_sufx()
+ T_CTOR("#lrk-sufx",T_Enum::T_T_lrk_sufx_,0,false,false){}
+T_selector::
+T_selector()
+ T_CTOR("->",T_Enum::T_T_selector_,0,false,false){}
+T_NULL::
+T_NULL()
+ T_CTOR("#NULL",T_Enum::T_T_NULL_,0,false,false){}
+T_2colon::
+T_2colon()
+ T_CTOR("::",T_Enum::T_T_2colon_,0,false,false){}
+
+ T_block::
+ T_block(yacco2::AST* Ast)
+ T_CTOR("block",T_Enum::T_T_block_,&dtor_T_block,false,true)
+ {ast_ = Ast;}
+ yacco2::AST* T_block::ast(){return ast_;}
+ void T_block::dtor_T_block(yacco2::VOIDP This,yacco2::VOIDP P){
+ bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;
+ T_block* R = (T_block*)(This);
+
+ if(ABORT_STATUS == true){
+ yacco2::AST::zero_content(*R->ast());// break dbl delete of self
+ yacco2::AST::ast_delete(*R->ast(),ABORT_STATUS);
+ }
+
+}
+
+ T_syntax_code::T_syntax_code(const char* Syntax_code)
+ T_CTOR("syntax-code",T_Enum::T_T_syntax_code_,0,false,false)
+ {syntax_code_ += Syntax_code;
+ cweb_marker_=0;}
+ std::string* T_syntax_code::syntax_code(){return &syntax_code_;}
+ void T_syntax_code::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_syntax_code::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ T_fsm_class_phrase::T_fsm_class_phrase()
+T_CTOR("fsm-class-phrase",T_Enum::T_T_fsm_class_phrase_,&dtor_T_fsm_class_phrase,false,false)
+ {identifier_ = 0;phrase_tree_=0;}
+
+ void T_fsm_class_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_class_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_fsm_class_phrase::identifier(){return identifier_;}
+ void T_fsm_class_phrase::identifier(T_identifier* Id){identifier_ = Id;}
+
+ std::map<string,CAbs_lr1_sym*>*
+ T_fsm_class_phrase::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_fsm_class_phrase::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_fsm_class_phrase::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+ void T_fsm_class_phrase::dtor_T_fsm_class_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_fsm_class_phrase* R = (T_fsm_class_phrase*)(This);
+
+ if(R->identifier_ != 0)
+ delete R->identifier_;
+ R->remove_directives_from_map();
+
+}
+
+ T_fsm_phrase::T_fsm_phrase()
+ T_CTOR("fsm-phrase",T_Enum::T_T_fsm_phrase_,&dtor_T_fsm_phrase,false,false)
+ {fsm_id_ = 0;
+ filename_id_ = 0;
+ namespace_id_ = 0;
+ fsm_class_phrase_ = 0;
+ version_ = 0;
+ date_ = 0;
+ debug_ = 0;
+ comment_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_fsm_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+ AST* T_fsm_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_fsm_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_fsm_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_c_string* T_fsm_phrase::fsm_id(){return fsm_id_;}
+ void T_fsm_phrase::fsm_id(T_c_string* Id){fsm_id_ = Id;}
+ T_identifier* T_fsm_phrase::filename_id(){return filename_id_;}
+ void T_fsm_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_fsm_phrase::namespace_id(){return namespace_id_;}
+ void T_fsm_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_fsm_class_phrase* T_fsm_phrase::fsm_class_phrase(){return fsm_class_phrase_;}
+ void T_fsm_phrase::fsm_class_phrase(T_fsm_class_phrase* Id)
+ {fsm_class_phrase_ = Id;}
+
+
+ T_c_string* T_fsm_phrase::version(){return version_;}
+ void T_fsm_phrase::version(T_c_string* Id){version_ = Id;}
+ T_c_string* T_fsm_phrase::date(){return date_;}
+ void T_fsm_phrase::date(T_c_string* Id){date_ = Id;}
+ T_c_string* T_fsm_phrase::debug(){return debug_;}
+ void T_fsm_phrase::debug(T_c_string* Id){debug_ = Id;}
+ T_c_string* T_fsm_phrase::comment(){return comment_;}
+ void T_fsm_phrase::comment(T_c_string* Id){comment_ = Id;}
+ void T_fsm_phrase::dtor_T_fsm_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_fsm_phrase* R = (T_fsm_phrase*)(This);
+
+ delete R->fsm_id_;
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->fsm_class_phrase_;
+ delete R->version_;
+ delete R->date_;
+ delete R->debug_;
+ delete R->comment_;
+
+}
+
+ T_parallel_parser_phrase::T_parallel_parser_phrase()
+ T_CTOR("parallel-parser-phrase",T_Enum::T_T_parallel_parser_phrase_,&dtor_T_parallel_parser_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_parallel_parser_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_parallel_parser_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_parallel_parser_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_parser_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_parallel_thread_function* T_parallel_parser_phrase::pp_funct(){
+ return pp_funct_;
+ }
+ void T_parallel_parser_phrase::pp_funct(T_parallel_thread_function* PP_fnct){
+ pp_funct_ = PP_fnct;
+ }
+ T_parallel_la_boundary* T_parallel_parser_phrase::la_bndry(){
+ return la_bndry_;
+ }
+ void T_parallel_parser_phrase::la_bndry(T_parallel_la_boundary* La_bndry){
+ la_bndry_ = La_bndry;
+ }
+ void T_parallel_parser_phrase::dtor_T_parallel_parser_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_parallel_parser_phrase* R = (T_parallel_parser_phrase*)(This);
+
+ delete R->la_bndry_;
+ delete R->pp_funct_;
+
+}
+
+ T_enum_phrase::T_enum_phrase()
+ T_CTOR("T-enum-phrase",T_Enum::T_T_enum_phrase_,&dtor_T_enum_phrase,false,false)
+ {kdefs_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_enum_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_enum_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_enum_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_enum_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_enum_phrase::filename_id(){return filename_id_;}
+ void T_enum_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_enum_phrase::namespace_id(){return namespace_id_;}
+ void T_enum_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ T_syntax_code*
+ T_enum_phrase::kdefs(){return kdefs_;}
+
+ void T_enum_phrase::kdefs(T_syntax_code* Kdefs){
+ kdefs_ = Kdefs;
+ }
+ void T_enum_phrase::start_lrk_enumerate(int Enum){start_lrk_enumerate_ = Enum;}
+ void T_enum_phrase::stop_lrk_enumerate(int Enum){stop_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::start_lrk_enumerate(){return start_lrk_enumerate_;}
+ int T_enum_phrase::stop_lrk_enumerate(){return stop_lrk_enumerate_;}
+ void T_enum_phrase::start_err_enumerate(int Enum){start_err_enumerate_ = Enum;}
+ void T_enum_phrase::stop_err_enumerate(int Enum){stop_err_enumerate_ = Enum;}
+ int T_enum_phrase::start_err_enumerate(){return start_err_enumerate_;}
+ int T_enum_phrase::stop_err_enumerate(){return stop_err_enumerate_;}
+ void T_enum_phrase::start_rc_enumerate(int Enum){start_rc_enumerate_ = Enum;}
+ void T_enum_phrase::stop_rc_enumerate(int Enum){stop_rc_enumerate_ = Enum;}
+ int T_enum_phrase::start_rc_enumerate(){return start_rc_enumerate_;}
+ int T_enum_phrase::stop_rc_enumerate(){return stop_rc_enumerate_;}
+ void T_enum_phrase::start_T_enumerate(int Enum){start_T_enumerate_ = Enum;}
+ void T_enum_phrase::stop_T_enumerate(int Enum){stop_T_enumerate_ = Enum;}
+ int T_enum_phrase::start_T_enumerate(){return start_T_enumerate_;}
+ int T_enum_phrase::stop_T_enumerate(){return stop_T_enumerate_;}
+ void T_enum_phrase::total_enumerate(int Enum){total_enumerate_ = Enum;}
+ int T_enum_phrase::total_enumerate(){return total_enumerate_;}
+
+ void T_enum_phrase::total_T_enumerate(int Enum){total_T_enumerate_ = Enum;}
+ int T_enum_phrase::total_T_enumerate(){return total_T_enumerate_;}
+ void T_enum_phrase::total_rc_enumerate(int Enum){total_rc_enumerate_ = Enum;}
+ int T_enum_phrase::total_rc_enumerate(){return total_rc_enumerate_;}
+ void T_enum_phrase::total_err_enumerate(int Enum){total_err_enumerate_ = Enum;}
+ int T_enum_phrase::total_err_enumerate(){return total_err_enumerate_;}
+ void T_enum_phrase::total_lrk_enumerate(int Enum){total_lrk_enumerate_ = Enum;}
+ int T_enum_phrase::total_lrk_enumerate(){return total_lrk_enumerate_;}
+ int T_enum_phrase::total_no_subrules(){return total_no_subrules_;}
+ void T_enum_phrase::total_no_subrules(int Total_subrules){
+ total_no_subrules_ = Total_subrules;
+ }
+ void T_enum_phrase::dtor_T_enum_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_enum_phrase* R = (T_enum_phrase*)(This);
+
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->kdefs_;
+
+}
+
+ T_terminal_def::T_terminal_def()
+T_CTOR("terminal-def",T_Enum::T_T_terminal_def_,&dtor_T_terminal_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ classification_ = T_terminal_def::not_classed;
+ cweb_marker_ = 0;
+ enum_id_ = -1;
+ }
+ void T_terminal_def::enum_id(int Id){enum_id_=Id;}
+ int T_terminal_def::enum_id(){return enum_id_;}
+ void T_terminal_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminal_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_terminal_def::directives_map(){
+ return &directives_map_;
+ }
+
+ void T_terminal_def::remove_directives_from_map(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_terminal_def::
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = directives_map_.find(key);
+ if(i == directives_map_.end()){
+ directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_directives_from_map();
+ return sym;
+ }
+
+ std::string* T_terminal_def::t_name(){return &t_name_;}
+ void T_terminal_def::t_name(const char* Id){t_name_ += Id;}
+
+ std::string* T_terminal_def::classsym(){return &class_sym_;}
+ void T_terminal_def::classsym(const char* Id){class_sym_ += Id;}
+
+ bool T_terminal_def::autodelete(){return auto_delete_;}
+ void T_terminal_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool T_terminal_def::autoabort(){return auto_abort_;}
+ void T_terminal_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ T_terminal_def::classification_typ
+ T_terminal_def::classification(){return classification_;}
+ void
+ T_terminal_def::classification(T_terminal_def::classification_typ C)
+ {classification_ = C;}
+ void T_terminal_def::dtor_T_terminal_def(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_terminal_def* R = (T_terminal_def*)(This);
+
+ R->remove_directives_from_map();
+
+}
+
+ table_entry::
+ table_entry()
+ T_CTOR("symbol-table",T_Enum::T_table_entry_,0,false,false)
+ {vacant_ = true;
+ defined_ = false;
+ used_ = false;
+ type_ = table_entry::unknown;
+ symbol_ = 0;
+ key_ = 0;
+ pos_ = -1;
+ key_len_ = 0;
+ }
+
+ T_sym_tbl_report_card::
+ T_sym_tbl_report_card()
+ T_CTOR("sym-tbl-report-card",T_Enum::T_T_sym_tbl_report_card_,0,false,false)
+ {status_ = okay;
+ action_ = unknown;
+ tbl_entry_ = 0;
+ pos_ = 0;
+ key_len_ = 0;
+ }
+
+ T_terminals_phrase::T_terminals_phrase()
+T_CTOR("terminals-phrase",T_Enum::T_T_terminals_phrase_,&dtor_T_terminals_phrase,false,false)
+ {terminals_refs_code_ = 0;
+ terminals_sufx_code_ = 0;
+ phrase_tree_=0;
+ cweb_marker_=0;
+ }
+
+ void T_terminals_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_terminals_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_terminals_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_terminals_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_terminals_phrase::filename_id(){return filename_id_;}
+ void T_terminals_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_terminals_phrase::namespace_id(){return namespace_id_;}
+ void T_terminals_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_terminals_phrase::alphabet(){
+ return &alphabet_;
+ }
+ std::vector<T_terminal_def*>*
+ T_terminals_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_terminals_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_terminals_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_refs_code(){return terminals_refs_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_refs_code(T_syntax_code* Code){
+ terminals_refs_code_ = Code;
+ }
+
+ T_syntax_code*
+ T_terminals_phrase::
+ terminals_sufx_code(){return terminals_sufx_code_;}
+
+ void
+ T_terminals_phrase::
+ terminals_sufx_code(T_syntax_code* Code){
+ terminals_sufx_code_ = Code;
+ }
+ void T_terminals_phrase::dtor_T_terminals_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_terminals_phrase* R = (T_terminals_phrase*)(This);
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->terminals_refs_code_;
+ delete R->terminals_sufx_code_;
+
+}
+
+ T_error_symbols_phrase::T_error_symbols_phrase()
+T_CTOR("error-symbols-phrase",T_Enum::T_T_error_symbols_phrase_,&dtor_T_error_symbols_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_error_symbols_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_error_symbols_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_error_symbols_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_error_symbols_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_error_symbols_phrase::filename_id(){return filename_id_;}
+ void T_error_symbols_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_error_symbols_phrase::namespace_id(){return namespace_id_;}
+ void T_error_symbols_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_error_symbols_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_error_symbols_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_error_symbols_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_error_symbols_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ void T_error_symbols_phrase::dtor_T_error_symbols_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_error_symbols_phrase* R = (T_error_symbols_phrase*)(This);
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+
+}
+
+ T_lr1_k_phrase::T_lr1_k_phrase()
+ T_CTOR("lr1-k-phrase",T_Enum::T_T_lr1_k_phrase_,&dtor_T_lr1_k_phrase,false,false)
+ {lrk_sufx_code_ = 0;phrase_tree_=0;cweb_marker_=0;}
+
+ void T_lr1_k_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_lr1_k_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_lr1_k_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_lr1_k_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_lr1_k_phrase::filename_id(){return filename_id_;}
+ void T_lr1_k_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_lr1_k_phrase::namespace_id(){return namespace_id_;}
+ void T_lr1_k_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_lr1_k_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_lr1_k_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_lr1_k_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_lr1_k_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ T_syntax_code*
+ T_lr1_k_phrase::
+ lrk_sufx_code(){return lrk_sufx_code_;}
+
+ void
+ T_lr1_k_phrase::
+ lrk_sufx_code(T_syntax_code* Code){
+ lrk_sufx_code_ = Code;
+ }
+ void T_lr1_k_phrase::dtor_T_lr1_k_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_lr1_k_phrase* R = (T_lr1_k_phrase*)(This);
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+ delete R->lrk_sufx_code_;
+
+}
+
+ T_rc_phrase::T_rc_phrase()
+ T_CTOR("rc-phrase",T_Enum::T_T_rc_phrase_,&dtor_T_rc_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rc_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rc_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rc_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rc_phrase::phrase_tree(){return phrase_tree_;}
+
+ T_identifier* T_rc_phrase::filename_id(){return filename_id_;}
+ void T_rc_phrase::filename_id(T_identifier* Id){filename_id_ = Id;}
+ T_identifier* T_rc_phrase::namespace_id(){return namespace_id_;}
+ void T_rc_phrase::namespace_id(T_identifier* Id){namespace_id_ = Id;}
+
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>*
+ T_rc_phrase::alphabet(){
+ return &alphabet_;
+ }
+
+ std::vector<T_terminal_def*>*
+ T_rc_phrase::
+ crt_order(){return &crt_order_;}
+
+ void T_rc_phrase::destroy_alphabet(){
+ std::vector<T_terminal_def*>::iterator i = crt_order_.begin();
+ std::vector<T_terminal_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rc_phrase::
+ add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P){
+ std::string key(T->t_name()->c_str());
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>::iterator i = alphabet_.find(key);
+ if(i != alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*T,__FILE__,__LINE__);
+ return sym;
+ }
+ alphabet_[key] = T;
+ crt_order_.push_back(T);
+ return 0;
+ }
+ void T_rc_phrase::dtor_T_rc_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_rc_phrase* R = (T_rc_phrase*)(This);
+
+ R->destroy_alphabet();
+ delete R->filename_id_;
+ delete R->namespace_id_;
+
+}
+
+ T_rule_lhs_phrase::T_rule_lhs_phrase()
+T_CTOR("rule-lhs-phrase",T_Enum::T_T_rule_lhs_phrase_,&dtor_T_rule_lhs_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+
+ void T_rule_lhs_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rule_lhs_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ void T_rule_lhs_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rule_lhs_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_rule_lhs_phrase::lhs_directives_map(){
+ return &lhs_directives_map_;
+ }
+
+ void T_rule_lhs_phrase::remove_lhs_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = lhs_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = lhs_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_rule_lhs_phrase::
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ string key(Directive->id__);
+ i = lhs_directives_map_.find(key);
+ if(i == lhs_directives_map_.end()){
+ lhs_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_lhs_directives();
+ return sym;
+ }
+ void T_rule_lhs_phrase::dtor_T_rule_lhs_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_rule_lhs_phrase* R = (T_rule_lhs_phrase*)(This);
+
+ R->remove_lhs_directives();
+
+}
+
+ T_parallel_monitor_phrase::T_parallel_monitor_phrase()
+T_CTOR("parallel-monitor-phrase",T_Enum::T_T_parallel_monitor_phrase_,&dtor_T_parallel_monitor_phrase,false,false)
+ {phrase_tree_=0;}
+
+ void T_parallel_monitor_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_parallel_monitor_phrase::phrase_tree(){return phrase_tree_;}
+
+ map<string,CAbs_lr1_sym*>*
+ T_parallel_monitor_phrase::mntr_directives_map(){
+ return &mntr_directives_map_;
+ }
+
+ void T_parallel_monitor_phrase::remove_mntr_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = mntr_directives_map_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = mntr_directives_map_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_parallel_monitor_phrase::
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = mntr_directives_map_.find(key);
+ if(i == mntr_directives_map_.end()){
+ mntr_directives_map_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_mntr_directives();
+ return sym;
+ }
+ void T_parallel_monitor_phrase::dtor_T_parallel_monitor_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_parallel_monitor_phrase* R = (T_parallel_monitor_phrase*)(This);
+
+ R->remove_mntr_directives();
+
+}
+
+ rule_def::rule_def(const char* Key)
+ T_CTOR("rule-def",T_Enum::T_rule_def_,&dtor_rule_def,false,false)
+ {auto_delete_ = false;
+ auto_abort_ = false;
+ rule_no_ = 0;//starts cnt at 1
+ recursive_ = NO;
+ lhs_use_cnt_ = 0;
+ rhs_use_cnt_ = 0;
+ rule_use_skeleton_ = 0;
+ parallel_mntr_ = 0;
+ subrules_ = 0;
+ rule_lhs_ = 0;
+ rule_name_ += Key;
+ epsilon_ = false;
+ derive_t_ = false;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ enum_id_ = -1;
+ first_set_.clear();
+ }
+ std::set<rule_in_stbl*>* rule_def::closure_rules_making_up_first_set(){
+ return &closure_rules_making_up_first_set_;
+ }
+ AST* rule_def::rule_use_skeleton(){return rule_use_skeleton_;}
+ void rule_def::rule_use_skeleton(AST* Tree){rule_use_skeleton_ = Tree;}
+
+ std::map<T_in_stbl*,std::set<std::string*> >*
+ rule_def::rule_adding_T_in_first_set(){
+ return &rules_adding_T_in_first_set_;
+ }
+ int rule_def::rule_no(){return rule_no_;}
+ void rule_def::rule_no(int Rule_no){rule_no_ = Rule_no;}
+ bool rule_def::recursive(){return recursive_;}
+ void rule_def::recursive(bool Recursive){recursive_ = Recursive;}
+ int rule_def::lhs_use_cnt(){return lhs_use_cnt_;};
+ void rule_def::lhs_use_cnt(int Use_cnt){lhs_use_cnt_ = Use_cnt;}
+ int rule_def::rhs_use_cnt(){return rhs_use_cnt_;}
+ void rule_def::rhs_use_cnt(int Use_cnt){rhs_use_cnt_ = Use_cnt;}
+
+ void rule_def::add_closure_rule_making_up_first_set(rule_in_stbl* Rule){
+ if(closure_rules_making_up_first_set_.find(Rule)
+ !=
+ closure_rules_making_up_first_set_ .end()) return;
+ closure_rules_making_up_first_set_.insert(Rule);
+ }
+ void rule_def::add_rule_adding_T_in_first_set
+ (T_in_stbl* T,std::string* Rule_enumerate){
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator i;
+ std::map<T_in_stbl*,std::set<std::string*> >::iterator ie;
+ ie = rules_adding_T_in_first_set_.end();
+ i = rules_adding_T_in_first_set_.find(T);
+ if(i == ie){
+ rules_adding_T_in_first_set_[T] = std::set<std::string*>();
+ i = rules_adding_T_in_first_set_.find(T);
+ i->second.insert(Rule_enumerate);
+ return;
+ }
+ i->second.insert(Rule_enumerate);
+ }
+
+ std::string* rule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void rule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ std::set<T_in_stbl*>* rule_def::first_set(){
+ return &first_set_;
+ }
+ std::set<T_called_thread_eosubrule*>* rule_def::called_thread_first_set(){
+ return &called_thread_first_set_;
+ }
+
+ void rule_def::add_to_first_set(T_in_stbl& T){
+ T_in_stbl* t = &T;
+ std::set<T_in_stbl*>::iterator i;
+ i = first_set_.find(t);
+ if(i == first_set_.end()){
+ first_set_.insert(t);
+ }
+ }
+ void rule_def::add_to_called_thread_first_set(T_called_thread_eosubrule* T){
+ std::set<T_called_thread_eosubrule*>::iterator i;
+ i = called_thread_first_set_.find(T);
+ if(i == called_thread_first_set_.end()){
+ called_thread_first_set_.insert(T);
+ }
+ }
+
+ void rule_def::enum_id(int Id){enum_id_=Id;}
+ int rule_def::enum_id(){return enum_id_;}
+ void rule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ T_subrules_phrase* subrules_ph = subrules();
+ std::vector<T_subrule_def*>* subrule_list = subrules_ph->subrules();
+ std::vector<T_subrule_def*>::iterator sri = subrule_list->begin();
+ std::vector<T_subrule_def*>::iterator srie = subrule_list->end();
+ AST* subrule_lvl = 0;
+ for(;sri!=srie;++sri){// walk subrules
+ T_subrule_def* srdef = *sri;
+ AST* srt = srdef->subrule_s_tree();
+ if(subrule_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*srt);
+ subrule_lvl = srt;
+ }else{ // subrule brothers
+ AST::join_sts(*subrule_lvl,*srt);
+ subrule_lvl = srt;
+ }
+ }
+ }
+
+ AST* rule_def::rule_s_tree(){
+ return its_tree_;
+ }
+
+ void rule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* rule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ T_rule_lhs_phrase* rule_def::rule_lhs(){
+ return rule_lhs_;
+ }
+
+ void rule_def::rule_lhs(T_rule_lhs_phrase* Lhs){
+ rule_lhs_ = Lhs;
+ }
+
+ void rule_def::parallel_mntr(T_parallel_monitor_phrase* Mntr){
+ parallel_mntr_ = Mntr;
+ }
+
+ T_parallel_monitor_phrase* rule_def::parallel_mntr(){
+ return parallel_mntr_;
+ }
+
+ T_subrules_phrase* rule_def::subrules(){
+ return subrules_;
+ }
+
+ void rule_def::subrules(T_subrules_phrase* Subrules){
+ subrules_ = Subrules;
+ }
+
+ std::string* rule_def::rule_name(){return &rule_name_;}
+
+ bool rule_def::autodelete(){return auto_delete_;}
+ void rule_def::autodelete(bool Ton){auto_delete_ = Ton;}
+
+ bool rule_def::autoabort(){return auto_abort_;}
+ void rule_def::autoabort(bool Ton){auto_abort_ = Ton;}
+
+ bool rule_def::epsilon(){return epsilon_;}
+ void rule_def::epsilon(bool Ton){epsilon_ = Ton;}
+
+ bool rule_def::derive_t(){return derive_t_;}
+ void rule_def::derive_t(bool Ton){derive_t_ = Ton;}
+
+ void rule_def::dtor_rule_def(yacco2::VOIDP This,yacco2::VOIDP P){
+ rule_def* R = (rule_def*)(This);
+
+ delete R->parallel_mntr_;
+ delete R->rule_lhs_;
+ delete R->subrules_;
+
+}
+
+ T_rules_phrase::T_rules_phrase()
+T_CTOR("rules-phrase",T_Enum::T_T_rules_phrase_,&dtor_T_rules_phrase,false,false)
+ {phrase_tree_=0;cweb_marker_=0;}
+
+ void T_rules_phrase::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_rules_phrase::cweb_marker(){
+ return cweb_marker_;
+ }
+
+
+ void T_rules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_rules_phrase::phrase_tree(){return phrase_tree_;}
+
+ std::map<string,rule_def*>*
+ T_rules_phrase::rules_alphabet(){
+ return &rules_alphabet_;
+ }
+
+ void T_rules_phrase::destroy_rules_alphabet(){
+ std::vector<rule_def*>::iterator i = crt_order_.begin();
+ std::vector<rule_def*>::iterator ie = crt_order_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ rules_alphabet_.clear();
+ }
+
+ CAbs_lr1_sym*
+ T_rules_phrase::
+ add_r_to_alphabet(rule_def* R,yacco2::Parser* P){
+ std::string key(R->rule_name()->c_str());
+ std::map<std::string,rule_def*>::iterator i = rules_alphabet_.find(key);
+ if(i != rules_alphabet_.end()){
+ CAbs_lr1_sym* sym = new Err_dup_entry_in_alphabet;
+ sym->set_rc(*R,__FILE__,__LINE__);
+ return sym;
+ }
+ rules_alphabet_[key] = R;
+ crt_order_.push_back(R);
+ return 0;
+ }
+ std::vector<rule_def*>*
+ T_rules_phrase::
+ crt_order(){return &crt_order_;}
+ void T_rules_phrase::dtor_T_rules_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_rules_phrase* R = (T_rules_phrase*)(This);
+
+ R->destroy_rules_alphabet();
+
+}
+
+ T_subrule_def::T_subrule_def()
+T_CTOR("subrule-def",T_Enum::T_T_subrule_def_,&dtor_T_subrule_def,false,false)
+ {subrule_no_of_rule_ = 0;
+ no_of_elems_ = 0;
+ epsilon_ = false;
+ derive_t_ = false;
+ its_rule_def_ = 0;
+ cweb_marker_ = 0;
+ its_tree_ = 0;
+ its_grammar_s_pos_ = 0;
+ }
+ int T_subrule_def::its_grammar_s_pos(){return its_grammar_s_pos_;}
+ void T_subrule_def::its_grammar_s_pos(int Pos){its_grammar_s_pos_ = Pos;}
+ int T_subrule_def::subrule_no_of_rule(){
+ return subrule_no_of_rule_;
+ }
+ void T_subrule_def::subrule_no_of_rule(int Subrule_no){
+ subrule_no_of_rule_ = Subrule_no;
+ }
+
+ std::string* T_subrule_def::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_subrule_def::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ void T_subrule_def::bld_its_tree(){
+ its_tree_ = new AST(*this);
+ std::vector<CAbs_lr1_sym*>* element_list = subrule_elems();
+ std::vector<CAbs_lr1_sym*>::iterator ei = element_list->begin();
+ std::vector<CAbs_lr1_sym*>::iterator eie = element_list->end();
+ AST* element_lvl = 0;
+ for(;ei!=eie;++ei){// walk elements of subrule
+ CAbs_lr1_sym* elem_def = *ei;
+ AST* elemtt = new AST(*elem_def);
+ int id = elem_def->enumerated_id__;
+ using namespace NS_yacco2_terminals;
+ switch (id){
+ case T_Enum::T_refered_rule_: {
+ refered_rule* rrule = (refered_rule*)elem_def;
+ rrule->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_: {
+ T_eosubrule* eos = (T_eosubrule*)elem_def;
+ eos->tree_node(elemtt);
+ break;
+ }
+ case T_Enum::T_refered_T_: {
+ refered_T* rt = (refered_T*)elem_def;
+ rt->tree_node(elemtt);
+ break;
+ }
+ }
+ if(element_lvl == 0){
+ AST::crt_tree_of_1son(*its_tree_,*elemtt);
+ element_lvl = elemtt;
+ }else{ // element brothers
+ AST::join_sts(*element_lvl,*elemtt);
+ element_lvl = elemtt;
+ }
+ }
+ }
+
+ AST* T_subrule_def::subrule_s_tree(){
+ return its_tree_;
+ }
+
+ void T_subrule_def::add_cweb_marker(AST* Cweb){
+ cweb_marker_ = Cweb;
+ }
+
+ AST* T_subrule_def::cweb_marker(){
+ return cweb_marker_;
+ }
+
+ rule_def* T_subrule_def::its_rule_def(){
+ return its_rule_def_;
+ }
+
+ void T_subrule_def::its_rule_def(rule_def* Its_rule_def){
+ its_rule_def_ = Its_rule_def;
+ }
+
+ std::vector<CAbs_lr1_sym*>* T_subrule_def::subrule_elems(){
+ return &subrule_elems_;
+ }
+
+ bool T_subrule_def::epsilon(){
+ return epsilon_;
+ }
+
+ void T_subrule_def::epsilon(bool Epsilon){
+ epsilon_ = Epsilon;
+ }
+
+ bool T_subrule_def::derive_t(){
+ return derive_t_;
+ }
+
+ void T_subrule_def::derive_t(bool Ton){
+ derive_t_ = Ton;
+ }
+
+ void T_subrule_def::
+ add_elem_to_subrule_vector(CAbs_lr1_sym* Elem){
+ ++no_of_elems_;
+ subrule_elems_.push_back(Elem);
+ }
+ int T_subrule_def::no_of_elems(){
+ return no_of_elems_;
+ }
+
+ map<std::string,CAbs_lr1_sym*>*
+ T_subrule_def::subrule_directives(){
+ return &subrule_directives_;
+ }
+
+ void T_subrule_def::remove_subrule_directives(){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i = subrule_directives_.begin();
+ std::map<std::string,CAbs_lr1_sym*>::iterator ie = subrule_directives_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ delete sym;
+ }
+ }
+
+ CAbs_lr1_sym* // 0 - ok, or error
+ T_subrule_def::
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P){
+ std::map<std::string,CAbs_lr1_sym*>::iterator i;
+ std::string key(Directive->id__);
+ i = subrule_directives_.find(key);
+ if(i == subrule_directives_.end()){
+ subrule_directives_[key] = Directive;
+ return 0;
+ }
+ CAbs_lr1_sym* sym = new Err_duplicate_directive;
+ sym->set_rc(*Directive,__FILE__,__LINE__);
+ remove_subrule_directives();
+ return sym;
+ }
+ void T_subrule_def::remove_subrule_elems_from_vector(){
+ std::vector<CAbs_lr1_sym*>::iterator i = subrule_elems_.begin();
+ std::vector<CAbs_lr1_sym*>::iterator ie = subrule_elems_.end();
+ for(;i != ie;++i){
+ delete *i;
+ }
+ }
+ void T_subrule_def::dtor_T_subrule_def(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_subrule_def* R = (T_subrule_def*)(This);
+
+ R->remove_subrule_directives();
+ R->remove_subrule_elems_from_vector();
+
+}
+
+ T_subrules_phrase::T_subrules_phrase()
+T_CTOR("subrules-phrase",T_Enum::T_T_subrules_phrase_,&dtor_T_subrules_phrase,false,false)
+ {no_subrules_ = 0;phrase_tree_=0;}
+ void T_subrules_phrase::phrase_tree(AST* Tree){phrase_tree_=Tree;}
+ AST* T_subrules_phrase::phrase_tree(){return phrase_tree_;}
+
+ int T_subrules_phrase::no_subrules(){
+ return no_subrules_;
+ }
+ std::vector<T_subrule_def*>*
+ T_subrules_phrase::subrules(){
+ return &subrules_;
+ }
+
+ void T_subrules_phrase::destroy_subrules(){
+ std::vector<T_subrule_def*>::iterator i = subrules_.begin();
+ std::vector<T_subrule_def*>::iterator ie = subrules_.end();
+ for(;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ delete sym;
+ }
+ }
+
+ void
+ T_subrules_phrase::
+ add_sr_to_subrules(T_subrule_def* R){
+ ++no_subrules_;
+ subrules_.push_back(R);
+ }
+ void T_subrules_phrase::dtor_T_subrules_phrase(yacco2::VOIDP This,yacco2::VOIDP P){
+ T_subrules_phrase* R = (T_subrules_phrase*)(This);
+
+ R->destroy_subrules();
+
+}
+
+T_in_stbl::T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("T-in-stbl",T_Enum::T_T_in_stbl_,0,false,false)
+ {t_def_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_terminal_def* T_in_stbl::t_def(){
+ return t_def_;
+ }
+ std::list<refered_T*>* T_in_stbl::xref_t(){
+ return &xref_t_;;
+ }
+ void T_in_stbl::add_T_into_xref(refered_T& T){
+ xref_t_.push_back(&T);
+ }
+ void T_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int T_in_stbl::stbl_idx(){return stbl_idx_;}
+
+ refered_T::refered_T(T_in_stbl& Term_in_stbl)
+ T_CTOR("refered-T",T_Enum::T_refered_T_,0,false,false)
+ {t_in_stbl_ = &Term_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_T::element_pos(){return element_pos_;}
+ void refered_T::element_pos(int Pos){element_pos_ = Pos;}
+
+ T_terminal_def* refered_T::its_t_def(){
+ return t_in_stbl_->t_def();
+ }
+ rule_def* refered_T::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* refered_T::tree_node(){
+ return tree_node_;
+ }
+ void refered_T::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_T::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_T::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_in_stbl* refered_T::t_in_stbl(){
+ return t_in_stbl_;
+ }
+
+ T_subrule_def* refered_T::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_T::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ rule_in_stbl::rule_in_stbl(rule_def& Rule_def)
+ T_CTOR("rule-in-stbl",T_Enum::T_rule_in_stbl_,0,false,false)
+ {r_def_ = &Rule_def;
+ stbl_idx_ = -1;
+ }
+ rule_def* rule_in_stbl::r_def(){
+ return r_def_;
+ }
+ std::list<refered_rule*>* rule_in_stbl::xref_r(){
+ return &xref_r_;;
+ }
+ void rule_in_stbl::add_R_into_xref(refered_rule& R){
+ xref_r_.push_back(&R);
+ }
+ void rule_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int rule_in_stbl::stbl_idx(){return stbl_idx_;}
+
+ refered_rule::refered_rule(rule_in_stbl& Rule_in_stbl)
+ T_CTOR("refered-rule",T_Enum::T_refered_rule_,0,false,false)
+ {rule_in_stbl_ = &Rule_in_stbl;
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int refered_rule::element_pos(){return element_pos_;}
+ void refered_rule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* refered_rule::its_rule_def(){
+ return rule_in_stbl_->r_def();
+ }
+ AST* refered_rule::tree_node(){
+ return tree_node_;
+ }
+ void refered_rule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+ std::string* refered_rule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void refered_rule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+
+ T_subrule_def* refered_rule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void refered_rule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ rule_in_stbl* refered_rule::Rule_in_stbl(){
+ return rule_in_stbl_;
+ }
+ T_transitive::
+T_transitive()
+ T_CTOR("transitive",T_Enum::T_T_transitive_,0,false,false){}
+T_grammar_name::
+T_grammar_name()
+ T_CTOR("grammar-name",T_Enum::T_T_grammar_name_,0,false,false){}
+T_thread_name::
+T_thread_name()
+ T_CTOR("thread-name",T_Enum::T_T_thread_name_,0,false,false){}
+T_monolithic::
+T_monolithic()
+ T_CTOR("monolithic",T_Enum::T_T_monolithic_,0,false,false){}
+T_no_of_T::
+T_no_of_T()
+ T_CTOR("no-of-T",T_Enum::T_T_no_of_T_,0,false,false){}
+T_list_of_native_first_set_terminals::
+T_list_of_native_first_set_terminals()
+ T_CTOR("list-of-native-first-set-terminals",T_Enum::T_T_list_of_native_first_set_terminals_,0,false,false){}
+T_end_list_of_native_first_set_terminals::
+T_end_list_of_native_first_set_terminals()
+ T_CTOR("end-list-of-native-first-set-terminals",T_Enum::T_T_end_list_of_native_first_set_terminals_,0,false,false){}
+T_list_of_transitive_threads::
+T_list_of_transitive_threads()
+ T_CTOR("list-of-transitive-threads",T_Enum::T_T_list_of_transitive_threads_,0,false,false){}
+T_end_list_of_transitive_threads::
+T_end_list_of_transitive_threads()
+ T_CTOR("end-list-of-transitive-threads",T_Enum::T_T_end_list_of_transitive_threads_,0,false,false){}
+T_emitfile::
+T_emitfile()
+ T_CTOR("emitfile",T_Enum::T_T_emitfile_,0,false,false){}
+T_preamble::
+T_preamble()
+ T_CTOR("preamble",T_Enum::T_T_preamble_,0,false,false){}
+T_end_preamble::
+T_end_preamble()
+ T_CTOR("end-preamble",T_Enum::T_T_end_preamble_,0,false,false){}
+T_T_alphabet::
+T_T_alphabet()
+ T_CTOR("T-alphabet",T_Enum::T_T_T_alphabet_,0,false,false){}
+T_end_T_alphabet::
+T_end_T_alphabet()
+ T_CTOR("end-T-alphabet",T_Enum::T_T_end_T_alphabet_,0,false,false){}
+T_file_of_T_alphabet::
+T_file_of_T_alphabet()
+ T_CTOR("file-of-T-alphabet",T_Enum::T_T_file_of_T_alphabet_,0,false,false){}
+
+ T_attributes::T_attributes(const char* Fully_qualified_T_name,int Enum)
+ T_CTOR("T-attributes",T_Enum::T_T_attributes_,0,false,false)
+ {fully_qualified_T_name_ += Fully_qualified_T_name;
+ T_enum_ = Enum;
+ }
+
+ tth_in_stbl::tth_in_stbl
+ (T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P)
+ T_CTOR("tth-in-stbl",T_Enum::T_tth_in_stbl_,0,false,false)
+ {t_in_stbl_ = Fnd_T_in_stbl;
+ set_rc(*Rc,__FILE__,__LINE__);// set its source co-ordinates
+ stbl_idx_ = -1;
+ }
+ T_attributes* tth_in_stbl::t_in_stbl(){
+ return t_in_stbl_;
+ }
+ void tth_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int tth_in_stbl::stbl_idx(){return stbl_idx_;}
+
+ thread_attributes::thread_attributes(const char* Fully_qualified_th_name)
+T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = ' ';
+ grammar_file_name_ = 0;
+ name_space_name_ = 0;
+ thread_name_ = 0;
+ monolithic_ = ' ';
+ file_name_ = 0;
+ th_enum_ = -1;
+ fsm_comments_ = 0;
+ called_thread_graph_ = 0;
+ }
+ thread_attributes::thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments)
+ T_CTOR("thread-attributes",T_Enum::T_thread_attributes_,0,false,false)
+ {fully_qualified_th_name_ += Fully_qualified_th_name;
+ transitive_ = Transitive;
+ grammar_file_name_ = Grammar_name;
+ name_space_name_ = Name_space_name;
+ thread_name_ = Thread_name;
+ monolithic_ = Monolithic;
+ file_name_ = File_name;
+ if(!List_of_Ts.empty()){
+ copy(List_of_Ts.begin()
+ ,List_of_Ts.end()
+ ,back_inserter(list_of_Ts_));
+ std::vector<int>::iterator i = List_of_Ts.begin();
+ std::vector<int>::iterator ie = List_of_Ts.end();
+ for(;i!=ie;++i){
+ fs_.insert(*i);
+ }
+ }
+ if(!List_of_transitive_thds.empty())
+ copy(List_of_transitive_thds.begin()
+ ,List_of_transitive_thds.end()
+ ,back_inserter(list_of_transitive_threads_));
+ th_enum_ = -1;
+ fsm_comments_ = Fsm_comments;
+ called_thread_graph_ = 0;
+ }
+
+ th_in_stbl::th_in_stbl(thread_attributes* Fnd_th_in_stbl)
+ T_CTOR("th-in-stbl",T_Enum::T_th_in_stbl_,0,false,false)
+ {th_in_stbl_ = Fnd_th_in_stbl;
+ stbl_idx_ = -1;
+ }
+ thread_attributes* th_in_stbl::thread_in_stbl(){
+ return th_in_stbl_;
+ }
+ void th_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int th_in_stbl::stbl_idx(){return stbl_idx_;}
+
+ kw_in_stbl::kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl)
+ T_CTOR("kw-in-stbl",T_Enum::T_kw_in_stbl_,0,false,false)
+ {kw_in_stbl_ = Fnd_kw_in_stbl;
+ stbl_idx_ = -1;
+ }
+ CAbs_lr1_sym* kw_in_stbl::keyword_in_stbl(){
+ return kw_in_stbl_;
+ }
+ void kw_in_stbl::stbl_idx(yacco2::UINT Idx){stbl_idx_ = Idx;}
+ int kw_in_stbl::stbl_idx(){return stbl_idx_;}
+
+ T_la_expr_src::T_la_expr_src()
+T_CTOR("la-express-source",T_Enum::T_T_la_expr_src_,0,false,false)
+ {la_tok_can_ = new yacco2::TOKEN_GAGGLE;
+ }
+ void T_la_expr_src::zero_la_tok_can(){
+ la_tok_can_ = 0;
+ }
+ yacco2::TOKEN_GAGGLE* T_la_expr_src::la_tok_can(){
+ return la_tok_can_;
+ }
+
+ T_eosubrule::T_eosubrule()
+ T_CTOR("eosubrule",T_Enum::T_T_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_eosubrule::element_pos(){return element_pos_;}
+ void T_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+
+ rule_def* T_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+T_called_thread_eosubrule::T_called_thread_eosubrule
+ (T_identifier* Ns,T_identifier* Thd_name)
+T_CTOR("called thread eosubrule",T_Enum::T_T_called_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ ns_ = Ns;
+ called_thread_name_ = Thd_name;
+ element_pos_ = 0;
+ }
+ int T_called_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_called_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ T_identifier* T_called_thread_eosubrule::ns(){
+ return ns_;
+ }
+ T_identifier* T_called_thread_eosubrule::called_thread_name(){
+ return called_thread_name_;
+ }
+ rule_def* T_called_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_called_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_called_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_called_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_called_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_called_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_called_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ T_null_call_thread_eosubrule::T_null_call_thread_eosubrule()
+T_CTOR("null call thread eosubrule",T_Enum::T_T_null_call_thread_eosubrule_,0,false,false){
+ its_subrule_def_ = 0;
+ tree_node_ = 0;
+ element_pos_ = 0;
+ }
+ int T_null_call_thread_eosubrule::element_pos(){return element_pos_;}
+ void T_null_call_thread_eosubrule::element_pos(int Pos){element_pos_ = Pos;}
+ rule_def* T_null_call_thread_eosubrule::its_rule_def(){
+ return its_subrule_def_->its_rule_def();
+ }
+ AST* T_null_call_thread_eosubrule::tree_node(){
+ return tree_node_;
+ }
+ void T_null_call_thread_eosubrule::tree_node(AST* Tree_node){
+ tree_node_ = Tree_node;
+ }
+
+ std::string* T_null_call_thread_eosubrule::grammar_s_enumerate(){
+ return &grammar_s_enumerate_;
+ }
+ void T_null_call_thread_eosubrule::grammar_s_enumerate(const char* Enumerate){
+ grammar_s_enumerate_+=Enumerate;
+ }
+ T_subrule_def* T_null_call_thread_eosubrule::its_subrule_def(){
+ return its_subrule_def_;
+ }
+
+ void T_null_call_thread_eosubrule::its_subrule_def(T_subrule_def* Its_subrule){
+ its_subrule_def_ = Its_subrule;
+ }
+
+ T_cweb_comment::
+ T_cweb_comment(const std::string& Comment_data)
+ T_CTOR("cweb-comment",T_Enum::T_T_cweb_comment_,0,false,false)
+ {comment_data_ = Comment_data;}
+ std::string* T_cweb_comment::comment_data(){return &comment_data_;}
+ T_grammar_phrase::
+T_grammar_phrase()
+ T_CTOR("grammar-phrase",T_Enum::T_T_grammar_phrase_,0,false,false){}
+
+ T_cweb_marker::
+ T_cweb_marker(AST* Node)
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = Node;}
+ T_cweb_marker::
+ T_cweb_marker()
+ T_CTOR("cweb-marker",T_Enum::T_T_cweb_marker_,0,false,false)
+ {ast_ = 0;}
+ AST* T_cweb_marker::ast(){return ast_;}
+
+ T_lint::T_lint()
+ T_CTOR("lint",T_Enum::T_T_lint_,0,false,false)
+ {}
+ T_lint lint__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_terminals::PTR_lint__ = &lint__;
+ T_list_of_used_threads::
+T_list_of_used_threads()
+ T_CTOR("list-of-used-threads",T_Enum::T_T_list_of_used_threads_,0,false,false){}
+T_end_list_of_used_threads::
+T_end_list_of_used_threads()
+ T_CTOR("end-list-of-used-threads",T_Enum::T_T_end_list_of_used_threads_,0,false,false){}
diff --git a/web/yacco2/compiler/grammars/yacco2_terminals.h b/web/yacco2/compiler/grammars/yacco2_terminals.h
new file mode 100644
index 0000000000..d7aaa1614c
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_terminals.h
@@ -0,0 +1,1217 @@
+/*
+ File: yacco2_terminals.h
+ Date and Time: Sun Apr 20 13:54:30 2014
+*/
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#ifndef __yacco2_terminals_h__
+#define __yacco2_terminals_h__ 1
+namespace NS_yacco2_terminals{
+ using namespace NS_yacco2_T_enum;
+
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+struct T_called_thread_eosubrule;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+struct T_rules_phrase;
+struct T_subrules_phrase;
+struct T_rhs_bnd;
+struct refered_rule;
+struct rule_def;
+struct refered_T;
+struct T_in_stbl;
+struct rule_in_stbl;
+extern yacco2::CAbs_lr1_sym* PTR_lint__;
+extern yacco2::CAbs_lr1_sym* PTR_ws__;
+extern yacco2::CAbs_lr1_sym* PTR_eol__;
+
+ struct T_option_t:public yacco2::CAbs_lr1_sym{
+ T_option_t();
+ };
+ struct T_option_p:public yacco2::CAbs_lr1_sym{
+ T_option_p();
+ };
+ struct T_option_err:public yacco2::CAbs_lr1_sym{
+ T_option_err();
+ };
+ struct T_esc_seq:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_esc_seq(const char* Esc_data);
+ std::string* esc_data();
+ private:std::string esc_data_;
+ };
+ struct T_eol:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_eol();
+ };
+ struct T_basic_char:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_basic_char(CAbs_lr1_sym* Basic_char);
+ CAbs_lr1_sym* basic_char()const;
+ void zero_out_basic_char();
+ private:CAbs_lr1_sym* basic_char_;
+ static void dtor_T_basic_char(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_raw_char:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_raw_char(CAbs_lr1_sym* Raw_char);
+ CAbs_lr1_sym* raw_char()const;
+ void zero_out_raw_char();
+ private:CAbs_lr1_sym* raw_char_;
+ static void dtor_T_raw_char(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_comment:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+ };
+ struct T_ws:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_ws(const std::string& White_space_data);
+ T_ws();
+ std::string* ws_data();
+ private:std::string ws_data_;
+ };
+ struct T_angled_string:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_angled_string(const std::string& Angled_string);
+ std::string* angled_string();
+ private:std::string angled_string_;
+ };
+ struct T_c_literal:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_c_literal(const std::string& C_literal);
+ std::string* c_literal();
+ private:std::string c_literal_;
+ };
+ struct T_c_string:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_c_string(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+ };
+ struct T_xc_str:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_xc_str(const std::string& C_string);
+ std::string* c_string();
+ private:std::string c_string_;
+ };
+ struct T_unquoted_string:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_unquoted_string(const std::string& String);
+ std::string* unquoted_string();
+ private:std::string unquoted_string_;
+ };
+ struct T_file_inclusion:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_file_inclusion(T_c_string* File_name_,CAbs_lr1_sym* Error);
+ ~T_file_inclusion();
+ T_c_string* file_name();
+ CAbs_lr1_sym* error_sym();
+ void error_sym(CAbs_lr1_sym* Error);
+ private:T_c_string* file_name_;
+ CAbs_lr1_sym* error_sym_;
+ };
+ struct T_identifier:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_identifier(yacco2::KCHARP Identifier);
+ std::string* identifier();
+ private:std::string identifier_;
+ };
+ struct T_int_no:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_int_no(long S_no);
+ long no();
+ private:
+ long no_;
+ };
+ struct T_raw_characters:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_raw_characters();
+ void rc_phrase(T_rc_phrase* Phrase);
+ T_rc_phrase* rc_phrase();
+ private:T_rc_phrase* rc_phrase_;
+ static void dtor_T_raw_characters(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_lr1_constant_symbols:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_lr1_constant_symbols();
+ void lr1_k_phrase(T_lr1_k_phrase* Phrase);
+ T_lr1_k_phrase* lr1_k_phrase();
+ private:T_lr1_k_phrase* lr1_k_phrase_;
+ static void dtor_T_lr1_constant_symbols(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_error_symbols:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_error_symbols();
+ void error_symbols_phrase(T_error_symbols_phrase* Phrase);
+ T_error_symbols_phrase* error_symbols_phrase();
+ private:T_error_symbols_phrase* error_symbols_phrase_;
+ static void dtor_T_error_symbols(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_eocode:public yacco2::CAbs_lr1_sym{
+ T_eocode();
+ };
+ struct T_AD:public yacco2::CAbs_lr1_sym{
+ T_AD();
+ };
+ struct T_AB:public yacco2::CAbs_lr1_sym{
+ T_AB();
+ };
+ struct T_parallel_la_boundary:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_parallel_la_boundary();
+ void la_first_set(std::set<T_in_stbl*>& Supplier);
+ std::set<T_in_stbl*>* la_first_set();
+ void la_supplier(yacco2::TOKEN_GAGGLE* Supplier);
+ yacco2::TOKEN_GAGGLE* la_supplier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void cweb_la_srce_expr(const char* Srce_expr);
+ std::string* cweb_la_srce_expr();
+ private:
+ std::set<T_in_stbl*> la_first_set_;
+ std::string cweb_la_srce_expr_;
+ AST* cweb_marker_;
+ yacco2::TOKEN_GAGGLE* la_supplier_;
+ };
+ struct T_arbitrator_code:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_arbitrator_code();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_syntax_code* syntax_code_;
+ AST* cweb_marker_;
+ };
+ struct T_parallel_parser:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_parallel_parser();
+ void parallel_parser_phrase(T_parallel_parser_phrase* Phrase);
+ T_parallel_parser_phrase* parallel_parser_phrase();
+ private:T_parallel_parser_phrase* parallel_parser_phrase_;
+ static void dtor_T_parallel_parser(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_parallel_thread_function:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_parallel_thread_function();
+ void identifier(T_identifier* Id);
+ T_identifier* identifier();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:T_identifier* id_;
+ AST* cweb_marker_;
+ };
+ struct T_parallel_control_monitor:public yacco2::CAbs_lr1_sym{
+ T_parallel_control_monitor();
+ };
+ struct T_fsm:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_fsm();
+ void fsm_phrase(T_fsm_phrase* Phrase);
+ T_fsm_phrase* fsm_phrase();
+ private:T_fsm_phrase* fsm_phrase_;
+ static void dtor_T_fsm(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_fsm_id:public yacco2::CAbs_lr1_sym{
+ T_fsm_id();
+ };
+ struct T_fsm_filename:public yacco2::CAbs_lr1_sym{
+ T_fsm_filename();
+ };
+ struct T_fsm_namespace:public yacco2::CAbs_lr1_sym{
+ T_fsm_namespace();
+ };
+ struct T_fsm_class:public yacco2::CAbs_lr1_sym{
+ T_fsm_class();
+ };
+ struct T_fsm_version:public yacco2::CAbs_lr1_sym{
+ T_fsm_version();
+ };
+ struct T_fsm_date:public yacco2::CAbs_lr1_sym{
+ T_fsm_date();
+ };
+ struct T_fsm_debug:public yacco2::CAbs_lr1_sym{
+ T_fsm_debug();
+ };
+ struct T_fsm_comments:public yacco2::CAbs_lr1_sym{
+ T_fsm_comments();
+ };
+ struct T_terminals:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_terminals();
+ void terminals_phrase(T_terminals_phrase* Phrase);
+ T_terminals_phrase* terminals_phrase();
+ private:T_terminals_phrase* terminals_phrase_;
+ static void dtor_T_terminals(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_enumeration:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_enumeration();
+ void enum_phrase(T_enum_phrase* Phrase);
+ T_enum_phrase* enum_phrase();
+ private:T_enum_phrase* enum_phrase_;
+ static void dtor_T_enumeration(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_file_name:public yacco2::CAbs_lr1_sym{
+ T_file_name();
+ };
+ struct T_name_space:public yacco2::CAbs_lr1_sym{
+ T_name_space();
+ };
+ struct T_sym_class:public yacco2::CAbs_lr1_sym{
+ T_sym_class();
+ };
+ struct T_rules:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_rules();
+ void rules_phrase(T_rules_phrase* Phrase);
+ T_rules_phrase* rules_phrase();
+ private:T_rules_phrase* rules_phrase_;
+ static void dtor_T_rules(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_lhs:public yacco2::CAbs_lr1_sym{
+ T_lhs();
+ };
+ struct T_user_declaration:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_user_prefix_declaration:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_prefix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_user_suffix_declaration:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_suffix_declaration();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_constructor:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_constructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_destructor:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_destructor();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_op:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_op();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_failed:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_failed();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_user_implementation:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_implementation();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_user_imp_tbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_imp_tbl();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_user_imp_sym:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_user_imp_sym();
+ void syntax_code(T_syntax_code* Stc);
+ T_syntax_code* syntax_code();
+ private:T_syntax_code* syntax_code_;
+ };
+ struct T_constant_defs:public yacco2::CAbs_lr1_sym{
+ T_constant_defs();
+ };
+ struct T_terminals_refs:public yacco2::CAbs_lr1_sym{
+ T_terminals_refs();
+ };
+ struct T_terminals_sufx:public yacco2::CAbs_lr1_sym{
+ T_terminals_sufx();
+ };
+ struct T_lrk_sufx:public yacco2::CAbs_lr1_sym{
+ T_lrk_sufx();
+ };
+ struct T_selector:public yacco2::CAbs_lr1_sym{
+ T_selector();
+ };
+ struct T_NULL:public yacco2::CAbs_lr1_sym{
+ T_NULL();
+ };
+ struct T_2colon:public yacco2::CAbs_lr1_sym{
+ T_2colon();
+ };
+ struct T_block:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_block(yacco2::AST* Ast);
+ yacco2::AST* ast();
+ private: yacco2::AST* ast_;
+ static void dtor_T_block(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_syntax_code:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_syntax_code(const char* Syntax_code);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ std::string* syntax_code();
+ private:std::string syntax_code_;
+ AST* cweb_marker_;
+ };
+ struct T_fsm_class_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_fsm_class_phrase();
+ T_identifier* identifier();
+ void identifier(T_identifier* Id);
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ T_identifier* identifier_;
+ std::map<std::string,CAbs_lr1_sym*> directives_map_;
+ AST* phrase_tree_;
+ static void dtor_T_fsm_class_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_fsm_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_fsm_phrase();
+ T_c_string* fsm_id();
+ void fsm_id(T_c_string* Id);
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_fsm_class_phrase* fsm_class_phrase();
+ void fsm_class_phrase(T_fsm_class_phrase* Id);
+ T_c_string* version();
+ void version(T_c_string* Id);
+ T_c_string* date();
+ void date(T_c_string* Id);
+ T_c_string* debug();
+ void debug(T_c_string* Id);
+ T_c_string* comment();
+ void comment(T_c_string* Id);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_c_string* fsm_id_;
+ T_identifier* filename_id_;
+ string filename_no_ext_;
+ T_identifier* namespace_id_;
+ T_fsm_class_phrase* fsm_class_phrase_;
+ T_c_string* version_;
+ T_c_string* date_;
+ T_c_string* debug_;
+ T_c_string* comment_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_fsm_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_parallel_parser_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_parallel_parser_phrase();
+ T_parallel_thread_function* pp_funct();
+ void pp_funct(T_parallel_thread_function* PP_fnct);
+ T_parallel_la_boundary* la_bndry();
+ void la_bndry(T_parallel_la_boundary* La_bndry);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_parallel_thread_function* pp_funct_;
+ T_parallel_la_boundary* la_bndry_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_parallel_parser_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_enum_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_enum_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ T_syntax_code* kdefs();
+ void kdefs(T_syntax_code* Kdefs);
+ void start_lrk_enumerate(int Enum);
+ void stop_lrk_enumerate(int Enum);
+ int start_lrk_enumerate();
+ int stop_lrk_enumerate();
+ void start_err_enumerate(int Enum);
+ void stop_err_enumerate(int Enum);
+ int start_err_enumerate();
+ int stop_err_enumerate();
+ void start_rc_enumerate(int Enum);
+ void stop_rc_enumerate(int Enum);
+ int start_rc_enumerate();
+ int stop_rc_enumerate();
+ void start_T_enumerate(int Enum);
+ void stop_T_enumerate(int Enum);
+ int start_T_enumerate();
+ int stop_T_enumerate();
+
+ int total_T_enumerate();
+ void total_T_enumerate(int Enum);
+ int total_rc_enumerate();
+ void total_rc_enumerate(int Enum);
+ int total_err_enumerate();
+ void total_err_enumerate(int Enum);
+ int total_lrk_enumerate();
+ void total_lrk_enumerate(int Enum);
+ void total_enumerate(int Enum);
+ int total_enumerate();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ int total_no_subrules();
+ void total_no_subrules(int Total_subrules);
+ private:
+ T_syntax_code* kdefs_;
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ int start_lrk_enumerate_;
+ int stop_lrk_enumerate_;
+ int start_err_enumerate_;
+ int stop_err_enumerate_;
+ int start_rc_enumerate_;
+ int stop_rc_enumerate_;
+ int start_T_enumerate_;
+ int stop_T_enumerate_;
+ int total_enumerate_;
+ int total_T_enumerate_;
+ int total_rc_enumerate_;
+ int total_err_enumerate_;
+ int total_lrk_enumerate_;
+ int total_no_subrules_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_enum_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_terminal_def:public yacco2::CAbs_lr1_sym{
+
+ public:
+ enum classification_typ {not_classed,err,rc,lrk,t};
+ T_terminal_def();
+ void remove_directives_from_map();
+ std::map<std::string,CAbs_lr1_sym*>* directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_map(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+
+ std::string* t_name();
+ void t_name(const char* Id);
+ std::string* classsym();
+ void classsym(const char* Id);
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ classification_typ classification();
+ void classification(classification_typ C);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void enum_id(int Id);
+ int enum_id();
+ private:
+ std::string t_name_;
+ std::string class_sym_;
+ bool auto_delete_;
+ bool auto_abort_;
+ map<std::string,CAbs_lr1_sym*> directives_map_;
+ classification_typ classification_;
+ AST* cweb_marker_;
+ int enum_id_;
+ static void dtor_T_terminal_def(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct table_entry:public yacco2::CAbs_lr1_sym{
+
+ public:
+ enum entry_typ {terminal,rule,keyword,unknown,thread};
+ enum defined_or_used_typ {defed,used};
+ table_entry();
+ bool vacant_;
+ bool defined_;
+ bool used_;
+ entry_typ type_;
+ CAbs_lr1_sym* symbol_;
+ const char* key_;
+ int pos_;
+ int key_len_;
+ };
+ struct T_sym_tbl_report_card:public yacco2::CAbs_lr1_sym{
+
+ public:
+ enum status {okay,failure,fatal};
+ enum action {not_fnd,fnd,inserted,aborted,unknown};
+ T_sym_tbl_report_card();
+ T_sym_tbl_report_card::status status_;
+ T_sym_tbl_report_card::action action_;
+ table_entry* tbl_entry_;
+ CAbs_lr1_sym* err_entry_;
+ int pos_;
+ int key_len_;
+ };
+ struct T_terminals_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_terminals_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* terminals_refs_code();
+ void terminals_refs_code(T_syntax_code* Code);
+ T_syntax_code* terminals_sufx_code();
+ void terminals_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* terminals_refs_code_;
+ T_syntax_code* terminals_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_terminals_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_error_symbols_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_error_symbols_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_error_symbols_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_lr1_k_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_lr1_k_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ T_syntax_code* lrk_sufx_code();
+ void lrk_sufx_code(T_syntax_code* Code);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ T_syntax_code* lrk_sufx_code_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_lr1_k_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_rc_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_rc_phrase();
+ T_identifier* filename_id();
+ void filename_id(T_identifier* Id);
+ T_identifier* namespace_id();
+ void namespace_id(T_identifier* Id);
+ void destroy_alphabet();
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*>* alphabet();
+ CAbs_lr1_sym* add_t_to_alphabet(T_terminal_def* T,yacco2::Parser* P);
+ std::vector<T_terminal_def*>* crt_order();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ T_identifier* filename_id_;
+ T_identifier* namespace_id_;
+ std::map<std::string,NS_yacco2_terminals::T_terminal_def*> alphabet_;
+ std::vector<T_terminal_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_rc_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_rule_lhs_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_rule_lhs_phrase();
+ void remove_lhs_directives();
+ std::map<std::string,CAbs_lr1_sym*>* lhs_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_lhs(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ map<std::string,CAbs_lr1_sym*> lhs_directives_map_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_rule_lhs_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_parallel_monitor_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_parallel_monitor_phrase();
+ void remove_mntr_directives();
+ std::map<std::string,CAbs_lr1_sym*>* mntr_directives_map();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_mntr(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ map<std::string,CAbs_lr1_sym*> mntr_directives_map_;
+ AST* phrase_tree_;
+ static void dtor_T_parallel_monitor_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct rule_def:public yacco2::CAbs_lr1_sym{
+
+ public:
+ rule_def(const char* Key);
+ T_rule_lhs_phrase* rule_lhs();
+ void rule_lhs(T_rule_lhs_phrase* Lhs);
+ int rule_no();
+ void rule_no(int Rule_no);
+ int lhs_use_cnt();
+ void lhs_use_cnt(int Use_cnt);
+ int rhs_use_cnt();
+ void rhs_use_cnt(int Use_cnt);
+ bool recursive();
+ void recursive(bool Recursive);
+
+ void parallel_mntr(T_parallel_monitor_phrase* Mntr);
+ T_parallel_monitor_phrase* parallel_mntr();
+ T_subrules_phrase* subrules();
+ void subrules(T_subrules_phrase* Subrules);
+
+ std::string* rule_name();
+ bool autodelete();
+ void autodelete(bool Ton);
+ bool autoabort();
+ void autoabort(bool Ton);
+ bool epsilon();
+ void epsilon(bool Ton);
+ bool derive_t();
+ void derive_t(bool Ton);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* rule_s_tree();
+ void enum_id(int Id);
+ int enum_id();
+ std::set<T_in_stbl*>* first_set();
+ void add_to_first_set(T_in_stbl& T);
+ std::set<T_called_thread_eosubrule*>* called_thread_first_set();
+ void add_to_called_thread_first_set(T_called_thread_eosubrule* T);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ void add_closure_rule_making_up_first_set(rule_in_stbl* Rule);
+ std::set<rule_in_stbl*>* closure_rules_making_up_first_set();
+ void add_rule_adding_T_in_first_set(T_in_stbl* T,std::string* Rule_enumerate);
+ std::map<T_in_stbl*,std::set<std::string*> >* rule_adding_T_in_first_set();
+ AST* rule_use_skeleton();
+ void rule_use_skeleton(AST* Tree);
+ private:
+ std::string rule_name_;
+ T_parallel_monitor_phrase* parallel_mntr_;
+ T_subrules_phrase* subrules_;
+ T_rule_lhs_phrase* rule_lhs_;
+ bool auto_delete_;
+ bool auto_abort_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int enum_id_;
+ int rule_no_;
+ int lhs_use_cnt_;// for rule recycling
+ int rhs_use_cnt_;// for rule recycling
+ bool recursive_;
+ bool epsilon_;
+ bool derive_t_;
+ std::string grammar_s_enumerate_;
+ std::set<T_in_stbl*> first_set_;
+ std::set<T_called_thread_eosubrule*> called_thread_first_set_;
+ std::set<rule_in_stbl*> closure_rules_making_up_first_set_;
+ std::map<T_in_stbl*,std::set<std::string*> > rules_adding_T_in_first_set_;
+ AST* rule_use_skeleton_;
+ static void dtor_rule_def(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_rules_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_rules_phrase();
+ void destroy_rules_alphabet();
+ std::map<std::string,rule_def*>* rules_alphabet();
+ CAbs_lr1_sym* add_r_to_alphabet(rule_def* R,yacco2::Parser* P);
+ std::vector<rule_def*>* crt_order();
+ void rules_tree(AST* Tree);
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ private:
+ std::map<std::string,rule_def*> rules_alphabet_;
+ std::vector<rule_def*> crt_order_;
+ AST* phrase_tree_;
+ AST* cweb_marker_;
+ static void dtor_T_rules_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_subrule_def:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_subrule_def();
+ int subrule_no_of_rule();
+ void subrule_no_of_rule(int Subrule_no);
+ void remove_subrule_directives();
+ std::map<std::string,CAbs_lr1_sym*>* subrule_directives();
+ CAbs_lr1_sym* // 0 - ok, or error
+ add_directive_to_subrule(CAbs_lr1_sym* Directive,yacco2::Parser* P);
+ std::vector<CAbs_lr1_sym*>* subrule_elems();
+ void add_elem_to_subrule_vector(CAbs_lr1_sym* Elem);
+ int no_of_elems();
+ void remove_subrule_elems_from_vector();
+ bool epsilon();
+ void epsilon(bool Epsilon);
+ bool derive_t();
+ void derive_t(bool Epsilon);
+ rule_def* its_rule_def();
+ void its_rule_def(rule_def* Its_rule_def);
+ void add_cweb_marker(AST* Cweb);
+ AST* cweb_marker();
+ void bld_its_tree();
+ AST* subrule_s_tree();
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ int its_grammar_s_pos();
+ void its_grammar_s_pos(int Pos);
+ private:
+ std::map<std::string,CAbs_lr1_sym*> subrule_directives_;
+ std::vector<CAbs_lr1_sym*> subrule_elems_;
+ int subrule_no_of_rule_;// rel 1
+ int no_of_elems_;
+ bool epsilon_;
+ bool derive_t_;
+ rule_def* its_rule_def_;
+ AST* cweb_marker_;
+ AST* its_tree_;
+ int its_grammar_s_pos_;
+ std::string grammar_s_enumerate_;
+ static void dtor_T_subrule_def(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_subrules_phrase:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_subrules_phrase();
+ void destroy_subrules();
+ std::vector<T_subrule_def*>* subrules();
+ void add_sr_to_subrules(T_subrule_def* R);
+ int no_subrules();
+ void phrase_tree(AST* Tree);
+ AST* phrase_tree();
+ private:
+ std::vector<T_subrule_def*> subrules_;
+ int no_subrules_;
+ AST* phrase_tree_;
+ static void dtor_T_subrules_phrase(yacco2::VOIDP This,yacco2::VOIDP P);
+ };
+ struct T_in_stbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_in_stbl(T_terminal_def* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_terminal_def* t_def();
+ std::list<refered_T*>* xref_t();
+ void add_T_into_xref(refered_T& T);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_terminal_def* t_def_;
+ std::list<refered_T*> xref_t_;
+ int stbl_idx_;
+ };
+ struct refered_T:public yacco2::CAbs_lr1_sym{
+
+ public:
+ refered_T(T_in_stbl& Term_in_stbl);
+ T_in_stbl* t_in_stbl();
+ T_terminal_def* its_t_def();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_in_stbl* t_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ };
+ struct rule_in_stbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ rule_in_stbl(rule_def& Rule_def);
+ rule_def* r_def();
+ std::list<refered_rule*>* xref_r();
+ void add_R_into_xref(refered_rule& R);
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ rule_def* r_def_;
+ std::list<refered_rule*> xref_r_;
+ int stbl_idx_;
+ };
+ struct refered_rule:public yacco2::CAbs_lr1_sym{
+
+ public:
+ refered_rule(rule_in_stbl& Rule_in_stbl);
+ rule_in_stbl* Rule_in_stbl();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ rule_in_stbl* rule_in_stbl_;
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ };
+ struct T_transitive:public yacco2::CAbs_lr1_sym{
+ T_transitive();
+ };
+ struct T_grammar_name:public yacco2::CAbs_lr1_sym{
+ T_grammar_name();
+ };
+ struct T_thread_name:public yacco2::CAbs_lr1_sym{
+ T_thread_name();
+ };
+ struct T_monolithic:public yacco2::CAbs_lr1_sym{
+ T_monolithic();
+ };
+ struct T_no_of_T:public yacco2::CAbs_lr1_sym{
+ T_no_of_T();
+ };
+ struct T_list_of_native_first_set_terminals:public yacco2::CAbs_lr1_sym{
+ T_list_of_native_first_set_terminals();
+ };
+ struct T_end_list_of_native_first_set_terminals:public yacco2::CAbs_lr1_sym{
+ T_end_list_of_native_first_set_terminals();
+ };
+ struct T_list_of_transitive_threads:public yacco2::CAbs_lr1_sym{
+ T_list_of_transitive_threads();
+ };
+ struct T_end_list_of_transitive_threads:public yacco2::CAbs_lr1_sym{
+ T_end_list_of_transitive_threads();
+ };
+ struct T_emitfile:public yacco2::CAbs_lr1_sym{
+ T_emitfile();
+ };
+ struct T_preamble:public yacco2::CAbs_lr1_sym{
+ T_preamble();
+ };
+ struct T_end_preamble:public yacco2::CAbs_lr1_sym{
+ T_end_preamble();
+ };
+ struct T_T_alphabet:public yacco2::CAbs_lr1_sym{
+ T_T_alphabet();
+ };
+ struct T_end_T_alphabet:public yacco2::CAbs_lr1_sym{
+ T_end_T_alphabet();
+ };
+ struct T_file_of_T_alphabet:public yacco2::CAbs_lr1_sym{
+ T_file_of_T_alphabet();
+ };
+ struct T_attributes:public yacco2::CAbs_lr1_sym{
+
+ public:
+T_attributes(const char* Fully_qualified_T_name,int Enum);
+std::string fully_qualified_T_name_;
+ int T_enum_;
+ };
+ struct tth_in_stbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ tth_in_stbl(T_attributes* Fnd_T_in_stbl,CAbs_lr1_sym* Rc,yacco2::Parser* P);
+ T_attributes* t_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ T_attributes* t_in_stbl_;
+ int stbl_idx_;
+ };
+ struct thread_attributes:public yacco2::CAbs_lr1_sym{
+
+ public:
+ thread_attributes(const char* Fully_qualified_th_name);
+ thread_attributes
+ (const char* Fully_qualified_th_name
+ ,char Transitive
+ ,T_c_string* Grammar_name
+ ,T_c_string* Name_space_name
+ ,T_c_string* Thread_name
+ ,char Monolithic
+ ,T_c_string* File_name
+ ,std::vector<int>& List_of_Ts
+ ,std::vector<thread_attributes*>& List_of_transitive_thds
+ ,T_c_string* Fsm_comments);
+ std::string fully_qualified_th_name_;
+ char transitive_;
+ T_c_string* grammar_file_name_;
+ T_c_string* name_space_name_;
+ T_c_string* thread_name_;
+ char monolithic_;
+ T_c_string* file_name_;
+ std::vector<int> list_of_Ts_;
+ std::set<int> fs_;
+ std::vector<thread_attributes*> list_of_transitive_threads_;
+ int th_enum_;
+ T_c_string* fsm_comments_;
+ AST* called_thread_graph_;
+
+ };
+ struct th_in_stbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ th_in_stbl(thread_attributes* Fnd_th_in_stbl);
+ thread_attributes* thread_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ thread_attributes* th_in_stbl_;
+ int stbl_idx_;
+ };
+ struct kw_in_stbl:public yacco2::CAbs_lr1_sym{
+
+ public:
+ kw_in_stbl(CAbs_lr1_sym* Fnd_kw_in_stbl);
+ CAbs_lr1_sym* keyword_in_stbl();
+ void stbl_idx(yacco2::UINT Idx);
+ int stbl_idx();
+ private:
+ CAbs_lr1_sym* kw_in_stbl_;
+ int stbl_idx_;
+ };
+ struct T_la_expr_src:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_la_expr_src();
+ yacco2::TOKEN_GAGGLE* la_tok_can();
+ void zero_la_tok_can();
+ private:
+ yacco2::TOKEN_GAGGLE* la_tok_can_;
+ };
+ struct T_eosubrule:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ };
+ struct T_called_thread_eosubrule:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_called_thread_eosubrule(T_identifier* Ns,T_identifier* Thread_name);
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ T_identifier* ns();
+ T_identifier* called_thread_name();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ T_identifier* ns_;
+ T_identifier* called_thread_name_;
+ int element_pos_;
+ };
+ struct T_null_call_thread_eosubrule:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_null_call_thread_eosubrule();
+ T_subrule_def* its_subrule_def();
+ void its_subrule_def(T_subrule_def* Its_subrule);
+ std::string* grammar_s_enumerate();
+ void grammar_s_enumerate(const char* Enumerate);
+ AST* tree_node();
+ void tree_node(AST* Tree_node);
+ rule_def* its_rule_def();
+ int element_pos();
+ void element_pos(int Pos);
+ private:
+ T_subrule_def* its_subrule_def_;
+ std::string grammar_s_enumerate_;
+ AST* tree_node_;
+ int element_pos_;
+ };
+ struct T_cweb_comment:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_cweb_comment(const std::string& Comment_data);
+ std::string* comment_data();
+ private:std::string comment_data_;
+ };
+ struct T_grammar_phrase:public yacco2::CAbs_lr1_sym{
+ T_grammar_phrase();
+ };
+ struct T_cweb_marker:public yacco2::CAbs_lr1_sym{
+
+ public:
+ T_cweb_marker(AST* Node);
+ T_cweb_marker();
+ AST* ast();
+ private:AST* ast_;
+ };
+ struct T_lint:public yacco2::CAbs_lr1_sym{
+
+ T_lint();
+ };
+ struct T_list_of_used_threads:public yacco2::CAbs_lr1_sym{
+ T_list_of_used_threads();
+ };
+ struct T_end_list_of_used_threads:public yacco2::CAbs_lr1_sym{
+ T_end_list_of_used_threads();
+ };
+}//namespace
+#endif
diff --git a/web/yacco2/compiler/grammars/yacco2_test.fsc b/web/yacco2/compiler/grammars/yacco2_test.fsc
new file mode 100644
index 0000000000..9b7eddca28
--- /dev/null
+++ b/web/yacco2/compiler/grammars/yacco2_test.fsc
@@ -0,0 +1,94 @@
+file-of-T-alphabet "/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+emitfile "/yacco2/compiler/grammars/yacco2_fsc_test.cpp"
+preamble
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+end-preamble
+"/yacco2/compiler/grammars/rules_use_cnt.fsc"
+"/yacco2/compiler/grammars/enumerate_grammar.fsc"
+"/yacco2/compiler/grammars/first_set_rules.fsc"
+"/yacco2/compiler/grammars/enumerate_T_alphabet.fsc"
+"/yacco2/compiler/grammars/angled_string.fsc"
+"/yacco2/compiler/grammars/bad_char_set.fsc"
+"/yacco2/compiler/grammars/c_comments.fsc"
+"/yacco2/compiler/grammars/c_literal.fsc"
+"/yacco2/compiler/grammars/c_string.fsc"
+"/yacco2/compiler/grammars/c_k_of_cweb_or_cpp.fsc"
+"/yacco2/compiler/grammars/cweave_fsm_sdc.fsc"
+"/yacco2/compiler/grammars/cweave_lhs_sdc.fsc"
+"/yacco2/compiler/grammars/cweave_sdc.fsc"
+"/yacco2/compiler/grammars/cweave_T_sdc.fsc"
+"/yacco2/compiler/grammars/cweb_comments.fsc"
+//"/yacco2/compiler/grammars/cweb_marker.fsc"
+"/yacco2/compiler/grammars/cweb_put_k_into_ph.fsc"
+"/yacco2/compiler/grammars/dbl_colon.fsc"
+"/yacco2/compiler/grammars/eol.fsc"
+"/yacco2/compiler/grammars/epsilon_rules.fsc"
+"/yacco2/compiler/grammars/err_symbols_ph.fsc"
+"/yacco2/compiler/grammars/err_symbols_ph_th.fsc"
+"/yacco2/compiler/grammars/esc_seq.fsc"
+"/yacco2/compiler/grammars/eval_phrases.fsc"
+"/yacco2/compiler/grammars/fsc_file.fsc"
+"/yacco2/compiler/grammars/fsm_phrase.fsc"
+"/yacco2/compiler/grammars/fsm_phrase_th.fsc"
+"/yacco2/compiler/grammars/fsm_class_phrase_th.fsc"
+"/yacco2/compiler/grammars/identifier.fsc"
+"/yacco2/compiler/grammars/int_no.fsc"
+"/yacco2/compiler/grammars/la_expr.fsc"
+"/yacco2/compiler/grammars/la_expr_lexical.fsc"
+"/yacco2/compiler/grammars/la_express_source.fsc"
+"/yacco2/compiler/grammars/la_lrk_T.fsc"
+"/yacco2/compiler/grammars/lr1_k_phrase.fsc"
+"/yacco2/compiler/grammars/link_cleanser.fsc"
+"/yacco2/compiler/grammars/linker_id.fsc"
+"/yacco2/compiler/grammars/linker_pass3.fsc"
+"/yacco2/compiler/grammars/linker_preamble_code.fsc"
+"/yacco2/compiler/grammars/lint_balls.fsc"
+"/yacco2/compiler/grammars/lr1_k_phrase_th.fsc"
+"/yacco2/compiler/grammars/mpost_output.fsc"
+"/yacco2/compiler/grammars/o2_sdc.fsc"
+"/yacco2/compiler/grammars/parallel_monitor_ph.fsc"
+"/yacco2/compiler/grammars/parallel_parser_phrase.fsc"
+"/yacco2/compiler/grammars/parallel_parser_ph_th.fsc"
+"/yacco2/compiler/grammars/parallel_oper.fsc"
+"/yacco2/compiler/grammars/pass3.fsc"
+"/yacco2/compiler/grammars/prefile_include.fsc"
+"/yacco2/compiler/grammars/prt_xrefs_docs.fsc"
+"/yacco2/compiler/grammars/prt_sr_elements.fsc"
+"/yacco2/compiler/grammars/rc_phrase.fsc"
+"/yacco2/compiler/grammars/rc_phrase_th.fsc"
+"/yacco2/compiler/grammars/rhs_bnd.fsc"
+"/yacco2/compiler/grammars/rhs_component.fsc"
+"/yacco2/compiler/grammars/rtn_component.fsc"
+"/yacco2/compiler/grammars/rule_def_phrase.fsc"
+"/yacco2/compiler/grammars/rules_phrase.fsc"
+"/yacco2/compiler/grammars/rules_phrase_th.fsc"
+"/yacco2/compiler/grammars/rule_lhs_phrase.fsc"
+"/yacco2/compiler/grammars/subrule_def.fsc"
+"/yacco2/compiler/grammars/subrules_phrase.fsc"
+"/yacco2/compiler/grammars/subrule_vector.fsc"
+"/yacco2/compiler/grammars/terminals_phrase.fsc"
+"/yacco2/compiler/grammars/terminals_phrase_th.fsc"
+"/yacco2/compiler/grammars/test_components.fsc"
+"/yacco2/compiler/grammars/t_alphabet.fsc"
+"/yacco2/compiler/grammars/T_enum_phrase.fsc"
+"/yacco2/compiler/grammars/T_enum_phrase_th.fsc"
+"/yacco2/compiler/grammars/t_def_delabort_tags.fsc"
+"/yacco2/compiler/grammars/term_def_ph.fsc"
+"/yacco2/compiler/grammars/terminal_def_symclass.fsc"
+"/yacco2/compiler/grammars/unq_str.fsc"
+"/yacco2/compiler/grammars/ws.fsc"
+"/yacco2/compiler/grammars/xc_str.fsc"
+"/yacco2/compiler/grammars/o2_code_end.fsc"
+"/yacco2/compiler/grammars/o2_err_hdlr.fsc"
+"/yacco2/compiler/grammars/o2_lcl_opt.fsc"
+"/yacco2/compiler/grammars/o2_lcl_opts.fsc"
+"/yacco2/compiler/grammars/o2_linker_opts.fsc"
diff --git a/web/yacco2/compiler/o2/Makefile_Edit_cweb b/web/yacco2/compiler/o2/Makefile_Edit_cweb
new file mode 100644
index 0000000000..cd28197520
--- /dev/null
+++ b/web/yacco2/compiler/o2/Makefile_Edit_cweb
@@ -0,0 +1,31 @@
+#! /bin/sh
+# Makefile_Edit_cweb
+# clean up the ctangle and cweave droppings
+# changed cwebmac.tex to include \input eplain instead of modifying before o2,yacco2stbl, and yacco2extn.tex
+# comment out #line of cweb emits
+#
+tmp=/tmp/o2
+mkdir /tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+
+sed_cmd1="'-e s;^#line;//line;'"
+sed_cmd2="'-e s/^;$//'"
+
+for i in o2 o2_externs common_externs o2_defs # comment out line reference macros
+do
+ j=$i.cpp
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+for i in o2 o2_externs common_externs extndefs globals # comment out line reference macros of gened headers
+do
+ j=$i.h
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+rm -fr $tmp \ No newline at end of file
diff --git a/web/yacco2/compiler/o2/bugs.w b/web/yacco2/compiler/o2/bugs.w
new file mode 100644
index 0000000000..f9b70b625b
--- /dev/null
+++ b/web/yacco2/compiler/o2/bugs.w
@@ -0,0 +1,426 @@
+@q% bugs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Bugs --- ugh.\fbreak
+ What are they good for? Abolutely nothing!
+Though i paraphrase the song, my entomology teaches and exposes my myopic shortcomings.
+Ahh... the forest versus the trees of relativist processes attending to correctness.
+
+@*2 |Microsoft compiler| Corrupted memory heap.\fbreak
+Well here's the scoop: IT IS THEIR TEMPLATE HANDLING
+of a globally defined set:
+The following code shows the bug:\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/bug1.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+Debug displays the dtor winddown of the tree
+when the program is exiting that gives its access violation.
+It is walking the tree when it thinks there is something to delete ---
+bad initialization values for their iterators within their container.
+There are other heap variants but ...
+Now the real stupidity: screen shots for MS to deal with
+and trying to send the ``feedback'' to MS out of
+Visual Studio 2005 caused another Visual Studio bug:
+it experience technical difficulties ... did not register the problem with them
+ ---
+but i had their acknowledgement reference number that i emailed
+with their assurance that they would within 3 days (whose days business?)
+acknowledge receipt of the to-be-investigated problem.
+Well u got it i'm still waiting.
+From the above code i have no pre-initialization code before it enters
+the mainline but i'll not display their screen shot as this is
+wasting my time.
+
+Again it's a sad statement regarding
+how they deal with problems and lag time before
+product fixes: just read their approach to voting on bugs before fixing them,
+all other software companies call it a ``Bug Report'' or a variant there of
+but not MS ---
+their euphemism is Customer Feedback ... stop gagging Dave,
+and why is it 2 years between compiler releases to correct bugs, and
+have u tried obtaining their Beta compiler release?
+\fbreak
+There is no fix until MS fixes it in possibly their next release.
+Until then at least it reguritates at the end of the program
+and my patience for the deliverance day.
+\fbreak
+\fbreak
+Early July 2006.
+\fbreak
+@*2 Comment no 2: Apple bug -- Problem Id: 4403453 unresolved linkages.\fbreak
+Open source has it's warts whereby i was testing how
+Apple deals with problems when they go thru a middle man
+like gnu.org for their C++ compiler and linker.
+At least they have a ``Bug Reporter'' and dialogue of receipt and
+``how's it going'' followups.
+Unfortunately
+they flunked in their Californian way to getting the problem fixed
+and in not answering how i could get their lodged reference number
+when they passed the problem to the gnu.org.
+My beef is how i can track my problem(s) within the open source community
+thru the middleman and see how fast they correct the problem?
+Voting does not count here.
+This problem is still being sat on by Apple
+when their last followup was ``how's it going?'' (only 10 months o/s).
+It only confirmed my skepticism about this community and my middleman and how
+they pass on the problem. I have not reached the next step in how gnu.org
+deals with the fielded problem.
+Going to gnu.org shows a genuine honesty towards publishing problems.
+Microsoft is not of the same ilk.
+If they were GM would people buy their cars particularly when
+there are the Naders who keep them accountable?
+What would it cost in litigation towards tarnished goods / services by MS?
+\fbreak
+\fbreak
+Another beef:\fbreak
+Proof of bug demonstrated with logged outputs etc
+does not seem to be adequate in Apple's engineers' minds?
+Boy i can't wait for the day when the software
+manufacturer can under restricted access enter my computer
+and see / diagnose problems without
+the crap of whittle down code size, demonstrate
+the bug in at most 1 line of code platitudes.
+At least Apple is a bit more earnest in frontline manners... but
+i'm still waiting on this problem particularly
+when their engineer flubbed the initial response back to me.
+
+Alas what can i do?
+I'm currently looking at Sun and their development team to
+deliver a better comnpiler
+with faster logistics in dealing with bugs.
+I'm more optimistic as my people used the ``Oregon Pascal''
+compiler for 16 years.
+Even though the company folded in the early nineties
+some of their excellent compiler engineers
+are working for Sun.
+So let's see when my Sun AMD desktop running Solaris 10
+and 3 years software support with Sun comes in so that i can peddle-to-the-metal
+my program against this new backdrop.
+So far all portings have drawn problems be it interpretations of
+the C++ compiler standard
+by the compiler writers with their implementations,
+past failings by C++ compilers to handle properly
+class itor lists with 1998 work arounds, template tantrums
+to this day and i'm not meta templating, and threading issues.
+I guess i'm just stubborn in what i think will be good for the
+software world: as i just keep on hanging on as the song goes...
+I'm slowly regressing towards C only cuz C++ has that ++ complexity with ++ bugs.
+The beguiling part of C++ is templates dealing with common containers
+that makes the withdrawal process more painful...
+\fbreak
+\fbreak
+9 Jan 2006.\fbreak
+
+@*2 |Sun Microsystems compiler|. Excellent!.\fbreak
+Well so far the \O2 port is going well.
+Their performance tools are great.
+Their compiler works as it should.
+Their development IDE is close to Microsoft in facilities.
+The only speed bump is in the ``file mount'' when it occassionally gets lost
+in not finding things even when the mounted account has been refreshed.
+Also their text editor can't handle very large text files like tracings.
+The odd time ``Sunstudio'' goes in tail-chasing: must exit out and sign back in but...
+Overall rating between a 1 - 10 dada 11 that binary for well done even with the droppings
+as what is probably happening (my musings) in their messaging / interupt facility
+drops those claques --- that french for hits.
+\fbreak
+\fbreak
+23 March 2007.\fbreak
+PS: won't be going back to Microsoft. They are too arrogent without the personalized
+client support. Sun's problem reporting / case followup is just excellent. With just posted
+black quarter results and the flop of Vista buy-in i hope this bodes well for Sun
+who are trying very hard to be Open and frank. Keep it going Sun!
+
+@*2 Incomplete gening of state's core items due to common prefix.\fbreak
+The state being gened is determined by the elements associated to the closure
+state being formed.
+If there is a common prefix making up the state whereby the elements come from
+different closure states, still all the elements must go into the goto state being gened.
+As i walked the vector list, the elements that were of different closure state
+were skipped.
+This was the filtering that took place when the State was
+being assessed for closure items generation.
+The first item found for generation also became the starting point within the list
+to gen from. Remember the ``goto symbol'' vector is a list of elements to gen.
+Solution: any element in the
+``goto symbol'' vector meets the filter criteria, then
+the complete list must be used: not from the point found within the list.
+Like any mistake --- just dumb! It was not conceptual but an implementation slippage.
+|@<create a new state@>| adjusted as the element list's
+``begin and end'' j and je variables are
+present due to Apple's compiler's indigestion. Again quality assurance on
+Open Source can be exasperating at the compiler level! Sun's compiler
+is greeeeat!
+\fbreak
+\fbreak
+July 2007.\fbreak
+
+@*2 Missing reduced state deposit on prefix elements
+ leading up to the merged state.\fbreak
+Only went back 1 element to deposit the reduced state: Missing reduce deposits
+for the balance of elements
+ thru to the beginning
+of the subrule. Man there are times when u missed the boat Dave. No its links!
+\fbreak
+\fbreak
+July 2007.\fbreak
+
+@*2 3rd party AdobeReader annoyances.\fbreak
+|xpdf| and |gpdf| programs ain't doing too well on my Sun Solaris Operating system.
+As i output pdf documents and these programs either core dump or display partial info, this
+ain't good.
+So i have split up the documents generated so that one can take what is wanted, and
+hopefully i'll be able to get a more recent version that works as
+Adobe seems to be avoiding proprietary Ops --- particularly Sun.
+BTW, the generated documents work properly on my Apple iBook laptop.
+\fbreak
+\fbreak
+Sept. 2007.\fbreak
+
+@*2 Missing T(s) in lookahead set due to merges.\fbreak
+The problem was i use a list of closure states of merges that are state contexts
+for the follow set calculation.
+Remember, closure states provide the follow set contexts.
+If 2 subrules of a rule are merged into the same ``closure state'' context:
+u now have duplicate states in the ``merged into'' list.
+So i test on membership before adding to the list.
+Here's the melted down rogue grammar where ``Ra'' has the 2 subrules:\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/1test.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+Ra's lookahead set is ``c,m,t'' but it was missing ``m''
+caused by the duplicate closure state.
+Why u ask does duplicates cause a problem? i tested visited states to guard agaist
+cycles so
+stop going thru the balance of the list!
+\fbreak
+\fbreak
+Nov. 2007.\fbreak
+
+@*2 Not testing Start State for LRness.\fbreak
+The symtoms: the quality assurance non lr1 grammar caused \O2 to loop
+when gening its states and more states ...
+The cause came from the epsilon rule in the state state
+not having its reduce\_state set to self.
+When gening the |calc_la| for the reduced subrule, it exited due to the
+sanity check on state address must be the same as the reduce state address.
+So there was no lookahead set for the reducing and consequently
+no proper santity checks of outcome.
+Well why did u not thrown an error?
+Don't know what my thought process was at time so enough of the conjecture.
+The |TS_path7.lex| grammar did it.
+So let's hear it for QA.
+\fbreak
+\fbreak
+Jul. 2008.\fbreak
+
+@*2 Run run run run run away.\fbreak
+The symtoms: gening of states keeps going into a right recursion loop
+that never ends until ``death do us part'' with memory.
+The current closure state network being gened did not detect on self
+one of its states being ``not lr1'' compatible.
+Please see |/yacco2/qa/knu1_sick.lex|
+grammar to test this out.
+This bug came about when i was gening up some of the grammars from
+Knuth's paper --- ``On the translation of laguages from left to right''
+In ``Information and Control'', volume 8 of 6, pages 607--639, 1965.
+The first grammar got mistyped where RB was replaced with RA
+which made it not lr1.
+Not too swift Dave --- ahh the Occam of self reflections.
+But the detection of it strengthens \o2.
+\o2 stops gening the lr states, announces the bad news,
+and reguritates its states configurations to show where the
+nonlr1ness was found.
+\fbreak
+\fbreak
+Oct. 2008.\fbreak
+
+@*2 Ditto to above --- random monkeys throwing coconuts.\fbreak
+The symtoms: occassionally not completing the gening of states
+for a specific closure network.
+Due to the introduction of |gening_a_state| returning a status,
+i forgot to return ``a default true'' when the vector loop was completed.
+This loop is normally not completed ``the normal for loop'' way
+but a ``bypass this vector for the gening''
+as it is associated with another closure state network
+continues with the next vector in the for loop.
+So random results returned was caused by
+whatever was in the memory at the time.
+So it's not the sky falling only Dave's memory lapses, myopic vission,
+and not paying attention to the simple code.
+\fbreak
+\fbreak
+Oct. 2008.\fbreak
+
+@*2 Random VMS monkeys throwing spurious end-of-lines into streaming text.\fbreak
+The symtoms: in VMS the outputted C++ source files contains spurious carriage returns.
+Man u should see what it does to the C++ compiler
+when trying to compile these grammar programs where variable names are
+sliced-and-diced, struct defintions malformed, and
+ keywords being morphed. When the VMS C++ compiler hits
+the streaming text's buffer-end
+it takes the initiative to insert an end-of-line (carrage return). How calvalier!
+\fbreak
+The work-around: Use lots and lots of ``std::endl()''
+to flush out the text buffer instead of text ending with ``\\n''.
+Not efficient but hey do u think HP will fix this
+when their C++ compiler is probably contracted out?
+Researching this problem they suggested this work-around
+as the smell is still lingering and the latest compiler
+dittos the same tune.
+Ditto workaround to \olinker's output that manages the global thread list
+and their ``first sets''.
+\fbreak
+\fbreak
+Dec. 2008.\fbreak
+
+@*2 Take 2: Random VMS monkeys throwing spurious end-of-lines.\fbreak
+The problem is how VMS opens a file. If it is transfered using ``ftp''
+onto the Alpha as default text, then the file attributes are variable length with carriage return.
+This is the fault. By getting ``o2'' working and deleting all the ``cpp'' type files, they
+get gened as ``stream-lf'' file and not as a file of variable length with carriage return.
+This was discovered when ``o2linker'' was taking 60 to 100 x longer to
+output the ``yacco2\_fsc.fsc''
+file from its input: ``yacco2.fsc'' file.
+When the old ``yacco2\_fsc.cpp'' file was removed,
+VMS operating system did not default to the previous version
+with its attributes but created it as a ``stream-lf'' type file provided by ``ofstream'' type.
+This stopped the heavy seeking on writing out the file as it was probably
+doing this per character.
+Now the file is generated in less that a second rather than 60 plus seconds.
+
+This led to looking at the last problem of random ``end-of-line'' inserts
+being injected into the source file
+when on its file buffer boundary: when
+it flushes the buffer out to the disk.
+Low and behold, both generating of Tes and Error definitions now work
+ with ``stream-lf'' file attributes and {\bf no suprious end-of-line} injections.
+Yipee.
+\fbreak
+\fbreak
+Dec. 2009.\fbreak
+
+@*2 Other takes on VMS port: cxxlink.\fbreak
+When linking the last problem was unresolved symbols: {\sl cxxdemangle} on these symbols
+showed that they were all template based.
+Required was making sure the various respositories
+ were also present per
+library: ``yacco2'', and ``o2grammars''. Without this, some of the templates from ``o2''
+were undefined due to incomplete instantiation.
+For the 2 libraries, it is their type definitions used within the
+templates that are required.
+Here is {\sl cxxlink}'s {\bf /reportitory} parameter for ``o2'' link
+to resolve their references:\fbreak
+\INDENT{2cm}{/repository=([yacco2.compiler.o2.cxx\_repository]-}
+\INDENT{3cm}{,[yacco2.compiler.grammars.cxx\_repository]-}
+\INDENT{3cm}{,[yacco2.library.cxx\_repository])-}
+This allows VMS's {\sl cxxlink} to recompile these partially instantiated templates.
+The 1st repository is read/write while the others are read-only: u must follow the order as
+``o2'' is still being compiled and its repository will be completed by the
+{\sl cxxlink} reguritation of source templates back to {\sl cxx} compiler.
+
+The order of the
+libraries inputted are not multipassed by {\sl cxxlink} for unresolved symbols.
+This occurred with yacco2's symbol table ``add\_sym\_to\_stbl'' routine that
+is in the ``o2grammars'' library.
+Originally the inputted libraries was ``yacco2'' followed by ``o2grammars''.
+I needed to have the ``o2grammars/lib''
+first in the list of libraries instead of ``yacco2/lib''.
+
+A final adjustment was ``how much stack space'' to reserve both per thread and for the process
+that the threads ran under.
+Parameter ``stack=1024'' for the process like ``o2'' and ``o2linker''.
+``pthread'' allocation is 10$^6$ in bytes in the ``yacco2\_compile\_symbols.h'' file:\fbreak
+\INDENT{2cm}{VMS\_PTHREAD\_STACK\_SIZE\_\_ 1024*4*256}
+It was a bit of a hit-and-trial-by-fire to get it going.
+All told now ``o2'' is ported onto VMS and it works.
+\fbreak
+\fbreak
+Dec. 2009.\fbreak
+
+@*2 Evil con numbra those optimizations: lr1 compatibility check.\fbreak
+Background to my stupidities in |is_state_lr1_compatible|:\fbreak
+A thread grammar's la expression has only ``eolr'' in it.
+So it is not exploded into all the other Tes if alone.
+Now the lr1 compatibility check expected that the reducing la
+had exploded it. So ...
+Before it was working but with the explosion or is my implosion?
+\fbreak
+\fbreak
+To respect the optimization, 2 checks are done:\fbreak
+If there are 2 reduces taking place and ``eolr'' is present then not lr1.
+On the shift / reduce check, if ``eolr'' is present then ca boom.
+\fbreak
+\fbreak
+Jan. 2010.\fbreak
+
+@*2 \ALLshift{} versus ``eolr'' Evil con numbra duo: lr1 compatibility check.\fbreak
+See previous stupidity.
+With above eolr vs \ALLshift{} which also means all-the-terminals.
+So u are shifting on all Tes and trying to reduce on all Tes.
+I lean to the shift-in-the-wild until
+ the use \ALLshift{} facility is turned off.
+This is a non lr(1) extension.
+Leave alone and default to \ALLshift{} over ``eolr''.
+
+\fbreak
+\fbreak
+2 lr(1) compatability checks are done:\fbreak
+If there are 2 reduces taking place and ``eolr'' is present then not lr1.
+Shift / reduce check: if shift not one of the ``lr1 k terminals'' and the
+eolr is present its ca boom.
+\fbreak
+\fbreak
+Feb. 2010.\fbreak
+
+\fbreak
+\fbreak
+@*2 Closure state/vector context infinitely gening states when 1 of its own states not lr(1).\fbreak
+Originally detected improperly which made a legitimate grammar declared as not lr1.\fbreak
+The short of it is to test the states while being gened for lr1 compatibility.
+The loop was caused when the gening closure state/vector was within itself and not lr1
+which kept adding to the states to be gened.
+|gen_a_state| and |gen_transitive_states_for_closure_part_of_state| now handle
+the situation properly.
+The gening closure context is passed to them with these functions returning
+``continue gening'' or ``stop'' status back to their callers.
+The bad state is added to the gening states network so that the appropriate
+state reducing context is reported to the user as not lr1 for fixing.
+Also the gening of the grammar's start state loop within the main program
+handles the compatibility issue while gening rather than do a post lr1 evaluation.
+\fbreak
+
+Rewrote the ``lr states driver'' and
+included tracing to {\bf{lrclog}} with the lr state decisions made
+using the closure/vector gening contexts regarding states its gens,
+merging of states, and non lr1ness discovery be it against proposed state merges, and ugh
+a non lr1 grammar.
+This log allows one to review decisions made by \O2{} to discover faulty grammars, or faulty gened grammars.
+Of course its a faster way for me the author to correct implementation
+foibles.
+It also helps u when
+the grammar is wonkie and u want to see where the ambiguous context is for the correcting.
+\fbreak
+\fbreak
+Oct. 2014.\fbreak
+
+@*2 Improvement: arbitration-code procedure name added to grammar doc.\fbreak
+Where did i indicate the arbritration code used or not by each \PARshift{} state?
+Nada. So |mpost_output.lex| grammar now emits such indicator when present to the grammar's document
+within the lr state network,
+ |o2_types.w| and |o2_defs.w|
+were adjusted to add the |arbitration_name_| string in the state definition.
+|o2_externs.w| sets the state's |arbitration_name_|
+when found in the state where one of its threading subrule(s) has arbitration-code.
+At least now the grammar writer can post assess when arbitration is happening.
+\fbreak
+\fbreak
+Oct. 2014\fbreak
+
diff --git a/web/yacco2/compiler/o2/common_externs.cpp b/web/yacco2/compiler/o2/common_externs.cpp
new file mode 100644
index 0000000000..6c2bf5ca10
--- /dev/null
+++ b/web/yacco2/compiler/o2/common_externs.cpp
@@ -0,0 +1,379 @@
+/*7:*/
+//line 87 "/usr/local/yacco2/externals/common_externs.w"
+
+/*6:*/
+//line 84 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "common_externs.h"
+/*:6*/
+//line 88 "/usr/local/yacco2/externals/common_externs.w"
+
+/*8:*/
+//line 93 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+/*:8*//*10:*/
+//line 116 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void GET_CMD_LINE
+(int argc,char*argv[],const char*Holding,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+ofstream ofile;
+ofile.open(Holding,ios_base::out|ios::trunc);
+if(!ofile){
+CAbs_lr1_sym*sym= new Err_bad_filename(Holding);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+if(argc==1){
+char cmd_line[Max_buf_size];
+cout<<"Please enter Command line to process: ";
+cin.get(cmd_line,Max_buf_size,'\n');
+ofile<<cmd_line;
+ofile.close();
+return;
+}
+for(int x= 1;x<argc;++x){
+ofile<<argv[x]<<' ';
+}
+ofile.close();
+return;
+}
+
+/*:10*//*11:*/
+//line 167 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_k_symbols;
+using namespace yacco2;
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+using namespace NS_o2_err_hdlr;
+Co2_err_hdlr fsm;
+Parser pass_errors(fsm,&Errors,0);
+pass_errors.parse();
+yacco2::Parallel_threads_shutdown(pass_errors);
+
+}
+
+/*:11*//*12:*/
+//line 185 "/usr/local/yacco2/externals/common_externs.w"
+
+extern const char*DATE_AND_TIME(){
+static std::string dt;
+if(dt.empty()){
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+dt+= cTime;
+int n= dt.find('\n');
+dt[n]= ' ';
+}
+return dt.c_str();
+}
+
+/*:12*//*13:*/
+//line 199 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym){
+Xlated_sym[0]= (char)0;
+int lll= strlen(Sym_to_xlate);
+int app_ptr= 0;
+for(int x= 0;x<lll;++x,--app_ptr){
+switch(Sym_to_xlate[x]){
+case'{':{
+int sz= sizeof("\\BRACEOPEN{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACEOPEN{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'}':{
+int sz= sizeof("\\BRACECLOSE{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACECLOSE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'<':{
+int sz= sizeof("\\LTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\LTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'>':{
+int sz= sizeof("\\GTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\GTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'@':{
+int sz= sizeof("\\ATsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ATsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'|':{
+if(x+2<lll){
+if(Sym_to_xlate[x+2]!='|'){
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+}else{
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'+':{
+int sz= sizeof("\\ALLshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\ALLshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'.':{
+int sz= sizeof("\\INVshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\INVshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'?':{
+int sz= sizeof("\\QUEshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\QUEshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'|':{
+int sz= sizeof("\\PARshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PARshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'r':{
+int sz= sizeof("\\REDshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\REDshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'p':{
+int sz= sizeof("\\PROCshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PROCshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case't':{
+int sz= sizeof("\\TRAshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\TRAshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+default:{
+int sz= sizeof("\\Verticalbar{}");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar{}",sz);
+app_ptr+= sz;
+continue;
+}
+}
+}
+case'+':{
+int sz= sizeof("+");
+strncpy(&Xlated_sym[app_ptr],"+",sz);
+app_ptr+= sz;
+continue;
+}
+case'-':{
+int sz= sizeof("-");
+strncpy(&Xlated_sym[app_ptr],"-",sz);
+app_ptr+= sz;
+continue;
+}
+case'*':{
+int sz= sizeof("\\ASTERICsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ASTERICsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'#':{
+int sz= sizeof("\\NOsign ");
+strncpy(&Xlated_sym[app_ptr],"\\NOsign ",sz);
+app_ptr+= sz;
+continue;
+}
+case'&':{
+int sz= sizeof("\\AMPERsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\AMPERsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'%':{
+int sz= sizeof("\\PERCENTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\PERCENTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'$':{
+int sz= sizeof("\\DOLLARsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DOLLARsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'\\':{
+if(lll==1){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'\\':{
+if(lll==2){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+int sz= sizeof("\\");
+strcat(Xlated_sym,"\\");
+app_ptr+= sz;
+++x;
+continue;
+}
+case'"':{
+int sz= sizeof("\\DBLQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DBLQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'\'':{
+int sz= sizeof("\\RTQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\RTQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'n':{
+int sz= sizeof("\n");
+strncpy(&Xlated_sym[app_ptr],"\n",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case't':{
+int sz= sizeof("\t");
+strncpy(&Xlated_sym[app_ptr],"\t",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'r':{
+int sz= sizeof("\r");
+strncpy(&Xlated_sym[app_ptr],"\r",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'v':{
+int sz= sizeof("\v");
+strncpy(&Xlated_sym[app_ptr],"\v",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'b':{
+int sz= sizeof("\b");
+strncpy(&Xlated_sym[app_ptr],"\b",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'f':{
+int sz= sizeof("\f");
+strncpy(&Xlated_sym[app_ptr],"\f",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'a':{
+int sz= sizeof("\a");
+strncpy(&Xlated_sym[app_ptr],"\a",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'?':{
+int sz= sizeof("\?");
+strncpy(&Xlated_sym[app_ptr],"\?",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+default:{
+int sz= sizeof("\\");
+strncpy(&Xlated_sym[app_ptr],"\\",sz);
+app_ptr+= sz-1;
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x+1],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++x;
+++app_ptr;
+continue;
+}
+}
+}
+case'^':{
+int sz= sizeof("\\UPARROWsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\UPARROWsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'~':{
+int sz= sizeof("\\TILDE{}");
+strncpy(&Xlated_sym[app_ptr],"\\TILDE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'_':{
+int sz= sizeof("\\_");
+strncpy(&Xlated_sym[app_ptr],"\\_",sz);
+app_ptr+= sz;
+continue;
+}
+default:{
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++app_ptr;
+continue;
+}
+}
+}
+}
+
+/*:13*/
+//line 89 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/compiler/o2/common_externs.h b/web/yacco2/compiler/o2/common_externs.h
new file mode 100644
index 0000000000..2a6f913943
--- /dev/null
+++ b/web/yacco2/compiler/o2/common_externs.h
@@ -0,0 +1,28 @@
+/*4:*/
+//line 63 "/usr/local/yacco2/externals/common_externs.w"
+
+#ifndef common_extern_
+#define common_extern_ 1
+
+//line 66 "/usr/local/yacco2/externals/common_externs.w"
+
+/*5:*/
+//line 71 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "globals.h"
+#include "/usr/local/yacco2/compiler/o2/o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "o2_err_hdlr.h"
+extern
+void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern
+void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern const char*DATE_AND_TIME();
+/*:5*/
+//line 67 "/usr/local/yacco2/externals/common_externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/compiler/o2/globals.h b/web/yacco2/compiler/o2/globals.h
new file mode 100644
index 0000000000..71a3d6cf8f
--- /dev/null
+++ b/web/yacco2/compiler/o2/globals.h
@@ -0,0 +1,26 @@
+/*1:*/
+//line 13 "./o2_types.w"
+
+
+
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+using namespace std;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+#endif
+
+/*:1*/
diff --git a/web/yacco2/compiler/o2/includes.w b/web/yacco2/compiler/o2/includes.w
new file mode 100644
index 0000000000..7770ee4668
--- /dev/null
+++ b/web/yacco2/compiler/o2/includes.w
@@ -0,0 +1,50 @@
+@q file: includes.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Cweb's writing out of \O2 program.\fbreak
+@*2 Include files.\fbreak
+To start things off, there are the Standard Template Library (STL) containers,
+ \Yacco2's parse library definitions, and the specific
+grammar definitions to parse the grammar.
+@<Include files@>=
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_types.h"
+#include "la_expr_lexical.h"
+#include "la_expr.h"
+#include "enumerate_T_alphabet.h"
+#include "epsilon_rules.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "eval_phrases.h"
+#include "enumerate_grammar.h"
+#include "rules_use_cnt.h"
+@ Accrue \O2 code.
+@<accrue \o2 code@>= // accrue code
+
+@*2 Create header file for \O2 environment.\fbreak
+Note, the ``include search'' directories for the c++ compiler has to be supplied
+to the compiler environment used. This must include \Yacco2's library.
+@(o2.h@>=
+@h
+#ifndef o2__
+#define o2__ 1
+@<Include files@>;
+ @<External rtns and variables@>;
+#endif
+
+@*1 \O2 implementation.\fbreak
+Start the code output to |o2.cpp|
+by appending its include file.
+@(o2.cpp@>=
+#include "o2.h"
+@<accrue \o2 code@>;
+
diff --git a/web/yacco2/compiler/o2/intro.w b/web/yacco2/compiler/o2/intro.w
new file mode 100644
index 0000000000..233feef680
--- /dev/null
+++ b/web/yacco2/compiler/o2/intro.w
@@ -0,0 +1,417 @@
+@q file: intro.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Summary of \O2 --- Yacco${_2}$'s nickname.\fbreak
+The compiler / compiler's formal name is \Yacco2 but call me \O2.
+\Yacco2 can be morphed many ways; here are some hints: sound of a cold, molecular contortions.
+Do your own expletives.
+@*2 Component overview running \O2.\fbreak
+I use a ``.lex'' extension to distinguish a grammar file.
+This is not hard coded. You can choose your own memory mnemonics for any of my files.
+The ``.T'' file extension identifies the Terminal vocabulary.
+Its components are described later in the document.
+The Lrk and Rc terminals are pre-assembled and reside in the
+``\Whereyacco2/library/grammars'' account.
+My original thought was to allow the compiler writer to experiment with his own
+terminal definitions for all classes: LR constants, raw characters, errors, and terminals.
+From experience, only the last 2 classes are local to each language being defined.
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_overview.1"}{1}{1}
+\fbreak
+\fbreak
+Please note, the ``header'' files are absent from the diagram due to space constraints.
+The salient ones to note are:\fbreak
+\ptindent{1) the enumeration of the vocabulary's symbols}
+\ptindent{2) headers for fsm, and the terminal classifications: lrk,error,rc,and T}
+Per compiled ``xxx.lex'' grammar, the 2 status files ``xxx\_tracings.log'' and ``xxx\_errors.log''
+hold the text-only compiled results lodged within the local grammar's folder.
+``T-Alphabet'' gets gened when the ``-t'' option is inputted
+to gen the Terminal vocabulary.
+It is a file by defined order of all the terminals's literal names
+ used as comments against the outputted lookahead tables
+to make sense of their compressed set definitions.
+Its file name is built from the grammar's ``T-enumeration'' construct
+using its filename and adding
+a ``.fsc'' extension.
+\Olinker cross checks the number of terminals defined
+ in the ``no-of-T'' value in each grammar's ``fsc'' file against this file.
+Out-of-sync values indicates that new terminals have been added to
+either the ``error'' or ``terminal'' class terminals vocabulary
+ without gening up the grammar with the ``-t'' and/or ``-err'' option(s).
+The ``yyy.fsc'' file is the grammar writer's handcrafted file containing
+references to these ``xxx.fsc'' files
+and the T-Alphabet file for \Olinker to
+compile. Its name can be anything but i use the ``.fsc'' as a memory jog.
+Please see \Olinker's documentation on its raison d'\^etre and make file comments.
+
+@*3 Tracing facilities.\fbreak
+Some of the more important tracing facilities are as follows where their mnemonic
+replaces the ``xx'': \fbreak
+\ptindent{TH --- dynamic trace of the grammar's parse stack when its ``debug option is true}
+\ptindent{T --- trace terminals fetched across all grammars}
+\ptindent{AR --- trace arbitration when grammar's debug switch is true}
+\ptindent{MSG --- dynamic threading messages between the co-operatives}
+Please see \O2's library documentation concerning
+each tracing variable when set to 1 within your
+program by the programmer: ``yacco2::YACCO2\_xx\_\_ = 1;''
+starts their specific scribblings.
+There are other less important trace variables not listed above.
+The turned on \O2's library trace facility will log to ``xxx\_tracings.log' file where `xxx'
+represents the grammar being parsed without its extension.
+As the ``xxx\_tracings.log'' is text-only content, this allows the use of a general text editor
+to browse its material.
+If the editor has indigestion due to its volume, a script can be written to postprocess
+it for study by the ``sed'' / ``grep'' combo or using just the ``split'' utility.
+
+@*2 Grammar anatomy.\fbreak
+The grammar is composed of your traditional
+components: start rule, non-terminal vocabulary,
+terminal vocabulary, and 2 additional parts: fsm and syntax directed code.
+``fsm'' (short for finite state machine) is a packaging agent.
+It houses all the grammar's software generated parts along with
+the c++ syntax directed code within the grammar
+ associated with their directives.
+These directives are local to the grammar's rules, subrules, and possibly
+ the grammar's start-run-finish sequence that is handled within the fsm.
+``fsm'' supplies the grammar's c++ namespace,
+ class name, and filename prefix to output the components to.
+
+@*2 Terminal vocabulary.\fbreak
+From the diagram below, the ``enumeration'' component is a packaging agent that
+receives the outputed enumeration definitions for each terminal class.
+The counting scheme uses the natural numbers
+starting from 0 listing the ``lrk'' constants, followed by each of the
+other components's terminals.
+The last component ``terminals'' is your regular terminal definitions that gets assembled from
+the lexical or syntactical passes, and possibly out into etherland of abstraction.
+All vocabulary elements are tagged this way.
+It is the glue to all the emitted tables.
+For the record, each grammar's non-terminal vocabulary (rules)
+ are enumerated after the terminal enumeration count
+and are defined within the grammar's fsm class definition.
+The rules's subrules are also enumerated and defined there.
+They are not dependent on the Terminal vocabulary.
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_Toverview.1"}{1}{1}
+\fbreak
+
+
+@*2 Overview of generating the grammar's pdf and postscript(ps) documents.\fbreak
+There are 2 generated documents using the ``-p'' option emitting
+``cweave'' content and associated ``mpost'' diagrams for compilation:\fbreak
+\INDENT{.35in}{1) grammar with its syntax direct code,}
+\INDENT{.5in}{emitted \O2linker file, and gened lr1 state network}
+\INDENT{.35in}{2) various cross references against the grammar, and lr1 state network}
+\INDENT{.7in}{- symbols used from each rule's subrules symbol string position}
+\INDENT{.7in}{- additional information supporting the lr1 state network in the 1st document}
+\INDENT{1in}{$\bullet$ each lr1 state's rules follow sets}
+\INDENT{1in}{$\bullet$ reducing states subrules with references to their contributors' follow sets}
+\INDENT{1in}{$\bullet$ global lookahead sets with their yield used by the parse reduce operation}
+The below diagram shows the manufacturing
+of a grammar's document.
+\fbreak
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/docgeneration.1"}{1}{1}
+\fbreak
+\fbreak
+Also for each ``pdf'' document generated there is a postscript document to
+remove the dependency of a ``pdf reader'' and its ``gui'' interaction when wanting to
+spool the document for print.
+For example on my Sun Solaris, the program ``pdftops''
+takes a ``pdf'' document and creates an equivalent ``ps'' document.
+Spooling it to a print would use the command line ``lp xxx.ps''.
+
+@*2 A sample \O2 script where the options are described.\fbreak
+\O2's input data template is $[options]$ filename where options are optional as
+they have preconfigured values.
+Here are the switches that can be inputted to \O2 using the Unix approach to turn
+on the specific option. Each option must be inputted with its own $-$ sign.\fbreak
+{\bf Options}: if they are not present, do not generate\fbreak
+\ptindent{1) -t --- generate the Terminal vocabulary}
+\ptindent{2) -err --- generate the Error vocabulary}
+\ptindent{3) -lrk --- generate the lr k vocabulary: Deprecated not supported}
+\ptindent{4) -rc --- generate the Raw characters vocabulary: Deprecated not supported}
+\ptindent{5) -p --- generate the grammar's documents}
+Points 1 and 2 are usually stable and do not need to be gened. Do so when these
+vocabularies have been modified. Don't forget to regen all the grammars
+and re-run \O2{}linker to reprocess the ``fsc'' files if the number of
+Terminals in the vocabularies has changed as all the Lookahead sets are now different along
+with the enumeration scheme that ties them together.
+Points 3 and 4 cannot be used as they reside in ``\Whereyacco2/library/grammars'' pregened.
+I included them as a memory jog to my
+experiments; if u try to input these deprecated options u'll get an error message.
+Other options were experimented with but found boarderline marginal:
+gen namespace, gen the grammar, and turn on debug of grammar instead of using the editor cycle to
+modify the grammar to be traced. Now namespace and grammar are always generated, and hello editor.
+So out damn spot.
+
+Here is a batch command file that runs on a Microsoft's NT/XP desktop.
+The same can be done within a ``Unix'' flavour script language like ``Bash''.
+Though it does not illustrate a conditional test as to whether
+the script should continue when the grammar is faulty,
+\O2 returns a 0 to indicate a healthy grammar
+and a 1 to indicate a sick grammar:
+The gory details are in the error log.
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/o2run_example.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+The above example uses line numbers delimited by ``:'' at the start of each
+line for commentary purposes.
+Line 3 sets the directory where \O2 resides and repository
+for the temporary files from \O2, ``mpost'' that draws the grammar diagrams,
+while ``cweave'' generates the ``xxx.tex'' file for ``pdftex''
+who completes the document for an ``Adobe'' reader program: for example ``xpdf'' of open source
+or Adobe's reader.
+``cweave'' is one of the programs by Donald E. Knuth and Silvio Levy
+from their book ``The CWEB System of Structured Documentation''.
+Go to the web site ``www.tex.org'' for more information on how to obtain
+``CWEB''. The same comments apply to ``mpost'' written by John D. Hobby of
+`Bell Labs''.
+This is a remake of ``MetaFont''language / ``MetaPost'' program by Donald E. Knuth.
+These programs are grrrreat! More people should be using them.
+The emitted grammar files get placed in the same directory
+of the inputted grammar to \O2.
+
+Line 6 runs \O2 with its inputted grammar file
+``/yacco2/compiler/grammars/enumerate\_grammar.lex''
+and switches to gen up the Terminal and Error vocabularies
+and gen a printed set of documents.
+\O2 also generates the documentation files
+ ``enumerate\_grammar.mp'' and ``enumerate\_grammar.w'' files.
+Lines 7--9 are command lines to create the output document.
+In the example, ``enumerate\_grammar.pdf'' is the final
+file document for printing.
+``enumerate\_grammar.xx'' are figure files generated by mpost from file
+``enumerate\_grammar.mp''.
+These files are referenced in the ``enumerate\_grammar.w''
+file by cweave who produces an ``enumerate\_grammar.tex'' file for program pdftex.
+All this to say that there can be many generated files before the document is complete.
+Please note the other cross reference document
+is not shown but follows the same run pattern.
+
+@*2 Some definitions.\fbreak
+\fbreak
+Non-terminal:\fbreak
+This is your normal grammar definition. I interchange this term with ``rule''.
+They are the same. Depending on the context, i also use rule
+in the same sense of a grammar's production.
+To refine the context, the term ``subrule'' indicates one of a rule's productions.\fbreak
+\fbreak
+Subrule:\fbreak
+Equivalent to a grammar's production.
+It is one of a rule's right-hand-side string of symbols drawn from
+the non-terminal or Terminal alphabets.
+The string can be empty indicating epsilon.\fbreak
+
+Please see the mavelous book ``Formal Languages and Their Relationn to Automata''
+by Hopcroft and Ullman for a complete discussion on grammars and their makeup.
+Excellent reading for a 1968 vintage on automata.\fbreak
+\fbreak
+Here are some basic definitions used by my lr1 generator.\fbreak
+\fbreak
+First set:\fbreak
+Please see |first_set_rules.lex| grammar for a more thorough discussion.
+First set is the set of terminals that begins a string of symbols.
+When the symbol is a rule, then all its subrules contribute to the first set.
+This is a recursive definition as the rule's subrules can also bring in other
+rules' subrules string of symbols that contribute to it.
+If the string's start symbol is a rule and its epsilonable,
+then its right neighbour also contributes. Again if its a rule and epsilonable
+its right neighbour is a contributor: ahh recursive definitions.
+\fbreak
+\fbreak
+Follow set:\fbreak
+The rule's first set of production strings to the right of a lr state's configuration.
+Here is a simple arithmetic grammar to illustrate follow sets for the ``Closure-only'' state
+where all production strings have their configuration
+position at their very beginning illustrated by ''$ _.$''.
+I use a form of Dewey decimal notation to reference the production's configuration.
+For example ``E.1.2'' means the production of rule ``E'' referencing subrule 1
+of its second symbol is being refered to.
+In this example below the referenced symbol is $+$.
+How follow sets are arrived at is discussed in ``Overview of \O2's state generated components''.
+ \fbreak
+
+\settabs\+\indent&1in\qquad&\qquad&\qquad&\cr
+\+&\it Rule&&{\it subrule's symbols}\cr
+\+&S &$\rightarrow$ &$ _.$E $\bot$\cr
+\+&E &$\rightarrow$ &$ _.$E $+$ T\cr
+\+&&$\rightarrow$ &$ _.$T\cr
+\+&T&$\rightarrow$ &$ _.$T $*$ F\cr
+\+&&$\rightarrow$ &$ _.$F\cr
+\+&F&$\rightarrow$ &$ _.$( E )\cr
+\+&&$\rightarrow$ &$ _.$id\cr
+\fbreak
+\settabs\+\indent&mmmmmm&\qquad&followset&\qquad&R.SR.Pos follow setxxxxxx &\qquad&transitions&\cr
+%\settabs 4 \columns
+\+&\it Rule&&{\it follow set}&& {\it R.SR.Pos of follow set}&&{\it with transitions}\cr
+\+&E && $\bot\ +$ &&$\bot$ by S.1.2, $+$ from E.1.2&& $\bot\ +$\cr
+\+&$\uparrow$ && && E.2.2\cr
+\+&T&& $*$&&$*$ by T.1.2&&$*\ \bot\ +$\cr
+\+&$\uparrow$ && && T.2.2\cr
+\+&F&& $\emptyset$&&&&$*\ \bot\ +$\cr
+\fbreak
+\hbox{\hskip.5in Table of follow sets for the ``Start state'' of the above grammar}\fbreak
+
+There are 3 subtleties that are watched for in the follow set calculation:\fbreak
+\ptindent{1) rule symbol --- use its ``first set''}
+\ptindent{2) epsilonable rule symbol --- continue to next symbol in follow string for assessment}
+\ptindent{3) end of symbol string reached --- transition}
+Point 3 requires some explanation.
+Its condition means that the rule's right-hand-side has been consumed (or is epsilon)
+ so what's
+it follow set? Nothing?
+No it's the subrule's rule that spawned it that provides more follow set context.
+This context resides in the ``closure'' state of this rule.
+So now there is a transition to this rule's follow set.
+This is the transitive closure of spawning contexts.
+The Table of follow sets shows these transitions with the $\uparrow$ symbol.
+Epsilon rules are chameleon in nature: they supply their first sets and
+also disappear and so u must continue to the next symbol in the follow string
+to complete the follow set while observing the
+end-of-string condition to follow its transitions.
+
+@*2 Catalogue of \O2's files.\fbreak
+Cweb Documents:\fbreak
+\ptindent{1) \Yacco2 parse library}
+\ptindent{2) \o2{}extern --- external routines}
+\ptindent{3) \Yacco2{}stbl --- symbol table}
+
+\O2's Input files to |cweb|:\fbreak
+\ptindent{1) |o2.w| --- master file that starts things off}
+\ptindent{2) |intro.w| --- introduction }
+\ptindent{3) |defs.w| --- basic definitions to gen lr1 network}
+\ptindent{4) |prog.w| --- \o2 cweb code }
+\ptindent{5) |bug.w| --- confessions}
+\ptindent{6) |o2_defs.w| --- details}
+\ptindent{7) |includes.w| --- bring in those grammars for the parsing}
+\ptindent{8) |o2externs.w| --- external routines}
+|cweb| generated files:\fbreak
+\ptindent{1) |o2.h| --- compiler definitions}
+\ptindent{2) |o2.cpp| --- \O2 program}
+\ptindent{3) |o2_defs.cpp| --- structure implementations}
+\ptindent{4) |o2_externs.h| --- global definitions used across \o2's source code}
+
+\O2's generated files where xxx is the grammar's name being compiled:\fbreak
+\ptindent{1) |xxx.fsc| --- grammar's first set confessions for Linker}
+\ptindent{2) |xxx.h| --- grammar's header file}
+\ptindent{3) |xxx.cpp| --- automaton code}
+\ptindent{4) |xxxsym.cpp| --- automaton symbols}
+\ptindent{5) |xxxtbl.cpp| --- automaton's state definitions}
+
+\Yacco2 library memorabilia:\fbreak
+\ptindent{1) yacco2 --- library namespace}
+\ptindent{2) ``\Whereyacco2/library'' --- yacco2's library directory}
+\ptindent{3) ${< yacco2.h >}$ --- Yacco2's library header file}
+\ptindent{4) ``library directory/xxxx'' - xxxx is the debug or release of the object library}
+
+Dependency files from \Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_T_enumeration.h| - terminal enumeration for Yacco2's terminal grammar alphabet}
+\ptindent{|yacco2_err_symbols.h| - error terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_characters.h| - raw character definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_k_symbols.h| - constant terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|*.h| - assorted grammar definitions from Yacco2 to parse}
+\ptindent{|o2_externs.h| - external support routines for \O2}
+
+Grammars\fbreak
+\ptindent{|pass3.lex| --- lex and syntactic phase of grammar}
+\ptindent{|la_expr_source.lex| --- lexical phase of lookahead expression}
+\ptindent{|la_expr.lex| -- syntactic phase of lookahead expression}
+\ptindent{|enumerate_T_alphabet.lex| -- logic grammar to assign each T a number from 0..n}
+\ptindent{|epsilon_rules.lex| -- grammar determines epsilon per rule and pathological conditions}
+\ptindent{|first_set.lex| -- logic grammar to calculate each rule's first set}
+\ptindent{|prt_fs_of_rules.lex| -- logic grammar to print each rule's first set}
+\ptindent{|enumerate_grammar.lex| -- dump aid: enumerate grammar's components}
+
+Globals\fbreak
+\ptindent{|LR1_STATES| --- list of gened lr1 states}
+\ptindent{|LR1_COMMON_STATES| --- common states map having same vectored into symbol}
+\ptindent{|START_OF_RULES_ENUM| --- used in shift / reduce conflict evaluation}
+
+Comments:\fbreak
+My external routines use the all upper case approach to names. I know it's like shouting but it
+clues the reader where the heck the routine comes from. I could have
+tempered the all caps approach to a capital letter
+but i'm myopic and becoming
+visually golden in age.
+So my excuses to the reader for this tasteless approach.
+
+@*2 \O2's language.\fbreak
+There are 3 languages that are actually parsed: 2 in preparation ---
+command line and its contents, and the grammar file.
+A grammar is divided into 4 parts:\fbreak
+\ptindent{a) Finite automaton definition --- basic statements about the grammar}
+\ptindent{b) Parallel parse that defines a threading grammar}
+\ptindent{c) Terminal vocabulary: errors, lr k, raw characters, and terminals}
+\ptindent{d) Rule definitions}
+
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/eol.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+
+The above source listing is an example of a threaded grammar.
+Starting each source line is a line number suffixed by `:' present
+only for discussion purposes.
+Line numbers 6--10 defines the fsm component.
+Lines 11--19 indicates that the grammar is a thread.
+Though the terminal vocabulary definitions are hidden
+by line 20, it illustrates the file include feature of \O2.
+Lines 22--39 are the rule definitions.
+Each grammar's section has a defining keyword like ``fsm'', ``parallel-parser'', ``rules''
+that introduces the part being defined.
+
+
+@*2 C macros.\fbreak
+Originally there were conditionally defined trace variables
+that controlled the inclusion of trace code.
+This was a pain-in-the-seat so now they are global
+variables that test their values.
+I felt the slight speed bump merited the facility without the
+combinatorics of libraries needed for distribution.
+|YACCO2_define_trace_variables| macro defines these global variables used
+by \O2's tracing purposes.
+U can roll your own or just include the macro in your code.
+These variables are dormant until their values are not zero.
+Without their inclusion, a linker message of unresolved variable will be
+regurgitated: they must be present
+when using the \O2 library. It's an easy way to define them within your program.
+Please see \O2 library documentation for a discussion on each trace variable.
+To activate a specific tracing, assignment a non zero value to
+the selected trace variable: set it to 1.
+Here is their catalogue:\fbreak
+\ptindent{|YACCO2_T__| --- trace terminal when fetched}
+\ptindent{|YACCO2_TLEX__| --- trace macros of emitted grammar: rules and user emergency macros}
+\ptindent{|YACCO2_MSG__| --- trace thread messages}
+\ptindent{|YACCO2_MU_TRACING__| --- trace acquire / release of trace mutex}
+\ptindent{|YACCO2_MU_TH_TBL__| --- trace acquire / release mutex of thread table}
+\ptindent{|YACCO2_MU_GRAMMAR__| --- trace acquire / release each grammar's mutex}
+\ptindent{|YACCO2_TH__| --- trace the parse stack: fsa and syntax directed activities }
+\ptindent{|YACCO2_AR__| --- trace arbitrator procedure}
+\ptindent{|YACCO2_THP__| --- trace thread performance}
+They are enrobed by namespace yacco2.
+To set the trace variable be sure the namespace is delared: either explicitly
+as in: \fbreak
+\ptindent{|yacco2::YACCO2_T__| = 1;}
+ or implicitly by a ``using namespace yacco2;'' statement
+somewhere preceding the assignment:\fbreak
+\ptindent{using namespace yacco2;}
+\ptindent{...}
+\ptindent{|YACCO2_T__| = 1;}
+\fbreak
+Each traced output line identifies its type by the trace variable turned on.
+As tracing can be very very volumnious, post evaluating the output thru
+a Bash type filter script makes the log output manageable.
+I say this from experience as some editors blow up due to the size of the traced file.
+Names withheld to protect the innocent.
+
diff --git a/web/yacco2/compiler/o2/makefile_APPLE b/web/yacco2/compiler/o2/makefile_APPLE
new file mode 100644
index 0000000000..b46050a5e6
--- /dev/null
+++ b/web/yacco2/compiler/o2/makefile_APPLE
@@ -0,0 +1,115 @@
+# File: makefile_APPLE
+# Why: Creates the o2 compiler /compiler using the GNU make program
+# Ks: Depending on your system, this utility might be called gmake or make
+#
+# O2 placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, or Genw
+# Rlse --- gen the optimizwd version of O2 with no debug support
+# Dbg --- gen the debug version of O2
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvelous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# ---> Know where the stdc++ library resides and adjust the STDCC_dir variable
+#
+# Example: gen the compiler/compiler o2 release version using GNU make
+# cd /usr/local//yacco2/compiler/o2
+# make Rlse -f makefile_APPLE
+#
+# Example: gen programs from cweb
+# make Genw -f makefile_APPLE
+#
+
+O2 := /usr/local/yacco2
+##CC := /opt/local/bin/c++-mp-4.9
+CC := clang++#g++
+##LD := /opt/local/bin/ld
+LD := ld #apple linker
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+Prg := o2
+O2_target_dir := Release
+Compile_opts := -c -pthread -arch x86_64 #-frepo -fno-implicit-templates -fno-rtti
+else
+O2_target_dir := Debug
+Prg := o2_debug
+Compile_opts := -c -g -pthread -arch x86_64
+endif
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_bin := $(Base_o2)/bin
+O2_eternals := $(Base_o2)/externals
+O2_docs := $(Base_o2)/docs
+O2_cc := $(Base_o2)/compiler/o2
+O2_docs := $(Base_o2)/docs
+O2_library := $(Base_o2)/library
+O2_library_lib := $(O2_library)/lib
+O2_lib_grms := $(O2_library)/grammars
+O2_cc_grms := $(Base_o2)/compiler/grammars
+O2_cc := $(Base_o2)/compiler/o2
+O2_includes := -I'$(O2_cc)' -I'$(O2_cc_grms)' -I'$(O2_library)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_library_lib)/$(O2_target_dir)
+
+CC_lib := c++
+##CC_lib := stdc++ #gnu c++
+LD_PARMS := -arch x86_64 -macosx_version_min 10.9 #-stack_size 0x2000000 -no_compact_unwind
+
+#STDCC_dir := -L/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/
+##STDCC_dir := -L/opt/local/lib/gcc49/ #gnu c++
+STDCC_dir := -L/usr/lib/
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY Move_o2
+Dbg: YYY Move_o2
+
+YYY:
+ $(CC) -v $(Compile_opts) $(O2_includes) o2.cpp -o $(Prg).o
+ $(CC) -v $(Compile_opts) $(O2_includes) common_externs.cpp -o common_externs.o
+ $(CC) -v $(Compile_opts) $(O2_includes) o2_externs.cpp -o o2_externs.o
+ $(CC) -v $(Compile_opts) $(O2_includes) o2_defs.cpp -o o2_defs.o
+ $(LD) $(LD_PARMS) -o $(Prg) $(STDCC_dir) $(O2_lib_directories) $(O2_req_libraries) -l$(CC_lib) -lpthread o2_externs.o o2_defs.o common_externs.o $(Prg).o
+
+Move_o2:
+ mv $(Prg) $(O2_bin)
+ rm *.o
+
+Genw:
+ cweave o2_types # struct definitions for o2
+ pdftex o2_types
+ mv o2_types.pdf $(O2_docs)
+ cweave o2
+ pdftex o2
+ mv o2.pdf $(O2_docs)
+ cweave $(O2_eternals)/common_externs
+ pdftex common_externs
+ mv common_externs.pdf $(O2_docs)
+ cweave o2externs
+ pdftex o2externs
+ mv o2externs.pdf $(O2_docs)
+ ctangle -l +e $(O2_eternals)/common_externs
+ ctangle -l +e o2externs
+ ctangle -l +e o2_defs
+ ctangle -l +e o2
+ ctangle -l +e o2_types
+ sh Makefile_Edit_cweb
+ rm *.idx
+ rm *.scn
+ rm *.toc
+ rm *.tex
+ rm *.log
+ rm *.c
diff --git a/web/yacco2/compiler/o2/makefile_GNU b/web/yacco2/compiler/o2/makefile_GNU
new file mode 100644
index 0000000000..50bf802b8b
--- /dev/null
+++ b/web/yacco2/compiler/o2/makefile_GNU
@@ -0,0 +1,89 @@
+# File: makefile_GNU
+# Why: Creates the o2 compiler /compiler using the GNU make program
+# Ks: Depending on your system, this utility might be called gmake or make
+#
+# O2 placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_dbg
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, or Genw
+# Rlse --- gen the optimizwd version of O2 with no debug support
+# Dbg --- gen the debug version of O2
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library using GNU make = gmake
+# cd /usr/local/yacco2/compiler/o2
+# make Rlse -f GNU_makefile
+#
+
+CC := g++
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+else
+O2_target_dir := Debug
+endif
+
+###
+# Set up directories
+###
+Base_yacco2 := $(O2)
+O2_bin := $(Base_yacco2)/bin
+O2_eternals := $(Base_yacco2)/externals
+O2_docs := $(Base_yacco2)/docs
+O2_lib := $(Base_yacco2)/library
+O2_lib_grms := $(Base_yacco2)/library/grammars
+O2_cc_grms := $(Base_yacco2)/compiler/grammars
+O2_cc := $(Base_yacco2)/compiler/o2
+O2_includes := -I'$(O2_cc)' -I'$(O2_cc_grms)' -I'$(O2_lib)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_lib)/lib/$(O2_target_dir)
+
+###
+# Set up c++ compiler and ld linker options
+###
+
+Rlse: Compile_opts := -c -O3 -pthread #-frepo -fno-implicit-templates -fno-rtti
+Dbg: Compile_opts := -c -g -pthread -arch x86_64
+Link_opts := -Wl,-z -Wl,muldefs -Wl,-Ur #$(O2_lib_directories)
+Multi_rd_libs := -static-libgcc -Wl,--start-group -lyacco2 -lo2grammars -Wl,--end-group -lpthread
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY Move_rlse_o2
+Dbg: YYY Move_dbg_o2
+YYY:
+ $(CC) -v $(Compile_opts) o2.cpp -o o2.o $(O2_includes)
+ $(CC) -v $(Compile_opts) common_externs.cpp -o common_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2_externs.cpp -o o2_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2_defs.cpp -o o2_defs.o $(O2_includes)
+ ld '-o' 'o2' '-shared-libgcc' '-mtune=generic'\
+ --eh-frame-hdr -m elf_i386 --hash-style=both -dynamic-linker\
+ /lib/ld-linux.so.2 -o o2 -z relro /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2 -L/usr/lib/gcc/i486-linux-gnu/4.3.2\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../..\
+ $(O2_lib_directories) o2_externs.o o2_defs.o common_externs.o o2.o\
+ --whole-archive -lyacco2 --no-whole-archive -start-group -lo2grammars --end-group -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc\
+ -lpthread /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o
+
+Move_rlse_o2:
+ mv o2 $(O2_bin)
+ rm *.o
+Move_dbg_o2:
+ mv o2 o2_dbg
+ mv o2_dbg $(O2_bin)
+ rm o2
+ rm *.o
+
diff --git a/web/yacco2/compiler/o2/makefile_SOLARIS b/web/yacco2/compiler/o2/makefile_SOLARIS
new file mode 100644
index 0000000000..f532a30739
--- /dev/null
+++ b/web/yacco2/compiler/o2/makefile_SOLARIS
@@ -0,0 +1,123 @@
+# File: makefile_SOLARIS
+# Why: Creates the o2 compiler /compiler
+# Library placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+# Notice: Some possible construction to be done
+# 1) Adjust base_dir variable if the ``yacco2'' package is moved elsewhere.
+# For example, if u installed the ``yacco2'' package in /opt/yacco2
+# Set the base_dir variable in this file to: base_dir = /opt/
+# The trailing / must be there or ugly things will happen.
+#
+# Example: gen the debug version of the library
+# cd /usr/local//yacco2/compiler/o2
+# make Dbg -f Solaris_makefile
+#
+Rlse: BASICOPTS := -fast -c -m64 -lpthread
+Rlse: Bld_BASICOPTS := -m64 -lpthread
+
+Dbg: BASICOPTS := -c -m64 -lpthread -xs -g
+Dbg: Bld_BASICOPTS := -m64 -lpthread -xs -g
+
+o2_lib := $(O2)/library/
+o2_stbl := $(O2)/compiler/stbl/
+o2_docs := $(O2)/docs/
+o2_lib_grms := $(O2)/library/grammars/
+o2_grms := $(O2)/compiler/grammars/
+o2 := $(O2)/compiler/o2/
+
+
+O2_includes := -I'$(o2)' -I'$(o2_grms)' -I'$(o2_lib)' -I'$(o2_lib_grms)'
+o2_req_libraries := -lyacco2 -lo2grammars
+Rlse: o2_lib_directories := -L $(o2_grms)lib/Release/ -L $(o2_lib)lib/Release/
+Dbg: o2_lib_directories := -L $(o2_grms)lib/Debug/ -L $(o2_lib)lib/Debug/
+files_to_cc := \
+o2_defs.cpp \
+common_externs.cpp \
+o2_externs.cpp \
+o2.cpp
+files_to_o := $(files_to_cc:.cpp=.o)
+
+Rlse: Compile Rlse_o2
+Rlse_o2:
+ mv o2prg $(base_dir)yacco2/bin/o2
+ rm -f *.o
+
+Dbg: $(files_to_o) Dbg_o2
+Dbg_o2:
+ mv o2prg $(base_dir)yacco2/bin/o2_debug
+ rm -f *.o
+
+Compile: $(files_to_o)
+common_externs.o: common_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) common_externs.cpp -o $@
+o2_externs.o: o2_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) o2_externs.cpp -o $@
+o2_defs.o: o2_defs.cpp
+ CC $(BASICOPTS) $(O2_includes) o2_defs.cpp -o $@
+o2.o: o2.cpp
+ CC $(Bld_BASICOPTS) $(O2_includes) o2.cpp -o o2prg \
+o2_defs.o common_externs.o o2_externs.o \
+$(o2_lib_directories) $(o2_req_libraries)
+Genw:
+ cweave types.w
+ ctangle -l +e types.w
+ pdftex types
+ pdftops types.pdf
+ mv types.pdf $(o2_docs)
+ mv types.ps $(o2_docs)
+ cweave common_externs.w
+ ctangle -l +e common_externs.w
+ pdftex common_externs
+ pdftops common_externs.pdf
+ mv common_externs.pdf $(o2_docs)
+ mv common_externs.ps $(o2_docs)
+ cweave o2externs.w
+ ctangle -l +e o2externs.w
+ pdftex o2externs
+ pdftops o2externs.pdf
+ mv o2externs.pdf $(o2_docs)
+ mv o2externs.ps $(o2_docs)
+ cweave o2.w
+ ctangle -l +e o2.w
+ sh Makefile_Edit_cweb
+ pdftex o2
+ pdftops o2.pdf
+ mv o2.pdf $(o2_docs)
+ mv o2.ps $(o2_docs)
+ rm types.idx
+ rm types.scn
+ rm types.toc
+ rm types.tex
+ rm types.log
+ rm types.c
+ rm common_externs.idx
+ rm common_externs.scn
+ rm common_externs.toc
+ rm common_externs.tex
+ rm common_externs.log
+ rm common_externs.c
+ rm o2externs.idx
+ rm o2externs.scn
+ rm o2externs.toc
+ rm o2externs.tex
+ rm o2externs.log
+ rm o2externs.c
+ rm o2.idx
+ rm o2.scn
+ rm o2.toc
+ rm o2.tex
+ rm o2.log
+ rm o2.c
diff --git a/web/yacco2/compiler/o2/o2.cpp b/web/yacco2/compiler/o2/o2.cpp
new file mode 100644
index 0000000000..8d093caeb9
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2.cpp
@@ -0,0 +1,849 @@
+/*164:*/
+//line 47 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#include "o2.h"
+/*14:*/
+//line 33 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+YACCO2_define_trace_variables();
+
+int RECURSION_INDEX__(0);
+yacco2::CHAR T_SW('n');
+yacco2::CHAR ERR_SW('n');
+yacco2::CHAR PRT_SW('n');
+
+yacco2::TOKEN_GAGGLE JUNK_tokens;
+yacco2::TOKEN_GAGGLE P3_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+char Big_buf[BIG_BUFFER_32K];
+T_sym_tbl_report_card report_card;
+std::string o2_file_to_compile;
+std::string o2_fq_fn_noext;
+STBL_T_ITEMS_type STBL_T_ITEMS;
+STATES_type LR1_STATES;
+LR1_STATES_type LR1_COMMON_STATES;
+bool LR1_HEALTH(LR1_COMPATIBLE);
+int NO_LR1_STATES(0);
+STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+
+
+int main(int argc,char*argv[])
+{
+cout<<yacco2::Lr1_VERSION<<std::endl;
+
+/*17:*/
+//line 98 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*18:*/
+//line 113 "/usr/local/yacco2/compiler/o2/prog.w"
+
+LOAD_YACCO2_KEYWORDS_INTO_STBL();
+
+/*:18*/
+//line 99 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+/*:17*/
+//line 62 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*19:*/
+//line 124 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*20:*/
+//line 135 "/usr/local/yacco2/compiler/o2/prog.w"
+
+GET_CMD_LINE(argc,argv,Yacco2_holding_file,Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 137 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+/*:20*/
+//line 125 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*22:*/
+//line 153 "/usr/local/yacco2/compiler/o2/prog.w"
+
+YACCO2_PARSE_CMD_LINE
+(T_SW,ERR_SW,PRT_SW,o2_file_to_compile,Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 156 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*25:*/
+//line 196 "/usr/local/yacco2/compiler/o2/prog.w"
+
+lrclog<<"Parse options selected:"<<std::endl;
+lrclog<<" Gen T: "<<T_SW;
+lrclog<<" Gen Err: "<<ERR_SW;
+lrclog<<" Gen RC: "<<PRT_SW;
+
+/*:25*/
+//line 157 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*23:*/
+//line 166 "/usr/local/yacco2/compiler/o2/prog.w"
+
+std::string::size_type pp= o2_file_to_compile.rfind('.');
+if(pp==std::string::npos){
+o2_fq_fn_noext+= o2_file_to_compile;
+}else{
+o2_fq_fn_noext+= o2_file_to_compile.substr(0,pp);
+}
+
+/*:23*/
+//line 158 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*24:*/
+//line 184 "/usr/local/yacco2/compiler/o2/prog.w"
+
+std::string normal_tracing(o2_fq_fn_noext.c_str());
+normal_tracing+= "_tracings.log";
+std::string error_logging(o2_fq_fn_noext.c_str());
+error_logging+= "_errors.log";
+yacco2::lrclog.close();
+yacco2::lrerrors.close();
+yacco2::lrclog.open(normal_tracing.c_str());
+yacco2::lrerrors.open(error_logging.c_str());
+
+
+/*:24*/
+//line 159 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+/*:22*/
+//line 126 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*26:*/
+//line 227 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+using namespace NS_pass3;
+tok_can<std::ifstream> cmd_line(o2_file_to_compile.c_str());
+Cpass3 p3_fsm;
+Parser pass3(p3_fsm,&cmd_line,&P3_tokens,0,&Error_queue,&JUNK_tokens,0);
+pass3.parse();
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 235 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*27:*/
+//line 240 "/usr/local/yacco2/compiler/o2/prog.w"
+
+yacco2::TOKEN_GAGGLE_ITER i= P3_tokens.begin();
+yacco2::TOKEN_GAGGLE_ITER ie= P3_tokens.end();
+lrclog<<"Dump of P3 tokons"<<endl;
+for(int yyy= 1;i!=ie;++i){
+CAbs_lr1_sym*sym= *i;
+if(sym==yacco2::PTR_LR1_eog__)continue;
+lrclog<<yyy<<":: "<<sym->id__
+<<" file no: "<<sym->tok_co_ords__.external_file_id__
+<<" line no: "<<sym->tok_co_ords__.line_no__
+<<" pos: "<<sym->tok_co_ords__.pos_in_line__
+<<endl;
+++yyy;
+}
+
+/*:27*/
+//line 236 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+/*:26*/
+//line 127 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+/*:19*/
+//line 63 "/usr/local/yacco2/compiler/o2/prog.w"
+
+lrclog<<yacco2::Lr1_VERSION<<std::endl;
+
+/*34:*/
+//line 433 "/usr/local/yacco2/compiler/o2/prog.w"
+
+set<int> phase_order_filter;
+phase_order_filter.insert(T_Enum::T_T_fsm_phrase_);
+phase_order_filter.insert(T_Enum::T_T_enum_phrase_);
+phase_order_filter.insert(T_Enum::T_T_lr1_k_phrase_);
+phase_order_filter.insert(T_Enum::T_T_rc_phrase_);
+phase_order_filter.insert(T_Enum::T_T_error_symbols_phrase_);
+phase_order_filter.insert(T_Enum::T_T_terminals_phrase_);
+phase_order_filter.insert(T_Enum::T_T_rules_phrase_);
+
+tok_can_ast_functor orderly_walk;
+ast_prefix_wbreadth_only
+evaluate_phase_order(*GRAMMAR_TREE,&orderly_walk,&phase_order_filter,ACCEPT_FILTER);
+tok_can<AST*> phrases_can(evaluate_phase_order);
+
+using namespace NS_eval_phrases;
+Ceval_phrases eval_fsm;
+Parser eval_phrases(eval_fsm,&phrases_can,0,0,&Error_queue,0,0);
+eval_phrases.parse();
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 452 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+/*:34*/
+//line 66 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*29:*/
+//line 307 "/usr/local/yacco2/compiler/o2/prog.w"
+
+using namespace NS_epsilon_rules;
+set<AST*> yes_pile;
+set<AST*> no_pile;
+list< pair<AST*,AST*> > maybe_list;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+AST*rules_tree= rules_ph->phrase_tree();
+
+set<int> filter;
+filter.insert(T_Enum::T_T_subrule_def_);
+filter.insert(T_Enum::T_rule_def_);
+
+tok_can_ast_functor just_walk_functr;
+ast_prefix rule_walk(*rules_tree,&just_walk_functr,&filter,ACCEPT_FILTER);
+tok_can<AST*> rules_can(rule_walk);
+Cepsilon_rules epsilon_fsm;
+Parser epsilon_rules(epsilon_fsm,&rules_can,0,0,&Error_queue);
+epsilon_rules.parse();
+/*30:*/
+//line 329 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+Error_queue.clear();
+return 1;
+}
+
+/*:30*/
+//line 325 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+/*:29*/
+//line 67 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*28:*/
+//line 267 "/usr/local/yacco2/compiler/o2/prog.w"
+
+set<int> enumerate_filter;
+enumerate_filter.insert(T_Enum::T_rule_def_);
+enumerate_filter.insert(T_Enum::T_T_subrule_def_);
+enumerate_filter.insert(T_Enum::T_refered_T_);
+enumerate_filter.insert(T_Enum::T_T_eosubrule_);
+enumerate_filter.insert(T_Enum::T_refered_rule_);
+enumerate_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+enumerate_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+using namespace NS_enumerate_grammar;
+
+tok_can_ast_functor walk_the_plank_mate;
+ast_prefix enumerate_grammar_walk
+(*rules_tree,&walk_the_plank_mate,&enumerate_filter,ACCEPT_FILTER);
+tok_can<AST*> enumerate_grammar_can(enumerate_grammar_walk);
+Cenumerate_grammar enumerate_grammar_fsm;
+Parser enumerate_grammar(enumerate_grammar_fsm,&enumerate_grammar_can,0,0,&Error_queue);
+enumerate_grammar.parse();
+
+/*:28*/
+//line 68 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*35:*/
+//line 497 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(O2_PP_PHASE!=0){
+/*36:*/
+//line 503 "/usr/local/yacco2/compiler/o2/prog.w"
+
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+
+if(pp_ph->la_bndry()==0){
+CAbs_lr1_sym*sym= new Err_pp_la_boundary_attribute_not_fnd;
+sym->set_rc(*pp_ph);
+Error_queue.push_back(*sym);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 510 "/usr/local/yacco2/compiler/o2/prog.w"
+
+}
+T_parallel_la_boundary*la_bndry= pp_ph->la_bndry();
+yacco2::TOKEN_GAGGLE*la_srce_tok_can= la_bndry->la_supplier();
+yacco2::TOKEN_GAGGLE la_tok_can_lex;
+yacco2::TOKEN_GAGGLE la_expr_tok_can;
+using namespace NS_la_expr_lexical;
+Cla_expr_lexical la_expr_lex_fsm;
+Parser la_expr_lex_parse(la_expr_lex_fsm,la_srce_tok_can
+,&la_tok_can_lex,0,&Error_queue,&JUNK_tokens,0);
+la_expr_lex_parse.parse();
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 521 "/usr/local/yacco2/compiler/o2/prog.w"
+
+using namespace NS_la_expr;
+Cla_expr la_expr_fsm;
+Parser la_expr_parse(la_expr_fsm,&la_tok_can_lex,&la_expr_tok_can
+,0,&Error_queue,&JUNK_tokens,0);
+la_expr_parse.parse();
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 527 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+/*:36*/
+//line 499 "/usr/local/yacco2/compiler/o2/prog.w"
+
+}
+
+/*:35*/
+//line 69 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*31:*/
+//line 348 "/usr/local/yacco2/compiler/o2/prog.w"
+
+set<int> sr_filter;
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+ast_prefix sr_walk(*rules_tree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> sr_can(sr_walk);
+for(int xx(0);sr_can[xx]!=yacco2::PTR_LR1_eog__;++xx);
+O2_T_ENUM_PHASE->total_no_subrules(sr_can.size());
+if(O2_T_ENUM_PHASE->total_no_subrules()> Max_no_subrules){
+lrclog<<"Grammar's number of subrules: "
+<<O2_T_ENUM_PHASE->total_no_subrules()
+<<" exceeds the allocated space for table elem_space: "
+<<Max_no_subrules<<endl;
+lrclog<<"This is a big grammar so please correct the grammar."<<std::endl;
+clog<<"Grammar's number of subrules: "
+<<O2_T_ENUM_PHASE->total_no_subrules()
+<<" exceeds the allocated space for table elem_space: "
+<<Max_no_subrules<<endl;
+clog<<"This is a big grammar so please correct the grammar."<<std::endl;
+return 1;
+}
+
+/*:31*/
+//line 70 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*32:*/
+//line 376 "/usr/local/yacco2/compiler/o2/prog.w"
+
+set<int> fs_filter;
+fs_filter.insert(T_Enum::T_rule_def_);
+ast_prefix fs_rule_walk(*rules_tree,&just_walk_functr,&fs_filter,ACCEPT_FILTER);
+tok_can<AST*> fs_rules_can(fs_rule_walk);
+for(int xx(0);fs_rules_can[xx]!=yacco2::PTR_LR1_eog__;++xx){
+rule_def* rd = (rule_def*)fs_rules_can[xx];
+GEN_FS_OF_RULE(rd);
+}
+
+/*:32*/
+//line 71 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*33:*/
+//line 399 "/usr/local/yacco2/compiler/o2/prog.w"
+
+rule_def*start_rule_def= (rule_def*)fs_rules_can.operator[](0);
+GEN_CALLED_THREADS_FS_OF_RULE(start_rule_def);
+
+/*:33*/
+//line 72 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*39:*/
+//line 582 "/usr/local/yacco2/compiler/o2/prog.w"
+
+AST*start_rule_def_t= AST::get_1st_son(*rules_tree);
+state*gening_state= new state(start_rule_def_t);
+gen_context gening_context(0,-1);
+STATES_ITER_type si= LR1_STATES.begin();
+STATES_ITER_type sie= LR1_STATES.end();
+
+
+for(;si!=sie;++si){
+gening_state= *si;
+gening_context.for_closure_state_= gening_state;
+gening_context.gen_vector_= -1;
+lrclog<<"lr state driver considered state: "
+<<gening_context.for_closure_state_->state_no_
+<<" for vector: "
+<<gening_context.gen_vector_
+<<endl;
+
+LR1_HEALTH= gening_state->gen_transitive_states_for_closure_context(gening_context,*gening_state,*gening_state);
+if(LR1_HEALTH==NOT_LR1_COMPATIBLE){
+/*40:*/
+//line 611 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(LR1_HEALTH==NOT_LR1_COMPATIBLE){
+yacco2::lrclog<<"===>Please check Grammar dump file: "
+<<normal_tracing.c_str()<<" for Not LR1 details"<<endl;
+std::cout<<"===>Please check Grammar dump file: "
+<<normal_tracing.c_str()<<" for Not LR1 details"<<endl;
+yacco2::lrclog<<"Not LR1 --- check state conflict list of state: "
+<<gening_state->state_no_<<" for details"<<endl;
+/*135:*/
+//line 2187 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+const char*literal_name;
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<"State dump"<<std::endl;
+si= LR1_STATES.begin();
+sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+Print_dump_state(cur_state);
+}
+
+/*:135*/
+//line 619 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*134:*/
+//line 2159 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+LR1_STATES_ITER_type ci= LR1_COMMON_STATES.begin();
+LR1_STATES_ITER_type cie= LR1_COMMON_STATES.end();
+yacco2::lrclog<<"Common States dump"<<std::endl;
+int cstate_no(0);
+for(;ci!=cie;++ci){
+++cstate_no;
+STATES_ITER_type si= ci->second.begin();
+STATES_ITER_type sie= ci->second.end();
+bool pre= false;
+for(;si!=sie;++si){
+state*cstate= *si;
+if(pre==false){
+pre= true;
+yacco2::lrclog<<cstate_no<<"::Common State: "<<cstate->vectored_into_by_elem_;
+if(cstate->vectored_into_by_elem_sym_==0){
+yacco2::lrclog<<" Entry Symbol: No symbol"<<std::endl;
+}else{
+yacco2::lrclog<<" Entry Symbol: "<<cstate->entry_symbol_literal()<<std::endl;
+}
+}
+yacco2::lrclog<<"\tstate no: "<<cstate->state_no_<<std::endl;
+}
+yacco2::lrclog<<std::endl;
+}
+
+
+/*:134*/
+//line 620 "/usr/local/yacco2/compiler/o2/prog.w"
+
+return 1;
+}
+
+/*:40*/
+//line 602 "/usr/local/yacco2/compiler/o2/prog.w"
+
+}
+}
+
+/*41:*/
+//line 634 "/usr/local/yacco2/compiler/o2/prog.w"
+
+COMMONIZE_LA_SETS();
+
+
+/*:41*/
+//line 606 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+
+/*:39*/
+//line 73 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*40:*/
+//line 611 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(LR1_HEALTH==NOT_LR1_COMPATIBLE){
+yacco2::lrclog<<"===>Please check Grammar dump file: "
+<<normal_tracing.c_str()<<" for Not LR1 details"<<endl;
+std::cout<<"===>Please check Grammar dump file: "
+<<normal_tracing.c_str()<<" for Not LR1 details"<<endl;
+yacco2::lrclog<<"Not LR1 --- check state conflict list of state: "
+<<gening_state->state_no_<<" for details"<<endl;
+/*135:*/
+//line 2187 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+const char*literal_name;
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<"State dump"<<std::endl;
+si= LR1_STATES.begin();
+sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+Print_dump_state(cur_state);
+}
+
+/*:135*/
+//line 619 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*134:*/
+//line 2159 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+LR1_STATES_ITER_type ci= LR1_COMMON_STATES.begin();
+LR1_STATES_ITER_type cie= LR1_COMMON_STATES.end();
+yacco2::lrclog<<"Common States dump"<<std::endl;
+int cstate_no(0);
+for(;ci!=cie;++ci){
+++cstate_no;
+STATES_ITER_type si= ci->second.begin();
+STATES_ITER_type sie= ci->second.end();
+bool pre= false;
+for(;si!=sie;++si){
+state*cstate= *si;
+if(pre==false){
+pre= true;
+yacco2::lrclog<<cstate_no<<"::Common State: "<<cstate->vectored_into_by_elem_;
+if(cstate->vectored_into_by_elem_sym_==0){
+yacco2::lrclog<<" Entry Symbol: No symbol"<<std::endl;
+}else{
+yacco2::lrclog<<" Entry Symbol: "<<cstate->entry_symbol_literal()<<std::endl;
+}
+}
+yacco2::lrclog<<"\tstate no: "<<cstate->state_no_<<std::endl;
+}
+yacco2::lrclog<<std::endl;
+}
+
+
+/*:134*/
+//line 620 "/usr/local/yacco2/compiler/o2/prog.w"
+
+return 1;
+}
+
+/*:40*/
+//line 74 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*37:*/
+//line 537 "/usr/local/yacco2/compiler/o2/prog.w"
+
+lrclog<<"Evaluate rules count"<<endl;
+using namespace NS_rules_use_cnt;
+
+set<int> rules_use_cnt_filter;
+rules_use_cnt_filter.insert(T_Enum::T_T_subrule_def_);
+rules_use_cnt_filter.insert(T_Enum::T_rule_def_);
+rules_use_cnt_filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor rules_use_walk_functr;
+ast_prefix rules_use_walk(*GRAMMAR_TREE,&rules_use_walk_functr
+,&rules_use_cnt_filter,ACCEPT_FILTER);
+tok_can<AST*> rules_use_can(rules_use_walk);
+Crules_use_cnt rules_use_cnt_fsm;
+Parser rules_use_cnt(rules_use_cnt_fsm,&rules_use_can,0,0,&Error_queue);
+rules_use_cnt.parse();
+
+
+/*:37*/
+//line 75 "/usr/local/yacco2/compiler/o2/prog.w"
+
+/*130:*/
+//line 2126 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*118:*/
+//line 1990 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"Output enumeration header file "<<endl;
+OP_ENUMERATION_HEADER(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 1993 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:118*/
+//line 2128 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*119:*/
+//line 1996 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(ERR_SW=='y'){
+lrclog<<"Output Errors vocabulary files "<<endl;
+OP_ERRORS_HEADER(Error_queue);
+OP_ERRORS_CPP(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2001 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+
+/*:119*/
+//line 2129 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*120:*/
+//line 2005 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(T_SW=='y'){
+lrclog<<"Output User Terminal vocabulary files "<<endl;
+OP_USER_T_HEADER(Error_queue);
+OP_USER_T_CPP(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2010 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+
+/*:120*/
+//line 2130 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*125:*/
+//line 2036 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(T_SW=='y'||ERR_SW=='y'){
+lrclog<<"Output User Terminal vocabulary files "<<endl;
+OP_T_Alphabet(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2040 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+
+/*:125*/
+//line 2131 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*121:*/
+//line 2014 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"Output grammar header file "<<endl;
+OP_GRAMMAR_HEADER(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2017 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:121*/
+//line 2132 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*122:*/
+//line 2020 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"Output grammar cpp file "<<endl;
+OP_GRAMMAR_CPP(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2023 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*:122*/
+//line 2133 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*123:*/
+//line 2025 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"Output grammar sym file "<<endl;
+OP_GRAMMAR_SYM(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2028 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*:123*/
+//line 2134 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*124:*/
+//line 2030 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"Output grammar tbl file "<<endl;
+OP_GRAMMAR_TBL(Error_queue);
+/*21:*/
+//line 146 "/usr/local/yacco2/compiler/o2/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:21*/
+//line 2033 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:124*/
+//line 2135 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*129:*/
+//line 2122 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+OP_FSC_FILE(Error_queue);
+
+/*:129*/
+//line 2136 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*126:*/
+//line 2044 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(PRT_SW=='y'){
+/*127:*/
+//line 2076 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+using namespace yacco2;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_mpost_output;
+lrclog<<"Emit grammar's railroad diagrams for Mpost"<<endl;
+set<int> cweb_k_filter;
+cweb_k_filter.insert(T_Enum::T_T_cweb_comment_);
+tok_can_ast_functor mpost_just_walk_functr;
+ast_prefix mpost_rule_walk(*GRAMMAR_TREE,&mpost_just_walk_functr,&cweb_k_filter,BYPASS_FILTER);
+tok_can<AST*> mpost_rules_can(mpost_rule_walk);
+Cmpost_output mpost_fsm;
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+mpost_fsm.grammar_filename_prefix_+= fsm_ph->filename_id()->identifier()->c_str();
+mpost_fsm.fq_filename_noext_+= o2_fq_fn_noext.c_str();
+
+Parser mpost_rules(mpost_fsm,&mpost_rules_can,0,0,&Error_queue);
+mpost_rules.parse();
+
+/*:127*/
+//line 2046 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*128:*/
+//line 2097 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+using namespace NS_prt_xrefs_docs;
+yacco2::lrclog<<"----- Print xref docs -----"<<std::endl;
+set<int> prt_xrefs_docs_filter;
+prt_xrefs_docs_filter.insert(T_Enum::T_rule_def_);
+prt_xrefs_docs_filter.insert(T_Enum::T_T_subrule_def_);
+prt_xrefs_docs_filter.insert(T_Enum::T_refered_T_);
+prt_xrefs_docs_filter.insert(T_Enum::T_refered_rule_);
+prt_xrefs_docs_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+prt_xrefs_docs_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+prt_xrefs_docs_filter.insert(T_Enum::T_T_eosubrule_);
+
+tok_can_ast_functor xrefs_docs_walk_functr;
+ast_prefix prt_xrefs_docs_walk(*rules_tree
+,&xrefs_docs_walk_functr,&prt_xrefs_docs_filter,ACCEPT_FILTER);
+tok_can<AST*> prt_xrefs_docs_can(prt_xrefs_docs_walk);
+Cprt_xrefs_docs prt_xrefs_docs_fsm;
+prt_xrefs_docs_fsm.grammar_filename_prefix_+= mpost_fsm.grammar_filename_prefix_;
+prt_xrefs_docs_fsm.fq_filename_noext_+= o2_fq_fn_noext.c_str();
+Parser prt_xrefs_docs(prt_xrefs_docs_fsm,&prt_xrefs_docs_can,0,0,&Error_queue);
+prt_xrefs_docs.parse();
+
+/*:128*/
+//line 2047 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+/*:126*/
+//line 2137 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:130*/
+//line 76 "/usr/local/yacco2/compiler/o2/prog.w"
+
+
+
+exit:
+lrclog<<"Exiting O2"<<std::endl;
+return 0;
+}
+/*:14*//*162:*/
+//line 31 "/usr/local/yacco2/compiler/o2/includes.w"
+
+
+/*:162*/
+//line 49 "/usr/local/yacco2/compiler/o2/includes.w"
+
+
+//line 17 "./o2.w"
+/*:164*/
diff --git a/web/yacco2/compiler/o2/o2.h b/web/yacco2/compiler/o2/o2.h
new file mode 100644
index 0000000000..713155db96
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2.h
@@ -0,0 +1,46 @@
+/*163:*/
+//line 36 "/usr/local/yacco2/compiler/o2/includes.w"
+
+
+//line 37 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#ifndef o2__
+#define o2__ 1
+/*161:*/
+//line 13 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_types.h"
+#include "la_expr_lexical.h"
+#include "la_expr.h"
+#include "enumerate_T_alphabet.h"
+#include "epsilon_rules.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "eval_phrases.h"
+#include "enumerate_grammar.h"
+#include "rules_use_cnt.h"
+/*:161*/
+//line 40 "/usr/local/yacco2/compiler/o2/includes.w"
+
+/*13:*/
+//line 24 "/usr/local/yacco2/compiler/o2/prog.w"
+
+extern int RECURSION_INDEX__;
+extern void COMMONIZE_LA_SETS();
+extern int NO_LR1_STATES;
+extern STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+extern LR1_STATES_type LR1_COMMON_STATES;
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern void Print_dump_state(state*State);
+/*:13*/
+//line 41 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#endif
+
+/*:163*/
diff --git a/web/yacco2/compiler/o2/o2.w b/web/yacco2/compiler/o2/o2.w
new file mode 100644
index 0000000000..90d4891b73
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2.w
@@ -0,0 +1,17 @@
+@q file: o2.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "eplain"
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@i "/usr/local/yacco2/license.w"
+@i "/usr/local/yacco2/compiler/o2/intro.w"
+@i "/usr/local/yacco2/compiler/o2/prog.w"
+@i "/usr/local/yacco2/compiler/o2/o2_defs.w"
+@i "/usr/local/yacco2/compiler/o2/bugs.w"
+@i "/usr/local/yacco2/compiler/o2/includes.w"
+@** Index. \ No newline at end of file
diff --git a/web/yacco2/compiler/o2/o2_defs.cpp b/web/yacco2/compiler/o2/o2_defs.cpp
new file mode 100644
index 0000000000..6dded9d49d
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_defs.cpp
@@ -0,0 +1,1671 @@
+/*141:*/
+//line 2215 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+#include "o2.h"
+/*44:*/
+//line 242 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+gen_context::gen_context(state*S,Voc_ENO Ve):for_closure_state_(S),gen_vector_(Ve){}
+
+/*:44*//*46:*/
+//line 259 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state_element::state_element(AST*Elem)
+:cs_vector_combo_gening_it_(0,-1)
+,sr_element_(Elem)
+,sr_def_element_(0)
+,its_enum_id_(-1)
+,subrule_def_(0)
+,closure_state_(0)
+,goto_state_(0)
+,previous_state_(0)
+,reduced_state_(0)
+,self_state_(0)
+,previous_state_element_(0)
+,next_state_element_(0)
+,la_set_(0)
+,common_la_set_idx_(-1)
+{
+/*47:*/
+//line 280 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+CAbs_lr1_sym*sym= AST::content(*Elem);
+Voc_ENO id= sym->enumerated_id__;
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 285 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+sr_def_element_= rd;
+its_enum_id_= rd->enum_id();
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1893 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 292 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+la_set_= new LA_SET_type();
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+/*111:*/
+//line 1896 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;
+/*:111*/
+//line 299 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+/*112:*/
+//line 1899 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;
+
+/*:112*/
+//line 305 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+break;
+}
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1889 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 311 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_terminal_def*td= rt->its_t_def();
+sr_def_element_= td;
+its_enum_id_= td->enum_id();
+break;
+}
+}
+
+/*:47*/
+//line 276 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+/*:46*//*48:*/
+//line 320 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state_element::~state_element(){
+if(la_set_!=0)delete la_set_;
+}
+
+/*:48*//*50:*/
+//line 334 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state_element::add_fs_setA_to_LA(follow_element&Fe,LA_SET_type&La_to_fill_in){
+FOLLOW_SETS_ITER_type i= Fe.follow_set_.begin();
+FOLLOW_SETS_ITER_type ie= Fe.follow_set_.end();
+for(;i!=ie;++i){
+LA_SET_ITER_type j= La_to_fill_in.find(*i);
+if(j==La_to_fill_in.end()){
+T_in_stbl*t_sym= *i;
+/*51:*/
+//line 351 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(t_sym->t_def()->enum_id()!=LR1_PARALLEL_OPERATOR){
+La_to_fill_in.insert(t_sym);
+}else{
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_REDUCE_OPERATOR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+La_to_fill_in.insert(td);
+}
+
+/*:51*/
+//line 342 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+}
+}
+/*:50*//*52:*/
+//line 368 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state_element::calc_la(state_element&La_to_fill_in){
+if(La_to_fill_in.la_set_==NULL){
+return false;
+}
+if(La_to_fill_in.reduced_state_!=La_to_fill_in.self_state_)return true;
+VISITED_MERGE_STATES_IN_LA_CALC.clear();
+La_to_fill_in.la_set_->clear();
+state*cs= La_to_fill_in.closure_state_;
+CAbs_lr1_sym*sym= AST::content(*La_to_fill_in.sr_element_);
+T_ENO id= sym->enumerated_id__;
+switch(id){
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1893 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 381 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= eos->its_rule_def();
+RULE_ENO r_id= rd->enum_id();
+S_FOLLOW_SETS_ITER_type i= cs->state_s_follow_set_map_.find(r_id);
+follow_element*fe= i->second;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,r_id);
+}
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+break;
+}
+}
+if(La_to_fill_in.la_set_->empty()==true){
+return false;
+}else{
+return true;
+}
+}
+
+/*:52*//*53:*/
+//line 410 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state_element::
+fill_la_from_merge(state_element&La_to_fill_in,MERGES_type&Merge,RULE_ENO Rule_no){
+MERGES_ITER_type i= Merge.begin();
+MERGES_ITER_type ie= Merge.end();
+for(;i!=ie;++i){
+state*cs= *i;
+STATES_SET_ITER_type ii= VISITED_MERGE_STATES_IN_LA_CALC.find(cs);
+if(ii!=VISITED_MERGE_STATES_IN_LA_CALC.end())return;
+VISITED_MERGE_STATES_IN_LA_CALC.insert(cs);
+S_FOLLOW_SETS_ITER_type i= cs->state_s_follow_set_map_.find(Rule_no);
+follow_element*fe= i->second;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+}
+}
+}
+
+/*:53*//*54:*/
+//line 434 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state_element::
+fill_la_from_transition(state_element&La_to_fill_in,TRANSITIONS_type&Transition){
+TRANSITIONS_ITER_type i= Transition.begin();
+TRANSITIONS_ITER_type ie= Transition.end();
+for(;i!=ie;++i){
+follow_element*fe= *i;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+}
+}
+}
+
+/*:54*//*55:*/
+//line 454 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_ENO state_element::find_state_element_s_rule_no(){
+return subrule_def_->its_rule_def()->enum_id();
+}
+
+/*:55*//*57:*/
+//line 472 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+AST*follow_element::rule_def_t(){return rule_def_t_;}
+state*follow_element::its_state(){return its_state_;}
+follow_element::follow_element(state*State)
+:rule_no_(-1)
+,rule_def_t_(0)
+,its_state_(State)
+{}
+follow_element::follow_element(RULE_ENO Rule_no,state_element&State_elem,AST&Rule_def_t)
+:rule_no_(Rule_no)
+,rule_def_t_(&Rule_def_t)
+,its_state_(State_elem.closure_state_)
+{}
+
+void follow_element::add_follow_set_contributor(AST*SR_element){
+sr_elements_.push_back(SR_element);
+}
+/*:57*//*58:*/
+//line 495 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_follow_set_transition(state_element&State_elem,T_eosubrule&Eos){
+rule_def*rd= Eos.its_rule_def();
+RULE_ENO eno= rd->enum_id();
+
+S_FOLLOW_SETS_ITER_type fsi=
+State_elem.closure_state_->state_s_follow_set_map_.find(eno);
+if(fsi==State_elem.closure_state_->state_s_follow_set_map_.end()){
+return;
+}
+follow_element*fe= fsi->second;
+/*59:*/
+//line 513 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if((rule_no_==eno)
+&&
+(its_state_->state_no_==State_elem.closure_state_->state_no_))
+return;
+
+/*:59*/
+//line 506 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+transitions_.push_back(fe);
+}
+
+/*:58*//*60:*/
+//line 521 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_T_to_follow_set(AST*Refered_T){
+/*61:*/
+//line 527 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* t = (refered_T*)AST::content(*Refered_T);
+
+/*:61*/
+//line 523 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+follow_set_.insert(t->t_in_stbl());
+}
+/*:60*//*62:*/
+//line 531 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::remove_merge_closure_info(){
+merges_.pop_front();
+}
+
+/*:62*//*63:*/
+//line 539 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_merge_closure_info(state&To_merge_closure_state){
+state*tm= &To_merge_closure_state;
+MERGES_ITER_type i= merges_.begin();
+MERGES_ITER_type ie= merges_.end();
+for(;i!=ie;++i){
+state*s= *i;
+if(s==tm)return;
+}
+merges_.push_front(&To_merge_closure_state);
+}
+
+/*:63*//*66:*/
+//line 640 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+
+/*:66*//*67:*/
+//line 644 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state(AST*Start_rule_t)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{
+create_start_state(*Start_rule_t);
+add_state_to_gbl_lr1_state_tbls(this);
+}
+
+/*:67*//*68:*/
+//line 659 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state()
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{}
+
+/*:68*//*69:*/
+//line 671 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state(Voc_ENO Eno,CAbs_lr1_sym*Entry_sym)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(Eno)
+,vectored_into_by_elem_sym_(Entry_sym)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{}
+
+/*:69*//*70:*/
+//line 686 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::closure_only_derives(AST*Rule_tree){
+gen_context gening_context(0,-1);
+add_rule_s_subrules_to_state(*Rule_tree,gening_context,*this);
+add_closure_rules_subrules_to_state(gening_context,*this);
+}
+
+
+/*:70*//*72:*/
+//line 708 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_element_to_state_vector
+(Voc_ENO Elem_id,state_element&Elem){
+S_VECTORS_ITER_type i= state_s_vector_.find(Elem_id);
+if(i==state_s_vector_.end()){
+state_s_vector_[Elem_id]= S_VECTOR_ELEMS_type();
+i= state_s_vector_.find(Elem_id);
+}
+S_VECTOR_ELEMS_type&el= i->second;
+if(el.empty()==true){
+el.push_back(&Elem);
+return;
+}
+S_VECTOR_ELEMS_ITER_type j= el.begin();
+S_VECTOR_ELEMS_ITER_type je= el.end();
+for(;j!=je;++j){
+state_element*se= *j;
+if(Elem.sr_element_<se->sr_element_){
+el.insert(j,&Elem);
+return;
+}
+}
+el.push_back(&Elem);
+}
+
+/*:72*//*73:*/
+//line 739 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_closure_rules_subrules_to_state(gen_context&Possible_gen_context,state&Closure_state){
+CLOSURE_RULES_type processed_rules_set;
+loop_until_empty:;
+if(closure_rule_list_.empty()==true)return;
+CLOSURE_RULES_ITER_type i= closure_rule_list_.begin();
+if(processed_rules_set.find(*i)!=processed_rules_set.end()){
+closure_rule_list_.erase(*i);
+goto loop_until_empty;
+}
+processed_rules_set.insert(*i);
+rule_def*rd= (*i)->r_def();
+AST*t= rd->rule_s_tree();
+add_rule_s_subrules_to_state(*t,Possible_gen_context,Closure_state);
+goto loop_until_empty;
+}
+
+/*:73*//*74:*/
+//line 757 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_rule_to_closure_list(rule_in_stbl*Rule_in_stbl){
+CLOSURE_RULES_ITER_type i= closure_rule_list_.find(Rule_in_stbl);
+if(i==closure_rule_list_.end()){
+closure_rule_list_.insert(Rule_in_stbl);
+derives_closure_rule_list_.insert(Rule_in_stbl);
+rule_def*rd= Rule_in_stbl->r_def();
+if(rd->closure_rules_making_up_first_set()->empty()==true)return;
+CLOSURE_RULES_type*cr= rd->closure_rules_making_up_first_set();
+CLOSURE_RULES_ITER_type j= cr->begin();
+CLOSURE_RULES_ITER_type je= cr->end();
+for(;j!=je;++j){
+rule_in_stbl*ris= *j;
+i= closure_rule_list_.find(ris);
+if(i==closure_rule_list_.end()){
+derives_closure_rule_list_.insert(ris);
+closure_rule_list_.insert(ris);
+}
+}
+}
+}
+/*:74*//*75:*/
+//line 785 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state::
+add_rule_s_subrules_to_state(AST&Start_Rule_def_t,gen_context&Possible_gen_context,state&Closure_state_associate_with){
+AST*subrules_t= AST::get_1st_son(Start_Rule_def_t);
+AST*first_element_t(0);
+CAbs_lr1_sym*first_element(0);
+Voc_ENO id(START_STATE_ENUMERATE);
+Voc_ENO cs_id(START_STATE_ENUMERATE);
+for(;subrules_t!=0;subrules_t= AST::brother(*subrules_t)){
+T_subrule_def* srd = (T_subrule_def*)AST::content(*subrules_t);
+first_element_t= AST::get_1st_son(*subrules_t);
+first_element= AST::content(*first_element_t);
+state_element*se= new state_element(first_element_t);
+se->subrule_def_= srd;
+se->self_state_= this;
+se->closure_state_= this;
+se->closured_state_gening_it_= &Closure_state_associate_with;
+id= first_element->enumerated_id__;
+switch(id){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)first_element;
+rule_def*rd= rr->its_rule_def();
+rule_in_stbl*ris= rr->Rule_in_stbl();
+RULE_ENO r_id= rd->enum_id();
+cs_id= r_id;
+se->cs_vector_combo_gening_it_.gen_vector_= r_id;
+add_element_to_state_vector(r_id,*se);
+add_rule_to_follow_list(r_id);
+add_rule_to_closure_list(ris);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_null_call_thread_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_called_thread_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)first_element;
+T_terminal_def*td= rt->its_t_def();
+T_ENO t_id= td->enum_id();
+cs_id= t_id;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(t_id,*se);
+break;
+}
+}
+if(Possible_gen_context.gen_vector_!=-1){
+se->cs_vector_combo_gening_it_= Possible_gen_context;
+}else{
+se->cs_vector_combo_gening_it_.for_closure_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= cs_id;
+}
+
+}
+}
+
+/*:75*//*76:*/
+//line 877 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::crt_core_items_of_state
+(S_VECTOR_ELEMS_ITER_type&Iter_begin
+,S_VECTOR_ELEMS_ITER_type&Iter_end
+,gen_context&Gening_context){
+bool rt_bnded(false);
+AST*to_element_t(0);
+CAbs_lr1_sym*to_element(0);
+Voc_ENO id(START_STATE_ENUMERATE);
+for(;Iter_begin!=Iter_end;++Iter_begin){
+state_element*from_se= *Iter_begin;
+to_element_t= AST::brother(*from_se->sr_element_);
+bool se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+switch(to_element->enumerated_id__){
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+to_element_t= AST::brother(*to_element_t);
+se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+to_element_t= AST::brother(*to_element_t);
+se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+break;
+}
+}
+state_element*se= new state_element(to_element_t);
+se->subrule_def_= from_se->subrule_def_;
+se->self_state_= this;
+se->closure_state_= from_se->closure_state_;
+se->closured_state_gening_it_= Gening_context.for_closure_state_;
+
+se->cs_vector_combo_gening_it_= Gening_context;
+
+if(se_rt_bnded_condition==true){
+if(from_se->closured_state_gening_it_!=Gening_context.for_closure_state_){
+
+se->cs_vector_combo_gening_it_= from_se->cs_vector_combo_gening_it_;
+se->closured_state_gening_it_= from_se->closured_state_gening_it_;
+}else{
+se->cs_vector_combo_gening_it_= Gening_context;
+se->closured_state_gening_it_= Gening_context.for_closure_state_;
+}
+}
+from_se->goto_state_= se->self_state_;
+se->previous_state_= from_se->self_state_;
+
+from_se->next_state_element_= se;
+se->previous_state_element_= from_se;
+id= to_element->enumerated_id__;
+/*77:*/
+//line 938 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)to_element;
+rule_def*rd= rr->its_rule_def();
+rule_in_stbl*ris= rr->Rule_in_stbl();
+RULE_ENO r_id= rd->enum_id();
+add_element_to_state_vector(r_id,*se);
+add_rule_to_follow_list(r_id);
+add_rule_to_closure_list(ris);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_null_call_thread_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_called_thread_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)to_element;
+T_terminal_def*td= rt->its_t_def();
+T_ENO t_id= td->enum_id();
+add_element_to_state_vector(t_id,*se);
+break;
+}
+}
+
+/*:77*/
+//line 932 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+return rt_bnded;
+}
+
+/*:76*//*78:*/
+//line 975 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::create_start_state(AST&Start_rule_t){
+gen_context gening_context(0,-1);
+add_rule_s_subrules_to_state(Start_rule_t,gening_context,*this);
+add_closure_rules_subrules_to_state(gening_context,*this);
+crt_start_rule_s_follow_set(Start_rule_t);
+create_follow_sets_of_state();
+this->state_type_= determine_reduced_state_type(this);
+
+}
+/*:78*//*79:*/
+//line 993 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool
+state::
+gen_transitive_states_for_closure_context
+(gen_context&For_gening_context,state&For_closure_state,state&State){
+/*137:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2205 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2201 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2202 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 998 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_transitive_states_for_closure_context for closure state: "
+<<For_gening_context.for_closure_state_->state_no_
+<<endl;
+S_VECTORS_ITER_type i= State.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= State.state_s_vector_.end();
+for(;i!=ie;++i){
+Voc_ENO eno= i->first;
+/*80:*/
+//line 1025 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(eno==-T_Enum::T_T_eosubrule_)
+{
+S_VECTOR_ELEMS_type elem_list= i->second;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+for(;j!=je;++j){
+state_element*se= *j;
+se->reduced_state_= se->self_state_;
+state*reduced_state= se->self_state_;
+while(se->previous_state_element_!=0){
+se->previous_state_element_->reduced_state_= reduced_state;
+se= se->previous_state_element_;
+}
+}
+continue;
+}
+
+/*:80*/
+//line 1006 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+For_gening_context.gen_vector_= eno;
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1008 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<" for vector: "
+<<For_gening_context.gen_vector_
+<<endl;
+bool continue_gening= gen_a_state(For_gening_context,For_closure_state,State,i);
+if(continue_gening==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1014 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+}
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1018 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return LR1_COMPATIBLE;
+}
+
+/*:79*//*81:*/
+//line 1044 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool
+state::
+gen_transitive_states_balance_for_closure_vector
+(gen_context&Gen_context,state&For_closure_state,state&Goto_state){
+/*137:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2205 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2201 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2202 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 1049 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_transitive_states_balance_for_closure_vector for <"
+<<Gen_context.for_closure_state_->state_no_
+<<","
+<<Gen_context.gen_vector_
+<<"> goto state: "
+<<Goto_state.state_no_
+<<endl;
+S_VECTORS_ITER_type i= Goto_state.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= Goto_state.state_s_vector_.end();
+for(;i!=ie;++i){
+Voc_ENO eno= i->first;
+/*80:*/
+//line 1025 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(eno==-T_Enum::T_T_eosubrule_)
+{
+S_VECTOR_ELEMS_type elem_list= i->second;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+for(;j!=je;++j){
+state_element*se= *j;
+se->reduced_state_= se->self_state_;
+state*reduced_state= se->self_state_;
+while(se->previous_state_element_!=0){
+se->previous_state_element_->reduced_state_= reduced_state;
+se= se->previous_state_element_;
+}
+}
+continue;
+}
+
+/*:80*/
+//line 1062 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool continue_gening= gen_a_state(Gen_context,For_closure_state,Goto_state,i);
+if(continue_gening==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1065 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+}
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1069 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return LR1_COMPATIBLE;
+}
+
+
+/*:81*//*82:*/
+//line 1117 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::gen_a_state
+(gen_context&For_gening_context
+,state&For_closure_state
+,state&Requesting_state,S_VECTORS_ITER_type&Elem_iter){
+/*137:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2205 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2201 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2202 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 1122 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_a_state for <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<"> requesting state: "
+<<Requesting_state.state_no_
+<<endl;
+
+gen_context associated_rt_bnded_cs(0,-1);
+Voc_ENO eno= Elem_iter->first;
+S_VECTOR_ELEMS_type elem_list= Elem_iter->second;
+S_VECTOR_ELEMS_ITER_type i= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ie= elem_list.end();
+bool compatible(false);
+for(;i!=ie;++i){
+state_element*se= *i;
+/*83:*/
+//line 1173 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if((
+(se->cs_vector_combo_gening_it_.for_closure_state_==For_gening_context.for_closure_state_)
+&&
+(se->cs_vector_combo_gening_it_.gen_vector_==For_gening_context.gen_vector_)
+)!=true){
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1179 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_a_state Bypass subrule as its gening <"
+<<se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<<","
+<<se->cs_vector_combo_gening_it_.gen_vector_
+<<"> different then gening <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<">"
+<<endl;
+continue;
+}
+
+/*:83*/
+//line 1139 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*84:*/
+//line 1194 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(se->goto_state_!=0){
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1196 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_a_state subrule COMMON PREFIX state gened by a different gening context. <"
+<<se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<<","
+<<se->cs_vector_combo_gening_it_.gen_vector_
+<<"> goto state: "
+<<se->goto_state_->state_no_
+<<endl;
+add_state_to_conflict_states_list_if(For_gening_context,*se->goto_state_);
+bool gen_ok= gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*se->goto_state_);
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1207 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return gen_ok;
+}
+/*:84*/
+//line 1140 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*85:*/
+//line 1211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state*s= new state(eno,se->sr_def_element_);
+s->closure_state_birthing_it_= For_gening_context.for_closure_state_;
+s->cs_vector_combo_gening_it_= For_gening_context;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+
+bool rt_bnded= s->crt_core_items_of_state(j,je,For_gening_context);
+if(rt_bnded==true){
+associated_rt_bnded_cs= For_gening_context;
+}else{
+associated_rt_bnded_cs.for_closure_state_= 0;
+associated_rt_bnded_cs.gen_vector_= -1;
+}
+s->add_closure_rules_subrules_to_state(associated_rt_bnded_cs,*s);
+s->create_follow_sets_of_state();
+
+/*:85*/
+//line 1141 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*86:*/
+//line 1231 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int compatibility_result= find_2_states_compatible_and_merge(*s);
+switch(compatibility_result){
+case MERGED:{
+delete s;
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1236 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return true;
+}
+case ABORT_GENING_STATES:{
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1240 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+case NOT_MERGED:{
+break;
+}
+}
+
+/*:86*/
+//line 1142 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+add_state_to_gbl_lr1_state_tbls(s);
+/*139:*/
+//line 2208 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1144 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_a_state for <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<"> requesting state: "
+<<Requesting_state.state_no_
+<<" NEW STATE CREATED: "
+<<s->state_no_
+<<endl;
+add_state_to_conflict_states_list_if(For_gening_context,*s);
+compatible= is_state_lr1_compatible(*s);
+if(compatible==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1158 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+
+s->state_type_= determine_reduced_state_type(s);
+bool gen_ok= gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*s);
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1164 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return gen_ok;
+}
+/*140:*/
+//line 2211 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1167 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+return LR1_COMPATIBLE;
+}
+
+/*:82*//*87:*/
+//line 1251 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int state::determine_reduced_state_type(state*S){
+
+using namespace NS_yacco2_T_enum;
+int no_reduces(0);
+int no_reduce_types(0);
+S_VECTORS_ITER_type svi= S->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= S->state_s_vector_.end();
+S_VECTORS_ITER_type tvi= S->state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+tvi= S->state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+tvi= S->state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+if(no_reduces> 1)no_reduces= 3;
+if(S->state_s_vector_.size()> no_reduce_types){
+if(no_reduce_types> 0){
+++no_reduces;
+}
+}
+return no_reduces;
+}
+
+/*:87*//*88:*/
+//line 1284 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_state_to_gbl_lr1_state_tbls(state*State){
+++NO_LR1_STATES;
+State->state_no_= NO_LR1_STATES;
+LR1_STATES.push_back(State);
+Voc_ENO eno= State->vectored_into_by_elem_;
+LR1_STATES_ITER_type i= LR1_COMMON_STATES.find(eno);
+if(i==LR1_COMMON_STATES.end()){
+LR1_COMMON_STATES[eno]= STATES_type();
+i= LR1_COMMON_STATES.find(eno);
+}
+i->second.push_back(State);
+}
+
+/*:88*//*89:*/
+//line 1303 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_state_to_conflict_states_list_if(gen_context&Gening_context,state&State){
+S_VECTORS_ITER_type i= State.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(i!=State.state_s_vector_.end())goto reduce_fnd;
+return;
+reduce_fnd:;
+if(i->second.size()> 1){
+Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+return;
+}
+if(State.state_s_vector_.size()<2)return;
+Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+}
+
+/*:89*//*91:*/
+//line 1353 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::are_states_equivalent(state&Merge_into_state,state&To_merge_state){
+if(Merge_into_state.vectored_into_by_elem_!=To_merge_state.vectored_into_by_elem_){
+return false;
+}
+if(Merge_into_state.state_s_vector_.size()!=To_merge_state.state_s_vector_.size()){
+return false;
+}
+S_VECTORS_ITER_type i= Merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= Merge_into_state.state_s_vector_.end();
+S_VECTORS_ITER_type j= To_merge_state.state_s_vector_.begin();
+S_VECTORS_ITER_type je= To_merge_state.state_s_vector_.end();
+for(;i!=ie;++i,++j){
+Voc_ENO ieno= i->first;
+Voc_ENO jeno= j->first;
+if(ieno!=jeno){
+return false;
+}
+if(i->second.size()!=j->second.size()){
+return false;
+}
+S_VECTOR_ELEMS_ITER_type l= i->second.begin();
+S_VECTOR_ELEMS_ITER_type le= i->second.end();
+S_VECTOR_ELEMS_ITER_type m= j->second.begin();
+S_VECTOR_ELEMS_ITER_type me= j->second.end();
+for(;l!=le;++l,++m){
+state_element*ls= *l;
+state_element*ms= *m;
+if(ls->sr_element_!=ms->sr_element_){
+return false;
+}
+}
+}
+return true;
+}
+
+/*:91*//*92:*/
+//line 1407 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_state_lr1_compatible(state&State_to_eval){
+T_COUNT_type t_cnt(START_OF_RULES_ENUM);
+for(int x= 0;x<START_OF_RULES_ENUM;++x)t_cnt[x]= 0;
+S_VECTORS_ITER_type i;
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+return LR1_COMPATIBLE;
+assess_state:
+int no_reduces= 0;
+S_VECTOR_ELEMS_ITER_type j= i->second.begin();
+S_VECTOR_ELEMS_ITER_type je= i->second.end();
+bool T_not_meta(false);
+for(;j!=je;++j){
+++no_reduces;
+state_element*se= *j;
+if(se->calc_la(*se)==false){
+return NOT_LR1_COMPATIBLE;
+}
+LA_SET_ITER_type k= se->la_set_->begin();
+LA_SET_ITER_type ke= se->la_set_->end();
+for(;k!=ke;++k){
+T_in_stbl*tintbl= *k;
+T_ENO teno= tintbl->t_def()->enum_id();
+if(teno<=END_OF_LR1_DEFS){
+if(teno==LR1_EOG){
+T_not_meta= true;
+}
+}else{
+T_not_meta= true;
+}
+++t_cnt[teno];
+if(t_cnt[teno]> 1)return NOT_LR1_COMPATIBLE;
+}
+}
+if(no_reduces> 1){
+if(T_not_meta==true){
+if(t_cnt[LR1_EOLR]> 0)return NOT_LR1_COMPATIBLE;
+}
+}
+
+
+S_VECTORS_ITER_type l= State_to_eval.state_s_vector_.begin();
+S_VECTORS_ITER_type le= State_to_eval.state_s_vector_.end();
+for(;l!=le;++l){
+Voc_ENO t= l->first;
+if(t==-T_Enum::T_T_eosubrule_)continue;
+if(t==-T_Enum::T_T_null_call_thread_eosubrule_)continue;
+if(t==-T_Enum::T_T_called_thread_eosubrule_)continue;
+if(t==T_Enum::T_refered_rule_)continue;
+S_VECTOR_ELEMS_ITER_type m= l->second.begin();
+state_element*se= *m;
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+T_ENO tid= sym->enumerated_id__;
+switch(tid){
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1889 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 1473 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_in_stbl*tintbl= rt->t_in_stbl();
+T_ENO teno= tintbl->t_def()->enum_id();
+if(teno<=END_OF_LR1_DEFS){
+if(teno!=LR1_EOG){
+continue;
+}
+}
+++t_cnt[teno];
+if(t_cnt[teno]> 1)return NOT_LR1_COMPATIBLE;
+if(teno> END_OF_LR1_DEFS){
+if(t_cnt[LR1_EOLR]> 0)return NOT_LR1_COMPATIBLE;
+}
+}
+}
+}
+return LR1_COMPATIBLE;
+}
+
+/*:92*//*93:*/
+//line 1547 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int
+state::
+are_2_states_compatible_yes_merge(state&To_merge_into_state,state&State_for_merging){
+state*cs_To_merge_into= To_merge_into_state.closure_state_birthing_it_;
+state*cs_for_merging= State_for_merging.closure_state_birthing_it_;
+
+/*94:*/
+//line 1586 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_NOS_SET_type rules_to_add;
+S_VECTORS_ITER_type sfmi= To_merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type sfmie= To_merge_into_state.state_s_vector_.end();
+S_VECTORS_ITER_type msfmi= State_for_merging.state_s_vector_.begin();
+for(;sfmi!=sfmie;++sfmi,++msfmi){
+S_VECTOR_ELEMS_ITER_type rri= sfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type mrri= msfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= sfmi->second.end();
+for(;rri!=rrie;++rri,++mrri){
+state_element*re= *rri;
+state_element*mre= *mrri;
+if(re->closure_state_==re->self_state_)continue;
+RULE_ENO ruleno= re->find_state_element_s_rule_no();
+S_FOLLOW_SETS_ITER_type j= re->closure_state_->state_s_follow_set_map_.find(ruleno);
+follow_element*fe= j->second;
+RULE_NOS_SET_ITER_type rni= rules_to_add.find(ruleno);
+if(rni==rules_to_add.end()){
+fe->add_merge_closure_info(*mre->closure_state_);
+rules_to_add.insert(ruleno);
+}
+}
+}
+/*:94*/
+//line 1554 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool compatible(false);
+if(cs_To_merge_into->state_s_conflict_state_list_.empty()==true)goto merged;
+lr1_test:
+{
+S_CONFLICT_STATES_ITER_type k= cs_To_merge_into->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ke= cs_To_merge_into->state_s_conflict_state_list_.end();
+for(;k!=ke;++k){
+state*s= *k;
+
+compatible= s->is_state_lr1_compatible(*s);
+
+if(compatible==NOT_LR1_COMPATIBLE)goto unwind_merge;
+}
+}
+merged:
+{
+/*95:*/
+//line 1610 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+S_VECTORS_ITER_type ri= State_for_merging.state_s_vector_.begin();
+S_VECTORS_ITER_type rie= State_for_merging.state_s_vector_.end();
+S_VECTORS_ITER_type si= To_merge_into_state.state_s_vector_.begin();
+for(;ri!=rie;++ri,++si){
+S_VECTOR_ELEMS_ITER_type rri= ri->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= ri->second.end();
+S_VECTOR_ELEMS_ITER_type ssi= si->second.begin();
+for(;rri!=rrie;++rri,++ssi){
+state_element*re= *rri;
+state_element*se= *ssi;
+if(re->previous_state_element_==0)continue;
+state_element*prev_re= re->previous_state_element_;
+prev_re->goto_state_= se->self_state_;
+prev_re->reduced_state_= se->reduced_state_;
+prev_re->next_state_element_= se;
+
+for(prev_re= prev_re->previous_state_element_;
+prev_re!=0;prev_re= prev_re->previous_state_element_){
+prev_re->reduced_state_= se->reduced_state_;
+}
+}
+}
+/*96:*/
+//line 1642 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(cs_for_merging->cs_vector_combo_gening_it_.for_closure_state_
+!=cs_To_merge_into->cs_vector_combo_gening_it_.for_closure_state_){
+S_CONFLICT_STATES_ITER_type k= cs_To_merge_into->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ke= cs_To_merge_into->state_s_conflict_state_list_.end();
+for(;k!=ke;++k){
+state*s= *k;
+cs_for_merging->state_s_conflict_state_list_.push_back(s);
+}
+}
+
+/*:96*/
+//line 1633 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:95*/
+//line 1571 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return MERGED;
+}
+
+unwind_merge:{
+
+unwind:;
+/*97:*/
+//line 1654 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_NOS_SET_type rules_to_add;
+S_VECTORS_ITER_type sfmi= To_merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type sfmie= To_merge_into_state.state_s_vector_.end();
+for(;sfmi!=sfmie;++sfmi){
+S_VECTOR_ELEMS_ITER_type rri= sfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= sfmi->second.end();
+for(;rri!=rrie;++rri){
+state_element*re= *rri;
+if(re->closure_state_==re->self_state_)continue;
+RULE_ENO ruleno= re->find_state_element_s_rule_no();
+S_FOLLOW_SETS_ITER_type j= re->closure_state_->state_s_follow_set_map_.find(ruleno);
+follow_element*fe= j->second;
+RULE_NOS_SET_ITER_type rni= rules_to_add.find(ruleno);
+if(rni==rules_to_add.end()){
+fe->remove_merge_closure_info();
+rules_to_add.insert(ruleno);
+}
+}
+}
+
+/*:97*/
+//line 1578 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_MERGED;
+}
+return NOT_MERGED;
+}
+
+/*:93*//*98:*/
+//line 1678 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int state::find_2_states_compatible_and_merge(state&State_for_merging){
+Voc_ENO eno= State_for_merging.vectored_into_by_elem_;
+LR1_STATES_ITER_type i= LR1_COMMON_STATES.find(eno);
+if(i==LR1_COMMON_STATES.end()){
+return NOT_MERGED;
+}
+STATES_ITER_type j= i->second.begin();
+STATES_ITER_type je= i->second.end();
+for(;j!=je;++j){
+state*s= *j;
+bool equivalent= are_states_equivalent(State_for_merging,*s);
+if(equivalent==false)continue;
+int compatible= are_2_states_compatible_yes_merge(*s,State_for_merging);
+if(compatible==LR1_COMPATIBLE)return MERGED;
+if(compatible==ABORT_GENING_STATES)return ABORT_GENING_STATES;
+}
+return NOT_MERGED;
+}
+
+/*:98*//*99:*/
+//line 1700 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::are_gened_states_lr1_compatible(){
+S_CONFLICT_STATES_ITER_type i= state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ie= state_s_conflict_state_list_.end();
+if(i==ie)return LR1_COMPATIBLE;
+for(;i!=ie;++i){
+state*s= *i;
+if(is_state_lr1_compatible(*s)==NOT_LR1_COMPATIBLE)return NOT_LR1_COMPATIBLE;
+}
+return LR1_COMPATIBLE;
+}
+
+/*:99*//*100:*/
+//line 1733 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_str_rt_bnded(AST*Str){
+AST*rstr_t= AST::brother(*Str);
+if(rstr_t==0)return false;
+CAbs_lr1_sym*sym= AST::content(*rstr_t);
+Voc_ENO id= sym->enumerated_id__;
+if(id==T_Enum::T_T_eosubrule_){
+CAbs_lr1_sym*rsym= AST::content(*Str);
+if(rsym->enumerated_id__==T_Enum::T_refered_rule_){
+return true;
+}
+}
+return is_str_epsilonable(rstr_t);
+}
+/*:100*//*101:*/
+//line 1756 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_str_epsilonable(AST*Str){
+AST*str_t= Str;
+for(;str_t!=0;str_t= AST::brother(*str_t)){
+CAbs_lr1_sym*sym= AST::content(*str_t);
+Voc_ENO id= sym->enumerated_id__;
+/*102:*/
+//line 1773 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 1776 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+if(rd->epsilon()!=true)return false;
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+return true;
+}
+case T_Enum::T_refered_T_:{
+return false;
+}
+}
+
+/*:102*/
+//line 1762 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+return true;
+}
+
+/*:101*//*104:*/
+//line 1791 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_rule_to_follow_list(RULE_ENO Refered_rule){
+FOLLOW_RULES_ITER_type i= follow_rule_list_.find(Refered_rule);
+if(i==follow_rule_list_.end()){
+follow_rule_list_.insert(Refered_rule);
+}
+}
+
+/*:104*//*105:*/
+//line 1806 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::create_follow_sets_of_state(){
+if(follow_rule_list_.empty()==true)return;
+RULE_ENO eno(-1);
+FOLLOW_RULES_ITER_type i= follow_rule_list_.begin();
+FOLLOW_RULES_ITER_type ie= follow_rule_list_.end();
+for(;i!=ie;++i){
+follow_element*fe= new follow_element(this);
+eno= *i;
+fe->rule_no_= eno;
+state_s_follow_set_map_[eno]= fe;
+}
+
+i= follow_rule_list_.begin();
+for(;i!=ie;++i){
+eno= *i;
+S_VECTORS_ITER_type j= state_s_vector_.find(eno);
+S_FOLLOW_SETS_ITER_type fsi= state_s_follow_set_map_.find(eno);
+follow_element*fe= fsi->second;
+
+S_VECTOR_ELEMS_ITER_type k= j->second.begin();
+S_VECTOR_ELEMS_ITER_type ke= j->second.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+/*107:*/
+//line 1882 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)AST::content(*se->sr_element_);
+/*:107*/
+//line 1830 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+AST*follow_str_t= AST::brother(*se->sr_element_);
+deal_with_follow_str_sym:;
+fe->rule_def_t_= rr->its_rule_def()->rule_s_tree();
+fe->add_follow_set_contributor(follow_str_t);
+CAbs_lr1_sym*sym= AST::content(*follow_str_t);
+Voc_ENO id= sym->enumerated_id__;
+/*106:*/
+//line 1842 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 1845 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+if(rd->first_set()->empty()!=true){
+FIRST_SET_ITER_type a= rd->first_set()->begin();
+FIRST_SET_ITER_type ae= rd->first_set()->end();
+for(;a!=ae;++a){
+T_in_stbl*t= *a;
+if(fe->follow_set_.find(t)==fe->follow_set_.end()){
+fe->follow_set_.insert(t);
+}
+}
+}
+if(rd->epsilon()==true){
+follow_str_t= AST::brother(*follow_str_t);
+goto deal_with_follow_str_sym;
+}
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1893 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 1864 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+fe->add_follow_set_transition(*se,*eos);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1889 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 1875 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+fe->follow_set_.insert(rt->t_in_stbl());
+break;
+}
+}
+
+/*:106*/
+//line 1837 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+}
+}
+/*:105*//*113:*/
+//line 1912 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::crt_start_rule_s_follow_set(AST&Start_rule){
+CAbs_lr1_sym*sym= AST::content(Start_rule);
+rule_def* rd = (rule_def*)sym;;
+RULE_ENO rno= rd->enum_id();
+follow_element*fe= new follow_element(this);
+fe->rule_no_= rno;
+state_s_follow_set_map_[rno]= fe;
+fe->rule_def_t_= rd->rule_s_tree();
+if(O2_PP_PHASE==0){
+fe->follow_set_.insert(STBL_T_ITEMS[LR1_EOLR]);
+}else{
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+T_parallel_la_boundary*la= pp_ph->la_bndry();
+LA_SET_ITER_type i= la->la_first_set()->begin();
+LA_SET_ITER_type ie= la->la_first_set()->end();
+for(;i!=ie;++i){
+T_in_stbl*t= *i;
+FOLLOW_SETS_ITER_type j= fe->follow_set_.find(t);
+if(j==fe->follow_set_.end()){
+fe->follow_set_.insert(t);
+}
+}
+}
+
+}
+
+/*:113*//*115:*/
+//line 1941 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+const char*state::entry_symbol_literal(){
+if(vectored_into_by_elem_sym_==0)return" No symbol";
+/*116:*/
+//line 1949 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+Voc_ENO id= vectored_into_by_elem_sym_->enumerated_id__;
+CAbs_lr1_sym*sym= vectored_into_by_elem_sym_;
+switch(id){
+case T_Enum::T_rule_def_:{
+rule_def* rd = (rule_def*)sym;
+return rd->rule_name()->c_str();
+}
+case T_Enum::T_T_eosubrule_:{
+return"eos";
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+return"null-eos";
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+return"called-thd-eos";
+break;
+}
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* td = (T_terminal_def*)sym;
+return td->t_name()->c_str();
+}
+default:{
+return"null-eos";
+break;
+}
+}
+
+/*:116*/
+//line 1944 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+
+/*:115*/
+//line 2217 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+//line 1 "/usr/local/yacco2/compiler/o2/bugs.w"
+
+
+
+
+
+
+
+
+/*:141*/
diff --git a/web/yacco2/compiler/o2/o2_defs.w b/web/yacco2/compiler/o2/o2_defs.w
new file mode 100644
index 0000000000..35e0dfe1eb
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_defs.w
@@ -0,0 +1,2217 @@
+@q file: o2_defs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% See o2_types.w document for defiitions@>
+
+@*1 {\bf{LR1 definitions}}.\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_structures.1"}{1}{1}
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_structures.2"}{1}{1}
+\fbreak
+\fbreak
+Let's review what makes up a state:\fbreak
+\ptindent{1) subrules's specific element --- state's to gen vectors}
+\ptindent{2) rules's follow set}
+\ptindent{3) state's entry symbol --- Start state has no entry symbol}
+\ptindent{4) state's list of conflict states}
+A state is a set of productions (subrules) where each production's current symbol
+being worked on
+is some position along its string.
+A state from the arithmetic grammar discussed earlier
+ could be represented by the following example where the ``.'' indicates
+the position within the production's
+string being worked on in the state:\fbreak
+\ptindent{S $\rightarrow$ E \ . \ $\bot$}
+\ptindent{E $\rightarrow$ E \ . \ $+$ T}
+The above state has 2 productions
+where each symbol being worked on is in position 2 of their respective strings.
+These are items in the state having their production configuration of
+subrule $\otimes$ string position.
+Sometimes I shall call each entry a {\bf state element} rather than an item.
+A rule's follow set gets created when it is present in point 1: ie, the state's element is a rule
+and its follow set is the string to its right that generates teminals.
+Please see at the beginning of this document the ``follow set'' definition.
+Point 3's entry symbol identifies the symbol used to gen the state
+and to quickly help in determining whether two states
+are equivalent for potential state merging.
+Point 4 is a requirement to support merging of states from 2 different
+closured-part state networks.
+It supplies the lr1 states that have reduce / reduce or shift conditions
+that
+require the lr1 compatibility check.
+When there is a proposed merger from 2 different closured-part contexts,
+it is the union of their follow sets that gives the reducing subrules their lookahead sets.
+Consequently the lr1 conflict states of the ``merged into context''
+must be evaluated for lr1 compatibility.
+\fbreak
+\fbreak
+Parts of a state:\fbreak
+\ptindent{1) Closured }
+\ptindent{2) Transitive }
+A closured part are all the state's items whose elements start their strings.
+They have been brought into the state by the ``closure'' operation
+caused by a state's element being a rule.
+A transitive part are those productions whose elements are to
+the right of the start element.
+Items used to generate a new state are called {\bf ``core items''}.
+\fbreak
+\fbreak
+State generation:\fbreak
+All states are generated from a closured part of a state.
+Its productions are walked along their strings producing transitive states
+until their strings are completely consumed.
+This holds for the ``Start state'' that starts things off by
+generating all it transitive children.
+Thereafter each transitive state is visited and assessed for its closured components
+that then generates its own transitive states.
+This goes on until all the generated states have been visited.
+\fbreak
+\fbreak
+Contexts:\fbreak
+\ptindent{1) follow sets}
+\ptindent{2) production's reduced lookahead set}
+A production's reduction occurs when all its string has been recognized.
+For it to reduce, it depends on the context of its follow set within
+its birthing closured state:
+This is the lr1 compatibility context that is refered to as {\bf lookahead}.
+When there is no
+conflict of interest between competing productions (reduces with possibly shifts)
+within the state,
+this becomes a lr(0) situation.
+Without regard for the lookahead context this now shifts the error
+detection to the state that must deal with the lookahead as the current terminal for shifting.
+This strategy is used when state merges takes place.
+Instead of exploding the number of states sensitive to only its own
+lookahead context, mergers combine the follow set contexts as long as there is no
+state incompatibilities created.
+2 or more competing reducing productions
+requires their follow set contexts to resolve the reducing conflict:
+reduce / reduce or reduce / shift.
+Shifts of symbols are local to the reducing state.
+
+Of course lookaheads are context sensitive according to
+each productions birthing states. In LR(1) terms, the lookahead is
+deterministic and provided by the
+follow sets having only 1 symbol string as lookahead.
+\fbreak
+\fbreak
+Follow set and right bounded condition:\fbreak
+This condition is where a rule is the last symbol in its production string.
+Its closured productions inherit the follow set
+ of the production string(s) that closured it.
+These follow sets are found in the gening closured
+state environment.
+Consequently right bounded closured productions must be gened
+in case it could produce a conflict state.
+Why? Merges taking place above this to-be-gened production from a different closured state
+generation could produce a conflict as
+the merger is not aware that one
+of its transitive states has a future conflict condition
+dependent on these merged follow set contexts.\fbreak
+As an example please see David Spector from ``SIGPLAN VOL 23 DEC/88''
+where my gened ``lr1\_sp5.lex'' grammar illustrates this condition.
+\fbreak
+\fbreak
+Epsilon rules and right bounded condition:\fbreak
+If the last symbol is a rule and is epsilonable, then the right bounded condition
+moves left inwards from the end of the symbol string to the next right-to-left symbol.
+Now if that symbol is a rule it is considered a right bounded requiring
+generation within the current closured
+state environment. This is a recursive definition: right bounded condition gens closures
+having the right bounded condition that also requires immediate generation.
+When it comes time to gen the closured-part
+state of the right bounded components,
+they will have been already gened
+and their conflict states
+entered against their gening closured-part state environment.
+\fbreak
+\fbreak
+Significance of right bounded condition:\fbreak
+It demands that its future closured state generation be associated with the
+ generating closured state that created it.
+Restated: It must be generated prematurely by its spawning
+closured state.
+This way any of its transitive states that have the lr1 conflict condition will
+get placed in the
+conflict state list of the generating closured state so
+that a proposed merger relative to the original closured state
+is aware of the potential conflict and checked accordingly.
+\fbreak
+\fbreak
+Some synonyms:\fbreak
+``Closure-only'' state:\fbreak
+ A state where all its state elements are configurations with their start symbol.
+ This is your one and only Start state.\fbreak
+\fbreak
+``Transitive'' state:\fbreak
+ A state where at least one state element
+ is not the starting symbol of a production's string.
+ \fbreak
+\fbreak
+``Closured-only-part'' of a state:\fbreak
+ All state's elements whose symbols start the subrule string.
+ Synonym: ``closured state''.\fbreak
+\fbreak
+``Closured-only-subrules'' of a state:\fbreak
+ Productions's symbol strings brought into the state by the closure operation
+ caused by a state's element being a rule.
+ The ``closured-only'' part are those subrules birthed within this state
+ to
+ generate all its ``closured-only'' subrules transitive states.
+ \fbreak
+ \fbreak
+``Conflict state'':\fbreak
+ A state having at least 2 items where at least one of the productions
+ is reducing.
+\fbreak
+\fbreak
+Building a state core:\fbreak
+There are only 2 contexts that provide the generation fodder for a state:\fbreak
+\ptindent{1) Start (closure-only) state --- Start rule's grammar tree definition}
+\ptindent{2) Transitive states --- generated from a closured state}
+The ``closured-part'' of a state generates all its transitive states from its closure subrules
+regardless of the type of state --- Start or transitive.
+Point 1 starts things off. It generates all its transitive states.
+Point 2 deals with transitive states from point 1 that have closured-only residues
+that need generating.
+Of course these newly generated transitive states
+could be merged into the existing lr1 state network if they meet
+the lr1 compatibility criteria.
+Eventually the newly added transitive states
+will be assessed for their ``closured-part'' generation.
+\fbreak
+\fbreak
+Some Merge points:\fbreak
+First, only conflict states are tested.
+They are supplied by their associated closured generating state.
+When a merge takes place, the state being absorbed by the older closured network
+deposits its follow set info against the merged into state.
+
+Second, the conflict states of the ``merged into'' state network must also
+be added to the gening closured state's conflict state list.
+Why?
+If the state was not merged, eventually all its gened states would have
+the equivalent conflict states as the proposed merger.
+The only refinement to this is conflict states should only be added that are
+eventually generated from the ``merged into'' state.
+Now if future mergers are proposed into this newly closured state's network,
+the conflict states of the absorbing network will also be there for the testing.
+\fbreak
+\fbreak
+In summary, Lr1 state generation is discrete in its generation passes.
+Pass one: generate all the states
+for the start state from its ``closured-only'' subrules.
+Pass two and greater deals with ``closured-only'' parts of transitive states that
+have not been completely gened. Remember a subrule is associated with its
+birth state that brought it into existance.
+These transitive states
+are of previous passes.
+Each transitive pass looks for the next transitive state
+to generate
+until
+all its lr state network have been built.
+The ``transitive state pass'' generates all its ``closured-only''
+subrules independently of the past generations.
+\fbreak
+\fbreak
+Now the state implementation bedevils this definition as does Goethic churches ---
+one usually does not see the infrastructure required to build it
+unless the project ran out of money
+and
+stands unfinished but open to its engineering secrets.
+So here's the scaffolding for my sanity.
+A note on the following type defs sections: to make ``cweave'' behave in
+formatting its the document --- a slight ahem until i debug / correct ``cweave''.
+The cause is templates that came after the original program was written.
+
+
+@*2 |gen_context| definition/implementation.\fbreak
+The context identifying the closure state and vector combo gening its states.
+This context is needed to prevent same closure state merges whose
+vectors are different but generate common states having different follow sets.
+If merged the contributing contexts could make it non lr1.
+See David Spector's paper ``Efficicent Full Lr1 Parser Generators'': G2 example.
+The context is maintained per state that gened it and per state's
+ subrules vectors: |state_element|.
+@<Structure implementations@>+=
+ gen_context::gen_context(state* S,Voc_ENO Ve):for_closure_state_(S),gen_vector_(Ve){}
+
+@*2 |state_element| definition/implementation.\fbreak
+Basic building block of a state's set of subrules'
+string symbols.
+Laced throughout |state_element| are linkages between the
+past, present, and future of its lr1 state generation.
+This is the scaffolding to build the state network.
+|sr_def_element_| {\bf is for tracing purposes only}.
+I could have gone the long way by getting the tree node's content and then
+fetch its definition
+but this makes life easier when truth telling takes place --- {\bf terminal-def or rule-def}.
+
+The |la_set_| only gets created at the end-of-string point.
+It's a fast way to scratch-pad potential merges and the lr1 breathalyzer test.\fbreak
+@*3 |state_element| implementation.\fbreak
+@<Structure implementations@>+=
+ state_element::state_element(AST* Elem)
+ :cs_vector_combo_gening_it_(0,-1)
+ ,sr_element_(Elem)
+ ,sr_def_element_(0)
+ ,its_enum_id_(-1)
+ ,subrule_def_(0)
+ ,closure_state_(0)
+ ,goto_state_(0)
+ ,previous_state_(0)
+ ,reduced_state_(0)
+ ,self_state_(0)
+ ,previous_state_element_(0)
+ ,next_state_element_(0)
+ ,la_set_(0)
+ ,common_la_set_idx_(-1)
+ {
+ @<determine entry symbol@>;
+ }
+@ Determine entry symbol.\fbreak
+Eases tracing of lr states easier instead of just displaying its enumerated value.
+@<determine entry symbol@>=
+ CAbs_lr1_sym* sym = AST::content(*Elem);
+ Voc_ENO id = sym->enumerated_id__;
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @<get cast referenced rule@>;
+ rule_def* rd = rr->its_rule_def();
+ sr_def_element_ = rd;
+ its_enum_id_ = rd->enum_id();
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ @<get cast referenced eosubrule@>;
+ sr_def_element_ = eos;
+ its_enum_id_ = eos->enumerated_id__;
+ la_set_ = new LA_SET_type();
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ @<get cast referenced null called thread eosubrule@>;
+ sr_def_element_ = eos;
+ its_enum_id_ = eos->enumerated_id__;
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ @<get cast referenced called thread eosubrule@>;
+ sr_def_element_ = eos;
+ its_enum_id_ = eos->enumerated_id__;
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @<get cast referenced T@>;
+ T_terminal_def* td = rt->its_t_def();
+ sr_def_element_ = td;
+ its_enum_id_ = td->enum_id();
+ break;
+ }
+ }
+
+@*3 |~state_element|.\fbreak
+@<Structure implementations@>+=
+state_element::~state_element(){
+ if (la_set_ != 0) delete la_set_;
+}
+
+@*2 Lookahead Comments.\fbreak
+Please see the |la_express| grammar as to how it calculates the thread's end-of-parse stream
+lookahead. The ``eolr'' metaterminal is discussed in length as to what it represents
+and how it is exploded when lookahead expressions are used in a thread grammar
+ ``parallel-la-boundary'' construct.
+@*3 |add_fs_setA_to_LA|.\fbreak
+Substitute ``parallel-reduce-operator for ``parallel-operator''
+to eliminate the ambiguity between look ahead for reduction purposes
+versus calling thread for shift purposes.
+@<Structure implementations@>+=
+ void state_element::add_fs_setA_to_LA(follow_element& Fe,LA_SET_type& La_to_fill_in){
+ FOLLOW_SETS_ITER_type i = Fe.follow_set_.begin();
+ FOLLOW_SETS_ITER_type ie = Fe.follow_set_.end();
+ for(;i!=ie;++i){
+ LA_SET_ITER_type j = La_to_fill_in.find(*i);
+ if(j == La_to_fill_in.end()) {
+ T_in_stbl* t_sym = *i;
+ @<is there back to back thread calls?@>;
+ }
+ }
+ }
+@ Is there back to back thread call?.\fbreak
+Before the thread call reduce was made lr(0), it used the \REDshift
+meta terminal to reduce the first thread call as
+the \PARshift operator within a state was ambiguous in the 2 contexts
+--- run the thread or reduce the called thread.
+@<is there back to back thread calls?@>=
+ if(t_sym->t_def()->enum_id() != LR1_PARALLEL_OPERATOR){
+ La_to_fill_in.insert(t_sym);
+ }else{
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*LR1_REDUCE_OPERATOR_LITERAL);
+ @=T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;@>@/
+ La_to_fill_in.insert(td);
+ }
+
+@*3 |calc_la| --- fill the reduced element's la set by walking follow set graph.\fbreak
+Fill in the lookahead set for a reduced subrule by walking its
+follow sets.
+I protect against merges vs right bounded transitions that could cycle
+by |VISITED_MERGE_STATES_IN_LA_CALC|.
+The gened la is checked empty so indicate as bad.
+@<Structure implementations@>+=
+bool state_element::calc_la(state_element& La_to_fill_in){
+ if(La_to_fill_in.la_set_ == NULL){
+ return false; // no set to fill;so not lr1
+ }
+ if (La_to_fill_in.reduced_state_ != La_to_fill_in.self_state_) return true;
+VISITED_MERGE_STATES_IN_LA_CALC.clear();
+ La_to_fill_in.la_set_->clear();
+ state* cs = La_to_fill_in.closure_state_;
+ CAbs_lr1_sym* sym = AST::content(*La_to_fill_in.sr_element_);
+ T_ENO id = sym->enumerated_id__;
+ switch(id){
+ case T_Enum::T_T_eosubrule_:{
+ @<get cast referenced eosubrule@>;
+ rule_def* rd = eos->its_rule_def();
+ RULE_ENO r_id = rd->enum_id();
+ S_FOLLOW_SETS_ITER_type i = cs->state_s_follow_set_map_.find(r_id);
+ follow_element* fe = i->second;
+ add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+ if(fe->transitions_.empty() != true){
+ fill_la_from_transition(La_to_fill_in,fe->transitions_);
+ }
+ if(fe->merges_.empty() != true){
+ fill_la_from_merge(La_to_fill_in,fe->merges_,r_id);
+ }
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ break;
+ }
+ }
+ if (La_to_fill_in.la_set_->empty() == true){
+ return false; // not lr1 as cant have an empty la set
+ }else{
+ return true; // la set ok
+ }
+}
+
+@*3 |fill_la_from_merge|.\fbreak
+@<Structure implementations@>+=
+void
+state_element::
+fill_la_from_merge(state_element& La_to_fill_in,MERGES_type& Merge,RULE_ENO Rule_no){
+ MERGES_ITER_type i = Merge.begin();
+ MERGES_ITER_type ie = Merge.end();
+ for(;i!=ie;++i){
+ state* cs = *i;
+ STATES_SET_ITER_type ii = VISITED_MERGE_STATES_IN_LA_CALC.find(cs);
+ if(ii != VISITED_MERGE_STATES_IN_LA_CALC.end()) return;
+ VISITED_MERGE_STATES_IN_LA_CALC.insert(cs);
+ S_FOLLOW_SETS_ITER_type i = cs->state_s_follow_set_map_.find(Rule_no);
+ follow_element* fe = i->second;
+ add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+ if(fe->transitions_.empty() != true){
+ fill_la_from_transition(La_to_fill_in,fe->transitions_);
+ }
+ if(fe->merges_.empty() != true){
+ fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+ }
+ }
+}
+
+@*3 |fill_la_from_transition|.\fbreak
+@<Structure implementations@>+=
+void
+state_element::
+fill_la_from_transition(state_element& La_to_fill_in,TRANSITIONS_type& Transition){
+ TRANSITIONS_ITER_type i = Transition.begin();
+ TRANSITIONS_ITER_type ie = Transition.end();
+ for(;i!=ie;++i){
+ follow_element* fe = *i;
+ add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+ if(fe->transitions_.empty() != true){
+ fill_la_from_transition(La_to_fill_in,fe->transitions_);
+ }
+ if(fe->merges_.empty() != true){
+ fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+ }
+ }
+}
+
+@*3 |find_state_element_s_rule_no|.\fbreak
+Used for state merging to calculate a reducing subrule's lookahead set.
+@<Structure implementations@>+=
+ RULE_ENO state_element::find_state_element_s_rule_no(){
+ return subrule_def_->its_rule_def()->enum_id();
+ }
+
+@*2 Follow set definition for a rule.\fbreak
+The input set of strings for the rule's follow set are
+provided by the state's |S_VECTORS_type| that is
+a map of 3 generic enumerate types --- ``rule-defs'', ``T-defs'', and ``eosubrule'' variants.
+Of particular interest in this map are the ``rule-def''s.
+The |state_element|s associated with the rule are the GPS into each subrule's symbol
+string. One can view this as the state's contributors list to generate
+both its lr states and
+the referenced rules' follow sets for this state.
+Now these input follow set strings are
+ the strings to its right of its GPS.
+This is supplied thru the symbol's grammar next brother tree node.
+@*3 Follow set implementation.\fbreak
+@<Structure implementations@>+=
+ AST* follow_element::rule_def_t(){return rule_def_t_;}
+ state* follow_element::its_state(){return its_state_;}
+ follow_element::follow_element(state* State)
+ :rule_no_(-1)
+ ,rule_def_t_(0)
+ ,its_state_(State)
+ {}
+ follow_element::follow_element(RULE_ENO Rule_no,state_element& State_elem,AST& Rule_def_t)
+ :rule_no_(Rule_no)
+ ,rule_def_t_(&Rule_def_t)
+ ,its_state_(State_elem.closure_state_)
+ {}
+
+ void follow_element::add_follow_set_contributor(AST* SR_element){@/
+ sr_elements_.push_back(SR_element);
+ }
+ @*3 |add_follow_set_transition|.\fbreak
+ Find eosubule's lhs rule. This gives the ``rule no'' to fetch
+ its follow set element from its closure state's follow set map.
+ Remember, epsilon stays within its closured state whilst
+ a reducing subrule {\bf needs to go back to the start of its symbol string}
+ for its spawning rule and hence its follow set.\fbreak
+@<Structure implementations@>+=
+ void follow_element::add_follow_set_transition(state_element& State_elem,T_eosubrule& Eos){@/
+ rule_def* rd = Eos.its_rule_def();
+ RULE_ENO eno = rd->enum_id();
+
+ S_FOLLOW_SETS_ITER_type fsi =
+ State_elem.closure_state_->state_s_follow_set_map_.find(eno);
+ if(fsi == State_elem.closure_state_->state_s_follow_set_map_.end()){
+ return;
+ }
+ follow_element* fe = fsi->second;
+ @<left recursion on rule check --- out damn spot@>;
+ transitions_.push_back(fe);
+ }
+
+ @ Left recursion on rule check.\fbreak
+ Don't want to cycle on the same state spot: S1.A transitions on S1.A
+ caused by a grammar's rule having left rule recursion.
+ @<left recursion on rule check --- out damn spot@>=
+ if((rule_no_ == eno)
+ &&
+ (its_state_->state_no_ == State_elem.closure_state_->state_no_))
+ return;
+
+ @
+ Add the terminal to the follow set.
+@<Structure implementations@>+=
+ void follow_element::add_T_to_follow_set(AST* Refered_T){
+ @<get refered-t@>;
+ follow_set_.insert(t->t_in_stbl());
+ }
+@ Get refered-t.
+@<get refered-t@>=
+ @=refered_T* t = (refered_T*)AST::content(*Refered_T);@>@/
+
+ @*3 |remove_merge_closure_info|.
+@<Structure implementations@>+=
+void follow_element::remove_merge_closure_info(){
+ merges_.pop_front();
+}
+
+ @*3 |add_merge_closure_info|.\fbreak
+Watch for rule having subrules that are merged with common closure state.
+U should only have 1 such state in list so throw out duplicates.
+@<Structure implementations@>+=
+void follow_element::add_merge_closure_info(state& To_merge_closure_state){
+ state* tm = &To_merge_closure_state;
+ MERGES_ITER_type i = merges_.begin();
+ MERGES_ITER_type ie = merges_.end();
+ for(;i!=ie;++i){
+ state* s = *i;
+ if(s == tm) return;
+ }
+ merges_.push_front(&To_merge_closure_state);
+}
+
+@*2 State definition/implementation.\fbreak
+|vectored_into_by_elem_| is the goto element from the spawning state that
+ enters this state.
+The ``xxx-def'' symbol is provided by |vectored_into_by_elem_sym_|
+that is used for tracing purposes.
+It is one of the elements in determining whether 2 states are equal.
+I use the symbol's defining enumerate value which was enumerated across all the
+Grammar's vocabulary: Rules and Terminals.
+|START_STATE_ENUMERATE| symbol representing -1
+is used to accommodate a ``closure only'' state where there is no
+symbol entering the start state as a Grammar's vocabulary enumeration begins at 0.
+
+|closure_rule_list_| provides referenced rules in the state to complete the state's
+elements.
+|follow_rule_list_| is a fast way to deal with building follow sets for the state
+as it is a list of rule numbers that are keys into |state_s_to_vector|
+that indirectly supplies the follow string contexts.
+
+To support rules recycling optimization, a quasi
+closure state for any rule of the grammar has been added.
+Why the addition?
+Recycling of rules requires a use count derived from
+recursion and subrules references to the rule.
+My first attempt was wrong as i did not take into account
+that a rhs subrule could have a referenced rule that
+could be indirectly referenced by (derived by) a suffixed referenced rule.
+So i need to derive the state containing the closured items
+and them analyse its content to see whether
+indirect referencing is taking place.
+So create ctor of state with no tree and a |closure_only_derives| method.
+@*3 State's map of ``to vector'' elements.\fbreak
+|S_VECTORS_type| is the state's map of ``to vector'' elements
+of ``rule-ref'', ``T-ref'', and |eosubrule|.
+These elements produce the ``goto'' state eminating out of the lr1 state.
+This is a white lie as the |eosubrule| eminates nothing.
+It
+represents either the epsilon condition if its the first element of a subrule
+or a fully consumed subrule: its string of symbols has been consumed and so
+to be reduced.
+``rule-ref'', ``T-ref'' are proxies to their definitions whereby their enumerated values
+are unique.
+
+The second part of the map is the list of {\bf same state elements} having identical
+enumerated keys. These vectors are the fodder to generate the
+next set of states eminating from this state and all the ``closured-only part'' states progeny.
+The list is sorted by the AST address inside the state's emlement
+so that state equivalences can be determined.
+U might raise the point: doesn't it matter what order the elements are placed inside the
+state to generate the lr1 state network: FIFO?
+NO!
+Let's review why.\fbreak
+\ptindent{1) ``closured only'' state composed of 1st position only subrules' elements.}
+\ptindent{2) this state's follow sets are static: first set from strings to rt of refered rules.}
+\ptindent{3) only the closured-only subrules are fully generated at the same time.}
+\ptindent{4) transitive states only continue gening their subrules from the closured state.}
+\ptindent{5) the resulting lr1 states are evaluated for lr1 conflicts.}
+\ptindent{6) apply the logic above to gened states having incomplete gened closured-only parts.}
+\fbreak
+It is point 2 that is interesting: the birthing closured states
+ of its reducing subrules supplies their lookahead.
+ This means the closured state is
+ generated completely before an assessment needs to take place.
+ The lr1 assessment determines whether the gened states are lr(1) compatible.
+ This check goes only against states that have reducing subrules so that the reduce / reduce
+ and shift / reduce conditions can be verified.
+
+ How is the lr1 condition evaluated?
+ Easy, the reducing subrule's rule within its birthing closured state contains its follow set:
+ ie its lookahead terminals.
+ All it takes is to make sure that the intersection
+ of all the reducing subrules' follow sets
+ is empty and that the state's shift terminals are
+ not in any of the reducing subrules' follow sets.
+ This shift set can be considered an invisible follow set that is applied at
+ the same time to the other reducing follow sets.
+ Keeping a list of conflicting states within the ``closure-only or part'' state
+ when a state merge is proposed allows one to
+ apply this lr1 condition for compatibility against the potential merged follow sets.
+ Remember a gened state is produced out of its closured state.
+ Thus mergers mean use the follow sets of each closure state. The
+ ``state to merge into'' already has it list of lr1 conflict states
+ in its associated gening closured state that need checking
+ before Mr. Goodwrench nods. \fbreak
+ \fbreak
+ Key: element's enumerate: ``rule-def'', ``T-def'', and ``eosubrule'' \fbreak
+ Elements in list: state's elements that contain a grammar's tree node address \fbreak
+
+
+@*2 State implementation.\fbreak
+@<Structure implementations@>+=
+
+
+@*3 |state(AST* Start_rule_t)|.
+@<Structure implementations@>+=
+state::state(AST* Start_rule_t)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{
+ create_start_state(*Start_rule_t);
+ add_state_to_gbl_lr1_state_tbls(this);
+}
+
+@*3 |state()|: for closure only state of derives.
+@<Structure implementations@>+=
+state::state()
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{}
+
+@*3 |state(AST& Vectored_into_id_t)| --- Create transitive state.
+@<Structure implementations@>+=
+state::state(Voc_ENO Eno,CAbs_lr1_sym* Entry_sym)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(Eno)
+,vectored_into_by_elem_sym_(Entry_sym)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+,arbitrator_name_(0)
+{}
+
+@*3 |closure_only_derives| --- Create a closure only derives state.\fbreak
+Gen a derives only state for a rule so that
+the rule's recycle count is correct for indirect references.
+Used by |rules_use_cnt.lex| grammar.
+@<Structure implementations@>+=
+void state::closure_only_derives(AST* Rule_tree){
+ gen_context gening_context(0,-1);
+ add_rule_s_subrules_to_state(*Rule_tree,gening_context,*this);
+ add_closure_rules_subrules_to_state(gening_context,*this);
+}
+
+
+@*1 {\bf{Generate states}}.
+@*3 |add_element_to_state_vector|. \fbreak
+The |state_s_vector_|[enumerate of element] is positive except when its
+``eosubrule''. Why?
+Cuz i'm (re)cursing on this terminal in 2 ways: as an end-of-subrule condition
+for a production
+and in grammars that are referencing it: is this devine?
+So when it's a real end-of-string situation i make the key negative.
+When it's a ``refered-T'' then use its contained ``terminal-def'' positive image that
+could be the containment of ``eosubrule''.
+
+The element list is sorted on its AST address. Why the order?
+This makes sure that 2 elements having been brought into the state by
+different order will equate when state merges are proposed.
+@<Structure implementations@>+=
+void state::add_element_to_state_vector
+(Voc_ENO Elem_id,state_element& Elem){
+ S_VECTORS_ITER_type i = state_s_vector_.find(Elem_id);
+ if(i == state_s_vector_.end()){
+ state_s_vector_[Elem_id]= S_VECTOR_ELEMS_type();
+ i = state_s_vector_.find(Elem_id);
+ }
+ S_VECTOR_ELEMS_type& el = i->second;
+ if(el.empty() == true){
+ el.push_back(&Elem);
+ return;
+ }
+ S_VECTOR_ELEMS_ITER_type j = el.begin();
+ S_VECTOR_ELEMS_ITER_type je = el.end();
+ for(;j!=je;++j){
+ state_element* se = *j;
+ if(Elem.sr_element_ < se->sr_element_){
+ el.insert(j,&Elem);
+ return;
+ }
+ }
+ el.push_back(&Elem);
+}
+
+@*3 |add_closure_rules_subrules_to_state|.\fbreak
+Why the |closure_rule_list_.end()| in the loop?
+As i'm adding
+items to it while iterating thru it, i play it safe
+by testing each cycle for the end-of-container condition via the function call
+rather than a local variable set before the iteration.
+@<Structure implementations@>+=
+void state::add_closure_rules_subrules_to_state(gen_context& Possible_gen_context,state& Closure_state){
+ CLOSURE_RULES_type processed_rules_set;
+ loop_until_empty:;
+ if(closure_rule_list_.empty() == true) return;
+ CLOSURE_RULES_ITER_type i = closure_rule_list_.begin();
+ if(processed_rules_set.find(*i) != processed_rules_set.end()){
+ closure_rule_list_.erase(*i);
+ goto loop_until_empty;
+ }
+ processed_rules_set.insert(*i);
+ rule_def* rd = (*i)->r_def();
+ AST* t = rd->rule_s_tree();
+ add_rule_s_subrules_to_state(*t,Possible_gen_context,Closure_state);
+ goto loop_until_empty;
+}
+
+@*3 |add_rule_to_closure_list|.
+@<Structure implementations@>+=
+void state::add_rule_to_closure_list(rule_in_stbl* Rule_in_stbl){
+ CLOSURE_RULES_ITER_type i = closure_rule_list_.find(Rule_in_stbl);
+ if(i == closure_rule_list_.end()){
+ closure_rule_list_.insert(Rule_in_stbl);
+ derives_closure_rule_list_.insert(Rule_in_stbl);
+ rule_def* rd = Rule_in_stbl->r_def();
+ if(rd->closure_rules_making_up_first_set()->empty() == true) return;
+ CLOSURE_RULES_type* cr = rd->closure_rules_making_up_first_set();
+ CLOSURE_RULES_ITER_type j = cr->begin();
+ CLOSURE_RULES_ITER_type je = cr->end();
+ for(;j!=je;++j){
+ rule_in_stbl* ris = *j;
+ i = closure_rule_list_.find(ris);
+ if(i == closure_rule_list_.end()){
+ derives_closure_rule_list_.insert(ris);
+ closure_rule_list_.insert(ris);
+ }
+ }
+ }
+}
+@*3 |add_rule_s_subrules_to_state|.\fbreak
+Add rule's productions to state due to closured operation.
+
+A wrinkle: if the possible gen context has a gen vector of -1,
+this means the state's closure elements are not right bounded
+and are not assiciated with generating context and so its gen context
+will be out its own state and own vector.
+@<Structure implementations@>+=
+void
+state::
+add_rule_s_subrules_to_state(AST& Start_Rule_def_t,gen_context& Possible_gen_context,state& Closure_state_associate_with){
+ AST* subrules_t = AST::get_1st_son(Start_Rule_def_t);
+ AST* first_element_t(0);
+ CAbs_lr1_sym* first_element(0);
+ Voc_ENO id(START_STATE_ENUMERATE);
+ Voc_ENO cs_id(START_STATE_ENUMERATE);
+ for(;subrules_t !=0;subrules_t = AST::brother(*subrules_t)){
+ @=T_subrule_def* srd = (T_subrule_def*)AST::content(*subrules_t);@>@/
+ first_element_t = AST::get_1st_son(*subrules_t);
+ first_element = AST::content(*first_element_t);
+ state_element* se = new state_element(first_element_t);
+ se->subrule_def_ = srd;
+ se->self_state_ = this;
+ se->closure_state_ = this;
+ se->closured_state_gening_it_ = &Closure_state_associate_with;
+ id = first_element->enumerated_id__;
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @=refered_rule* rr = (refered_rule*)first_element;@>@/
+ rule_def* rd = rr->its_rule_def();
+ rule_in_stbl*ris= rr->Rule_in_stbl();
+ RULE_ENO r_id = rd->enum_id();
+ cs_id = r_id;
+ se->cs_vector_combo_gening_it_.gen_vector_ = r_id;
+ add_element_to_state_vector(r_id,*se);
+ add_rule_to_follow_list(r_id);
+ add_rule_to_closure_list(ris);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_eosubrule_;
+ cs_id = t_id;
+ se->reduced_state_ = this;
+ se->cs_vector_combo_gening_it_.gen_vector_ = t_id;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_null_call_thread_eosubrule_;
+ cs_id = t_id;
+ se->reduced_state_ = this;
+ se->cs_vector_combo_gening_it_.gen_vector_ = t_id;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_called_thread_eosubrule_;
+ cs_id = t_id;
+ se->reduced_state_ = this;
+ se->cs_vector_combo_gening_it_.gen_vector_ = t_id;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @=refered_T* rt = (refered_T*)first_element;@>@/
+ T_terminal_def* td = rt->its_t_def();
+ T_ENO t_id = td->enum_id();
+ cs_id = t_id;
+ se->cs_vector_combo_gening_it_.gen_vector_ = t_id;
+ add_element_to_state_vector(t_id,*se);
+ break;
+ }
+ }
+ if(Possible_gen_context.gen_vector_ != -1){
+ se->cs_vector_combo_gening_it_ = Possible_gen_context;
+ }else{
+ se->cs_vector_combo_gening_it_.for_closure_state_ = this;
+ se->cs_vector_combo_gening_it_.gen_vector_ = cs_id;
+ }
+
+ }
+}
+
+@*3 |crt_core_items_of_state|.\fbreak
+Add subrules to the new state being created.
+The iterators walk the vector list of the spawning state.\fbreak
+\fbreak
+Right bounded check:\fbreak
+\hbox{\hskip.5in 1) Rx \subrule{} \Alpha . Ra t}\fbreak
+\hbox{\hskip.5in 2) Ry \subrule{} \Beta . Ra}\fbreak
+\hbox{\hskip.5in 3) Rz \subrule{} . Ra Rb}\fbreak
+The period indicates where within the string of the production the current
+vector is.
+Point 1 is not right bounded due to t representing a terminal.
+Point 2 is right bounded as the follow set of its Ra hits the end-of-string condition and
+so must transition back along to Ry's follow sets. Point 3
+could be right bounded if Rb is epsilonable.
+Cuz of point 2, the newly generated state's closure rules will be associated
+with the current closure state generation.
+@<Structure implementations@>+=
+bool state::crt_core_items_of_state
+ (S_VECTOR_ELEMS_ITER_type& Iter_begin
+ ,S_VECTOR_ELEMS_ITER_type& Iter_end
+ ,gen_context& Gening_context){
+ bool rt_bnded(false);
+ AST* to_element_t(0);
+ CAbs_lr1_sym* to_element(0);
+ Voc_ENO id(START_STATE_ENUMERATE);
+ for(;Iter_begin !=Iter_end;++Iter_begin){
+ state_element* from_se = *Iter_begin;
+ to_element_t = AST::brother(*from_se->sr_element_);
+ bool se_rt_bnded_condition = is_str_rt_bnded(to_element_t);
+ if(se_rt_bnded_condition == true) rt_bnded = se_rt_bnded_condition;
+ to_element = AST::content(*to_element_t);
+ switch(to_element->enumerated_id__){
+ case T_Enum::T_T_null_call_thread_eosubrule_:{//bypass
+ to_element_t = AST::brother(*to_element_t);
+ se_rt_bnded_condition = is_str_rt_bnded(to_element_t);
+ if(se_rt_bnded_condition == true) rt_bnded = se_rt_bnded_condition;
+ to_element = AST::content(*to_element_t);
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{//bypass
+ to_element_t = AST::brother(*to_element_t);
+ se_rt_bnded_condition = is_str_rt_bnded(to_element_t);
+ if(se_rt_bnded_condition == true) rt_bnded = se_rt_bnded_condition;
+ to_element = AST::content(*to_element_t);
+ break;
+ }
+ }
+ state_element* se = new state_element(to_element_t);
+ se->subrule_def_ = from_se->subrule_def_;
+ se->self_state_ = this;
+ se->closure_state_ = from_se->closure_state_;
+ se->closured_state_gening_it_ = Gening_context.for_closure_state_;
+ //|se->cs_vector_combo_gening_it_ = from_se->cs_vector_combo_gening_it_;|
+ se->cs_vector_combo_gening_it_ = Gening_context;
+
+ if(se_rt_bnded_condition == true){
+ if(from_se->closured_state_gening_it_ != Gening_context.for_closure_state_){
+ // common prefix syndrome: keep it pure: same as from se
+ se->cs_vector_combo_gening_it_ = from_se->cs_vector_combo_gening_it_;
+ se->closured_state_gening_it_ = from_se->closured_state_gening_it_;
+ }else{
+ se->cs_vector_combo_gening_it_ = Gening_context;
+ se->closured_state_gening_it_ = Gening_context.for_closure_state_;
+ }
+ }
+ from_se->goto_state_ = se->self_state_;
+ se->previous_state_ = from_se->self_state_;
+
+ from_se->next_state_element_ = se;
+ se->previous_state_element_ = from_se;
+ id = to_element->enumerated_id__;
+ @<add subrule's element to the being gened state's vector@>;
+ }
+ return rt_bnded;
+}
+
+@*4 Add subrule's element to the being gened state's vector.
+@<add subrule's element to the being gened state's vector@>=
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @=refered_rule* rr = (refered_rule*)to_element;@>@/
+ rule_def* rd = rr->its_rule_def();
+ rule_in_stbl*ris= rr->Rule_in_stbl();
+ RULE_ENO r_id = rd->enum_id();
+ add_element_to_state_vector(r_id,*se);
+ add_rule_to_follow_list(r_id);
+ add_rule_to_closure_list(ris);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_eosubrule_;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_null_call_thread_eosubrule_;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ T_ENO t_id = T_Enum::T_T_called_thread_eosubrule_;
+ add_element_to_state_vector(-t_id,*se);
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @=refered_T* rt = (refered_T*)to_element;@>@/
+ T_terminal_def* td = rt->its_t_def();
+ T_ENO t_id = td->enum_id();
+ add_element_to_state_vector(t_id,*se);
+ break;
+ }
+ }
+
+@*3 |create_start_state| --- Create start state.
+@<Structure implementations@>+=
+void state::create_start_state(AST& Start_rule_t){
+ gen_context gening_context(0,-1);
+ add_rule_s_subrules_to_state(Start_rule_t,gening_context,*this);
+ add_closure_rules_subrules_to_state(gening_context,*this);
+ crt_start_rule_s_follow_set(Start_rule_t);
+ create_follow_sets_of_state();
+ this->state_type_ = determine_reduced_state_type(this);
+//|Print_dump_state(this);|
+}
+@*3 |gen_transitive_states_for_closure_context|.\fbreak
+Loop thru the state's closure/vector where the subrule's start position
+is the first symbol.
+The loop depends on the gening closure state/vector.
+When a state is constructed, the closured rules are
+associated with either:\fbreak
+\ptindent{1) itself state/vector}
+\ptindent{2) a right bounded rule context that associates with the gening context creating the state}
+@<Structure implementations@>+=
+bool
+state::
+gen_transitive_states_for_closure_context@/
+ (gen_context& For_gening_context,state& For_closure_state,state& State){@/
+@<Increment and printout Recursion counter@>;
+lrclog << "gen_transitive_states_for_closure_context for closure state: "
+<< For_gening_context.for_closure_state_->state_no_
+<< endl;
+ S_VECTORS_ITER_type i = State.state_s_vector_.begin();
+ S_VECTORS_ITER_type ie = State.state_s_vector_.end();
+ for(;i !=ie;++i){// read state's goto symbols
+ Voc_ENO eno = i->first;
+ @<unchain my reduce states if end-of-subrule and continue to next item@>;
+ For_gening_context.gen_vector_ = eno;
+@<Printout Recursion counter@>;
+lrclog << " for vector: "
+<< For_gening_context.gen_vector_
+<< endl;
+ bool continue_gening = gen_a_state(For_gening_context,For_closure_state,State,i);
+ if(continue_gening == NOT_LR1_COMPATIBLE){
+ @<Decrement Recursion counter@>;
+ return NOT_LR1_COMPATIBLE;
+ }
+ }
+ @<Decrement Recursion counter@>;
+ return LR1_COMPATIBLE;// gened states ok
+}
+
+@*4 Unchain my reduced states if end-of-subrule and continue to next item.\fbreak
+Rip thru the subrule's symbols depositing its reduced state as
+eyeball info.
+@<unchain my reduce states if end-of-subrule and continue to next item@>=
+ if(eno ==-T_Enum::T_T_eosubrule_)
+ {
+ S_VECTOR_ELEMS_type elem_list = i->second;
+ S_VECTOR_ELEMS_ITER_type j = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type je = elem_list.end();
+ for(;j!=je;++j){
+ state_element* se = *j;
+ se->reduced_state_ = se->self_state_;
+ state* reduced_state = se->self_state_;
+ while (se->previous_state_element_ != 0){
+ se->previous_state_element_->reduced_state_ = reduced_state;
+ se = se->previous_state_element_;
+ }
+ }
+ continue; // eosubrule: onto next vector to gen in closure state's vector loop
+ }
+
+@*3 |gen_transitive_states_balance_for_closure_vector|. \fbreak
+@<Structure implementations@>+=
+ bool
+ state::
+ gen_transitive_states_balance_for_closure_vector@/
+ (gen_context& Gen_context,state& For_closure_state,state& Goto_state){@/
+@<Increment and printout Recursion counter@>;
+
+lrclog << "gen_transitive_states_balance_for_closure_vector for <"
+<< Gen_context.for_closure_state_->state_no_
+<< ","
+<< Gen_context.gen_vector_
+<< "> goto state: "
+<< Goto_state.state_no_
+<< endl;
+ S_VECTORS_ITER_type i = Goto_state.state_s_vector_.begin();
+ S_VECTORS_ITER_type ie = Goto_state.state_s_vector_.end();
+ for(;i !=ie;++i){// read state's goto symbols
+ Voc_ENO eno = i->first;
+ @<unchain my reduce states if end-of-subrule and continue to next item@>;
+ bool continue_gening = gen_a_state(Gen_context,For_closure_state,Goto_state,i);
+ if(continue_gening == NOT_LR1_COMPATIBLE){
+ @<Decrement Recursion counter@>;
+ return NOT_LR1_COMPATIBLE; // stop gening as not lr1
+ }
+ }
+ @<Decrement Recursion counter@>;
+ return LR1_COMPATIBLE;
+ }
+
+
+@*3 |gen_a_state|.\fbreak
+The only wrinkle is when a previous closured state has dragged along a common
+prefix subrule that is not part of its productions being gened.
+Call this a premature production generation: the production could be partially gened
+up to where the common prefix differs or
+the production completely gened as its right-hand-side string of symbols
+was contained in the other closure state gened productions.
+When this premature production's closure state is finally generating all its productions,
+common conflict states from a past closure generation that
+include premature gened
+productions must also be assessed for state conflicts.
+There is a commonality between the conflict states per gened closure states
+due to their productions that contributed to this conflict state list and so these
+common states must be added to the premature closure state's conflict state list.
+The premature gened production could be reducing whilst its common production
+that dragged it along could be shifting or reducing. The reverse could also be happening:
+the being gened production could be reducing while the premature
+production shifting.
+Thus a proposed merge into a state of this closure state must also
+have these common conflict states assessed for lr1ness.
+
+A good example of this is situation is Deremer and Pennello's paper on
+``Efficient computation of lalr(1) lookahead sets''
+ACM Transactions on Programming Language and Systems:
+Vol. 4 no. 4 October 1982 Page 632.
+Please see my gened grammar ``lalr\_dp1.lex'' illustrating this.\fbreak
+\fbreak
+Pathological grammar condition:\fbreak
+Not lr1 grammar where the gening closure state network is not lr1.
+So must flag the |gen_a_state| with a returned result: continue or stop.
+
+To stop infinite looping within its own closure state / vector being gened,
+make sure new state being added is lr1 compatible!
+Instead of analysing the gened network for lr1 compatibility after it is built, do a
+compatibilty test while it is being built. This stops the infinite looping context!\fbreak
+\fbreak
+There are 2 not lr1 compatibilty contexts:\fbreak
+\ptindent{1) can a state be merged into another closure state's network}
+\ptindent{2) can not merge and its is not a kosher lr(1) grammar}
+Point 1) tests the merge for incompatibility and rejects the merge.
+This does not mean that the grammar is incompatible but that the merged contexts make it incompatible.
+Point 2) is a state within its own closure state/vector environment which is not okay.
+
+@<Structure implementations@>+=
+bool state::gen_a_state
+ (gen_context& For_gening_context
+ ,state& For_closure_state
+ ,state& Requesting_state,S_VECTORS_ITER_type& Elem_iter){
+@<Increment and printout Recursion counter@>;
+lrclog << "gen_a_state for <"
+<< For_gening_context.for_closure_state_->state_no_
+<< ","
+<< For_gening_context.gen_vector_
+<< "> requesting state: "
+<< Requesting_state.state_no_
+<< endl;
+
+ gen_context associated_rt_bnded_cs(0,-1);
+ Voc_ENO eno = Elem_iter->first;
+ S_VECTOR_ELEMS_type elem_list = Elem_iter->second;
+ S_VECTOR_ELEMS_ITER_type i = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type ie = elem_list.end();
+ bool compatible(false);
+ for(;i !=ie;++i){// read symbol's element list to gen
+ state_element* se = *i;
+ @<is state's element associated with gened closure state? no bypass@>;
+ @<common prefix gened goto state? yes deal with its goto state@>;
+ @<create a new state@>;
+ @<can new state be merged into state network? yes erase its existance and exit@>;
+ add_state_to_gbl_lr1_state_tbls(s);
+@<Printout Recursion counter@>;
+
+lrclog << "gen_a_state for <"
+<< For_gening_context.for_closure_state_->state_no_
+<< ","
+<< For_gening_context.gen_vector_
+<< "> requesting state: "
+<< Requesting_state.state_no_
+<< " NEW STATE CREATED: "
+<< s->state_no_
+<< endl;
+ add_state_to_conflict_states_list_if(For_gening_context,*s);
+ compatible= is_state_lr1_compatible(*s);//is new state to be added lr1 compatible?
+ if(compatible==NOT_LR1_COMPATIBLE){// added
+ @<Decrement Recursion counter@>;
+ return NOT_LR1_COMPATIBLE;// stop gening: note state added before test as if not lr1 reports properly why
+ }
+//|Print_dump_state(s);|
+ s->state_type_ = determine_reduced_state_type(s);
+ bool gen_ok = gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*s);
+ @<Decrement Recursion counter@>;
+ return gen_ok;// state gened so finished going thru element list
+ }
+ @<Decrement Recursion counter@>;
+
+ return LR1_COMPATIBLE;
+}
+
+@*4 Is element vector associated with the current closure state being gened?.
+@<is state's element associated with gened closure state? no bypass@>=
+ if ((
+ (se->cs_vector_combo_gening_it_.for_closure_state_ == For_gening_context.for_closure_state_)
+ &&
+ (se->cs_vector_combo_gening_it_.gen_vector_ == For_gening_context.gen_vector_)
+ ) != true){
+@<Printout Recursion counter@>;
+lrclog << "gen_a_state Bypass subrule as its gening <"
+<< se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<< ","
+<< se->cs_vector_combo_gening_it_.gen_vector_
+<< "> different then gening <"
+<< For_gening_context.for_closure_state_->state_no_
+<< ","
+<< For_gening_context.gen_vector_
+<< ">"
+<< endl;
+ continue;
+ }
+
+@*4 Is element gened from common prefix of an earlier closure state gen?.
+@<common prefix gened goto state? yes deal with its goto state@>=
+ if(se->goto_state_ != 0){
+@<Printout Recursion counter@>;
+
+lrclog << "gen_a_state subrule COMMON PREFIX state gened by a different gening context. <"
+<< se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<< ","
+<< se->cs_vector_combo_gening_it_.gen_vector_
+<< "> goto state: "
+<< se->goto_state_->state_no_
+<< endl;
+ add_state_to_conflict_states_list_if(For_gening_context,*se->goto_state_);
+ bool gen_ok = gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*se->goto_state_);
+ @<Decrement Recursion counter@>;
+ return gen_ok;
+ }
+@*4 Create a new state.
+@<create a new state@>=
+ state* s = new state(eno,se->sr_def_element_);
+ s->closure_state_birthing_it_ = For_gening_context.for_closure_state_;
+ s->cs_vector_combo_gening_it_ = For_gening_context;
+ S_VECTOR_ELEMS_ITER_type j = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type je = elem_list.end();
+
+ bool rt_bnded = s->crt_core_items_of_state(j,je,For_gening_context);
+ if(rt_bnded == true){
+ associated_rt_bnded_cs = For_gening_context;
+ }else{
+ associated_rt_bnded_cs.for_closure_state_=0;
+ associated_rt_bnded_cs.gen_vector_=-1;
+ }
+ s->add_closure_rules_subrules_to_state(associated_rt_bnded_cs,*s);
+ s->create_follow_sets_of_state();
+
+@*4 Can new state be merged into state network? Yes then exit.\fbreak
+Watch for indicator to stop gening the states
+caused by ``not lr1 compatibile'' while gening the closure state network.
+@<can new state be merged into state network? yes erase its existance and exit@>=
+ int compatibility_result = find_2_states_compatible_and_merge(*s);
+ switch(compatibility_result){
+ case MERGED:{
+ delete s;
+ @<Decrement Recursion counter@>;
+ return true;// keep gening
+ }
+ case ABORT_GENING_STATES:{
+ @<Decrement Recursion counter@>;
+ return NOT_LR1_COMPATIBLE;// stop gening
+ }
+ case NOT_MERGED:{
+ break; // continue the |gen_a_state| logic by fall through
+ }
+ }
+
+@*3 |determine_reduced_state_type|.\fbreak
+Determines the ``lrness'' of the state: no conflict --- shift(s) or reduce(s) only,
+conflict: shift / reduce, multiple reduces, shift(s) with mutiple reduces.
+@<Structure implementations@>+=
+int state::determine_reduced_state_type(state* S){
+ // rtned 0 so, 1 ro, 2 s/r, 3 r2 , 4 s/r2
+ using namespace NS_yacco2_T_enum;
+ int no_reduces(0);
+ int no_reduce_types(0);
+ S_VECTORS_ITER_type svi = S->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = S->state_s_vector_.end();
+ S_VECTORS_ITER_type tvi = S->state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+ if(tvi != svie){
+ no_reduces += tvi->second.size();
+ ++no_reduce_types;
+ }
+ tvi = S->state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+ if(tvi != svie){
+ no_reduces += tvi->second.size();
+ ++no_reduce_types;
+ }
+ tvi = S->state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+ if(tvi != svie){
+ no_reduces += tvi->second.size();
+ ++no_reduce_types;
+ }
+ if(no_reduces > 1) no_reduces = 3;
+ if(S->state_s_vector_.size()>no_reduce_types){// shift present
+ if(no_reduce_types > 0){// combo
+ ++no_reduces;// combo shift / reduce
+ }
+ }
+ return no_reduces;
+}
+
+@*3 |add_state_to_gbl_lr1_state_tbls|.\fbreak
+@<Structure implementations@>+=
+void state::add_state_to_gbl_lr1_state_tbls(state* State){
+ ++NO_LR1_STATES;
+ State->state_no_ = NO_LR1_STATES;
+ LR1_STATES.push_back(State);
+ Voc_ENO eno = State->vectored_into_by_elem_;
+ LR1_STATES_ITER_type i = LR1_COMMON_STATES.find(eno);
+ if(i == LR1_COMMON_STATES.end()){
+ LR1_COMMON_STATES[eno] = STATES_type();
+ i = LR1_COMMON_STATES.find(eno);
+ }
+ i->second.push_back(State);
+ }
+
+@*3 |add_state_to_conflict_states_list_if|.\fbreak
+If newly created state has ``eosubrule'' in its vector map,
+there are 2 possibilities that make it a conflict state:\fbreak
+\ptindent{1) reduce / reduce --- more than 1 production whose string is consumned}
+\ptindent{2) shift / reduce --- one reduce with a shift}
+@<Structure implementations@>+=
+void state::add_state_to_conflict_states_list_if(gen_context& Gening_context,state& State){
+ S_VECTORS_ITER_type i = State.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+ if(i != State.state_s_vector_.end()) goto reduce_fnd;
+ return;
+ reduce_fnd:;
+ if(i->second.size() > 1){// reduce / reduce
+ Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+ return;
+ }
+ if(State.state_s_vector_.size() < 2) return;
+ Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+}
+
+@*1 {\bf{General routines on state compatibilities}}.
+
+@*2 Determining if 2 states are equivalent?.\fbreak
+As an aid to quickly determine whether 2 states are equal,
+each state except the ``closure-state''
+has an element going into it: proxies ``rule-ref'' or ``T-ref''
+are references to their definitions. They are general classifications
+of the items whose contents
+refer to the specific definition. ``eosubrule'' is excluded from this as it
+does not generate any states.
+Why use the definitions? I need a unique identifier and this only comes from the definition.
+The ``closure-only'' (start) state has no entry.
+
+State equivalence is arrived at by:\fbreak
+\ptindent{1) the ``entered into'' element generating each state must be identical}
+\ptindent{2) State's A ``to vector'' map must be the same size as B}
+\ptindent{3) A's ``to vector''\ 's keys must be the same as B}
+\ptindent{4) A's ``to vector''\ 's state element list's contents must be the same as B}
+Point 4: why the state's element list ordered? One can have a state whereby
+its elements order are not the same but the ``to vector'' result is.
+Give me a real example
+as i'm a doubter.\fbreak
+\settabs\+\indent&1in\qquad&\qquad&\qquad&\cr
+\+&\it Rule&&{\it subrule's symbols}\cr
+\+&Rab &$\rightarrow$ &a b\cr
+\+&Rac &$\rightarrow$ &a c\cr
+\+&Rad &$\rightarrow$ &Rab\cr
+\+&&$\rightarrow$ &Rac\cr
+\+&Rae &$\rightarrow$ &Rac\cr
+\+&&$\rightarrow$ &Rab\cr
+
+Rad or Rae inside other productions should allow the merge of Rab, Rac.\fbreak
+\fbreak
+Constraints:\fbreak
+\ptindent{1) state's vector is a map ordered by Voc\_ENO}
+\ptindent{2) state elements list ordered by tree address}
+@<Structure implementations@>+=
+bool state::are_states_equivalent(state& Merge_into_state,state& To_merge_state){
+ if(Merge_into_state.vectored_into_by_elem_ != To_merge_state.vectored_into_by_elem_){
+ return false;
+ }
+ if(Merge_into_state.state_s_vector_.size() != To_merge_state.state_s_vector_.size()){
+ return false;
+ }
+ S_VECTORS_ITER_type i = Merge_into_state.state_s_vector_.begin();
+ S_VECTORS_ITER_type ie = Merge_into_state.state_s_vector_.end();
+ S_VECTORS_ITER_type j = To_merge_state.state_s_vector_.begin();
+ S_VECTORS_ITER_type je = To_merge_state.state_s_vector_.end();
+ for(;i!=ie;++i,++j){
+ Voc_ENO ieno = i->first;
+ Voc_ENO jeno = j->first;
+ if(ieno != jeno) {
+ return false;
+ }
+ if(i->second.size() != j->second.size()){
+ return false;
+ }
+ S_VECTOR_ELEMS_ITER_type l = i->second.begin();
+ S_VECTOR_ELEMS_ITER_type le = i->second.end();
+ S_VECTOR_ELEMS_ITER_type m = j->second.begin();
+ S_VECTOR_ELEMS_ITER_type me = j->second.end();
+ for(;l!=le;++l,++m){
+ state_element* ls = *l;
+ state_element* ms = *m;
+ if(ls->sr_element_ != ms->sr_element_){
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+@*2 |is_state_lr1_compatible|.\fbreak
+\ptindent{0) check if it's a s/r or r/r type state no exit as compatible}
+\ptindent{1) Fill in its lookahead per reducing subrule}
+\ptindent{1.5) make sure that its reducing set is not empty! or not lr1 compatible}
+\ptindent{2) calculate state's T shift set}
+\ptindent{3) do a set intersection on all these sets}
+The resulting set must be empty to be LR1 compatible.
+To be more efficient i use a T count as i do not have to report on
+what type of non compatibility produced it nor between whom: reduce / reduce or shift /reduce.
+The cost is to read each set while being gened and add up each item's referenced count:
+not the combinatorics between each set.
+
+Add check on eolr presence:
+Eg, eolr in la expression only, it is not exploded.
+This leads to the bug that a shift/reduce is incompatible.
+Somehow i must have optimized this out from |la_expr| grammar.
+So if there are 2 or more reduces taking place and eolr is present -> not lr1.
+Same goes for shift/reduce condition.
+@<Structure implementations@>+=
+bool state::is_state_lr1_compatible(state& State_to_eval){
+ T_COUNT_type t_cnt(START_OF_RULES_ENUM);
+ for(int x=0;x<START_OF_RULES_ENUM;++x) t_cnt[x] = 0;
+ S_VECTORS_ITER_type i;
+ i = State_to_eval.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+ if(i!=State_to_eval.state_s_vector_.end()){
+ goto assess_state;
+ }
+ i = State_to_eval.state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+ if(i!=State_to_eval.state_s_vector_.end()){
+ goto assess_state;
+ }
+ i = State_to_eval.state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+ if(i!=State_to_eval.state_s_vector_.end()){
+ goto assess_state;
+ }
+ return LR1_COMPATIBLE;
+assess_state:@/
+ int no_reduces = 0;
+ S_VECTOR_ELEMS_ITER_type j = i->second.begin();
+ S_VECTOR_ELEMS_ITER_type je = i->second.end();
+bool T_not_meta(false);
+ for(;j!=je;++j){// fill in lookahead per reducing subrule
+ ++no_reduces;
+ state_element* se = *j;
+ if (se->calc_la(*se) == false){
+ return NOT_LR1_COMPATIBLE;
+ }
+ LA_SET_ITER_type k = se->la_set_->begin();
+ LA_SET_ITER_type ke = se->la_set_->end();
+ for(;k!=ke;++k){
+ T_in_stbl* tintbl = *k;
+ T_ENO teno = tintbl->t_def()->enum_id();// T of new alphabet
+ if(teno <= END_OF_LR1_DEFS){
+ if(teno == LR1_EOG){
+ T_not_meta = true;
+ }
+ }else{
+ T_not_meta = true;
+ }
+ ++t_cnt[teno];
+ if(t_cnt[teno] > 1) return NOT_LR1_COMPATIBLE;
+ }
+ }
+ if(no_reduces > 1){// reduces > 1 where eolr super set to others
+ if(T_not_meta == true){
+ if(t_cnt[LR1_EOLR] > 0) return NOT_LR1_COMPATIBLE;
+ }
+ }
+ // shift / reduce evaluation
+ // shift type not of meta Tes \QUEshift, \ALLshift etc
+ S_VECTORS_ITER_type l = State_to_eval.state_s_vector_.begin();
+ S_VECTORS_ITER_type le = State_to_eval.state_s_vector_.end();
+ for(;l!=le;++l){// T shift set of state
+ Voc_ENO t = l->first;
+ if(t == -T_Enum::T_T_eosubrule_) continue;
+ if(t == -T_Enum::T_T_null_call_thread_eosubrule_) continue;
+ if(t == -T_Enum::T_T_called_thread_eosubrule_) continue;
+ if(t == T_Enum::T_refered_rule_) continue;
+ S_VECTOR_ELEMS_ITER_type m = l->second.begin();
+ state_element* se = *m;
+ CAbs_lr1_sym* sym = AST::content(*se->sr_element_);
+ T_ENO tid = sym->enumerated_id__;
+ switch(tid){
+ case T_Enum::T_refered_T_:{
+ @<get cast referenced T@>;
+ T_in_stbl* tintbl = rt->t_in_stbl();
+ T_ENO teno = tintbl->t_def()->enum_id();// T of new alphabet
+ if(teno <= END_OF_LR1_DEFS){
+ if(teno != LR1_EOG){
+ continue; // bypass the meta Tes
+ }
+ }
+ ++t_cnt[teno];
+ if(t_cnt[teno] > 1) return NOT_LR1_COMPATIBLE;
+if(teno>END_OF_LR1_DEFS){// specific shift against eolr usuage
+ if(t_cnt[LR1_EOLR]> 0)return NOT_LR1_COMPATIBLE;
+}
+ }
+ }
+ }
+ return LR1_COMPATIBLE;
+}
+
+@*2 |are_2_states_compatible_yes_merge|.\fbreak
+Is it LR1 compatible?
+If |To_merge_into_state|'s closured-generating
+state has no conflict states then it's straight sailing.
+To determine if the mariage is compatible, the conflict states
+must be checked with the new follow set info supplied
+by |State_for_merging| birthing ``closured context''.
+Let's review the LR1 conditions:\fbreak
+\ptindent{1) a conflict state has at least a reduce / reduce or reduce / shift condition}
+\ptindent{2) reduced lookaheads must be regened with the new closured follow set context}
+Point 2's ``new closured follow set'' context comes from the closured states
+of |State_for_merging|'s productions.
+To do the check i must merge the new follow set contexts of |To_merge_into_state|'s
+birth state per transitive
+production.
+Why? These are the potential follow set contexts where each production was born.
+Now generate the lookahead for each conflict state's reduces and
+then see whether all the conflict states are kosher.
+An incompatibility just requires rolling back the new follow set context
+from each of the proposed production's birthing states of |To_merge_into_state|.
+
+A kosher merge requires that the spawning state must unlink each of its
+spawned productions
+to the new state's
+``goto'' and ``reduce''
+links and latch into the merged state's productions linkages.
+\fbreak
+\fbreak
+A caveat: {\bf {infinite states gened when a merge into its own closure state network is not lr(1)}}.\fbreak
+Spector's {\bf {/usr/local/yacco2/qa/lr1\_sp2.lex}} grammar illustrates when
+the closure state 2's start gening vector:{\bf{x}} produces its own states.
+Now state 2's brethern vector: {\bf{y}} gets gened and has the potential
+to merge into one of x's states but the potential merge is not lr(1).
+Cuz state's 2 two closure state's vectors are different(x,y), this
+means that their gened states can be separate as long as the lr(1) constraint is respected.
+So y's states are
+separate from vectored:x and not merged into x's states due to lr(1) constraint.
+So continue gening closure state 2's y's states.
+If down the road gening y's states are not lr(1) then abort the generation
+and issue such a message.
+The not lr(1) condition is specific to the closure state's gening vector and not due to a merge into another's
+state network that is kosher.
+
+What happens when a closure state's vector is gened and one of its states is not
+lr(1) whether being merged into or not within itsself states network?
+{\bf{/usr/local/yacc2/qa/knu1\_sick.lex}} grammar illustrates this situation.
+Have a read of its pdf document, as it talks about the situation and how it came about.
+This situation is a legitimate non lr(1) grammar and so put on the brakes to generating
+its states.
+Another example is: {\bf{lr1\_sp6.lex}} where the start rule has a subrule (production)
+and it is epsilonable. Ditto on the reading.\fbreak
+\fbreak
+So the terminating condition is:\fbreak
+1) not lr(1) within its own closure state's vector generated states\fbreak
+
+@<Structure implementations@>+=
+int
+state::
+are_2_states_compatible_yes_merge(state& To_merge_into_state,state& State_for_merging){
+ state* cs_To_merge_into = To_merge_into_state.closure_state_birthing_it_;
+ state* cs_for_merging = State_for_merging.closure_state_birthing_it_;
+
+ @<add potential follow set context per production@>;
+ bool compatible(false);
+ if(cs_To_merge_into->state_s_conflict_state_list_.empty() == true) goto merged;
+lr1_test:@/
+{
+ S_CONFLICT_STATES_ITER_type k = cs_To_merge_into->state_s_conflict_state_list_.begin();
+ S_CONFLICT_STATES_ITER_type ke = cs_To_merge_into->state_s_conflict_state_list_.end();
+ for(;k!=ke;++k){// evaluate lr1 compatibility
+ state* s = *k;
+
+ compatible = s->is_state_lr1_compatible(*s);
+
+ if(compatible == NOT_LR1_COMPATIBLE) goto unwind_merge;
+ }
+}
+merged:@/
+{
+ @<relink spawning state of merged state@>;
+ return MERGED;
+}
+
+unwind_merge:{@/
+
+unwind:;@/
+ @<unwind potential merge@>;
+ return NOT_MERGED;
+}
+ return NOT_MERGED;
+}
+
+@*4 Add potential follow set context per production.\fbreak
+Only work with the core items.
+@<add potential follow set context per production@>=
+ RULE_NOS_SET_type rules_to_add;
+ S_VECTORS_ITER_type sfmi = To_merge_into_state.state_s_vector_.begin();
+ S_VECTORS_ITER_type sfmie = To_merge_into_state.state_s_vector_.end();
+ S_VECTORS_ITER_type msfmi = State_for_merging.state_s_vector_.begin();
+ for(;sfmi!=sfmie;++sfmi,++msfmi){
+ S_VECTOR_ELEMS_ITER_type rri = sfmi->second.begin();
+ S_VECTOR_ELEMS_ITER_type mrri = msfmi->second.begin();
+ S_VECTOR_ELEMS_ITER_type rrie = sfmi->second.end();
+ for(;rri!=rrie;++rri,++mrri){
+ state_element* re = *rri;
+ state_element* mre = *mrri;
+ if(re->closure_state_ == re->self_state_) continue;// not a core item
+ RULE_ENO ruleno = re->find_state_element_s_rule_no();
+ S_FOLLOW_SETS_ITER_type j = re->closure_state_->state_s_follow_set_map_.find(ruleno);
+ follow_element* fe = j->second;
+ RULE_NOS_SET_ITER_type rni = rules_to_add.find(ruleno);
+ if(rni == rules_to_add.end()){
+ fe->add_merge_closure_info(*mre->closure_state_);
+ rules_to_add.insert(ruleno);
+ }
+ }
+ }
+@*4 Relink spawning state of merged state.
+@<relink spawning state of merged state@>=
+ S_VECTORS_ITER_type ri = State_for_merging.state_s_vector_.begin();
+ S_VECTORS_ITER_type rie = State_for_merging.state_s_vector_.end();
+ S_VECTORS_ITER_type si = To_merge_into_state.state_s_vector_.begin();
+ for(;ri!=rie;++ri,++si){
+ S_VECTOR_ELEMS_ITER_type rri = ri->second.begin();
+ S_VECTOR_ELEMS_ITER_type rrie = ri->second.end();
+ S_VECTOR_ELEMS_ITER_type ssi = si->second.begin();
+ for(;rri!=rrie;++rri,++ssi){
+ state_element* re = *rri;
+ state_element* se = *ssi;
+ if(re->previous_state_element_ == 0) continue;
+ state_element* prev_re = re->previous_state_element_;
+ prev_re->goto_state_ = se->self_state_;
+ prev_re->reduced_state_ = se->reduced_state_;
+ prev_re->next_state_element_ = se;
+ // walk thru the rhs backwards laying those reduce eggs
+ for(prev_re = prev_re->previous_state_element_;
+ prev_re != 0;prev_re = prev_re->previous_state_element_){// deposit reducing state
+ prev_re->reduced_state_ = se->reduced_state_;
+ }
+ }
+ }
+ @<add conflict states to to merge network@>;
+
+@*4 Add conflict states to merge network.\fbreak
+For now add all the conflict states until i refine a map of states
+that derives each specific conflict state.
+
+If the merged state is part of the current network being gened then bypass.
+Why? The conflict states are already registered that appliy to this merged state
+cuz its part of this closured generating state containing the conflist state list.
+@<add conflict states to to merge network@>=
+ if(cs_for_merging->cs_vector_combo_gening_it_.for_closure_state_
+ != cs_To_merge_into->cs_vector_combo_gening_it_.for_closure_state_){
+ S_CONFLICT_STATES_ITER_type k = cs_To_merge_into->state_s_conflict_state_list_.begin();
+ S_CONFLICT_STATES_ITER_type ke = cs_To_merge_into->state_s_conflict_state_list_.end();
+ for(;k!=ke;++k){
+ state* s = *k;
+ cs_for_merging->state_s_conflict_state_list_.push_back(s);
+ }
+ }
+
+ @*4 Unwind potential merge.
+ @<unwind potential merge@>=
+ RULE_NOS_SET_type rules_to_add;
+ S_VECTORS_ITER_type sfmi = To_merge_into_state.state_s_vector_.begin();
+ S_VECTORS_ITER_type sfmie = To_merge_into_state.state_s_vector_.end();
+ for(;sfmi!=sfmie;++sfmi){
+ S_VECTOR_ELEMS_ITER_type rri = sfmi->second.begin();
+ S_VECTOR_ELEMS_ITER_type rrie = sfmi->second.end();
+ for(;rri!=rrie;++rri){
+ state_element* re = *rri;
+ if(re->closure_state_ == re->self_state_) continue;// not a core item
+ RULE_ENO ruleno = re->find_state_element_s_rule_no();
+ S_FOLLOW_SETS_ITER_type j = re->closure_state_->state_s_follow_set_map_.find(ruleno);
+ follow_element* fe = j->second;
+ RULE_NOS_SET_ITER_type rni = rules_to_add.find(ruleno);
+ if(rni == rules_to_add.end()){
+ fe->remove_merge_closure_info();
+ rules_to_add.insert(ruleno);
+ }
+ }
+ }
+
+@*2 |find_2_states_compatible_and_merge|.\fbreak
+Read the |LR1_COMMON_STATES| table looking for states with
+the same enumerate and same state core items.
+@<Structure implementations@>+=
+int state::find_2_states_compatible_and_merge(state& State_for_merging){
+ Voc_ENO eno = State_for_merging.vectored_into_by_elem_;
+ LR1_STATES_ITER_type i = LR1_COMMON_STATES.find(eno);
+ if(i == LR1_COMMON_STATES.end()){
+ return NOT_MERGED;
+ }
+ STATES_ITER_type j = i->second.begin();
+ STATES_ITER_type je = i->second.end();
+ for(;j!=je;++j){
+ state* s = *j;
+ bool equivalent = are_states_equivalent(State_for_merging,*s);
+ if(equivalent == false) continue;
+ int compatible = are_2_states_compatible_yes_merge(*s,State_for_merging);
+ if(compatible == LR1_COMPATIBLE) return MERGED;
+ if(compatible == ABORT_GENING_STATES) return ABORT_GENING_STATES;
+ }
+ return NOT_MERGED;
+}
+
+@*2 |are_gened_states_lr1_compatible|.\fbreak
+Read gening state's conflict states for lr1 health check.
+@<Structure implementations@>+=
+ bool state::are_gened_states_lr1_compatible(){
+ S_CONFLICT_STATES_ITER_type i = state_s_conflict_state_list_.begin();
+ S_CONFLICT_STATES_ITER_type ie = state_s_conflict_state_list_.end();
+ if(i == ie) return LR1_COMPATIBLE;
+ for(;i!=ie;++i){
+ state* s = *i;
+ if(is_state_lr1_compatible(*s) == NOT_LR1_COMPATIBLE) return NOT_LR1_COMPATIBLE;
+ }
+ return LR1_COMPATIBLE;
+ }
+
+@*2 |is_str_rt_bnded|.\fbreak
+Determine if the production's lookahead transitions thru
+other closured state's follow sets.\fbreak
+Read the production's string positioned by it's passed parameter.
+The right bounded condition is whether the last symbol in the string is a rule
+before the ``eosubrule''. This demands that the closure productions caused by this rule
+within the state
+must also be generated as part of the being gened closure state.
+
+A subtle condition arises when the string's balance of symbols contains only rules
+that are all epsilonable. This moves the right bounded condition
+into the interior of the production currently positioned.
+Why? Epsilon is a window that allows one to see past its contents into the next adjacent
+symbol. This is inductive as it moves right thru all the epsilon rules to
+ the end-of-string.
+ Thus each rule's follow set strings transitizes rightward along
+ the production's string to its end and then up the follow sets of its spawning
+ closure rule's environment.\fbreak
+ \fbreak
+ Please note, the thread call variants do not support right-bounded expressions.
+ U'll never have a rule following the thread call prase --- this is a parsing error.
+@<Structure implementations@>+=
+bool state::is_str_rt_bnded(AST* Str){
+ AST* rstr_t = AST::brother(*Str);// get next node
+ if(rstr_t == 0) return false;// eosubule passed in for verification
+ CAbs_lr1_sym* sym = AST::content(*rstr_t);
+ Voc_ENO id = sym->enumerated_id__;
+ if(id == T_Enum::T_T_eosubrule_){
+ CAbs_lr1_sym* rsym = AST::content(*Str);
+ if(rsym->enumerated_id__ == T_Enum::T_refered_rule_){
+ return true;
+ }
+ }
+ return is_str_epsilonable(rstr_t);
+}
+@*2 |is_str_epsilonable|.\fbreak
+The symbol string passed is one to the right
+of the current item within the state called the ``follow string''.
+From this point within the production string,
+ the balance of the symbols must be composed of
+ ``refered-rule'' having the epsilon attribute.
+Remember: the grammar is internally represented by a tree where
+each node of a production contains a ``refered-rule'', ``refered-T'', or an ``eosubrule''.
+Thread calls is not applicable. It is never epsilonable.
+@<Structure implementations@>+=
+bool state::is_str_epsilonable(AST* Str){
+ AST* str_t = Str;
+ for(;str_t != 0;str_t = AST::brother(*str_t)){
+ CAbs_lr1_sym* sym = AST::content(*str_t);
+ Voc_ENO id = sym->enumerated_id__;
+ @<is str's element epsilon@>;
+ }
+ return true;
+}
+
+@*3 Is str's element epsilon?.\fbreak
+The tree node's symbol must be a rule or ``eosubrule''.
+``eosubrule'' indicates
+either the empty string (epsilon) where it is the only symbol within
+the production
+or the end of the production's string of symbols.
+@<is str's element epsilon@>=
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @<get cast referenced rule@>;
+ rule_def* rd = rr->its_rule_def();
+ if(rd->epsilon() != true) return false;
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ return true;
+ }
+ case T_Enum::T_refered_T_:{
+ return false;
+ }
+ }
+
+@*1 {\bf{Follow set routines}}.
+@*2 |add_rule_to_follow_list|.
+@<Structure implementations@>+=
+ void state::add_rule_to_follow_list(RULE_ENO Refered_rule){
+ FOLLOW_RULES_ITER_type i = follow_rule_list_.find(Refered_rule);
+ if(i == follow_rule_list_.end()){
+ follow_rule_list_.insert(Refered_rule);
+ }
+}
+
+@*2 |create_follow_sets_of_state|.\fbreak
+The list contains the rule's enumerate value.
+This is used to get the |state_s_vector_[rule no]| context
+that makes up the state.
+ It supplies the context in the subrule(s) where it resides.
+The follow set is
+calculated from the symbol string(s) to the right of these subrule context.
+@<Structure implementations@>+=
+void state::create_follow_sets_of_state(){
+ if(follow_rule_list_.empty() == true) return;
+ RULE_ENO eno(-1);
+ FOLLOW_RULES_ITER_type i = follow_rule_list_.begin();
+ FOLLOW_RULES_ITER_type ie = follow_rule_list_.end();
+ for(;i!=ie;++i){// create initial follow set map entries
+ follow_element* fe = new follow_element(this);
+ eno = *i;
+ fe->rule_no_ = eno;
+ state_s_follow_set_map_[eno] = fe;
+ }
+
+ i = follow_rule_list_.begin();
+ for(;i!=ie;++i){// read rules
+ eno = *i;
+ S_VECTORS_ITER_type j = state_s_vector_.find(eno);
+ S_FOLLOW_SETS_ITER_type fsi = state_s_follow_set_map_.find(eno);
+ follow_element* fe = fsi->second;
+
+ S_VECTOR_ELEMS_ITER_type k = j->second.begin();
+ S_VECTOR_ELEMS_ITER_type ke = j->second.end();
+ for(;k!=ke;++k){// read subrule context
+ state_element* se = *k;
+ @<get subrule's referenced rule in follow string@>;
+ AST* follow_str_t = AST::brother(*se->sr_element_);
+ deal_with_follow_str_sym:;
+ fe->rule_def_t_ = rr->its_rule_def()->rule_s_tree();
+ fe->add_follow_set_contributor(follow_str_t);
+ CAbs_lr1_sym* sym = AST::content(*follow_str_t);
+ Voc_ENO id = sym->enumerated_id__;
+ @<deal with current follow string element@>;
+ }
+ }
+}
+@
+@<deal with current follow string element@>=
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @<get cast referenced rule@>;
+ rule_def* rd = rr->its_rule_def();
+ if(rd->first_set()->empty() != true){
+ FIRST_SET_ITER_type a = rd->first_set()->begin();
+ FIRST_SET_ITER_type ae = rd->first_set()->end();
+ for(;a!=ae;++a){
+ T_in_stbl* t = *a;
+ if(fe->follow_set_.find(t)== fe->follow_set_.end()){
+ fe->follow_set_.insert(t);
+ }
+ }
+ }
+ if(rd->epsilon() == true){// next follow str symbol
+ follow_str_t = AST::brother(*follow_str_t);
+ goto deal_with_follow_str_sym;
+ }
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ @<get cast referenced eosubrule@>;
+ fe->add_follow_set_transition(*se,*eos);
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @<get cast referenced T@>;
+ fe->follow_set_.insert(rt->t_in_stbl());
+ break;
+ }
+ }
+
+@
+@<get subrule's referenced rule in follow string@>=
+ @=refered_rule* rr = (refered_rule*)AST::content(*se->sr_element_);@>@/
+@
+@<get cast referenced rule@>=
+ @=refered_rule* rr = (refered_rule*)sym;@>@/
+
+@
+@<get cast referenced T@>=
+ @=refered_T* rt = (refered_T*)sym;@>@/
+
+@
+@<get cast referenced eosubrule@>=
+ @=T_eosubrule* eos = (T_eosubrule*)sym;@>@/
+@
+@<get cast referenced null called thread eosubrule@>=
+ @=T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;@>@/
+@
+@<get cast referenced called thread eosubrule@>=
+ @=T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;@>@/
+
+@*2 |crt_start_rule_s_follow_set|.\fbreak
+What is the follow set for the Start rule and should there be one anyway?
+There is only the empty string so what's it follow string? Empty?
+Here's the scoop. A monolithic grammar force an ``eolr'' terminal. This covers
+the end-of-the grammar process and homogenizes it in the same manner as threaded grammars.
+For the thread grammar
+use its calculated ``parallel-la-boundary'' expression.
+This is its follow set.
+The second question raised allows the Start rule's productions to
+reduce as accepted.
+@<Structure implementations@>+=
+ void state::crt_start_rule_s_follow_set(AST& Start_rule){
+ CAbs_lr1_sym* sym = AST::content(Start_rule);
+ @=rule_def* rd = (rule_def*)sym;@>;
+ RULE_ENO rno = rd->enum_id();
+ follow_element* fe = new follow_element(this);
+ fe->rule_no_ = rno;
+ state_s_follow_set_map_[rno] = fe;
+ fe->rule_def_t_ = rd->rule_s_tree();
+ if(O2_PP_PHASE == 0){// monolithic: use eolr not eog
+ fe->follow_set_.insert(STBL_T_ITEMS[LR1_EOLR]);
+ }else{// thread: use calculate lookahead expression
+ T_parallel_parser_phrase* pp_ph = O2_PP_PHASE;
+ T_parallel_la_boundary* la = pp_ph->la_bndry();
+ LA_SET_ITER_type i = la->la_first_set()->begin();
+ LA_SET_ITER_type ie = la->la_first_set()->end();
+ for(;i!=ie;++i){
+ T_in_stbl* t = *i;
+ FOLLOW_SETS_ITER_type j = fe->follow_set_.find(t);
+ if(j == fe->follow_set_.end()){
+ fe->follow_set_.insert(t);
+ }
+ }
+ }
+
+ }
+
+@*1 {\bf{For tracing facilities}}.
+@*2 |entry_symbol_literal|.\fbreak
+@<Structure implementations@>+=
+ const char* state::entry_symbol_literal(){
+ if(vectored_into_by_elem_sym_ == 0) return " No symbol";
+ @<return entry symbol literal@>;
+ }
+
+@*3 Return entry symbol literal.\fbreak
+Eases tracing of lr states easier instead of just displaying its enumerated value.
+@<return entry symbol literal@>=
+ Voc_ENO id = vectored_into_by_elem_sym_->enumerated_id__;
+ CAbs_lr1_sym* sym = vectored_into_by_elem_sym_;
+ switch(id){
+ case T_Enum::T_rule_def_:{
+ @=rule_def* rd = (rule_def*)sym;@>@/
+ return rd->rule_name()->c_str();
+ }
+ case T_Enum::T_T_eosubrule_:{
+ return "eos";
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ return "null-eos";
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ return "called-thd-eos";
+ break;
+ }
+ case T_Enum::T_T_terminal_def_:{
+ @=T_terminal_def* td = (T_terminal_def*)sym;@>@/
+ return td->t_name()->c_str();
+ }
+ default:{// cuz apple's latest compiler: symantic analysis error-never reached
+ return "null-eos";
+ break;
+ }
+ }
+
+@** Emit FSA, FSC, and Documents of grammar.\fbreak
+Finally.
+This is a hodge/podge of routines to emit the ``cpp'' code,
+``first set control'' file for \o2{}linker, and
+various documents to be run thru the ``mpost, cweave, and pdftex' stages.
+A caution, under my Sun Solaris system, the ``Adobe 3rd party Readers'' like
+``gpdf and xpdf'' occassionally throw tantrums.
+I'll look into these after finishing \O2.
+
+
+@*3 Output enumeration header file.
+@<output enumeration header file@>=
+ lrclog << "Output enumeration header file " << endl;
+ OP_ENUMERATION_HEADER(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+
+@*3 Output Errors file.
+@<output Errors files@>=
+if(ERR_SW == 'y'){
+ lrclog << "Output Errors vocabulary files " << endl;
+ OP_ERRORS_HEADER(Error_queue);
+ OP_ERRORS_CPP(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+}
+
+@*3 Output User Terminals files.
+@<output User Terminals files@>=
+if(T_SW == 'y'){
+ lrclog << "Output User Terminal vocabulary files " << endl;
+ OP_USER_T_HEADER(Error_queue);
+ OP_USER_T_CPP(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+}
+
+@*3 Output grammar header file.
+ @<output grammar header file@>=
+ lrclog << "Output grammar header file " << endl;
+ OP_GRAMMAR_HEADER(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+
+@*3 Output grammar cpp file.
+ @<output grammar cpp file@>=
+ lrclog << "Output grammar cpp file " << endl;
+ OP_GRAMMAR_CPP(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+@*3 Output grammar sym file.
+ @<output grammar sym file@>=
+ lrclog << "Output grammar sym file " << endl;
+ OP_GRAMMAR_SYM(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+@*3 Output grammar tbl file.
+ @<output grammar tbl file@>=
+ lrclog << "Output grammar tbl file " << endl;
+ OP_GRAMMAR_TBL(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+
+@*3 Output T-alphabet file.
+@<output T-alphabet file@>=
+if(T_SW == 'y' || ERR_SW == 'y'){
+ lrclog << "Output User Terminal vocabulary files " << endl;
+ OP_T_Alphabet(Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+}
+
+@*3 Documents --- Grammar's Cweb and Mpost diagrams, and Cross references.\fbreak
+@<emit documents@>=
+if(PRT_SW == 'y'){
+ @<emit Cweb and Mpost files@>
+ @<print out xref docs@>
+}
+@*4 Emit Cweb and Mpost diagrams.\fbreak
+This is my attempt at producing grammar reports by |mpost| diagrams and |cweave|.
+Of course, this is recursive in that cweb uses |cweave| to generate code
+with a simple attempt at grammar's railroad diagrams.
+To do this,
+a new comment type was created --- ``/@@'' -- ``@@/'' to include
+the |cweb| directives declaring how the
+document's formatting will look like with its table of contents.
+The comment is a play on |cweave|'s directives.
+They can be sprinkled thru out the grammar except
+within the syntax-directed code constructs as
+u know, this is a character at a time lex crawler with little
+knowledge of c$++$ syntax apart from comments, literals, and strings.
+Once u become familiar with |cweave|,
+u'll never go back to base comments --- aka c$++$.
+The files emitted take on the file naming format of:\fbreak
+\ptindent{1) grammar name without its extension ``.lex'' for the filename body}
+\ptindent{2) ``.mp'' mpost extension}
+\ptindent{3) ``.w''cweb extension}
+
+As an example, a grammar of ``eol.lex'' would produce the |mpost| file 'eol.mp'
+and |cweb| file `eol.w'.
+These files are run thru |mpost| and |cweave| followed by |pdftex|
+to produce the 'pdf' grammar document.
+|mpost| generates from 'eol.mp' its figure files with numeric extensions like 'eol.1'
+that are referenced in the |cweb| file `eol.w' using the |convertMPtoPDF| macro.
+
+@<emit Cweb and Mpost files@>=
+ using namespace yacco2;
+ using namespace NS_yacco2_k_symbols;@/
+ using namespace NS_mpost_output;@/
+ lrclog << "Emit grammar's railroad diagrams for Mpost" << endl;@/
+ set<int> cweb_k_filter;@/
+ cweb_k_filter.insert(T_Enum::T_T_cweb_comment_);
+ tok_can_ast_functor mpost_just_walk_functr;
+ ast_prefix mpost_rule_walk(*GRAMMAR_TREE,&mpost_just_walk_functr,&cweb_k_filter,BYPASS_FILTER);
+ tok_can<AST*> mpost_rules_can(mpost_rule_walk);
+ Cmpost_output mpost_fsm;
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ mpost_fsm.grammar_filename_prefix_ += fsm_ph->filename_id()->identifier()->c_str();
+ mpost_fsm.fq_filename_noext_ += o2_fq_fn_noext.c_str();
+
+ Parser mpost_rules(mpost_fsm,&mpost_rules_can,0,0,&Error_queue);
+ mpost_rules.parse();
+
+@*4 Print out xref docs.\fbreak
+\ptindent{1) cross reference of used symbols: grammar's vocabulary}
+\ptindent{2) grammar's rules first sets}
+@<print out xref docs@>=
+ using namespace NS_prt_xrefs_docs;
+ yacco2::lrclog << "----- Print xref docs -----" << std::endl;
+ @=set<int> prt_xrefs_docs_filter;@>@/
+ prt_xrefs_docs_filter.insert(T_Enum::T_rule_def_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_T_subrule_def_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_refered_T_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_refered_rule_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+ prt_xrefs_docs_filter.insert(T_Enum::T_T_eosubrule_);
+
+ tok_can_ast_functor xrefs_docs_walk_functr;
+ ast_prefix prt_xrefs_docs_walk(*rules_tree
+ ,&xrefs_docs_walk_functr,&prt_xrefs_docs_filter,ACCEPT_FILTER);@/
+ tok_can<AST*> prt_xrefs_docs_can(prt_xrefs_docs_walk);
+ Cprt_xrefs_docs prt_xrefs_docs_fsm;
+ prt_xrefs_docs_fsm.grammar_filename_prefix_ += mpost_fsm.grammar_filename_prefix_;
+ prt_xrefs_docs_fsm.fq_filename_noext_ += o2_fq_fn_noext.c_str();
+ Parser prt_xrefs_docs(prt_xrefs_docs_fsm,&prt_xrefs_docs_can,0,0,&Error_queue);
+ prt_xrefs_docs.parse();
+
+@*3 Emit FSC file.\fbreak
+Let the linker know what's happening with the grammar's first set
+for the linker.
+@<emit fsc file@>=
+ OP_FSC_FILE(Error_queue);
+
+@*2 Driver to emit FSA, FSC, and Documents of grammar.
+@<emit FSA, FSC, and Documents of grammar@>=
+//|@<print grammar tree@>;|
+@<output enumeration header file@>;
+@<output Errors files@>;
+@<output User Terminals files@>;
+@<output T-alphabet file@>;
+@<output grammar header file@>;
+@<output grammar cpp file@>;
+@<output grammar sym file@>;
+@<output grammar tbl file@>;
+@<emit fsc file@>;
+@<emit documents@>;
+
+@** Print routines.
+@*2 Print tree structure of rules.
+@<print tree@>=
+ yacco2::lrclog << "Tree dump of grammar" << std::endl;
+ prt_ast_functor prt_functr(&PRINT_RULES_TREE_STRUCTURE);
+ ast_prefix pre(*GRAMMAR_TREE,&prt_functr);
+ while (pre.base_stk_.cur_stk_rec() != 0){
+ pre.exec();
+ }
+
+@*2 Print grammar tree.
+@<print grammar tree@>=
+ yacco2::lrclog << "Grammar Tree dump" << std::endl;
+ prt_ast_functor prt_grammar_functr(&PRINT_GRAMMAR_TREE);
+ ast_prefix prefix_grammar(*GRAMMAR_TREE,&prt_grammar_functr);
+ tok_can<AST*> pt_can(prefix_grammar);
+ int n(-1);
+ for(;pt_can[++n] != NS_yacco2_k_symbols::PTR_LR1_eog__;);
+
+@*2 Print dump common states.
+@<print dump common states@>=
+LR1_STATES_ITER_type ci = LR1_COMMON_STATES.begin();
+LR1_STATES_ITER_type cie = LR1_COMMON_STATES.end();
+yacco2::lrclog << "Common States dump" << std::endl;
+int cstate_no(0);
+for(;ci!=cie;++ci){
+ ++cstate_no;
+ STATES_ITER_type si = ci->second.begin();
+ STATES_ITER_type sie = ci->second.end();
+ bool pre = false;
+ for(;si!=sie;++si){
+ state* cstate = *si;
+ if(pre == false){
+ pre = true;
+ yacco2::lrclog << cstate_no << "::Common State: " << cstate->vectored_into_by_elem_;
+ if(cstate->vectored_into_by_elem_sym_ == 0){
+ yacco2::lrclog << " Entry Symbol: No symbol" << std::endl;
+ }else{
+ yacco2::lrclog << " Entry Symbol: " << cstate->entry_symbol_literal() << std::endl;
+ }
+ }
+ yacco2::lrclog << "\tstate no: " << cstate->state_no_ << std::endl;
+ }
+ yacco2::lrclog << std::endl;
+}
+
+
+@*2 Print dump state.
+@<print dump state@>=
+const char* literal_name;
+yacco2::lrclog << std::endl;
+yacco2::lrclog << "State dump" << std::endl;
+si = LR1_STATES.begin();
+sie = LR1_STATES.end();
+for(;si!=sie;++si){
+ state* cur_state = *si;
+ Print_dump_state(cur_state);
+}
+
+@*2 Some tracing facilities.
+@*3 Increment and printout Recursion counter.
+@<Increment and printout Recursion counter@>=
+@<Increment Recursion counter@>;
+@<Printout Recursion counter@>;
+
+@*3 Increment Recursion counter.
+@<Increment Recursion counter@>=
+++RECURSION_INDEX__;
+@*3 Printout Recursion counter.
+@<Printout Recursion counter@>=
+for(int y__(1);y__<=RECURSION_INDEX__;++y__) lrclog << '.';
+@*3 Decrement Recursion counter.
+@<Decrement Recursion counter@>=
+--RECURSION_INDEX__;
+
+@** Write out |o2_defs.cpp| Structure implementations.\fbreak
+@(o2_defs.cpp@>=
+#include "o2.h"
+@<Structure implementations@>;
diff --git a/web/yacco2/compiler/o2/o2_externs.cpp b/web/yacco2/compiler/o2/o2_externs.cpp
new file mode 100644
index 0000000000..1011632ec6
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_externs.cpp
@@ -0,0 +1,7278 @@
+/*7:*/
+//line 178 "./o2externs.w"
+
+/*6:*/
+//line 175 "./o2externs.w"
+
+#include "o2_externs.h"
+/*:6*/
+//line 179 "./o2externs.w"
+
+/*8:*/
+//line 184 "./o2externs.w"
+
+RULES_HAVING_AR_type RULES_HAVING_AR;
+COMMON_LA_SETS_type COMMON_LA_SETS;
+T_fsm_phrase*O2_FSM_PHASE(0);
+T_parallel_parser_phrase*O2_PP_PHASE(0);
+T_enum_phrase*O2_T_ENUM_PHASE(0);
+T_lr1_k_phrase*O2_LRK_PHASE(0);
+T_rc_phrase*O2_RC_PHASE(0);
+T_error_symbols_phrase*O2_ERROR_PHASE(0);
+T_terminals_phrase*O2_T_PHASE(0);
+T_rules_phrase*O2_RULES_PHASE(0);
+
+yacco2::AST*CWEB_MARKER(0);
+yacco2::AST*GRAMMAR_TREE(0);
+RULE_ENO START_OF_RULES_ENUM(-1);
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+/*:8*//*10:*/
+//line 204 "./o2externs.w"
+
+void prescan_mpname_for_cweb(std::string&In,std::string&Out){
+int len= In.length();
+for(int x= 0;x<len;++x){
+switch(In[x]){
+case' ':{
+Out+= '.';
+break;
+}
+case'\\':{
+if(x+1<len){
+if(In[x+1]=='\\'){
+Out+= In[x];
+++x;
+break;
+}
+Out+= In[x];
+break;
+}else{
+Out+= In[x];
+break;
+}
+}
+default:{
+Out+= In[x];
+break;
+}
+}
+}
+}
+
+/*:10*//*11:*/
+//line 236 "./o2externs.w"
+
+extern void Print_dump_state(state*State){
+/*12:*/
+//line 240 "./o2externs.w"
+
+const char*literal_name;
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<"->State: ";
+state*cur_state= State;
+literal_name= cur_state->entry_symbol_literal();
+
+yacco2::lrclog<<cur_state->state_no_<<" Entry: "<<
+cur_state->vectored_into_by_elem_
+<<" Symbol: "
+<<literal_name;
+if(cur_state->closure_state_birthing_it_!=0){
+yacco2::lrclog<<" Birthing closure state: "
+<<cur_state->closure_state_birthing_it_->state_no_;
+}
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<" Follow set:"<<std::endl;
+S_FOLLOW_SETS_ITER_type sfi= cur_state->state_s_follow_set_map_.begin();
+S_FOLLOW_SETS_ITER_type sfie= cur_state->state_s_follow_set_map_.end();
+for(;sfi!=sfie;++sfi){
+follow_element*fe= sfi->second;
+rule_def* rd = (rule_def*)AST::content(*fe->rule_def_t_);
+yacco2::lrclog<<" Rule no: "<<fe->rule_no_
+<<" Name: "<<rd->rule_name()->c_str()<<std::endl;
+
+FOLLOW_SETS_ITER_type i= fe->follow_set_.begin();
+FOLLOW_SETS_ITER_type ie= fe->follow_set_.end();
+if(i!=ie){
+yacco2::lrclog<<" follow set:"<<endl;
+yacco2::lrclog<<" ";
+}
+int nos(1);
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<"\t\t";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+
+TRANSITIONS_ITER_type j= fe->transitions_.begin();
+TRANSITIONS_ITER_type je= fe->transitions_.end();
+if(j!=je){
+yacco2::lrclog<<" transitions"<<endl;
+}
+for(;j!=je;++j){
+follow_element*tfe= *j;
+rule_def* rd = (rule_def*)AST::content(*tfe->rule_def_t_);
+yacco2::lrclog<<" S"<<tfe->its_state_->state_no_
+<<"x"<<rd->rule_name()->c_str()<<endl;
+}
+MERGES_ITER_type k= fe->merges_.begin();
+MERGES_ITER_type ke= fe->merges_.end();
+if(k!=ke){
+yacco2::lrclog<<" merges"<<endl;
+}
+for(;k!=ke;++k){
+state*s= *k;
+yacco2::lrclog<<" S"<<s->state_no_<<" ";
+}
+yacco2::lrclog<<endl;
+}
+yacco2::lrclog<<" Vectors:"<<std::endl;
+S_VECTORS_ITER_type svi= cur_state->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= cur_state->state_s_vector_.end();
+for(;svi!=svie;++svi){
+yacco2::lrclog<<" Symbol no: "<<svi->first;
+
+int first_time(0);
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+S_VECTOR_ELEMS_ITER_type selie= svi->second.end();
+for(;seli!=selie;++seli){
+state_element*se= *seli;
+if(first_time==0){
+first_time= 1;
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+yacco2::lrclog<<" Symbol: ";
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_rule_:{
+/*16:*/
+//line 484 "./o2externs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+/*:16*/
+//line 322 "./o2externs.w"
+
+rule_def*rd= rr->its_rule_def();
+yacco2::lrclog<<rd->rule_name()->c_str()<<endl;
+break;
+}
+case T_Enum::T_refered_T_:{
+/*17:*/
+//line 487 "./o2externs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:17*/
+//line 328 "./o2externs.w"
+
+T_terminal_def*td= rt->its_t_def();
+yacco2::lrclog<<td->t_name()->c_str()<<endl;
+break;
+}
+default:{
+yacco2::lrclog<<sym->id()<<endl;
+break;
+}
+
+}
+
+}
+/*13:*/
+//line 356 "./o2externs.w"
+
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+Voc_ENO id= sym->enumerated_id__;
+/*14:*/
+//line 362 "./o2externs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*16:*/
+//line 484 "./o2externs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+/*:16*/
+//line 365 "./o2externs.w"
+
+yacco2::lrclog<<" RxSRxPos: "<<rr->grammar_s_enumerate()->c_str();
+rule_def*rd= rr->its_rule_def();
+yacco2::lrclog<<" "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*18:*/
+//line 491 "./o2externs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:18*/
+//line 372 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+/*19:*/
+//line 494 "./o2externs.w"
+
+T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;
+/*:19*/
+//line 400 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;
+}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+/*20:*/
+//line 497 "./o2externs.w"
+
+T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;
+
+
+/*:20*/
+//line 429 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;
+}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_refered_T_:{
+/*17:*/
+//line 487 "./o2externs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:17*/
+//line 458 "./o2externs.w"
+
+yacco2::lrclog<<" RxSRxPos: "<<rt->grammar_s_enumerate()->c_str();
+T_terminal_def*td= rt->its_t_def();
+yacco2::lrclog<<" "<<td->t_name()->c_str();
+break;
+}
+}
+yacco2::lrclog<<" Closured S"<<se->closure_state_->state_no_;
+yacco2::lrclog<<" CS-gening-it S"<<se->closured_state_gening_it_->state_no_;
+if(se->closure_state_->state_no_!=se->closured_state_gening_it_->state_no_){
+yacco2::lrclog<<" due to rt bnd ";
+}
+if(se->goto_state_!=0){
+yacco2::lrclog<<" goto S"<<se->goto_state_->state_no_;
+}
+if(se->reduced_state_!=0){
+yacco2::lrclog<<" reduced S"<<se->reduced_state_->state_no_;
+yacco2::lrclog<<std::endl;
+}else{
+yacco2::lrclog<<" reduced S"<<"????";
+yacco2::lrclog<<std::endl;
+}
+/*:14*/
+//line 359 "./o2externs.w"
+
+
+/*:13*/
+//line 341 "./o2externs.w"
+
+}
+}
+if(cur_state->state_s_conflict_state_list_.empty()!=true){
+yacco2::lrclog<<" ===>Conflict states:"<<std::endl;
+S_CONFLICT_STATES_ITER_type csi= cur_state->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type csie= cur_state->state_s_conflict_state_list_.end();
+for(;csi!=csie;++csi){
+state*cstate= *csi;
+yacco2::lrclog<<" State no: "<<cstate->state_no_<<endl;
+}
+}
+yacco2::lrclog<<"End of state"<<std::endl;
+
+/*:12*/
+//line 238 "./o2externs.w"
+
+}
+/*:11*//*21:*/
+//line 571 "./o2externs.w"
+
+bool
+process_fsm_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_fsm&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+
+using namespace NS_fsm_phrase;
+Cfsm_phrase fsm;
+Parser p1(fsm,ip1,&op1,start_pos,er1);
+p1.parse();
+
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_fsm_phrase* t = (T_fsm_phrase*)sym;
+Phrase_to_parse.fsm_phrase(t);
+if(O2_FSM_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_fsm_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_FSM_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in fsm-phrase"<<std::endl;
+return Failure;
+}
+
+/*:21*//*22:*/
+//line 615 "./o2externs.w"
+
+void output_cweb_macros_and_banner(
+NS_mpost_output::Cmpost_output*Fsm
+,std::ofstream&Ofile
+,yacco2::KCHARP Banner
+,const char*Date
+,string*Grammar_name
+,string*Name_space
+,int No_t){
+using namespace NS_mpost_output;
+KCHARP macros=
+"\\input%s \"supp-pdf\"\n"
+"\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n";
+int x= sprintf(Fsm->big_buf_,macros," ");
+Ofile.write(Fsm->big_buf_,x);
+KCHARP banner=
+"\\DOCtitle{%s}{%s}%\n"
+"{%s}{%i}\n";
+char fname[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Grammar_name->c_str(),fname);
+char ns_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Name_space->c_str(),ns_name);
+
+x= sprintf(Fsm->big_buf_,banner
+,Banner
+,fname,ns_name,No_t);
+Ofile.write(Fsm->big_buf_,x);
+}
+
+/*:22*//*23:*/
+//line 685 "./o2externs.w"
+
+bool
+process_parallel_parser_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_parallel_parser&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_parallel_parser_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cparallel_parser_phrase pparser;
+Parser p1(pparser,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_parallel_parser_phrase* t = (T_parallel_parser_phrase*)sym;
+Phrase_to_parse.parallel_parser_phrase(t);
+if(O2_PP_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_pp_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_PP_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in parallel-parser-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:23*//*24:*/
+//line 748 "./o2externs.w"
+
+bool
+process_T_enum_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_enumeration&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_T_enum_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+CT_enum_phrase enum_ph;
+Parser p1(enum_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_enum_phrase* t = (T_enum_phrase*)sym;
+Phrase_to_parse.enum_phrase(t);
+if(O2_T_ENUM_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_T_enum_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_T_ENUM_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in t-enum-phrase"<<std::endl;
+return Failure;
+}
+
+/*:24*//*25:*/
+//line 811 "./o2externs.w"
+
+bool
+process_error_symbols_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_error_symbols&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_err_symbols_ph;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cerr_symbols_ph err_ph;
+Parser p1(err_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_error_symbols_phrase* t = (T_error_symbols_phrase*)sym;
+Phrase_to_parse.error_symbols_phrase(t);
+if(O2_ERROR_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_error_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_ERROR_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in error-symbols-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:25*//*26:*/
+//line 873 "./o2externs.w"
+
+bool
+process_rc_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_raw_characters&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_rc_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Crc_phrase rc_ph;
+Parser p1(rc_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_rc_phrase* t = (T_rc_phrase*)sym;
+Phrase_to_parse.rc_phrase(t);
+if(O2_RC_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_rc_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_RC_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in rc-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:26*//*27:*/
+//line 935 "./o2externs.w"
+
+bool
+process_lr1_k_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_lr1_constant_symbols&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_lr1_k_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Clr1_k_phrase lr_ph;
+Parser p1(lr_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_lr1_k_phrase* t = (T_lr1_k_phrase*)sym;
+Phrase_to_parse.lr1_k_phrase(t);
+if(O2_LRK_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_lrk_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_LRK_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in lr1-k-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:27*//*28:*/
+//line 999 "./o2externs.w"
+
+bool
+process_terminals_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_terminals&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_terminals_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cterminals_phrase term_ph;
+Parser p1(term_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_terminals_phrase* t = (T_terminals_phrase*)sym;
+Phrase_to_parse.terminals_phrase(t);
+if(O2_T_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_T_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_T_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in terminals-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:28*//*32:*/
+//line 1171 "./o2externs.w"
+
+bool
+process_rules_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_rules&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+/*30:*/
+//line 1138 "./o2externs.w"
+
+lrclog<<"Enumerate T alphabet"<<endl;
+using namespace NS_enumerate_T_alphabet;
+Cenumerate_T_alphabet enum_syms_fsm;
+Parser enum_syms(enum_syms_fsm,0,0,0,Calling_parser.error_queue(),0,0);
+enum_syms.parse();
+if(Calling_parser.error_queue()->empty()!=true)return Failure;
+
+/*:30*/
+//line 1179 "./o2externs.w"
+
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_rules_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Crules_phrase rule_ph;
+Parser p1(rule_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_rules_phrase* t = (T_rules_phrase*)sym;
+Phrase_to_parse.rules_phrase(t);
+if(O2_RULES_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_rule_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_RULES_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+/*31:*/
+//line 1157 "./o2externs.w"
+
+lrclog<<"Enumerate Rule alphabet"<<endl;
+int Rules_enum= START_OF_RULES_ENUM;
+RULE_DEFS_TBL_ITER_type ri= t->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type rie= t->crt_order()->end();
+int rule_no(0);
+for(;ri!=rie;++ri,++Rules_enum){
+rule_def*rd= *ri;
+++rule_no;
+rd->enum_id(Rules_enum);
+rd->rule_no(rule_no);
+}
+
+/*:31*/
+//line 1207 "./o2externs.w"
+
+return Success;
+}
+error_exit:
+lrclog<<"error in rules-phrase"<<std::endl;
+return Failure;
+}
+
+/*:32*//*34:*/
+//line 1232 "./o2externs.w"
+
+extern void
+YACCO2_PARSE_CMD_LINE
+(yacco2::CHAR&T_sw,yacco2::CHAR&ERR_sw
+,yacco2::CHAR&PRT_sw
+,std::string&Grammar_to_compile
+,yacco2::TOKEN_GAGGLE&Error_queue)
+{
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+tok_can<std::ifstream> Cmd1_tokens(Yacco2_holding_file);
+if(Cmd1_tokens.file_ok()==NO){
+yacco2::Delete_tokens(Cmd1_tokens.container());
+CAbs_lr1_sym*sym= new Err_bad_filename(Yacco2_holding_file);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Error_queue.push_back(*sym);
+return;
+}
+
+using namespace NS_o2_lcl_opts;
+TOKEN_GAGGLE lcl_options_tokens;
+Co2_lcl_opts opts_fsm;
+Parser options(opts_fsm,&Cmd1_tokens,&lcl_options_tokens,0,&Error_queue,0,0);
+options.parse();
+yacco2::Delete_tokens(Cmd1_tokens.container());
+if(Error_queue.empty()!=YES)return;
+T_sw= opts_fsm.t_sw_;ERR_sw= opts_fsm.err_sw_;
+PRT_sw= opts_fsm.prt_sw_;
+Grammar_to_compile+= opts_fsm.file_to_compile_;
+}
+
+/*:34*//*35:*/
+//line 1285 "./o2externs.w"
+
+extern void
+BUILD_GRAMMAR_TREE(yacco2::AST&Item)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+CAbs_lr1_sym*sym= AST::content(Item);
+static AST*cur_node(0);
+static AST*holding_kcweb(0);
+static AST*end_holding_kcweb(0);
+static bool rules_phrase_seen(false);
+if(sym->enumerated_id__==T_Enum::T_T_cweb_marker_){
+if(rules_phrase_seen==true){
+AST::join_sts(*cur_node,Item);
+cur_node= &Item;
+return;
+}
+if(holding_kcweb==0){
+holding_kcweb= &Item;
+}else{
+if(end_holding_kcweb==0){
+end_holding_kcweb= &Item;
+AST::join_sts(*holding_kcweb,*end_holding_kcweb);
+}else{
+AST::join_sts(*end_holding_kcweb,Item);
+end_holding_kcweb= &Item;
+}
+}
+return;
+}
+if(cur_node==0){
+CAbs_lr1_sym*gp= new T_grammar_phrase();
+gp->set_line_no_and_pos_in_line(*sym);
+gp->set_external_file_id(sym->tok_co_ords__.external_file_id__);
+GRAMMAR_TREE= new AST(*gp);
+AST::crt_tree_of_1son(*GRAMMAR_TREE,Item);
+cur_node= &Item;
+}else{
+AST::join_sts(*cur_node,Item);
+cur_node= &Item;
+}
+if(sym->enumerated_id__==T_Enum::T_T_rules_phrase_){
+rules_phrase_seen= true;
+}
+/*36:*/
+//line 1338 "./o2externs.w"
+
+if(holding_kcweb==0)return;
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest element_walk(Item,&just_walk_functr);
+tok_can<AST*> phrase_can(element_walk);
+using namespace NS_cweb_put_k_into_ph;
+Ccweb_put_k_into_ph cweb_k_fsm;
+cweb_k_fsm.initialize(holding_kcweb,&rules_phrase_seen);
+Parser cweb_k(cweb_k_fsm,&phrase_can,0);
+cweb_k.parse();
+holding_kcweb= 0;
+end_holding_kcweb= 0;
+
+/*:36*/
+//line 1330 "./o2externs.w"
+
+}
+
+/*:35*//*37:*/
+//line 1376 "./o2externs.w"
+
+void load_kw_into_tbl(yacco2::CAbs_lr1_sym*Kw){
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+const char*kwkey= Kw->id__;
+if(*kwkey=='#')++kwkey;
+kw_in_stbl*kw= new kw_in_stbl(Kw);
+add_sym_to_stbl(report_card,*kwkey,*kw,table_entry::defed,table_entry::keyword);
+kw->stbl_idx(report_card.pos_);
+}
+
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL()
+{
+using namespace yacco2_stbl;
+load_kw_into_tbl(new T_raw_characters);
+load_kw_into_tbl(new T_lr1_constant_symbols);
+load_kw_into_tbl(new T_error_symbols);
+load_kw_into_tbl(new T_eocode);
+load_kw_into_tbl(new T_AD);
+load_kw_into_tbl(new T_AB);
+load_kw_into_tbl(new T_parallel_la_boundary);
+load_kw_into_tbl(new T_arbitrator_code);
+load_kw_into_tbl(new T_parallel_parser);
+load_kw_into_tbl(new T_parallel_thread_function);
+load_kw_into_tbl(new T_parallel_control_monitor);
+load_kw_into_tbl(new T_fsm);
+load_kw_into_tbl(new T_fsm_id);
+load_kw_into_tbl(new T_fsm_filename);
+load_kw_into_tbl(new T_fsm_namespace);
+load_kw_into_tbl(new T_fsm_class);
+load_kw_into_tbl(new T_fsm_version);
+load_kw_into_tbl(new T_fsm_date);
+load_kw_into_tbl(new T_fsm_debug);
+load_kw_into_tbl(new T_fsm_comments);
+load_kw_into_tbl(new T_terminals);
+load_kw_into_tbl(new T_enumeration);
+load_kw_into_tbl(new T_file_name);
+load_kw_into_tbl(new T_name_space);
+load_kw_into_tbl(new T_sym_class);
+load_kw_into_tbl(new T_rules);
+load_kw_into_tbl(new T_lhs);
+load_kw_into_tbl(new T_user_declaration);
+load_kw_into_tbl(new T_user_prefix_declaration);
+load_kw_into_tbl(new T_user_suffix_declaration);
+load_kw_into_tbl(new T_constructor);
+load_kw_into_tbl(new T_destructor);
+load_kw_into_tbl(new T_op);
+load_kw_into_tbl(new T_failed);
+load_kw_into_tbl(new T_user_implementation);
+load_kw_into_tbl(new T_user_imp_tbl);
+load_kw_into_tbl(new T_user_imp_sym);
+load_kw_into_tbl(new T_constant_defs);
+load_kw_into_tbl(new T_terminals_refs);
+load_kw_into_tbl(new T_terminals_sufx);
+load_kw_into_tbl(new T_lrk_sufx);
+load_kw_into_tbl(new T_NULL);
+}
+
+/*:37*//*38:*/
+//line 1440 "./o2externs.w"
+
+extern void PRINT_RULES_TREE_STRUCTURE(AST*Node)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+if(Node==0)return;
+CAbs_lr1_sym*sym= AST::content(*Node);
+if(sym==0){
+yacco2::lrclog<<" SYMBOL IN AST CONTENT NULL"
+<<" Node*: "<<Node<<endl;
+return;
+}
+yacco2::lrclog<<sym->id__<<' ';
+
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_T_:{
+refered_T* sym1 = (refered_T*)sym;
+T_in_stbl*T= sym1->t_in_stbl();
+yacco2::lrclog<<T->t_def()->t_name()->c_str();
+break;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* sym1 = (refered_rule*)sym;
+rule_in_stbl*R= sym1->Rule_in_stbl();
+yacco2::lrclog<<R->r_def()->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_identifier_:{
+T_identifier* sym1 = (T_identifier*)sym;
+yacco2::lrclog<<sym1->identifier()->c_str();
+break;
+}
+case T_Enum::T_rule_def_:{
+rule_def* sym1 = (rule_def*)sym;
+yacco2::lrclog<<sym1->rule_name()->c_str();
+yacco2::lrclog<<" epsilon: ";
+if(sym1->epsilon()==true){
+yacco2::lrclog<<" Y ";
+}else{
+yacco2::lrclog<<" N ";
+}
+break;
+}
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* sym1 = (T_terminal_def*)sym;
+yacco2::lrclog<<sym1->t_name()->c_str();
+break;
+}
+case T_Enum::T_T_subrule_def_:{
+T_subrule_def* sym1 = (T_subrule_def*)sym;
+yacco2::lrclog<<" epsilon: ";
+if(sym1->epsilon()==true){
+yacco2::lrclog<<" Y ";
+}else{
+yacco2::lrclog<<" N ";
+}
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+break;
+}
+case T_Enum::T_T_NULL_:{
+break;
+}
+case T_Enum::T_T_2colon_:{
+break;
+}
+
+default:{
+yacco2::lrclog<<sym->id__;
+}
+}
+
+yacco2::lrclog<<" file# "<<sym->tok_co_ords__.external_file_id__
+<<':'<<sym->tok_co_ords__.rc_pos__<<':';
+yacco2::lrclog<<" line# "<<sym->tok_co_ords__.line_no__
+<<':'<<sym->tok_co_ords__.pos_in_line__<<':';
+yacco2::lrclog<<" sym*: "<<sym<<' ';
+yacco2::lrclog<<endl;
+}
+
+/*:38*//*39:*/
+//line 1524 "./o2externs.w"
+
+extern void WRT_CWEB_MARKER(std::ofstream*Wfile,yacco2::AST*Cweb_marker){
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+INT_SET_type filter;
+filter.insert(T_Enum::T_T_cweb_comment_);
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest rule_walk(*Cweb_marker,&just_walk_functr,&filter,ACCEPT_FILTER);
+tok_can<AST*> comments_can(rule_walk);
+for(int x(0);comments_can[x]!=yacco2::PTR_LR1_eog__;++x){
+T_cweb_comment*k= (T_cweb_comment*)comments_can[x];
+(*Wfile)<<k->comment_data()->c_str()<<endl;
+}
+}
+
+/*:39*//*40:*/
+//line 1547 "./o2externs.w"
+
+extern void PRINT_GRAMMAR_TREE(AST*Node)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+if(Node==0)return;
+CAbs_lr1_sym*sym= AST::content(*Node);
+if(sym==0){
+yacco2::lrclog<<" SYMBOL IN AST CONTENT NULL"
+<<" Node*: "<<Node
+<<" lt*: "<<Node->lt_<<" rt*: "<<Node->rt_
+<<std::endl;
+return;
+}
+yacco2::lrclog<<sym->id__<<' ';
+
+switch(sym->enumerated_id__){
+case T_Enum::T_T_cweb_comment_:{
+T_cweb_comment* sym1 = (T_cweb_comment*)sym;
+yacco2::lrclog<<sym1->comment_data()->c_str();
+break;
+}
+}
+
+yacco2::lrclog<<" file# "<<sym->tok_co_ords__.external_file_id__
+<<':'<<sym->tok_co_ords__.rc_pos__<<':';
+yacco2::lrclog<<" line# "<<sym->tok_co_ords__.line_no__
+<<':'<<sym->tok_co_ords__.pos_in_line__<<':';
+yacco2::lrclog<<" sym*: "<<sym<<' ';
+yacco2::lrclog<<" Node*: "<<Node
+<<" lt*: "<<Node->lt_<<" rt*: "<<Node->rt_
+<<std::endl;
+}
+
+/*:40*//*41:*/
+//line 1627 "./o2externs.w"
+
+extern
+bool
+PROCESS_INCLUDE_FILE
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_file_inclusion&File_include
+,yacco2::token_container_type&T2)
+{
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+std::string*ps_fn= File_include.file_name()->c_string();
+lrclog<<"Pre-process file: "<<ps_fn->c_str()<<std::endl;
+if(yacco2::STK_FILE_NOS__.size()>=Nested_file_cnt_limit){
+CAbs_lr1_sym*s= new Err_nested_files_exceeded(Nested_file_cnt_limit,*ps_fn);
+s->set_line_no_and_pos_in_line(File_include);
+s->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+Calling_parser.add_token_to_error_queue(*s);
+Calling_parser.abort_parse__;
+return Failure;
+}
+
+tok_can<std::ifstream> p1_tokens(ps_fn->c_str());
+if(p1_tokens.file_ok()==NO){
+yacco2::Delete_tokens(p1_tokens.container());
+CAbs_lr1_sym*sym= new NS_yacco2_err_symbols::Err_bad_filename(*ps_fn);
+sym->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+sym->set_line_no_and_pos_in_line(File_include);
+Calling_parser.add_token_to_error_queue(*sym);
+Calling_parser.abort_parse__;
+return Failure;
+}
+using namespace NS_pass3;
+Cpass3 p3_fsm;
+Parser pass3(p3_fsm,&p1_tokens,&T2,0,Calling_parser.error_queue(),Calling_parser.recycle_bin__);
+pass3.parse();
+yacco2::Delete_tokens(p1_tokens.container());
+
+if(pass3.error_queue()->empty()!=YES){
+Calling_parser.abort_parse__;
+return Failure;
+}
+
+yacco2::STK_FILE_NOS__.pop_back();
+return Success;
+}
+
+/*:41*//*42:*/
+//line 1709 "./o2externs.w"
+
+extern
+bool
+PROCESS_KEYWORD_FOR_SYNTAX_CODE
+(yacco2::Parser&Parser
+,yacco2::CAbs_lr1_sym*Keyword
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+switch(Keyword->enumerated_id__){
+case T_Enum::T_T_fsm_:{
+T_fsm* fsm = (T_fsm*)Keyword;
+return process_fsm_phrase(Parser,*fsm,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_parallel_parser_:{
+T_parallel_parser* pparser = (T_parallel_parser*)Keyword;
+return process_parallel_parser_phrase(Parser,*pparser,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_enumeration_:{
+T_enumeration* enumer = (T_enumeration*)Keyword;
+return process_T_enum_phrase(Parser,*enumer,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_error_symbols_:{
+T_error_symbols* err = (T_error_symbols*)Keyword;
+return process_error_symbols_phrase(Parser,*err,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_raw_characters_:{
+T_raw_characters* rc = (T_raw_characters*)Keyword;
+return process_rc_phrase(Parser,*rc,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_lr1_constant_symbols_:{
+T_lr1_constant_symbols* lr = (T_lr1_constant_symbols*)Keyword;
+return process_lr1_k_phrase(Parser,*lr,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_terminals_:{
+T_terminals* term = (T_terminals*)Keyword;
+return process_terminals_phrase(Parser,*term,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_rules_:{
+T_rules* rule = (T_rules*)Keyword;
+return process_rules_phrase(Parser,*rule,Cont_tok,Cont_pos);
+}
+default:{
+CAbs_lr1_sym*sym= new Err_not_kw_defining_grammar_construct;
+sym->set_rc(*Keyword);
+Parser.add_token_to_error_queue(*sym);
+return Failure;
+}
+}
+return Success;
+}
+
+/*:42*//*44:*/
+//line 1781 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_LOAD_XLATE_CHRS
+(NS_mpost_output::Cmpost_output*Fsm)
+{
+Fsm->xlated_names_[T_Enum::T_raw_exclam_]= "exclamation mark";
+Fsm->xlated_names_[T_Enum::T_raw_dbl_quote_]= "dbl quote";
+Fsm->xlated_names_[T_Enum::T_raw_no_sign_]= "no sign";
+Fsm->xlated_names_[T_Enum::T_raw_dollar_sign_]= "dollar sign";
+Fsm->xlated_names_[T_Enum::T_raw_percent_]= "percent";
+Fsm->xlated_names_[T_Enum::T_raw_ampersign_]= "ampersand";
+Fsm->xlated_names_[T_Enum::T_raw_right_quote_]= "rt quote";
+Fsm->xlated_names_[T_Enum::T_raw_open_bracket_]= "open bracket";
+Fsm->xlated_names_[T_Enum::T_raw_close_bracket_]= "close bracket";
+Fsm->xlated_names_[T_Enum::T_raw_asteric_]= "asterisk";
+Fsm->xlated_names_[T_Enum::T_raw_plus_]= "plus";
+Fsm->xlated_names_[T_Enum::T_raw_comma_]= "comma";
+Fsm->xlated_names_[T_Enum::T_raw_minus_]= "minus";
+Fsm->xlated_names_[T_Enum::T_raw_period_]= "period";
+Fsm->xlated_names_[T_Enum::T_raw_slash_]= "slash";
+Fsm->xlated_names_[T_Enum::T_raw_colon_]= "colon";
+Fsm->xlated_names_[T_Enum::T_raw_semi_colon_]= "semi colon";
+Fsm->xlated_names_[T_Enum::T_raw_less_than_]= "less than";
+Fsm->xlated_names_[T_Enum::T_raw_eq_]= "eq";
+Fsm->xlated_names_[T_Enum::T_raw_gt_than_]= "gt than";
+Fsm->xlated_names_[T_Enum::T_raw_question_mark_]= "question mark";
+Fsm->xlated_names_[T_Enum::T_raw_at_sign_]= "at sign";
+Fsm->xlated_names_[T_Enum::T_raw_open_sq_bracket_]= "open sq bracket";
+Fsm->xlated_names_[T_Enum::T_raw_back_slash_]= "back slash";
+Fsm->xlated_names_[T_Enum::T_raw_close_sq_bracket_]= "close sq bracket";
+Fsm->xlated_names_[T_Enum::T_raw_up_arrow_]= "up arrow";
+Fsm->xlated_names_[T_Enum::T_raw_under_score_]= "under score";
+Fsm->xlated_names_[T_Enum::T_raw_left_quote_]= "left quote";
+Fsm->xlated_names_[T_Enum::T_raw_open_brace_]= "open brace";
+Fsm->xlated_names_[T_Enum::T_raw_vertical_line_]= "vertical line";
+Fsm->xlated_names_[T_Enum::T_raw_close_brace_]= "close brace";
+Fsm->xlated_names_[T_Enum::T_raw_tilde_]= "tilde";
+Fsm->xlated_names_[T_Enum::T_raw_del_]= "del";
+Fsm->xlated_names_[T_Enum::T_LR1_invisible_shift_operator_]= "\\invisibleshift";
+Fsm->xlated_names_[T_Enum::T_LR1_all_shift_operator_]= "\\allshift";
+Fsm->xlated_names_[T_Enum::T_LR1_reduce_operator_]= "\\reduceoperator";
+Fsm->xlated_names_[T_Enum::T_LR1_fset_transience_operator_]= "\\transienceoperator";
+Fsm->xlated_names_[T_Enum::T_LR1_questionable_shift_operator_]= "\\questionableoperator";
+}
+
+/*:44*//*48:*/
+//line 1884 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_EMIT_PREFIX_CODE
+(NS_mpost_output::Cmpost_output*Fsm)
+{
+/*46:*/
+//line 1834 "./o2externs.w"
+
+
+KCHARP mp_prefix_file= "% file: ";
+Fsm->omp_file_<<mp_prefix_file;
+KCHARP mp_prefix_file_value=
+"%s - grammar railroad diagrams for mpost program\n";
+int x= sprintf(Fsm->big_buf_,mp_prefix_file_value,Fsm->mp_filename_.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+
+KCHARP mp_prefix_date= "% date: ";
+Fsm->omp_file_<<mp_prefix_date;
+KCHARP mp_prefix_date_value=
+"%s\n"
+"input \"/usr/local/yacco2/diagrams/o2diag.mp\"\n"
+"numeric no_of_rules,Box_solid,Box_dotted,Circle_solid,Circle_dotted;\n"
+"Box_solid:=1;Box_dotted:=2;Circle_solid:=3;Circle_dotted:=4;\n"
+"string rule_names[].literal;\n"
+"string rule_names[].vname;\n"
+"numeric rule_s_no_rhs[];\n"
+"string rhs_elems[][][].literal;\n"
+"string rhs_elems[][][].vname;\n"
+"numeric rhs_elems[][][].Drw_how;\n"
+"numeric rule_s_subrule_no_elems[][];\n";
+x= sprintf(Fsm->big_buf_,mp_prefix_date_value,Fsm->gened_date_time_.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+
+
+/*:46*/
+//line 1891 "./o2externs.w"
+
+/*47:*/
+//line 1863 "./o2externs.w"
+
+KCHARP w_prefix_file= "% file: ";
+Fsm->ow_file_<<w_prefix_file;
+KCHARP w_prefix_filename_value= "%s - cweb grammar\n";
+x= sprintf(Fsm->big_buf_,w_prefix_filename_value,Fsm->w_filename_.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+KCHARP w_prefix_date= "%Date: ";
+Fsm->ow_file_<<w_prefix_date;
+KCHARP w_prefix_date_value= "%s\n";
+x= sprintf(Fsm->big_buf_,w_prefix_date_value,Fsm->gened_date_time_.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+
+KCHARP macros=
+"\\input%s \"supp-pdf\"\n"
+"\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n";
+x= sprintf(Fsm->big_buf_,macros," ");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+/*:47*/
+//line 1892 "./o2externs.w"
+
+}
+
+
+/*:48*//*49:*/
+//line 1905 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_dimension_name
+(Cmpost_output*Fsm,std::string&Mp_obj_name,int Dimension){
+int R,Q;
+R= Dimension%27;
+Q= Dimension/27;
+++Q;
+Mp_obj_name+= Fsm->mp_dimension_[Q];
+Mp_obj_name+= Fsm->mp_dimension_[R];
+}
+
+/*:49*//*50:*/
+//line 1921 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_calc_mp_obj_name
+(Cmpost_output*Fsm,std::string&Mp_obj_name,int Elem_no){
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->rule_no_);
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->subrule_no_);
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Elem_no);
+}
+
+/*:50*//*51:*/
+//line 1938 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_mp_rhs_elem
+(Cmpost_output*Fsm,std::string&Elem_name,std::string&Drw_how){
+std::string mp_xlate_name;
+prescan_mpname_for_cweb(Elem_name,mp_xlate_name);
+std::string mp_obj_name;
+KCHARP mp_subrule_elems_literal= "rhs_elems[%i][%i][%i].literal := \"%s\";";
+int x= sprintf(Fsm->big_buf_,mp_subrule_elems_literal
+,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,mp_xlate_name.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+KCHARP mp_subrule_elems_RorT= "rhs_elems[%i][%i][%i].Drw_how := %s;";
+x= sprintf(Fsm->big_buf_,mp_subrule_elems_RorT,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,Drw_how.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+KCHARP mp_subrule_elems_vname= "rhs_elems[%i][%i][%i].vname := \"%s\";";
+Fsm->MPOST_CWEB_calc_mp_obj_name(Fsm,mp_obj_name,Fsm->elem_no_);
+x= sprintf(Fsm->big_buf_,mp_subrule_elems_vname,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,mp_obj_name.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+}
+
+/*:51*//*55:*/
+//line 2060 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_sr_elem_xrefs
+(Cmpost_output*Fsm,AST*Subrule_tree){
+/*53:*/
+//line 1979 "./o2externs.w"
+
+using namespace yacco2;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+KCHARP xref= "@.%s@>\n";
+INT_SET_type filter;
+filter.insert(T_Enum::T_refered_T_);
+filter.insert(T_Enum::T_refered_rule_);
+filter.insert(T_Enum::T_T_eosubrule_);
+filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+filter.insert(T_Enum::T_LR1_parallel_operator_);
+filter.insert(T_Enum::T_LR1_fset_transience_operator_);
+
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest element_walk(*Subrule_tree,&just_walk_functr,&filter,ACCEPT_FILTER);
+tok_can<AST*> elements_can(element_walk);
+
+
+/*:53*/
+//line 2066 "./o2externs.w"
+
+int elem_cnt(0);
+string th_name;
+/*54:*/
+//line 1999 "./o2externs.w"
+
+for(int x(0);elements_can[x]!=yacco2::PTR_LR1_eog__;++x){
+++elem_cnt;
+CAbs_lr1_sym*sym= elements_can[x];
+switch(sym->enumerated_id__){
+case T_Enum::T_LR1_parallel_operator_:{
+int x= sprintf(Fsm->big_buf_,xref,"\\paralleloperator");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+int x= sprintf(Fsm->big_buf_,xref,"\\transienceoperator");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)sym;
+Fsm->MPOST_CWEB_xref_refered_T(Fsm,rt);
+break;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)sym;
+Fsm->MPOST_CWEB_xref_refered_rule(Fsm,rr);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+if(elem_cnt==1){
+int x= sprintf(Fsm->big_buf_,xref,"\\emptyrule");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)sym;
+if(id->ns()!=0){
+th_name+= id->ns()->identifier()->c_str();
+th_name+= "::";
+}
+th_name+= id->called_thread_name()->identifier()->c_str();
+string name_with_bkslash;
+int len= th_name.length();
+for(int x= 0;x<len;++x){
+char c= th_name[x];
+if(c=='_'){
+name_with_bkslash+= '\\';
+}
+name_with_bkslash+= c;
+}
+int x= sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+int x= sprintf(Fsm->big_buf_,xref,"NULL");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+}
+}
+
+/*:54*/
+//line 2069 "./o2externs.w"
+
+}
+
+/*:55*//*56:*/
+//line 2073 "./o2externs.w"
+
+extern int
+MPOST_CWEB_xlated_symbol(AST*Sym_t,char*Xlated_sym){
+CAbs_lr1_sym*Sym= AST::content(*Sym_t);
+int Enum= Sym->enumerated_id();
+Xlated_sym[0]= (char)0;
+const char*xsym= "%s";
+switch(Enum){
+case T_Enum::T_LR1_parallel_operator_:{
+sprintf(Xlated_sym,xsym,"\\paralleloperator");
+return 1;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+sprintf(Xlated_sym,xsym,"\\transienceoperator");
+return 1;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)Sym;
+XLATE_SYMBOLS_FOR_cweave(rt->its_t_def()->t_name()->c_str(),Xlated_sym);
+return rt->element_pos();
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)Sym;
+XLATE_SYMBOLS_FOR_cweave(rr->its_rule_def()->rule_name()->c_str(),Xlated_sym);
+return rr->element_pos();
+}
+case T_Enum::T_T_eosubrule_:{
+T_eosubrule* eos = (T_eosubrule*)Sym;
+AST*prev_t= Sym_t->pr_;
+if(eos->element_pos()==1){
+sprintf(Xlated_sym,xsym,"\\emptyrule");
+return eos->element_pos();
+}else{
+sprintf(Xlated_sym,xsym,"");
+}
+CAbs_lr1_sym*sym= AST::content(*prev_t);
+switch(sym->enumerated_id()){
+case T_Enum::T_T_called_thread_eosubrule_:{
+return eos->element_pos()-1;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+return eos->element_pos()-1;
+}
+default:{
+return eos->element_pos();
+}
+}
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)Sym;
+string th_name;
+if(id->ns()!=0){
+th_name+= id->ns()->identifier()->c_str();
+th_name+= "::";
+}
+th_name+= id->called_thread_name()->identifier()->c_str();
+XLATE_SYMBOLS_FOR_cweave(th_name.c_str(),Xlated_sym);
+return id->element_pos();
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_null_call_thread_eosubrule* id = (T_null_call_thread_eosubrule*)Sym;
+sprintf(Xlated_sym,xsym,"NULL");
+return id->element_pos();
+}
+}
+return 0;
+}
+/*:56*//*57:*/
+//line 2150 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_crt_rhs_sym_str
+(state_element*se,std::string*Xlated_str){
+char a[BUFFER_SIZE];
+char cur_sym[Max_cweb_item_size];
+char nxtsym_1[Max_cweb_item_size];
+char nxtsym_2[Max_cweb_item_size];
+KCHARP thread_expr_string_template=
+"{%s} {%s} {%s}";
+KCHARP underline_symbol= "{$\\underline{%s}$} \n";
+KCHARP underline_symbol_wepsilon= "{$\\underline{%s^{\\emptyrule}}$} \n";
+KCHARP not_underline_symbol= "{%s} \n";
+state_element*nxt1_se= 0;
+state_element*nxt2_se= 0;
+state_element*nxt3_se= 0;
+int pp= MPOST_CWEB_xlated_symbol(se->sr_element_,cur_sym);
+
+if(
+(se->its_enum_id_==T_Enum::T_LR1_parallel_operator_)
+||
+(se->its_enum_id_==T_Enum::T_LR1_fset_transience_operator_)
+){
+nxt1_se= se->next_state_element_;
+AST*nxt2_se= se->sr_element_->rt_->rt_;
+pp= MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+pp= MPOST_CWEB_xlated_symbol(nxt2_se,nxtsym_2);
+sprintf(a,thread_expr_string_template,cur_sym,nxtsym_1,nxtsym_2);
+(*Xlated_str)+= a;
+return;
+}
+sprintf(a,not_underline_symbol,cur_sym);
+(*Xlated_str)+= a;
+if(se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+return;
+}
+
+nxt1_se= se->next_state_element_;
+if(nxt1_se==0)return;
+if(nxt1_se->its_enum_id_==T_Enum::T_T_eosubrule_)return;
+pp= MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+if(nxt1_se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+sprintf(a,underline_symbol,nxtsym_1);
+}else{
+rule_def*rd= (rule_def*)nxt1_se->sr_def_element_;
+if(rd->epsilon()==YES){
+sprintf(a,underline_symbol_wepsilon,nxtsym_1);
+nxt2_se= nxt1_se->next_state_element_;
+}else{
+sprintf(a,underline_symbol,nxtsym_1);
+nxt2_se= 0;
+}
+}
+(*Xlated_str)+= a;
+
+if(nxt2_se!=0){
+if(nxt2_se->its_enum_id_==T_Enum::T_T_eosubrule_)return;
+pp= MPOST_CWEB_xlated_symbol(nxt2_se->sr_element_,nxtsym_2);
+if(nxt2_se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+sprintf(a,underline_symbol,nxtsym_2);
+}else{
+rule_def*rd= (rule_def*)nxt2_se->sr_def_element_;
+if(rd->epsilon()==YES){
+sprintf(a,underline_symbol_wepsilon,nxtsym_2);
+nxt3_se= nxt1_se->next_state_element_;
+if(nxt3_se->its_enum_id_==T_Enum::T_T_eosubrule_){
+nxt3_se= 0;
+}
+}else{
+sprintf(a,underline_symbol,nxtsym_2);
+nxt3_se= 0;
+}
+}
+(*Xlated_str)+= a;
+}
+if(nxt3_se!=0){
+sprintf(a,not_underline_symbol,"...");
+(*Xlated_str)+= a;
+}
+}
+
+/*:57*//*58:*/
+//line 2236 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_woutput_sr_sdcode
+(Cmpost_output*Fsm,T_subrule_def*Subrule_def){
+SDC_MAP_type*sr_dirs= Subrule_def->subrule_directives();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+using namespace NS_cweave_sdc;
+Ccweave_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_file_,Fsm->subrule_def_,Fsm->subrule_no_);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+
+/*:58*//*62:*/
+//line 2291 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_fsm
+(Cmpost_output*Fsm,T_fsm_phrase*Fsm_phrase){
+KCHARP banner=
+"\\GRAMMARtitle{%s}\n{%s}{%s}%\n"
+"{%s}{%s}%\n"
+"{%s}\n";
+
+KCHARP banner_of_thread=
+"\\THREADtitle{%s}%\n"
+"{%s}{%s}%\n"
+"{%s}{%s}{%s}{%i}%\n"
+"{%s}\n";
+char fname[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm->grammar_filename_prefix_.c_str(),fname);
+char ns_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->namespace_id()->identifier()->c_str(),ns_name);
+char fsm_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->fsm_id()->c_string()->c_str(),fsm_name);
+char k_cweb[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->comment()->c_string()->c_str(),k_cweb);
+
+if(O2_PP_PHASE!=0){
+T_parallel_parser_phrase*la_ph= O2_PP_PHASE;
+T_parallel_la_boundary*la= la_ph->la_bndry();
+
+char expr_prescan_cweb[Max_cweb_item_size];
+int x= sprintf(Fsm->big_buf_
+,banner_of_thread
+,fname
+,fsm_name
+,ns_name
+,Fsm_phrase->version()->c_string()->c_str()
+,Fsm_phrase->debug()->c_string()->c_str()
+,k_cweb
+,la->la_first_set()->size()
+
+,la->cweb_la_srce_expr()->c_str()
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+}else{
+int x= sprintf(Fsm->big_buf_
+,banner
+,fname
+,fsm_name
+,ns_name
+,Fsm_phrase->version()->c_string()->c_str()
+,Fsm_phrase->debug()->c_string()->c_str()
+,k_cweb
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+}
+
+if(Fsm_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_file_,Fsm_phrase->cweb_marker());
+}
+
+/*60:*/
+//line 2262 "./o2externs.w"
+
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+(Fsm_phrase->fsm_class_phrase()->identifier()->identifier()->c_str()
+,xa);
+
+KCHARP fsm_class=
+"@*2 Fsm %s class.\n";
+int x= sprintf(Fsm->big_buf_
+,fsm_class
+,xa
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+
+/*:60*/
+//line 2353 "./o2externs.w"
+
+/*61:*/
+//line 2278 "./o2externs.w"
+
+T_fsm_class_phrase*fcp= Fsm_phrase->fsm_class_phrase();
+SDC_MAP_type*sr_dirs= fcp->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+
+/*:61*/
+//line 2354 "./o2externs.w"
+
+
+using namespace NS_cweave_fsm_sdc;
+Ccweave_fsm_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_file_,Fsm_phrase);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+
+
+/*:62*//*70:*/
+//line 2483 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_T
+(Cmpost_output*Fsm,T_terminals_phrase*T_phrase){
+/*64:*/
+//line 2368 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_t_file_,"Terminal Vocabulary",Fsm->gened_date_time_.c_str()
+,T_phrase->filename_id()->identifier()
+,T_phrase->namespace_id()->identifier()
+,T_phrase->alphabet()->size());
+
+/*:64*/
+//line 2489 "./o2externs.w"
+
+if(T_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,T_phrase->cweb_marker());
+}
+
+/*67:*/
+//line 2424 "./o2externs.w"
+
+if(T_phrase->terminals_refs_code()!=0){
+KCHARP tref=
+"@*2 {\\bf Terminals-refs} directive.\\fbreak\n";
+Fsm->ow_t_file_<<tref;
+
+T_syntax_code*stc= T_phrase->terminals_refs_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+}
+KCHARP tref_code=
+"@<terminals-refs directive@>=\n"
+"%s"
+"\n";
+
+int x= sprintf(Fsm->big_buf_
+,tref_code
+,T_phrase->terminals_refs_code()->syntax_code()->c_str()
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+}
+
+/*:67*/
+//line 2494 "./o2externs.w"
+
+T_DEF_MAP_ITER_type a= T_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= T_phrase->alphabet()->end();
+char term_name[Max_cweb_item_size];
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*66:*/
+//line 2386 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+
+char name[Max_cweb_item_size];
+
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+
+const char*enum_name_for_format=
+"T\\_%s\\_";
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_name_for_format,class_name);
+
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,tdef->cweb_marker());
+}
+/*65:*/
+//line 2376 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+
+/*:65*/
+//line 2421 "./o2externs.w"
+
+
+/*:66*/
+//line 2500 "./o2externs.w"
+
+/*69:*/
+//line 2472 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2501 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+sdc_fsm.initialize(&Fsm->ow_t_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+/*68:*/
+//line 2448 "./o2externs.w"
+
+if(T_phrase->terminals_sufx_code()!=0){
+KCHARP tsuf=
+"@*1 {\\bf Terminals-sufx} directive.\\fbreak\n";
+Fsm->ow_t_file_<<tsuf;
+
+T_syntax_code*stc= T_phrase->terminals_sufx_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+}
+KCHARP tsuf_code=
+"@<terminals-sufx directive@>=\n"
+"%s"
+"\n";
+
+int x= sprintf(Fsm->big_buf_
+,tsuf_code
+,T_phrase->terminals_sufx_code()->syntax_code()->c_str()
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+}
+
+/*:68*/
+//line 2509 "./o2externs.w"
+
+Fsm->ow_t_file_<<"@** Index.\n";
+}
+
+/*:70*//*75:*/
+//line 2577 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Err
+(Cmpost_output*Fsm,T_error_symbols_phrase*Err_phrase){
+/*72:*/
+//line 2517 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_err_file_,"Error Vocabulary",Fsm->gened_date_time_.c_str()
+,Err_phrase->filename_id()->identifier()
+,Err_phrase->namespace_id()->identifier()
+,Err_phrase->alphabet()->size());
+
+/*:72*/
+//line 2583 "./o2externs.w"
+
+if(Err_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_err_file_,Err_phrase->cweb_marker());
+}
+
+T_DEF_MAP_ITER_type a= Err_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= Err_phrase->alphabet()->end();
+char term_name[Max_cweb_item_size];
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*74:*/
+//line 2541 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+char name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+const char*enum_name_for_format=
+"T\\_%s\\_";
+char enum_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),enum_name);
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_name_for_format,enum_name);
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+Fsm->ow_err_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_err_file_,tdef->cweb_marker());
+}
+/*73:*/
+//line 2525 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+
+/*:73*/
+//line 2574 "./o2externs.w"
+
+
+/*:74*/
+//line 2593 "./o2externs.w"
+
+/*69:*/
+//line 2472 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2594 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+sdc_fsm.initialize(&Fsm->ow_err_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+Fsm->ow_err_file_<<"@** Index.\n";
+}
+
+
+/*:75*//*81:*/
+//line 2722 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Lrk
+(Cmpost_output*Fsm,T_lr1_k_phrase*Lrk_phrase){
+/*77:*/
+//line 2610 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_lrk_file_,"Lr K Vocabulary",Fsm->gened_date_time_.c_str()
+,Lrk_phrase->filename_id()->identifier()
+,Lrk_phrase->namespace_id()->identifier()
+,Lrk_phrase->alphabet()->size()
+);
+
+/*:77*/
+//line 2728 "./o2externs.w"
+
+if(Lrk_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,Lrk_phrase->cweb_marker());
+}
+char term_name[Max_cweb_item_size];
+char name[Max_cweb_item_size];
+
+T_DEF_MAP_ITER_type a= Lrk_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= Lrk_phrase->alphabet()->end();
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*79:*/
+//line 2633 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+switch(tdef->enumerated_id__){
+case T_Enum::T_LR1_parallel_operator_:{
+strcpy(name,"\\paralleloperator");
+strcpy(term_name,"|parallel_operator|");
+break;
+}
+case T_Enum::T_LR1_all_shift_operator_:{
+strcpy(name,"\\allshift");
+strcpy(term_name,"|all_shift|");
+break;
+}
+case T_Enum::T_LR1_invisible_shift_operator_:{
+strcpy(name,"\\invisibleshift");
+strcpy(term_name,"|invisible_shift|");
+break;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+strcpy(name,"\\transienceoperator");
+strcpy(term_name,"|transience_operator|");
+break;
+}
+case T_Enum::T_LR1_questionable_shift_operator_:{
+strcpy(name,"\\questionableoperator");
+strcpy(term_name,"|questionable_operator|");
+break;
+}
+default:{
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+break;
+}
+}
+const char*enum_class_name_format= "T\\_%s\\_";
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_class_name_format,class_name);
+
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+Fsm->ow_lrk_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,tdef->cweb_marker());
+}
+/*78:*/
+//line 2619 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+
+/*:78*/
+//line 2695 "./o2externs.w"
+
+
+/*:79*/
+//line 2739 "./o2externs.w"
+
+/*69:*/
+//line 2472 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2740 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_lrk_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+/*80:*/
+//line 2698 "./o2externs.w"
+
+if(Lrk_phrase->lrk_sufx_code()!=0){
+KCHARP tsuf=
+"@*1 {\\bf lrk-sufx} directive.\\fbreak\n";
+Fsm->ow_lrk_file_<<tsuf;
+
+T_syntax_code*stc= Lrk_phrase->lrk_sufx_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,stc->cweb_marker());
+}
+KCHARP tsuf_code=
+"@<lrk-sufx directive@>=\n"
+"%s"
+"\n";
+int x= sprintf(Fsm->big_buf_
+,tsuf_code
+,Lrk_phrase->lrk_sufx_code()->syntax_code()->c_str()
+);
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+Fsm->ow_lrk_file_<<endl;
+}
+
+
+/*:80*/
+//line 2747 "./o2externs.w"
+
+Fsm->ow_lrk_file_<<"@** Index.\n";
+}
+
+/*:81*//*82:*/
+//line 2754 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_rule_s_lhs_sdc
+(Cmpost_output*Fsm,rule_def*Rule_def){
+T_rule_lhs_phrase*rlp= Rule_def->rule_lhs();
+if(rlp==0)return;
+SDC_MAP_type*sr_dirs= rlp->lhs_directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+T_parallel_monitor_phrase*ppm= Rule_def->parallel_mntr();
+if(ppm!=0){
+sr_dirs= ppm->mntr_directives_map();
+i= sr_dirs->begin();
+ie= sr_dirs->end();
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+}
+using namespace NS_cweave_lhs_sdc;
+Ccweave_lhs_sdc lhs_sdc_fsm;
+lhs_sdc_fsm.initialize(&Fsm->ow_file_,Rule_def->rule_name()->c_str());
+Parser lhs_sdc_emit(lhs_sdc_fsm,&dirs_tokens,0);
+lhs_sdc_emit.parse();
+}
+
+/*:82*//*83:*/
+//line 2791 "./o2externs.w"
+
+bool
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_should_subrule_be_printed
+(Cmpost_output*Fsm,T_subrule_def*Subrule_def){
+if(Subrule_def->cweb_marker()!=0)return true;
+SDC_MAP_type*sr_dirs= Subrule_def->subrule_directives();
+if(sr_dirs->empty()==true)return false;
+return true;
+}
+/*:83*//*85:*/
+//line 2852 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_T
+(Cmpost_output*Fsm,refered_T*R_T){
+T_in_stbl*t= R_T->t_in_stbl();
+T_terminal_def*td= t->t_def();
+
+KCHARP xref= "@.%s@>\n";
+
+char name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(td->t_name()->c_str(),name);
+/*84:*/
+//line 2804 "./o2externs.w"
+
+switch(td->classification()){
+case T_terminal_def::err:{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_terminal_def::rc:{
+break;
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_terminal_def::lrk:{
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_terminal_def::t:{
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+}
+
+/*:84*/
+//line 2865 "./o2externs.w"
+
+}
+
+/*:85*//*86:*/
+//line 2871 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_rule
+(Cmpost_output*Fsm,refered_rule*R_rule){
+rule_in_stbl*r= R_rule->Rule_in_stbl();
+rule_def*rd= r->r_def();
+KCHARP xref= "@.%s@>\n";
+string name_with_bkslash;
+int len= rd->rule_name()->length();
+for(int x= 0;x<len;++x){
+char c= (*rd->rule_name())[x];
+if(c=='_'){
+name_with_bkslash+= '\\';
+}
+name_with_bkslash+= c;
+}
+int x= sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+
+/*:86*//*93:*/
+//line 3044 "./o2externs.w"
+
+AST*elem_space[Max_no_subrules];
+void GEN_CALLED_THREADS_FS_OF_RULE(rule_def*Start_rule){
+using namespace NS_yacco2_T_enum;
+using namespace std;
+std::set<rule_def*> rules_in_elem_space;
+std::set<rule_def*> ::iterator i;
+INT_SET_type sr_filter;
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor just_walk_functr;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+int cc(0);
+int nc(-1);
+AST*cur_elem_t(0);
+CAbs_lr1_sym*cur_elem(0);
+/*89:*/
+//line 2968 "./o2externs.w"
+
+{
+AST*rtree= Start_rule->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2955 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2975 "./o2externs.w"
+
+}
+
+/*:89*/
+//line 3059 "./o2externs.w"
+
+while(cc<=nc){
+cur_elem_t= elem_space[cc];
+cur_elem= AST::content(*cur_elem_t);
+/*91:*/
+//line 2996 "./o2externs.w"
+
+switch(cur_elem->enumerated_id__){
+case T_Enum::T_T_eosubrule_:{
+++cc;
+continue;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)cur_elem;
+T_terminal_def*td= rt->its_t_def();
+if(td->enum_id()!=LR1_PARALLEL_OPERATOR){
+++cc;
+continue;
+}
+/*92:*/
+//line 3032 "./o2externs.w"
+
+AST*first_el_t= cur_elem_t;
+AST*third_el_t= AST::get_younger_sibling(*first_el_t,2);
+CAbs_lr1_sym*sym= AST::content(*third_el_t);
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule*ct= (T_called_thread_eosubrule*)sym;
+Start_rule->add_to_called_thread_first_set(ct);
+}
+
+/*:92*/
+//line 3009 "./o2externs.w"
+
+++cc;
+continue;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)cur_elem;
+rule_def*rdef= rr->its_rule_def();
+/*90:*/
+//line 2979 "./o2externs.w"
+
+{
+i= rules_in_elem_space.find(rdef);
+if(i==rules_in_elem_space.end()){
+rules_in_elem_space.insert(rdef);
+AST*rtree= rdef->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2955 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2989 "./o2externs.w"
+
+}
+}
+
+/*:90*/
+//line 3016 "./o2externs.w"
+
+if(rdef->epsilon()==YES){
+AST*et= AST::brother(*cur_elem_t);
+elem_space[cc]= et;
+continue;
+}else{
+++cc;
+continue;
+}
+}
+}
+/*:91*/
+//line 3063 "./o2externs.w"
+
+}
+}
+
+/*:93*//*98:*/
+//line 3145 "./o2externs.w"
+
+void GEN_FS_OF_RULE(rule_def*Rule_def){
+using namespace NS_yacco2_T_enum;
+using namespace std;
+std::set<rule_def*> rules_in_elem_space;
+std::set<rule_def*> ::iterator i;
+INT_SET_type sr_filter;
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor just_walk_functr;
+
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+int cc(0);
+int nc(-1);
+AST*cur_elem_t(0);
+CAbs_lr1_sym*cur_elem(0);
+/*95:*/
+//line 3075 "./o2externs.w"
+
+{
+AST*rtree= Rule_def->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2955 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 3082 "./o2externs.w"
+
+}
+
+/*:95*/
+//line 3160 "./o2externs.w"
+
+/*97:*/
+//line 3126 "./o2externs.w"
+
+if(Rule_def->rule_no()!=1)goto not_start_rule;
+if(O2_PP_PHASE==0)goto not_start_rule;
+if(Rule_def->epsilon()==NO)goto not_start_rule;
+{
+T_parallel_la_boundary*la= O2_PP_PHASE->la_bndry();
+set<T_in_stbl*> ::iterator lai= la->la_first_set()->begin();
+set<T_in_stbl*> ::iterator laie= la->la_first_set()->end();
+for(;lai!=laie;++lai){
+T_in_stbl*tstbl= *lai;
+Rule_def->add_to_first_set(*tstbl);
+}
+}
+not_start_rule:;
+
+/*:97*/
+//line 3161 "./o2externs.w"
+
+while(cc<=nc){
+cur_elem_t= elem_space[cc];
+cur_elem= AST::content(*cur_elem_t);
+/*96:*/
+//line 3086 "./o2externs.w"
+
+switch(cur_elem->enumerated_id__){
+case T_Enum::T_T_eosubrule_:{
+++cc;
+continue;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)cur_elem;
+T_in_stbl*tstbl= rt->t_in_stbl();
+Rule_def->add_to_first_set(*tstbl);
+Rule_def->add_rule_adding_T_in_first_set(tstbl,rt->grammar_s_enumerate());
+++cc;
+continue;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)cur_elem;
+rule_def*rdef= rr->its_rule_def();
+/*90:*/
+//line 2979 "./o2externs.w"
+
+{
+i= rules_in_elem_space.find(rdef);
+if(i==rules_in_elem_space.end()){
+rules_in_elem_space.insert(rdef);
+AST*rtree= rdef->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2955 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2989 "./o2externs.w"
+
+}
+}
+
+/*:90*/
+//line 3103 "./o2externs.w"
+
+if(rdef->epsilon()==YES){
+AST*et= AST::brother(*cur_elem_t);
+elem_space[cc]= et;
+continue;
+}else{
+++cc;
+continue;
+}
+}
+}
+
+/*:96*/
+//line 3165 "./o2externs.w"
+
+}
+}
+
+/*:98*//*102:*/
+//line 3207 "./o2externs.w"
+
+bool
+fs_sort_criteria(const NS_yacco2_terminals::T_in_stbl*E1,const NS_yacco2_terminals::T_in_stbl*E2){
+T_in_stbl* e1 = (T_in_stbl*)E1;
+T_in_stbl* e2 = (T_in_stbl*)E2;
+T_terminal_def*e1_t_def= e1->t_def();
+T_terminal_def*e2_t_def= e2->t_def();
+string*e1s= e1_t_def->t_name();
+string*e2s= e2_t_def->t_name();
+if(*e1s<*e2s)return true;
+return false;
+}
+void PRT_RULE_S_FIRST_SET(std::ofstream&Ofile,NS_yacco2_terminals::rule_def*Rule_def){
+/*100:*/
+//line 3178 "./o2externs.w"
+
+T_IN_STBL_SET_type*fs= Rule_def->first_set();
+Ofile<<"@*2 |"<<Rule_def->rule_name()->c_str()<<"|";
+if(Rule_def->epsilon()==true){
+Ofile<<"{$^\\emptyrule$}";
+}
+Ofile<<" \\# in set: "<<fs->size()<<".\\fbreak"<<std::endl;
+T_IN_STBL_SORTED_SET_type ran_array;
+ran_array.reserve(fs->size());
+T_IN_STBL_SET_ITER_type ii= fs->begin();
+T_IN_STBL_SET_ITER_type iie= fs->end();
+for(;ii!=iie;++ii){
+ran_array.push_back(*ii);
+}
+stable_sort(ran_array.begin(),ran_array.end(),fs_sort_criteria);
+
+/*:100*/
+//line 3220 "./o2externs.w"
+
+/*101:*/
+//line 3195 "./o2externs.w"
+
+char xlate[Max_cweb_item_size];
+T_IN_STBL_SORTED_SET_ITER_type i= ran_array.begin();
+T_IN_STBL_SORTED_SET_ITER_type ie= ran_array.end();
+for(;i!=ie;++i){
+T_in_stbl*el= *i;
+Ofile<<" ";
+XLATE_SYMBOLS_FOR_cweave(el->t_def()->t_name()->c_str(),xlate);
+Ofile<<xlate<<"\\ \\ "<<std::endl;
+}
+
+/*:101*/
+//line 3221 "./o2externs.w"
+
+}
+
+/*:102*//*104:*/
+//line 3234 "./o2externs.w"
+
+LA_SET_type*make_copy_of_la_set(LA_SET_type*Set1){
+LA_SET_type*copy_set= new LA_SET_type;
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+LA_SET_ITER_type f= Set1->find(td);
+if(f!=Set1->end()){
+copy_set->insert(td);
+return copy_set;
+}
+LA_SET_ITER_type i= Set1->begin();
+LA_SET_ITER_type ie= Set1->end();
+for(;i!=ie;++i){
+copy_set->insert(*i);
+}
+return copy_set;
+}
+
+/*:104*//*105:*/
+//line 3256 "./o2externs.w"
+
+bool are_2_la_sets_equal(LA_SET_type*Common_set1,LA_SET_type*Set2){
+LA_SET_type*la_set_to_compare_against= Set2;
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+LA_SET_type*eolr_set(0);
+LA_SET_ITER_type f= Set2->find(td);
+if(f!=Set2->end()){
+eolr_set= new LA_SET_type;
+eolr_set->insert(td);
+la_set_to_compare_against= eolr_set;
+}
+
+if(Common_set1->size()!=la_set_to_compare_against->size()){
+if(eolr_set!=0)delete eolr_set;
+return false;
+}
+LA_SET_ITER_type set1i= Common_set1->begin();
+LA_SET_ITER_type set1ie= Common_set1->end();
+LA_SET_ITER_type set2i= la_set_to_compare_against->begin();
+LA_SET_ITER_type set2ie= la_set_to_compare_against->end();
+for(;set1i!=set1ie;){
+T_in_stbl*set1T= *set1i;
+T_in_stbl*set2T= *set2i;
+if(set1T!=set2T)
+return false;
+++set1i;
+++set2i;
+}
+if(eolr_set!=0)delete eolr_set;
+return true;
+}
+
+/*:105*//*106:*/
+//line 3292 "./o2externs.w"
+
+int find_common_la_set_idx(LA_SET_type*La_){
+if(COMMON_LA_SETS.empty()==true){
+LA_SET_type*copy_set= make_copy_of_la_set(La_);
+COMMON_LA_SETS.push_back(copy_set);
+return 0;
+}
+COMMON_LA_SETS_ITER_type i= COMMON_LA_SETS.begin();
+COMMON_LA_SETS_ITER_type ie= COMMON_LA_SETS.end();
+int idx(0);
+for(;i!=ie;++i,++idx){
+LA_SET_type*st1= *i;
+bool result= are_2_la_sets_equal(st1,La_);
+if(result==true){
+return idx;
+}
+}
+LA_SET_type*copy_set= make_copy_of_la_set(La_);
+COMMON_LA_SETS.push_back(copy_set);
+return idx;
+}
+
+
+/*:106*//*107:*/
+//line 3321 "./o2externs.w"
+
+void COMMONIZE_LA_SETS(){
+STATES_ITER_type si= LR1_STATES.begin();
+STATES_ITER_type sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+S_VECTORS_ITER_type svi= cur_state->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= cur_state->state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+S_VECTOR_ELEMS_ITER_type selie= svi->second.end();
+for(;seli!=selie;++seli){
+state_element*se= *seli;
+if(se->goto_state_!=0)continue;
+bool set_ok= se->calc_la(*se);
+if(set_ok==false){
+return;
+}
+se->common_la_set_idx_= find_common_la_set_idx(se->la_set_);
+}
+}
+}
+}
+
+/*:107*//*109:*/
+//line 3367 "./o2externs.w"
+
+int calc_cyclic_key
+(NS_yacco2_terminals::rule_def*Rule_use,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+static int no_of_rules(0);
+static int start_of_rules(0);
+if(no_of_rules==0){
+start_of_rules= O2_T_ENUM_PHASE->total_enumerate();
+no_of_rules= O2_RULES_PHASE->rules_alphabet()->size();
+}
+int rule_use_enum_rel0= Rule_use->enum_id()-start_of_rules;
+int part1_key_of_rule_use= rule_use_enum_rel0*no_of_rules;
+int against_rule_enum_rel0= Against_rule->enum_id()-start_of_rules;
+int part2_key_of_against_rule= against_rule_enum_rel0;
+int key= part1_key_of_rule_use+part2_key_of_against_rule;
+return key;
+}
+
+/*:109*//*110:*/
+//line 3392 "./o2externs.w"
+
+void determine_rhs_indirect_use_cnt
+(NS_yacco2_terminals::rule_def*Use_for_rule,yacco2::AST*SRule_t
+,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor walk_functr;
+ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int indirect_use_cnt(0);
+int direct_use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+refered_rule* rr = (refered_rule*)sym;
+rule_def*its_rd= rr->its_rule_def();
+if(its_rd==Use_for_rule){
+continue;
+}
+int idc= MAX_USE_CNT_RxR(Use_for_rule,its_rd);
+}
+}
+
+/*:110*//*111:*/
+//line 3423 "./o2externs.w"
+
+int determine_rhs_max_use_cnt
+(NS_yacco2_terminals::rule_def*Use_for_rule,yacco2::AST*SRule_t
+,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor walk_functr;
+ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int running_indirect_use_cnt(0);
+int running_direct_use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+rule_def*its_rd(0);
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+refered_rule* rr = (refered_rule*)sym;
+its_rd= rr->its_rule_def();
+if(its_rd==Against_rule)Against_rule->recursive(YES);
+if(its_rd==Use_for_rule){
+++running_direct_use_cnt;
+continue;
+}else{
+use_cnt_type rule_use_key(Use_for_rule,its_rd);
+int use_cnt_key= calc_cyclic_key(Use_for_rule,its_rd);
+CYCLIC_USE_TBL_ITER_type i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+int idc= uc.use_cnt_;
+int potential_idc_cnt= idc+running_direct_use_cnt;
+if(potential_idc_cnt> running_indirect_use_cnt){
+running_indirect_use_cnt= potential_idc_cnt;
+}
+}
+}
+if(running_direct_use_cnt> running_indirect_use_cnt){
+return running_direct_use_cnt;
+}
+return running_indirect_use_cnt;
+}
+
+/*:111*//*112:*/
+//line 3466 "./o2externs.w"
+
+int MAX_USE_CNT_RxR
+(NS_yacco2_terminals::rule_def*Rule_use,NS_yacco2_terminals::rule_def*Against_rule){
+use_cnt_type rule_use_key(Rule_use,Against_rule);
+int use_cnt_key= calc_cyclic_key(Rule_use,Against_rule);
+CYCLIC_USE_TBL_ITER_type i= CYCLIC_USE_TABLE.find(use_cnt_key);
+if(i!=CYCLIC_USE_TABLE.end()){
+return i->second.use_cnt_;
+}
+CYCLIC_USE_TABLE.insert(make_pair(use_cnt_key,rule_use_key));
+using namespace NS_yacco2_T_enum;
+if(Against_rule->rule_use_skeleton()==0){
+i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+uc.use_cnt_= 0;
+return 0;
+}
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor walk_functr;
+ast_prefix walk(*Against_rule->rule_use_skeleton(),&walk_functr
+,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+AST*sr_t= rules_use_can.ast(x);
+determine_rhs_indirect_use_cnt(Rule_use,sr_t,Against_rule);
+int rhs_uc= determine_rhs_max_use_cnt(Rule_use,sr_t,Against_rule);
+if(use_cnt<rhs_uc){
+use_cnt= rhs_uc;
+}
+}
+i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+if((Against_rule->recursive()==YES)
+&&(Rule_use!=Against_rule))use_cnt= 2*use_cnt;
+uc.use_cnt_= use_cnt;
+return use_cnt;
+}
+
+
+/*:112*//*115:*/
+//line 3610 "./o2externs.w"
+
+void intro_comment
+(std::ofstream&Op_str,const char*File_name){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP op_template=
+"/*\n"
+" File: %s\n"
+" Date and Time: %s\n"
+"*/";
+
+int x= sprintf(big_buf_
+,op_template
+,File_name
+,DATE_AND_TIME()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:115*//*116:*/
+//line 3638 "./o2externs.w"
+
+void grammar_header_includes
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lrk_ph= O2_LRK_PHASE;
+T_rc_phrase*rc_ph= O2_RC_PHASE;
+T_error_symbols_phrase*err_ph= O2_ERROR_PHASE;
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_list=
+"#include \"%s\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"";
+
+int x= sprintf(big_buf_
+,include_list
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,lrk_ph->filename_id()->identifier()->c_str()
+,err_ph->filename_id()->identifier()->c_str()
+,t_ph->filename_id()->identifier()->c_str()
+,rc_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:116*//*117:*/
+//line 3671 "./o2externs.w"
+
+void user_prefix_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP upd_code= "%s";
+
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_prefix_declaration);
+if(i==dir_map->end())return;
+T_user_prefix_declaration* upd = (T_user_prefix_declaration*)i->second;
+int x= sprintf(big_buf_
+,upd_code
+,upd->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+
+/*:117*//*118:*/
+//line 3696 "./o2externs.w"
+
+void thread_entry_extern_for_header
+(std::ofstream&Op_str){
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+if(pp_ph==0){
+Op_str<<"// monolithic grammar: no thread"<<endl;
+return;
+}
+char big_buf_[BIG_BUFFER_32K];
+KCHARP th_extern= "extern yacco2::Thread_entry I%s;\n";
+
+int x= sprintf(big_buf_
+,th_extern
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:118*//*119:*/
+//line 3716 "./o2externs.w"
+
+void using_ns_for_header
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP default_ns_use=
+"using namespace %s;// enumerate\n"
+"using namespace yacco2;";
+
+int x= sprintf(big_buf_
+,default_ns_use
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:119*//*120:*/
+//line 3739 "./o2externs.w"
+
+void fsm_enum_rules_subrules_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP enumeration_of_rules_sbrules=
+" enum rules_and_subrules{\n"
+" start_of_rule_list = %s::T_Enum::sum_total_T";
+int x= sprintf(big_buf_
+,enumeration_of_rules_sbrules
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+int current_rule_no(-1);
+int no_rules= rules_ph->rules_alphabet()->size();
+KCHARP rule_enum=
+" ,R_%s_ = %i//start_of_rule_list + %i";
+for(;i!=ie;++i){
+++current_rule_no;
+rule_def*rd= *i;
+x= sprintf(big_buf_
+,rule_enum
+,rd->rule_name()->c_str()
+,rd->enum_id()
+,current_rule_no++
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+KCHARP subrule_enum=
+" ,rhs%i_%s_ = %i";
+for(;j!=je;++j){
+T_subrule_def*srd= *j;
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,subrule_enum
+,srd->subrule_no_of_rule()
+,rd->rule_name()->c_str()
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+KCHARP end_enumeration_of_rules_sbrules=
+" };";
+Op_str<<end_enumeration_of_rules_sbrules<<endl;
+}
+
+/*:120*//*121:*/
+//line 3807 "./o2externs.w"
+
+void fsm_map_subrules_to_rules_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP array_of_subrules_to_rules_mapping=
+" fsm_rules_reuse_table_type fsm_rules_reuse_table;\n"
+" static int rhs_to_rules_mapping_[%i];";
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+}
+}
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:121*//*122:*/
+//line 3844 "./o2externs.w"
+
+void fsm_comments_about_la_sets_and_states
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP no_of_la_sets_and_states=
+" //no of la sets = %i\n"
+" //no of states = %i";
+int x= sprintf(big_buf_
+,no_of_la_sets_and_states
+,COMMON_LA_SETS.size()
+,NO_LR1_STATES
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:122*//*123:*/
+//line 3866 "./o2externs.w"
+
+void fsm_class_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP class_fsm=
+"class %s: public yacco2::CAbs_fsm {\n"
+" public:";
+int x= sprintf(big_buf_
+,class_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+fsm_enum_rules_subrules_for_header(Op_str);
+fsm_comments_about_la_sets_and_states(Op_str);
+
+KCHARP ctor_fsm=
+" %s();";
+
+x= sprintf(big_buf_
+,ctor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP dtor_fsm=
+" ~%s();";
+x= sprintf(big_buf_
+,dtor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP op_failed=
+" void op();\n"
+" bool failed();";
+Op_str<<op_failed<<endl;
+
+
+KCHARP reduce_rhs=
+" void reduce_rhs_of_rule\n"
+" (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);";
+Op_str<<reduce_rhs<<endl;
+fsm_map_subrules_to_rules_for_header(Op_str);
+KCHARP user_declaration=
+" %s";
+
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_declaration);
+if(i!=dir_map->end()){
+T_user_declaration* ud = (T_user_declaration*)i->second;
+int x= sprintf(big_buf_
+,user_declaration
+,ud->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+KCHARP end_class_fsm=
+" };";
+Op_str<<end_class_fsm<<endl;
+
+}
+/*:123*//*124:*/
+//line 3937 "./o2externs.w"
+
+void forward_refs_of_rules_declarations_for_header
+(std::ofstream&Op_str){
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP forward_ref=
+"struct %s;";
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+int x= sprintf(big_buf_
+,forward_ref
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:124*//*125:*/
+//line 3959 "./o2externs.w"
+
+void rules_class_defs_for_header
+(std::ofstream&Op_str){
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP end_rule_def=
+"};\n";
+/*126:*/
+//line 3970 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+KCHARP start_rule_def=
+"struct %s:public yacco2::CAbs_lr1_sym {\n"
+" %s(yacco2::Parser* P);";
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*127:*/
+//line 4024 "./o2externs.w"
+
+if(rd->parallel_mntr()!=0){
+T_parallel_monitor_phrase*pp_phrase= rd->parallel_mntr();
+if(rd->parallel_mntr()->mntr_directives_map()->empty()!=true){
+SDC_MAP_type*dir_map= pp_phrase->mntr_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_arbitrator_code);
+if(i!=dir_map->end()){
+T_arbitrator_code* ac = (T_arbitrator_code*)i->second;
+string::size_type idx=
+ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+if(idx!=string::npos){
+KCHARP rule_s_arbitrator=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"AR_%s(yacco2::Parser* Caller_pp);// rule's arbitrator";
+
+int x= sprintf(big_buf_
+,rule_s_arbitrator
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+RULES_HAVING_AR.insert(rd);
+}
+}
+}
+}
+
+
+/*:127*/
+//line 3978 "./o2externs.w"
+
+int x= sprintf(big_buf_
+,start_rule_def
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+if(rlhs!=0){
+SDC_MAP_type*dir_map= rlhs->lhs_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_destructor);
+if(i!=dir_map->end()){
+KCHARP rule_def_dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+int x= sprintf(big_buf_
+,rule_def_dtor
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+KCHARP rule_def_op=
+" void op();";
+Op_str<<rule_def_op<<endl;
+}
+i= dir_map->find(SDC_constructor);
+if(i!=dir_map->end()){
+KCHARP rule_def_ctor=
+" void ctor();";
+Op_str<<rule_def_ctor<<endl;
+}
+i= dir_map->find(SDC_user_declaration);
+if(i!=dir_map->end()){
+T_user_declaration* ud = (T_user_declaration*)i->second;
+Op_str<<ud->syntax_code()->syntax_code()->c_str()<<endl;
+}
+}
+/*128:*/
+//line 4054 "./o2externs.w"
+
+KCHARP sub_rule_def_public=
+" public:";
+Op_str<<sub_rule_def_public<<endl;
+KCHARP sub_rule_def=
+" void sr%i();";
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(int xx= 1;j!=je;++j,++xx){
+T_subrule_def*srd= *j;
+SDC_MAP_type*sdrmap= srd->subrule_directives();
+if(!sdrmap->empty()){
+int x= sprintf(big_buf_
+,sub_rule_def
+,xx
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+Op_str<<end_rule_def<<endl;
+
+/*:128*/
+//line 4018 "./o2externs.w"
+
+
+}
+/*:126*/
+//line 3966 "./o2externs.w"
+
+}
+
+/*:125*//*129:*/
+//line 4088 "./o2externs.w"
+
+void possible_thread_procedure_declaration
+(std::ofstream&Op_str){
+if(O2_PP_PHASE==0)return;
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP thd_proc=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s(yacco2::Parser* Caller);// called thread\n"
+"yacco2::THR_result _YACCO2_CALL_TYPE\n"
+"PROC_%s(yacco2::Parser* Caller);// called thread's twin the procedure";
+int x= sprintf(big_buf_
+,thd_proc
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:129*//*130:*/
+//line 4112 "./o2externs.w"
+
+void rules_reuse_table_declaration
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP rules_recycled_table_type=
+"struct fsm_rules_reuse_table_type{\n"
+" fsm_rules_reuse_table_type();\n"
+" int no_rules_entries_;\n"
+" Per_rule_s_reuse_table* per_rule_s_table_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,rules_recycled_table_type
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:130*//*131:*/
+//line 4135 "./o2externs.w"
+
+void namespace_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ns_of_grammar_start=
+"namespace %s {";
+int x= sprintf(big_buf_
+,ns_of_grammar_start
+,fsm_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+possible_thread_procedure_declaration(Op_str);
+using_ns_for_header(Op_str);
+rules_reuse_table_declaration(Op_str);
+fsm_class_declaration_for_header(Op_str);
+forward_refs_of_rules_declarations_for_header(Op_str);
+rules_class_defs_for_header(Op_str);
+KCHARP ns_of_grammar_end=
+"} // end of namespace\n";
+Op_str<<ns_of_grammar_end<<endl;
+}
+
+/*:131*//*132:*/
+//line 4160 "./o2externs.w"
+
+void state_1_extern
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP state_extern=
+"extern yacco2::State S1_%s;";
+int x= sprintf(big_buf_
+,state_extern
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:132*//*133:*/
+//line 4176 "./o2externs.w"
+
+void grammar_include_guard_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,fsm_ph->filename_id()->identifier()->c_str()
+,fsm_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+grammar_header_includes(Op_str);
+user_prefix_declaration_for_header(Op_str);
+thread_entry_extern_for_header(Op_str);
+state_1_extern(Op_str);
+namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+/*:133*//*134:*/
+//line 4204 "./o2externs.w"
+
+void user_suffix_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_suffix_declaration);
+if(i==dir_map->end())return;
+T_user_suffix_declaration* upd = (T_user_suffix_declaration*)i->second;
+KCHARP upd_code= "%s";
+int x= sprintf(big_buf_
+,upd_code
+,upd->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:134*//*135:*/
+//line 4225 "./o2externs.w"
+
+void OP_GRAMMAR_HEADER(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmheader;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmheader_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_HEADER",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+grammar_include_guard_for_header(Op_file);
+user_suffix_declaration_for_header(Op_file);
+Op_file.close();
+}
+
+/*:135*//*137:*/
+//line 4255 "./o2externs.w"
+
+void fsm_cpp_includes
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_list=
+"#include \"%s.h\"";
+
+int x= sprintf(big_buf_
+,include_list
+,fsm_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:137*//*138:*/
+//line 4272 "./o2externs.w"
+
+void using_ns_for_fsm_cpp
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lrk_ph= O2_LRK_PHASE;
+T_rc_phrase*rc_ph= O2_RC_PHASE;
+T_error_symbols_phrase*err_ph= O2_ERROR_PHASE;
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP default_ns_use=
+"using namespace %s;// enumerate\n"
+"using namespace %s;// error symbols\n"
+"using namespace %s;// lrk \n"
+"using namespace %s;// terminals\n"
+"using namespace %s;// rc \n"
+"using namespace %s;// yacco2 library\n"
+"using namespace %s;// grammar's ns\n"
+"// first set terminals";
+
+int x= sprintf(big_buf_
+,default_ns_use
+,enum_ph->namespace_id()->identifier()->c_str()
+,err_ph->namespace_id()->identifier()->c_str()
+,lrk_ph->namespace_id()->identifier()->c_str()
+,t_ph->namespace_id()->identifier()->c_str()
+,rc_ph->namespace_id()->identifier()->c_str()
+,"yacco2"
+,fsm_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:138*//*139:*/
+//line 4310 "./o2externs.w"
+
+void rules_reuse_table_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP rules_recycled_table_type=
+"fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){\n"
+" no_rules_entries_ = %i;";
+int x= sprintf(big_buf_
+,rules_recycled_table_type
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP per_rule_s_table_ref_type=
+" per_rule_s_table_[%i] = new Per_rule_s_reuse_table();";
+
+for(int xx= 1;xx<=no_rules;++xx){
+int x0= xx-1;
+x= sprintf(big_buf_
+,per_rule_s_table_ref_type
+,x0
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<"}"<<endl;
+}
+
+/*:139*//*140:*/
+//line 4344 "./o2externs.w"
+
+void fsm_map_subrules_to_rules_table_imp
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+}
+}
+++overall_subrules_nos;
+
+KCHARP array_of_subrules_to_rules_mapping_start=
+"int %s::rhs_to_rules_mapping_[%i] = {\n"
+" -1";
+int x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping_start
+,fsm_class->identifier()->identifier()->c_str()
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP subrules_to_rule_mapping=
+" ,%i // subrule %i for rule %i";
+
+KCHARP array_of_subrules_to_rules_mapping_end=
+"};%s";
+
+
+
+i= rules_ph->crt_order()->begin();
+ie= rules_ph->crt_order()->end();
+overall_subrules_nos= 0;
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,subrules_to_rule_mapping
+,rd->rule_no()-1
+,overall_subrules_nos
+,rd->rule_no()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping_end," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+enum_ph->total_no_subrules(overall_subrules_nos);
+}
+
+/*:140*//*141:*/
+//line 4426 "./o2externs.w"
+
+void fsm_class_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ctor_fsm=
+" %s::\n"
+" %s()\n"
+" :yacco2::CAbs_fsm\n"
+" (\"%s\"\n"
+" ,\"%s\"\n"
+" ,\"%s\"\n"
+" ,%s\n"
+" ,\"%s\"\n"
+" ,\"%s\"\n"
+" ,S1_%s){\n"
+" %s\n"
+" }";
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_constructor);
+const char*cc_str(0);
+if(i!=dir_map->end()){
+T_constructor* cc = (T_constructor*)i->second;
+cc_str= cc->syntax_code()->syntax_code()->c_str();
+}else{
+cc_str= "";
+}
+
+int x= sprintf(big_buf_
+,ctor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->fsm_id()->c_string()->c_str()
+,fsm_ph->version()->c_string()->c_str()
+,fsm_ph->date()->c_string()->c_str()
+,fsm_ph->debug()->c_string()->c_str()
+,fsm_ph->comment()->c_string()->c_str()
+,DATE_AND_TIME()
+,fsm_class->identifier()->identifier()->c_str()
+,cc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP dtor_rtn_start=
+" \n"
+"%s::~%s(){\n"
+"%s";
+i= dir_map->find(SDC_destructor);
+const char*dc_str(0);
+if(i!=dir_map->end()){
+T_destructor* dc = (T_destructor*)i->second;
+dc_str= dc->syntax_code()->syntax_code()->c_str();
+}else{
+dc_str= "";
+}
+x= sprintf(big_buf_
+,dtor_rtn_start
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,dc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+KCHARP delete_recycled_rules=
+" for(int x = 0;x < %i;++x){\n"
+" ///delete fsm_rules_reuse_table.per_rule_s_table_[x];\n"
+" }";
+
+x= sprintf(big_buf_
+,delete_recycled_rules
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP dtor_rtn_end=
+"}%s\n"
+"";
+x= sprintf(big_buf_
+,dtor_rtn_end," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP failed_rtn=
+" bool %s::failed(){\n"
+" %s\n"
+" }";
+
+i= dir_map->find(SDC_failed);
+const char*fc_str(0);
+if(i!=dir_map->end()){
+T_failed* fc = (T_failed*)i->second;
+fc_str= fc->syntax_code()->syntax_code()->c_str();
+}else{
+fc_str= " return false;";
+}
+x= sprintf(big_buf_
+,failed_rtn
+,fsm_class->identifier()->identifier()->c_str()
+,fc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP op_rtn=
+" void %s::op(){%s\n}";
+i= dir_map->find(SDC_op);
+const char*oc_str(0);
+if(i!=dir_map->end()){
+T_op* oc = (T_op*)i->second;
+oc_str= oc->syntax_code()->syntax_code()->c_str();
+}else{
+oc_str= "";
+}
+x= sprintf(big_buf_
+,op_rtn
+,fsm_class->identifier()->identifier()->c_str()
+,oc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+fsm_map_subrules_to_rules_table_imp(Op_str);
+dir_map= fsm_class->directives_map();
+i= dir_map->find(SDC_user_implementation);
+if(i!=dir_map->end()){
+T_user_implementation* ui = (T_user_implementation*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str()<<endl;
+}
+}
+
+/*:141*//*142:*/
+//line 4569 "./o2externs.w"
+
+void rules_subrules_implementations
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+/*143:*/
+//line 4579 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*144:*/
+//line 4730 "./o2externs.w"
+
+if(rd->parallel_mntr()!=0){
+T_parallel_monitor_phrase* pp_phrase = rd->parallel_mntr();
+/*145:*/
+//line 4736 "./o2externs.w"
+
+if(pp_phrase->mntr_directives_map()->empty()!=true){
+SDC_MAP_type*pp_map= pp_phrase->mntr_directives_map();
+SDC_MAP_ITER_type p= pp_map->find(SDC_arbitrator_code);
+if(p!=pp_map->end()){
+T_arbitrator_code* ac = (T_arbitrator_code*)p->second;
+string::size_type idx=
+ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+if(idx!=string::npos){
+KCHARP rule_s_arbitrator_imp=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s::AR_%s(yacco2::Parser* Caller_pp){\n"
+" yacco2::KCHARP ar_name = \"AR_%s\";\n"
+"#include \"war_begin_code.h\"\n"
+" %s\n"
+"#include \"war_end_code.h\"\n"
+"}\n";
+int x= sprintf(big_buf_
+,rule_s_arbitrator_imp
+,fsm_ph->namespace_id()->identifier()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,ac->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+
+/*:145*/
+//line 4733 "./o2externs.w"
+
+}
+/*:144*/
+//line 4584 "./o2externs.w"
+
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+const char*ctor_code(0);
+const char*dtor_code(0);
+string dtor_name("0");
+const char*op_code(0);
+const char*user_imp_code(0);
+T_destructor*dtor(0);
+if(rlhs!=0){
+SDC_MAP_type*dir_map= rlhs->lhs_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_constructor);
+if(i!=dir_map->end()){
+T_constructor* ctor = (T_constructor*)i->second;
+ctor_code= ctor->syntax_code()->syntax_code()->c_str();
+}
+i= dir_map->find(SDC_destructor);
+if(i!=dir_map->end()){
+dtor = (T_destructor*)i->second;
+dtor_code= dtor->syntax_code()->syntax_code()->c_str();
+KCHARP dtor_nm=
+"&dtor_%s";
+sprintf(big_buf_
+,dtor_nm
+,rd->rule_name()->c_str()
+);
+dtor_name.clear();
+dtor_name+= big_buf_;
+}
+i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+T_op* op = (T_op*)i->second;
+op_code= op->syntax_code()->syntax_code()->c_str();
+}
+
+i= dir_map->find(SDC_user_implementation);
+if(i!=dir_map->end()){
+T_user_implementation* uimp= (T_user_implementation*)i->second;
+user_imp_code= uimp->syntax_code()->syntax_code()->c_str();
+}
+}
+
+KCHARP rule_def_imp=
+"%s::%s(yacco2::Parser* P)\n"
+" :CAbs_lr1_sym\n"
+" (\"%s\",%s,%s::R_%s_,P,%s,%s){\n"
+"}\n";
+string ad;
+if(rd->autodelete()==true){
+ad+= "true";
+}else{
+ad+= "false";
+}
+string ab;
+if(rd->autoabort()==true){
+ab+= "true";
+}else{
+ab+= "false";
+}
+int x= sprintf(big_buf_
+,rule_def_imp
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_name.c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,rd->rule_name()->c_str()
+,ad.c_str()
+,ab.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+if(dtor_code!=0){
+std::string::size_type r=
+dtor->syntax_code()->syntax_code()->find("ABORT_STATUS");
+KCHARP rule_def_dtor=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP rule_def_dtor_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+int x;
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,rule_def_dtor
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_code
+);
+}else{
+x= sprintf(big_buf_
+,rule_def_dtor_noabort
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_code
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+if(op_code!=0){
+KCHARP rule_def_op=
+"void %s::op(){\n"
+" sstrace_rulesss\n"
+" %s\n"
+"}";
+int x= sprintf(big_buf_
+,rule_def_op
+,rd->rule_name()->c_str()
+,op_code
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+if(ctor_code!=0){
+KCHARP rule_def_ctor=
+"void %s::ctor(){\n"
+" %s\n"
+"}";
+int x= sprintf(big_buf_
+,rule_def_ctor
+,rd->rule_name()->c_str()
+,ctor_code
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+if(user_imp_code!=0){
+Op_str<<user_imp_code<<endl;
+}
+/*146:*/
+//line 4779 "./o2externs.w"
+
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+int nosrs= sr_ph->no_subrules();
+for(int xx= 1;j!=je;++j,++xx){
+T_subrule_def*srd= *j;
+AST*sr_t= AST::get_spec_child(*srd->subrule_s_tree(),1);
+int no_parms= srd->no_of_elems()-1;
+KCHARP sub_rule_def_imp=
+"void %s::sr%i(){";
+SDC_MAP_type*dir_map= srd->subrule_directives();
+if(dir_map->empty()!=true){
+int x= sprintf(big_buf_
+,sub_rule_def_imp
+,rd->rule_name()->c_str()
+,xx
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+SDC_MAP_ITER_type i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+T_op* rhsc = (T_op*)i->second;
+std::string::size_type idx;
+idx= rhsc->syntax_code()->syntax_code()->find("sf->p");
+
+if(idx==std::string::npos)goto write_out_op_code;
+/*147:*/
+//line 4847 "./o2externs.w"
+
+for(int y= 1;y<=no_parms;++y){
+bool eos_thd_or_proc(false);
+CAbs_lr1_sym*sym= AST::content(*sr_t);
+const char*parm_name(0);
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)sym;
+parm_name= rr->its_rule_def()->rule_name()->c_str();
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)sym;
+T_terminal_def*td= rt->its_t_def();
+if(td->enum_id()==LR1_ALL_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+if(td->enum_id()==LR1_QUESTIONABLE_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+if(td->enum_id()==LR1_INVISIBLE_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+parm_name= td->classsym()->c_str();
+break;
+}
+case T_Enum::T_T_identifier_:{
+parm_name= "T_identifier";
+break;
+}
+case T_Enum::T_T_NULL_:{
+parm_name= "T_NULL";
+break;
+}
+case T_Enum::T_T_2colon_:{
+parm_name= "T_2colon";
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+eos_thd_or_proc= true;
+--no_parms;
+--y;
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+eos_thd_or_proc= true;
+--no_parms;
+--y;
+break;
+}
+}
+
+
+if(y==1){
+KCHARP sub_rule_stk_parms_begin=
+" struct SF{";
+Op_str<<sub_rule_stk_parms_begin<<endl;
+}
+KCHARP sub_rule_stk_parm=
+" %s* p%i__;\n"
+" State* s%i__;\n"
+" bool abort%i__;\n"
+" Rule_s_reuse_entry* rule_s_reuse_entry%i__;";
+if(eos_thd_or_proc==false){
+int x= sprintf(big_buf_
+,sub_rule_stk_parm
+,parm_name
+,y
+,y
+,y
+,y
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+sr_t= AST::brother(*sr_t);
+}
+if(no_parms> 0){
+KCHARP sub_rule_stk_parms_end=
+" };";
+Op_str<<sub_rule_stk_parms_end<<endl;
+KCHARP stk_frame_equate=
+" SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(%i);";
+
+int x= sprintf(big_buf_
+,stk_frame_equate
+,no_parms
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:147*/
+//line 4807 "./o2externs.w"
+
+write_out_op_code:;
+KCHARP sub_rule_def_op_code=
+" %s";
+int x= sprintf(big_buf_
+,sub_rule_def_op_code
+,rhsc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+KCHARP sub_rule_def_end=
+"}\n";
+Op_str<<sub_rule_def_end<<endl;
+}
+}
+/*:146*/
+//line 4726 "./o2externs.w"
+
+}
+
+/*:143*/
+//line 4576 "./o2externs.w"
+
+}
+/*:142*//*148:*/
+//line 4943 "./o2externs.w"
+
+void OP_GRAMMAR_CPP(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmimp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmcpp_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+rules_reuse_table_implementation(Op_file);
+fsm_class_implementation(Op_file);
+rules_subrules_implementations(Op_file);
+Op_file.close();
+}
+
+/*:148*//*150:*/
+//line 4987 "./o2externs.w"
+
+void user_imp_sym
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_imp_sym);
+if(i!=dir_map->end()){
+T_user_imp_sym* ui = (T_user_imp_sym*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str();
+Op_str<<endl;
+}
+}
+/*:150*//*151:*/
+//line 5004 "./o2externs.w"
+
+void thread_implementation
+(std::ofstream&Op_str){
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+if(pp_ph==0){
+Op_str<<"// monolithic grammar --- no thread"<<endl;
+return;
+}
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP thread_definition=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s::%s(yacco2::Parser* Caller_pp){\n"
+" yacco2::Thread_entry& pp_thread_entry = I%s;\n"
+" %s::%s %s_;// parallel-parser's parse table\n"
+"#define ssPARSE_TABLE %s_\n"
+"#include \"wpp_core.h\"\n"
+"}";
+
+int x= sprintf(big_buf_
+,thread_definition
+,fsm_ph->namespace_id()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP proc_thread_definition=
+"THR_result _YACCO2_CALL_TYPE\n"
+"%s::PROC_%s(yacco2::Parser* Caller_pp){\n"
+" char called_proc_name[] = \"PROC_%s\";\n"
+" static bool one_time(false);\n"
+" static %s::%s* %s_%s_(0);// parallel-parser's fsm table\n"
+" static Parser* %s_%s_parser(0);\n"
+" Parser* proc_parser(0);\n"
+" if(one_time == false){\n"
+" one_time = true;\n"
+" %s_%s_ = new %s::%s();// parallel-parser's fsm table\n"
+" %s_%s_parser = new Parser(*%s_%s_,Caller_pp);\n"
+" }\n"
+" proc_parser = %s_%s_parser;\n"
+"#include \"wproc_pp_core.h\"\n"
+"}";
+
+x= sprintf(big_buf_
+,proc_thread_definition
+,fsm_ph->namespace_id()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:151*//*152:*/
+//line 5087 "./o2externs.w"
+
+void fsm_reduce_rhs_of_rule_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP reduce_rhs_of_rule_hdr=
+"void \n"
+"%s::reduce_rhs_of_rule\n"
+" (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){\n"
+" int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];\n"
+" Per_rule_s_reuse_table* rule_reuse_tbl_ptr = \n"
+" fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];\n"
+" Rule_s_reuse_entry* re(0);\n"
+" find_a_recycled_rule(rule_reuse_tbl_ptr,&re);\n"
+" (*Recycled_rule) = re;\n"
+" fnd_re: switch (Sub_rule_no){";
+int x= sprintf(big_buf_
+,reduce_rhs_of_rule_hdr
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*153:*/
+//line 5116 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*154:*/
+//line 5170 "./o2externs.w"
+
+const char*rule_s_ctor= "// no rule's constructor directive";
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+if(rlhs!=0){
+SDC_MAP_type*rdlhs_map= rlhs->lhs_directives_map();
+if(rdlhs_map!=0){
+SDC_MAP_ITER_type kkk= rdlhs_map->find(SDC_constructor);
+if(kkk!=rdlhs_map->end()){
+T_constructor* cc = (T_constructor*)kkk->second;
+rule_s_ctor= "sym->ctor();\n";
+}
+}
+}
+
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+KCHARP case_stmt_parta=
+" case rhs%i_%s_:{\n"
+" %s* sym;\n"
+" if(re->rule_ == 0){\n"
+" sym = new %s(parser__);\n"
+" re->rule_ = sym;\n"
+" }else{\n"
+" sym = (%s*)re->rule_;\n"
+" }\n"
+" %s\n"
+" (*Recycled_rule)->rule_ = sym;\n"
+" sym->rule_info__.rhs_no_of_parms__ = %i;\n"
+" \n";
+KCHARP case_stmt_partb= " sym->sr%i();";
+KCHARP case_stmt_partc= " return;}";
+for(;j!=je;++j){
+T_subrule_def*srd= *j;
+
+int no_parms= srd->no_of_elems()-1;
+
+AST*sr_t= srd->subrule_s_tree();
+set<int> eos_filter;
+eos_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+eos_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+tok_can_ast_functor walk_the_plank_mate;
+ast_prefix_1forest eos_walk
+(*sr_t,&walk_the_plank_mate,&eos_filter,ACCEPT_FILTER);
+tok_can<AST*> eos_can(eos_walk);
+for(int xxx= 0;eos_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+if(eos_can.empty()==false)--no_parms;
+
+int x= sprintf(big_buf_
+,case_stmt_parta
+,srd->subrule_no_of_rule()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rule_s_ctor
+,no_parms);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+SDC_MAP_type*sdrmap= srd->subrule_directives();
+
+if(!sdrmap->empty()){
+int x= sprintf(big_buf_,case_stmt_partb,srd->subrule_no_of_rule());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+
+if(rd->rule_lhs()!=0){
+SDC_MAP_type*xxrdmap= rd->rule_lhs()->lhs_directives_map();
+if(xxrdmap!=0){
+SDC_MAP_ITER_type kkk= xxrdmap->find(SDC_op);
+if(kkk!=xxrdmap->end()){
+Op_str<<" sym->op();"<<endl;
+}
+}
+}
+Op_str<<case_stmt_partc<<endl;
+}
+
+
+
+/*:154*/
+//line 5121 "./o2externs.w"
+
+}
+KCHARP default_case_and_end_sw=
+" default: return;\n"
+" }";
+Op_str<<default_case_and_end_sw<<endl;
+
+KCHARP end_rtn=
+"}";
+Op_str<<end_rtn<<endl;
+
+/*:153*/
+//line 5112 "./o2externs.w"
+
+}
+
+/*:152*//*155:*/
+//line 5254 "./o2externs.w"
+
+void OP_GRAMMAR_SYM(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmsym;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmsym_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_imp_sym(Op_file);
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+thread_implementation(Op_file);
+
+fsm_reduce_rhs_of_rule_implementation(Op_file);
+Op_file.close();
+}
+
+/*:155*//*157:*/
+//line 5303 "./o2externs.w"
+
+void user_imp_tbl
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_imp_tbl);
+if(i!=dir_map->end()){
+T_user_imp_tbl* ui = (T_user_imp_tbl*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str();
+Op_str<<endl;
+}
+}
+
+/*:157*//*158:*/
+//line 5318 "./o2externs.w"
+
+void output_la_sets
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+
+COMMON_LA_SETS_ITER_type i= COMMON_LA_SETS.begin();
+COMMON_LA_SETS_ITER_type ie= COMMON_LA_SETS.end();
+for(int idx= 0;i!=ie;++i,++idx){
+LA_SET_type*la_set= *i;
+/*159:*/
+//line 5335 "./o2externs.w"
+
+KCHARP la_set_entry_literal=
+"// %s";
+LA_SET_ITER_type j= la_set->begin();
+LA_SET_ITER_type je= la_set->end();
+for(;j!=je;++j){
+T_in_stbl*tsym= *j;
+int x= sprintf(big_buf_
+,la_set_entry_literal
+,tsym->t_def()->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:159*/
+//line 5329 "./o2externs.w"
+
+/*160:*/
+//line 5359 "./o2externs.w"
+
+KCHARP la_set_hdr=
+"yacco2::UCHAR LA%i_%s[] ={";
+int x= sprintf(big_buf_
+,la_set_hdr
+,idx+1
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*161:*/
+//line 5373 "./o2externs.w"
+
+BIT_MAP_type paired_set;
+LA_SET_ITER_type k= la_set->begin();
+LA_SET_ITER_type ke= la_set->end();
+int en_no(-1);
+for(;k!=ke;++k){
+T_in_stbl*T= *k;
+en_no= T->t_def()->enum_id();
+
+int Q= en_no/NO_BITS_PER_SET_PARTITION;
+int R= en_no%NO_BITS_PER_SET_PARTITION;
+int One(1);
+int E_v= One<<R;
+BIT_MAP_ITER_type e= paired_set.find(Q);
+if(e==paired_set.end()){
+paired_set[Q]= E_v;
+}else{
+int se= e->second;
+int v= se+E_v;
+e->second= v;
+}
+}
+
+/*:161*/
+//line 5369 "./o2externs.w"
+
+/*162:*/
+//line 5397 "./o2externs.w"
+
+KCHARP no_la_set_entries=
+"%i";
+x= sprintf(big_buf_
+,no_la_set_entries
+,paired_set.size()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+BIT_MAP_ITER_type kl= paired_set.begin();
+BIT_MAP_ITER_type kle= paired_set.end();
+for(;kl!=kle;++kl){
+int part_no= kl->first;
+int e_v= kl->second;
+KCHARP la_set_entry=
+",%i,%i";
+x= sprintf(big_buf_
+,la_set_entry
+,part_no
+,e_v
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+KCHARP la_set_hdr_end=
+"};";
+Op_str<<la_set_hdr_end<<endl;
+
+
+/*:162*/
+//line 5370 "./o2externs.w"
+
+
+/*:160*/
+//line 5330 "./o2externs.w"
+
+}
+}
+/*:158*//*163:*/
+//line 5427 "./o2externs.w"
+
+void externs_and_thread_tbl_defs
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+
+char big_buf_[BIG_BUFFER_32K];
+STATES_ITER_type i= LR1_STATES.begin();
+STATES_ITER_type ie= LR1_STATES.end();
+int state_cnt(0);
+for(;i!=ie;++i){
+state*s= *i;
+++state_cnt;
+KCHARP state_extern=
+"extern yacco2::State S%i_%s;";
+int x= sprintf(big_buf_
+,state_extern
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*164:*/
+//line 5455 "./o2externs.w"
+
+using namespace NS_yacco2_T_enum;
+if(s->vectored_into_by_elem_sym_==0)continue;
+switch(s->vectored_into_by_elem_){
+case LR1_PARALLEL_OPERATOR:{
+/*165:*/
+//line 5472 "./o2externs.w"
+
+string ar_name;
+rule_def*ar_s_rule_s_name(0);
+int no_of_threads(0);
+S_VECTORS_ITER_type j= s->state_s_vector_.begin();
+S_VECTORS_ITER_type je= s->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+
+if(se->next_state_element_==0)continue;
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));
+if(sym->enumerated_id__!=T_Enum::T_T_called_thread_eosubrule_)continue;
+rule_def*rd= se->subrule_def_->its_rule_def();
+RULES_HAVING_AR_ITER_type ai= RULES_HAVING_AR.find(rd);
+if(ai!=RULES_HAVING_AR.end()){
+ar_s_rule_s_name= rd;
+}
+++no_of_threads;
+}
+}
+if(ar_s_rule_s_name!=0){
+ar_name+= "AR_";
+ar_name+= ar_s_rule_s_name->rule_name()->c_str();
+s->arbitrator_name_= new string(ar_name);
+}
+
+/*:165*/
+//line 5460 "./o2externs.w"
+
+/*166:*/
+//line 5509 "./o2externs.w"
+
+if(no_of_threads> 0){
+KCHARP state_s_thread_tbl_def=
+"struct S%ittd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;\n"
+" yacco2::ULINT (*thd_id_bit_map_ptr__)[];\n"
+" yacco2::Thread_entry* thread_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_def
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_threads
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*168:*/
+//line 5609 "./o2externs.w"
+
+if(ar_name.empty()==true)
+ar_name+= "0";
+
+
+/*:168*/
+//line 5526 "./o2externs.w"
+
+KCHARP state_s_thread_tbl_imp=
+"S%ittd_%s S%itt_%s = {\n"
+" %i // no of threads\n"
+" ,%s //AR_rulename or 0\n"
+" ,0// ptr to thread id bit map";
+x= sprintf(big_buf_
+,state_s_thread_tbl_imp
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_threads
+,ar_name.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+j= s->state_s_vector_.begin();
+je= s->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+if(se->next_state_element_==0)continue;
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;
+KCHARP state_s_thread_tbl_entry=
+" ,(yacco2::Thread_entry*)&I%s";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_entry
+,called_th->called_thread_name()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+KCHARP state_s_thread_tbl_end=
+"};";
+Op_str<<state_s_thread_tbl_end<<endl;
+}
+/*:166*/
+//line 5461 "./o2externs.w"
+
+break;
+}
+default:continue;
+}
+
+/*:164*/
+//line 5449 "./o2externs.w"
+
+}
+}
+/*:163*//*169:*/
+//line 5616 "./o2externs.w"
+
+const char*determine_shift_element_name(CAbs_lr1_sym*Sym){
+switch(Sym->enumerated_id__){
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* td = (T_terminal_def*)Sym;
+return td->classsym()->c_str();
+}
+case T_Enum::T_rule_def_:{
+rule_def* rd = (rule_def*)Sym;
+return rd->rule_name()->c_str();
+}
+}
+return"element not found";
+}
+
+/*:169*//*170:*/
+//line 5638 "./o2externs.w"
+
+void output_1st_state_s_shift_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+rule_def*s_rule= (*rules_ph->crt_order())[0];
+int s_rule_enum_no= s_rule->enum_id();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi;
+S_VECTORS_ITER_type svie;
+/*176:*/
+//line 5806 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5878 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5814 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 5648 "./o2externs.w"
+
+++no_of_shift_items;
+bool first_or_2nd_prt(false);
+bool accept_prted(false);
+/*173:*/
+//line 5741 "./o2externs.w"
+
+KCHARP def_of_state_s_shift_entries=
+"struct S%istd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Shift_entry shift_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,def_of_state_s_shift_entries
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP imp_of_state_s_shift_entries_begin=
+"S%istd_%s S%ist_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,imp_of_state_s_shift_entries_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*:173*/
+//line 5652 "./o2externs.w"
+
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5878 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5659 "./o2externs.w"
+
+int goto_state_no= se->goto_state_->state_no_;
+const char*shift_elem_literal= determine_shift_element_name(se->sr_def_element_);
+if(cur_se_enum_no<s_rule_enum_no){
+/*171:*/
+//line 5680 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5663 "./o2externs.w"
+
+}else{
+if(accept_prted==false){
+accept_prted= true;
+/*172:*/
+//line 5711 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_1st_entry=
+" ,{%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:172*/
+//line 5667 "./o2externs.w"
+
+}
+/*171:*/
+//line 5680 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5669 "./o2externs.w"
+
+}
+}
+if(accept_prted==false){
+accept_prted= true;
+/*172:*/
+//line 5711 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_1st_entry=
+" ,{%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:172*/
+//line 5674 "./o2externs.w"
+
+}
+/*174:*/
+//line 5772 "./o2externs.w"
+
+KCHARP imp_of_shift_entries_end=
+" }// end of shift table\n"
+"};";
+Op_str<<imp_of_shift_entries_end<<endl;
+
+/*:174*/
+//line 5676 "./o2externs.w"
+
+}
+
+/*:170*//*175:*/
+//line 5779 "./o2externs.w"
+
+void output_all_others_state_s_shift_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+bool first_or_2nd_prt(false);
+S_VECTORS_ITER_type svi;
+S_VECTORS_ITER_type svie;
+/*176:*/
+//line 5806 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5878 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5814 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 5787 "./o2externs.w"
+
+if(no_of_shift_items){
+/*173:*/
+//line 5741 "./o2externs.w"
+
+KCHARP def_of_state_s_shift_entries=
+"struct S%istd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Shift_entry shift_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,def_of_state_s_shift_entries
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP imp_of_state_s_shift_entries_begin=
+"S%istd_%s S%ist_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,imp_of_state_s_shift_entries_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*:173*/
+//line 5789 "./o2externs.w"
+
+S_VECTORS_ITER_type svi= State.state_s_vector_.begin();
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5878 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5796 "./o2externs.w"
+
+int goto_state_no= se->goto_state_->state_no_;
+const char*shift_elem_literal= determine_shift_element_name(se->sr_def_element_);
+/*171:*/
+//line 5680 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5799 "./o2externs.w"
+
+}
+/*174:*/
+//line 5772 "./o2externs.w"
+
+KCHARP imp_of_shift_entries_end=
+" }// end of shift table\n"
+"};";
+Op_str<<imp_of_shift_entries_end<<endl;
+
+/*:174*/
+//line 5801 "./o2externs.w"
+
+}
+}
+
+/*:175*//*179:*/
+//line 5894 "./o2externs.w"
+
+void output_meta_shifts_separately(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+"yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_PARALLEL_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_INVISIBLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+"yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_ALL_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+"yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_FSET_TRANSIENCE_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+"yacco2::Shift_entry S%iqse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_QUESTIONABLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+}
+
+/*:179*//*180:*/
+//line 5994 "./o2externs.w"
+
+void output_state_s_reduced_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+/*181:*/
+//line 6013 "./o2externs.w"
+
+int no_of_reduces(0);
+S_VECTORS_ITER_type j= State.state_s_vector_.begin();
+S_VECTORS_ITER_type je= State.state_s_vector_.end();
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+S_VECTOR_ELEMS_ITER_type seli= j->second.begin();
+state_element*se= *seli;
+if(cur_se_enum_no>=0)break;
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0){
+no_of_reduces+= j->second.size();
+continue;
+}
+}
+}
+}
+
+/*:181*/
+//line 5999 "./o2externs.w"
+
+/*182:*/
+//line 6033 "./o2externs.w"
+
+if(no_of_reduces> 0){
+KCHARP reduce_def=
+"struct S%irtd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Reduce_entry reduce_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,reduce_def
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_reduces
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP reduce_imp_begin=
+"S%irtd_%s S%irt_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,reduce_imp_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_reduces
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*183:*/
+//line 6070 "./o2externs.w"
+
+j= State.state_s_vector_.begin();
+je= State.state_s_vector_.end();
+int reduce_no(-1);
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+if(cur_se_enum_no>=0)break;
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+++reduce_no;
+state_element*se= *k;
+if(reduce_no==0){
+KCHARP reduce_imp_1st_entry=
+" {(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+int x= sprintf(big_buf_
+,reduce_imp_1st_entry
+,se->common_la_set_idx_+1
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,se->subrule_def_->subrule_no_of_rule()
+,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+KCHARP reduce_imp_2nd_entry=
+" ,{(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+int x= sprintf(big_buf_
+,reduce_imp_2nd_entry
+,se->common_la_set_idx_+1
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,se->subrule_def_->subrule_no_of_rule()
+,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+
+/*:183*/
+//line 6063 "./o2externs.w"
+
+KCHARP reduce_imp_end=
+" }// end of reduce table\n"
+"};";
+Op_str<<reduce_imp_end<<endl;
+}
+/*:182*/
+//line 6000 "./o2externs.w"
+
+}
+
+/*:180*//*184:*/
+//line 6114 "./o2externs.w"
+
+void output_state_s_called_threads_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp=
+"yacco2::Shift_entry S%ipse_%s = \n"
+"{%i,(State*)&S%i_%s};\n";
+}
+
+/*:184*//*185:*/
+//line 6125 "./o2externs.w"
+
+void output_state_s_called_procedure_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp=
+"yacco2::Shift_entry S%ipcse_%s = \n"
+"{%i,(State*)&S%i_%s};\n";
+}
+/*:185*//*186:*/
+//line 6135 "./o2externs.w"
+
+void output_questionable_shift(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+"yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_PARALLEL_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_INVISIBLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+"yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_ALL_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+"yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_FSET_TRANSIENCE_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_QUESTIONABLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:186*//*187:*/
+//line 6238 "./o2externs.w"
+
+void output_lr_state(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP state_entry=
+"yacco2::State S%i_%s = //State's vectored into symbol: \"%s\" \n"
+"{%i";
+int x= sprintf(big_buf_
+,state_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.entry_symbol_literal()
+,State.state_no_
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*188:*/
+//line 6270 "./o2externs.w"
+
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+",(Shift_entry*)&S%ipse_%s";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+/*:188*/
+//line 6256 "./o2externs.w"
+
+/*189:*/
+//line 6290 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+",(Shift_entry*)&S%iase_%s";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+/*:189*/
+//line 6257 "./o2externs.w"
+
+/*190:*/
+//line 6310 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+",(Shift_entry*)&S%iise_%s";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+/*:190*/
+//line 6258 "./o2externs.w"
+
+/*191:*/
+//line 6330 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+",(Shift_entry*)&S%ipcse_%s";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+/*:191*/
+//line 6259 "./o2externs.w"
+
+/*193:*/
+//line 6371 "./o2externs.w"
+
+/*176:*/
+//line 5806 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5878 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5814 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 6372 "./o2externs.w"
+
+if(no_of_shift_items> 0){
+KCHARP shift_entry=
+",(Shift_tbl*)&S%ist_%s";
+int x= sprintf(big_buf_
+,shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+
+/*:193*/
+//line 6260 "./o2externs.w"
+
+/*194:*/
+//line 6388 "./o2externs.w"
+
+/*181:*/
+//line 6013 "./o2externs.w"
+
+int no_of_reduces(0);
+S_VECTORS_ITER_type j= State.state_s_vector_.begin();
+S_VECTORS_ITER_type je= State.state_s_vector_.end();
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+S_VECTOR_ELEMS_ITER_type seli= j->second.begin();
+state_element*se= *seli;
+if(cur_se_enum_no>=0)break;
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0){
+no_of_reduces+= j->second.size();
+continue;
+}
+}
+}
+}
+
+/*:181*/
+//line 6389 "./o2externs.w"
+
+if(no_of_reduces> 0){
+KCHARP reduce_entry=
+",(Reduce_tbl*)&S%irt_%s";
+int x= sprintf(big_buf_
+,reduce_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+}else{
+Op_str<<",0";
+}
+/*:194*/
+//line 6261 "./o2externs.w"
+
+/*195:*/
+//line 6406 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+if(se->next_state_element_->goto_state_==0){
+Op_str<<",0";
+}else{
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP thread_calls_entry=
+",(State_s_thread_tbl*)&S%itt_%s";
+int x= sprintf(big_buf_
+,thread_calls_entry
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+}
+}else{
+Op_str<<",0";
+}
+
+/*:195*/
+//line 6262 "./o2externs.w"
+
+/*196:*/
+//line 6432 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+if(se->next_state_element_->goto_state_==0){
+Op_str<<",0";
+}else{
+/*167:*/
+//line 5578 "./o2externs.w"
+
+S_VECTORS_ITER_type j= se->goto_state_->state_s_vector_.begin();
+S_VECTORS_ITER_type je= se->goto_state_->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+if(se->next_state_element_==0)continue;
+AST*bypassed_thd_eos_t= AST::brother(*se->sr_element_);
+CAbs_lr1_sym*sym= AST::content(*bypassed_thd_eos_t);
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;
+KCHARP state_s_thread_tbl_entry=
+",(yacco2::Type_pc_fnct_ptr)&%s::%s";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_entry
+,called_th->ns()->identifier()->c_str()
+,called_th->called_thread_name()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}
+}
+}
+
+/*:167*/
+//line 6440 "./o2externs.w"
+
+}
+}else{
+Op_str<<",0";
+}
+
+/*:196*/
+//line 6263 "./o2externs.w"
+
+/*192:*/
+//line 6350 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+",(Shift_entry*)&S%iqse_%s";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+
+/*:192*/
+//line 6264 "./o2externs.w"
+
+Op_str<<"};"<<endl;
+}
+
+
+/*:187*//*197:*/
+//line 6453 "./o2externs.w"
+
+void emit_each_lr_state_s_tables(std::ofstream&Op_str){
+STATES_ITER_type si= LR1_STATES.begin();
+STATES_ITER_type sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+if(cur_state->state_no_==1){
+output_1st_state_s_shift_table(Op_str,*cur_state);
+}else{
+output_all_others_state_s_shift_table(Op_str,*cur_state);
+}
+output_meta_shifts_separately(Op_str,*cur_state);
+output_state_s_reduced_table(Op_str,*cur_state);
+output_state_s_called_threads_table(Op_str,*cur_state);
+output_state_s_called_procedure_table(Op_str,*cur_state);
+output_lr_state(Op_str,*cur_state);
+}
+}
+/*:197*//*198:*/
+//line 6472 "./o2externs.w"
+
+void OP_GRAMMAR_TBL(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmtbl;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmtbl_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_imp_tbl(Op_file);
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+output_la_sets(Op_file);
+externs_and_thread_tbl_defs(Op_file);
+emit_each_lr_state_s_tables(Op_file);
+Op_file.close();
+}
+
+/*:198*//*200:*/
+//line 6518 "./o2externs.w"
+
+void enumerate_lrk
+(std::ofstream&Op_str){
+T_lr1_k_phrase*ph= O2_LRK_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:200*//*201:*/
+//line 6545 "./o2externs.w"
+
+void enumerate_rc
+(std::ofstream&Op_str){
+T_rc_phrase*ph= O2_RC_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:201*//*202:*/
+//line 6571 "./o2externs.w"
+
+void enumerate_errors
+(std::ofstream&Op_str){
+T_error_symbols_phrase*ph= O2_ERROR_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+/*:202*//*203:*/
+//line 6597 "./o2externs.w"
+
+void enumerate_T
+(std::ofstream&Op_str){
+T_terminals_phrase*ph= O2_T_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:203*//*204:*/
+//line 6620 "./o2externs.w"
+
+void enumeration_summary_for_struct
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP summary=
+" sum_total_T = %i\n"
+" ,no_of_terminals = %i\n"
+" ,no_of_raw_chars = %i\n"
+" ,no_of_lr1_constants = %i\n"
+" ,no_of_error_terminals = %i\n"
+" ,start_LRK=%i,end_LRK=%i\n"
+" ,start_RC=%i,end_RC=%i\n"
+" ,start_T=%i,end_T=%i\n"
+" ,start_ERR=%i,end_ERR=%i\n"
+" ,start_R=%i";
+int x= sprintf(big_buf_
+,summary
+,enum_ph->total_enumerate()
+,enum_ph->total_T_enumerate()
+,enum_ph->total_rc_enumerate()
+,enum_ph->total_lrk_enumerate()
+,enum_ph->total_err_enumerate()
+,enum_ph->start_lrk_enumerate(),enum_ph->stop_lrk_enumerate()
+,enum_ph->start_rc_enumerate(),enum_ph->stop_rc_enumerate()
+,enum_ph->start_T_enumerate(),enum_ph->stop_T_enumerate()
+,enum_ph->start_err_enumerate(),enum_ph->stop_err_enumerate()
+,enum_ph->total_enumerate()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:204*//*205:*/
+//line 6654 "./o2externs.w"
+
+void enumeration_define_list
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enum_list_start=
+" enum enumerated_terminals%s{";
+int x= sprintf(big_buf_
+,enum_list_start," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_summary_for_struct(Op_str);
+enumerate_lrk(Op_str);
+enumerate_rc(Op_str);
+enumerate_T(Op_str);
+enumerate_errors(Op_str);
+
+KCHARP enum_list_end=
+" }; // close defining enum list";
+Op_str<<enum_list_end<<endl;
+}
+
+/*:205*//*206:*/
+//line 6679 "./o2externs.w"
+
+void enumeration_define_structure
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP struct_start=
+" struct T_Enum%s{";
+int x= sprintf(big_buf_
+,struct_start," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_define_list(Op_str);
+KCHARP struct_end=
+" }; // close defining T_enum";
+Op_str<<struct_end<<endl;
+}
+/*:206*//*207:*/
+//line 6698 "./o2externs.w"
+
+void enumeration_namespace_for_header
+(std::ofstream&Op_str){
+using namespace NS_yacco2_terminals;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ns_of_enum_start=
+"namespace %s {";
+int x= sprintf(big_buf_
+,ns_of_enum_start
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_define_structure(Op_str);
+KCHARP ns_of_enum_end=
+"} // end of namespace";
+Op_str<<ns_of_enum_end<<endl;
+}
+
+/*:207*//*208:*/
+//line 6720 "./o2externs.w"
+
+void enumeration_include_guard_for_header
+(std::ofstream&Op_str){
+using namespace NS_yacco2_terminals;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,enum_ph->filename_id()->identifier()->c_str()
+,enum_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+enumeration_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+/*:208*//*209:*/
+//line 6742 "./o2externs.w"
+
+void gen_Tes_literals_per_spec_voc
+(std::ofstream&Op_str
+,std::vector<T_terminal_def*> ::iterator I
+,std::vector<T_terminal_def*> ::iterator IE){
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP literal=
+"%s";
+for(;I!=IE;++I){
+T_terminal_def*td= *I;
+int x= sprintf(big_buf_
+,literal
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+/*:209*//*210:*/
+//line 6762 "./o2externs.w"
+
+void gen_Tes_literals
+(std::ofstream&Op_str){
+T_terminals_phrase*pht= O2_T_PHASE;
+T_rc_phrase*phrc= O2_RC_PHASE;
+T_error_symbols_phrase*phe= O2_ERROR_PHASE;
+T_lr1_k_phrase*phlr= O2_LRK_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP t_alphabet=
+"T-alphabet%s";
+int x= sprintf(big_buf_,t_alphabet," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+gen_Tes_literals_per_spec_voc(Op_str,phlr->crt_order()->begin(),phlr->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,phrc->crt_order()->begin(),phrc->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,pht->crt_order()->begin(),pht->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,phe->crt_order()->begin(),phe->crt_order()->end());
+KCHARP end_t_alphabet=
+"end-T-alphabet%s";
+x= sprintf(big_buf_,end_t_alphabet," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:210*//*211:*/
+//line 6815 "./o2externs.w"
+
+void OP_ENUMERATION_HEADER(TOKEN_GAGGLE&Error_queue){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+string fn(enum_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_enumeration_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_enum_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+enumeration_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:211*//*212:*/
+//line 6843 "./o2externs.w"
+
+void OP_T_Alphabet(TOKEN_GAGGLE&Error_queue){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+string fn_literal(enum_ph->filename_id()->identifier()->c_str());
+fn_literal+= Suffix_t_alphabet;
+std::ofstream Op_file;
+Op_file.open(fn_literal.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_enum_filename(fn_literal.c_str());
+sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+intro_comment(Op_file,fn_literal.c_str());
+gen_Tes_literals(Op_file);
+Op_file.close();
+}
+
+/*:212*//*214:*/
+//line 6876 "./o2externs.w"
+
+void errors_loop_thru_and_gen_defs_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= errors_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+"%s";
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_declaration);
+if(j==sdc_map->end()){
+KCHARP shell_of_def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+" %s();\n"
+" };";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,td->classsym()->c_str()
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+T_user_declaration*gw_sdc= (T_user_declaration*)j->second;
+int x= sprintf(big_buf_
+,def_item
+,td->classsym()->c_str()
+,gw_sdc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+j= sdc_map->find(SDC_op);
+if(j!=sdc_map->end()){
+Op_str<<" op();"<<endl;
+}
+j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+KCHARP dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);\n";
+int x= sprintf(big_buf_
+,dtor
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<" };"<<endl;
+}
+}
+}
+
+/*:214*//*215:*/
+//line 6936 "./o2externs.w"
+
+void errors_use_enum_namespace_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_T_namespace=
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_T_namespace
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:215*//*216:*/
+//line 6954 "./o2externs.w"
+
+void errors_namespace_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP namespace_start=
+"namespace %s{";
+int x= sprintf(big_buf_
+,namespace_start
+,errors_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+errors_use_enum_namespace_for_header(Op_str);
+errors_loop_thru_and_gen_defs_for_header(Op_str);
+
+KCHARP namespace_end=
+"}//namespace";
+Op_str<<namespace_end<<endl;
+}
+
+/*:216*//*217:*/
+//line 6977 "./o2externs.w"
+
+void errors_include_guard_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,errors_ph->filename_id()->identifier()->c_str()
+,errors_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+errors_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+
+/*:217*//*218:*/
+//line 6999 "./o2externs.w"
+
+void errors_include_files_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,Suffix_enumeration_hdr
+,lr_ph->filename_id()->identifier()->c_str()
+,Suffix_LRK_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:218*//*219:*/
+//line 7024 "./o2externs.w"
+
+void OP_ERRORS_HEADER(TOKEN_GAGGLE&Error_queue){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+string fn(errors_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_hdrfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+errors_include_files_for_header(Op_file);
+errors_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:219*//*221:*/
+//line 7055 "./o2externs.w"
+
+void errors_imp_dtor
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_destructor*dtor_t= (T_destructor*)J->second;
+KCHARP dtor_code=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP dtor_code_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+std::string::size_type r=
+dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,dtor_code
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}else{
+x= sprintf(big_buf_
+,dtor_code_noabort
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:221*//*222:*/
+//line 7098 "./o2externs.w"
+
+void errors_imp_implementation
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_user_implementation*imp_t= (T_user_implementation*)J->second;
+Op_str<<imp_t->syntax_code()->syntax_code()->c_str();
+SDC_MAP_type*sdc_map= Td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+errors_imp_dtor(Op_str,Td,j);
+}
+}
+
+/*:222*//*223:*/
+//line 7112 "./o2externs.w"
+
+void errors_imp_shellimplementation
+(std::ofstream&Op_str,T_terminal_def*Td,std::string&Autodelete,std::string&Autoabort){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP shell_of_def_item=
+"%s::\n"
+"%s()\n"
+" T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->t_name()->c_str()
+,Td->classsym()->c_str()
+,"0"
+,Autodelete.c_str()
+,Autoabort.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:223*//*224:*/
+//line 7135 "./o2externs.w"
+
+void errors_loop_thru_and_gen_defs_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+std::vector<T_terminal_def*> *dictionary= errors_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+string auto_delete;
+string auto_abort;
+string dtor_adr;
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_implementation);
+if(td->autodelete()==false){
+auto_delete= "false";
+}else{
+auto_delete= "true";
+}
+if(td->autoabort()==false){
+auto_abort= "false";
+}else{
+auto_abort= "true";
+}
+
+if(j==sdc_map->end()){
+errors_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+}else{
+errors_imp_implementation(Op_str,td,j);
+}
+}
+}
+
+/*:224*//*225:*/
+//line 7171 "./o2externs.w"
+
+void errors_use_enum_namespace_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_namespace=
+" using namespace %s;\n"
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_namespace
+,errors_ph->namespace_id()->identifier()->c_str()
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:225*//*226:*/
+//line 7191 "./o2externs.w"
+
+void errors_include_files_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,errors_ph->filename_id()->identifier()->c_str()
+,Suffix_Errors_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:226*//*227:*/
+//line 7211 "./o2externs.w"
+
+void OP_ERRORS_CPP(TOKEN_GAGGLE&Error_queue){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+string fn(errors_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_imp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_impfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+errors_include_files_for_imp(Op_file);
+errors_use_enum_namespace_for_imp(Op_file);
+errors_loop_thru_and_gen_defs_for_imp(Op_file);
+Op_file.close();
+}
+/*:227*//*229:*/
+//line 7246 "./o2externs.w"
+
+void user_t_loop_thru_and_gen_defs_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= t_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+"%s";
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_declaration);
+if(j==sdc_map->end()){
+KCHARP shell_of_def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+" %s();\n"
+" };";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,td->classsym()->c_str()
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+T_user_declaration*gw_sdc= (T_user_declaration*)j->second;
+int x= sprintf(big_buf_
+,def_item
+,td->classsym()->c_str()
+,gw_sdc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+
+j= sdc_map->find(SDC_op);
+if(j!=sdc_map->end()){
+Op_str<<" op();"<<endl;
+}
+j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+KCHARP dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+int x= sprintf(big_buf_
+,dtor
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<" };"<<endl;
+}
+}
+}
+
+/*:229*//*230:*/
+//line 7306 "./o2externs.w"
+
+void user_t_use_enum_namespace_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_T_namespace=
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_T_namespace
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:230*//*231:*/
+//line 7324 "./o2externs.w"
+
+void user_t_terminals_refs_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+if(t_ph->terminals_refs_code()!=0){
+KCHARP t_ref_code=
+" %s";
+int x= sprintf(big_buf_
+,t_ref_code
+,t_ph->terminals_refs_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:231*//*232:*/
+//line 7342 "./o2externs.w"
+
+void user_t_terminals_sufx_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+if(t_ph->terminals_sufx_code()!=0){
+KCHARP t_sufx_code=
+" %s";
+int x= sprintf(big_buf_
+,t_sufx_code
+,t_ph->terminals_sufx_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:232*//*233:*/
+//line 7360 "./o2externs.w"
+
+void user_t_namespace_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP namespace_start=
+"namespace %s{";
+int x= sprintf(big_buf_
+,namespace_start
+,t_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+user_t_use_enum_namespace_for_header(Op_str);
+user_t_terminals_refs_for_header(Op_str);
+user_t_loop_thru_and_gen_defs_for_header(Op_str);
+user_t_terminals_sufx_for_header(Op_str);
+
+KCHARP namespace_end=
+"}//namespace";
+Op_str<<namespace_end<<endl;
+}
+
+/*:233*//*234:*/
+//line 7385 "./o2externs.w"
+
+void user_t_include_guard_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,t_ph->filename_id()->identifier()->c_str()
+,t_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+user_t_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+
+/*:234*//*235:*/
+//line 7407 "./o2externs.w"
+
+void user_t_include_files_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,Suffix_enumeration_hdr
+,lr_ph->filename_id()->identifier()->c_str()
+,Suffix_LRK_hdr
+,errors_ph->filename_id()->identifier()->c_str()
+,Suffix_Errors_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:235*//*236:*/
+//line 7437 "./o2externs.w"
+
+void OP_USER_T_HEADER(TOKEN_GAGGLE&Error_queue){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+string fn(t_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_T_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_hdrfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_USER_T_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_t_include_files_for_header(Op_file);
+user_t_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:236*//*238:*/
+//line 7470 "./o2externs.w"
+
+void user_t_imp_dtor
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_destructor*dtor_t= (T_destructor*)J->second;
+KCHARP dtor_code=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP dtor_code_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+std::string::size_type r=
+dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,dtor_code
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}else{
+x= sprintf(big_buf_
+,dtor_code_noabort
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:238*//*239:*/
+//line 7513 "./o2externs.w"
+
+void user_t_imp_implementation
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_user_implementation*imp_t= (T_user_implementation*)J->second;
+Op_str<<imp_t->syntax_code()->syntax_code()->c_str();
+SDC_MAP_type*sdc_map= Td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+errors_imp_dtor(Op_str,Td,j);
+}
+}
+
+/*:239*//*240:*/
+//line 7527 "./o2externs.w"
+
+void user_t_imp_shellimplementation
+(std::ofstream&Op_str,T_terminal_def*Td,std::string&Autodelete,std::string&Autoabort){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP shell_of_def_item=
+"%s::\n"
+"%s()\n"
+" T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->t_name()->c_str()
+,Td->classsym()->c_str()
+,"0"
+,Autodelete.c_str()
+,Autoabort.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:240*//*241:*/
+//line 7550 "./o2externs.w"
+
+void user_t_loop_thru_and_gen_defs_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= t_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+string auto_delete;
+string auto_abort;
+string dtor_adr;
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_implementation);
+if(td->autodelete()==false){
+auto_delete= "false";
+}else{
+auto_delete= "true";
+}
+if(td->autoabort()==false){
+auto_abort= "false";
+}else{
+auto_abort= "true";
+}
+
+if(j==sdc_map->end()){
+user_t_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+}else{
+user_t_imp_implementation(Op_str,td,j);
+}
+}
+}
+
+/*:241*//*242:*/
+//line 7587 "./o2externs.w"
+
+void user_t_use_enum_namespace_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_namespace=
+" using namespace %s;\n"
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_namespace
+,t_ph->namespace_id()->identifier()->c_str()
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:242*//*243:*/
+//line 7607 "./o2externs.w"
+
+void user_t_include_files_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,t_ph->filename_id()->identifier()->c_str()
+,Suffix_T_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:243*//*244:*/
+//line 7627 "./o2externs.w"
+
+void OP_USER_T_CPP(TOKEN_GAGGLE&Error_queue){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+string fn(t_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_imp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_impfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_USER_T_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_t_include_files_for_imp(Op_file);
+user_t_use_enum_namespace_for_imp(Op_file);
+user_t_loop_thru_and_gen_defs_for_imp(Op_file);
+Op_file.close();
+}
+
+/*:244*//*246:*/
+//line 7660 "./o2externs.w"
+
+void fsc_prelude_imp
+(std::ofstream&Op_str,std::string&Fn){
+KCHARP pp_thd_nm(0);
+string transitive("n");
+string mono;
+char big_buf_[BIG_BUFFER_32K];
+T_fsm_phrase*fcp= O2_FSM_PHASE;
+T_parallel_parser_phrase*ppp= O2_PP_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+rule_def*rd= *i;
+FIRST_SET_type*fs= rd->first_set();
+FIRST_SET_ITER_type j= fs->begin();
+FIRST_SET_ITER_type je= fs->end();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+transitive[0]= 'y';
+break;
+}
+}
+
+KCHARP fsc_prelude=
+"transitive %s\n"
+"grammar-name \"%s\"\n"
+"name-space \"%s\"\n"
+"thread-name \"%s\"\n"
+"monolithic %s\n"
+"file-name \"%s\"\n"
+"no-of-T %i";
+if(ppp==0){
+pp_thd_nm= fcp->fsm_class_phrase()->identifier()->identifier()->c_str();
+mono+= 'y';
+}else{
+pp_thd_nm= ppp->pp_funct()->identifier()->identifier()->c_str();
+mono+= 'n';
+}
+int x= sprintf(big_buf_
+,fsc_prelude
+,transitive.c_str()
+,fcp->filename_id()->identifier()->c_str()
+,fcp->namespace_id()->identifier()->c_str()
+,pp_thd_nm
+,mono.c_str()
+,Fn.c_str()
+,enum_ph->total_enumerate()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:246*//*248:*/
+//line 7789 "./o2externs.w"
+
+void list_of_native_Tes_in_fs_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+int no_Tes_in_list(0);
+string Tes_in_list;
+
+
+STATES_ITER_type si= LR1_STATES.begin();
+state*cur_state= *si;
+int no_of_Tes_in_fs(0);
+std::set<CAbs_lr1_sym*> fs_set;
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+rule_def*rd= *i;
+FIRST_SET_type*fs= rd->first_set();
+FIRST_SET_ITER_type j= fs->begin();
+FIRST_SET_ITER_type je= fs->end();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+continue;
+}
+++no_Tes_in_list;
+}
+
+done:;
+KCHARP fs_list_of_Tes=
+"list-of-native-first-set-terminals %i";
+KCHARP fs_T_in_list=
+" %s";
+KCHARP end_fs_list_of_Tes=
+"end-list-of-native-first-set-terminals%s";
+int x= sprintf(big_buf_
+,fs_list_of_Tes
+,no_Tes_in_list
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+j= fs->begin();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+continue;
+}
+if(tdef->enum_id()==LR1_INVISIBLE_SHIFT_OPERATOR){
+x= sprintf(big_buf_
+,fs_T_in_list
+,LR1_FSET_TRANSIENCE_OPERATOR_LITERAL
+);
+}else{
+x= sprintf(big_buf_
+,fs_T_in_list
+,tdef->classsym()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+x= sprintf(big_buf_,end_fs_list_of_Tes," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:248*//*249:*/
+//line 7859 "./o2externs.w"
+
+void transitive_list_of_threads_in_fs_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+AST*rules_tree= rules_ph->phrase_tree();
+AST*start_rule_def_t= AST::get_1st_son(*rules_tree);
+rule_def*rd= (rule_def*)AST::content(*start_rule_def_t);
+
+
+int no_threads_in_list= rd->called_thread_first_set()->size();
+
+KCHARP transitive_thread_list=
+"list-of-transitive-threads %i";
+KCHARP transitive_thread_in_list=
+" %s::%s";
+KCHARP end_transitive_thread_list=
+"end-list-of-transitive-threads%s";
+
+int x= sprintf(big_buf_,transitive_thread_list,no_threads_in_list);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+std::set<T_called_thread_eosubrule*> ::iterator e= rd->called_thread_first_set()->begin();
+std::set<T_called_thread_eosubrule*> ::iterator ee= rd->called_thread_first_set()->end();
+for(;e!=ee;++e){
+T_called_thread_eosubrule*called_thd= *e;
+x= sprintf(big_buf_
+,transitive_thread_in_list
+,called_thd->ns()->identifier()->c_str()
+,called_thd->called_thread_name()->identifier()->c_str());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+x= sprintf
+(big_buf_
+,end_transitive_thread_list," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:249*//*250:*/
+//line 7903 "./o2externs.w"
+
+void used_list_of_threads_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+std::set<string> used_threads;
+STATES_ITER_type i= LR1_STATES.begin();
+STATES_ITER_type ie= LR1_STATES.end();
+for(;i!=ie;++i){
+state*start_state= *i;
+S_VECTOR_ELEMS_type*state_elems_wparallelism(0);
+S_VECTORS_type&vect= start_state->state_s_vector_;
+S_VECTORS_ITER_type vi= vect.find(LR1_PARALLEL_OPERATOR);
+if(vi==vect.end())continue;
+state_elems_wparallelism= &vi->second;
+S_VECTOR_ELEMS_ITER_type k= state_elems_wparallelism->begin();
+S_VECTOR_ELEMS_ITER_type ke= state_elems_wparallelism->end();
+for(;k!=ke;++k){
+state_element*thread_1st_elem= *k;
+AST*rtned_T_t= thread_1st_elem->next_state_element_->sr_element_;
+AST*bypassed_thd_eos_t= AST::brother(*rtned_T_t);
+if(bypassed_thd_eos_t==0)continue;
+CAbs_lr1_sym*sym= AST::content(*bypassed_thd_eos_t);
+if(sym->enumerated_id__!=T_Enum::T_T_called_thread_eosubrule_){
+continue;
+}
+T_called_thread_eosubrule*called_thd= (T_called_thread_eosubrule*)sym;
+
+string fqtnm;
+fqtnm+= called_thd->ns()->identifier()->c_str();
+fqtnm+= "::";
+fqtnm+= called_thd->called_thread_name()->identifier()->c_str();
+if(used_threads.find(fqtnm)==used_threads.end())used_threads.insert(fqtnm);
+}
+}
+KCHARP used_thread_list=
+"list-of-used-threads %i";
+KCHARP used_thread_in_list=
+" %s";
+KCHARP end_used_thread_list=
+"end-list-of-used-threads%s";
+
+int x= sprintf(big_buf_,used_thread_list,used_threads.size());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+std::set<string> ::iterator si= used_threads.begin();
+std::set<string> ::iterator sie= used_threads.end();
+for(;si!=sie;++si){
+x= sprintf(big_buf_
+,used_thread_in_list
+,si->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+x= sprintf
+(big_buf_
+,end_used_thread_list," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:250*//*251:*/
+//line 7968 "./o2externs.w"
+
+void grammar_s_comments_for_linker_doc_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+T_fsm_phrase*fcp= O2_FSM_PHASE;
+
+KCHARP fsm_comments=
+"fsm-comments\n"
+"\"%s\"";
+int x= sprintf
+(big_buf_
+,fsm_comments
+,fcp->comment()->c_string()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:251*//*252:*/
+//line 7988 "./o2externs.w"
+
+void OP_FSC_FILE(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsc;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmtbl_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_FSC_FILE",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+intro_comment(Op_file,fn.c_str());
+fsc_prelude_imp(Op_file,fn);
+list_of_native_Tes_in_fs_imp(Op_file);
+transitive_list_of_threads_in_fs_imp(Op_file);
+used_list_of_threads_imp(Op_file);
+grammar_s_comments_for_linker_doc_imp(Op_file);
+Op_file.close();
+}
+
+/*:252*/
+//line 180 "./o2externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/compiler/o2/o2_externs.h b/web/yacco2/compiler/o2/o2_externs.h
new file mode 100644
index 0000000000..8e51e87667
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_externs.h
@@ -0,0 +1,96 @@
+/*4:*/
+//line 86 "./o2externs.w"
+
+#ifndef o2_externs_
+#define o2_externs_ 1
+
+//line 89 "./o2externs.w"
+
+/*5:*/
+//line 94 "./o2externs.w"
+
+#include "globals.h"
+#include "o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_err_hdlr.h"
+#include "fsm_phrase.h"
+#include "parallel_parser_phrase.h"
+#include "T_enum_phrase.h"
+#include "err_symbols_ph.h"
+#include "rc_phrase.h"
+#include "lr1_k_phrase.h"
+#include "terminals_phrase.h"
+#include "rules_phrase.h"
+#include "yacco2_stbl.h"
+#include "enumerate_T_alphabet.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "cweb_put_k_into_ph.h"
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern int NO_LR1_STATES;
+extern T_fsm_phrase*O2_FSM_PHASE;
+extern T_parallel_parser_phrase*O2_PP_PHASE;
+extern T_enum_phrase*O2_T_ENUM_PHASE;
+extern T_lr1_k_phrase*O2_LRK_PHASE;
+extern T_rc_phrase*O2_RC_PHASE;
+extern T_error_symbols_phrase*O2_ERROR_PHASE;
+extern T_terminals_phrase*O2_T_PHASE;
+extern T_rules_phrase*O2_RULES_PHASE;
+extern STATES_type LR1_STATES;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern yacco2::AST*GRAMMAR_TREE;
+extern yacco2::AST*CWEB_MARKER;
+extern void WRT_CWEB_MARKER(std::ofstream*Wfile,yacco2::AST*Cweb_marker);
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL();
+extern void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern void PRINT_RULES_TREE_STRUCTURE(AST*Node);
+extern const char*DATE_AND_TIME();
+extern void YACCO2_PARSE_CMD_LINE
+(yacco2::CHAR&T_sw
+,yacco2::CHAR&ERR_sw,yacco2::CHAR&PRT_sw
+,std::string&Grammar_to_compile
+,yacco2::TOKEN_GAGGLE&Error_queue);
+extern bool PROCESS_INCLUDE_FILE
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_file_inclusion&File_include
+,yacco2::token_container_type&T2);
+extern bool PROCESS_KEYWORD_FOR_SYNTAX_CODE
+(yacco2::Parser&Parser
+,yacco2::CAbs_lr1_sym*Keyword
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos);
+extern void BUILD_GRAMMAR_TREE(yacco2::AST&Item);
+extern void PRINT_GRAMMAR_TREE(AST*Node);
+extern void GEN_FS_OF_RULE(NS_yacco2_terminals::rule_def*Rule_def);
+extern void GEN_CALLED_THREADS_FS_OF_RULE
+(NS_yacco2_terminals::rule_def*Start_rule);
+extern int MAX_USE_CNT_RxR
+(NS_yacco2_terminals::rule_def*Rule_use
+,NS_yacco2_terminals::rule_def*Against_rule);
+extern void XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym);
+extern void PRT_RULE_S_FIRST_SET(NS_yacco2_terminals::rule_def*Rule_def);
+extern void OP_GRAMMAR_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_SYM(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_TBL(TOKEN_GAGGLE&Error_queue);
+extern void OP_ENUMERATION_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_T_Alphabet(TOKEN_GAGGLE&Error_queue);
+extern void OP_ERRORS_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_ERRORS_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_USER_T_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_USER_T_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_FSC_FILE(TOKEN_GAGGLE&Error_queue);
+extern void Print_dump_state(state*State);
+/*:5*/
+//line 90 "./o2externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/compiler/o2/o2_types.h b/web/yacco2/compiler/o2/o2_types.h
new file mode 100644
index 0000000000..37efbae356
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_types.h
@@ -0,0 +1,537 @@
+/*2:*/
+#line 41 "./o2_types.w"
+
+#ifndef o2_types_
+#define o2_types_ 1
+/*3:*/
+#line 52 "./o2_types.w"
+
+#define NO_BITS_PER_SET_PARTITION 8
+#define CODE_PRESENCE_IN_ARBITRATOR_CODE "pp_accept_queue__"
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Success true
+#define Failure false
+#define Nested_file_cnt_limit 15
+#define O2_library_file "yacco2.h"
+#define Yacco2_holding_file "yacco2cmd.tmp"
+#define Linker_holding_file "linkercmd.tmp"
+#define Max_cweb_item_size 10*1024
+#define Max_buf_size 2*1024
+#define Max_no_subrules 8*1024
+#define EPSILON_YES 0
+#define EPSILON_NO 1
+#define EPSILON_DONT_KNOW 2
+#define EPSILON_MAYBE 3
+#define SDC_user_imp_sym "#user-imp-sym"
+#define SDC_user_imp_tbl "#user-imp-tbl"
+#define SDC_user_prefix_declaration "#user-prefix-declaration"
+#define SDC_user_suffix_declaration "#user-suffix-declaration"
+#define SDC_user_declaration "#user-declaration"
+#define SDC_constructor "#constructor"
+#define SDC_destructor "#destructor"
+#define SDC_op "#op"
+#define SDC_failed "#failed"
+#define SDC_user_implementation "#user-implementation"
+#define SDC_user_imp_implementation "#user-imp-sym"
+#define SDC_user_tbl_implementation "#user-tbl-tbl"
+#define SDC_arbitrator_code "#arbitrator-code"
+#define PP_thread_name "#parallel-thread-function"
+#define Suffix_fsmheader ".h"
+#define Suffix_fsmimp ".cpp"
+#define Suffix_fsmsym "sym.cpp"
+#define Suffix_fsmtbl "tbl.cpp"
+#define Suffix_enumeration_hdr ".h"
+#define Suffix_t_alphabet ".fsc"
+#define Suffix_Errors_hdr ".h"
+#define Suffix_Errors_imp ".cpp"
+#define Suffix_T_hdr ".h"
+#define Suffix_T_imp ".cpp"
+#define Suffix_RC_hdr ".h"
+#define Suffix_RC_imp ".cpp"
+#define Suffix_LRK_hdr ".h"
+#define Suffix_LRK_imp ".cpp"
+#define Suffix_fsc ".fsc"
+#define LR1_COMPATIBLE true
+#define NOT_LR1_COMPATIBLE false
+#define MERGED true
+#define NOT_MERGED false
+#define ABORT_GENING_STATES 2
+#define START_STATE_ENUMERATE -1
+
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR 0
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR_LITERAL "|?|"
+#define LR1_EOG 1
+#define LR1_EOLR 2
+#define LR1_EOLR_LITERAL "eolr"
+#define LR1_PARALLEL_OPERATOR 3
+#define LR1_REDUCE_OPERATOR 4
+#define LR1_REDUCE_OPERATOR_LITERAL "|r|"
+#define LR1_INVISIBLE_SHIFT_OPERATOR 5
+#define LR1_ALL_SHIFT_OPERATOR 6
+#define LR1_FSET_TRANSIENCE_OPERATOR 7
+#define LR1_FSET_TRANSIENCE_OPERATOR_LITERAL "LR1_fset_transience_operator"
+#define LR1_PROCEDURE_CALL_OPERATOR 7
+#define LR1_PROCEDURE_CALL_OPERATOR_LITERAL "|p|"
+#define END_OF_LR1_DEFS 7
+
+#define SMALL_BUFFER_4K 1024*4
+#define BIG_BUFFER_32K 1024*32
+#define THREAD_CALL 0
+#define PROCEDURE_CALL 1
+#define MICROSOFT_THREAD_LIBRARY 1
+#define PTHREAD_LIBRARY 0
+/*:3*/
+#line 44 "./o2_types.w"
+;
+/*4:*/
+#line 129 "./o2_types.w"
+
+typedef int Voc_ENO;
+typedef int RULE_ENO;
+struct state;
+struct state_element;
+struct follow_element;
+/*:4*//*5:*/
+#line 135 "./o2_types.w"
+
+typedef std::map<std::string,yacco2::CAbs_lr1_sym*> SDC_MAP_type;
+/*:5*//*6:*/
+#line 137 "./o2_types.w"
+
+typedef SDC_MAP_type::iterator SDC_MAP_ITER_type;
+/*:6*//*7:*/
+#line 139 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> STBL_T_ITEMS_type;
+/*:7*//*8:*/
+#line 141 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SET_type;
+/*:8*//*9:*/
+#line 143 "./o2_types.w"
+
+typedef T_IN_STBL_SET_type::iterator T_IN_STBL_SET_ITER_type;
+/*:9*//*10:*/
+#line 145 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SORTED_SET_type;
+/*:10*//*11:*/
+#line 147 "./o2_types.w"
+
+typedef T_IN_STBL_SORTED_SET_type::iterator T_IN_STBL_SORTED_SET_ITER_type;
+/*:11*//*12:*/
+#line 149 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::rule_in_stbl*> RULE_IN_STBL_SET_type;
+/*:12*//*13:*/
+#line 151 "./o2_types.w"
+
+typedef RULE_IN_STBL_SET_type::iterator RULE_IN_STBL_SET_ITER_type;
+/*:13*//*14:*/
+#line 153 "./o2_types.w"
+
+typedef std::vector<yacco2::CAbs_lr1_sym*> O2_PHRASE_TBL_type;
+/*:14*//*15:*/
+#line 155 "./o2_types.w"
+
+typedef O2_PHRASE_TBL_type::iterator O2_PHRASE_TBL_ITER_type;
+/*:15*//*16:*/
+#line 157 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::rule_in_stbl*> RULES_IN_FS_SET_type;
+/*:16*//*17:*/
+#line 159 "./o2_types.w"
+
+typedef RULES_IN_FS_SET_type::iterator RULES_IN_FS_SET_ITER_type;
+/*:17*//*18:*/
+#line 161 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::rule_def*> RULE_DEFS_TBL_type;
+/*:18*//*19:*/
+#line 163 "./o2_types.w"
+
+typedef RULE_DEFS_TBL_type::iterator RULE_DEFS_TBL_ITER_type;
+/*:19*//*20:*/
+#line 165 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_subrule_def*> SUBRULE_DEFS_type;
+/*:20*//*21:*/
+#line 167 "./o2_types.w"
+
+typedef SUBRULE_DEFS_type::iterator SUBRULE_DEFS_ITER_type;
+/*:21*//*22:*/
+#line 169 "./o2_types.w"
+
+typedef std::map<std::string,NS_yacco2_terminals::T_terminal_def*> T_DEF_MAP_type;
+/*:22*//*23:*/
+#line 171 "./o2_types.w"
+
+typedef T_DEF_MAP_type::iterator T_DEF_MAP_ITER_type;
+/*:23*//*24:*/
+#line 173 "./o2_types.w"
+
+typedef std::set<int> INT_SET_type;
+/*:24*//*25:*/
+#line 175 "./o2_types.w"
+
+typedef INT_SET_type::iterator INT_SET_ITER_type;
+/*:25*//*26:*/
+#line 177 "./o2_types.w"
+
+typedef std::map<int,std::string> INT_STR_MAP_type;
+/*:26*//*27:*/
+#line 179 "./o2_types.w"
+
+typedef INT_STR_MAP_type::iterator INT_STR_MAP_ITER_type;
+/*:27*//*28:*/
+#line 181 "./o2_types.w"
+
+typedef std::set<std::string*> STR_SET_type;
+/*:28*//*29:*/
+#line 183 "./o2_types.w"
+
+typedef STR_SET_type::iterator STR_SET_ITER_type;
+/*:29*//*30:*/
+#line 185 "./o2_types.w"
+
+typedef std::map<NS_yacco2_terminals::T_in_stbl*,STR_SET_type> T_IN_STBL_SET_STR_MAP_type;
+/*:30*//*31:*/
+#line 187 "./o2_types.w"
+
+typedef T_IN_STBL_SET_STR_MAP_type::iterator T_IN_STBL_SET_STR_MAP_ITER_type;
+/*:31*//*32:*/
+#line 189 "./o2_types.w"
+
+typedef std::list<state*> STATES_type;
+/*:32*//*33:*/
+#line 191 "./o2_types.w"
+
+typedef STATES_type::iterator STATES_ITER_type;
+/*:33*//*34:*/
+#line 193 "./o2_types.w"
+
+typedef int Voc_ENO;
+/*:34*//*35:*/
+#line 195 "./o2_types.w"
+
+typedef int RULE_ENO;
+/*:35*//*36:*/
+#line 197 "./o2_types.w"
+
+typedef int T_ENO;
+/*:36*//*37:*/
+#line 200 "./o2_types.w"
+
+typedef std::set<RULE_ENO> RULE_NOS_SET_type;
+/*:37*//*38:*/
+#line 203 "./o2_types.w"
+
+typedef RULE_NOS_SET_type::iterator RULE_NOS_SET_ITER_type;
+/*:38*//*39:*/
+#line 206 "./o2_types.w"
+
+typedef std::set<state*> STATES_SET_type;
+/*:39*//*40:*/
+#line 209 "./o2_types.w"
+
+typedef STATES_SET_type::iterator STATES_SET_ITER_type;
+/*:40*//*41:*/
+#line 212 "./o2_types.w"
+
+typedef std::map<Voc_ENO,STATES_type> LR1_STATES_type;
+/*:41*//*42:*/
+#line 215 "./o2_types.w"
+
+typedef LR1_STATES_type::iterator LR1_STATES_ITER_type;
+/*:42*//*43:*/
+#line 218 "./o2_types.w"
+
+typedef std::list<state_element*> S_VECTOR_ELEMS_type;
+/*:43*//*44:*/
+#line 221 "./o2_types.w"
+
+typedef S_VECTOR_ELEMS_type::iterator S_VECTOR_ELEMS_ITER_type;
+/*:44*//*45:*/
+#line 231 "./o2_types.w"
+
+typedef std::map<Voc_ENO,S_VECTOR_ELEMS_type> S_VECTORS_type;
+/*:45*//*46:*/
+#line 233 "./o2_types.w"
+
+typedef S_VECTORS_type::iterator S_VECTORS_ITER_type;
+/*:46*//*47:*/
+#line 235 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> FOLLOW_SETS_type;
+/*:47*//*48:*/
+#line 237 "./o2_types.w"
+
+typedef FOLLOW_SETS_type::iterator FOLLOW_SETS_ITER_type;
+/*:48*//*49:*/
+#line 239 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> LA_SET_type;
+/*:49*//*50:*/
+#line 241 "./o2_types.w"
+
+typedef LA_SET_type::iterator LA_SET_ITER_type;
+/*:50*//*51:*/
+#line 243 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> SHIFT_SET_type;
+/*:51*//*52:*/
+#line 245 "./o2_types.w"
+
+typedef SHIFT_SET_type::iterator SHIFT_SET_ITER_type;
+/*:52*//*53:*/
+#line 247 "./o2_types.w"
+
+typedef std::list<follow_element*> TRANSITIONS_type;
+/*:53*//*54:*/
+#line 249 "./o2_types.w"
+
+typedef TRANSITIONS_type::iterator TRANSITIONS_ITER_type;
+/*:54*//*55:*/
+#line 251 "./o2_types.w"
+
+typedef std::list<state*> MERGES_type;
+/*:55*//*56:*/
+#line 253 "./o2_types.w"
+
+typedef MERGES_type::iterator MERGES_ITER_type;
+/*:56*//*57:*/
+#line 259 "./o2_types.w"
+
+typedef std::list<AST*> SR_ELEMENTS_type;
+/*:57*//*58:*/
+#line 264 "./o2_types.w"
+
+typedef std::map<RULE_ENO,follow_element*> S_FOLLOW_SETS_type;
+/*:58*//*59:*/
+#line 267 "./o2_types.w"
+
+typedef S_FOLLOW_SETS_type::iterator S_FOLLOW_SETS_ITER_type;
+/*:59*//*60:*/
+#line 276 "./o2_types.w"
+
+typedef std::list<state*> S_CONFLICT_STATES_type;
+/*:60*//*61:*/
+#line 279 "./o2_types.w"
+
+typedef S_CONFLICT_STATES_type::iterator S_CONFLICT_STATES_ITER_type;
+/*:61*//*62:*/
+#line 282 "./o2_types.w"
+
+typedef std::set<rule_in_stbl*> CLOSURE_RULES_type;
+/*:62*//*63:*/
+#line 285 "./o2_types.w"
+
+typedef CLOSURE_RULES_type::iterator CLOSURE_RULES_ITER_type;
+/*:63*//*64:*/
+#line 288 "./o2_types.w"
+
+typedef std::set<T_ENO> FOLLOW_RULES_type;
+/*:64*//*65:*/
+#line 291 "./o2_types.w"
+
+typedef FOLLOW_RULES_type::iterator FOLLOW_RULES_ITER_type;
+/*:65*//*66:*/
+#line 294 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> FIRST_SET_type;
+/*:66*//*67:*/
+#line 297 "./o2_types.w"
+
+typedef FIRST_SET_type::iterator FIRST_SET_ITER_type;
+/*:67*//*68:*/
+#line 299 "./o2_types.w"
+
+typedef vector<T_ENO> T_COUNT_type;
+/*:68*//*69:*/
+#line 301 "./o2_types.w"
+
+typedef T_COUNT_type::iterator T_COUNT_ITER_type;
+/*:69*//*70:*/
+#line 303 "./o2_types.w"
+
+typedef vector<T_in_stbl*> STBL_T_ITEMS_type;
+/*:70*//*71:*/
+#line 305 "./o2_types.w"
+
+typedef STBL_T_ITEMS_type::iterator STBL_T_ITEMS_ITER_type;
+/*:71*//*72:*/
+#line 307 "./o2_types.w"
+
+typedef std::set<rule_def*> RULES_HAVING_AR_type;
+/*:72*//*73:*/
+#line 309 "./o2_types.w"
+
+typedef RULES_HAVING_AR_type::iterator RULES_HAVING_AR_ITER_type;
+/*:73*//*74:*/
+#line 311 "./o2_types.w"
+
+typedef std::vector<LA_SET_type*> COMMON_LA_SETS_type;
+/*:74*//*75:*/
+#line 313 "./o2_types.w"
+
+typedef COMMON_LA_SETS_type::iterator COMMON_LA_SETS_ITER_type;
+/*:75*//*76:*/
+#line 315 "./o2_types.w"
+
+typedef std::map<int,int> BIT_MAP_type;
+/*:76*//*77:*/
+#line 317 "./o2_types.w"
+
+typedef BIT_MAP_type::iterator BIT_MAP_ITER_type;
+
+/*:77*//*78:*/
+#line 320 "./o2_types.w"
+
+struct use_cnt_type{
+rule_def*for_rule_use_cnt_;
+rule_def*against_rule_;
+int use_cnt_;
+use_cnt_type(rule_def*R,rule_def*S):for_rule_use_cnt_(R),against_rule_(S),use_cnt_(0){};
+use_cnt_type(const use_cnt_type&C):for_rule_use_cnt_(C.for_rule_use_cnt_)
+,against_rule_(C.against_rule_),use_cnt_(C.use_cnt_){};
+};
+typedef std::map<int,use_cnt_type> CYCLIC_USE_TBL_type;
+typedef CYCLIC_USE_TBL_type::iterator CYCLIC_USE_TBL_ITER_type;
+/*:78*//*79:*/
+#line 331 "./o2_types.w"
+
+typedef std::set<int> SET_FILTER_type;
+/*:79*//*80:*/
+#line 333 "./o2_types.w"
+
+typedef tok_can<AST*> TOK_CAN_TREE_type;
+
+/*:80*/
+#line 45 "./o2_types.w"
+;
+/*82:*/
+#line 567 "./o2_types.w"
+
+struct gen_context{
+state*for_closure_state_;
+Voc_ENO gen_vector_;
+gen_context(state*S,Voc_ENO Ve);
+};
+
+/*:82*//*83:*/
+#line 587 "./o2_types.w"
+
+struct state_element{
+gen_context cs_vector_combo_gening_it_;
+LA_SET_type*la_set_;
+state*closure_state_;
+state*goto_state_;
+state*reduced_state_;
+state*previous_state_;
+state*self_state_;
+state*closured_state_gening_it_;
+state_element*previous_state_element_;
+state_element*next_state_element_;
+AST*sr_element_;
+CAbs_lr1_sym*sr_def_element_;
+T_subrule_def*subrule_def_;
+int common_la_set_idx_;
+int its_enum_id_;
+state_element(AST*Elem);
+~state_element();
+void fill_la_from_merge(state_element&La_to_fill_in,MERGES_type&Merge,RULE_ENO Rule_no);
+void fill_la_from_transition(state_element&La_to_fill_in,TRANSITIONS_type&Transition);
+bool calc_la(state_element&La_to_fill_in);
+void add_fs_setA_to_LA(follow_element&Fe,LA_SET_type&La_to_fill_in);
+RULE_ENO find_state_element_s_rule_no();
+};
+
+/*:83*//*84:*/
+#line 625 "./o2_types.w"
+
+struct follow_element{
+RULE_ENO rule_no_;
+AST*rule_def_t_;
+state*its_state_;
+FOLLOW_SETS_type follow_set_;
+TRANSITIONS_type transitions_;
+MERGES_type merges_;
+SR_ELEMENTS_type sr_elements_;
+void add_T_to_follow_set(AST*T_element);
+void add_follow_set_contributor(AST*SR_element);
+void add_follow_set_transition(state_element&State_elem,T_eosubrule&Eos);
+void add_follow_set_transition(state_element&State_elem,T_called_thread_eosubrule&Eos);
+void add_follow_set_transition(state_element&State_elem,T_null_call_thread_eosubrule&Eos);
+AST*rule_def_t();
+state*its_state();
+follow_element(RULE_ENO Rule_no,state_element&State_elem,AST&Rule_def_t);
+follow_element(state*State);
+void remove_merge_closure_info();
+void add_merge_closure_info(state&To_merge_closure_state);
+};
+
+/*:84*//*85:*/
+#line 677 "./o2_types.w"
+
+struct state{
+gen_context cs_vector_combo_gening_it_;
+Voc_ENO vectored_into_by_elem_;
+CAbs_lr1_sym*vectored_into_by_elem_sym_;
+int state_no_;
+CLOSURE_RULES_type closure_rule_list_;
+CLOSURE_RULES_type derives_closure_rule_list_;
+FOLLOW_RULES_type follow_rule_list_;
+void add_closure_rules_subrules_to_state(gen_context&Possible_gen_context,state&Closure_state);
+void add_rule_s_subrules_to_state(AST&Start_Rule_def_t,gen_context&Possible_gen_context,state&Closure_state_associate_with);
+bool crt_core_items_of_state
+(S_VECTOR_ELEMS_ITER_type&Iter_begin
+,S_VECTOR_ELEMS_ITER_type&Iter_end
+,gen_context&Gening_context);
+S_VECTORS_type state_s_vector_;
+S_FOLLOW_SETS_type state_s_follow_set_map_;
+S_CONFLICT_STATES_type state_s_conflict_state_list_;
+void add_element_to_state_vector(Voc_ENO Elem_id,state_element&Elem);
+void add_rule_to_closure_list(rule_in_stbl*Rule_in_stbl);
+void add_rule_to_follow_list(RULE_ENO Refered_rule);
+void create_follow_sets_of_state();
+void create_start_state(AST&Start_rule_t);
+bool gen_transitive_states_for_closure_context(gen_context&For_gening_context,state&For_closure_state,state&State);
+
+bool gen_transitive_states_balance_for_closure_vector(gen_context&Gen_context,state&For_closure_state,state&Goto_state);
+
+
+state(Voc_ENO Eno,CAbs_lr1_sym*Entry_sym);
+state(AST*Start_rule_t);
+
+bool gen_a_state
+(gen_context&For_gening_context
+,state&For_closure_state
+,state&Requesting_state,S_VECTORS_ITER_type&Elem_iter);
+
+const char*entry_symbol_literal();
+void add_state_to_gbl_lr1_state_tbls(state*State);
+void add_state_to_conflict_states_list_if(gen_context&Gening_context,state&State);
+state*closure_state_birthing_it_;
+bool is_state_lr1_compatible(state&State_to_eval);
+int are_2_states_compatible_yes_merge(state&To_merge_into_state,state&State_for_merging);
+void merge_state(state&To_merge_into_state,state&State_for_merging);
+int find_2_states_compatible_and_merge(state&State_for_merging);
+bool are_states_equivalent(state&Merge_into_state,state&To_merge_state);
+bool are_gened_states_lr1_compatible();
+bool is_str_rt_bnded(AST*Str);
+bool is_str_epsilonable(AST*Str);
+void crt_start_rule_s_follow_set(AST&Str);
+state();
+void closure_only_derives(AST*Rule_tree);
+int determine_reduced_state_type(state*S);
+int state_type_;
+string*arbitrator_name_;
+};
+
+/*:85*/
+#line 46 "./o2_types.w"
+;
+#endif
+
+/*:2*/
diff --git a/web/yacco2/compiler/o2/o2_types.w b/web/yacco2/compiler/o2/o2_types.w
new file mode 100644
index 0000000000..332946a0ee
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2_types.w
@@ -0,0 +1,789 @@
+@q file: o2_types.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+O\input "eplain"
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@*1 Global definitions and files.\fbreak
+Basic preamble include files used by all others.
+@(globals.h@>=
+// file: globals.h
+// prelude files using yacco2: for o2, o2linker utilities
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+using namespace std;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+#endif
+
+@*3 ``o2\_types'' header file of common set of definitions and structures.\fbreak
+``o2\_types.h'' file is a common set of definitions
+and structures used by ``o2externs.w''
+external routines.
+Contains definitions and type-defs.
+@(o2_types.h@>=
+#ifndef o2_types_
+#define o2_types_ 1
+@<defines@>;
+@<Type defs@>;
+@<Structure defs@>;
+#endif
+
+@ Definitions for O2 and my external routines --- ``o2externs.w''.\fbreak
+As i'm writing directly out to a file, the use of the ctangle macro directive
+displays its displeasure so i'm using the direct c code route.
+@<defines@>=
+#define NO_BITS_PER_SET_PARTITION 8
+#define CODE_PRESENCE_IN_ARBITRATOR_CODE "pp_accept_queue__"
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Success true
+#define Failure false
+#define Nested_file_cnt_limit 15
+#define O2_library_file "yacco2.h"
+#define Yacco2_holding_file "yacco2cmd.tmp"
+#define Linker_holding_file "linkercmd.tmp"
+#define Max_cweb_item_size 10*1024
+#define Max_buf_size 2*1024
+#define Max_no_subrules 8*1024
+#define EPSILON_YES 0
+#define EPSILON_NO 1
+#define EPSILON_DONT_KNOW 2
+#define EPSILON_MAYBE 3
+#define SDC_user_imp_sym "#user-imp-sym"
+#define SDC_user_imp_tbl "#user-imp-tbl"
+#define SDC_user_prefix_declaration "#user-prefix-declaration"
+#define SDC_user_suffix_declaration "#user-suffix-declaration"
+#define SDC_user_declaration "#user-declaration"
+#define SDC_constructor "#constructor"
+#define SDC_destructor "#destructor"
+#define SDC_op "#op"
+#define SDC_failed "#failed"
+#define SDC_user_implementation "#user-implementation"
+#define SDC_user_imp_implementation "#user-imp-sym"
+#define SDC_user_tbl_implementation "#user-tbl-tbl"
+#define SDC_arbitrator_code "#arbitrator-code"
+#define PP_thread_name "#parallel-thread-function"
+#define Suffix_fsmheader ".h"
+#define Suffix_fsmimp ".cpp"
+#define Suffix_fsmsym "sym.cpp"
+#define Suffix_fsmtbl "tbl.cpp"
+#define Suffix_enumeration_hdr ".h"
+#define Suffix_t_alphabet ".fsc"
+#define Suffix_Errors_hdr ".h"
+#define Suffix_Errors_imp ".cpp"
+#define Suffix_T_hdr ".h"
+#define Suffix_T_imp ".cpp"
+#define Suffix_RC_hdr ".h"
+#define Suffix_RC_imp ".cpp"
+#define Suffix_LRK_hdr ".h"
+#define Suffix_LRK_imp ".cpp"
+#define Suffix_fsc ".fsc"
+#define LR1_COMPATIBLE true
+#define NOT_LR1_COMPATIBLE false
+#define MERGED true
+#define NOT_MERGED false
+#define ABORT_GENING_STATES 2
+#define START_STATE_ENUMERATE -1
+
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR 0
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR_LITERAL "|?|"
+#define LR1_EOG 1
+#define LR1_EOLR 2
+#define LR1_EOLR_LITERAL "eolr"
+#define LR1_PARALLEL_OPERATOR 3
+#define LR1_REDUCE_OPERATOR 4
+#define LR1_REDUCE_OPERATOR_LITERAL "|r|"
+#define LR1_INVISIBLE_SHIFT_OPERATOR 5
+#define LR1_ALL_SHIFT_OPERATOR 6
+#define LR1_FSET_TRANSIENCE_OPERATOR 7
+#define LR1_FSET_TRANSIENCE_OPERATOR_LITERAL "LR1_fset_transience_operator"
+#define LR1_PROCEDURE_CALL_OPERATOR 7
+#define LR1_PROCEDURE_CALL_OPERATOR_LITERAL "|p|"
+#define END_OF_LR1_DEFS 7
+
+#define SMALL_BUFFER_4K 1024*4
+#define BIG_BUFFER_32K 1024*32
+#define THREAD_CALL 0
+#define PROCEDURE_CALL 1
+#define MICROSOFT_THREAD_LIBRARY 1
+#define PTHREAD_LIBRARY 0
+@ Typedef definitions.
+@<Type defs@>=
+typedef int Voc_ENO;
+typedef int RULE_ENO;
+struct state;
+struct state_element;
+struct follow_element;
+@ @<Type defs@>+=
+typedef std::map<std::string,yacco2::CAbs_lr1_sym*> SDC_MAP_type;
+@ @<Type defs@>+=
+typedef SDC_MAP_type::iterator SDC_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> STBL_T_ITEMS_type;
+@ @<Type defs@>+=
+typedef std::set<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SET_type;
+@ @<Type defs@>+=
+typedef T_IN_STBL_SET_type::iterator T_IN_STBL_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SORTED_SET_type;
+@ @<Type defs@>+=
+typedef T_IN_STBL_SORTED_SET_type::iterator T_IN_STBL_SORTED_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<NS_yacco2_terminals::rule_in_stbl*> RULE_IN_STBL_SET_type;
+@ @<Type defs@>+=
+typedef RULE_IN_STBL_SET_type::iterator RULE_IN_STBL_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<yacco2::CAbs_lr1_sym*> O2_PHRASE_TBL_type;
+@ @<Type defs@>+=
+typedef O2_PHRASE_TBL_type::iterator O2_PHRASE_TBL_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<NS_yacco2_terminals::rule_in_stbl* > RULES_IN_FS_SET_type;
+@ @<Type defs@>+=
+typedef RULES_IN_FS_SET_type::iterator RULES_IN_FS_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<NS_yacco2_terminals::rule_def* > RULE_DEFS_TBL_type;
+@ @<Type defs@>+=
+typedef RULE_DEFS_TBL_type::iterator RULE_DEFS_TBL_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<NS_yacco2_terminals::T_subrule_def* > SUBRULE_DEFS_type;
+@ @<Type defs@>+=
+typedef SUBRULE_DEFS_type::iterator SUBRULE_DEFS_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<std::string,NS_yacco2_terminals::T_terminal_def*> T_DEF_MAP_type;
+@ @<Type defs@>+=
+typedef T_DEF_MAP_type::iterator T_DEF_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<int> INT_SET_type;
+@ @<Type defs@>+=
+typedef INT_SET_type::iterator INT_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<int,std::string> INT_STR_MAP_type;
+@ @<Type defs@>+=
+typedef INT_STR_MAP_type::iterator INT_STR_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<std::string*> STR_SET_type;
+@ @<Type defs@>+=
+typedef STR_SET_type::iterator STR_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<NS_yacco2_terminals::T_in_stbl*,STR_SET_type > T_IN_STBL_SET_STR_MAP_type;
+@ @<Type defs@>+=
+typedef T_IN_STBL_SET_STR_MAP_type::iterator T_IN_STBL_SET_STR_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef std::list<state*> STATES_type;
+@ @<Type defs@>+=
+typedef STATES_type::iterator STATES_ITER_type;
+@ @<Type defs@>+=
+typedef int Voc_ENO;
+@ @<Type defs@>+=
+typedef int RULE_ENO;
+@ @<Type defs@>+=
+typedef int T_ENO;
+@
+@<Type defs@>+=
+typedef std::set<RULE_ENO> RULE_NOS_SET_type;
+@
+@<Type defs@>+=
+typedef RULE_NOS_SET_type::iterator RULE_NOS_SET_ITER_type;
+@
+@<Type defs@>+=
+typedef std::set<state*> STATES_SET_type;
+@
+@<Type defs@>+=
+typedef STATES_SET_type::iterator STATES_SET_ITER_type;
+@ Map of lr1 states used for potential state merge.
+@<Type defs@>+=
+typedef std::map<Voc_ENO,STATES_type > LR1_STATES_type;
+@
+@<Type defs@>+=
+typedef LR1_STATES_type::iterator LR1_STATES_ITER_type;
+@
+@<Type defs@>+=
+typedef std::list<state_element*> S_VECTOR_ELEMS_type;
+@
+@<Type defs@>+=
+typedef S_VECTOR_ELEMS_type::iterator S_VECTOR_ELEMS_ITER_type;
+@
+This supplies all GPS positions within each subrule string of symbols
+to generate the lr states for the state
+and it also supplies all the follow set GPS contributors for each
+referenced rules.
+All strings to the right of these referenced rules
+become the follow set strings of symbols
+ to calculate the follow set.
+@<Type defs@>+=
+typedef std::map<Voc_ENO,S_VECTOR_ELEMS_type > S_VECTORS_type;
+@ @<Type defs@>+=
+typedef S_VECTORS_type::iterator S_VECTORS_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<T_in_stbl*> FOLLOW_SETS_type;
+@ @<Type defs@>+=
+typedef FOLLOW_SETS_type::iterator FOLLOW_SETS_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<T_in_stbl*> LA_SET_type;
+@ @<Type defs@>+=
+typedef LA_SET_type::iterator LA_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<T_in_stbl*> SHIFT_SET_type;
+@ @<Type defs@>+=
+typedef SHIFT_SET_type::iterator SHIFT_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::list<follow_element*> TRANSITIONS_type;
+@ @<Type defs@>+=
+typedef TRANSITIONS_type::iterator TRANSITIONS_ITER_type;
+@ @<Type defs@>+=
+typedef std::list<state*> MERGES_type;
+@ @<Type defs@>+=
+typedef MERGES_type::iterator MERGES_ITER_type;
+@
+List of subrules elements that require follow set calculation.
+This is the contributors list that allows me to debug my code.
+A contributor is the grammar node of the subrule element.
+@<Type defs@>+=
+typedef std::list<AST*> SR_ELEMENTS_type;
+@
+State's follow sets of referenced rules making up its ``closure-only'' core.
+The rule definition enumerate value is the map's key.
+@<Type defs@>+=
+typedef std::map<RULE_ENO,follow_element*> S_FOLLOW_SETS_type;
+@
+@<Type defs@>+=
+typedef S_FOLLOW_SETS_type::iterator S_FOLLOW_SETS_ITER_type;
+@
+Closure state's conflict list from its ``closure-part'' gened state network.
+These are the lr1 states that
+have a reduce configuration (subrule's string of symbols consumed or epsilon)
+with other reduce or shift subrule configurations that are checked for lr1 compatibility.
+The list allows one to pretest the merge potential of a newly being gened
+ state into an already gened lr1 state network.
+@<Type defs@>+=
+typedef std::list<state*> S_CONFLICT_STATES_type;
+@
+@<Type defs@>+=
+typedef S_CONFLICT_STATES_type::iterator S_CONFLICT_STATES_ITER_type;
+@
+@<Type defs@>+=
+typedef std::set< rule_in_stbl* > CLOSURE_RULES_type;
+@
+@<Type defs@>+=
+typedef CLOSURE_RULES_type::iterator CLOSURE_RULES_ITER_type;
+@
+@<Type defs@>+=
+typedef std::set< T_ENO > FOLLOW_RULES_type;
+@
+@<Type defs@>+=
+typedef FOLLOW_RULES_type::iterator FOLLOW_RULES_ITER_type;
+@
+@<Type defs@>+=
+typedef std::set<T_in_stbl*> FIRST_SET_type;
+@
+@<Type defs@>+=
+typedef FIRST_SET_type::iterator FIRST_SET_ITER_type;
+@ @<Type defs@>+=
+typedef vector<T_ENO> T_COUNT_type;
+@ @<Type defs@>+=
+typedef T_COUNT_type::iterator T_COUNT_ITER_type;
+@ @<Type defs@>+=
+typedef vector<T_in_stbl*> STBL_T_ITEMS_type;
+@ @<Type defs@>+=
+typedef STBL_T_ITEMS_type::iterator STBL_T_ITEMS_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<rule_def* > RULES_HAVING_AR_type;
+@ @<Type defs@>+=
+typedef RULES_HAVING_AR_type::iterator RULES_HAVING_AR_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector<LA_SET_type* > COMMON_LA_SETS_type;
+@ @<Type defs@>+=
+typedef COMMON_LA_SETS_type::iterator COMMON_LA_SETS_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<int,int> BIT_MAP_type;
+@ @<Type defs@>+=
+typedef BIT_MAP_type::iterator BIT_MAP_ITER_type;
+
+@ @<Type defs@>+=
+struct use_cnt_type {
+ rule_def* for_rule_use_cnt_;
+ rule_def* against_rule_;
+ int use_cnt_;
+ use_cnt_type(rule_def* R,rule_def* S):for_rule_use_cnt_(R),against_rule_(S),use_cnt_(0){};
+ use_cnt_type(const use_cnt_type& C):for_rule_use_cnt_(C.for_rule_use_cnt_)
+,against_rule_(C.against_rule_),use_cnt_(C.use_cnt_){};
+};
+typedef std::map<int,use_cnt_type> CYCLIC_USE_TBL_type;
+typedef CYCLIC_USE_TBL_type::iterator CYCLIC_USE_TBL_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<int> SET_FILTER_type;
+@ @<Type defs@>+=
+typedef tok_can<AST*> TOK_CAN_TREE_type;
+
+@*1 LR1 definitions.\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_structures.1"}{1}{1}
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2_structures.2"}{1}{1}
+\fbreak
+\fbreak
+Let's review what makes up a state:\fbreak
+\ptindent{1) subrules's specific element --- state's to gen vectors}
+\ptindent{2) rules's follow set}
+\ptindent{3) state's entry symbol --- Start state has no entry symbol}
+\ptindent{4) state's list of conflict states}
+A state is a set of productions (subrules) where each production's current symbol
+being worked on
+is some position along its string.
+A state from the arithmetic grammar discussed earlier
+ could be represented by the following example where the ``.'' indicates
+the position within the production's
+string being worked on in the state:\fbreak
+\ptindent{S $\rightarrow$ E \ . \ $\bot$}
+\ptindent{E $\rightarrow$ E \ . \ $+$ T}
+The above state has 2 productions
+where each symbol being worked on is in position 2 of their respective strings.
+These are items in the state having their production configuration of
+subrule $\otimes$ string position.
+Sometimes I shall call each entry a {\bf state element} rather than an item.
+A rule's follow set gets created when it is present in point 1: ie, the state's element is a rule
+and its follow set is the string to its right that generates teminals.
+Please see at the beginning of this document the ``follow set'' definition.
+Point 3's entry symbol identifies the symbol used to gen the state
+and to quickly help in determining whether two states
+are equivalent for potential state merging.
+Point 4 is a requirement to support merging of states from 2 different
+closured-part state networks.
+It supplies the lr1 states that have reduce / reduce or shift conditions
+that
+require the lr1 compatibility check.
+When there is a proposed merger from 2 different closured-part contexts,
+it is the union of their follow sets that gives the reducing subrules their lookahead sets.
+Consequently the lr1 conflict states of the ``merged into context''
+must be evaluated for lr1 compatibility.
+\fbreak
+\fbreak
+Parts of a state:\fbreak
+\ptindent{1) Closured }
+\ptindent{2) Transitive }
+A closured part are all the state's items whose elements start their strings.
+They have been brought into the state by the ``closure'' operation
+caused by a state's element being a rule.
+A transitive part are those productions whose elements are to
+the right of the start element.
+Items used to generate a new state are called {\bf ``core items''}.
+\fbreak
+\fbreak
+State generation:\fbreak
+All states are generated from a closured part of a state.
+Its productions are walked along their strings producing transitive states
+until their strings are completely consumed.
+This holds for the ``Start state'' that starts things off by
+generating all it transitive children.
+Thereafter each transitive state is visited and assessed for its closured components
+that then generates its own transitive states.
+This goes on until all the generated states have been visited.
+\fbreak
+\fbreak
+Contexts:\fbreak
+\ptindent{1) follow sets}
+\ptindent{2) production's reduced lookahead set}
+A production's reduction occurs when all its string has been recognized.
+For it to reduce, it depends on the context of its follow set within
+its birthing closured state:
+This is the lr1 compatibility context that is refered to as {\bf lookahead}.
+When there is no
+conflict of interest between competing productions (reduces with possibly shifts)
+within the state,
+this becomes a lr(0) situation.
+Without regard for the lookahead context this now shifts the error
+detection to the state that must deal with the lookahead as the current terminal for shifting.
+This strategy is used when state merges takes place.
+Instead of exploding the number of states sensitive to only its own
+lookahead context, mergers combine the follow set contexts as long as there is no
+state incompatibilities created.
+2 or more competing reducing productions
+requires their follow set contexts to resolve the reducing conflict:
+reduce / reduce or reduce / shift.
+Shifts of symbols are local to the reducing state.
+
+Of course lookaheads are context sensitive according to
+each productions birthing states. In LR(1) terms, the lookahead is
+deterministic and provided by the
+follow sets having only 1 symbol string as lookahead.
+\fbreak
+\fbreak
+Follow set and right bounded condition:\fbreak
+This condition is where a rule is the last symbol in its production string.
+Its closured productions inherit the follow set
+ of the production string(s) that closured it.
+These follow sets are found in the gening closured
+state environment.
+Consequently right bounded closured productions must be gened
+in case it could produce a conflict state.
+Why? Merges taking place above this to-be-gened production from a different closured state
+generation could produce a conflict as
+the merger is not aware that one
+of its transitive states has a future conflict condition
+dependent on these merged follow set contexts.\fbreak
+As an example please see David Spector from ``SIGPLAN VOL 23 DEC/88''
+where my gened ``lr1\_sp5.lex'' grammar illustrates this condition.
+\fbreak
+\fbreak
+Epsilon rules and right bounded condition:\fbreak
+If the last symbol is a rule and is epsilonable, then the right bounded condition
+moves left inwards from the end of the symbol string to the next right-to-left symbol.
+Now if that symbol is a rule it is considered a right bounded requiring
+generation within the current closured
+state environment. This is a recursive definition: right bounded condition gens closures
+having the right bounded condition that also requires immediate generation.
+When it comes time to gen the closured-part
+state of the right bounded components,
+they will have been already gened
+and their conflict states
+entered against their gening closured-part state environment.
+\fbreak
+\fbreak
+Significance of right bounded condition:\fbreak
+It demands that its future closured state generation be associated with the
+ generating closured state that created it.
+Restated: It must be generated prematurely by its spawning
+closured state.
+This way any of its transitive states that have the lr1 conflict condition will
+get placed in the
+conflict state list of the generating closured state so
+that a proposed merger relative to the original closured state
+is aware of the potential conflict and checked accordingly.
+\fbreak
+\fbreak
+Some synonyms:\fbreak
+``Closure-only'' state:\fbreak
+ A state where all its state elements are configurations with their start symbol.
+ This is your one and only Start state.\fbreak
+\fbreak
+``Transitive'' state:\fbreak
+ A state where at least one state element
+ is not the starting symbol of a production's string.
+ \fbreak
+\fbreak
+``Closured-only-part'' of a state:\fbreak
+ All state's elements whose symbols start the subrule string.
+ Synonym: ``closured state''.\fbreak
+\fbreak
+``Closured-only-subrules'' of a state:\fbreak
+ Productions's symbol strings brought into the state by the closure operation
+ caused by a state's element being a rule.
+ The ``closured-only'' part are those subrules birthed within this state
+ to
+ generate all its ``closured-only'' subrules transitive states.
+ \fbreak
+ \fbreak
+``Conflict state'':\fbreak
+ A state having at least 2 items where at least one of the productions
+ is reducing.
+\fbreak
+\fbreak
+Building a state core:\fbreak
+There are only 2 contexts that provide the generation fodder for a state:\fbreak
+\ptindent{1) Start (closure-only) state --- Start rule's grammar tree definition}
+\ptindent{2) Transitive states --- generated from a closured state}
+The ``closured-part'' of a state generates all its transitive states from its closure subrules
+regardless of the type of state --- Start or transitive.
+Point 1 starts things off. It generates all its transitive states.
+Point 2 deals with transitive states from point 1 that have closured-only residues
+that need generating.
+Of course these newly generated transitive states
+could be merged into the existing lr1 state network if they meet
+the lr1 compatibility criteria.
+Eventually the newly added transitive states
+will be assessed for their ``closured-part'' generation.
+\fbreak
+\fbreak
+Some Merge points:\fbreak
+First, only conflict states are tested.
+They are supplied by their associated closured generating state.
+When a merge takes place, the state being absorbed by the older closured network
+deposits its follow set info against the merged into state.
+
+Second, the conflict states of the ``merged into'' state network must also
+be added to the gening closured state's conflict state list.
+Why?
+If the state was not merged, eventually all its gened states would have
+the equivalent conflict states as the proposed merger.
+The only refinement to this is conflict states should only be added that are
+eventually generated from the ``merged into'' state.
+Now if future mergers are proposed into this newly closured state's network,
+the conflict states of the absorbing network will also be there for the testing.
+\fbreak
+\fbreak
+In summary, Lr1 state generation is discrete in its generation passes.
+Pass one: generate all the states
+for the start state from its ``closured-only'' subrules.
+Pass two and greater deals with ``closured-only'' parts of transitive states that
+have not been completely gened. Remember a subrule is associated with its
+birth state that brought it into existance.
+These transitive states
+are of previous passes.
+Each transitive pass looks for the next transitive state
+to generate
+until
+all its lr state network have been built.
+The ``transitive state pass'' generates all its ``closured-only''
+subrules independently of the past generations.
+\fbreak
+\fbreak
+Now the state implementation bedevils this definition as does Goethic churches ---
+one usually does not see the infrastructure required to build it
+unless the project ran out of money
+and
+stands unfinished but open to its engineering secrets.
+So here's the scaffolding for my sanity.
+A note on the following type defs sections: to make ``cweave'' behave in
+formatting its the document --- a slight ahem until i debug / correct ``cweave''.
+The cause is templates that came after the original program was written.
+
+@*2 |gen_context| definition.\fbreak
+The context identifying the closure state and vector combo gening its states.
+This context is needed to prevent same closure state merges whose
+vectors are different but generate common states having different follow sets.
+If merged the contributing contexts could make it non lr1.
+See David Spector's paper ``Efficicent Full Lr1 Parser Generators'': G2 example.
+The context is maintained per state that gened it and per state's
+ subrules vectors: |state_element|.
+@<Structure defs@>+=
+struct gen_context{
+ state* for_closure_state_;
+ Voc_ENO gen_vector_;
+ gen_context(state* S,Voc_ENO Ve);
+};
+
+@*2 |state_element| definition.\fbreak
+Basic building block of a state's set of subrules'
+string symbols.
+Laced throughout |state_element| are linkages between the
+past, present, and future of its lr1 state generation.
+This is the scaffolding to build the state network.
+|sr_def_element_| {\bf is for tracing purposes only}.
+I could have gone the long way by getting the tree node's content and then
+fetch its definition
+but this makes life easier when truth telling takes place --- {\bf terminal-def or rule-def}.
+
+The |la_set_| only gets created at the end-of-string point.
+It's a fast way to scratch-pad potential merges and the lr1 breathalyzer test.\fbreak
+@<Structure defs@>+=
+struct state_element{
+gen_context cs_vector_combo_gening_it_;
+LA_SET_type* la_set_;
+state* closure_state_;
+state* goto_state_;
+state* reduced_state_;
+state* previous_state_;
+state* self_state_;
+state* closured_state_gening_it_;
+state_element* previous_state_element_;
+state_element* next_state_element_;
+AST* sr_element_; // grammar tree node
+CAbs_lr1_sym* sr_def_element_; // 1 of terminal-def or rule-def
+T_subrule_def* subrule_def_;
+int common_la_set_idx_;
+int its_enum_id_; // grammar's enumerated value of terminal-def or rule-def
+state_element(AST* Elem);
+~state_element();
+ void fill_la_from_merge(state_element& La_to_fill_in,MERGES_type& Merge,RULE_ENO Rule_no);
+ void fill_la_from_transition(state_element& La_to_fill_in,TRANSITIONS_type& Transition);
+ bool calc_la(state_element& La_to_fill_in);
+ void add_fs_setA_to_LA(follow_element& Fe,LA_SET_type& La_to_fill_in);
+ RULE_ENO find_state_element_s_rule_no();
+};
+
+@*2 |follow_element| Follow set definition for a rule.\fbreak
+The input set of strings for the rule's follow set are
+provided by the state's |S_VECTORS_type| that is
+a map of 3 generic enumerate types --- ``rule-defs'', ``T-defs'', and ``eosubrule'' variants.
+Of particular interest in this map are the ``rule-def''s.
+The |state_element|s associated with the rule are the GPS into each subrule's symbol
+string. One can view this as the state's contributors list to generate
+both its lr states and
+the referenced rules' follow sets for this state.
+Now these input follow set strings are
+ the strings to its right of its GPS.
+This is supplied thru the symbol's grammar next brother tree node.
+@<Structure defs@>+=
+struct follow_element{
+ RULE_ENO rule_no_;
+ AST* rule_def_t_;
+ state* its_state_;
+ FOLLOW_SETS_type follow_set_;
+ TRANSITIONS_type transitions_;
+ MERGES_type merges_;
+ SR_ELEMENTS_type sr_elements_;
+ void add_T_to_follow_set(AST* T_element);
+ void add_follow_set_contributor(AST* SR_element);
+ void add_follow_set_transition(state_element& State_elem,T_eosubrule& Eos);
+ void add_follow_set_transition(state_element& State_elem,T_called_thread_eosubrule& Eos);
+ void add_follow_set_transition(state_element& State_elem,T_null_call_thread_eosubrule& Eos);
+ AST* rule_def_t();
+ state* its_state();
+ follow_element(RULE_ENO Rule_no,state_element& State_elem,AST& Rule_def_t);
+ follow_element(state* State);
+ void remove_merge_closure_info();
+ void add_merge_closure_info(state& To_merge_closure_state);
+};
+
+@*2 |state| definition.\fbreak
+|vectored_into_by_elem_| is the goto element from the spawning state that
+ enters this state.
+The ``xxx-def'' symbol is provided by |vectored_into_by_elem_sym_|
+that is used for tracing purposes.
+It is one of the elements in determining whether 2 states are equal.
+I use the symbol's defining enumerate value which was enumerated across all the
+Grammar's vocabulary: Rules and Terminals.
+|START_STATE_ENUMERATE| symbol representing -1
+is used to accommodate a ``closure only'' state where there is no
+symbol entering the start state as a Grammar's vocabulary enumeration begins at 0.
+
+|closure_rule_list_| provides referenced rules in the state to complete the state's
+elements.
+|follow_rule_list_| is a fast way to deal with building follow sets for the state
+as it is a list of rule numbers that are keys into |state_s_to_vector|
+that indirectly supplies the follow string contexts.
+
+To support rules recycling optimization, a quasi
+closure state for any rule of the grammar has been added.
+Why the addition?
+Recycling of rules requires a use count derived from
+recursion and subrules references to the rule.
+My first attempt was wrong as i did not take into account
+that a rhs subrule could have a referenced rule that
+could be indirectly referenced by (derived by) a suffixed referenced rule.
+So i need to derive the state containing the closured items
+and them analyse its content to see whether
+indirect referencing is taking place.
+So create ctor of state with no tree and a |closure_only_derives| method.
+@<Structure defs@>+=
+struct state{
+ gen_context cs_vector_combo_gening_it_;
+ Voc_ENO vectored_into_by_elem_; // enumerate from N or T vocabulary: -1= closure-only state
+ CAbs_lr1_sym* vectored_into_by_elem_sym_; // |rule_def|,|T_def|,0=closure-only state
+ int state_no_;
+ CLOSURE_RULES_type closure_rule_list_;
+ CLOSURE_RULES_type derives_closure_rule_list_;// only for: rule recycling optimization
+ FOLLOW_RULES_type follow_rule_list_;
+ void add_closure_rules_subrules_to_state(gen_context& Possible_gen_context,state& Closure_state);
+ void add_rule_s_subrules_to_state(AST&Start_Rule_def_t,gen_context&Possible_gen_context,state&Closure_state_associate_with);
+ bool crt_core_items_of_state
+ (S_VECTOR_ELEMS_ITER_type& Iter_begin
+ ,S_VECTOR_ELEMS_ITER_type& Iter_end
+ ,gen_context& Gening_context);
+ S_VECTORS_type state_s_vector_;
+ S_FOLLOW_SETS_type state_s_follow_set_map_;
+ S_CONFLICT_STATES_type state_s_conflict_state_list_;
+ void add_element_to_state_vector(Voc_ENO Elem_id,state_element& Elem);
+ void add_rule_to_closure_list(rule_in_stbl* Rule_in_stbl);
+ void add_rule_to_follow_list(RULE_ENO Refered_rule);
+ void create_follow_sets_of_state();
+ void create_start_state(AST& Start_rule_t);
+ bool gen_transitive_states_for_closure_context(gen_context& For_gening_context,state& For_closure_state,state& State);
+
+ bool gen_transitive_states_balance_for_closure_vector(gen_context& Gen_context,state& For_closure_state,state& Goto_state);
+
+
+ state(Voc_ENO Eno,CAbs_lr1_sym* Entry_sym);
+ state(AST* Start_rule_t);
+
+ bool gen_a_state
+ (gen_context& For_gening_context
+ ,state& For_closure_state
+ ,state& Requesting_state,S_VECTORS_ITER_type& Elem_iter);
+
+ const char* entry_symbol_literal();
+ void add_state_to_gbl_lr1_state_tbls(state* State);
+ void add_state_to_conflict_states_list_if(gen_context& Gening_context,state& State);
+ state* closure_state_birthing_it_;
+ bool is_state_lr1_compatible(state& State_to_eval);
+ int are_2_states_compatible_yes_merge(state& To_merge_into_state,state& State_for_merging);
+ void merge_state(state& To_merge_into_state,state& State_for_merging);
+ int find_2_states_compatible_and_merge(state& State_for_merging);
+ bool are_states_equivalent(state& Merge_into_state,state& To_merge_state);
+ bool are_gened_states_lr1_compatible();
+ bool is_str_rt_bnded(AST* Str);
+ bool is_str_epsilonable(AST* Str);
+ void crt_start_rule_s_follow_set(AST& Str);
+ state();// for closure only derives
+ void closure_only_derives(AST* Rule_tree);
+ int determine_reduced_state_type(state* S);
+ int state_type_;
+ string* arbitrator_name_;
+};
+
+@*3 State's map of ``to vector'' elements.\fbreak
+|S_VECTORS_type| is the state's map of ``to vector'' elements
+of ``rule-ref'', ``T-ref'', and |eosubrule|.
+These elements produce the ``goto'' state eminating out of the lr1 state.
+This is a white lie as the |eosubrule| eminates nothing.
+It
+represents either the epsilon condition if its the first element of a subrule
+or a fully consumed subrule: its string of symbols has been consumed and so
+to be reduced.
+``rule-ref'', ``T-ref'' are proxies to their definitions whereby their enumerated values
+are unique.
+
+The second part of the map is the list of {\bf same state elements} having identical
+enumerated keys. These vectors are the fodder to generate the
+next set of states eminating from this state and all the ``closured-only part'' states progeny.
+The list is sorted by the AST address inside the state's emlement
+so that state equivalences can be determined.
+U might raise the point: doesn't it matter what order the elements are placed inside the
+state to generate the lr1 state network: FIFO?
+NO!
+Let's review why.\fbreak
+\ptindent{1) ``closured only'' state composed of 1st position only subrules' elements.}
+\ptindent{2) this state's follow sets are static: first set from strings to rt of refered rules.}
+\ptindent{3) only the closured-only subrules are fully generated at the same time.}
+\ptindent{4) transitive states only continue gening their subrules from the closured state.}
+\ptindent{5) the resulting lr1 states are evaluated for lr1 conflicts.}
+\ptindent{6) apply the logic above to gened states having incomplete gened closured-only parts.}
+\fbreak
+It is point 2 that is interesting: the birthing closured states
+ of its reducing subrules supplies their lookahead.
+ This means the closured state is
+ generated completely before an assessment needs to take place.
+ The lr1 assessment determines whether the gened states are lr(1) compatible.
+ This check goes only against states that have reducing subrules so that the reduce / reduce
+ and shift / reduce conditions can be verified.
+
+ How is the lr1 condition evaluated?
+ Easy, the reducing subrule's rule within its birthing closured state contains its follow set:
+ ie its lookahead terminals.
+ All it takes is to make sure that the intersection
+ of all the reducing subrules' follow sets
+ is empty and that the state's shift terminals are
+ not in any of the reducing subrules' follow sets.
+ This shift set can be considered an invisible follow set that is applied at
+ the same time to the other reducing follow sets.
+ Keeping a list of conflicting states within the ``closure-only or part'' state
+ when a state merge is proposed allows one to
+ apply this lr1 condition for compatibility against the potential merged follow sets.
+ Remember a gened state is produced out of its closured state.
+ Thus mergers mean use the follow sets of each closure state. The
+ ``state to merge into'' already has it list of lr1 conflict states
+ in its associated gening closured state that need checking
+ before Mr. Goodwrench nods. \fbreak
+ \fbreak
+ Key: element's enumerate: ``rule-def'', ``T-def'', and ``eosubrule'' \fbreak
+ Elements in list: state's elements that contain a grammar's tree node address \fbreak
+
diff --git a/web/yacco2/compiler/o2/o2externs.w b/web/yacco2/compiler/o2/o2externs.w
new file mode 100644
index 0000000000..61fc6a5a7a
--- /dev/null
+++ b/web/yacco2/compiler/o2/o2externs.w
@@ -0,0 +1,8194 @@
+@q file: o2externs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% This file is part of YACC02 compiler/compiler project.@>
+
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+%\tracingall=1
+%\tracingall=1
+%\tracingmacros=1
+%\tracingcommands=2
+@i "/usr/local/yacco2/license.w"
+
+@** Summary of \O2 External parse routines.\fbreak
+These are the various procedures that parse \Yacco2's grammar language
+and emit the grammar's c++ code
+and tex document with mpost generated diagrams.
+Each language construct has its appropriate external procedure that houses
+the monolithic grammar to start the parse.
+There is no namespace used to contain these routines as I felt that this was overkill.
+As this is a closed system, their grammars are not universal and
+cannot be re-cycled for others.
+Their only outside value are in teaching examples on ``how to skin a cat'' or is it
+``how to parse a lion?''...
+
+External routines ratatouille:\fbreak
+\ptindent{|o2externs.w| - cweb generator file}
+\ptindent{|o2_externs.h| - header file}
+\ptindent{|o2_externs.cpp| - implementation}
+
+Dependency files from other Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_T_enumeration.h| - terminal enumeration for Yacco2's terminal grammar alphabet}
+\ptindent{|yacco2_err_symbols.h| - error terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_characters.h| - raw character definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_k_symbols.h| - constant meta terminal defs from Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|*.h| - assorted grammar definitions for Yacco2's parsing}
+\ptindent{|yacco2_stbl.h| - symbol table defnitions}
+
+External procedures and other globals:\fbreak
+\ptindent{|YACCO2_PARSE_CMD_LINE|}
+\ptindent{|PROCESS_INCLUDE_FILE|}
+\ptindent{|PROCESS_KEYWORD_FOR_SYNTAX_CODE|}
+\ptindent{|O2_xxx| phases --- terminals per distinct parse phrase}
+\ptindent{|PRINT_RULES_TREE_STRUCTURE|}
+\ptindent{|WRT_CWEB_MARKER|}
+\ptindent{|GEN_FS_OF_RULE|}
+\ptindent{|PRT_RULE_S_FIRST_SET|}
+\ptindent{|OP_GRAMMAR_HEADER|}
+\ptindent{|OP_ERRORS_HEADER|}
+\ptindent{|OP_USER_T_HEADER|}
+\ptindent{|DATE_AND_TIME|}
+\ptindent{|MAX_USE_CNT_RxSkeletion| --- rule recyling}
+\ptindent{|XLATE_SYMBOLS_FOR_cweave|}
+Internal procedures:\fbreak
+\ptindent{|process_fsm_phrase|}
+\ptindent{|process_parallel_parser_phrase|}
+\ptindent{|process_T_enum_phrase|}
+\ptindent{|process_error_symbols_phrase|}
+\ptindent{|process_rc_phrase|}
+\ptindent{|process_lr1_k_phrase|}
+\ptindent{|process_terminals_phrase|}
+\ptindent{|process_rules_phrase|}
+\ptindent{|Print_dump_state|}
+
+
+@** Global definitions, External parse routines for Yacco2.\fbreak
+Why |CWEB_MARKER| external?
+It holds the |T_cweb_marker| tree containing |cweb| comments.
+Why? It is a holding pointer that allows |cweb| comments
+to be processed before
+the appropriate parse phrases like |process_xxx_phrase|
+that are triggered by |PROCESS_KEYWORD_FOR_SYNTAX_CODE|.
+\def\ptindent#1{\line{\hskip.5in{#1}\hfill}}
+\def\fbreak{\hfill\break}
+\def\wildcard{$\vert$+$\vert$}
+\def\parallelop{$\vert\vert\vert$}
+
+@ Create header file.
+@(o2_externs.h@>=
+#ifndef o2_externs_
+#define o2_externs_ 1
+@h
+@<Files for header@>;
+#endif
+
+@*2 Files for header.
+@<Files for header@>=
+#include "globals.h"
+#include "o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_err_hdlr.h"
+#include "fsm_phrase.h"
+#include "parallel_parser_phrase.h"
+#include "T_enum_phrase.h"
+#include "err_symbols_ph.h"
+#include "rc_phrase.h"
+#include "lr1_k_phrase.h"
+#include "terminals_phrase.h"
+#include "rules_phrase.h"
+#include "yacco2_stbl.h"
+#include "enumerate_T_alphabet.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "cweb_put_k_into_ph.h"
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern int NO_LR1_STATES;
+extern T_fsm_phrase*O2_FSM_PHASE;
+extern T_parallel_parser_phrase*O2_PP_PHASE;
+extern T_enum_phrase*O2_T_ENUM_PHASE;
+extern T_lr1_k_phrase*O2_LRK_PHASE;
+extern T_rc_phrase*O2_RC_PHASE;
+extern T_error_symbols_phrase*O2_ERROR_PHASE;
+extern T_terminals_phrase*O2_T_PHASE;
+extern T_rules_phrase*O2_RULES_PHASE;
+extern STATES_type LR1_STATES;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern yacco2::AST* GRAMMAR_TREE;
+extern yacco2::AST* CWEB_MARKER;
+extern void WRT_CWEB_MARKER(std::ofstream* Wfile,yacco2::AST* Cweb_marker);
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL();
+extern void GET_CMD_LINE(int argc, char* argv[]
+ ,const char* File,yacco2::TOKEN_GAGGLE& Errors);
+extern void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE& Errors);
+extern void PRINT_RULES_TREE_STRUCTURE(AST* Node);
+extern const char* DATE_AND_TIME();
+extern void YACCO2_PARSE_CMD_LINE@/
+ (yacco2::CHAR& T_sw@/
+ ,yacco2::CHAR& ERR_sw,yacco2::CHAR& PRT_sw@/
+ ,std::string& Grammar_to_compile@/
+ ,yacco2::TOKEN_GAGGLE& Error_queue);
+extern bool PROCESS_INCLUDE_FILE@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_file_inclusion& File_include@/
+ ,yacco2::token_container_type& T2);
+extern bool PROCESS_KEYWORD_FOR_SYNTAX_CODE@/
+ (yacco2::Parser& Parser@/
+ ,yacco2::CAbs_lr1_sym* Keyword@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos);
+extern void BUILD_GRAMMAR_TREE(yacco2::AST& Item);
+extern void PRINT_GRAMMAR_TREE(AST* Node);
+extern void GEN_FS_OF_RULE(NS_yacco2_terminals::rule_def* Rule_def);
+extern void GEN_CALLED_THREADS_FS_OF_RULE@/
+ (NS_yacco2_terminals::rule_def* Start_rule);
+extern int MAX_USE_CNT_RxR@/
+ (NS_yacco2_terminals::rule_def* Rule_use
+ ,NS_yacco2_terminals::rule_def* Against_rule);
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern void PRT_RULE_S_FIRST_SET(NS_yacco2_terminals::rule_def* Rule_def);
+extern void OP_GRAMMAR_HEADER(TOKEN_GAGGLE& Error_queue);
+extern void OP_GRAMMAR_CPP(TOKEN_GAGGLE& Error_queue);
+extern void OP_GRAMMAR_SYM(TOKEN_GAGGLE& Error_queue);
+extern void OP_GRAMMAR_TBL(TOKEN_GAGGLE& Error_queue);
+extern void OP_ENUMERATION_HEADER(TOKEN_GAGGLE& Error_queue);
+extern void OP_T_Alphabet(TOKEN_GAGGLE& Error_queue);
+extern void OP_ERRORS_HEADER(TOKEN_GAGGLE& Error_queue);
+extern void OP_ERRORS_CPP(TOKEN_GAGGLE& Error_queue);
+extern void OP_USER_T_HEADER(TOKEN_GAGGLE& Error_queue);
+extern void OP_USER_T_CPP(TOKEN_GAGGLE& Error_queue);
+extern void OP_FSC_FILE(TOKEN_GAGGLE& Error_queue);
+extern void Print_dump_state(state* State);
+@ Include Header file.
+@<Include Header file@>=
+#include "o2_externs.h"
+@ Yacco2 external routines blueprint. Output of the code.
+@(o2_externs.cpp@>=
+@<Include Header file@>;
+@<accrue source for emit@>;
+
+
+@ Accrue source for emit.
+@<accrue source for emit@>=
+RULES_HAVING_AR_type RULES_HAVING_AR;
+COMMON_LA_SETS_type COMMON_LA_SETS;
+T_fsm_phrase*O2_FSM_PHASE(0);
+T_parallel_parser_phrase*O2_PP_PHASE(0);
+T_enum_phrase*O2_T_ENUM_PHASE(0);
+T_lr1_k_phrase*O2_LRK_PHASE(0);
+T_rc_phrase*O2_RC_PHASE(0);
+T_error_symbols_phrase*O2_ERROR_PHASE(0);
+T_terminals_phrase*O2_T_PHASE(0);
+T_rules_phrase*O2_RULES_PHASE(0);
+
+yacco2::AST* CWEB_MARKER(0);
+yacco2::AST* GRAMMAR_TREE(0);
+RULE_ENO START_OF_RULES_ENUM(-1);
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+@** Local Yacco2 routines.\fbreak
+@ Prescan literal names within |mpost|.
+Due to a bug in the ``convertMPtoPDF'' macro,
+spaces are edited.
+@<accrue source for emit@>+=
+void prescan_mpname_for_cweb(std::string& In,std::string& Out){
+ int len = In.length();
+ for(int x=0;x<len;++x){
+ switch(In[x]){
+ case ' ':{// substitute for epsilon
+ Out += '.';
+ break;
+ }
+ case '\\':{// if esc seq on self just op
+ if(x+1 < len){// are there lookahead chars
+ if(In[x+1] == '\\'){// is it on self
+ Out += In[x];
+ ++x; // bypass the 2nd esc
+ break;
+ }
+ Out += In[x];// nope so mpost the full expression
+ break;
+ }else{
+ Out += In[x];
+ break;
+ }
+ }
+ default:{
+ Out += In[x];
+ break;
+ }
+ }
+ }
+}
+
+@*2 |Print_dump_state|.\fbreak
+@<accrue source for emit@>+=
+extern void Print_dump_state(state* State){
+ @<print dump state@>;
+}
+@ @<print dump state@>=
+const char* literal_name;
+yacco2::lrclog << std::endl;
+yacco2::lrclog << "->State: ";
+ state* cur_state = State;
+ literal_name = cur_state->entry_symbol_literal();
+
+ yacco2::lrclog << cur_state->state_no_ << " Entry: " <<
+ cur_state->vectored_into_by_elem_
+ << " Symbol: "
+ << literal_name;
+ if(cur_state->closure_state_birthing_it_!=0){
+ yacco2::lrclog << " Birthing closure state: "
+ << cur_state->closure_state_birthing_it_->state_no_;
+ }
+ yacco2::lrclog<< std::endl;
+ yacco2::lrclog << " Follow set:" << std::endl;
+ S_FOLLOW_SETS_ITER_type sfi = cur_state->state_s_follow_set_map_.begin();
+ S_FOLLOW_SETS_ITER_type sfie = cur_state->state_s_follow_set_map_.end();
+ for(;sfi!=sfie;++sfi){
+ follow_element* fe = sfi->second;
+ @=rule_def* rd = (rule_def*)AST::content(*fe->rule_def_t_);@>@/
+ yacco2::lrclog << " Rule no: " << fe->rule_no_
+ << " Name: " << rd->rule_name()->c_str() << std::endl;
+
+ FOLLOW_SETS_ITER_type i = fe->follow_set_.begin();
+ FOLLOW_SETS_ITER_type ie = fe->follow_set_.end();
+ if(i!=ie){
+ yacco2::lrclog<<" follow set:"<<endl;
+ yacco2::lrclog<<" ";
+ }
+ int nos(1);
+ for(;i!=ie;++i){
+ T_in_stbl* tit = *i;
+ ++nos;
+ if(nos > 15) {
+ yacco2::lrclog << endl;
+ yacco2::lrclog << "\t\t";
+ nos = 1;
+ }
+ yacco2::lrclog << tit->t_def()->t_name()->c_str() << " ";
+ }
+
+ TRANSITIONS_ITER_type j = fe->transitions_.begin();
+ TRANSITIONS_ITER_type je = fe->transitions_.end();
+ if(j!=je){
+ yacco2::lrclog<<" transitions"<<endl;
+ }
+ for(;j!=je;++j){
+ follow_element* tfe = *j;
+ @=rule_def* rd = (rule_def*)AST::content(*tfe->rule_def_t_);@>@/
+ yacco2::lrclog << " S" << tfe->its_state_->state_no_
+ << "x" << rd->rule_name()->c_str() << endl;
+ }
+ MERGES_ITER_type k = fe->merges_.begin();
+ MERGES_ITER_type ke = fe->merges_.end();
+ if(k!=ke){
+ yacco2::lrclog<<" merges"<<endl;
+ }
+ for(;k!=ke;++k){
+ state* s = *k;
+ yacco2::lrclog << " S" << s->state_no_ << " " ;
+ }
+ yacco2::lrclog << endl;
+ }
+ yacco2::lrclog << " Vectors:" << std::endl;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ for(;svi!=svie;++svi){
+ yacco2::lrclog << " Symbol no: " << svi->first;
+
+ int first_time(0);
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ state_element* se = *seli;
+if(first_time == 0){
+ first_time = 1;
+ CAbs_lr1_sym* sym = AST::content(*se->sr_element_);
+ yacco2::lrclog << " Symbol: ";
+ switch(sym->enumerated_id__){
+case T_Enum::T_refered_rule_:{
+@<get cast referenced rule@>;
+rule_def* rd = rr->its_rule_def();
+ yacco2::lrclog << rd->rule_name()->c_str() << endl;
+break;
+}
+case T_Enum::T_refered_T_:{
+@<get cast referenced T@>;
+T_terminal_def* td = rt->its_t_def();
+ yacco2::lrclog << td->t_name()->c_str() << endl;
+break;
+}
+default:{
+ yacco2::lrclog << sym->id() << endl;
+break;
+}
+
+ }
+
+}
+ @<dump se element@>;
+ }
+ }
+ if(cur_state->state_s_conflict_state_list_.empty() != true){
+ yacco2::lrclog << " ===>Conflict states:" << std::endl;
+ S_CONFLICT_STATES_ITER_type csi = cur_state->state_s_conflict_state_list_.begin();
+ S_CONFLICT_STATES_ITER_type csie = cur_state->state_s_conflict_state_list_.end();
+ for(;csi!=csie;++csi){
+ state* cstate = *csi;
+ yacco2::lrclog << " State no: " << cstate->state_no_ << endl;
+ }
+ }
+ yacco2::lrclog << "End of state" << std::endl;
+
+@
+@<dump se element@>=
+ CAbs_lr1_sym* sym = AST::content(*se->sr_element_);
+Voc_ENO id = sym->enumerated_id__;
+@<dump sr element@>;
+
+@
+@<dump sr element@>=
+ switch(id){
+ case T_Enum::T_refered_rule_:{
+ @<get cast referenced rule@>;
+ yacco2::lrclog << " RxSRxPos: " << rr->grammar_s_enumerate()->c_str();
+ rule_def* rd = rr->its_rule_def();
+ yacco2::lrclog << " " << rd->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{
+ @<get cast referenced eosubrule@>;
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+ if(i != ie){
+ yacco2::lrclog << " reduce set #: "<< se->common_la_set_idx_<< endl;
+ yacco2::lrclog << " ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl; }else{
+ yacco2::lrclog << " reduce set #: Empty see following transition"<< endl;
+ }
+}
+ yacco2::lrclog << " RxSRxPos: " << eos->grammar_s_enumerate()->c_str() ;
+ rule_def* rd = eos->its_rule_def();
+ yacco2::lrclog << " Eos of " << rd->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ @<get cast referenced null called thread eosubrule@>;
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+ if(i != ie){
+ yacco2::lrclog << " reduce set #: "<< se->common_la_set_idx_<< endl;
+ yacco2::lrclog << " ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;
+ }else{
+ yacco2::lrclog << " reduce set #: Empty see following transition"<< endl;
+ }
+}
+ yacco2::lrclog << " RxSRxPos: " << eos->grammar_s_enumerate()->c_str() ;
+ rule_def* rd = eos->its_rule_def();
+ yacco2::lrclog << " Eos of " << rd->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ @<get cast referenced called thread eosubrule@>;
+ if(se->la_set_!=0){
+ LA_SET_ITER_type i= se->la_set_->begin();
+ LA_SET_ITER_type ie= se->la_set_->end();
+ int nos(1);
+ if(i != ie){
+ yacco2::lrclog << " reduce set #: "<< se->common_la_set_idx_<< endl;
+ yacco2::lrclog << " ";
+ for(;i!=ie;++i){
+ T_in_stbl*tit= *i;
+ ++nos;
+ if(nos> 15){
+ yacco2::lrclog<<endl;
+ yacco2::lrclog<<" ";
+ nos= 1;
+ }
+ yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+ }
+ yacco2::lrclog<<endl;
+ }else{
+ yacco2::lrclog << " reduce set #: Empty see following transition"<< endl;
+ }
+ }
+ yacco2::lrclog << " RxSRxPos: " << eos->grammar_s_enumerate()->c_str() ;
+ rule_def* rd = eos->its_rule_def();
+ yacco2::lrclog << " Eos of " << rd->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @<get cast referenced T@>;
+ yacco2::lrclog << " RxSRxPos: " << rt->grammar_s_enumerate()->c_str();
+ T_terminal_def* td = rt->its_t_def();
+ yacco2::lrclog << " " << td->t_name()->c_str();
+ break;
+ }
+ }
+ yacco2::lrclog << " Closured S" << se->closure_state_->state_no_;
+ yacco2::lrclog << " CS-gening-it S" << se->closured_state_gening_it_->state_no_;
+ if(se->closure_state_->state_no_ != se->closured_state_gening_it_->state_no_){
+ yacco2::lrclog << " due to rt bnd " ;
+ }
+ if(se->goto_state_ != 0){
+ yacco2::lrclog << " goto S" << se->goto_state_->state_no_;
+ }
+ if(se->reduced_state_ != 0){
+ yacco2::lrclog << " reduced S" << se->reduced_state_->state_no_;
+ yacco2::lrclog << std::endl;
+ }else{
+ yacco2::lrclog << " reduced S" << "????";
+ yacco2::lrclog << std::endl;
+ }
+@
+@<get subrule's referenced rule in follow string@>=
+ @=refered_rule* rr = (refered_rule*)AST::content(*se->sr_element_);@>@/
+@
+@<get cast referenced rule@>=
+ @=refered_rule* rr = (refered_rule*)sym;@>@/
+@
+@<get cast referenced T@>=
+ @=refered_T* rt = (refered_T*)sym;@>@/
+
+@
+@<get cast referenced eosubrule@>=
+ @=T_eosubrule* eos = (T_eosubrule*)sym;@>@/
+@
+@<get cast referenced null called thread eosubrule@>=
+ @=T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;@>@/
+@
+@<get cast referenced called thread eosubrule@>=
+ @=T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;@>@/
+
+
+@*2 |process_fsm_phrase|.\fbreak
+This process demonstrates quasi
+recursive descent and bottom-up grammar parsing.
+There is no recursion taking place: just a single call to get things going.
+The procedure is a packaging agent
+that houses a monolithic grammar |Cfsm_phrase| which then uses
+parallel parsing threads to do its deeds.
+The grammars parse a stream of characters which get turned into the
+appropriate tokens.
+This is an inbetween style of parsing of the lexical and syntax phrases interweaving
+ together.
+This is due to the c++ syntax directed code being just a stream of characters
+where a lookahead in the character stream for `***' is done to close the code directive.
+Of course,
+this code directive is parsed in parallel for literal and comment tokens which can subsume this.
+The reason for this skip across the characters to end
+the c++ code approach was laziness!
+I did not want to develop a c++ suite of grammars to deal with the syntax directed code.
+The risk in this current approach is to misprogram the end-of-code indicator `***'.
+This could lead to grammar stream overrun (end-of-file reached) while thinking that one is still
+in the syntax directed code stream.
+It also passes the buck to the c++ compiler to deal
+with any c++ syntax directed code errors.
+At least this run-away type error is guarded against in the grammars.
+
+The other potential problem is the perverse pointer to a pointer to a pointer buried
+in the syntax directed code: ``***''. I thought of this situation and how to resolve
+it by use of a different character set: for example 3 pound signs.
+I nixed it as I felt it ulgy in aesthetics and as a highlighter of code boundaries.
+{\bf So heed the warnin}.
+
+The other interesting part to this family of grammars is in the use
+of the wild card facility to trap errors and how the subordinate grammars
+issue errors as normal tokens.
+This allows for a cleaner way to
+deal with error handling within a grammar's subrule phrase and
+associated syntax directed code.
+This is achieved by
+ writing explicit production subrules using these error terminals
+or to program the wild card catch all facility.
+Take a look in the grammars at how \wildcard{} is used.
+
+The last note is how the newly generated tokens are dealt with when an error occurs.
+This is rather easy, the holding token |T_fsm_phrase| is deleted.
+It contains all the important tokens created in its parse.
+Hence when there is a ruptured grammar sequence, the accumulated tokens
+are deleted by |T_fsm_phrase| destructor.
+Throw away tokens like white space and comments that are part of the
+fsm phrase are
+auto deleted when popped from the parse stack.
+Comments and white space within the syntax directed code
+are kept.
+This is why the output token container's contents are not deleted.
+There is no |yacco2::Delete_tokens(...);| statement in this procedure.
+The holding token is deposited in the passed |T_fsm| parameter.
+|O2_FSM_PHASE| holds the |T_fsm_phrase| terminal.
+Please see its family of grammars:\fbreak
+ \ptindent{|fsm_phrase|.lex - monolithic grammar}
+ \ptindent{|fsm_phrase_th|.lex - parse fsm phrase}
+ \ptindent{|fsm_attributes|.lex - fsm keywords recognizer}
+ \ptindent{|fsm_class_directives|.lex - fsm syntax code directives}
+ \ptindent{|fsm_class_phrase_th|.lex - parse fsm-class phrase containing c++ code snippets}
+
+ @^\PB{fsm\_phrase.lex}@>
+ @^\PB{fsm\_phrase\_th.lex}@>
+ @^\PB{fsm\_attributes.lex}@>
+ @^\PB{fsm\_class\_directives.lex}@>
+ @^\PB{fsm\_class\_phrase\_th.lex}@>
+
+
+@<accrue source for emit@>+=
+bool
+process_fsm_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_fsm& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+
+ using namespace NS_fsm_phrase;
+ Cfsm_phrase fsm;
+ Parser p1(fsm,ip1,&op1,start_pos,er1);
+ p1.parse();
+
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_fsm_phrase* t = (T_fsm_phrase*)sym@>;
+ Phrase_to_parse.fsm_phrase(t);
+ if(O2_FSM_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_fsm_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_FSM_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in fsm-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+@*2 Output macros and banner.
+@<accrue source for emit@>+=
+void output_cweb_macros_and_banner(
+NS_mpost_output::Cmpost_output* Fsm
+,std::ofstream& Ofile
+,yacco2::KCHARP Banner
+,const char* Date
+,string* Grammar_name
+,string* Name_space
+,int No_t){
+using namespace NS_mpost_output;
+ KCHARP macros =
+ "\\input%s \"supp-pdf\"\n"@/
+ "\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n";
+ int x = sprintf(Fsm->big_buf_,macros," ");
+ Ofile.write(Fsm->big_buf_,x);
+ KCHARP banner =
+ "\\DOCtitle{%s}{%s}%\n"
+ "{%s}{%i}\n";
+ char fname[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Grammar_name->c_str(),fname);
+ char ns_name[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Name_space->c_str(),ns_name);
+
+ x = sprintf(Fsm->big_buf_,banner
+ ,Banner
+ ,fname,ns_name,No_t);
+ Ofile.write(Fsm->big_buf_,x);
+}
+
+@*2 |process_parallel_parser_phrase|.\fbreak
+This parses the parallel component of a grammar.
+It supplies the threading components and lookahead expression for a threaded grammar.
+One thing of note, the lookahead expression is held as a character stream
+which gets parsed after the complete grammar has been recognized.
+The reason for this is in the lookahead expression's potential
+ use of productions (rules).
+Rules are packaging agents to haul in terminals as elements for the first set.
+As the production name used has not yet been defined,
+one must wait until
+the complete production section has been parsed
+before obtaining its FIRST SET of terminals for
+the thread's lookahead expression.
+Only then can the lookahead character stream be parsed in
+terms of ``rule-in-stbl'' and ``T-in-stbl'' tokens. From
+these tokens, the expression set will be calculated
+from their terminals.
+The production declaration is not restricted to use within
+the grammar's grammatical phrases though a check will be done with an appropriate warning
+if the production has not been used somewhere within the grammar or
+parallel parser lookahead expression.
+
+The lookahead expression uses addition and subtraction of
+terminal terms to arrive at the lookahead set. The |eolr|
+terminal has the meaning of ``use all terminals defined including self''.
+The advantage is two fold: its supplies all the terminals thus
+shrinking substantially the lookahead set's size --- only one
+terminal in its set, and two it eases the grammar writer's fingers
+ in that the expression is much shorter to express.
+|O2_PP_PHASE| holds the |T_parallel_parser_phrase|
+terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|parallel_parser_phrase|.lex - monolithic grammar}
+ \ptindent{|parallel_parser_phrase_th|.lex - parse parallel parser construct}
+ \ptindent{|parallel_parser_attributes|.lex - parallel parser keywords recognizer}
+
+ @^\PB{parallel\_parser\_phrase.lex}@>
+ @^\PB{parallel\_parser\_phrase\_th.lex}@>
+ @^\PB{parallel\_parser\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_parallel_parser_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_parallel_parser& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_parallel_parser_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Cparallel_parser_phrase pparser;
+ Parser p1(pparser,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_parallel_parser_phrase* t = (T_parallel_parser_phrase*)sym@>;
+ Phrase_to_parse.parallel_parser_phrase(t);
+ if(O2_PP_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_pp_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_PP_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in parallel-parser-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+
+@*2 |process_T_enum_phrase|.\fbreak
+Its use is in housing all the enumerated
+terminals from the generated alphabets and possible user included constant definitions
+that are needed outside the grammars. These span the spectrums of errors, raw characters,
+LR constants, and finally the pedestrian terminals.
+
+The enumeration is lr k starting at 0 $<$ raw characters $<$ error $<$ regular terminals.
+As raw chars and ``lr k'' terminals are constant, the other two
+alphabets grow outwards in the right direction as new members are defined.
+|O2_T_ENUM_PHASE| holds the |T_enum_phrase| terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|T_enum_phrase|.lex - monolithic grammar}
+ \ptindent{|T_enum_phrase_th|.lex - parse |T_enumeration| construct}
+ \ptindent{|T_enum_attributes|.lex - |T_enumeration| keywords recognizer}
+
+ @^\PB{T\_enum\_phrase.lex}@>
+ @^\PB{T\_enum\_phrase\_th.lex}@>
+ @^\PB{T\_enum\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_T_enum_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_enumeration& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_T_enum_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ CT_enum_phrase enum_ph;
+ Parser p1(enum_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_enum_phrase* t = (T_enum_phrase*)sym@>;
+ Phrase_to_parse.enum_phrase(t);
+ if(O2_T_ENUM_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_T_enum_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_T_ENUM_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in t-enum-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+@*2 |process_error_symbols_phrase|.\fbreak
+This handles the error
+alphabet introduced to the grammar.
+It is normally placed into its own file and brought into the grammar
+by way of the grammar's include file facility.
+It was designed this way to segregate the terminal symbols
+ both in definition and
+own namespace enclosure.
+The same holds for the other terminal types: raw characters, LR constants,
+and the regular terminals.
+|O2_ERROR_PHASE| holds the |T_error_symbols_phrase| terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|err_symbols_ph|.lex - monolithic grammar}
+ \ptindent{|err_symbols_ph_th|.lex - parse error symbols construct}
+ \ptindent{|error_symbols_attributes|.lex - error symbols keywords recognizer}
+
+ @^\PB{error\_symbols\_phrase.lex}@>
+ @^\PB{error\_symbols\_phrase\_th.lex}@>
+ @^\PB{error\_symbols\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_error_symbols_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_error_symbols& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_err_symbols_ph;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Cerr_symbols_ph err_ph;
+ Parser p1(err_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_error_symbols_phrase* t = (T_error_symbols_phrase*)sym@>;
+ Phrase_to_parse.error_symbols_phrase(t);
+ if(O2_ERROR_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_error_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_ERROR_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in error-symbols-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+
+@*2 |process_rc_phrase|.\fbreak
+This handles the raw character terminals.
+This is the alphabet of raw character terminals introduced to the grammar.
+It is normally placed into its own file and brought into the grammar
+by way of the grammar's include file facility.
+It was designed this way to segregate the terminal symbols
+ both in definition and
+own namespace enclosure.
+|O2_RC_PHASE| holds the |T_rc_phrase| terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|rc_phrase|.lex - monolithic grammar}
+ \ptindent{|rc_phrase_th|.lex - parse error symbols construct}
+ \ptindent{|rc_attributes|.lex - raw character symbols keywords recognizer}
+
+ @^\PB{rc\_symbols\_phrase.lex}@>
+ @^\PB{rc\_phrase\_th.lex}@>
+ @^\PB{rc\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_rc_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_raw_characters& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_rc_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Crc_phrase rc_ph;
+ Parser p1(rc_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_rc_phrase* t = (T_rc_phrase*)sym@>;
+ Phrase_to_parse.rc_phrase(t);
+ if(O2_RC_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_rc_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_RC_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in rc-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+
+@*2 |process_lr1_k_phrase|.\fbreak
+This handles the |lr_k|
+of constants used throughout the grammars:
+for example, end-of-grammar, parallel operators and the like.
+It is normally placed into its own file and brought into the grammar
+by way of the grammar's include file facility.
+It was designed this way to segregate the terminal symbols
+ both in definition and own namespace enclosure.
+|O2_LRK_PHASE| holds the |T_lr1_k_phrase| terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|lr1_k_phrase|.lex - monolithic grammar}
+ \ptindent{|lr1_k_phrase_th|.lex - parse lr1 k symbols construct}
+ \ptindent{|lr1_k_attributes|.lex - lr1 k symbols keywords recognizer}
+
+ @^\PB{lr1\_k\_phrase.lex}@>
+ @^\PB{lr1\_k\_phrase\_th.lex}@>
+ @^\PB{lr1\_k\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_lr1_k_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_lr1_constant_symbols& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_lr1_k_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Clr1_k_phrase lr_ph;
+ Parser p1(lr_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_lr1_k_phrase* t = (T_lr1_k_phrase*)sym@>;
+ Phrase_to_parse.lr1_k_phrase(t);
+ if(O2_LRK_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_lrk_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_LRK_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in lr1-k-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+
+@*2 |process_terminals_phrase|.\fbreak
+This handles the
+regular terminals alphabet introduced to the grammar.
+It is normally placed into its own file and brought into the grammar
+by way of the grammar's include file facility.
+It was designed this way to segregate the terminal symbols
+ both in definition and
+own namespace enclosure.
+This is the grammar writer's stable of terminals used by the grammars to process
+the specific language.
+|O2_T_PHASE| holds the |T_terminals_phrase| terminal.
+
+Its family of grammars are:\fbreak
+ \ptindent{|terminals_phrase|.lex - monolithic grammar}
+ \ptindent{|terminals_phrase_th|.lex - parse terminal symbols construct}
+ \ptindent{|terminals_attributes|.lex - terminal symbols keywords recognizer}
+
+ @^\PB{terminals\_phrase.lex}@>
+ @^\PB{terminals\_phrase\_th.lex}@>
+ @^\PB{terminals\_attributes.lex}@>
+
+@<accrue source for emit@>+=
+bool
+process_terminals_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_terminals& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_terminals_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Cterminals_phrase term_ph;
+ Parser p1(term_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_terminals_phrase* t = (T_terminals_phrase*)sym@>;
+ Phrase_to_parse.terminals_phrase(t);
+ if(O2_T_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_T_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_T_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ return Success;
+ }
+error_exit:
+ lrclog << "error in terminals-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+
+@*2 |process_rules_phrase|.\fbreak
+This parses the rule's alphabet of the grammar.
+In grammar parlance, this is the |productions| and |rules| rolled into one.
+The rule names are local to the grammar. They do not
+use global space allowing the grammar writer to assign meaningful rule names
+of reuse patterns expressed throughout each grammar.
+
+The `fsm' structure of the grammar has a namespace property that
+allows each grammar to be mixed in global space.
+|O2_RULES_PHASE| holds the |T_rules_phrase| terminal.
+
+Why the enumeration of the Terminal alphabet before processing rules?
+I wanted it as a discrete process
+rather than distributed throughout pieces of grammars,
+ and to improve rule parsing, and i
+reference the parallel operator terminal ``\parallelop'' \ specifically for clarity in
+the sub-rule parsing.
+How so clarity?
+I felt dividing a grammar's productions into thread expressions or
+standard symbol strings made the subrule grammar more
+readable.
+It sharpened the distinction between the 2 types of grammars: monolithic and thread.
+Due to this, the \parallelop was explicitly programmed
+and its presence tested for
+using a fixed enumeration value rather
+than its literal string name.
+
+
+Its family of grammars are:\fbreak
+ \ptindent{|rules_phrase|.lex - monolithic grammar}
+ \ptindent{|rules_phrase_th|.lex - parse terminal symbols construct}
+ \ptindent{|terminals_attributes|.lex - terminal symbols keywords recognizer}
+ \ptindent{|rule_def_phrase|.lex - parse rule's definition construct}
+ \ptindent{|rule_lhs_phrase|.lex - parse rule's lhs construct}
+ \ptindent{|parallel_monitor_phrase|.lex - parse rule's arbitration construct}
+ \ptindent{|subrules_phrase|.lex - parse subrule's definition construct}
+ \ptindent{|subrule_def|.lex - parse a subrule's rhs expression}
+
+ @^\PB{terminals\_phrase.lex}@>
+ @^\PB{terminals\_phrase\_th.lex}@>
+ @^\PB{terminals\_attributes.lex}@>
+
+
+@*4 Enumerate Terminal alphabet.\fbreak
+Each terminal phase contains its mapped symbols and ``create order'' list.
+The implied enumeration starts with the lrk symbols followed by
+raw characters, errors, and finally the terminals.
+The rank order is 0..n-1 where n is the total number of terminals in the alphabet.
+The ``create order'' list provides the symbol order.
+As i rant on relative zero from previous writings regarding vector access etc,
+why not here regarding the rank assignment from 0?
+Modulo arithmetic is used on
+the register's number of bits to calculate a specific element in the first set:
+a divisional way of doing things.
+
+To traverse the terminal symbols, |O2_xxx_PHASE|
+per phases.
+Each specific terminal phrase will
+be accessed and its symbols traversed by ``create order'' to assign their
+appropriate enumerate value.
+Each phase derives from the same
+base class :\fbreak
+\ptindent{0 - |O2_FSM_PHASE| : |T_fsm_phrase|*}
+\ptindent{1 - |O2_PP_PHASE| : |T_parallel_parser_phrase|*}
+\ptindent{2 - |O2_T_ENUM_PHASE| : |T_enum_phrase|*}
+\ptindent{3 - |O2_LRK_PHASE| : |T_lr1_k_phrase|*}
+\ptindent{4 - |O2_RC_PHASE| : |T_rc_phrase|*}
+\ptindent{5 - |O2_ERROR_PHASE| : |T_error_symbols_phrase|*}
+\ptindent{6 - |O2_T_PHASE| : |T_terminals_phrase|*}
+\ptindent{7 - |O2_RULES_PHASE| : |T_rules_phrase|*}
+
+
+Why use a grammar anyway when straight procedure calls would do the trick?
+ Good question as the token stream is not even being consumed!
+ This is my experiment in using grammars as a descriptor of software events ---
+ not as efficient as in procedure calls but the intentions are explicit.
+ Is not the procedure call explicit in intent? Yes it is within a
+ no token consumption context.
+ So, does this grammar approach look like an inefficient
+ double indirection to achieve the same result. Yup. But i also use a sentence
+ approach within the grammar of right-hand-side left-hand-side recognition
+ to calculate the overall total of symbols enumerated. This processing model
+ is a mainstay to pre-post event evaluation. Also, my grammars have automatic
+ flow control tracing facility that comes out-of-the-box.
+
+ Now consider when other events are surrounding a software process. Grammars
+ are explicit finite state automata with ambiguity verification. I could have
+ created behavioural terminals to explicitly express execution by the
+ ``shift operation'' but this is overkill
+ in this situation. For now this grammar has implicit behaviours using epsilon.
+
+ It is interesting to reflect on how epsilon with
+ no terminals can be used as an operation sequencer.
+ Only the ``error'' container is passed to the parser.
+ The i/o token containers are not supplied.
+
+@<enumerate Terminal alphabet@>=
+lrclog << "Enumerate T alphabet" << endl;
+ using namespace NS_enumerate_T_alphabet;
+ Cenumerate_T_alphabet enum_syms_fsm;
+ Parser enum_syms(enum_syms_fsm,0,0,0,Calling_parser.error_queue(),0,0);
+ enum_syms.parse();
+ if(Calling_parser.error_queue()->empty() != true) return Failure;
+
+@*4 Enumerate Rule alphabet.\fbreak
+Enumeration starts after the errors vocabulary.
+The |START_OF_RULES_ENUM| global now registers the rules' enumerate
+ boundary. To speed up the LR1 compatibilty check,
+ this boundary becomes the cut off point in shift / reduce evaluations.
+ |eosubrule| enumerate is excluded in the Terminals shift set of
+ the state as it represents the
+ ``end-of-subrule'' string condition: reduce.\fbreak
+ \fbreak
+ To speed up the pushdown automata, rules are recyclesd for re-use.
+ To do this each rule needs a rule no relative to its create order starting from 1.
+@<enumerate Rule alphabet@>=
+lrclog << "Enumerate Rule alphabet" << endl;
+int Rules_enum = START_OF_RULES_ENUM;
+RULE_DEFS_TBL_ITER_type ri = t->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type rie = t->crt_order()->end();
+int rule_no(0);
+for(;ri != rie;++ri,++Rules_enum){
+ rule_def* rd = *ri;
+ ++rule_no;
+ rd->enum_id(Rules_enum);
+ rd->rule_no(rule_no);
+}
+
+@*3 Driver of |process_rules_phrase|.
+@<accrue source for emit@>+=
+bool
+process_rules_phrase@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_rules& Phrase_to_parse@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ @<enumerate Terminal alphabet@>;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+
+ using namespace NS_rules_phrase;
+ TOKEN_GAGGLE op1;
+ yacco2::INT start_pos = Calling_parser.current_token_pos__;
+ token_container_type* ip1 = Calling_parser.token_supplier();
+ TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+ Crules_phrase rule_ph;
+ Parser p1(rule_ph,ip1,&op1,start_pos,er1);
+ p1.parse();
+ if(er1->empty() == YES){
+ *Cont_pos = p1.current_token_pos__;
+ *Cont_tok = p1.current_token();
+ TOKEN_GAGGLE_ITER i = op1.begin();
+ CAbs_lr1_sym* sym = *i;
+ @=T_rules_phrase* t = (T_rules_phrase*)sym@>;
+ Phrase_to_parse.rules_phrase(t);
+ if(O2_RULES_PHASE != 0){
+ CAbs_lr1_sym* sym = new Err_already_processed_rule_phase;
+ sym->set_rc(Phrase_to_parse);
+ p1.add_token_to_error_queue(*sym);
+ goto error_exit;
+ }
+ O2_RULES_PHASE= t;
+ AST* gt = t->phrase_tree();
+ BUILD_GRAMMAR_TREE(*gt);
+ @<enumerate Rule alphabet@>;
+ return Success;
+ }
+error_exit:
+ lrclog << "error in rules-phrase" << std::endl;
+ return Failure;// error placed in |error_queue| by called thread
+}
+
+@** External routines.
+
+@*2 Yacco2 Parse command line: |YACCO2_PARSE_CMD_LINE|.\fbreak
+The parameters have been extracted from the program
+run environment and placed into Yacco2's holding file which is hardwired
+by |Yacco2_holding_file| definition.
+Now it's time to parse them for kosherness.
+
+Constraints:\fbreak
+ \ptindent{ip1-4: switches used to compile grammar}
+ \ptindent{ip8: To compile grammar name extracted from parameters}
+ \ptindent{ip9: Error token container for generated error token}
+
+Errors:\fbreak
+\ptindent{1) bad filename}
+\ptindent{2) parameters errors}
+
+@<accrue source for emit@>+=
+extern void
+YACCO2_PARSE_CMD_LINE@/
+ (yacco2::CHAR& T_sw,yacco2::CHAR& ERR_sw@/
+ ,yacco2::CHAR& PRT_sw@/
+ ,std::string& Grammar_to_compile@/
+ ,yacco2::TOKEN_GAGGLE& Error_queue)@/
+{
+ using namespace NS_yacco2_err_symbols;
+ using namespace yacco2;
+ tok_can<std::ifstream> Cmd1_tokens(Yacco2_holding_file);
+ if(Cmd1_tokens.file_ok() == NO){
+ yacco2::Delete_tokens(Cmd1_tokens.container());
+ CAbs_lr1_sym* sym = new Err_bad_filename(Yacco2_holding_file);
+ sym->set_external_file_id(1);
+ sym->set_line_no(1);
+ sym->set_pos_in_line(1);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ using namespace NS_o2_lcl_opts;
+ TOKEN_GAGGLE lcl_options_tokens;
+ Co2_lcl_opts opts_fsm;
+ Parser options(opts_fsm,&Cmd1_tokens,&lcl_options_tokens,0,&Error_queue,0,0);
+ options.parse();
+ yacco2::Delete_tokens(Cmd1_tokens.container());
+ if(Error_queue.empty() != YES) return;
+ T_sw = opts_fsm.t_sw_;ERR_sw = opts_fsm.err_sw_;
+ PRT_sw = opts_fsm.prt_sw_;
+ Grammar_to_compile += opts_fsm.file_to_compile_;
+}
+
+@*2 |BUILD_GRAMMAR_TREE| while parsing grammar.\fbreak
+Builds a single level tree having the following forests:
+all the parse phrases: for example |FSM_PHASE| etc.
+With the introduction of |cweb| comments,
+a |cweb| holding queue of comments is kept
+so that the comments can placed into the following phrase.
+Why?
+For example, a series of |cweb| comments
+could act as an introduction before the ``fsm'' phrase
+is detected by the lexical grammar |pass3| by its ``fsm'' keyword.
+So what do u do with the orphaned |cweb| comments recognized
+by |pass3| before the ``fsm'' phrase parse?
+Well call |BUILD_GRAMMAR_TREE| and
+discriminate what is passed to it.
+If it's a |cweb| comment put it into a holding list.
+When |BUILD_GRAMMAR_TREE| is called by a phrase process,
+only then graft it into the passed phrase terminal.
+The only exception to this is |cweb| comments
+after the end of the grammar's phrases have been parsed.
+This comment is then placed as the last node in the grammar tree.
+@<accrue source for emit@>+=
+extern void
+BUILD_GRAMMAR_TREE(yacco2::AST& Item)@/
+{
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+ CAbs_lr1_sym* sym = AST::content(Item);
+ static AST* cur_node(0);
+ static AST* holding_kcweb(0);
+ static AST* end_holding_kcweb(0);
+ static bool rules_phrase_seen(false);
+ if(sym->enumerated_id__ == T_Enum::T_T_cweb_marker_){
+ if(rules_phrase_seen == true){
+ AST::join_sts(*cur_node,Item);
+ cur_node = &Item;
+ return;
+ }
+ if(holding_kcweb == 0){
+ holding_kcweb = &Item;
+ }else{
+ if(end_holding_kcweb == 0){
+ end_holding_kcweb = &Item;
+ AST::join_sts(*holding_kcweb,*end_holding_kcweb);
+ }else{
+ AST::join_sts(*end_holding_kcweb,Item);
+ end_holding_kcweb = &Item;
+ }
+ }
+ return;
+ }
+ if(cur_node == 0) {
+ CAbs_lr1_sym* gp = new T_grammar_phrase();
+ gp->set_line_no_and_pos_in_line(*sym);
+ gp->set_external_file_id(sym->tok_co_ords__.external_file_id__);
+ GRAMMAR_TREE = new AST(*gp);
+ AST::crt_tree_of_1son(*GRAMMAR_TREE,Item);
+ cur_node = &Item;
+ }else{
+ AST::join_sts(*cur_node,Item);
+ cur_node = &Item;
+ }
+ if(sym->enumerated_id__ == T_Enum::T_T_rules_phrase_){
+ rules_phrase_seen = true;
+ }
+ @<handle the |cweb| comments that prefix phrases@>;
+}
+
+@ Handle the |cweb| comments that prefix phrases.\fbreak
+|cweb| comments are chained forests where the first comment
+will get placed into the calling phrase.
+i use the grammar to elegantly handle the the various phrase
+rather than casing them.
+@<handle the |cweb| comments that prefix phrases@>=
+if(holding_kcweb == 0) return;
+ tok_can_ast_functor just_walk_functr;
+ ast_prefix_1forest element_walk(Item,&just_walk_functr);
+ tok_can<AST*> phrase_can(element_walk);
+ using namespace NS_cweb_put_k_into_ph;
+ Ccweb_put_k_into_ph cweb_k_fsm;
+ cweb_k_fsm.initialize(holding_kcweb,&rules_phrase_seen);
+ Parser cweb_k(cweb_k_fsm,&phrase_can,0);
+ cweb_k.parse();
+ holding_kcweb = 0;
+ end_holding_kcweb = 0;
+
+@*2 |LOAD_YACCO2_KEYWORDS_INTO_STBL|.\fbreak
+Basic housekeeping. Originally a grammar recognized keywords
+by being in competition with the Identifier thread.
+Keyword thread only ran if its first set matched the starting character
+making up an identifier and keyword.
+Now it's blended into Identifier using the symbol table lookup that
+returns not only the identifier terminal but all other keyword entries put into
+the symbol table.
+
+For now, only the keywords are cloned off as unique entities whilst all other
+entries are
+passed back from their symbol table with its source co-ordinates being overriden.
+Why cloning of keywords?
+Cuz of their containment properties --- e.g., syntax code directives.
+
+Why the kludge in |load_kw_into_tbl|? The problem
+is a keyword like ``fsm'' cannot be represented as a terminal
+with the same literal name ``fsm''. So i prefixed the terminal's literal name
+as ``$\#$fsm'' allowing the T alphabet parse to go thru.
+Without this change, the symbol table would return the
+terminal's literal name as the keyword ``fsm'' which is a parse error.
+The symbol table contains the real literal name
+whilst the terminal has its symbolic name sake.
+To condense the loading of the table code, i use the terminal's
+literal name and guard against its symbolic name.
+@<accrue source for emit@>+=
+void load_kw_into_tbl(yacco2::CAbs_lr1_sym* Kw){
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ const char* kwkey = Kw->id__;
+ if(*kwkey == '#')++kwkey;// kludge: bypass 1st char eg "$\#$fsm"
+ kw_in_stbl* kw = new kw_in_stbl(Kw);
+ add_sym_to_stbl(report_card,*kwkey,*kw,table_entry::defed,table_entry::keyword);
+ kw->stbl_idx(report_card.pos_);
+}
+
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL()@/
+{
+using namespace yacco2_stbl;
+ load_kw_into_tbl(new T_raw_characters);
+ load_kw_into_tbl(new T_lr1_constant_symbols);
+ load_kw_into_tbl(new T_error_symbols);
+ load_kw_into_tbl(new T_eocode);
+ load_kw_into_tbl(new T_AD);
+ load_kw_into_tbl(new T_AB);
+ load_kw_into_tbl(new T_parallel_la_boundary);
+ load_kw_into_tbl(new T_arbitrator_code);
+ load_kw_into_tbl(new T_parallel_parser);
+ load_kw_into_tbl(new T_parallel_thread_function);
+ load_kw_into_tbl(new T_parallel_control_monitor);
+ load_kw_into_tbl(new T_fsm);
+ load_kw_into_tbl(new T_fsm_id);
+ load_kw_into_tbl(new T_fsm_filename);
+ load_kw_into_tbl(new T_fsm_namespace);
+ load_kw_into_tbl(new T_fsm_class);
+ load_kw_into_tbl(new T_fsm_version);
+ load_kw_into_tbl(new T_fsm_date);
+ load_kw_into_tbl(new T_fsm_debug);
+ load_kw_into_tbl(new T_fsm_comments);
+ load_kw_into_tbl(new T_terminals);
+ load_kw_into_tbl(new T_enumeration);
+ load_kw_into_tbl(new T_file_name);
+ load_kw_into_tbl(new T_name_space);
+ load_kw_into_tbl(new T_sym_class);
+ load_kw_into_tbl(new T_rules);
+ load_kw_into_tbl(new T_lhs);
+ load_kw_into_tbl(new T_user_declaration);
+ load_kw_into_tbl(new T_user_prefix_declaration);
+ load_kw_into_tbl(new T_user_suffix_declaration);
+ load_kw_into_tbl(new T_constructor);
+ load_kw_into_tbl(new T_destructor);
+ load_kw_into_tbl(new T_op);
+ load_kw_into_tbl(new T_failed);
+ load_kw_into_tbl(new T_user_implementation);
+ load_kw_into_tbl(new T_user_imp_tbl);
+ load_kw_into_tbl(new T_user_imp_sym);
+ load_kw_into_tbl(new T_constant_defs);
+ load_kw_into_tbl(new T_terminals_refs);
+ load_kw_into_tbl(new T_terminals_sufx);
+ load_kw_into_tbl(new T_lrk_sufx);
+ load_kw_into_tbl(new T_NULL);
+}
+
+@*2 Beauty and the tree: |PRINT_RULES_TREE_STRUCTURE|.\fbreak
+Print out the tree's contents.
+It is a function that works with \Yacco2's |prt_ast_functor|
+and a tree walker like |ast_prefix|.
+See \O2 documentation for an example of use
+and \Yacco2 documentation on functors and tree traversals --- good stuff.
+@<accrue source for emit@>+=
+extern void PRINT_RULES_TREE_STRUCTURE(AST* Node)@/
+{
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ if(Node == 0) return;
+ CAbs_lr1_sym* sym = AST::content(*Node);
+ if(sym == 0) {
+ yacco2::lrclog << " SYMBOL IN AST CONTENT NULL"
+ << " Node*: " << Node << endl;
+ return;
+ }
+ yacco2::lrclog << sym->id__ << ' ';
+
+ switch (sym->enumerated_id__){
+ case T_Enum::T_refered_T_:{@/
+ @=refered_T* sym1 = (refered_T*)sym;@>@/
+ T_in_stbl* T = sym1->t_in_stbl();
+ yacco2::lrclog << T->t_def()->t_name()->c_str();
+ break;
+ }
+ case T_Enum::T_refered_rule_:{@/
+ @=refered_rule* sym1 = (refered_rule*)sym;@>@/
+ rule_in_stbl* R = sym1->Rule_in_stbl();
+ yacco2::lrclog << R->r_def()->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_T_identifier_:{@/
+ @=T_identifier* sym1 = (T_identifier*)sym;@>@/
+ yacco2::lrclog << sym1->identifier()->c_str();
+ break;
+ }
+ case T_Enum::T_rule_def_:{@/
+ @=rule_def* sym1 = (rule_def*)sym;@>@/
+ yacco2::lrclog << sym1->rule_name()->c_str();
+ yacco2::lrclog << " epsilon: ";
+ if(sym1->epsilon() == true){
+ yacco2::lrclog << " Y " ;
+ }else{
+ yacco2::lrclog << " N " ;
+ }
+ break;
+ }
+ case T_Enum::T_T_terminal_def_:{@/
+ @=T_terminal_def* sym1 = (T_terminal_def*)sym;@>@/
+ yacco2::lrclog << sym1->t_name()->c_str();
+ break;
+ }
+ case T_Enum::T_T_subrule_def_:{@/
+ @=T_subrule_def* sym1 = (T_subrule_def*)sym;@>@/
+ yacco2::lrclog << " epsilon: ";
+ if(sym1->epsilon() == true){
+ yacco2::lrclog << " Y " ;
+ }else{
+ yacco2::lrclog << " N " ;
+ }
+ break;
+ }
+ case T_Enum::T_T_eosubrule_:{@/
+ break;
+ }
+ case T_Enum::T_T_NULL_:{@/
+ break;
+ }
+ case T_Enum::T_T_2colon_:{@/
+ break;
+ }
+
+ default:{
+ yacco2::lrclog << sym->id__;
+ }
+ }
+
+ yacco2::lrclog << " file# " << sym->tok_co_ords__.external_file_id__
+ << ':' << sym->tok_co_ords__.rc_pos__ << ':';
+ yacco2::lrclog << " line# " << sym->tok_co_ords__.line_no__
+ << ':' << sym->tok_co_ords__.pos_in_line__ << ':';
+ yacco2::lrclog << " sym*: " << sym << ' ';
+ yacco2::lrclog << endl;
+}
+
+@*2 |WRT_CWEB_MARKER|.\fbreak
+Just write out to a cweave file the cweb comments.
+
+@<accrue source for emit@>+=
+extern void WRT_CWEB_MARKER(std::ofstream* Wfile,yacco2::AST* Cweb_marker){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+ INT_SET_type filter;
+ filter.insert(T_Enum::T_T_cweb_comment_);
+ tok_can_ast_functor just_walk_functr;
+ ast_prefix_1forest rule_walk(*Cweb_marker,&just_walk_functr,&filter,ACCEPT_FILTER);
+ tok_can<AST*> comments_can(rule_walk);
+ for(int x(0);comments_can[x] != yacco2::PTR_LR1_eog__;++x){
+ T_cweb_comment* k = (T_cweb_comment*)comments_can[x];
+ (*Wfile) << k->comment_data()->c_str() << endl;
+ }
+}
+
+@*2 ?Beauty and the tree: |PRINT_GRAMMAR_TREE|.\fbreak
+Print out the grammar's contents.
+This includes the |cweb| contents.
+It is a function that works with \Yacco2's |prt_ast_functor|
+and a tree walker like |ast_prefix|.
+See \O2 documentation for an example of use
+and \Yacco2 documentation on functors and tree traversals --- good stuff.
+@<accrue source for emit@>+=
+extern void PRINT_GRAMMAR_TREE(AST* Node)@/
+{
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ if(Node == 0) return;
+ CAbs_lr1_sym* sym = AST::content(*Node);
+ if(sym == 0) {
+ yacco2::lrclog << " SYMBOL IN AST CONTENT NULL"
+ << " Node*: " << Node
+ << " lt*: " << Node->lt_ << " rt*: " << Node->rt_
+ << std::endl;
+ return;
+ }
+ yacco2::lrclog << sym->id__ << ' ';
+
+ switch (sym->enumerated_id__){
+ case T_Enum::T_T_cweb_comment_:{@/
+ @=T_cweb_comment* sym1 = (T_cweb_comment*)sym;@>@/
+ yacco2::lrclog << sym1->comment_data()->c_str();
+ break;
+ }
+ }
+
+ yacco2::lrclog << " file# " << sym->tok_co_ords__.external_file_id__
+ << ':' << sym->tok_co_ords__.rc_pos__ << ':';
+ yacco2::lrclog << " line# " << sym->tok_co_ords__.line_no__
+ << ':' << sym->tok_co_ords__.pos_in_line__ << ':';
+ yacco2::lrclog << " sym*: " << sym << ' ';
+ yacco2::lrclog << " Node*: " << Node
+ << " lt*: " << Node->lt_ << " rt*: " << Node->rt_
+ << std::endl;
+}
+
+@*2 Process Nested include files: |PROCESS_INCLUDE_FILE|.\fbreak
+This routine gets called from the |pass3| grammar
+when Yacco2's include file expression has been parsed.
+It uses the hardwired definition |Nested_file_cnt_limit|.
+The one important point is how it appends
+the newly processed include tokens to the calling parser's
+producer container. |pass3| has a global variable to ensure that
+only 2 |PTR_LR1_eog__| tokens are emitted to the producer container
+from the first |pass3| invocation. All other recursively invoked
+|pass3| guard against these extra end-of-grammar tokens when they finish
+parsing.
+
+The global |yacco2::FILE_CNT__| is incremented within the
+|tok_can<std::ifstream>| container.
+This global is just a file counter of files opened by the template container.
+To cope with recursion, there is the global |yacco2::STK_FILE_NOS__|.
+This ``call stack'' global maintains the currently opened files
+ so that tokens generated are associated with the top file.
+Error reporting then GPSs to the source
+line and character position within this tagged file
+when an error token is created using this source file coordinates
+taken from the faulty T token.
+It's depth is tested for file recursion overrun.
+
+Constraints:\fbreak
+ \ptindent{ip1: Calling parser environment}
+ \ptindent{ip2: include token to process}
+ \ptindent{ip3: Token container to append to}
+Note: The filename to process has already had its existence check done
+by the |T_file_inclusion| token.
+
+Why the passing of the |Calling_parser|? There are 2 reasons all
+related to error processing. Firstly, the error queue is needed and
+secondly to abort the |Calling_parser|. Though the returned
+result also indicates success or failure, I thought that
+it was better to indicate by action rather than intent
+what should be done. This is a little draconian but...
+
+Error processing:\fbreak
+ \ptindent{op1: nested file limit is exceeded}
+ \ptindent{op2: bad file name}
+
+Note: if an error occurs, the calling parser is aborted.
+No error correction is done.
+It stops the processing immediately so that the error can be reported back to the grammar writer.
+
+@<accrue source for emit@>+=
+extern
+bool
+PROCESS_INCLUDE_FILE@/
+ (yacco2::Parser& Calling_parser@/
+ ,NS_yacco2_terminals::T_file_inclusion& File_include@/
+ ,yacco2::token_container_type& T2)@/
+{
+ using namespace NS_yacco2_terminals;
+ using namespace NS_yacco2_err_symbols;
+ using namespace yacco2;
+ std::string* ps_fn = File_include.file_name()->c_string();
+ lrclog << "Pre-process file: " << ps_fn->c_str() << std::endl;
+ if(yacco2::STK_FILE_NOS__.size() >= Nested_file_cnt_limit){
+ CAbs_lr1_sym* s = new Err_nested_files_exceeded(Nested_file_cnt_limit,*ps_fn);
+ s->set_line_no_and_pos_in_line(File_include);
+ s->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+ Calling_parser.add_token_to_error_queue(*s);
+ Calling_parser.abort_parse__;
+ return Failure;
+ }
+
+ tok_can<std::ifstream> p1_tokens(ps_fn->c_str());
+ if(p1_tokens.file_ok() == NO){
+ yacco2::Delete_tokens(p1_tokens.container());
+ CAbs_lr1_sym* sym = new NS_yacco2_err_symbols::Err_bad_filename(*ps_fn);
+ sym->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+ sym->set_line_no_and_pos_in_line(File_include);
+ Calling_parser.add_token_to_error_queue(*sym);
+ Calling_parser.abort_parse__;
+ return Failure;
+ }
+ using namespace NS_pass3;
+ Cpass3 p3_fsm;
+ Parser pass3(p3_fsm,&p1_tokens,&T2,0,Calling_parser.error_queue(),Calling_parser.recycle_bin__);
+ pass3.parse();
+ yacco2::Delete_tokens(p1_tokens.container());
+
+ if(pass3.error_queue()->empty() != YES){
+ Calling_parser.abort_parse__;
+ return Failure;
+ }
+
+ yacco2::STK_FILE_NOS__.pop_back();
+ return Success;
+}
+
+@*2 Process syntax code: |PROCESS_KEYWORD_FOR_SYNTAX_CODE|.\fbreak
+This is the dispatch routine called
+from the |pass3| grammar per phase to parse.
+What you will see within the |pass3.lex|
+grammar is a subrule with the appropriate keyword.
+Reality is the grammar thread |identifier| returns a
+carrier terminal called |keyword|.
+Inside it is the individual keyword recognized that must be extracted
+by the syntax directed code.
+This was done to lower the amount of subrules within |pass3|.
+This is the partial truth; evolution in the wild card facility also
+lowers the explicit programming of subrules.
+The extracted keyword is passed to this routine for processing.
+If a success is returned, the extracted keyword is put into
+the output container
+while an error stops the parse with the error placed
+into the `error queue'.
+The carrier terminal |keyword| has the `AD' auto
+delete attribute defined
+so |keyword| is deleted when it is popped from the parse stack.
+
+This is a simple way to deal with individual components.
+Within each of the to-be-parsed phases, their
+syntax is gramatically verified.
+As it comes out of a lexical grammar, down the road, the
+syntactic part must
+ check for the proper sequencing of these phases.
+For example, the production component cannot come
+before the LRk phase etc.
+Due to a fixed ordering of T vocabulary components enumeration,
+T's components must be
+in lrk,rc,user, and error terminals parse order as
+i add their forests to the grammar tree while they are being build!
+Out of order will violate the T vocabulary's enumeration
+as i walk the tree as created when enumerating.
+@<accrue source for emit@>+=
+extern
+bool
+PROCESS_KEYWORD_FOR_SYNTAX_CODE@/
+ (yacco2::Parser& Parser@/
+ ,yacco2::CAbs_lr1_sym* Keyword@/
+ ,yacco2::CAbs_lr1_sym** Cont_tok@/
+ ,yacco2::INT* Cont_pos)@/
+{
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+ switch (Keyword->enumerated_id__){
+ case T_Enum::T_T_fsm_ :{
+ @=T_fsm* fsm = (T_fsm*)Keyword@>;
+ return process_fsm_phrase(Parser,*fsm,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_parallel_parser_ :{
+ @=T_parallel_parser* pparser = (T_parallel_parser*)Keyword@>;
+ return process_parallel_parser_phrase(Parser,*pparser,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_enumeration_ :{
+ @=T_enumeration* enumer = (T_enumeration*)Keyword@>;
+ return process_T_enum_phrase(Parser,*enumer,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_error_symbols_ :{
+ @=T_error_symbols* err = (T_error_symbols*)Keyword@>;
+ return process_error_symbols_phrase(Parser,*err,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_raw_characters_ :{
+ @=T_raw_characters* rc = (T_raw_characters*)Keyword@>;
+ return process_rc_phrase(Parser,*rc,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_lr1_constant_symbols_ :{
+ @=T_lr1_constant_symbols* lr = (T_lr1_constant_symbols*)Keyword@>;
+ return process_lr1_k_phrase(Parser,*lr,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_terminals_ :{
+ @=T_terminals* term = (T_terminals*)Keyword@>;
+ return process_terminals_phrase(Parser,*term,Cont_tok,Cont_pos);
+ }
+ case T_Enum::T_T_rules_ :{
+ @=T_rules* rule = (T_rules*)Keyword@>;
+ return process_rules_phrase(Parser,*rule,Cont_tok,Cont_pos);
+ }
+ default: {
+CAbs_lr1_sym* sym = new Err_not_kw_defining_grammar_construct;
+sym->set_rc(*Keyword);
+Parser.add_token_to_error_queue(*sym);
+ return Failure;
+ }
+ }
+ return Success;
+}
+
+@** Mpost and Cweb Routines.\fbreak
+These external routines simplify the |cweave| code generated
+for the |mpost_output| grammar.
+As i do not parse the syntax code into appropriate
+structures but build up strings of characters,
+at least i can beautify the emitted |cweave| grammar code by
+use of external rountines that
+are under |cweb|'s generation.
+
+@*2 |MPOST_CWEB_LOAD_XLATE_CHRS|.\fbreak
+These are the raw characters whose values are
+given a literal title. Why?
+Some raw characters will cause |cweave| to cough.
+So i'm attempting to avoid this clearing of the throat
+by character translation
+as I'm not wanting to parse formally the syntax code
+and to emit yet another properly formed language.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_LOAD_XLATE_CHRS@/
+(NS_mpost_output::Cmpost_output* Fsm)@/
+{
+ Fsm->xlated_names_[T_Enum::T_raw_exclam_] = "exclamation mark";
+ Fsm->xlated_names_[T_Enum::T_raw_dbl_quote_] = "dbl quote";
+ Fsm->xlated_names_[T_Enum::T_raw_no_sign_] = "no sign";
+ Fsm->xlated_names_[T_Enum::T_raw_dollar_sign_] = "dollar sign";
+ Fsm->xlated_names_[T_Enum::T_raw_percent_] = "percent";
+ Fsm->xlated_names_[T_Enum::T_raw_ampersign_] = "ampersand";
+ Fsm->xlated_names_[T_Enum::T_raw_right_quote_] = "rt quote";
+ Fsm->xlated_names_[T_Enum::T_raw_open_bracket_] = "open bracket";
+ Fsm->xlated_names_[T_Enum::T_raw_close_bracket_] = "close bracket";
+ Fsm->xlated_names_[T_Enum::T_raw_asteric_] = "asterisk";
+ Fsm->xlated_names_[T_Enum::T_raw_plus_] = "plus";
+ Fsm->xlated_names_[T_Enum::T_raw_comma_] = "comma";
+ Fsm->xlated_names_[T_Enum::T_raw_minus_] = "minus";
+ Fsm->xlated_names_[T_Enum::T_raw_period_] = "period";
+ Fsm->xlated_names_[T_Enum::T_raw_slash_] = "slash";
+ Fsm->xlated_names_[T_Enum::T_raw_colon_] = "colon";
+ Fsm->xlated_names_[T_Enum::T_raw_semi_colon_] = "semi colon";
+ Fsm->xlated_names_[T_Enum::T_raw_less_than_] = "less than";
+ Fsm->xlated_names_[T_Enum::T_raw_eq_] = "eq";
+ Fsm->xlated_names_[T_Enum::T_raw_gt_than_] = "gt than";
+ Fsm->xlated_names_[T_Enum::T_raw_question_mark_] = "question mark";
+ Fsm->xlated_names_[T_Enum::T_raw_at_sign_] = "at sign";
+ Fsm->xlated_names_[T_Enum::T_raw_open_sq_bracket_] = "open sq bracket";
+ Fsm->xlated_names_[T_Enum::T_raw_back_slash_] = "back slash";
+ Fsm->xlated_names_[T_Enum::T_raw_close_sq_bracket_] = "close sq bracket";
+ Fsm->xlated_names_[T_Enum::T_raw_up_arrow_] = "up arrow";
+ Fsm->xlated_names_[T_Enum::T_raw_under_score_] = "under score";
+ Fsm->xlated_names_[T_Enum::T_raw_left_quote_] = "left quote";
+ Fsm->xlated_names_[T_Enum::T_raw_open_brace_] = "open brace";
+ Fsm->xlated_names_[T_Enum::T_raw_vertical_line_] = "vertical line";
+ Fsm->xlated_names_[T_Enum::T_raw_close_brace_] = "close brace";
+ Fsm->xlated_names_[T_Enum::T_raw_tilde_] = "tilde";
+ Fsm->xlated_names_[T_Enum::T_raw_del_] = "del";
+ Fsm->xlated_names_[T_Enum::T_LR1_invisible_shift_operator_] = "\\invisibleshift";
+ Fsm->xlated_names_[T_Enum::T_LR1_all_shift_operator_] = "\\allshift";
+ Fsm->xlated_names_[T_Enum::T_LR1_reduce_operator_] = "\\reduceoperator";
+ Fsm->xlated_names_[T_Enum::T_LR1_fset_transience_operator_] = "\\transienceoperator";
+ Fsm->xlated_names_[T_Enum::T_LR1_questionable_shift_operator_] = "\\questionableoperator";
+}
+
+@*2 |MPOST_CWEB_EMIT_PREFIX_CODE|.\fbreak
+Output prelude statements for |cweave| and |mpost| files.
+|cweave| contains basic packages and macros whilest
+|mpost| contains its grammar drawing macros and basic
+array of variables.
+@*3 Setup |mpost| macros and variable arrays.
+@<setup |mpost| macros and variable arrays@>=
+
+ KCHARP mp_prefix_file = "% file: ";
+ Fsm->omp_file_ << mp_prefix_file;
+ KCHARP mp_prefix_file_value =
+ "%s - grammar railroad diagrams for mpost program\n";
+ int x = sprintf(Fsm->big_buf_,mp_prefix_file_value,Fsm->mp_filename_.c_str());
+ Fsm->omp_file_.write(Fsm->big_buf_,x);
+ Fsm->omp_file_ << endl;
+
+ KCHARP mp_prefix_date = "% date: ";
+ Fsm->omp_file_ << mp_prefix_date;
+ KCHARP mp_prefix_date_value =@/
+ "%s\n"@/
+ "input \"/usr/local/yacco2/diagrams/o2diag.mp\"\n"@/
+ "numeric no_of_rules,Box_solid,Box_dotted,Circle_solid,Circle_dotted;\n"@/
+ "Box_solid:=1;Box_dotted:=2;Circle_solid:=3;Circle_dotted:=4;\n"@/
+ "string rule_names[].literal;\n"@/
+ "string rule_names[].vname;\n"@/
+ "numeric rule_s_no_rhs[];\n"@/
+ "string rhs_elems[][][].literal;\n"@/
+ "string rhs_elems[][][].vname;\n"@/
+ "numeric rhs_elems[][][].Drw_how;\n"@/
+ "numeric rule_s_subrule_no_elems[][];\n";
+ x = sprintf(Fsm->big_buf_,mp_prefix_date_value,Fsm->gened_date_time_.c_str());
+ Fsm->omp_file_.write(Fsm->big_buf_,x);
+
+
+@*3 Setup |cweave| macros and odds and ends.
+@<setup |cweave| macros and odds and ends@>=
+ KCHARP w_prefix_file = "% file: ";
+ Fsm->ow_file_ << w_prefix_file;
+ KCHARP w_prefix_filename_value = "%s - cweb grammar\n";
+ x = sprintf(Fsm->big_buf_,w_prefix_filename_value,Fsm->w_filename_.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+ KCHARP w_prefix_date = "%Date: ";
+ Fsm->ow_file_ << w_prefix_date;
+ KCHARP w_prefix_date_value = "%s\n";
+ x = sprintf(Fsm->big_buf_,w_prefix_date_value,Fsm->gened_date_time_.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+
+ KCHARP macros =
+ "\\input%s \"supp-pdf\"\n"@/
+ "\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n";
+ x = sprintf(Fsm->big_buf_,macros," ");
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+@*2 Driver of |MPOST_CWEB_EMIT_PREFIX_CODE|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_EMIT_PREFIX_CODE@/
+(NS_mpost_output::Cmpost_output* Fsm)@/
+{
+ @<setup |mpost| macros and variable arrays@>;
+ @<setup |cweave| macros and odds and ends@>;
+}
+
+
+@*2 |MPOST_CWEB_gen_dimension_name|.\fbreak
+Generates the string literal for a dimension ---
+rule no, subrule no, or element no.
+It's out string is used to build up the
+|mpost|'s variable object literal name.
+The base number is 27 but as the elements are 1 and greater
+the outputed string is ${26^2}$ of 2 digits.
+So rule 27, subrule 3, element 5 produces 3
+strings of ``ba'', ``ac'', and ``ae''.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_dimension_name@/
+ (Cmpost_output* Fsm,std::string& Mp_obj_name,int Dimension){@/
+ int R,Q;
+ R = Dimension%27;
+ Q = Dimension/27;
+ ++Q;
+ Mp_obj_name += Fsm->mp_dimension_[Q];
+ Mp_obj_name += Fsm->mp_dimension_[R];
+}
+
+@*2 |MPOST_CWEB_calc_mp_obj_name|.\fbreak
+Build up the 3 dimension name for |mpost|'s object name.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_calc_mp_obj_name@/
+ (Cmpost_output* Fsm,std::string& Mp_obj_name,int Elem_no){@/
+ Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->rule_no_);
+ Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->subrule_no_);
+ Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Elem_no);
+}
+
+@*2 |MPOST_CWEB_wrt_mp_rhs_elem|.\fbreak
+Output |mpost|'s statements for a subrule's element.
+Due to the |convertMPtoPDF| marco
+having problems with embedded space within literal names,
+i do a substitution on spaces for ``.'' to keep
+the \TeX flowing.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_mp_rhs_elem@/
+ (Cmpost_output* Fsm,std::string& Elem_name,std::string& Drw_how){@/
+ std::string mp_xlate_name;
+ prescan_mpname_for_cweb(Elem_name,mp_xlate_name);
+ std::string mp_obj_name;
+ KCHARP mp_subrule_elems_literal = "rhs_elems[%i][%i][%i].literal := \"%s\";";
+ int x = sprintf(Fsm->big_buf_,mp_subrule_elems_literal
+ ,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+ ,mp_xlate_name.c_str());
+ Fsm->omp_file_.write(Fsm->big_buf_,x);
+ Fsm->omp_file_<< endl;
+ KCHARP mp_subrule_elems_RorT = "rhs_elems[%i][%i][%i].Drw_how := %s;";
+ x = sprintf(Fsm->big_buf_,mp_subrule_elems_RorT,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+ ,Drw_how.c_str());
+ Fsm->omp_file_.write(Fsm->big_buf_,x);
+ Fsm->omp_file_<< endl;
+ KCHARP mp_subrule_elems_vname = "rhs_elems[%i][%i][%i].vname := \"%s\";";
+ Fsm->MPOST_CWEB_calc_mp_obj_name(Fsm,mp_obj_name,Fsm->elem_no_);
+ x = sprintf(Fsm->big_buf_,mp_subrule_elems_vname,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+ ,mp_obj_name.c_str());
+ Fsm->omp_file_.write(Fsm->big_buf_,x);
+ Fsm->omp_file_<< endl;
+}
+
+@*2 |MPOST_CWEB_gen_sr_elem_xrefs|.\fbreak
+To aid the grammar writer, all vocubulary symbols are cross referencesd
+using |cweave|'s directive.
+Originally each subrule was redrawn having the cross reference
+specific to the subrule. As there was too much
+spam being generated for aireous subrules with no syntax directed code,
+i decided to redraw subrules only having code.
+Consequently the cross references go against the rule definition rather than
+its specific subrules.\fbreak
+\fbreak
+|cweave| doesn't xref the 1 characters so i bypass them as i do not want to change
+the characteristics of it... for now ...
+@*4 Establish tree container with appropriate element filters.
+@<establish tree container with appropriate element filters@>=
+ using namespace yacco2;
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ KCHARP xref = "@@.%s@@>\n";
+ INT_SET_type filter;
+ filter.insert(T_Enum::T_refered_T_);
+ filter.insert(T_Enum::T_refered_rule_);
+ filter.insert(T_Enum::T_T_eosubrule_);
+ filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+ filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+ filter.insert(T_Enum::T_LR1_parallel_operator_);
+ filter.insert(T_Enum::T_LR1_fset_transience_operator_);
+
+ tok_can_ast_functor just_walk_functr;
+ ast_prefix_1forest element_walk(*Subrule_tree,&just_walk_functr,&filter,ACCEPT_FILTER);
+ tok_can<AST*> elements_can(element_walk);
+
+
+@*4 Walk the container and produce the elements' cross references.
+@<walk the container and produce the elements' cross references@>=
+ for(int x(0);elements_can[x] != yacco2::PTR_LR1_eog__;++x){
+ ++elem_cnt;
+ CAbs_lr1_sym* sym = elements_can[x];
+ switch (sym->enumerated_id__){
+ case T_Enum::T_LR1_parallel_operator_: {
+ int x = sprintf(Fsm->big_buf_,xref,"\\paralleloperator");
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ break;
+ }
+ case T_Enum::T_LR1_fset_transience_operator_: {
+ int x = sprintf(Fsm->big_buf_,xref,"\\transienceoperator");
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ break;
+ }
+ case T_Enum::T_refered_T_: {
+ @=refered_T* rt = (refered_T*)sym@>;
+ Fsm->MPOST_CWEB_xref_refered_T(Fsm,rt);
+ break;
+ }
+ case T_Enum::T_refered_rule_: {
+ @=refered_rule* rr = (refered_rule*)sym@>;
+ Fsm->MPOST_CWEB_xref_refered_rule(Fsm,rr);
+ break;
+ }
+ case T_Enum::T_T_eosubrule_: {
+ if(elem_cnt == 1){
+ int x = sprintf(Fsm->big_buf_,xref,"\\emptyrule");
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_: {
+ @=T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)sym@>;
+ if(id->ns() !=0){// \\TRAshift call has no namespace :: qualifiers
+ th_name += id->ns()->identifier()->c_str();
+ th_name+= "::";
+ }
+ th_name += id->called_thread_name()->identifier()->c_str();
+ string name_with_bkslash;
+ int len = th_name.length();
+ for(int x=0;x<len;++x){
+ char c = th_name[x];
+ if(c == '_'){
+ name_with_bkslash += '\\';
+ }
+ name_with_bkslash += c;
+ }
+ int x = sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_: {
+ int x = sprintf(Fsm->big_buf_,xref,"NULL");
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ break;
+ }
+ }
+ }
+
+@*3 Driver of |MPOST_CWEB_gen_sr_elem_xrefs|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_sr_elem_xrefs@/
+ (Cmpost_output* Fsm,AST* Subrule_tree){@/
+ @<establish tree container with appropriate element filters@>;
+ int elem_cnt(0);
+ string th_name;
+@<walk the container and produce the elements' cross references@>;
+}
+
+@*2 |MPOST_CWEB_xlated_symbol|.\fbreak
+@<accrue source for emit@>+=
+extern int
+MPOST_CWEB_xlated_symbol(AST* Sym_t,char* Xlated_sym){@/
+ CAbs_lr1_sym* Sym = AST::content(*Sym_t);
+ int Enum = Sym->enumerated_id();
+ Xlated_sym[0] = (char)0;
+ const char* xsym = "%s";
+ switch (Enum){
+ case T_Enum::T_LR1_parallel_operator_: {
+ sprintf(Xlated_sym,xsym,"\\paralleloperator");
+ return 1;
+ }
+ case T_Enum::T_LR1_fset_transience_operator_: {
+ sprintf(Xlated_sym,xsym,"\\transienceoperator");
+ return 1;
+ }
+ case T_Enum::T_refered_T_: {
+ @=refered_T* rt = (refered_T*)Sym@>;
+ XLATE_SYMBOLS_FOR_cweave(rt->its_t_def()->t_name()->c_str(),Xlated_sym);
+ return rt->element_pos();
+ }
+ case T_Enum::T_refered_rule_: {
+ @=refered_rule* rr = (refered_rule*)Sym@>;
+ XLATE_SYMBOLS_FOR_cweave(rr->its_rule_def()->rule_name()->c_str(),Xlated_sym);
+ return rr->element_pos();
+ }
+ case T_Enum::T_T_eosubrule_: {// if parallel expr then use eosurule of thread
+ @=T_eosubrule* eos = (T_eosubrule*)Sym@>;
+ AST* prev_t = Sym_t->pr_;
+ if(eos->element_pos() == 1){
+ sprintf(Xlated_sym,xsym,"\\emptyrule");
+ return eos->element_pos();
+ }else{
+ sprintf(Xlated_sym,xsym,"");
+ }
+ CAbs_lr1_sym* sym = AST::content(*prev_t);
+ switch (sym->enumerated_id()){
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ return eos->element_pos() -1;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ return eos->element_pos() -1;
+ }
+ default:{
+ return eos->element_pos();
+ }
+ }
+ }
+ case T_Enum::T_T_called_thread_eosubrule_: {
+ @=T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)Sym@>;
+ string th_name;
+ if(id->ns() !=0){// \\TRAshift call has no namespace :: qualifiers
+ th_name += id->ns()->identifier()->c_str();
+ th_name+= "::";
+ }
+ th_name += id->called_thread_name()->identifier()->c_str();
+ XLATE_SYMBOLS_FOR_cweave(th_name.c_str(),Xlated_sym);
+ return id->element_pos();
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_: {
+ @=T_null_call_thread_eosubrule* id = (T_null_call_thread_eosubrule*)Sym@>;
+ sprintf(Xlated_sym,xsym,"NULL");
+ return id->element_pos();
+ }
+ }
+return 0;// fake it: cuz apple's latest compiler: symantic error-never reached!
+}
+@*2 |MPOST_CWEB_crt_rhs_sym_str| - follow set contributing symbols.\fbreak
+Generate the state's subrule symbols in for cweave to digest.
+If the first symbol in the string is a rule, this rule's
+follow set string gets highlighted by underlining
+the symbols that contribute to it.
+It will transient walk though these follow symbols
+if they are epsilonabe rules.
+This underline string of symbols will use the ``...''' symbol
+to indicate more symbols contribute but due
+to the report's space constrains are not reported.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_crt_rhs_sym_str@/
+(state_element* se,std::string* Xlated_str){
+ char a[BUFFER_SIZE];
+ char cur_sym[Max_cweb_item_size];
+ char nxtsym_1[Max_cweb_item_size];
+ char nxtsym_2[Max_cweb_item_size];
+ KCHARP thread_expr_string_template =
+ "{%s} {%s} {%s}";// 3 symbols: current and 2 la
+ KCHARP underline_symbol = "{$\\underline{%s}$} \n";
+ KCHARP underline_symbol_wepsilon = "{$\\underline{%s^{\\emptyrule}}$} \n";
+ KCHARP not_underline_symbol = "{%s} \n";
+ state_element* nxt1_se = 0;
+ state_element* nxt2_se = 0;
+ state_element* nxt3_se = 0;
+ int pp = MPOST_CWEB_xlated_symbol(se->sr_element_,cur_sym);
+
+ if(// chained or thread call expression
+ (se->its_enum_id_ == T_Enum::T_LR1_parallel_operator_)
+ ||
+ (se->its_enum_id_ == T_Enum::T_LR1_fset_transience_operator_)
+ ){
+ nxt1_se = se->next_state_element_;
+ AST* nxt2_se= se->sr_element_->rt_->rt_;// thread eos for called thd nm
+ pp = MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+ pp = MPOST_CWEB_xlated_symbol(nxt2_se,nxtsym_2);
+ sprintf(a,thread_expr_string_template,cur_sym,nxtsym_1,nxtsym_2);
+ (*Xlated_str) += a;
+ return;
+ }
+ sprintf(a,not_underline_symbol,cur_sym);
+ (*Xlated_str) += a;
+ if(se->sr_def_element_->enumerated_id__ != T_Enum::T_rule_def_){ // T
+ return;
+ }
+
+ nxt1_se = se->next_state_element_;
+ if(nxt1_se==0) return;
+ if(nxt1_se->its_enum_id_ == T_Enum::T_T_eosubrule_) return;
+ pp = MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+ if(nxt1_se->sr_def_element_->enumerated_id__ != T_Enum::T_rule_def_){
+ sprintf(a,underline_symbol,nxtsym_1);
+ }else{
+ rule_def* rd = (rule_def*)nxt1_se->sr_def_element_;
+ if(rd->epsilon() == YES){
+ sprintf(a,underline_symbol_wepsilon,nxtsym_1);
+ nxt2_se = nxt1_se->next_state_element_;
+ }else{
+ sprintf(a,underline_symbol,nxtsym_1);
+ nxt2_se = 0;
+ }
+ }
+ (*Xlated_str) += a;
+
+ if(nxt2_se != 0){// 2nd follow set sym due to epsilon rule
+ if(nxt2_se->its_enum_id_ == T_Enum::T_T_eosubrule_) return;
+ pp = MPOST_CWEB_xlated_symbol(nxt2_se->sr_element_,nxtsym_2);
+ if(nxt2_se->sr_def_element_->enumerated_id__ != T_Enum::T_rule_def_){ // T
+ sprintf(a,underline_symbol,nxtsym_2);
+ }else{
+ rule_def* rd = (rule_def*)nxt2_se->sr_def_element_;
+ if(rd->epsilon() == YES){
+ sprintf(a,underline_symbol_wepsilon,nxtsym_2);
+ nxt3_se = nxt1_se->next_state_element_;
+ if(nxt3_se->its_enum_id_ == T_Enum::T_T_eosubrule_){
+ nxt3_se = 0;
+ }
+ }else{
+ sprintf(a,underline_symbol,nxtsym_2);
+ nxt3_se = 0;
+ }
+ }
+ (*Xlated_str) += a;
+ }
+ if(nxt3_se != 0){// ... all others due to 2nd epsilon follow symbol rule
+ sprintf(a,not_underline_symbol,"...");
+ (*Xlated_str) += a;
+ }
+}
+
+@*2 |MPOST_CWEB_woutput_sr_sdcode|.\fbreak
+|cweave|'s statements for a subrule having syntax directed code.
+Note: the use of a grammar to generate it.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_woutput_sr_sdcode@/
+(Cmpost_output* Fsm,T_subrule_def* Subrule_def){@/
+ SDC_MAP_type* sr_dirs = Subrule_def->subrule_directives();
+ SDC_MAP_ITER_type i = sr_dirs->begin();
+ SDC_MAP_ITER_type ie = sr_dirs->end();
+ TOKEN_GAGGLE dirs_tokens;
+ for(;i!=ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ dirs_tokens.push_back(*sym);
+ }
+
+ using namespace NS_cweave_sdc;
+ Ccweave_sdc sdc_fsm;
+ sdc_fsm.initialize(&Fsm->ow_file_,Fsm->subrule_def_,Fsm->subrule_no_);
+ Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+ sdc_emit.parse();
+}
+
+@*2 |MPOST_CWEB_wrt_fsm|.\fbreak
+|cweave|'s |fsm| part of the grammar.
+Not much but there's that grammar use to generate the output.
+@*4 Output |fsm|'s class section.
+@<output |fsm|'s class section@>=
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+ (Fsm_phrase->fsm_class_phrase()->identifier()->identifier()->c_str()
+ ,xa);
+
+ KCHARP fsm_class =
+ "@@*2 Fsm %s class.\n";
+ int x = sprintf(Fsm->big_buf_
+ ,fsm_class
+ ,xa
+ );
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_file_<< endl;
+
+@*4 Ready those |fsm| syntax directed code jelly beans for consumption.
+@<ready those |fsm| sdcode class jelly beans for consumption@>=
+ T_fsm_class_phrase* fcp = Fsm_phrase->fsm_class_phrase();
+ SDC_MAP_type* sr_dirs = fcp->directives_map();
+ SDC_MAP_ITER_type i = sr_dirs->begin();
+ SDC_MAP_ITER_type ie = sr_dirs->end();
+ TOKEN_GAGGLE dirs_tokens;
+ for(;i!=ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ dirs_tokens.push_back(*sym);
+ }
+
+
+@*3 Driver of |MPOST_CWEB_wrt_fs|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_fsm@/
+(Cmpost_output* Fsm,T_fsm_phrase* Fsm_phrase){@/
+ KCHARP banner =
+ "\\GRAMMARtitle{%s}\n{%s}{%s}%\n"
+ "{%s}{%s}%\n"
+ "{%s}\n";
+
+ KCHARP banner_of_thread =
+ "\\THREADtitle{%s}%\n"
+ "{%s}{%s}%\n"
+ "{%s}{%s}{%s}{%i}%\n"
+ "{%s}\n";
+ char fname[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Fsm->grammar_filename_prefix_.c_str(),fname);
+ char ns_name[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->namespace_id()->identifier()->c_str(),ns_name);
+ char fsm_name[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->fsm_id()->c_string()->c_str(),fsm_name);
+ char k_cweb[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->comment()->c_string()->c_str(),k_cweb);
+
+ if(O2_PP_PHASE != 0){
+ T_parallel_parser_phrase* la_ph = O2_PP_PHASE;
+ T_parallel_la_boundary* la = la_ph->la_bndry();
+ // build srce expr
+ char expr_prescan_cweb[Max_cweb_item_size];
+ int x = sprintf(Fsm->big_buf_
+ ,banner_of_thread
+ ,fname
+ ,fsm_name
+ ,ns_name
+ ,Fsm_phrase->version()->c_string()->c_str()
+ ,Fsm_phrase->debug()->c_string()->c_str()
+ ,k_cweb
+ ,la->la_first_set()->size()
+ //,expr\_prescan\_cweb
+ ,la->cweb_la_srce_expr()->c_str()
+ );
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_file_ << endl;
+ }else{
+ int x = sprintf(Fsm->big_buf_
+ ,banner
+ ,fname
+ ,fsm_name
+ ,ns_name
+ ,Fsm_phrase->version()->c_string()->c_str()
+ ,Fsm_phrase->debug()->c_string()->c_str()
+ ,k_cweb
+ );
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_file_ << endl;
+ }
+
+ if(Fsm_phrase->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_file_,Fsm_phrase->cweb_marker());
+ }
+
+ @<output |fsm|'s class section@>;
+ @<ready those |fsm| sdcode class jelly beans for consumption@>;
+
+ using namespace NS_cweave_fsm_sdc;
+ Ccweave_fsm_sdc sdc_fsm;
+ sdc_fsm.initialize(&Fsm->ow_file_,Fsm_phrase);
+ Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+ sdc_emit.parse();
+}
+
+
+@*2 |MPOST_CWEB_wrt_T|.\fbreak
+|cweave|'s |T| portion of grammar vocabulary.
+
+@*4 Output |T| macros and files.
+@<output |T| macros and files@>=
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_t_file_,"Terminal Vocabulary",Fsm->gened_date_time_.c_str()
+,T_phrase->filename_id()->identifier()
+,T_phrase->namespace_id()->identifier()
+,T_phrase->alphabet()->size());
+
+@*5 hrule to end T entry.\fbreak
+@<rule-it@>=
+ KCHARP rule_it =
+ "\\fbreak%s\n"@/
+ "\\hrule\n";
+ x = sprintf(Fsm->big_buf_,rule_it," ");
+ Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+
+@*4 Output |T|'s entry.\fbreak
+For now i hardwire the enumeration label here.
+It will be deposited in the enumeration grammar for me to fetch.
+@<output |T|'s entry@>=
+char ab[] = "Y";
+if(tdef->autoabort() == true) ab[0] = 'Y';
+else ab[0] = 'N';
+char ad[] = "Y";
+if(tdef->autodelete() == true) ad[0]='Y';
+else ad[0] = 'N';
+
+char name[Max_cweb_item_size];
+
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+
+const char* enum_name_for_format =
+ "T\\_%s\\_";
+char a[SMALL_BUFFER_4K];
+ sprintf(a,enum_name_for_format,class_name);
+
+ KCHARP t_entry = "@@*2 {\\bf %s}.\\fbreak\n"@/
+ "Enum: %s\n\\fbreak\n"@/
+ "\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+ int x = sprintf(Fsm->big_buf_
+ ,t_entry
+ ,name
+ ,a
+ ,class_name
+ ,ab
+ ,ad
+ );
+ Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_t_file_<< endl;
+ if(tdef->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_t_file_,tdef->cweb_marker());
+ }
+ @<rule-it@>;
+
+@*4 Output prefix code if present.\fbreak
+@<output prefix code if present@>=
+ if(T_phrase->terminals_refs_code() != 0){
+ KCHARP tref =
+ "@@*2 {\\bf Terminals-refs} directive.\\fbreak\n";
+ Fsm->ow_t_file_ << tref;
+
+ T_syntax_code* stc = T_phrase->terminals_refs_code();
+ if(stc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+ }
+ KCHARP tref_code =@/
+ "@@<terminals-refs directive@@>=\n"
+ "%s"@/
+ "\n";
+
+ int x = sprintf(Fsm->big_buf_
+ ,tref_code
+ ,T_phrase->terminals_refs_code()->syntax_code()->c_str()
+ );
+ Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_t_file_ << endl;
+ }
+
+@*4 Output suffix code if present.\fbreak
+@<output suffix code if present@>=
+ if(T_phrase->terminals_sufx_code() != 0){
+ KCHARP tsuf =
+ "@@*1 {\\bf Terminals-sufx} directive.\\fbreak\n";
+ Fsm->ow_t_file_ << tsuf;
+
+ T_syntax_code* stc = T_phrase->terminals_sufx_code();
+ if(stc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+ }
+ KCHARP tsuf_code =
+ "@@<terminals-sufx directive@@>=\n"@/
+ "%s"@/
+ "\n";
+
+ int x = sprintf(Fsm->big_buf_
+ ,tsuf_code
+ ,T_phrase->terminals_sufx_code()->syntax_code()->c_str()
+ );
+ Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_t_file_<< endl;
+ }
+
+@*4 Get those |T| syntax directed code jelly beans ready for consumption.
+@<get those |T| sdcode class jelly beans ready for consumption@>=
+ SDC_MAP_type* sr_dirs = tdef->directives_map();
+ SDC_MAP_ITER_type i = sr_dirs->begin();
+ SDC_MAP_ITER_type ie = sr_dirs->end();
+ TOKEN_GAGGLE dirs_tokens;
+ for(;i!=ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ dirs_tokens.push_back(*sym);
+ }
+
+@*3 Driver of |MPOST_CWEB_wrt_T|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_T@/
+(Cmpost_output* Fsm,T_terminals_phrase* T_phrase){@/
+ @<output |T| macros and files@>;
+ if(T_phrase->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_t_file_,T_phrase->cweb_marker());
+ }
+
+ @<output prefix code if present@>;
+ T_DEF_MAP_ITER_type a = T_phrase->alphabet()->begin();
+ T_DEF_MAP_ITER_type ae = T_phrase->alphabet()->end();
+ char term_name[Max_cweb_item_size];
+ for(;a!=ae;++a){
+ T_terminal_def* tdef = a->second;
+ @<output |T|'s entry@>;
+ @<get those |T| sdcode class jelly beans ready for consumption@>;
+ using namespace NS_cweave_T_sdc;
+ Ccweave_T_sdc sdc_fsm;
+ XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+ sdc_fsm.initialize(&Fsm->ow_t_file_,term_name);
+ Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+ sdc_emit.parse();
+ }
+ @<output suffix code if present@>;
+ Fsm->ow_t_file_ << "@@** Index.\n";
+}
+
+@*2 |MPOST_CWEB_wrt_Err|.\fbreak
+|cweave|'s |Err| portion of grammar vocabulary.
+
+@*4 Output |err| macros and files.
+@<output |err| macros and files@>=
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_err_file_,"Error Vocabulary",Fsm->gened_date_time_.c_str()
+,Err_phrase->filename_id()->identifier()
+,Err_phrase->namespace_id()->identifier()
+,Err_phrase->alphabet()->size());
+
+@*5 Err hrule to end T entry.\fbreak
+@<err rule-it@>=
+ KCHARP rule_it =
+ "\\fbreak%s\n"@/
+ "\\hrule\n";
+ x = sprintf(Fsm->big_buf_,rule_it," ");
+ Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+
+@*4 Output |err|'s entry.\fbreak
+Due to my verbosity and the black slug outputted
+from |cweave| / \TeX, i removed the emitting of the enumeration
+symbol as part of the index.
+For now i have not tested against the
+enumeration symbol.
+i explicitly reference it by its key from a returned thread call
+ or i use the \ALLshift to catch it.
+ Time may squelch my decision.
+@<output |err|'s entry@>=
+char ab[] = "Y";
+if(tdef->autoabort() == true) ab[0] = 'Y';
+else ab[0] = 'N';
+char ad[] = "Y";
+if(tdef->autodelete() == true) ad[0] = 'Y';
+else ad[0] = 'N';
+char name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+const char* enum_name_for_format =
+ "T\\_%s\\_";
+char enum_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),enum_name);
+char a[SMALL_BUFFER_4K];
+ sprintf(a,enum_name_for_format,enum_name);
+ KCHARP t_entry = "@@*2 {\\bf %s}.\\fbreak\n"@/
+ "Enum: %s\n\\fbreak\n"@/
+ "\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+ int x = sprintf(Fsm->big_buf_
+ ,t_entry
+ ,name
+ ,a
+ ,class_name
+ ,ab
+ ,ad
+ );
+ Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_err_file_ << endl;
+ if(tdef->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_err_file_,tdef->cweb_marker());
+ }
+ @<err rule-it@>;
+
+@*3 Driver of |MPOST_CWEB_wrt_Err|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Err@/
+(Cmpost_output* Fsm,T_error_symbols_phrase* Err_phrase){@/
+ @<output |err| macros and files@>;
+ if(Err_phrase->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_err_file_,Err_phrase->cweb_marker());
+ }
+
+ T_DEF_MAP_ITER_type a = Err_phrase->alphabet()->begin();
+ T_DEF_MAP_ITER_type ae = Err_phrase->alphabet()->end();
+ char term_name[Max_cweb_item_size];
+ for(;a!=ae;++a){
+ T_terminal_def* tdef = a->second;
+ @<output |err|'s entry@>;
+ @<get those |T| sdcode class jelly beans ready for consumption@>;
+ using namespace NS_cweave_T_sdc;
+ Ccweave_T_sdc sdc_fsm;
+ XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+ sdc_fsm.initialize(&Fsm->ow_err_file_,term_name);
+ Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+ sdc_emit.parse();
+ }
+ Fsm->ow_err_file_ << "@@** Index.\n";
+}
+
+
+@*2 |MPOST_CWEB_wrt_lrk|.\fbreak
+|cweave|'s |lrk| portion of grammar vocabulary.
+
+@*4 Output |lrk| macros and files.
+@<output |lrk| macros and files@>=
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_lrk_file_,"Lr K Vocabulary",Fsm->gened_date_time_.c_str()
+,Lrk_phrase->filename_id()->identifier()
+,Lrk_phrase->namespace_id()->identifier()
+,Lrk_phrase->alphabet()->size()
+);
+
+@*5 Lrk hrule to end T entry.\fbreak
+@<lrk rule-it@>=
+ KCHARP rule_it =
+ "\\fbreak%s\n"@/
+ "\\hrule\n";
+ x = sprintf(Fsm->big_buf_,rule_it," ");
+ Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+
+@*4 Output |lrk|'s entry.\fbreak
+For now i hardwire the enumeration label here.
+It will be deposited in the enumeration grammar for me to fetch.
+
+Note: why the problem with |reduce operator|?
+The index part of pdftex honks when it uses the \TeX macro
+ |reduce_operator| so i renamed it to |rrrr| to give the proper effect \rrrr.
+@<output |lrk|'s entry@>=
+char ab[] = "Y";
+if(tdef->autoabort() == true) ab[0] = 'Y';
+else ab[0]= 'N';
+char ad[] = "Y";
+
+if(tdef->autodelete() == true) ad[0] = 'Y';
+else ad[0] = 'N';
+switch(tdef->enumerated_id__){
+ case T_Enum::T_LR1_parallel_operator_:{
+ strcpy(name,"\\paralleloperator");
+ strcpy(term_name,"|parallel_operator|");
+ break;
+ }
+ case T_Enum::T_LR1_all_shift_operator_:{
+ strcpy(name,"\\allshift");
+ strcpy(term_name,"|all_shift|");
+ break;
+ }
+ case T_Enum::T_LR1_invisible_shift_operator_:{
+ strcpy(name,"\\invisibleshift");
+ strcpy(term_name,"|invisible_shift|");
+ break;
+ }
+ case T_Enum::T_LR1_fset_transience_operator_:{
+ strcpy(name,"\\transienceoperator");
+ strcpy(term_name,"|transience_operator|");
+ break;
+ }
+ case T_Enum::T_LR1_questionable_shift_operator_:{
+ strcpy(name,"\\questionableoperator");
+ strcpy(term_name,"|questionable_operator|");
+ break;
+ }
+ default: {
+ XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+ XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+ break;
+ }
+}
+const char* enum_class_name_format = "T\\_%s\\_";
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+char a[SMALL_BUFFER_4K];
+ sprintf(a,enum_class_name_format,class_name);
+
+ KCHARP t_entry = "@@*2 {\\bf %s}.\\fbreak\n"@/
+ "Enum: %s\n\\fbreak\n"@/
+ "\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+ int x = sprintf(Fsm->big_buf_
+ ,t_entry
+ ,name
+ ,a
+ ,class_name
+ ,ab
+ ,ad
+ );
+ Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_lrk_file_<< endl;
+ if(tdef->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,tdef->cweb_marker());
+ }
+ @<lrk rule-it@>;
+
+@*4 Output lrk suffix code if present.\fbreak
+@<output lrk suffix code if present@>=
+ if(Lrk_phrase->lrk_sufx_code() != 0){
+ KCHARP tsuf =
+ "@@*1 {\\bf lrk-sufx} directive.\\fbreak\n";
+ Fsm->ow_lrk_file_ << tsuf;
+
+ T_syntax_code* stc = Lrk_phrase->lrk_sufx_code();
+ if(stc->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,stc->cweb_marker());
+ }
+ KCHARP tsuf_code =
+ "@@<lrk-sufx directive@@>=\n"
+ "%s"
+ "\n";
+ int x = sprintf(Fsm->big_buf_
+ ,tsuf_code
+ ,Lrk_phrase->lrk_sufx_code()->syntax_code()->c_str()
+ );
+ Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+ Fsm->ow_lrk_file_<< endl;
+ }
+
+
+@*3 Driver of |MPOST_CWEB_wrt_Lrk|.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Lrk@/
+(Cmpost_output* Fsm,T_lr1_k_phrase* Lrk_phrase){@/
+ @<output |lrk| macros and files@>;
+ if(Lrk_phrase->cweb_marker() != 0){
+ WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,Lrk_phrase->cweb_marker());
+ }
+ char term_name[Max_cweb_item_size];
+ char name[Max_cweb_item_size];
+
+ T_DEF_MAP_ITER_type a = Lrk_phrase->alphabet()->begin();
+ T_DEF_MAP_ITER_type ae = Lrk_phrase->alphabet()->end();
+ for(;a!=ae;++a){
+ T_terminal_def* tdef = a->second;
+ @<output |lrk|'s entry@>;
+ @<get those |T| sdcode class jelly beans ready for consumption@>;
+ using namespace NS_cweave_T_sdc;
+ Ccweave_T_sdc sdc_fsm;
+ sdc_fsm.initialize(&Fsm->ow_lrk_file_,term_name);
+ Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+ sdc_emit.parse();
+ }
+ @<output lrk suffix code if present@>;
+ Fsm->ow_lrk_file_ << "@@** Index.\n";
+}
+
+@*2 |MPOST_CWEB_wrt_rule_s_lhs_sdc|.\fbreak
+|cweave|'s statements for a rule's ``lhs'' syntax directed code.
+Go to it grammar.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_rule_s_lhs_sdc@/
+(Cmpost_output* Fsm,rule_def* Rule_def){@/
+ T_rule_lhs_phrase* rlp = Rule_def->rule_lhs();
+ if(rlp == 0) return;
+ SDC_MAP_type* sr_dirs = rlp->lhs_directives_map();
+ SDC_MAP_ITER_type i = sr_dirs->begin();
+ SDC_MAP_ITER_type ie = sr_dirs->end();
+ TOKEN_GAGGLE dirs_tokens;
+ for(;i!=ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ dirs_tokens.push_back(*sym);
+ }
+ T_parallel_monitor_phrase* ppm = Rule_def->parallel_mntr();
+ if(ppm != 0){
+ sr_dirs = ppm->mntr_directives_map();
+ i = sr_dirs->begin();
+ ie = sr_dirs->end();
+ for(;i!=ie;++i){
+ CAbs_lr1_sym* sym = i->second;
+ dirs_tokens.push_back(*sym);
+ }
+ }
+ using namespace NS_cweave_lhs_sdc;
+ Ccweave_lhs_sdc lhs_sdc_fsm;
+ lhs_sdc_fsm.initialize(&Fsm->ow_file_,Rule_def->rule_name()->c_str());
+ Parser lhs_sdc_emit(lhs_sdc_fsm,&dirs_tokens,0);
+ lhs_sdc_emit.parse();
+}
+
+@*2 |MPOST_CWEB_should_subrule_be_printed|.\fbreak
+Check whether the subrule should be |cweave|ed.
+If there is no syntax directed code, then bypass diagramming
+it as its rule already does the big picture --- forest.
+@<accrue source for emit@>+=
+bool
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_should_subrule_be_printed@/
+(Cmpost_output* Fsm,T_subrule_def* Subrule_def){@/
+ if(Subrule_def->cweb_marker() != 0) return true;
+ SDC_MAP_type* sr_dirs = Subrule_def->subrule_directives();
+ if(sr_dirs->empty() == true) return false;
+ return true;
+}
+@*3 Deal with T's classifications.
+@!To do: emit single character references; adjust |cweave|?@>;
+@<deal with T's classifications@>=
+ switch(td->classification()){
+ case T_terminal_def::err:{
+ int x = sprintf(Fsm->big_buf_,xref,name);
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ break;
+ }
+ case T_terminal_def::rc:{
+break;
+ INT_STR_MAP_ITER_type i = Fsm->xlated_names_.find(td->enumerated_id__);
+ if(i != Fsm->xlated_names_.end()){
+ int x = sprintf(Fsm->big_buf_,xref,i->second.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }else{
+ int x = sprintf(Fsm->big_buf_,xref,name);
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }
+ break;
+ }
+ case T_terminal_def::lrk:{
+ INT_STR_MAP_ITER_type i = Fsm->xlated_names_.find(td->enumerated_id__);
+ if(i != Fsm->xlated_names_.end()){
+ int x = sprintf(Fsm->big_buf_,xref,i->second.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }else{
+ int x = sprintf(Fsm->big_buf_,xref,name);
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }
+ break;
+ }
+ case T_terminal_def::t:{
+ INT_STR_MAP_ITER_type i = Fsm->xlated_names_.find(td->enumerated_id__);
+ if(i != Fsm->xlated_names_.end()){
+ int x = sprintf(Fsm->big_buf_,xref,i->second.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }else{
+ int x = sprintf(Fsm->big_buf_,xref,name);
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+ }
+ break;
+ }
+ }
+
+@*2 |MPOST_CWEB_xref_refered_T|.\fbreak
+Don't emit single characters as |pdftex| honks in the index section as
+this was a decision to not clutter temporary variables.
+Until i get more intimate with its code i check
+to this limitation and my ignorance.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_T@/
+(Cmpost_output* Fsm,refered_T* R_T){@/
+ T_in_stbl* t = R_T->t_in_stbl();
+ T_terminal_def* td = t->t_def();
+
+ KCHARP xref = "@@.%s@@>\n";
+
+char name[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(td->t_name()->c_str(),name);
+@<deal with T's classifications@>;
+}
+
+@*2 |MPOST_CWEB_xref_refered_rule|.\fbreak
+Watch for underscore in rule's name. So makesure that |cweave|'s
+directive backslash underscore is part of the name.
+@<accrue source for emit@>+=
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_rule@/
+(Cmpost_output* Fsm,refered_rule* R_rule){@/
+ rule_in_stbl* r = R_rule->Rule_in_stbl();
+ rule_def* rd = r->r_def();
+ KCHARP xref = "@@.%s@@>\n";
+ string name_with_bkslash;
+ int len = rd->rule_name()->length();
+ for(int x=0;x<len;++x){
+ char c = (*rd->rule_name())[x];
+ if(c == '_'){
+ name_with_bkslash += '\\';
+ }
+ name_with_bkslash += c;
+ }
+ int x = sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+ Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+
+@** Grammar's ``Called threads'' First Set Calculation.\fbreak
+What is it? Similar to a terminal first set definition, it is the list of
+``called thread'' expressions in the ``Start Rule''
+arrived at from rule closures.
+Why is it needed?
+It is the content of the ``list-of-transitive-threads'' construct
+emitted in the grammar's ``fsc'' file for \olinker to
+resolve into T first sets per thread.
+These first sets are what determines whether a thread should be called.
+\fbreak
+\fbreak
+The Algorithm:\fbreak
+\INDENT{.1in}{add start rule's subrules to the element space}
+\INDENT{.1in}{walk the element space}
+\INDENT{.2in}{Element assessment:}
+\INDENT{.3in}{a) eosubrule: advance to next point in space}
+\INDENT{.3in}{b) referenced rule:}
+\INDENT{.4in}{determine if referenced rule already contributed}
+\INDENT{.5in}{no --- add rule to contributed closure rules set}
+\INDENT{.7in}{add its subrules to the element space}
+\INDENT{.4in}{is ``referenced rule'' epsilonable?}
+\INDENT{.5in}{yes --- overlay current element with its right neighbour}
+\INDENT{.5in}{no --- advance to next subrule in element space}
+\INDENT{.3in}{c) \PARshift rtn-T NSa::THa type expression?}
+\INDENT{.5in}{no --- advance to next subrule point in space}
+\INDENT{.5in}{yes --- add called thread to ``called thread first set'}
+\INDENT{.7in}{advance to next subrule in element space}
+\INDENT{.1in}{until all entries in element space stomped on}
+\fbreak
+The algorithm uses a 1 dimensional space of subrules.
+Each point represents a subrule's element position within its rhs.
+As the subrule's current element is being evaluated, if the next element
+in the subrule is needed due to the current element being an epsilonable rule
+ it overlays the being assessed element.
+Effectively the subrule being processed is a fishing line that
+reels in its next element ontop of the current element.
+It tap dances ontop of the element point
+until the subrule's elements assessment is
+ exhausted before advancing to the next subrule.
+After, the subrules residues are their last
+element that exhausted its assessment.
+The element space is
+ fixed in size: just the ``total number of subrules''.
+\fbreak
+\settabs\+\indent&1in\qquad&\qquad&{\it subrule's symbols}&\qquad&\qquad&\cr
+\+&\it Rule&&{\it subrule's symbols}&&{residue sym}\cr
+\+&St &$\rightarrow$ &$ $ S $\bot$&&S\cr
+\+&S &$\rightarrow$ &$ $ $R_a^{\epsilon}$ $R_b^{\epsilon}$ $R_c$&&$R_c$\cr
+\+& &$\rightarrow$ &$ $ $R_a^{\epsilon}$ $R_d^{\epsilon}$ $R_e$&&$R_e$\cr
+\+&$R_a^{\epsilon}$ &$\rightarrow$ &&& \cr
+\+&&$\rightarrow$ &$ $ \PARshift $ a$ NSa::THa&&\PARshift\cr
+\+&$R_b^{\epsilon}$ &$\rightarrow$ &&& \cr
+\+&&$\rightarrow$ &$ $ \PARshift $ b$ NSb::THb&&\PARshift\cr
+\+&$R_c$ &$\rightarrow$ &$ $ c&&c\cr
+\+&$R_d^{\epsilon}$ &$\rightarrow$ &&& \cr
+\+&&$\rightarrow$ &$ $ \PARshift $ d$ NSd::THd&&\PARshift\cr
+\+&$R_e$ &$\rightarrow$ &$ $ e&&e\cr
+\fbreak
+\hbox{\hskip.5in Above grammar's called thread's first set: FS(Tha)+FS(Thb)+FS(THd)}\fbreak
+\hbox{\hskip.7in "/usr/local/yacco2/qa/test\_called\_thd\_fs.lex" grammar exercises algorithm}\fbreak
+
+@*4 Add subrule's 1st element to element space.
+@<add subrule's 1st element to element space@>=
+ vector<AST*>::iterator ti = subrules_can.nodes_visited()->begin();
+ vector<AST*>::iterator tie = subrules_can.nodes_visited()->end();
+ for(;ti!=tie;++ti){@/
+ AST* srdef_t = *ti;
+ @=T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);@>@/
+ AST* sr_t = sr_def->subrule_s_tree();
+ AST* et = AST::get_spec_child(*sr_t,1);
+ ++nc;
+ elem_space[nc]=et;
+ }
+
+@*3 Add Start rule's subrules to element space.\fbreak
+@<add Start rule's subrules to element space@>=
+{
+ AST* rtree = Start_rule->rule_s_tree();
+ ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+ tok_can<AST*> subrules_can(subrule_walk);
+ yacco2::UINT xxx(0);
+ for(;subrules_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx) ;
+ @<add subrule's 1st element to element space@>;
+}
+
+@*3 Add referenced rule to element space.\fbreak
+ @<add referenced rule to element space@>=
+{
+ i = rules_in_elem_space.find(rdef);
+ if(i == rules_in_elem_space.end()){// rule not dealt with so add it
+ rules_in_elem_space.insert(rdef);
+ AST* rtree = rdef->rule_s_tree();
+ ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+ tok_can<AST*> subrules_can(subrule_walk);
+ yacco2::UINT xxx(0);
+ for (;subrules_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx) ;
+ @<add subrule's 1st element to element space@>;
+ }
+}
+
+@*3 Assess element type.\fbreak
+Handles ``called thread'' expression.
+All other types are thrown out.
+@<deal with thread called element type@>=
+switch(cur_elem->enumerated_id__){
+ case T_Enum::T_T_eosubrule_:{
+ ++cc;//finished with subrule, so adv to next subrule
+ continue;
+ }
+ case T_Enum::T_refered_T_:{
+ @=refered_T* rt = (refered_T*)cur_elem;@>@/
+ T_terminal_def* td = rt->its_t_def();
+ if(td->enum_id() != LR1_PARALLEL_OPERATOR){
+ ++cc;//finished with subrule, so adv to next subrule
+ continue;
+ }
+ @<deal with thread call expression@>;
+ ++cc;//finished with called expr, so adv to next subrule
+ continue;
+ }
+ case T_Enum::T_refered_rule_:{
+ @=refered_rule* rr = (refered_rule*)cur_elem;@>@/
+ rule_def* rdef = rr->its_rule_def();
+ @<add referenced rule to element space@>;
+ if(rdef->epsilon() == YES){
+ AST* et = AST::brother(*cur_elem_t);
+ elem_space[cc]=et;//overlay
+ continue;
+ }else{// finished with subrule
+ ++cc;//adv to next subrule
+ continue;
+ }
+ }
+ }
+@*4 Deal with ``thread call'' expression.\fbreak
+Get the ``called-thread-eosubrule'' terminal in the 3rd tree position.
+Only add it and not the ``null-called-thread-eosubrule''
+as it indicates that one of the called threads will
+return its stated ``return T''.
+@<deal with thread call expression@>=
+ AST* first_el_t = cur_elem_t;
+ AST* third_el_t = AST::get_younger_sibling(*first_el_t,2);
+ CAbs_lr1_sym* sym = AST::content(*third_el_t);
+ if(sym->enumerated_id__ == T_Enum::T_T_called_thread_eosubrule_){
+ T_called_thread_eosubrule* ct = (T_called_thread_eosubrule*)sym;
+ Start_rule->add_to_called_thread_first_set(ct);
+ }
+
+@*2 |GEN_CALLED_THREADS_FS_OF_RULE|.\fbreak
+Make |elem_space| local to the translation unit instead of
+the local to the function for efficiecy reasons.
+@<accrue source for emit@>+=
+AST* elem_space[Max_no_subrules];
+void GEN_CALLED_THREADS_FS_OF_RULE(rule_def* Start_rule){@/
+ using namespace NS_yacco2_T_enum;
+ using namespace std;
+ std::set<rule_def*> rules_in_elem_space;
+ std::set<rule_def*>::iterator i;
+ INT_SET_type sr_filter;
+ sr_filter.insert(T_Enum::T_T_subrule_def_);
+ tok_can_ast_functor just_walk_functr;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ int cc(0); // cur cell
+ int nc(-1); // next cell
+ AST* cur_elem_t(0);
+ CAbs_lr1_sym* cur_elem(0);
+ @<add Start rule's subrules to element space@>;
+ while(cc <=nc){
+ cur_elem_t = elem_space[cc];
+ cur_elem = AST::content(*cur_elem_t);
+ @<deal with thread called element type@>;
+ }
+}
+
+@** First set calculations.\fbreak
+Raison d'\^etre: ugly formatted code by cweave.
+This code should reside in |first_set_rules| grammar.
+There are 2 things being done.
+Calculate the first set and record the closure only rules
+for the state used to generate the follow sets.
+
+@*3 Add Defined rule's subrules to element space.
+@<add Defined rule's subrules to element space@>=
+{
+ AST* rtree = Rule_def->rule_s_tree();
+ ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+ tok_can<AST*> subrules_can(subrule_walk);
+ yacco2::UINT xxx(0);
+ for(;subrules_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx) ;
+ @<add subrule's 1st element to element space@>;
+}
+
+@*3 Assess element type.
+@<deal with element type@>=
+switch(cur_elem->enumerated_id__){
+ case T_Enum::T_T_eosubrule_:{
+ ++cc;//finished with subrule, so adv to next subrule
+ continue;
+ }
+ case T_Enum::T_refered_T_:{
+ @=refered_T* rt = (refered_T*)cur_elem;@>@/
+ T_in_stbl* tstbl = rt->t_in_stbl();
+ Rule_def->add_to_first_set(*tstbl);
+Rule_def->add_rule_adding_T_in_first_set(tstbl,rt->grammar_s_enumerate());
+ ++cc;//finished subrule, so adv to next subrule
+ continue;
+ }
+ case T_Enum::T_refered_rule_:{
+ @=refered_rule* rr = (refered_rule*)cur_elem;@>@/
+ rule_def* rdef = rr->its_rule_def();
+ @<add referenced rule to element space@>;
+ if(rdef->epsilon() == YES){
+ AST* et = AST::brother(*cur_elem_t);
+ elem_space[cc]=et;//overlay
+ continue;
+ }else{// finished with subrule
+ ++cc;//adv to next subrule
+ continue;
+ }
+ }
+ }
+
+@*3 Check Start rule for \emptyrule{ }condition.\fbreak
+This deals with thread only grammars. Their first sets determine
+whether they get called.
+So why the check?
+What does it mean when the Start rule is \emptyrule{ }for a thread?
+The backstop is its lookahead that normally becomes
+the reducing T set to accept the grammar.
+I choose to call it just in case the thread is a logic sequencer
+of \emptyrule{ }rules.
+The consequence is just an abort blip by the called thread.
+If the grammar writer doesn't like it, remove the Start rule \emptyrule{ }condition.
+@<is Start rule \emptyrule if yes add LA expression to first set@>=
+if(Rule_def->rule_no() != 1) goto not_start_rule;
+if(O2_PP_PHASE == 0) goto not_start_rule;// not a thread grammar
+if(Rule_def->epsilon() == NO) goto not_start_rule;// LA not needed
+{
+ T_parallel_la_boundary* la = O2_PP_PHASE->la_bndry();
+ set<T_in_stbl*>::iterator lai = la->la_first_set()->begin();
+ set<T_in_stbl*>::iterator laie = la->la_first_set()->end();
+ for(;lai!=laie;++lai){
+ T_in_stbl* tstbl = *lai;
+ Rule_def->add_to_first_set(*tstbl);
+ }
+}
+not_start_rule:;
+
+@*2 |GEN_FS_OF_RULE|.\fbreak
+The only wrinkle is the Start rule. What do u do
+when the grammar is a thread and the Start rule is \emptyrule?
+Well add the ``lookahead expression'' to its first set.
+@<accrue source for emit@>+=
+void GEN_FS_OF_RULE(rule_def* Rule_def){@/
+ using namespace NS_yacco2_T_enum;
+ using namespace std;
+ std::set<rule_def*> rules_in_elem_space;
+ std::set<rule_def*>::iterator i;
+ INT_SET_type sr_filter;
+ sr_filter.insert(T_Enum::T_T_subrule_def_);
+ tok_can_ast_functor just_walk_functr;
+
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ int cc(0); // cur cell
+ int nc(-1); // next cell
+ AST* cur_elem_t(0);
+ CAbs_lr1_sym* cur_elem(0);
+ @<add Defined rule's subrules to element space@>;
+ @<is Start rule \emptyrule if yes add LA expression to first set@>;
+ while(cc <=nc){
+ cur_elem_t = elem_space[cc];
+ cur_elem = AST::content(*cur_elem_t);
+ @<deal with element type@>;
+ }
+}
+
+@** Print out Rule's First Set.\fbreak
+The rule's first set elements are sorted in lexicographical order.
+@*4 Set up first set sort.\fbreak
+Why your own copy into a ``random iterator'' container?
+Glad u asked dave, MS ``copy'' template algorithm aborts and
+``stable\_sort'' requires a ``random iterator'' or it will give u a compile
+time error on non Microsoft platforms.
+|copy(fs->begin(),fs->end(),ran_array.begin());| works properly on Sun.
+
+ @<set up first set sort@>=
+ T_IN_STBL_SET_type* fs = Rule_def->first_set();
+ Ofile << "@@*2 |" << Rule_def->rule_name()->c_str() << "|";
+ if(Rule_def->epsilon() == true){
+ Ofile << "{$^\\emptyrule$}";
+ }
+ Ofile << " \\# in set: " << fs->size() << ".\\fbreak"<< std::endl;
+ T_IN_STBL_SORTED_SET_type ran_array;
+ ran_array.reserve(fs->size());
+T_IN_STBL_SET_ITER_type ii= fs->begin();
+T_IN_STBL_SET_ITER_type iie= fs->end();
+for(;ii != iie;++ii){
+ ran_array.push_back(*ii);
+}
+ stable_sort(ran_array.begin(),ran_array.end(),fs_sort_criteria);
+
+@*3 Print out the sorted first set elements.
+@<print out the sorted first set elements@>=
+ char xlate[Max_cweb_item_size];
+ T_IN_STBL_SORTED_SET_ITER_type i = ran_array.begin();
+ T_IN_STBL_SORTED_SET_ITER_type ie = ran_array.end();
+ for(;i!=ie;++i){
+ T_in_stbl* el = *i;
+ Ofile<<" ";
+ XLATE_SYMBOLS_FOR_cweave(el->t_def()->t_name()->c_str(),xlate);
+ Ofile << xlate <<"\\ \\ "<<std::endl;
+ }
+
+@*2 Driver of |PRT_RULE_S_FIRST_SET|.
+ @<accrue source for emit@>+=
+bool
+fs_sort_criteria(const NS_yacco2_terminals::T_in_stbl*E1,const NS_yacco2_terminals::T_in_stbl*E2){
+ @=T_in_stbl* e1 = (T_in_stbl*)E1;@>@/
+ @=T_in_stbl* e2 = (T_in_stbl*)E2;@>@/
+ T_terminal_def* e1_t_def = e1->t_def();
+ T_terminal_def* e2_t_def = e2->t_def();
+ string* e1s = e1_t_def->t_name();
+ string* e2s = e2_t_def->t_name();
+ if(*e1s < *e2s)return true;
+ return false;
+}
+ void PRT_RULE_S_FIRST_SET(std::ofstream& Ofile,NS_yacco2_terminals::rule_def* Rule_def){
+ @<set up first set sort@>;
+ @<print out the sorted first set elements@>;
+ }
+
+@** Commonize LA sets.\fbreak
+@*3 |find_common_la_set_idx|.\fbreak
+Reduce the number of lookahead sets by keeping a global registry.
+The index returned is the vector's index.
+This value is deposited in the state element's reducing configuration.
+It is is used in manufacturing the common la set's name.\fbreak
+\fbreak
+Some optimizations:\fbreak
+If |eolr| is in set, as it represents all terminals, just keep
+it as the other terminals are ch ch chatter.
+@<accrue source for emit@>+=
+LA_SET_type* make_copy_of_la_set(LA_SET_type* Set1){
+ LA_SET_type* copy_set = new LA_SET_type;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+ @=T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;@>@/
+ LA_SET_ITER_type f = Set1->find(td);
+ if(f != Set1->end()){
+ copy_set->insert(td);
+ return copy_set;
+ }
+ LA_SET_ITER_type i = Set1->begin();
+ LA_SET_ITER_type ie = Set1->end();
+ for(;i!=ie;++i){
+ copy_set->insert(*i);
+ }
+ return copy_set;
+}
+
+@*3 |are_2_la_sets_equal|.\fbreak
+See bugs as to why i roll my own.
+@<accrue source for emit@>+=
+bool are_2_la_sets_equal(LA_SET_type* Common_set1,LA_SET_type* Set2){
+ LA_SET_type* la_set_to_compare_against = Set2;
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+ @=T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;@>@/
+ LA_SET_type* eolr_set(0);
+ LA_SET_ITER_type f = Set2->find(td);
+ if(f != Set2->end()){
+ eolr_set = new LA_SET_type;
+ eolr_set->insert(td);
+ la_set_to_compare_against = eolr_set;
+ }
+
+ if(Common_set1->size() != la_set_to_compare_against->size()){
+ if(eolr_set !=0) delete eolr_set;
+ return false;
+ }
+ LA_SET_ITER_type set1i = Common_set1->begin();
+ LA_SET_ITER_type set1ie = Common_set1->end();
+ LA_SET_ITER_type set2i = la_set_to_compare_against->begin();
+ LA_SET_ITER_type set2ie = la_set_to_compare_against->end();
+ for(;set1i != set1ie;){
+ T_in_stbl* set1T = *set1i;
+ T_in_stbl* set2T = *set2i;
+ if(set1T != set2T)
+ return false;
+ ++set1i;
+ ++set2i;
+ }
+ if(eolr_set != 0) delete eolr_set;
+ return true;
+}
+
+@*3 |find_common_la_set_idx|.\fbreak
+@<accrue source for emit@>+=
+int find_common_la_set_idx(LA_SET_type* La_){
+ if(COMMON_LA_SETS.empty() == true){
+ LA_SET_type* copy_set = make_copy_of_la_set(La_);
+ COMMON_LA_SETS.push_back(copy_set);
+ return 0;
+ }
+ COMMON_LA_SETS_ITER_type i = COMMON_LA_SETS.begin();
+ COMMON_LA_SETS_ITER_type ie = COMMON_LA_SETS.end();
+ int idx(0);
+ for(;i!=ie;++i,++idx){
+ LA_SET_type* st1 = *i;
+ bool result = are_2_la_sets_equal(st1,La_);
+ if(result == true){
+ return idx;
+ }
+ }
+ LA_SET_type* copy_set = make_copy_of_la_set(La_);
+ COMMON_LA_SETS.push_back(copy_set);
+ return idx;
+}
+
+
+@*2 |COMMONIZE_LA_SETS|.\fbreak
+Reduce the number of lookahead sets by keeping a global registry.
+The index returned is the COMMON\_LA\_SETS index.
+This value is deposited in the state element's reducing configuration.
+It is used in the manufacturing of the common la set's name referenced
+from the emitted tables.
+@<accrue source for emit@>+=
+void COMMONIZE_LA_SETS(){
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){
+ state* cur_state = *si;
+ S_VECTORS_ITER_type svi = cur_state->state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = cur_state->state_s_vector_.end();
+ for(;svi!=svie;++svi){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ S_VECTOR_ELEMS_ITER_type selie = svi->second.end();
+ for(;seli!=selie;++seli){
+ state_element* se = *seli;
+ if(se->goto_state_ != 0) continue;
+ bool set_ok = se->calc_la(*se);// make sure it is filled directly
+ if (set_ok == false){// la set is empty so get out
+ return;
+ }
+ se->common_la_set_idx_ = find_common_la_set_idx(se->la_set_);
+ }
+ }
+ }
+}
+
+@** Calculate recycling rule's use count.\fbreak
+This is external as my cweave documentation approach to grammars is rudimentary.
+It tag teams with |rules_use_cnt.lex|
+grammar who drives the overall evaluation and use count posting per
+defined rule.\fbreak
+\INDENT{.1in}{1) if RxSkeleton exists in cyclic table then return its use value}
+\INDENT{.1in}{2) add RxSkeleton to cyclic table}
+\INDENT{.1in}{3) evaluate each skeleton's rhs for rule's use cnt}
+\INDENT{.2in}{a) determine indirect use count for rhs}
+\INDENT{.2in}{b) determine rhs's max use cnt from direct and indirect use cnts}
+@*3 |calc_cyclic_key|.\fbreak
+Compound keys for a c++ map template are a nuisance
+due to the support operators required for key ordering etc.
+So i'll use a unique key of int and let the map deal well
+with an integer key.
+
+The 2 parts of the key are the rule defs using their enumerated values.
+So i'll make the 2 parts of the key as a number system of base ``number of rules''.
+Part 1 is the 2nd digit position and part 2 is the units digit.
+As the rule's enumeration starts after the T vocabulary, i must
+remove the relative ranking of the T vocabulary.
+This way i'm only dealing with base number of rules.
+@<accrue source for emit@>+=
+int calc_cyclic_key@/
+(NS_yacco2_terminals::rule_def* Rule_use,NS_yacco2_terminals::rule_def* Against_rule){@/
+ using namespace NS_yacco2_T_enum;
+ static int no_of_rules(0);
+ static int start_of_rules(0);
+ if(no_of_rules == 0){
+ start_of_rules = O2_T_ENUM_PHASE->total_enumerate();
+ no_of_rules = O2_RULES_PHASE->rules_alphabet()->size();
+ }
+ int rule_use_enum_rel0 = Rule_use->enum_id() - start_of_rules;
+ int part1_key_of_rule_use = rule_use_enum_rel0 * no_of_rules;
+ int against_rule_enum_rel0 = Against_rule->enum_id() - start_of_rules;
+ int part2_key_of_against_rule = against_rule_enum_rel0;
+ int key = part1_key_of_rule_use + part2_key_of_against_rule;
+ return key;
+}
+
+@*3 |determine_rhs_indirect_use_cnt|.\fbreak
+The subrule forest is passed in. Just walk its rhs's elements.
+Indirect count comes from rules who reference the ``use cnt'' rule.
+The assessment is from its maximum derives count determined
+against all its rhses.
+Note the recursion on a referenced rule within its rhs that can derive
+another rule that can reference the ``use cnt'' rule.
+@<accrue source for emit@>+=
+void determine_rhs_indirect_use_cnt@/
+(NS_yacco2_terminals::rule_def* Use_for_rule,yacco2::AST* SRule_t
+,NS_yacco2_terminals::rule_def* Against_rule){@/
+ using namespace NS_yacco2_T_enum;
+ SET_FILTER_type filter;
+ filter.insert(T_Enum::T_refered_rule_);
+
+ tok_can_ast_functor walk_functr;
+ ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+ TOK_CAN_TREE_type rules_use_can(walk);
+ int indirect_use_cnt(0);
+ int direct_use_cnt(0);
+ int x(0);
+ CAbs_lr1_sym* sym=rules_use_can[x];
+ for(;sym->enumerated_id() != LR1_Eog;++x,sym=rules_use_can[x]){
+ @=refered_rule* rr = (refered_rule*)sym;@>@/
+ rule_def* its_rd = rr->its_rule_def();
+ if(its_rd == Use_for_rule){
+ continue;// direct cnt
+ }
+ int idc = MAX_USE_CNT_RxR(Use_for_rule,its_rd);
+ }
+}
+
+@*3 |determine_rhs_max_use_cnt|.\fbreak
+The interesting part is to determine the
+the use count from direct and derived rules.
+A derived rule in the rhs must exercise its rhs elements before it
+reduces. This is like a lookahead of ``used rules''.
+Once it reduces to self, it frees up its ``used rules''.
+@<accrue source for emit@>+=
+int determine_rhs_max_use_cnt@/
+(NS_yacco2_terminals::rule_def* Use_for_rule,yacco2::AST* SRule_t
+,NS_yacco2_terminals::rule_def* Against_rule){@/
+ using namespace NS_yacco2_T_enum;
+ SET_FILTER_type filter;
+ filter.insert(T_Enum::T_refered_rule_);
+
+ tok_can_ast_functor walk_functr;
+ ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+ TOK_CAN_TREE_type rules_use_can(walk);
+ int running_indirect_use_cnt(0);
+ int running_direct_use_cnt(0);
+ int x(0);
+ CAbs_lr1_sym* sym=rules_use_can[x];
+ rule_def* its_rd(0);
+ for(;sym->enumerated_id() != LR1_Eog;++x,sym=rules_use_can[x]){
+ @=refered_rule* rr = (refered_rule*)sym;@>@/
+ its_rd = rr->its_rule_def();
+ if(its_rd == Against_rule) Against_rule->recursive(YES);
+ if(its_rd == Use_for_rule){
+ ++running_direct_use_cnt;
+ continue;// direct cnt
+ }else{
+ use_cnt_type rule_use_key(Use_for_rule,its_rd);
+ int use_cnt_key = calc_cyclic_key(Use_for_rule,its_rd);
+ CYCLIC_USE_TBL_ITER_type i = CYCLIC_USE_TABLE.find(use_cnt_key);
+ use_cnt_type& uc = i->second;
+ int idc = uc.use_cnt_;// use cnt
+ int potential_idc_cnt = idc + running_direct_use_cnt;
+ if(potential_idc_cnt > running_indirect_use_cnt){
+ running_indirect_use_cnt = potential_idc_cnt;
+ }
+ }
+ }
+ if(running_direct_use_cnt > running_indirect_use_cnt){
+ return running_direct_use_cnt;
+ }
+ return running_indirect_use_cnt;
+}
+
+@*2 |MAX_USE_CNT_RxR|: called by |rules_use_cnt.lex| grammar.\fbreak
+Watch for cycling. It is initially called from |rules_use_cnt.lex| grammar.
+@<accrue source for emit@>+=
+int MAX_USE_CNT_RxR@/
+ (NS_yacco2_terminals::rule_def* Rule_use,NS_yacco2_terminals::rule_def* Against_rule){
+ use_cnt_type rule_use_key(Rule_use,Against_rule);
+ int use_cnt_key = calc_cyclic_key(Rule_use,Against_rule);
+ CYCLIC_USE_TBL_ITER_type i = CYCLIC_USE_TABLE.find(use_cnt_key);
+ if(i != CYCLIC_USE_TABLE.end()){
+ return i->second.use_cnt_;
+ }
+ CYCLIC_USE_TABLE.insert(make_pair(use_cnt_key,rule_use_key));
+ using namespace NS_yacco2_T_enum;
+ if(Against_rule->rule_use_skeleton() == 0){// no rules used in its rhses
+ i = CYCLIC_USE_TABLE.find(use_cnt_key);
+ use_cnt_type& uc = i->second;
+ uc.use_cnt_ = 0;
+ return 0;
+ }
+ SET_FILTER_type filter;
+ filter.insert(T_Enum::T_T_subrule_def_);
+ tok_can_ast_functor walk_functr;
+ ast_prefix walk(*Against_rule->rule_use_skeleton(),&walk_functr
+ ,&filter,ACCEPT_FILTER);
+ TOK_CAN_TREE_type rules_use_can(walk);
+ int use_cnt(0);
+ int x(0);
+ CAbs_lr1_sym* sym=rules_use_can[x];
+ for(;sym->enumerated_id() != LR1_Eog;++x,sym=rules_use_can[x]){// walk rhses
+ AST* sr_t = rules_use_can.ast(x);
+ determine_rhs_indirect_use_cnt(Rule_use,sr_t,Against_rule);
+ int rhs_uc = determine_rhs_max_use_cnt(Rule_use,sr_t,Against_rule);
+ if(use_cnt < rhs_uc){
+ use_cnt = rhs_uc;
+ }
+ }
+ i = CYCLIC_USE_TABLE.find(use_cnt_key);
+ use_cnt_type& uc = i->second;
+ if((Against_rule->recursive() == YES) // eliminate self recursion
+ && (Rule_use != Against_rule)) use_cnt = 2*use_cnt;
+ uc.use_cnt_ = use_cnt;
+ return use_cnt;
+}
+
+
+@** Emit Grammar by External procedures.\fbreak
+I choose this route to make life easy for me.
+A table of contents outlines the activities.
+Each specificly outputted component will be done by an external routine.
+Some calls could be nested within other external procedures.
+Local scope uses lower case letters for procedure names whilst global scope
+uses capital letters.\fbreak
+
+This approach isolates the variable scoping per
+routine where software responsibilities are self contained per module and not distributed!
+It would be nice if c++ could have nested procedure definitions but...
+\fbreak
+\fbreak
+State name convention:\fbreak
+fsm class name both for monolithic and thread grammars. An example:\fbreak
+Format: Sxxx\_yyy where xxx is the state number starting from 1 and
+yyy is the fsm class name : Ceol.\fbreak
+S1\_Ceol is the starting state for the Ceol grammar.\fbreak
+\fbreak
+Thread convention:\fbreak
+There are 2 thread name contexts ---
+the thread name to call and the thread entry reference:\fbreak
+Thread name procedure:\fbreak
+Name supplied by the ``parallel-thread-function'' construct.\fbreak
+Eample of a thread procedure from the ``eol.lex'' grammar:\fbreak
+yacco2::THR \_YACCO2\_CALL\_TYPE NS\_eol::TH\_eol(yacco2::Parser* To\_judge);\fbreak
+Notice that it is caccooned by its namespace supplied by its ``parallel-parser''
+grammar contruct.
+\fbreak
+\fbreak
+\INDENT{.3in}{parallel-parser}
+\INDENT{.3in}{(}
+\INDENT{.4in}{parallel-thread-function}
+\INDENT{.5in}{TH\_angled\_string}
+\INDENT{.4in}{***}
+\INDENT{.4in}{parallel-la-boundary}
+\INDENT{.5in}{eolr}
+\INDENT{.4in}{***}
+\INDENT{.3in}{)}
+\fbreak
+\fbreak
+Thread entry Format: Iyyy where yyy is the thread entry name
+gened from \O2{}linker: Ixxx where xxx is thread name
+supplied by the ``parallel-thread-function'' construct.\fbreak
+Ex: ITH\_eol where eol grammar has ``parallel-thread-function'' as TH\_eol \fbreak
+\fbreak
+\fbreak
+Thread dispatch tables:\fbreak
+These are arrays sprinkled thru out the LR1 states.
+They provide the list of thread entries within the state
+of the threads to be dispatched.
+Their referenced names use the thread entry ``ITH\_eol'' format.
+\fbreak
+Within the lr1 state, any called threads will contain a dispatch
+array of thread procedure addresses. \fbreak
+\fbreak
+Arbitrators name convention:\fbreak
+Format: AR\_yyy where yyy is the rule name containing thread use.
+A lr state calling threads could have an arbitrator.
+This depends whether a rule that closured the called threads into the state has
+c++ code inside the
+``arbitrator-code'' contruct. This contruct can be empty signifying that the
+called threads are deterministic: possibly only
+one of the called threads will return a terminal and no arbritation required to
+choose between 2 or more returned terminals.
+\fbreak
+\fbreak
+
+@* Template of Grammar's header file declaration: |OP_GRAMMAR_HEADER|.\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) Includes of \O2 library and grammar vocabulary}
+\INDENT{.1in}{3) User-prefix-declaration directive from grammar}
+\INDENT{.1in}{4) grammar include guard declaration}
+\INDENT{.2in}{4.1) namespace declaration of grammar}
+\INDENT{.3in}{4.1.0) fsm's rules reuse table extern}
+\INDENT{.3in}{4.1.1) Possible thread entry extern if it's thread grammar}
+\INDENT{.3in}{4.1.2) fsm's 1st state extern reference}
+\INDENT{.3in}{4.1.3) Using \O2 and enumerate namespaces}
+\INDENT{.3in}{4.1.4) Fsm class declaration}
+\INDENT{.4in}{4.1.4.1) Enumeration of grammar's rules and subrules}
+\INDENT{.4in}{4.1.4.2) comments about number of la sets and states}
+\INDENT{.4in}{4.1.4.3) ctor of fsm --- constructor directive is implementation only}
+\INDENT{.4in}{4.1.4.4) dtor of fsm --- destructor directive is implementation only}
+\INDENT{.4in}{4.1.4.5) op and failed directives --- directives are implementation only}
+\INDENT{.4in}{4.1.4.6) user-declaration}
+\INDENT{.4in}{4.1.4.7) Create subrules to rules mapping}
+\INDENT{.3in}{4.1.5) grammar's rules declarations for forward references}
+\INDENT{.3in}{4.1.6) grammar's rules class definitions}
+\INDENT{.1in}{5) User-suffix-declaration directive from grammar}
+@*3 |intro_comment| --- Intro comments for emitted files.\fbreak
+A fixed format C++ comment describing the outputted file name
+with date / time stamp occurance.
+Used for all grammar's emitted files:\fbreak
+\INDENT{.2in}{1) xxx.h fsm header file with rule declarations}
+\INDENT{.2in}{2) xxx.cpp fsm class and rules implementation}
+\INDENT{.2in}{3) xxxsym.cpp reduce\_rhs\_of\_rule procedure and perchance to thread imps}
+\INDENT{.2in}{4) xxxtbl.cpp finite automaton --- the lr1 state network implementation}
+\fbreak
+Ip:\fbreak
+\INDENT{.4in}{1) output string}
+\INDENT{.4in}{2) file name suffix : 1 of .h, .cpp, sym.cpp, tbl.cpp}
+@<accrue source for emit@>+=
+void intro_comment
+(std::ofstream& Op_str,const char* File_name){@/
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP op_template =
+ "/*\n"@/
+ " File: %s\n"@/
+ " Date and Time: %s\n"@/
+ "*/";
+
+ int x = sprintf(big_buf_
+ ,op_template
+ ,File_name
+ ,DATE_AND_TIME()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |grammar_header_includes|.\fbreak
+Get those include files from \O2 library --- the
+canned \O2 library header, LRk and Rc vocabularies
+normally come from the \O2 library,
+along with the grammar's local enumeration header,
+Error and Terminal vocabularies.
+The libraries order is important as
+the Errors vocabulary can be used by the Terminals and Rc
+vocabularies.
+@<accrue source for emit@>+=
+void grammar_header_includes
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lrk_ph = O2_LRK_PHASE;
+ T_rc_phrase* rc_ph = O2_RC_PHASE;
+ T_error_symbols_phrase* err_ph = O2_ERROR_PHASE;
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_list =
+ "#include \"%s\"\n" // yacco2 library HWired
+ "#include \"%s.h\"\n" // enumeration
+ "#include \"%s.h\"\n" // lrk symbols vocabulary
+ "#include \"%s.h\"\n" // Errors vocabulary
+ "#include \"%s.h\"\n" // Terminal vocabulary
+ "#include \"%s.h\""; // raw characters vocabulary
+
+ int x = sprintf(big_buf_@/
+ ,include_list@/
+ ,O2_library_file@/
+ ,enum_ph->filename_id()->identifier()->c_str()@/
+ ,lrk_ph->filename_id()->identifier()->c_str()@/
+ ,err_ph->filename_id()->identifier()->c_str()@/
+ ,t_ph->filename_id()->identifier()->c_str()@/
+ ,rc_ph->filename_id()->identifier()->c_str()@/
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+@*3 |user_prefix_declaration_for_header|.\fbreak
+Grammar writer supplied code thru the ``user-prefix-declaration''
+directive to be added to the grammar's header file.
+@<accrue source for emit@>+=
+void user_prefix_declaration_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP upd_code = "%s";
+
+T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+SDC_MAP_type* dir_map = fsm_class->directives_map();
+SDC_MAP_ITER_type i = dir_map->find(SDC_user_prefix_declaration);
+if(i == dir_map->end()) return;
+@=T_user_prefix_declaration* upd = (T_user_prefix_declaration*)i->second;@>@/
+ int x = sprintf(big_buf_
+ ,upd_code
+ ,upd->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+
+@*3 |thread_entry_extern_for_header|.\fbreak
+If the grammar is a thread then
+its extern reference must be declared in the header.
+I fetch ``parallel-thread-function'''s thread name.
+@<accrue source for emit@>+=
+void thread_entry_extern_for_header
+(std::ofstream& Op_str){@/
+T_parallel_parser_phrase* pp_ph = O2_PP_PHASE;
+if(pp_ph == 0){
+ Op_str << "// monolithic grammar: no thread" << endl;
+ return;
+}
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP th_extern = "extern yacco2::Thread_entry I%s;\n";
+
+ int x = sprintf(big_buf_
+ ,th_extern
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |using_ns_for_header|.\fbreak
+@<accrue source for emit@>+=
+void using_ns_for_header
+(std::ofstream& Op_str){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP default_ns_use = @/
+ "using namespace %s;// enumerate\n"@/
+ "using namespace yacco2;";
+
+ int x = sprintf(big_buf_
+ ,default_ns_use
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |fsm_enum_rules_subrules_for_header|.\fbreak
+Enumerates used by |reduce_rhs_of_rule|.
+The enumerate values for the rules begin after the grammar's terminal vocabularies.
+The subrules range is 1..n where n is the total numder of all subrules
+supplied by the rules.
+@<accrue source for emit@>+=
+void fsm_enum_rules_subrules_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP enumeration_of_rules_sbrules = @/
+ " enum rules_and_subrules{\n"@/
+ " start_of_rule_list = %s::T_Enum::sum_total_T";
+ int x = sprintf(big_buf_
+ ,enumeration_of_rules_sbrules
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ // loop thru the rules
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ int overall_subrules_nos(0);
+ int current_rule_no(-1);// rel to zero
+ int no_rules = rules_ph->rules_alphabet()->size();
+ KCHARP rule_enum = @/
+ " ,R_%s_ = %i//start_of_rule_list + %i";
+ for(;i!=ie;++i){
+ ++current_rule_no;
+ rule_def* rd = *i;
+ x = sprintf(big_buf_
+ ,rule_enum
+ ,rd->rule_name()->c_str()
+ ,rd->enum_id()
+ ,current_rule_no++
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ KCHARP subrule_enum = @/
+ " ,rhs%i_%s_ = %i";
+ for(;j != je;++j){
+ T_subrule_def* srd = *j;
+ ++overall_subrules_nos;
+ int x = sprintf(big_buf_
+ ,subrule_enum
+ ,srd->subrule_no_of_rule()
+ ,rd->rule_name()->c_str()
+ ,overall_subrules_nos
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ KCHARP end_enumeration_of_rules_sbrules = @/
+ " };";
+ Op_str << end_enumeration_of_rules_sbrules<<endl;
+}
+
+@*3 |fsm_map_subrules_to_rules_for_header| --- Optimization.\fbreak
+Create the array to map the subrules into their rules.
+This is used to optimize rule crete-run-delete cylce by recycling.
+Note, the subrules enumerate is 1..x and
+ the rule's enumerate must be remapped to 0..number of rules-1.
+To handle array accessing to 0, an extra entry for 0 is generated.
+@<accrue source for emit@>+=
+void fsm_map_subrules_to_rules_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP array_of_subrules_to_rules_mapping = @/
+ " fsm_rules_reuse_table_type fsm_rules_reuse_table;\n"
+ " static int rhs_to_rules_mapping_[%i];";
+
+
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ // loop thru the rules
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ int overall_subrules_nos(0);
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ for(;j != je;++j){
+ ++overall_subrules_nos;
+ }
+ }
+ ++overall_subrules_nos;// extra subrule due to [0] needed
+ int x = sprintf(big_buf_
+ ,array_of_subrules_to_rules_mapping
+ ,overall_subrules_nos
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |fsm_comments_about_la_sets_and_states|.\fbreak
+@<accrue source for emit@>+=
+void fsm_comments_about_la_sets_and_states
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP no_of_la_sets_and_states = @/
+ " //no of la sets = %i\n"@/
+ " //no of states = %i";
+ int x = sprintf(big_buf_
+ ,no_of_la_sets_and_states
+ ,COMMON_LA_SETS.size()
+ ,NO_LR1_STATES
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |fsm_class_declaration_for_header|.\fbreak
+The dtor, ``op'', and ``user-declaration'' procedures are gened when their
+directives present.
+@<accrue source for emit@>+=
+void fsm_class_declaration_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP class_fsm = @/
+ "class %s: public yacco2::CAbs_fsm {\n"@/
+ " public:";
+ int x = sprintf(big_buf_
+ ,class_fsm
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ fsm_enum_rules_subrules_for_header(Op_str);
+ fsm_comments_about_la_sets_and_states(Op_str);
+
+ KCHARP ctor_fsm = @/
+ " %s();";
+
+ x = sprintf(big_buf_
+ ,ctor_fsm
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP dtor_fsm = @/
+ " ~%s();";
+ x = sprintf(big_buf_
+ ,dtor_fsm
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP op_failed = @/
+ " void op();\n"@/
+ " bool failed();";
+ Op_str << op_failed<<endl;
+
+
+ KCHARP reduce_rhs = @/
+ " void reduce_rhs_of_rule\n"@/
+ " (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);";
+ Op_str << reduce_rhs<<endl;
+ fsm_map_subrules_to_rules_for_header(Op_str);
+ KCHARP user_declaration = @/
+ " %s";
+
+ SDC_MAP_type* dir_map = fsm_class->directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_user_declaration);
+ if(i != dir_map->end()){
+ @=T_user_declaration* ud = (T_user_declaration*)i->second;@>@/
+ int x = sprintf(big_buf_
+ ,user_declaration
+ ,ud->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+ KCHARP end_class_fsm = @/
+ " };";
+ Op_str << end_class_fsm<<endl;
+
+}
+@*3 |forward_refs_of_rules_declarations_for_header|.\fbreak
+@<accrue source for emit@>+=
+void forward_refs_of_rules_declarations_for_header
+(std::ofstream& Op_str){@/
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP forward_ref = @/
+ "struct %s;";
+ // loop thru the rules
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ int x = sprintf(big_buf_
+ ,forward_ref
+ ,rd->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 |rules_class_defs_for_header|.\fbreak
+@<accrue source for emit@>+=
+void rules_class_defs_for_header
+(std::ofstream& Op_str){@/
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP end_rule_def = @/
+ "};\n";
+ @<gen fsm rules declarations@>;
+}
+
+@
+@<gen fsm rules declarations@>=
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ KCHARP start_rule_def = @/
+ "struct %s:public yacco2::CAbs_lr1_sym {\n"@/
+ " %s(yacco2::Parser* P);";
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+@<gen rule's arbitrator procedure declaration@>;
+ int x = sprintf(big_buf_
+ ,start_rule_def
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ T_rule_lhs_phrase* rlhs = rd->rule_lhs();
+ if(rlhs != 0){
+ SDC_MAP_type* dir_map = rlhs->lhs_directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_destructor);
+ if(i != dir_map->end()){
+ KCHARP rule_def_dtor = @/
+ " static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+ int x = sprintf(big_buf_
+ ,rule_def_dtor
+ ,rd->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ i = dir_map->find(SDC_op);
+ if(i != dir_map->end()){
+ KCHARP rule_def_op = @/
+ " void op();";
+ Op_str << rule_def_op<<endl;
+ }
+ i = dir_map->find(SDC_constructor);
+ if(i != dir_map->end()){
+ KCHARP rule_def_ctor = @/
+ " void ctor();";
+ Op_str << rule_def_ctor<<endl;
+ }
+ i = dir_map->find(SDC_user_declaration);
+ if(i != dir_map->end()){
+ @=T_user_declaration* ud = (T_user_declaration*)i->second;@>@/
+ Op_str << ud->syntax_code()->syntax_code()->c_str() <<endl;
+ }
+ }
+ @<gen fsm subrules declarations@>;
+
+ }
+@*3 Gen rule's arbitrator procedure declaration.\fbreak
+It is declared outside of the rule making its call easier from
+the generated lr1 tables.
+@<gen rule's arbitrator procedure declaration@>=
+ if(rd->parallel_mntr() != 0){
+ T_parallel_monitor_phrase* pp_phrase = rd->parallel_mntr();
+ if(rd->parallel_mntr()->mntr_directives_map()->empty() != true){
+ SDC_MAP_type* dir_map = pp_phrase->mntr_directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_arbitrator_code);
+ if(i !=dir_map->end()){
+ @=T_arbitrator_code* ac = (T_arbitrator_code*)i->second;@>@/
+ string::size_type idx =
+ ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+ if(idx != string::npos){
+ KCHARP rule_s_arbitrator =@/
+ "yacco2::THR _YACCO2_CALL_TYPE\n"@/
+ "AR_%s(yacco2::Parser* Caller_pp);// rule's arbitrator";
+
+ int x = sprintf(big_buf_
+ ,rule_s_arbitrator
+ ,rd->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ RULES_HAVING_AR.insert(rd);
+ }
+ }
+ }
+ }
+
+
+@*3 Gen fsm subrules declarations.\fbreak
+Optimization: only gen definition if there is syntax directed code.
+@<gen fsm subrules declarations@>=
+ KCHARP sub_rule_def_public = @/
+ " public:";
+ Op_str << sub_rule_def_public<<endl;
+ KCHARP sub_rule_def = @/
+ " void sr%i();";
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ for(int xx = 1;j != je;++j,++xx){
+ T_subrule_def* srd = *j;
+ SDC_MAP_type* sdrmap = srd->subrule_directives();
+ if(!sdrmap->empty()){ // any syntax directed code, call it
+ int x = sprintf(big_buf_
+ ,sub_rule_def
+ ,xx
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ Op_str << end_rule_def<<endl;
+
+@*3 |possible_thread_procedure_declaration|.\fbreak
+2 parts:
+\item{1)} the thread declaration
+\item{2)} the procedure twin to thread declaration: an experiment
+in trying to improve threading overhead with all
+its mutex paraphernalia. Only happens when
+only 1 thread can run to call it as a local procedure.
+The part needed improving is in the ctor/use/dtor action
+caused by the localness of Parser and the fsm table.
+Now it will be newed when first called.
+
+@<accrue source for emit@>+=
+void possible_thread_procedure_declaration
+(std::ofstream& Op_str){@/
+ if(O2_PP_PHASE == 0)return;
+ T_parallel_parser_phrase* pp_ph = O2_PP_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP thd_proc = @/
+ "yacco2::THR _YACCO2_CALL_TYPE\n"@/
+ "%s(yacco2::Parser* Caller);// called thread\n"
+ "yacco2::THR_result _YACCO2_CALL_TYPE\n"@/
+ "PROC_%s(yacco2::Parser* Caller);// called thread's twin the procedure";
+ int x = sprintf(big_buf_
+ ,thd_proc
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |rules_reuse_table_declaration| --- Optimization.\fbreak
+Table definition supporting recycled rules.
+Gen specifically per rule from the findings determined by
+|rules_use_cnt.lex| grammar;
+@<accrue source for emit@>+=
+void rules_reuse_table_declaration
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ int no_rules = rules_ph->rules_alphabet()->size();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP rules_recycled_table_type = @/
+ "struct fsm_rules_reuse_table_type{\n"@/
+ " fsm_rules_reuse_table_type();\n"@/
+ " int no_rules_entries_;\n"@/
+ " Per_rule_s_reuse_table* per_rule_s_table_[%i];\n"@/
+ "};";
+ int x = sprintf(big_buf_
+ ,rules_recycled_table_type
+ ,no_rules
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |namespace_for_header|.\fbreak
+@<accrue source for emit@>+=
+void namespace_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP ns_of_grammar_start = @/
+ "namespace %s {";
+ int x = sprintf(big_buf_
+ ,ns_of_grammar_start
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ possible_thread_procedure_declaration(Op_str);
+ using_ns_for_header(Op_str);
+ rules_reuse_table_declaration(Op_str);
+ fsm_class_declaration_for_header(Op_str);
+ forward_refs_of_rules_declarations_for_header(Op_str);
+ rules_class_defs_for_header(Op_str);
+ KCHARP ns_of_grammar_end = @/
+ "} // end of namespace\n";
+ Op_str << ns_of_grammar_end<<endl;
+}
+
+@*3 |state_1_extern|.\fbreak
+@<accrue source for emit@>+=
+void state_1_extern
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP state_extern = @/
+ "extern yacco2::State S1_%s;";
+ int x = sprintf(big_buf_
+ ,state_extern
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+@*3 |grammar_include_guard_for_header|.\fbreak
+@<accrue source for emit@>+=
+void grammar_include_guard_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP signal_guard_start = @/
+ "#ifndef __%s_h__\n"@/
+ "#define __%s_h__ 1";
+ int x = sprintf(big_buf_
+ ,signal_guard_start
+ ,fsm_ph->filename_id()->identifier()->c_str()
+ ,fsm_ph->filename_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ grammar_header_includes(Op_str);
+ user_prefix_declaration_for_header(Op_str);
+ thread_entry_extern_for_header(Op_str);
+ state_1_extern(Op_str);
+ namespace_for_header(Op_str);
+ KCHARP signal_guard_end = @/
+ "#endif";
+ Op_str << signal_guard_end<<endl;
+}
+@*3 |user_suffix_declaration_for_header|.\fbreak
+Grammar writer supplied code thru the ``user-suffix-declaration''
+directive to be added to the grammar's header file.
+@<accrue source for emit@>+=
+void user_suffix_declaration_for_header
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+
+T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+SDC_MAP_type* dir_map = fsm_class->directives_map();
+SDC_MAP_ITER_type i = dir_map->find(SDC_user_suffix_declaration);
+if(i == dir_map->end()) return;
+@=T_user_suffix_declaration* upd = (T_user_suffix_declaration*)i->second;@>@/
+ KCHARP upd_code = "%s";
+ int x = sprintf(big_buf_
+ ,upd_code
+ ,upd->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_GRAMMAR_HEADER| implementation.\fbreak
+@<accrue source for emit@>+=
+void OP_GRAMMAR_HEADER(TOKEN_GAGGLE& Error_queue){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ string fn(fsm_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_fsmheader;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_fsmheader_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_GRAMMAR_HEADER",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ grammar_include_guard_for_header(Op_file);
+ user_suffix_declaration_for_header(Op_file);
+ Op_file.close();
+}
+
+@* Template of Grammar's fsm file implementation: |OP_GRAMMAR_CPP|.\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) Include of grammar's header}
+\INDENT{.1in}{3) using namespaces}
+\INDENT{.1in}{4) fill in rules reuse table}
+\INDENT{.1in}{5) Fsm class implementation}
+\INDENT{.1in}{6) grammar's rules / subrules implementations}
+@*3 |fsm_cpp_includes|.\fbreak
+Get grammar's include file.
+@<accrue source for emit@>+=
+void fsm_cpp_includes
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_list =
+ "#include \"%s.h\""; // grammar's header
+
+ int x = sprintf(big_buf_
+ ,include_list
+ ,fsm_ph->filename_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |using_ns_for_fsm_cpp|.\fbreak
+@<accrue source for emit@>+=
+void using_ns_for_fsm_cpp
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lrk_ph = O2_LRK_PHASE;
+ T_rc_phrase* rc_ph = O2_RC_PHASE;
+ T_error_symbols_phrase* err_ph = O2_ERROR_PHASE;
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP default_ns_use = @/
+ "using namespace %s;// enumerate\n"@/
+ "using namespace %s;// error symbols\n"@/
+ "using namespace %s;// lrk \n"@/
+ "using namespace %s;// terminals\n"@/
+ "using namespace %s;// rc \n"@/
+ "using namespace %s;// yacco2 library\n"@/
+ "using namespace %s;// grammar's ns\n"@/
+ "// first set terminals";
+
+ int x = sprintf(big_buf_
+ ,default_ns_use
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ ,err_ph->namespace_id()->identifier()->c_str()@/
+ ,lrk_ph->namespace_id()->identifier()->c_str()@/
+ ,t_ph->namespace_id()->identifier()->c_str()@/
+ ,rc_ph->namespace_id()->identifier()->c_str()@/
+ ,"yacco2"@/
+ ,fsm_ph->namespace_id()->identifier()->c_str()@/
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+@*3 |rules_reuse_table_implementation| --- Optimization.\fbreak
+Table definition supporting recycled rules.
+Use count per rule garnered from the |rules_use_cnt.lex| grammar.
+@<accrue source for emit@>+=
+void rules_reuse_table_implementation
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ int no_rules= rules_ph->rules_alphabet()->size();
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP rules_recycled_table_type = @/
+ "fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){\n"
+ " no_rules_entries_ = %i;";
+ int x = sprintf(big_buf_
+ ,rules_recycled_table_type
+ ,no_rules
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ KCHARP per_rule_s_table_ref_type = @/
+ " per_rule_s_table_[%i] = new Per_rule_s_reuse_table();";
+
+ for(int xx = 1;xx <= no_rules;++xx){
+ int x0 = xx - 1;
+ x = sprintf(big_buf_
+ ,per_rule_s_table_ref_type
+ ,x0
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ Op_str <<"}"<<endl;
+}
+
+@*3 |fsm_map_subrules_to_rules_table_imp| --- Optimization.\fbreak
+Load up the table to map subrules into their rules numeration.
+@<accrue source for emit@>+=
+void fsm_map_subrules_to_rules_table_imp
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ int overall_subrules_nos(0);
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ for(;j != je;++j){
+ ++overall_subrules_nos;
+ }
+ }
+ ++overall_subrules_nos;// extra subrule due to [0] needed
+
+ KCHARP array_of_subrules_to_rules_mapping_start = @/
+ "int %s::rhs_to_rules_mapping_[%i] = {\n"@/
+ " -1";// make room for false [0] entry
+ int x = sprintf(big_buf_
+ ,array_of_subrules_to_rules_mapping_start
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,overall_subrules_nos
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP subrules_to_rule_mapping = @/
+ " ,%i // subrule %i for rule %i";
+
+ KCHARP array_of_subrules_to_rules_mapping_end = @/
+ "};%s";
+
+
+ // loop thru the rules
+ i = rules_ph->crt_order()->begin();
+ ie = rules_ph->crt_order()->end();
+ overall_subrules_nos = 0;
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ for(;j != je;++j){
+ ++overall_subrules_nos;
+ int x = sprintf(big_buf_
+ ,subrules_to_rule_mapping
+ ,rd->rule_no()-1
+ ,overall_subrules_nos
+ ,rd->rule_no()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ x = sprintf(big_buf_
+ ,array_of_subrules_to_rules_mapping_end," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ enum_ph->total_no_subrules(overall_subrules_nos);
+}
+
+@*3 |fsm_class_implementation|.\fbreak
+Directives: --- see |fsm_class_phrase_th| grammar\fbreak
+\INDENT{.3in}{1) constructor}
+\INDENT{.3in}{2) destructor}
+\INDENT{.3in}{3) failed}
+\INDENT{.3in}{4) op}
+\INDENT{.3in}{5) load up subrles mapping into rules}
+\INDENT{.3in}{6) user-implementation roll your own code if present}
+\INDENT{.3in}{7) user-imp-tbl --- injection code for xxxtbl.cpp where xxx is grammar name}
+\INDENT{.3in}{8) user-imp-sym --- injection code for xxxsym.cpp where xxx is grammar name}
+\fbreak
+Points 6 and 7 will be dealt with in their own ``cpp'' implementations.
+Note: added deletion of each ``recycling table'' per rule within the dtor.
+@<accrue source for emit@>+=
+void fsm_class_implementation
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP ctor_fsm = @/
+ " %s::\n"@/
+ " %s()\n"@/
+ " :yacco2::CAbs_fsm\n"@/
+ " (\"%s\"\n"@/
+ " ,\"%s\"\n"@/
+ " ,\"%s\"\n"@/
+ " ,%s\n"@/
+ " ,\"%s\"\n"@/
+ " ,\"%s\"\n"@/
+ " ,S1_%s){\n"@/
+ " %s\n"@/
+ " }";
+ SDC_MAP_type* dir_map = fsm_class->directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_constructor);
+ const char* cc_str(0);
+ if(i != dir_map->end()){
+ @=T_constructor* cc = (T_constructor*)i->second;@>@/
+ cc_str = cc->syntax_code()->syntax_code()->c_str();
+ }else{
+ cc_str = "";
+ }
+
+ int x = sprintf(big_buf_
+ ,ctor_fsm
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_ph->fsm_id()->c_string()->c_str()
+ ,fsm_ph->version()->c_string()->c_str()
+ ,fsm_ph->date()->c_string()->c_str()
+ ,fsm_ph->debug()->c_string()->c_str()
+ ,fsm_ph->comment()->c_string()->c_str()
+ ,DATE_AND_TIME()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,cc_str
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP dtor_rtn_start = @/
+ " \n"@/
+ "%s::~%s(){\n"@/
+ "%s";
+ i = dir_map->find(SDC_destructor);
+ const char* dc_str(0);
+ if(i != dir_map->end()){
+ @=T_destructor* dc = (T_destructor*)i->second;@>@/
+ dc_str = dc->syntax_code()->syntax_code()->c_str();
+ }else{
+ dc_str = "";
+ }
+ x = sprintf(big_buf_
+ ,dtor_rtn_start
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,dc_str
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+// delete those recycled rules
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ int no_rules= rules_ph->rules_alphabet()->size();
+ KCHARP delete_recycled_rules = @/
+ " for(int x = 0;x < %i;++x){\n"@/
+ " ///delete fsm_rules_reuse_table.per_rule_s_table_[x];\n"@/
+ " }";
+
+ x = sprintf(big_buf_
+ ,delete_recycled_rules
+ ,no_rules
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ KCHARP dtor_rtn_end = @/
+ "}%s\n"
+ "";
+ x = sprintf(big_buf_
+ ,dtor_rtn_end," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP failed_rtn = @/
+ " bool %s::failed(){\n"@/
+ " %s\n"@/
+ " }";
+
+ i = dir_map->find(SDC_failed);
+ const char* fc_str(0);
+ if(i != dir_map->end()){
+ @=T_failed* fc = (T_failed*)i->second;@>@/
+ fc_str = fc->syntax_code()->syntax_code()->c_str();
+ }else{
+ fc_str = " return false;";
+ }
+ x = sprintf(big_buf_
+ ,failed_rtn
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fc_str
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ KCHARP op_rtn = @/
+ " void %s::op(){%s\n}";
+ i = dir_map->find(SDC_op);
+ const char* oc_str(0);
+ if(i != dir_map->end()){
+ @=T_op* oc = (T_op*)i->second;@>@/
+ oc_str = oc->syntax_code()->syntax_code()->c_str();
+ }else{
+ oc_str = "";
+ }
+ x = sprintf(big_buf_
+ ,op_rtn
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,oc_str
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ fsm_map_subrules_to_rules_table_imp(Op_str);
+ dir_map = fsm_class->directives_map();
+ i = dir_map->find(SDC_user_implementation);
+ if(i != dir_map->end()){
+ @=T_user_implementation* ui = (T_user_implementation*)i->second;@>@/
+ Op_str << ui->syntax_code()->syntax_code()->c_str()<<endl;
+ }
+}
+
+@*3 |rules_subrules_implementations|.\fbreak
+Rule directives: See |rule_lhs_phrase| grammar\fbreak
+\INDENT{.3in}{1) constructor 2) destructor}
+\INDENT{.3in}{3) op 4) user-implementation}
+\fbreak
+Subrule directive: See |subrule_def| grammar\fbreak
+\INDENT{.3in}{1) op}
+@<accrue source for emit@>+=
+void rules_subrules_implementations
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ @<loop thru the rules@>;
+}
+@*4 Go thru rules.
+@<loop thru the rules@>=
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ @<deal with arbitrator code@>;
+ T_rule_lhs_phrase* rlhs = rd->rule_lhs();
+ const char* ctor_code(0);
+ const char* dtor_code(0);
+ string dtor_name("0");
+ const char* op_code(0);
+ const char* user_imp_code(0);
+ T_destructor* dtor(0);
+ if(rlhs != 0){
+ SDC_MAP_type* dir_map = rlhs->lhs_directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_constructor);
+ if(i != dir_map->end()){
+ @=T_constructor* ctor = (T_constructor*)i->second;@>@/
+ ctor_code = ctor->syntax_code()->syntax_code()->c_str();
+ }
+ i = dir_map->find(SDC_destructor);
+ if(i != dir_map->end()){
+ @=dtor = (T_destructor*)i->second;@>@/
+ dtor_code = dtor->syntax_code()->syntax_code()->c_str();
+ KCHARP dtor_nm = @/
+ "&dtor_%s";
+ sprintf(big_buf_
+ ,dtor_nm
+ ,rd->rule_name()->c_str()
+ );
+ dtor_name.clear();
+ dtor_name += big_buf_;
+ }
+ i = dir_map->find(SDC_op);
+ if(i != dir_map->end()){
+ @=T_op* op = (T_op*)i->second;@>@/
+ op_code = op->syntax_code()->syntax_code()->c_str();
+ }
+
+ i = dir_map->find(SDC_user_implementation);
+ if(i != dir_map->end()){
+ @=T_user_implementation* uimp= (T_user_implementation*)i->second;@>@/
+ user_imp_code = uimp->syntax_code()->syntax_code()->c_str();
+ }
+ }
+
+ KCHARP rule_def_imp = @/
+ "%s::%s(yacco2::Parser* P)\n"@/
+ " :CAbs_lr1_sym\n"@/
+ " (\"%s\",%s,%s::R_%s_,P,%s,%s){\n"@/
+ "}\n";
+ string ad;
+ if(rd->autodelete() == true){
+ ad += "true";
+ }else{
+ ad += "false";
+ }
+ string ab;
+ if(rd->autoabort() == true){
+ ab += "true";
+ }else{
+ ab += "false";
+ }
+ int x = sprintf(big_buf_
+ ,rule_def_imp
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,dtor_name.c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,rd->rule_name()->c_str()
+ ,ad.c_str()
+ ,ab.c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+
+ if(dtor_code != 0){
+ std::string::size_type r =
+ dtor->syntax_code()->syntax_code()->find("ABORT_STATUS");
+ KCHARP rule_def_dtor = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ KCHARP rule_def_dtor_noabort = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ int x;
+ if(r != std::string::npos){ // using abort status
+ x = sprintf(big_buf_
+ ,rule_def_dtor
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,dtor_code
+ );
+ }else{
+ x = sprintf(big_buf_
+ ,rule_def_dtor_noabort
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,dtor_code
+ );
+ }
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ if(op_code != 0){
+ KCHARP rule_def_op = @/
+ "void %s::op(){\n"@/
+ " sstrace_rulesss\n"@/
+ " %s\n"@/
+ "}";
+ int x = sprintf(big_buf_
+ ,rule_def_op
+ ,rd->rule_name()->c_str()
+ ,op_code
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+ if(ctor_code != 0){
+ KCHARP rule_def_ctor = @/
+ "void %s::ctor(){\n"@/
+ " %s\n"@/
+ "}";
+ int x = sprintf(big_buf_
+ ,rule_def_ctor
+ ,rd->rule_name()->c_str()
+ ,ctor_code
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+ if(user_imp_code != 0){
+ Op_str << user_imp_code<<endl;
+ }
+ @<loop thru the subrules@>;
+ }
+
+@*4 Deal with arbitrator code.\fbreak
+@<deal with arbitrator code@>=
+ if(rd->parallel_mntr() != 0){
+ @=T_parallel_monitor_phrase* pp_phrase = rd->parallel_mntr();@>@/
+ @<is there arbitration code? --- yes output@>;
+ }
+ @
+ @<is there arbitration code? --- yes output@>=
+ if(pp_phrase->mntr_directives_map()->empty() != true){
+ SDC_MAP_type* pp_map = pp_phrase->mntr_directives_map();
+ SDC_MAP_ITER_type p = pp_map->find(SDC_arbitrator_code);
+ if(p != pp_map->end()){
+ @=T_arbitrator_code* ac = (T_arbitrator_code*)p->second;@>@/
+ string::size_type idx =
+ ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+ if(idx != string::npos){
+ KCHARP rule_s_arbitrator_imp =@/
+ "yacco2::THR _YACCO2_CALL_TYPE\n"@/
+ "%s::AR_%s(yacco2::Parser* Caller_pp){\n"@/
+ " yacco2::KCHARP ar_name = \"AR_%s\";\n"@/
+ "#include \"war_begin_code.h\"\n"@/
+ " %s\n"@/
+ "#include \"war_end_code.h\"\n"@/
+ "}\n";
+ int x = sprintf(big_buf_
+ ,rule_s_arbitrator_imp
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,ac->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ }
+
+@*4 Emit the syntax directed code(sdc).\fbreak
+2 optimizations are done: gen the definition if there is syntax directed code,
+and the second optimization gens the
+ stack frame when it is referenced within the syntax directed code.
+It is crude in determining whether the sdc uses it:
+see if there is a reference to
+the local stack frame variable ``sf'' searched within the code string.
+The stack frame variable contains the subrule's items having each parameter start with ``p''.
+To reference a subrule's item, one uses the |sf->px__| whereby the stacked item is
+x starting from 1. |p10__| would reference the tenth item on the stack.
+The parameter count starts from the left of the subrule.
+An epsilon subrule has no parameters. There is no c++ sdc validity check done here.
+It leaves it to the c++ compiler to digest \O2's code.
+@<loop thru the subrules@>=
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ int nosrs = sr_ph->no_subrules();
+ for(int xx = 1;j != je;++j,++xx){
+ T_subrule_def* srd = *j;
+ AST* sr_t = AST::get_spec_child(*srd->subrule_s_tree(),1);
+ int no_parms = srd->no_of_elems() - 1;// remove eos
+ KCHARP sub_rule_def_imp = @/
+ "void %s::sr%i(){";
+ SDC_MAP_type* dir_map = srd->subrule_directives();
+ if(dir_map->empty() != true){ // gen if there is syntax directed code
+ int x = sprintf(big_buf_
+ ,sub_rule_def_imp
+ ,rd->rule_name()->c_str()
+ ,xx
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ SDC_MAP_ITER_type i = dir_map->find(SDC_op);
+ if(i != dir_map->end()){
+ @=T_op* rhsc = (T_op*)i->second;@>@/
+ std::string::size_type idx;
+ idx = rhsc->syntax_code()->syntax_code()->find("sf->p");
+// any reference to the stack frame within the sdc?
+ if(idx == std::string::npos) goto write_out_op_code;
+ @<gen stack frame def and equate it to the parse stack@>;
+ write_out_op_code:;
+ KCHARP sub_rule_def_op_code = @/
+ " %s";// rhs op
+ int x =sprintf(big_buf_
+ ,sub_rule_def_op_code
+ ,rhsc->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ KCHARP sub_rule_def_end = @/
+ "}\n";
+ Op_str << sub_rule_def_end<<endl;
+ }
+ }
+@*4 Gen stack frame definition and equate it to the parse stack.\fbreak
+There are 3 conditions that need explanation:\fbreak
+\INDENT{.2in}{1) LR1\_ALL\_SHIFT\_OPERATOR --- \ALLshift}
+\INDENT{.2in}{2) LR1\_INVISIBLE\_SHIFT\_OPERATOR --- \INVshift}
+\INDENT{.2in}{2) LR1\_QUESTIONABLE\_SHIFT\_OPERATOR --- \QUEshift}
+\fbreak
+The ``all shift'' operator is a proxy that represents
+ a wild terminal on the stack.
+It has no specific representation! This is why the
+terminal has to be represented by the abstract terminal ``CAbs\_lr1\_sym''.
+To get its specifics, testing of its enumerate coupled with the cast statement
+now turns it into a somebody.
+
+The ``invisible shift'' operator is a proxy epsilon.
+It does not need to reference the parse stack frame so optimize it out.
+The ``questionable shift'' operator is
+handles error setection points within the grammar.
+It does not need to reference the parse stack frame so optimize it out.
+
+To introduce chained-called-procedures, the ``eosubrule'' was attached to
+the thread call expressions and their variants.
+To note the called thread or procedure is not part of the
+parse stack so drop it and re-align the number of subrule
+parameters.
+@<gen stack frame def and equate it to the parse stack@>=
+ for(int y=1;y<=no_parms;++y){// gen stack frame items
+ bool eos_thd_or_proc(false);
+ CAbs_lr1_sym* sym = AST::content(*sr_t);
+ const char* parm_name(0);
+ switch (sym->enumerated_id__){
+ case T_Enum::T_refered_rule_:{
+ @=refered_rule* rr = (refered_rule*)sym;@>@/
+ parm_name = rr->its_rule_def()->rule_name()->c_str();
+ break;
+ }
+ case T_Enum::T_refered_T_:{
+ @=refered_T* rt = (refered_T*)sym;@>@/
+ T_terminal_def* td = rt->its_t_def();
+ if(td->enum_id() == LR1_ALL_SHIFT_OPERATOR){
+ parm_name = "CAbs_lr1_sym";
+ break;
+ }
+ if(td->enum_id() == LR1_QUESTIONABLE_SHIFT_OPERATOR){
+ parm_name = "CAbs_lr1_sym";
+ break;
+ }
+ if(td->enum_id() == LR1_INVISIBLE_SHIFT_OPERATOR){
+ parm_name = "CAbs_lr1_sym";
+ break;
+ }
+ parm_name = td->classsym()->c_str();
+ break;
+ }
+ case T_Enum::T_T_identifier_:{
+ parm_name = "T_identifier";
+ break;
+ }
+ case T_Enum::T_T_NULL_:{
+ parm_name = "T_NULL";
+ break;
+ }
+ case T_Enum::T_T_2colon_:{
+ parm_name = "T_2colon";
+ break;
+ }
+ case T_Enum::T_T_called_thread_eosubrule_:{
+ eos_thd_or_proc = true;
+ --no_parms;
+ --y;
+ break;
+ }
+ case T_Enum::T_T_null_call_thread_eosubrule_:{
+ eos_thd_or_proc = true;
+ --no_parms;
+ --y;
+ break;
+ }
+ }
+
+
+ if(y == 1){// stk frame
+ KCHARP sub_rule_stk_parms_begin = @/
+ " struct SF{";
+ Op_str << sub_rule_stk_parms_begin<<endl;
+ }
+ KCHARP sub_rule_stk_parm = @/
+ " %s* p%i__;\n"@/
+ " State* s%i__;\n"@/
+ " bool abort%i__;\n"
+ " Rule_s_reuse_entry* rule_s_reuse_entry%i__;";
+ if(eos_thd_or_proc == false){
+ int x =sprintf(big_buf_
+ ,sub_rule_stk_parm
+ ,parm_name
+ ,y
+ ,y
+ ,y
+ ,y
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ sr_t = AST::brother(*sr_t);
+ }
+ if(no_parms > 0){
+ KCHARP sub_rule_stk_parms_end = @/
+ " };";
+ Op_str << sub_rule_stk_parms_end<<endl;
+ KCHARP stk_frame_equate = @/
+ " SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(%i);";
+
+ int x = sprintf(big_buf_
+ ,stk_frame_equate
+ ,no_parms
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+@*2 |OP_GRAMMAR_CPP| implementation.\fbreak
+@<accrue source for emit@>+=
+void OP_GRAMMAR_CPP(TOKEN_GAGGLE& Error_queue){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ string fn(fsm_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_fsmimp;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_fsmcpp_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ fsm_cpp_includes(Op_file);
+ using_ns_for_fsm_cpp(Op_file);
+ rules_reuse_table_implementation(Op_file);
+ fsm_class_implementation(Op_file);
+ rules_subrules_implementations(Op_file);
+ Op_file.close();
+}
+
+@* Template of fsm sym file implementation: |OP_GRAMMAR_SYM|.\fbreak
+|reduce_rhs_of_rule| implementation and possible thread procedure.
+Back in time when c++ compilers were aborting i needed to
+split the size of the emitted grammar's source file
+so that digestion instead of indigestion took place.
+|reduce_rhs_of_rule| should be part of the ``fsm'' cpp file.
+I leave it as is cuz i'm lazy and makes reading of the outfiles easier.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) Include of grammar's header}
+\INDENT{.1in}{3) possible ``user-imp-sym'' code}
+\INDENT{.1in}{4) using namespaces}
+\INDENT{.1in}{5) Possible thread procedure implementation}
+\INDENT{.1in}{6) Fsm class |reduce_rhs_of_rule| implementation}
+\INDENT{.1in}{7) grammar's rules / subrules implementations}
+@*3 |user_imp_sym|.\fbreak
+There are times when circularity hits u in include definitions by the compiler's
+preprocessor. This
+allows the grammar writer to roll-his-own by injection points.\fbreak
+Grammar Directive: ``user-imp-sym'' for the emitted ``xxxsym.cpp'' code module.
+@<accrue source for emit@>+=
+void user_imp_sym
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ SDC_MAP_type* dir_map = fsm_class->directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_user_imp_sym);
+ if(i != dir_map->end()){
+ @=T_user_imp_sym* ui = (T_user_imp_sym*)i->second;@>@/
+ Op_str << ui->syntax_code()->syntax_code()->c_str();
+ Op_str << endl;
+ }
+}
+@*3 |thread_implementation|.\fbreak
+Some naming conventions:\fbreak
+ssPARSE\_TABLE is referenced out of the "wpp\_core.h" file.
+This was my way to import info into a canned thread code body.\fbreak
+@<accrue source for emit@>+=
+void thread_implementation
+(std::ofstream& Op_str){@/
+ T_parallel_parser_phrase* pp_ph = O2_PP_PHASE;
+ if(pp_ph == 0){
+ Op_str <<"// monolithic grammar --- no thread" << endl;
+ return;
+ }
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP thread_definition = @/
+ "yacco2::THR _YACCO2_CALL_TYPE\n"@/
+ "%s::%s(yacco2::Parser* Caller_pp){\n"@/
+ " yacco2::Thread_entry& pp_thread_entry = I%s;\n"@/
+ " %s::%s %s_;// parallel-parser's parse table\n"
+ "#define ssPARSE_TABLE %s_\n"@/
+ "#include \"wpp_core.h\"\n"@/
+ "}";
+
+ int x = sprintf(big_buf_
+ ,thread_definition
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ KCHARP proc_thread_definition = @/
+ "THR_result _YACCO2_CALL_TYPE\n"@/
+ "%s::PROC_%s(yacco2::Parser* Caller_pp){\n"@/
+ " char called_proc_name[] = \"PROC_%s\";\n"
+ " static bool one_time(false);\n"@/
+ " static %s::%s* %s_%s_(0);// parallel-parser's fsm table\n"@/
+ " static Parser* %s_%s_parser(0);\n"@/
+ " Parser* proc_parser(0);\n"@/
+ " if(one_time == false){\n"
+ " one_time = true;\n"@/
+ " %s_%s_ = new %s::%s();// parallel-parser's fsm table\n"
+ " %s_%s_parser = new Parser(*%s_%s_,Caller_pp);\n"@/
+ " }\n"@/
+ " proc_parser = %s_%s_parser;\n"@/
+ "#include \"wproc_pp_core.h\"\n"@/
+ "}";
+
+ x = sprintf(big_buf_
+ ,proc_thread_definition
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+ ,pp_ph->pp_funct()->identifier()->identifier()->c_str() // called proc name
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()// static fsm
+
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str() // static parser
+
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()// new fsm
+
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()// new parser
+
+ ,fsm_ph->namespace_id()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str() // set as proc\_parser
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |fsm_reduce_rhs_of_rule_implementation|.\fbreak
+@<accrue source for emit@>+=
+void fsm_reduce_rhs_of_rule_implementation
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP reduce_rhs_of_rule_hdr = @/
+ "void \n"@/
+ "%s::reduce_rhs_of_rule\n"@/
+ " (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){\n"@/
+ " int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];\n"@/
+ " Per_rule_s_reuse_table* rule_reuse_tbl_ptr = \n"@/
+ " fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];\n"@/
+ " Rule_s_reuse_entry* re(0);\n"@/
+ " find_a_recycled_rule(rule_reuse_tbl_ptr,&re);\n"
+ " (*Recycled_rule) = re;\n"
+ " fnd_re: switch (Sub_rule_no){";
+ int x = sprintf(big_buf_
+ ,reduce_rhs_of_rule_hdr
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ @<gen rules's subrules case stmts@>;
+}
+
+@*3 Gen rules's subrules case statements.
+@<gen rules's subrules case stmts@>=
+ RULE_DEFS_TBL_ITER_type i = rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie = rules_ph->crt_order()->end();
+ for(;i!=ie;++i){
+ rule_def* rd = *i;
+ @<gen subrule case stmt@>;
+ }
+ KCHARP default_case_and_end_sw = @/
+ " default: return;\n"@/
+ " }";
+ Op_str << default_case_and_end_sw<<endl;
+
+ KCHARP end_rtn = @/
+ "}";
+ Op_str << end_rtn<<endl;
+
+@*3 Gen subrule case statement.\fbreak
+Optimization: Place the subrule's number of
+elements within the ``xxxsym'' module instead of
+within its subrule.
+This allows the saving of a procedure call if there is no syntax directed code for
+ the subrule procedure.
+ Now for the rule optimization:\fbreak
+ 1) the case statement determines whether the rule should be
+ created or use the recycled one from a
+ previous invocation. The wrinkle is to determine whether a ctor
+ type call is needed to re-initialize the recycled rule.
+ This depends on whether a ``constructor'' directive is present
+ in the rule's definition.
+ If so, then call a pseudo ctor initialization procedure or just include the
+ ``constructor code'' in the commented ``if ctor present commented below''.
+
+ Review of Rule's emit code:\fbreak
+ The parser sees a string of symbols and determines
+ that a reduce is to take place.
+ So the subrule to be executed within the rule determines its rule.
+ So the rule is either created by newing for the first time or
+ drawn from its recycled pool.
+
+ Now the interesting sequence:\fbreak
+ 1) Create/Recycled Rule for the subrule to run within\fbreak
+ 2) Execute the Rule's contructor directive if present in the rule definition\fbreak
+ 3) Execute the subrule's code\fbreak
+ 4) Execute the Rule's op directive if present int its definition\fbreak
+ \fbreak
+ The constructor-op-destructor directives sequence of a fsm
+ has a different meaning within a rule's sequence.
+ This is due to a rule can be created many times thru left recursion so what
+ does the constructor directive mean --- run only once?
+ It takes on more of an intialization role to the newly created rule or its recycled ego.
+ The neat thing is the rhs aka subrule to be reduced now becomes the
+ op directive to the rhs of a rule and the
+ op directive of the rule now follows it in execution.
+ This allows one to post evaluate what the subrule was and to react accordingly.
+@<gen subrule case stmt@>=
+ const char* rule_s_ctor = "// no rule's constructor directive";
+ T_rule_lhs_phrase* rlhs = rd->rule_lhs();
+ if (rlhs != 0) {
+ SDC_MAP_type* rdlhs_map = rlhs->lhs_directives_map();
+ if(rdlhs_map != 0){
+ SDC_MAP_ITER_type kkk = rdlhs_map->find(SDC_constructor);
+ if(kkk != rdlhs_map->end()){
+ @=T_constructor* cc = (T_constructor*)kkk->second;@>@/
+ rule_s_ctor = "sym->ctor();\n";
+ }
+ }
+ }
+
+ T_subrules_phrase* sr_ph = rd->subrules();
+ SUBRULE_DEFS_ITER_type j = sr_ph->subrules()->begin();
+ SUBRULE_DEFS_ITER_type je = sr_ph->subrules()->end();
+ KCHARP case_stmt_parta = @/
+ " case rhs%i_%s_:{\n"@/
+ " %s* sym;\n"@/
+ " if(re->rule_ == 0){\n"@/
+ " sym = new %s(parser__);\n"@/
+ " re->rule_ = sym;\n"@/
+ " }else{\n"@/
+ " sym = (%s*)re->rule_;\n"@/
+ " }\n"@/
+ " %s\n"@/
+ " (*Recycled_rule)->rule_ = sym;\n"@/
+ " sym->rule_info__.rhs_no_of_parms__ = %i;\n"@/
+ " \n";
+ KCHARP case_stmt_partb = " sym->sr%i();";
+ KCHARP case_stmt_partc = " return;}";
+ for(;j != je;++j){
+ T_subrule_def* srd = *j;
+
+ int no_parms = srd->no_of_elems() - 1;// remove eos
+ // see if subrule is a thread or proc call so also remove its eos
+ AST* sr_t = srd->subrule_s_tree();
+ @=set<int> eos_filter;@>@/
+ eos_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+ eos_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+ tok_can_ast_functor walk_the_plank_mate;
+ ast_prefix_1forest eos_walk
+ (*sr_t,&walk_the_plank_mate,&eos_filter,ACCEPT_FILTER);@/
+ tok_can<AST*> eos_can(eos_walk);
+ for (int xxx = 0;eos_can.operator[](xxx) != yacco2::PTR_LR1_eog__;++xxx);
+ if(eos_can.empty() ==false) --no_parms;
+
+ int x = sprintf(big_buf_
+ ,case_stmt_parta
+ ,srd->subrule_no_of_rule()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rd->rule_name()->c_str()
+ ,rule_s_ctor
+ ,no_parms);
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ SDC_MAP_type* sdrmap = srd->subrule_directives();
+
+ if(!sdrmap->empty()){ // any syntax directed code, call it
+ int x = sprintf(big_buf_,case_stmt_partb,srd->subrule_no_of_rule());
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+
+ if(rd->rule_lhs() != 0){
+ SDC_MAP_type* xxrdmap = rd->rule_lhs()->lhs_directives_map();
+ if(xxrdmap != 0){
+ SDC_MAP_ITER_type kkk = xxrdmap->find(SDC_op);
+ if(kkk != xxrdmap->end()){
+ Op_str << " sym->op();"<<endl;
+ }
+ }
+ }
+ Op_str << case_stmt_partc<<endl;
+ }
+
+
+
+@*2 |OP_GRAMMAR_SYM| implementation.\fbreak
+@<accrue source for emit@>+=
+void OP_GRAMMAR_SYM(TOKEN_GAGGLE& Error_queue){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ string fn(fsm_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_fsmsym;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_fsmsym_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ user_imp_sym(Op_file);
+ fsm_cpp_includes(Op_file);
+ using_ns_for_fsm_cpp(Op_file);
+ thread_implementation(Op_file);
+
+ fsm_reduce_rhs_of_rule_implementation(Op_file);
+ Op_file.close();
+}
+
+@* Template of fsm tbl file implementation: |OP_GRAMMAR_TBL|.\fbreak
+Emit the grammar's lr1 states tables, and threads
+for dispatch tables along with their arbitrators.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) Include of grammar's header}
+\INDENT{.1in}{3) possible ``user-imp-tbl'' code}
+\INDENT{.1in}{4) using namespaces}
+\INDENT{.1in}{5) lookahead sets}
+\INDENT{.1in}{6) lr states externs and thread table definitions / implementations}
+\INDENT{.1in}{7) lr states definitions / implementations}
+\fbreak
+Please see \O2{}'s documentation describing
+the following tables and their layouts:\fbreak
+\INDENT{.2in}{1) State}
+\INDENT{.2in}{2) Shift\_entry}
+\INDENT{.2in}{3) Reduce\_tbl}
+\INDENT{.2in}{4) State\_s\_thread\_tbl}
+\INDENT{.2in}{5) Thread\_entry}
+@*3 |user_imp_tbl|.\fbreak
+There are times when circularity hits u in include definitions by the compiler's
+preprocessor. This
+allows the grammar writer to roll-his-own by injection points.\fbreak
+Grammar Directive: ``user-imp-tbl'' for the emitted ``xxxtbl.cpp'' code module.
+@<accrue source for emit@>+=
+void user_imp_tbl
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ SDC_MAP_type* dir_map = fsm_class->directives_map();
+ SDC_MAP_ITER_type i = dir_map->find(SDC_user_imp_tbl);
+ if(i != dir_map->end()){
+ @=T_user_imp_tbl* ui = (T_user_imp_tbl*)i->second;@>@/
+ Op_str << ui->syntax_code()->syntax_code()->c_str();
+ Op_str << endl;
+ }
+}
+
+@*3 |output_la_sets|.\fbreak
+@<accrue source for emit@>+=
+void output_la_sets
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+
+ COMMON_LA_SETS_ITER_type i = COMMON_LA_SETS.begin();
+ COMMON_LA_SETS_ITER_type ie = COMMON_LA_SETS.end();
+ for(int idx=0;i!=ie;++i,++idx){
+ LA_SET_type* la_set = *i;
+ @<list literal entries of la set@>;
+ @<emit la set@>;
+ }
+}
+@*3 List literal entries of la set.\fbreak
+Leave T traces of what makes up the compressed bit table.
+@<list literal entries of la set@>=
+ KCHARP la_set_entry_literal =@/
+ "// %s";
+ LA_SET_ITER_type j = la_set->begin();
+ LA_SET_ITER_type je = la_set->end();
+ for(;j!=je;++j){
+ T_in_stbl* tsym = *j;
+ int x = sprintf(big_buf_
+ ,la_set_entry_literal
+ ,tsym->t_def()->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+@*3 Emit la set.\fbreak
+Sets are structured as a balanced table in bit partitions ascending order.
+Each record is a paired structure of partition number with its bits
+sized by |NO_BITS_PER_SET_PARTITION|.
+The overall table contains the number of entries so that
+a ``bsearch' can take place.
+Remember each T is ordered by its enumerate from 0..x
+and due to modulo arithmetic each bit entry is
+positioned
+in right-to-left order within the bit entry.
+@<emit la set@>=
+ KCHARP la_set_hdr =@/
+ "yacco2::UCHAR LA%i_%s[] ={";
+ int x = sprintf(big_buf_
+ ,la_set_hdr
+ ,idx + 1 // name given to la set uses the set no relative to 1
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+@<build la set's bit table@>;
+@<output the la set's compressed bits@>;
+
+@*4 Build la set's bit table.\fbreak
+@<build la set's bit table@>=
+ BIT_MAP_type paired_set;
+ LA_SET_ITER_type k = la_set->begin();
+ LA_SET_ITER_type ke = la_set->end();
+ int en_no(-1);
+ for(;k != ke;++k){// walk the items in set
+ T_in_stbl* T = *k;
+ en_no = T->t_def()->enum_id();
+ // calculate partition no and its set of elements
+ int Q = en_no / NO_BITS_PER_SET_PARTITION;
+ int R = en_no % NO_BITS_PER_SET_PARTITION;
+ int One(1);
+ int E_v = One << R;
+ BIT_MAP_ITER_type e = paired_set.find(Q);
+ if(e == paired_set.end()){
+ paired_set[Q] = E_v;
+ }else{
+ int se = e->second;
+ int v = se + E_v;
+ e->second = v;
+ }
+ }
+
+@*4 Output the la set's compressed bits.\fbreak
+@<output the la set's compressed bits@>=
+ KCHARP no_la_set_entries =@/
+ "%i";
+ x = sprintf(big_buf_
+ ,no_la_set_entries
+ ,paired_set.size()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ BIT_MAP_ITER_type kl = paired_set.begin();
+ BIT_MAP_ITER_type kle = paired_set.end();
+ for(;kl != kle;++kl){
+ int part_no = kl->first;
+ int e_v = kl->second;
+ KCHARP la_set_entry =@/
+ ",%i,%i";
+ x = sprintf(big_buf_
+ ,la_set_entry
+ ,part_no
+ ,e_v
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ KCHARP la_set_hdr_end =@/
+ "};";
+ Op_str <<la_set_hdr_end<<endl;
+
+
+@*3 |externs_and_thread_tbl_defs|.\fbreak
+@<accrue source for emit@>+=
+void externs_and_thread_tbl_defs
+(std::ofstream& Op_str){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+
+ char big_buf_[BIG_BUFFER_32K];
+ STATES_ITER_type i = LR1_STATES.begin();
+ STATES_ITER_type ie = LR1_STATES.end();
+ int state_cnt(0);
+ for(;i!=ie;++i){
+ state* s = *i;
+ ++state_cnt;
+ KCHARP state_extern = @/
+ "extern yacco2::State S%i_%s;";
+ int x = sprintf(big_buf_
+ ,state_extern
+ ,state_cnt
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ @<deal with threads in state@>;
+ }
+}
+@*4 Deal with threads in state.\fbreak
+Emit their thread table definitions along with
+arbitrator code.
+@<deal with threads in state@>=
+ using namespace NS_yacco2_T_enum;
+ if(s->vectored_into_by_elem_sym_ == 0) continue;// next state
+switch(s->vectored_into_by_elem_){
+ case LR1_PARALLEL_OPERATOR:{
+ @<determine number of threads to call@>;
+ @<output called threads table def / imp@>;
+ break;
+ }
+ default: continue;// next state
+}
+
+@*5 Determine number of threads to call.\fbreak
+Read the core items of the state. At the same time
+find out the rule that could have arbitration.
+Watch out for $\vert\vert\vert$ being a returned T from a called thread.
+If so this is not your average bear call.
+@<determine number of threads to call@>=
+ string ar_name;
+ rule_def* ar_s_rule_s_name(0);
+ int no_of_threads(0);
+ S_VECTORS_ITER_type j = s->state_s_vector_.begin();// rtn T's from threads
+ S_VECTORS_ITER_type je = s->state_s_vector_.end();
+ for(;j!=je;++j){// read subrules of returned Ts from called threads
+ S_VECTOR_ELEMS_type& elem_list = j->second;
+ S_VECTOR_ELEMS_ITER_type k = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type ke = elem_list.end();
+ for(;k!=ke;++k){// walk along the call sequence 1st item is T
+ state_element* se = *k;
+
+ if(se->next_state_element_ == 0)continue;// not your thread call but rtned T
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));// not part of state: bypassed
+if(sym->enumerated_id__!=T_Enum::T_T_called_thread_eosubrule_)continue;
+ rule_def* rd = se->subrule_def_->its_rule_def();
+ RULES_HAVING_AR_ITER_type ai = RULES_HAVING_AR.find(rd);
+ if(ai != RULES_HAVING_AR.end()){
+ ar_s_rule_s_name = rd;
+ }
+ ++no_of_threads;
+ }
+ }
+ if(ar_s_rule_s_name != 0){
+ ar_name += "AR_";
+ ar_name += ar_s_rule_s_name->rule_name()->c_str();
+ s->arbitrator_name_ = new string(ar_name); // add arbitration code to the state
+ }
+
+@*5 Output called threads table def / imp.\fbreak
+To get the called threads for the dispatch table,
+one must look 1 state ahead cuz this
+state is the returned T from a called thread expression.
+Remember there are 2 types of thread call expressions:\fbreak
+\INDENT{.3in}{1) $\vert\vert\vert$ T NS\_xxx::TH\_eol --- real called thread}
+\INDENT{.3in}{2) $\vert\vert\vert$ T NULL --- expr to field a returned T from 1)}
+@<output called threads table def / imp@>=
+ if(no_of_threads > 0){
+ KCHARP state_s_thread_tbl_def = @/
+ "struct S%ittd_%s{\n"@/
+ " yacco2::USINT no_entries_;\n"@/
+ " yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;\n"@/
+ " yacco2::ULINT (*thd_id_bit_map_ptr__)[];\n"@/
+ " yacco2::Thread_entry* thread_entries_[%i];\n"@/
+ "};";
+ int x = sprintf(big_buf_
+ ,state_s_thread_tbl_def
+ ,state_cnt
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_threads
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ @<determine if there is a rule's arbitrator to call@>;
+ KCHARP state_s_thread_tbl_imp = @/
+ "S%ittd_%s S%itt_%s = {\n"@/
+ " %i // no of threads\n"@/
+ " ,%s //AR_rulename or 0\n"@/
+ " ,0// ptr to thread id bit map";
+ x = sprintf(big_buf_
+ ,state_s_thread_tbl_imp
+ ,state_cnt
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,state_cnt
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_threads
+ ,ar_name.c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ j = s->state_s_vector_.begin();// read core items of state
+ je = s->state_s_vector_.end();
+ for(;j!=je;++j){// read subrules of returned Ts from called threads
+ S_VECTOR_ELEMS_type& elem_list = j->second;
+ S_VECTOR_ELEMS_ITER_type k = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type ke = elem_list.end();
+ for(;k!=ke;++k){// walk along call sequence 1st item is T
+ state_element* se = *k;
+ if(se->next_state_element_ == 0)continue;// not thd call but
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));// not part of state: bypassed
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+ @=T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;@>@/
+ KCHARP state_s_thread_tbl_entry = @/
+ " ,(yacco2::Thread_entry*)&I%s";
+ int x = sprintf(big_buf_
+ ,state_s_thread_tbl_entry
+ ,called_th->called_thread_name()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ }
+ KCHARP state_s_thread_tbl_end = @/
+ "};";
+ Op_str << state_s_thread_tbl_end<<endl;
+ }
+@*5 Output called procedure table def / imp.\fbreak
+To get the called procedure for the dispatch table,
+one must look 2 states ahead cuz this
+state is the \TRAshift{} operator.
+So go to the returned T state and read its core items.
+Remember there are 2 types of thread call expressions:\fbreak
+\INDENT{.3in}{1) \TRAshift T PROC\_TH\_eol --- called procedure}
+\INDENT{.3in}{2) \TRAshift T NULL --- expr to field a returned T from 1)}
+@<output called procedure table def / imp@>=
+ S_VECTORS_ITER_type j = se->goto_state_->state_s_vector_.begin();// rtn T's from threads
+ S_VECTORS_ITER_type je = se->goto_state_->state_s_vector_.end();
+ for(;j!=je;++j){// read subrules of returned Ts from called procedure
+ S_VECTOR_ELEMS_type& elem_list = j->second;
+ S_VECTOR_ELEMS_ITER_type k = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type ke = elem_list.end();
+ for(;k!=ke;++k){// walk along call sequence 1st item is T
+ state_element* se = *k;
+ if(se->next_state_element_ == 0)continue;// not thd call but
+ AST* bypassed_thd_eos_t = AST::brother(*se->sr_element_);
+ CAbs_lr1_sym* sym = AST::content(*bypassed_thd_eos_t);
+ if(sym->enumerated_id__ == T_Enum::T_T_called_thread_eosubrule_){
+ @=T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;@>@/
+ KCHARP state_s_thread_tbl_entry = @/
+ ",(yacco2::Type_pc_fnct_ptr)&%s::%s";
+ int x = sprintf(big_buf_
+ ,state_s_thread_tbl_entry
+ ,called_th->ns()->identifier()->c_str()
+ ,called_th->called_thread_name()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ }
+ }
+ }
+
+@*5 determine if there is a rule's arbitrator to call.\fbreak
+This conditions on whether arbritrator code is present in some spawning rules.
+Backtrack to the calling state to figure out whether there is a rule that contains code.
+If not then set the rule name to``0'' meaning nada to arbitrate.
+If found, the arbitrator's procedure's name is AR\_rulename.
+@<determine if there is a rule's arbitrator to call@>=
+if(ar_name.empty() == true)
+ ar_name += "0";
+
+
+@*5 |determine_shift_element_name|.\fbreak
+For your eyes only...
+@<accrue source for emit@>+=
+const char* determine_shift_element_name(CAbs_lr1_sym* Sym){
+switch(Sym->enumerated_id__){
+ case T_Enum::T_T_terminal_def_:{
+ @=T_terminal_def* td = (T_terminal_def*)Sym;@>@/
+ return td->classsym()->c_str();
+ }
+ case T_Enum::T_rule_def_:{
+ @=rule_def* rd = (rule_def*)Sym;@>@/
+ return rd->rule_name()->c_str();
+ }
+}
+return "element not found";
+}
+
+@*4 Output 1st state's shift table.\fbreak
+Hardwire ``start rule'' accept shift.
+The entries are in ascending order of their enumerates.
+Make sure the hardwired ``start rule'' shift entry comes right after the T vocabulary
+cuz of balanced table requirement.
+One wrinkle is if the 1st state does not contain any rules --- only terminals.
+So check at the end of the generation for this situation to gen the shifted start rule.
+@<accrue source for emit@>+=
+void output_1st_state_s_shift_table(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ rule_def* s_rule = (*rules_ph->crt_order())[0];
+ int s_rule_enum_no = s_rule->enum_id();
+ char big_buf_[BIG_BUFFER_32K];
+ S_VECTORS_ITER_type svi;
+ S_VECTORS_ITER_type svie;
+ @<determine number of shifts@>;
+ ++no_of_shift_items;// add start rule shift
+ bool first_or_2nd_prt(false);
+ bool accept_prted(false);
+ @<output start of shift definition@>;
+ svi = State.state_s_vector_.begin();
+ svie = State.state_s_vector_.end();
+ for(;svi!=svie;++svi){// walk the vectors
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int cur_se_enum_no = svi->first;
+ @<bypass reduces@>;
+ int goto_state_no = se->goto_state_->state_no_;
+ const char* shift_elem_literal = determine_shift_element_name(se->sr_def_element_);
+ if(cur_se_enum_no < s_rule_enum_no){
+ @<print 1st or 2nd shift entry@>;
+ }else{
+ if(accept_prted == false){
+ accept_prted = true;
+ @<print shift accept entry@>;
+ }
+ @<print 1st or 2nd shift entry@>;// balance of rules shifted
+ }
+ }
+ if(accept_prted == false){
+ accept_prted = true;
+ @<print shift accept entry@>;
+ }
+ @<output end of shift table entries@>;
+}
+
+@*5 Print 1st or 2nd shift entry.\fbreak
+@<print 1st or 2nd shift entry@>=
+ if (first_or_2nd_prt == false) {
+ first_or_2nd_prt = true;
+ KCHARP imp_of_state_s_shift_1st_entry =@/
+ " {%i,(State*)&S%i_%s} // shift sym: %s";
+ int x = sprintf(big_buf_
+ ,imp_of_state_s_shift_1st_entry
+ ,cur_se_enum_no
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,shift_elem_literal
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ else {
+ KCHARP imp_of_state_s_shift_2nd_entry =@/
+ " ,{%i,(State*)&S%i_%s} // shift sym: %s";
+ int x = sprintf(big_buf_
+ ,imp_of_state_s_shift_2nd_entry
+ ,cur_se_enum_no
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,shift_elem_literal
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+@*5 Print shift accept entry.\fbreak
+The |first_or_2nd_prt| makes sure the following comma is printed properly.
+@<print shift accept entry@>=
+ if (first_or_2nd_prt == false) {
+ first_or_2nd_prt = true;
+ KCHARP imp_of_state_s_shift_1st_entry =@/
+ " {%i,(State*)&S%i_%s} // accept sym: %s";
+ int x = sprintf(big_buf_
+ ,imp_of_state_s_shift_1st_entry
+ ,s_rule_enum_no
+ ,1
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,s_rule->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ else{
+ KCHARP imp_of_state_s_shift_1st_entry =@/
+ " ,{%i,(State*)&S%i_%s} // accept sym: %s";
+ int x = sprintf(big_buf_
+ ,imp_of_state_s_shift_1st_entry
+ ,s_rule_enum_no
+ ,1
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,s_rule->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+@*5 Output start of shift definition.\fbreak
+@<output start of shift definition@>=
+ KCHARP def_of_state_s_shift_entries =@/
+ "struct S%istd_%s{\n"@/
+ " yacco2::USINT no_entries_;\n"@/
+ " yacco2::Shift_entry shift_entries_[%i];\n"@/
+ "};";
+ int x = sprintf(big_buf_
+ ,def_of_state_s_shift_entries
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_shift_items
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ KCHARP imp_of_state_s_shift_entries_begin =@/
+ "S%istd_%s S%ist_%s = {\n"@/
+ " %i\n"@/ // no of entries
+ " ,\n"@/
+ " {// start of table";
+ x = sprintf(big_buf_
+ ,imp_of_state_s_shift_entries_begin
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_shift_items
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+@*5 Output end of shift table entries.\fbreak
+@<output end of shift table entries@>=
+ KCHARP imp_of_shift_entries_end =@/
+ " }// end of shift table\n"@/
+ "};";
+ Op_str << imp_of_shift_entries_end<<endl;
+
+@*4 Output all others state's shift table.\fbreak
+@<accrue source for emit@>+=
+void output_all_others_state_s_shift_table(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ bool first_or_2nd_prt(false);
+ S_VECTORS_ITER_type svi;
+ S_VECTORS_ITER_type svie;
+ @<determine number of shifts@>;
+ if(no_of_shift_items){
+ @<output start of shift definition@>;
+ S_VECTORS_ITER_type svi = State.state_s_vector_.begin();
+ S_VECTORS_ITER_type svie = State.state_s_vector_.end();
+ for(;svi!=svie;++svi){// walk the vectors
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int cur_se_enum_no= svi->first;
+ @<bypass reduces@>;
+ int goto_state_no = se->goto_state_->state_no_;
+ const char* shift_elem_literal = determine_shift_element_name(se->sr_def_element_);
+ @<print 1st or 2nd shift entry@>;
+ }
+ @<output end of shift table entries@>;
+ }
+}
+
+@*5 Determine number of shifts.\fbreak
+@<determine number of shifts@>=
+ int no_of_shift_items(0);
+ svi = State.state_s_vector_.begin();
+ svie = State.state_s_vector_.end();
+ for(;svi!=svie;++svi){// walk the vectors
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int cur_se_enum_no = svi->first;
+ @<bypass reduces@>;
+ ++no_of_shift_items;
+ }
+
+@*5 Bypass meta T.\fbreak
+The meta T are bypassed as each are implemented separately
+as individual entries within the state table.
+The real truth is the individual entries in the state are for a fast determination
+of their presence to sequentially attempt the fsm's order of operations:
+parallelism --- thread calls by $\vert\vert\vert$ expressions, specific shift on current
+terminal token,
+invisible shift -- $\vert.\vert$ implicit espilon, all-shift $\vert+\vert$, and reduce.
+Their presence in the shift table is
+REQUIRED for the shift operator.
+On 1 hand lookup speed by separate state's entries is fast but when it comes
+to shifting it's slow to sequentially check for
+their individual presence.
+
+So below is my optimized mistake. THIS CODE IS NOW VOID! Only here for removal justifications.
+Meta T returned from a called thread are exempt and
+are part of the shift table.
+Why?
+They are treated like any other T returned from a called thread.
+The returned T is shifted into its reducing state that reduces the called-thread expression.
+@<bypass meta T@>=
+ switch(cur_se_enum_no){
+ case LR1_PARALLEL_OPERATOR:{
+ if(se->previous_state_element_ == 0) continue;//bypass start of call thd expr
+ if(// is $\vert\vert\vert$ returned from thread
+ se->previous_state_element_->its_enum_id_ == LR1_PARALLEL_OPERATOR)
+ break;// do not bypass: part of shift tbl
+ continue;// bypass
+ }
+ case LR1_FSET_TRANSIENCE_OPERATOR:{
+ if(se->previous_state_element_ == 0) continue;//bypass start of call proc expr
+ if(// is \\TRAshift returned from thread
+ se->previous_state_element_->its_enum_id_ == LR1_PARALLEL_OPERATOR)
+ break;// do not bypass: part of shift tbl
+ continue;// bypass
+ }
+ case LR1_INVISIBLE_SHIFT_OPERATOR:{
+ if(se->previous_state_element_ == 0) continue;// bypass dealt a separate state entry
+ if(// is $\vert.\vert$ returned from thread
+ se->previous_state_element_->its_enum_id_ == LR1_PARALLEL_OPERATOR)
+ break;// do not bypass: part of shift tbl
+ continue;// bypass
+ }
+ case LR1_ALL_SHIFT_OPERATOR:{
+ if(se->previous_state_element_ == 0) continue;
+ if(// is $\vert+\vert$ returned from thread
+ se->previous_state_element_->its_enum_id_ == LR1_PARALLEL_OPERATOR)
+ break;// do not bypass: part of shift tbl
+ continue;// bypass
+ }
+ case LR1_QUESTIONABLE_SHIFT_OPERATOR:{
+ if(se->previous_state_element_ == 0) continue;
+ if(// is $\vert?\vert$ returned from thread
+ se->previous_state_element_->its_enum_id_ == LR1_PARALLEL_OPERATOR)
+ break;// do not bypass: part of shift tbl
+ continue;// bypass
+ }
+ }
+
+@*5 Bypass reduces.
+@<bypass reduces@>=
+ if(cur_se_enum_no >=0){ // not a reduce T
+ }else{
+ switch(cur_se_enum_no){
+ case -T_Enum::T_T_eosubrule_: {
+ if(se->next_state_element_ == 0)continue;// real reduce: epsilon so bypass
+ if(se->previous_state_element_ == 0)continue;// real reduce: epsilon so bypass
+ break;
+ }
+ default:{
+ break;//not a reduce
+ }
+ }
+ }
+
+@*4 Output meta shifts separately.\fbreak
+@<accrue source for emit@>+=
+void output_meta_shifts_separately(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ S_VECTORS_ITER_type svi = State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+ S_VECTORS_ITER_type svie = State.state_s_vector_.end();
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP parallel_entry = @/
+ "yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,parallel_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_PARALLEL_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP invisible_shift_entry = @/
+ "yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,invisible_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_INVISIBLE_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP all_shift_entry = @/
+ "yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,all_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_ALL_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP procedure_call_entry = @/
+ "yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,procedure_call_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_FSET_TRANSIENCE_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP questionable_shift_entry = @/
+ "yacco2::Shift_entry S%iqse_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,questionable_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_QUESTIONABLE_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+}
+
+@*4 Output state's reduced table.\fbreak
+@<accrue source for emit@>+=
+void output_state_s_reduced_table(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+@<determine number of reduces@>;
+@<output reduced table def / imp@>;
+}
+
+@*5 Determine number of reduces.\fbreak
+Each shift / reduce entry in the state contains
+a list of subrules partaking in the activity.
+For the reduce activity this is why the number of entries in the list is accumulated.
+More than 1 entry indicates a reduce / reduce type conflict.
+As reduced vectors are $<$ 0 and the state's vector is a map ordered on
+the enumerate value, sequentially reading the map is not an inefficient way to
+deal with these items as they are the first to be read.
+The only wrinkle is when a ``eosubrule'' is returned from a called thread.
+This is not an end-of-subrule.
+@<determine number of reduces@>=
+ int no_of_reduces(0);
+ S_VECTORS_ITER_type j = State.state_s_vector_.begin();
+ S_VECTORS_ITER_type je = State.state_s_vector_.end();
+ for(;j!=je;++j){// read list of subrules per vector
+ int cur_se_enum_no = j->first;
+ S_VECTOR_ELEMS_ITER_type seli = j->second.begin();
+ state_element* se = *seli;
+ if(cur_se_enum_no >=0)break;// not a reduce T
+ switch (cur_se_enum_no){
+ case -T_Enum::T_T_eosubrule_:{
+ if(se->next_state_element_ == 0){// real eos
+ no_of_reduces += j->second.size();
+ continue;
+ }
+ }
+ }
+ }
+
+@*5 Output reduced table def / imp.\fbreak
+@<output reduced table def / imp@>=
+ if(no_of_reduces > 0){
+ KCHARP reduce_def = @/
+ "struct S%irtd_%s{\n"@/
+ " yacco2::USINT no_entries_;\n"@/
+ " yacco2::Reduce_entry reduce_entries_[%i];\n"@/
+ "};";
+ int x = sprintf(big_buf_
+ ,reduce_def
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_reduces
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ KCHARP reduce_imp_begin = @/
+ "S%irtd_%s S%irt_%s = {\n"@/
+ " %i\n"@/
+ " ,\n"@/
+ " {// start of table";
+ x = sprintf(big_buf_
+ ,reduce_imp_begin
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,no_of_reduces
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+@<output reduce entries@>;
+ KCHARP reduce_imp_end = @/
+ " }// end of reduce table\n"@/
+ "};";
+ Op_str << reduce_imp_end<<endl;
+ }
+@*5 Output reduce entries.
+@<output reduce entries@>=
+ j = State.state_s_vector_.begin();// read core items of state
+ je = State.state_s_vector_.end();
+ int reduce_no(-1);
+ for(;j!=je;++j){
+ int cur_se_enum_no = j->first;
+ if(cur_se_enum_no >=0)break;
+ S_VECTOR_ELEMS_type& elem_list = j->second;
+ S_VECTOR_ELEMS_ITER_type k = elem_list.begin();
+ S_VECTOR_ELEMS_ITER_type ke = elem_list.end();
+ for(;k!=ke;++k){// la sets
+ ++reduce_no;
+ state_element* se = *k;
+ if(reduce_no == 0){
+ KCHARP reduce_imp_1st_entry = @/
+ " {(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+ int x = sprintf(big_buf_
+ ,reduce_imp_1st_entry
+ ,se->common_la_set_idx_+1
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,se->subrule_def_->subrule_no_of_rule()
+ ,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{
+ KCHARP reduce_imp_2nd_entry = @/
+ " ,{(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+ int x = sprintf(big_buf_
+ ,reduce_imp_2nd_entry
+ ,se->common_la_set_idx_+1
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,se->subrule_def_->subrule_no_of_rule()
+ ,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ }
+ }
+
+@*4 Output state's called threads table.\fbreak
+@<accrue source for emit@>+=
+void output_state_s_called_threads_table(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp = @/
+"yacco2::Shift_entry S%ipse_%s = \n"@/
+"{%i,(State*)&S%i_%s};\n";
+}
+
+@*4 Output state's called procedure table.\fbreak
+@<accrue source for emit@>+=
+void output_state_s_called_procedure_table(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp = @/
+"yacco2::Shift_entry S%ipcse_%s = \n"@/
+"{%i,(State*)&S%i_%s};\n";
+}
+@*4 Output meta shifts separately.\fbreak
+@<accrue source for emit@>+=
+void output_questionable_shift(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ S_VECTORS_ITER_type svi = State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+ S_VECTORS_ITER_type svie = State.state_s_vector_.end();
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP parallel_entry = @/
+ "yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,parallel_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_PARALLEL_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP invisible_shift_entry = @/
+ "yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,invisible_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_INVISIBLE_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP all_shift_entry = @/
+ "yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,all_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_ALL_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP procedure_call_entry = @/
+ "yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,procedure_call_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_FSET_TRANSIENCE_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ svi = State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP questionable_shift_entry = @/
+ "yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+ int x = sprintf(big_buf_
+ ,questionable_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,LR1_QUESTIONABLE_SHIFT_OPERATOR
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*4 Output lr state.\fbreak
+Note, the quotes are needed after the ``State's vectored into symbol: ...'
+cuz the escape `\\' symbol is taken as a macro extension and causes havic
+with the Sun's compiler (corrected with a following space but
+Apple's compile... excuse me gnu's compiler has fits with the correct so let quote it.
+@<accrue source for emit@>+=
+void output_lr_state(std::ofstream& Op_str,state& State){
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ T_fsm_class_phrase* fsm_class = fsm_ph->fsm_class_phrase();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP state_entry = @/
+ "yacco2::State S%i_%s = //State's vectored into symbol: \"%s\" \n"
+ "{%i";
+ int x = sprintf(big_buf_
+ ,state_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ ,State.entry_symbol_literal()
+ ,State.state_no_
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ @<parallel shift entry@>;
+ @<all shift entry@>;
+ @<invisible shift entry@>;
+ @<procedure call shift entry@>;
+ @<shift entry@>;
+ @<reduce entry@>;
+ @<thread call entry@>;
+ @<procedure call function entry@>;
+ @<questionable shift entry@>;
+ Op_str << "};"<<endl;
+}
+
+
+@*5 Parallel shift entry.\fbreak
+@<parallel shift entry@>=
+ S_VECTORS_ITER_type svi = State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+ S_VECTORS_ITER_type svie = State.state_s_vector_.end();
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP parallel_entry = @/
+ ",(Shift_entry*)&S%ipse_%s";
+ int x = sprintf(big_buf_
+ ,parallel_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ }else{
+ Op_str << ",0";
+ }
+
+@*5 All shift entry.\fbreak
+@<all shift entry@>=
+ svi = State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP all_shift_entry = @/
+ ",(Shift_entry*)&S%iase_%s";
+ int x = sprintf(big_buf_
+ ,all_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{
+ Op_str << ",0";
+ }
+
+@*5 Invisible shift entry.\fbreak
+@<invisible shift entry@>=
+ svi = State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP invisible_shift_entry = @/
+ ",(Shift_entry*)&S%iise_%s";
+ int x = sprintf(big_buf_
+ ,invisible_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{
+ Op_str << ",0";
+ }
+
+@*5 Procedure call shift entry.\fbreak
+@<procedure call shift entry@>=
+ svi = State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+ svie = State.state_s_vector_.end();
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP procedure_call_entry = @/
+ ",(Shift_entry*)&S%ipcse_%s";
+ int x = sprintf(big_buf_
+ ,procedure_call_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ }else{
+ Op_str << ",0";
+ }
+
+@*5 Questionable shift entry.\fbreak
+@<questionable shift entry@>=
+ svi = State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP questionable_shift_entry = @/
+ ",(Shift_entry*)&S%iqse_%s";
+ int x = sprintf(big_buf_
+ ,questionable_shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{
+ Op_str << ",0";
+ }
+
+
+@*5 Shift entry.\fbreak
+@<shift entry@>=
+@<determine number of shifts@>;
+if(no_of_shift_items > 0){
+ KCHARP shift_entry = @/
+ ",(Shift_tbl*)&S%ist_%s";
+ int x = sprintf(big_buf_
+ ,shift_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ }else{
+ Op_str << ",0";
+ }
+
+
+@*5 Reduce entry.\fbreak
+@<reduce entry@>=
+@<determine number of reduces@>;
+if(no_of_reduces > 0){
+ KCHARP reduce_entry = @/
+ ",(Reduce_tbl*)&S%irt_%s";
+ int x = sprintf(big_buf_
+ ,reduce_entry
+ ,State.state_no_
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+
+ }else{
+ Op_str << ",0";
+ }
+@*5 Thread call entry.\fbreak
+Watch out for \PARshift being a returned T from a called thread.
+If so this is not your average bear call.
+@<thread call entry@>=
+ svi = State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ if(se->next_state_element_->goto_state_ == 0){
+ Op_str << ",0";
+ }else{
+ int goto_state_no = se->goto_state_->state_no_;
+ KCHARP thread_calls_entry = @/
+ ",(State_s_thread_tbl*)&S%itt_%s";
+ int x = sprintf(big_buf_
+ ,thread_calls_entry
+ ,goto_state_no
+ ,fsm_class->identifier()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+
+ }
+ }else{
+ Op_str << ",0";
+ }
+
+@*5 Procedure call function entry.\fbreak
+Watch out for \TRAshift being a returned T from a called thread.
+If so this is not your average bear call.
+@<procedure call function entry@>=
+ svi = State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+ if(svi != svie){
+ S_VECTOR_ELEMS_ITER_type seli = svi->second.begin();
+ state_element* se = *seli;
+ if(se->next_state_element_->goto_state_ == 0){
+ Op_str << ",0";// rtned \\TRAshift from a \\PARshift
+ }else{
+ @<output called procedure table def / imp@>;
+ }
+ }else{
+ Op_str << ",0"; // no procedure call
+ }
+
+@*3 |emit_each_lr_state_s_tables|.\fbreak
+Actions that can occur within a state:\fbreak
+\INDENT{.3in}{1) shift}
+\INDENT{.3in}{2) reduce}
+\INDENT{.3in}{3) accept}
+\INDENT{.3in}{4) called threads}
+\INDENT{.3in}{5) called procedure}
+@<accrue source for emit@>+=
+void emit_each_lr_state_s_tables(std::ofstream& Op_str){
+ STATES_ITER_type si = LR1_STATES.begin();
+ STATES_ITER_type sie = LR1_STATES.end();
+ for(;si!=sie;++si){// walk the states
+ state* cur_state = *si;
+ if(cur_state->state_no_ == 1){
+ output_1st_state_s_shift_table(Op_str,*cur_state);
+ }else{
+ output_all_others_state_s_shift_table(Op_str,*cur_state);
+ }
+ output_meta_shifts_separately(Op_str,*cur_state);
+ output_state_s_reduced_table(Op_str,*cur_state);
+ output_state_s_called_threads_table(Op_str,*cur_state);
+ output_state_s_called_procedure_table(Op_str,*cur_state);
+ output_lr_state(Op_str,*cur_state);
+ }
+}
+@*2 |OP_GRAMMAR_TBL| implementation.\fbreak
+@<accrue source for emit@>+=
+void OP_GRAMMAR_TBL(TOKEN_GAGGLE& Error_queue){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ string fn(fsm_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_fsmtbl;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_fsmtbl_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ user_imp_tbl(Op_file);
+ fsm_cpp_includes(Op_file);
+ using_ns_for_fsm_cpp(Op_file);
+ output_la_sets(Op_file);
+ externs_and_thread_tbl_defs(Op_file);
+ emit_each_lr_state_s_tables(Op_file);
+ Op_file.close();
+}
+
+@* Template of enumeration header: |OP_ENUMERATION_HEADER|.\fbreak
+Count those terminals.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) enumeration include guard declaration}
+\INDENT{.2in}{2.1) namespace declaration of enumeration scheme}
+\INDENT{.3in}{2.1.1) start definition of T\_enum structure}
+\INDENT{.3in}{2.1.1.1) begin declaration of c enum list}
+\INDENT{.3in}{2.1.1.1.1) summary of vocabulary classes}
+\INDENT{.3in}{2.1.1.1.2) enumerate lrk}
+\INDENT{.3in}{2.1.1.1.3) enumerate raw characters}
+\INDENT{.3in}{2.1.1.1.4) enumerate meta terminals}
+\INDENT{.3in}{2.1.1.1.5) enumerate errors}
+\INDENT{.3in}{2.1.2) close off enum list}
+\INDENT{.3in}{2.1.2) close off T\_enum structure}
+\INDENT{.3in}{2.2) close off namespace definition}
+\INDENT{.1in}{3) close off include guard declaration}
+@*3 Enumerate the LR constants classification: |enumerate_lrk|.\fbreak
+Note that the manufactured enumerate name
+is composed of a prefix ``T\_'', its class name, and
+suffixed with ``\_''.
+@<accrue source for emit@>+=
+void enumerate_lrk
+(std::ofstream& Op_str){@/
+ T_lr1_k_phrase* ph = O2_LRK_PHASE;
+ std::vector<T_terminal_def* >* dictionary = ph->crt_order();
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP enumerate_item = @/
+ " ,T_%s_ = %i";
+std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ int x = sprintf(big_buf_
+ ,enumerate_item
+ ,td->classsym()->c_str()
+ ,td->enum_id()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 Enumerate the Raw Characters classification: |enumerate_rc|.\fbreak
+Note that the manufactured enumerate name
+is composed of a prefix ``T\_'', its class name, and
+suffixed with ``\_''.
+@<accrue source for emit@>+=
+void enumerate_rc
+(std::ofstream& Op_str){@/
+ T_rc_phrase* ph = O2_RC_PHASE;
+ std::vector<T_terminal_def* >* dictionary = ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP enumerate_item = @/
+ " ,T_%s_ = %i";
+std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ int x = sprintf(big_buf_
+ ,enumerate_item
+ ,td->classsym()->c_str()
+ ,td->enum_id()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 Enumerate the Errors classification: |enumerate_errors|.\fbreak
+Note that the manufactured enumerate name
+is composed of a prefix ``T\_'', its class name, and
+suffixed with ``\_''.
+@<accrue source for emit@>+=
+void enumerate_errors
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* ph = O2_ERROR_PHASE;
+ std::vector<T_terminal_def* >* dictionary = ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP enumerate_item = @/
+ " ,T_%s_ = %i";
+std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+
+ int x = sprintf(big_buf_
+ ,enumerate_item
+ ,td->classsym()->c_str()
+ ,td->enum_id()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+@*3 Enumerate the T classification: |enumerate_T|.\fbreak
+Note that the manufactured enumerate name
+is composed of a prefix ``T\_'', its class name, and
+suffixed with ``\_''.
+@<accrue source for emit@>+=
+void enumerate_T
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* ph = O2_T_PHASE;
+ std::vector<T_terminal_def* >* dictionary = ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP enumerate_item = @/
+ " ,T_%s_ = %i";
+std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ int x = sprintf(big_buf_
+ ,enumerate_item
+ ,td->classsym()->c_str()
+ ,td->enum_id()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 Terminals Enumeration summary: |enumeration_summary_for_struct|.
+@<accrue source for emit@>+=
+void enumeration_summary_for_struct
+(std::ofstream& Op_str){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP summary = @/
+ " sum_total_T = %i\n"@/
+ " ,no_of_terminals = %i\n"@/
+ " ,no_of_raw_chars = %i\n"@/
+ " ,no_of_lr1_constants = %i\n"@/
+ " ,no_of_error_terminals = %i\n"@/
+ " ,start_LRK=%i,end_LRK=%i\n"@/
+ " ,start_RC=%i,end_RC=%i\n"@/
+ " ,start_T=%i,end_T=%i\n"@/
+ " ,start_ERR=%i,end_ERR=%i\n"@/
+ " ,start_R=%i";
+ int x = sprintf(big_buf_
+ ,summary
+ ,enum_ph->total_enumerate()
+ ,enum_ph->total_T_enumerate()
+ ,enum_ph->total_rc_enumerate()
+ ,enum_ph->total_lrk_enumerate()
+ ,enum_ph->total_err_enumerate()
+ ,enum_ph->start_lrk_enumerate(),enum_ph->stop_lrk_enumerate()
+ ,enum_ph->start_rc_enumerate(),enum_ph->stop_rc_enumerate()
+ ,enum_ph->start_T_enumerate(),enum_ph->stop_T_enumerate()
+ ,enum_ph->start_err_enumerate(),enum_ph->stop_err_enumerate()
+ ,enum_ph->total_enumerate()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |enumeration_define_list|.
+@<accrue source for emit@>+=
+void enumeration_define_list
+(std::ofstream& Op_str){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP enum_list_start = @/
+ " enum enumerated_terminals%s{";
+ int x = sprintf(big_buf_
+ ,enum_list_start," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ enumeration_summary_for_struct(Op_str);
+ enumerate_lrk(Op_str);
+ enumerate_rc(Op_str);
+ enumerate_T(Op_str);
+ enumerate_errors(Op_str);
+
+ KCHARP enum_list_end = @/
+ " }; // close defining enum list";
+ Op_str << enum_list_end<<endl;
+}
+
+@*3 |enumeration_define_structure|.
+@<accrue source for emit@>+=
+void enumeration_define_structure
+(std::ofstream& Op_str){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP struct_start = @/
+ " struct T_Enum%s{";
+ int x = sprintf(big_buf_
+ ,struct_start," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ enumeration_define_list(Op_str);
+ KCHARP struct_end = @/
+ " }; // close defining T_enum";
+ Op_str << struct_end<<endl;
+}
+@*3 |enumeration_namespace_for_header|.
+@<accrue source for emit@>+=
+void enumeration_namespace_for_header
+(std::ofstream& Op_str){@/
+ using namespace NS_yacco2_terminals;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP ns_of_enum_start = @/
+ "namespace %s {";
+ int x = sprintf(big_buf_
+ ,ns_of_enum_start
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ enumeration_define_structure(Op_str);
+ KCHARP ns_of_enum_end = @/
+ "} // end of namespace";
+ Op_str << ns_of_enum_end<<endl;
+}
+
+@*3 |enumeration_include_guard_for_header|.
+@<accrue source for emit@>+=
+void enumeration_include_guard_for_header
+(std::ofstream& Op_str){@/
+ using namespace NS_yacco2_terminals;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP signal_guard_start = @/
+ "#ifndef __%s_h__\n"@/
+ "#define __%s_h__ 1";
+ int x = sprintf(big_buf_
+ ,signal_guard_start
+ ,enum_ph->filename_id()->identifier()->c_str()
+ ,enum_ph->filename_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ enumeration_namespace_for_header(Op_str);
+ KCHARP signal_guard_end = @/
+ "#endif";
+ Op_str << signal_guard_end<<endl;
+}
+@*3 Gen Tes's literal names for specific Tes.\fbreak
+@<accrue source for emit@>+=
+void gen_Tes_literals_per_spec_voc
+(std::ofstream& Op_str@/
+,std::vector<T_terminal_def* >::iterator I
+,std::vector<T_terminal_def* >::iterator IE){@/
+char big_buf_[BIG_BUFFER_32K];
+
+ KCHARP literal = @/
+ "%s";
+ for(;I != IE;++I){
+ T_terminal_def* td = *I;
+ int x = sprintf(big_buf_
+ ,literal
+ ,td->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+@*3 Gen Tes's literal names for \olinker.\fbreak
+@<accrue source for emit@>+=
+void gen_Tes_literals
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* pht = O2_T_PHASE;
+ T_rc_phrase* phrc = O2_RC_PHASE;
+ T_error_symbols_phrase* phe = O2_ERROR_PHASE;
+ T_lr1_k_phrase* phlr = O2_LRK_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP t_alphabet = @/
+ "T-alphabet%s";
+ int x = sprintf(big_buf_,t_alphabet," ");
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ gen_Tes_literals_per_spec_voc(Op_str,phlr->crt_order()->begin(),phlr->crt_order()->end());
+ gen_Tes_literals_per_spec_voc(Op_str,phrc->crt_order()->begin(),phrc->crt_order()->end());
+ gen_Tes_literals_per_spec_voc(Op_str,pht->crt_order()->begin(),pht->crt_order()->end());
+ gen_Tes_literals_per_spec_voc(Op_str,phe->crt_order()->begin(),phe->crt_order()->end());
+ KCHARP end_t_alphabet = @/
+ "end-T-alphabet%s";
+ x = sprintf(big_buf_,end_t_alphabet," ");
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_ENUMERATION_HEADER| implementation.\fbreak
+This is the counting scheme for the grammar's Terminal Vocabulary for all
+their classifications: LRk, raw characters, errors, and meta-terminals.
+The terminal count starts from 0 going outwards on the positive axis.
+The Terminals are ordered by
+``LRk'' classification and its items with the same count pattern for
+ ``raw characters'', ``error terminals'', and finally
+the meta ``terminals''.
+The ``LRk'' and ``RC'' classifications are constant and fixed.
+Once upon a time an approximate enumeration header and their c++ code was generated
+for the \Yacco2 library placed in ``/yacco2/library'' for the library code to compile.
+The library uses some error terminals. Please see \Yacco2's library documentation.
+
+This header file is the glue for all other generated
+ tables as the enumeration number per terminal
+is rooted in the token symbol used by the parsing tables
+and error reporting facilities.
+To note, each grammar builds on this counting scheme for their production rules
+ordered after the meta-terminals.
+The rules ranking is by order of appearance within the grammar.
+
+I also included the ``T-alphabet'' file containing the literal names of the Tes for
+all vocabularies in create order.
+This is used by \olinker to sprinkle their referenced names throughout
+the lookahead sets gened by it from the ``xxx.fsc'' file.
+Why here, cus i use the enumeration file name prefix
+concatentaed with the ``.fsc'' extension.
+It only gets gened when meta-terminals or error Tes are to be gened.
+@<accrue source for emit@>+=
+void OP_ENUMERATION_HEADER(TOKEN_GAGGLE& Error_queue){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ string fn(enum_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_enumeration_hdr;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_enum_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ enumeration_include_guard_for_header(Op_file);
+ Op_file.close();
+}
+
+@*2 |OP_T_Alphabet| implementation.\fbreak
+I also included the ``T-alphabet'' file containing the literal names of the Tes for
+all vocabularies in create order.
+This is used by \olinker to sprinkle their referenced names throughout
+the lookahead sets gened by it from the ``xxx.fsc'' file.
+Why here, cus i use the enumeration file name prefix
+concatentaed with the ``.fsc'' extension.
+It only gets gened when meta-terminals or error Tes are to be gened.
+@<accrue source for emit@>+=
+void OP_T_Alphabet(TOKEN_GAGGLE& Error_queue){@/
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ string fn_literal(enum_ph->filename_id()->identifier()->c_str());
+ fn_literal+= Suffix_t_alphabet;
+ std::ofstream Op_file;
+ Op_file.open(fn_literal.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_enum_filename(fn_literal.c_str());
+ sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+ intro_comment(Op_file,fn_literal.c_str());
+ gen_Tes_literals(Op_file);
+ Op_file.close();
+}
+
+@* Template of Errors vocabulary header: |OP_ERRORS_HEADER|.\fbreak
+Errors vocabulary header generation.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) include files}
+\INDENT{.1in}{3) Errors include guard declaration}
+\INDENT{.2in}{3.1) namespace declaration of Errors}
+\INDENT{.3in}{3.1.1) use terminals enumeration namespace}
+\INDENT{.3in}{3.1.2) loop thru the Errors list to generate their declarations}
+\INDENT{.3in}{3.1.2.1) generate the specific Error terminal definition}
+\INDENT{.3in}{3.1.3) close off namespace definition}
+\INDENT{.1in}{4) close off Errors include guard declaration}
+
+@*3 |errors_loop_thru_and_gen_defs_for_header|.
+@<accrue source for emit@>+=
+void errors_loop_thru_and_gen_defs_for_header
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+
+ std::vector<T_terminal_def* >* dictionary = errors_ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP def_item = @/
+ " struct %s:public yacco2::CAbs_lr1_sym{\n"
+ "%s";
+
+ std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+ std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ SDC_MAP_type* sdc_map = td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_user_declaration);
+ if(j == sdc_map->end()){// shell so gen default
+ KCHARP shell_of_def_item = @/
+ " struct %s:public yacco2::CAbs_lr1_sym{\n"
+ " %s();\n"
+ " };";
+ int x = sprintf(big_buf_
+ ,shell_of_def_item
+ ,td->classsym()->c_str()
+ ,td->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{// grammar writer defined
+ T_user_declaration* gw_sdc = (T_user_declaration*)j->second;
+ int x = sprintf(big_buf_
+ ,def_item
+ ,td->classsym()->c_str()
+ ,gw_sdc->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ j = sdc_map->find(SDC_op);
+ if(j != sdc_map->end()){// grammar writer code
+ Op_str << " op();" << endl;
+ }
+ j = sdc_map->find(SDC_destructor);
+ if(j != sdc_map->end()){// gw code
+ KCHARP dtor = @/
+ " static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);\n";
+ int x = sprintf(big_buf_
+ ,dtor
+ ,td->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ Op_str << " };"<<endl; // close off definition
+ }
+ }
+}
+
+@*3 |errors_use_enum_namespace_for_header|.
+@<accrue source for emit@>+=
+void errors_use_enum_namespace_for_header
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP using_T_namespace = @/
+ " using namespace %s;";
+ int x = sprintf(big_buf_
+ ,using_T_namespace
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |errors_namespace_for_header|.
+@<accrue source for emit@>+=
+void errors_namespace_for_header
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP namespace_start = @/
+ "namespace %s{";
+ int x = sprintf(big_buf_
+ ,namespace_start
+ ,errors_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ errors_use_enum_namespace_for_header(Op_str);
+ errors_loop_thru_and_gen_defs_for_header(Op_str);
+
+ KCHARP namespace_end = @/
+ "}//namespace";
+ Op_str << namespace_end<<endl;
+}
+
+@*3 |errors_include_guard_for_header|.
+@<accrue source for emit@>+=
+void errors_include_guard_for_header
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP signal_guard_start = @/
+ "#ifndef __%s_h__\n"@/
+ "#define __%s_h__ 1";
+ int x = sprintf(big_buf_
+ ,signal_guard_start
+ ,errors_ph->filename_id()->identifier()->c_str()
+ ,errors_ph->filename_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ errors_namespace_for_header(Op_str);
+ KCHARP signal_guard_end = @/
+ "#endif";
+ Op_str << signal_guard_end<<endl;
+}
+
+@*3 |errors_include_files_for_header|.
+@<accrue source for emit@>+=
+void errors_include_files_for_header
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_files = @/
+ "#include \"%s\"\n"@/
+ "#include \"%s%s\"\n" // T enumeration
+ "#include \"%s%s\"";// lr constants
+ int x = sprintf(big_buf_
+ ,include_files
+ ,O2_library_file
+ ,enum_ph->filename_id()->identifier()->c_str()
+ ,Suffix_enumeration_hdr
+ ,lr_ph->filename_id()->identifier()->c_str()
+ ,Suffix_LRK_hdr
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_ERRORS_HEADER| implementation.\fbreak
+Bang out those error definitions.
+@<accrue source for emit@>+=
+void OP_ERRORS_HEADER(TOKEN_GAGGLE& Error_queue){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ string fn(errors_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_Errors_hdr;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_errors_hdrfilename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ errors_include_files_for_header(Op_file);
+ errors_include_guard_for_header(Op_file);
+ Op_file.close();
+}
+
+@* Template of User Errors vocabulary header: |OP_ERRORS_HEADER|.\fbreak
+Users Errors vocabulary header generation.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) include files}
+\INDENT{.1in}{3) use terminals enumeration namespace}
+\INDENT{.1in}{4) loop thru the T list to generate their implementations}
+\INDENT{.2in}{4.1) generate the specific T's terminal definition}
+
+@*4 |errors_imp_dtor|.
+@<accrue source for emit@>+=
+void errors_imp_dtor
+(std::ofstream& Op_str,T_terminal_def* Td,SDC_MAP_ITER_type& J){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_destructor* dtor_t = (T_destructor*)J->second;
+ KCHARP dtor_code = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ KCHARP dtor_code_noabort = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ std::string::size_type r =
+ dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+ if(r != std::string::npos){ // using abort status
+ x = sprintf(big_buf_
+ ,dtor_code
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,dtor_t->syntax_code()->syntax_code()->c_str()
+ );
+ }else{
+ x = sprintf(big_buf_
+ ,dtor_code_noabort
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,dtor_t->syntax_code()->syntax_code()->c_str()
+ );
+ }
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*4 |errors_imp_implementation|.
+@<accrue source for emit@>+=
+void errors_imp_implementation
+(std::ofstream& Op_str,T_terminal_def* Td,SDC_MAP_ITER_type& J){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_user_implementation* imp_t = (T_user_implementation*)J->second;
+ Op_str << imp_t->syntax_code()->syntax_code()->c_str();
+ SDC_MAP_type* sdc_map = Td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_destructor);
+ if(j != sdc_map->end()){
+ errors_imp_dtor(Op_str,Td,j);
+ }
+}
+
+@*4 |errors_imp_shellimplementation|.
+@<accrue source for emit@>+=
+void errors_imp_shellimplementation
+(std::ofstream& Op_str,T_terminal_def* Td,std::string& Autodelete,std::string& Autoabort){@/
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP shell_of_def_item = @/
+ "%s::\n"@/
+ "%s()\n"@/
+ " T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+ int x = sprintf(big_buf_
+ ,shell_of_def_item
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->t_name()->c_str() // literal
+ ,Td->classsym()->c_str() // enum
+ ,"0"// no dtor
+ ,Autodelete.c_str()
+ ,Autoabort.c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |errors_loop_thru_and_gen_defs_for_imp|.
+@<accrue source for emit@>+=
+void errors_loop_thru_and_gen_defs_for_imp
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ std::vector<T_terminal_def* >* dictionary = errors_ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ string auto_delete;
+ string auto_abort;
+ string dtor_adr;
+
+ std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+ std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ SDC_MAP_type* sdc_map = td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_user_implementation);
+ if(td->autodelete()==false){
+ auto_delete = "false";
+ }else{
+ auto_delete = "true";
+ }
+ if(td->autoabort()==false){
+ auto_abort = "false";
+ }else{
+ auto_abort = "true";
+ }
+
+ if(j == sdc_map->end()){// shell so gen default
+ errors_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+ }else{// grammar writer defined
+ errors_imp_implementation(Op_str,td,j);
+ }
+ }
+}
+
+@*3 |errors_use_enum_namespace_for_imp|.
+@<accrue source for emit@>+=
+void errors_use_enum_namespace_for_imp
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP using_namespace = @/
+ " using namespace %s;\n"
+ " using namespace %s;";// |T_enum|
+ int x = sprintf(big_buf_
+ ,using_namespace
+ ,errors_ph->namespace_id()->identifier()->c_str()
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |errors_include_files_for_imp|.
+@<accrue source for emit@>+=
+void errors_include_files_for_imp
+(std::ofstream& Op_str){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_files = @/
+ "#include \"%s%s\"";
+ int x = sprintf(big_buf_
+ ,include_files
+ ,errors_ph->filename_id()->identifier()->c_str()
+ ,Suffix_Errors_hdr
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_ERRORS_CPP| implementation.\fbreak
+Bang out thee implementation of those error definitions.
+@<accrue source for emit@>+=
+void OP_ERRORS_CPP(TOKEN_GAGGLE& Error_queue){@/
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+ string fn(errors_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_Errors_imp;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_errors_impfilename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ errors_include_files_for_imp(Op_file);
+ errors_use_enum_namespace_for_imp(Op_file);
+ errors_loop_thru_and_gen_defs_for_imp(Op_file);
+ Op_file.close();
+}
+@* Template of USER T vocabulary header: |OP_USER_T_HEADER|.\fbreak
+User terminals vocabulary header generation.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) include files}
+\INDENT{.1in}{3) User T include guard declaration}
+\INDENT{.2in}{3.1) namespace declaration of Errors}
+\INDENT{.3in}{3.1.1) use terminals enumeration namespace}
+\INDENT{.3in}{3.1.2) loop thru the User T list to generate their declarations}
+\INDENT{.3in}{3.1.2.1) generate the specific User T terminal definition}
+\INDENT{.3in}{3.1.3) close off namespace definition}
+\INDENT{.1in}{4) close off User T include guard declaration}
+
+@*3 |user_t_loop_thru_and_gen_defs_for_header|.
+@<accrue source for emit@>+=
+void user_t_loop_thru_and_gen_defs_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+
+ std::vector<T_terminal_def* >* dictionary = t_ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP def_item = @/
+ " struct %s:public yacco2::CAbs_lr1_sym{\n"
+ "%s";
+
+ std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+ std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ SDC_MAP_type* sdc_map = td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_user_declaration);
+ if(j == sdc_map->end()){// shell so gen default
+ KCHARP shell_of_def_item = @/
+ " struct %s:public yacco2::CAbs_lr1_sym{\n"
+ " %s();\n"
+ " };";
+ int x = sprintf(big_buf_
+ ,shell_of_def_item
+ ,td->classsym()->c_str()
+ ,td->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }else{// grammar writer defined
+ T_user_declaration* gw_sdc = (T_user_declaration*)j->second;
+ int x = sprintf(big_buf_
+ ,def_item
+ ,td->classsym()->c_str()
+ ,gw_sdc->syntax_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+
+
+ j = sdc_map->find(SDC_op);
+ if(j != sdc_map->end()){// grammar writer code
+ Op_str << " op();" << endl;
+ }
+ j = sdc_map->find(SDC_destructor);
+ if(j != sdc_map->end()){// gw code
+ KCHARP dtor = @/
+ " static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+ int x = sprintf(big_buf_
+ ,dtor
+ ,td->classsym()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ Op_str << " };"<<endl; // close off definition
+ }
+ }
+}
+
+@*3 |user_t_use_enum_namespace_for_header|.
+@<accrue source for emit@>+=
+void user_t_use_enum_namespace_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP using_T_namespace = @/
+ " using namespace %s;";
+ int x = sprintf(big_buf_
+ ,using_T_namespace
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |user_t_terminals_refs_for_header|.
+@<accrue source for emit@>+=
+void user_t_terminals_refs_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ if(t_ph->terminals_refs_code() != 0){
+ KCHARP t_ref_code = @/
+ " %s";
+ int x = sprintf(big_buf_
+ ,t_ref_code
+ ,t_ph->terminals_refs_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 |user_t_terminals_sufx_for_header|.
+@<accrue source for emit@>+=
+void user_t_terminals_sufx_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ if(t_ph->terminals_sufx_code() != 0){
+ KCHARP t_sufx_code = @/
+ " %s";
+ int x = sprintf(big_buf_
+ ,t_sufx_code
+ ,t_ph->terminals_sufx_code()->syntax_code()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+}
+
+@*3 |user_t_namespace_for_header|.
+@<accrue source for emit@>+=
+void user_t_namespace_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP namespace_start = @/
+ "namespace %s{";
+ int x = sprintf(big_buf_
+ ,namespace_start
+ ,t_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ user_t_use_enum_namespace_for_header(Op_str);
+ user_t_terminals_refs_for_header(Op_str);
+ user_t_loop_thru_and_gen_defs_for_header(Op_str);
+ user_t_terminals_sufx_for_header(Op_str);
+
+ KCHARP namespace_end = @/
+ "}//namespace";
+ Op_str << namespace_end<<endl;
+}
+
+@*3 |user_t_include_guard_for_header|.
+@<accrue source for emit@>+=
+void user_t_include_guard_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP signal_guard_start = @/
+ "#ifndef __%s_h__\n"@/
+ "#define __%s_h__ 1";
+ int x = sprintf(big_buf_
+ ,signal_guard_start
+ ,t_ph->filename_id()->identifier()->c_str()
+ ,t_ph->filename_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ user_t_namespace_for_header(Op_str);
+ KCHARP signal_guard_end = @/
+ "#endif";
+ Op_str << signal_guard_end<<endl;
+}
+
+@*3 |user_t_include_files_for_header|.
+@<accrue source for emit@>+=
+void user_t_include_files_for_header
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ T_error_symbols_phrase* errors_ph = O2_ERROR_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_files = @/
+ "#include \"%s\"\n"@/
+ "#include \"%s%s\"\n" // T enumeration
+ "#include \"%s%s\"\n"// lr constants
+ "#include \"%s%s\"";// errors
+ int x = sprintf(big_buf_
+ ,include_files
+ ,O2_library_file
+ ,enum_ph->filename_id()->identifier()->c_str()
+ ,Suffix_enumeration_hdr
+ ,lr_ph->filename_id()->identifier()->c_str()
+ ,Suffix_LRK_hdr
+ ,errors_ph->filename_id()->identifier()->c_str()
+ ,Suffix_Errors_hdr
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_USER_T_HEADER| implementation.\fbreak
+Bang out those error definitions.
+@<accrue source for emit@>+=
+void OP_USER_T_HEADER(TOKEN_GAGGLE& Error_queue){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ string fn(t_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_T_hdr;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_errors_hdrfilename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_USER_T_HEADER_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ user_t_include_files_for_header(Op_file);
+ user_t_include_guard_for_header(Op_file);
+ Op_file.close();
+}
+
+@* Template of USER T vocabulary header: |OP_USER_T_HEADER|.\fbreak
+Errors vocabulary header generation.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) include files}
+\INDENT{.1in}{3) use terminals enumeration namespace}
+\INDENT{.1in}{4) terminals-refs code}
+\INDENT{.1in}{5) loop thru the USer T list to generate their implementations}
+\INDENT{.2in}{5.1) generate the specific User T terminal definition}
+\INDENT{.1in}{6) terminals-sufx code}
+
+@*4 |user_t_imp_dtor|.
+@<accrue source for emit@>+=
+void user_t_imp_dtor
+(std::ofstream& Op_str,T_terminal_def* Td,SDC_MAP_ITER_type& J){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_destructor* dtor_t = (T_destructor*)J->second;
+ KCHARP dtor_code = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ KCHARP dtor_code_noabort = @/
+ "void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"@/
+ " %s* R = (%s*)(This);\n"@/
+ " %s\n"@/
+ "}";
+ std::string::size_type r =
+ dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+ if(r != std::string::npos){ // using abort status
+ x = sprintf(big_buf_
+ ,dtor_code
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,dtor_t->syntax_code()->syntax_code()->c_str()
+ );
+ }else{
+ x = sprintf(big_buf_
+ ,dtor_code_noabort
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,dtor_t->syntax_code()->syntax_code()->c_str()
+ );
+ }
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*4 |user_t_imp_implementation|.
+@<accrue source for emit@>+=
+void user_t_imp_implementation
+(std::ofstream& Op_str,T_terminal_def* Td,SDC_MAP_ITER_type& J){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_user_implementation* imp_t = (T_user_implementation*)J->second;
+ Op_str << imp_t->syntax_code()->syntax_code()->c_str();
+ SDC_MAP_type* sdc_map = Td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_destructor);
+ if(j != sdc_map->end()){
+ errors_imp_dtor(Op_str,Td,j);
+ }
+}
+
+@*4 |user_t_imp_shellimplementation|.
+@<accrue source for emit@>+=
+void user_t_imp_shellimplementation
+(std::ofstream& Op_str,T_terminal_def* Td,std::string& Autodelete,std::string& Autoabort){@/
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP shell_of_def_item = @/
+ "%s::\n"@/
+ "%s()\n"@/
+ " T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+ int x = sprintf(big_buf_
+ ,shell_of_def_item
+ ,Td->classsym()->c_str()
+ ,Td->classsym()->c_str()
+ ,Td->t_name()->c_str() // literal
+ ,Td->classsym()->c_str() // enum
+ ,"0"// no dtor
+ ,Autodelete.c_str()
+ ,Autoabort.c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |user_t_loop_thru_and_gen_defs_for_imp|.
+@<accrue source for emit@>+=
+void user_t_loop_thru_and_gen_defs_for_imp
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+
+ std::vector<T_terminal_def* >* dictionary = t_ph->crt_order();
+ char big_buf_[BIG_BUFFER_32K];
+ string auto_delete;
+ string auto_abort;
+ string dtor_adr;
+
+ std::vector<T_terminal_def* >::iterator i = dictionary->begin();
+ std::vector<T_terminal_def* >::iterator ie = dictionary->end();
+ for(;i != ie;++i){
+ T_terminal_def* td = *i;
+ SDC_MAP_type* sdc_map = td->directives_map();
+ SDC_MAP_ITER_type j = sdc_map->find(SDC_user_implementation);
+ if(td->autodelete()==false){
+ auto_delete = "false";
+ }else{
+ auto_delete = "true";
+ }
+ if(td->autoabort()==false){
+ auto_abort = "false";
+ }else{
+ auto_abort = "true";
+ }
+
+ if(j == sdc_map->end()){// shell so gen default
+ user_t_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+ }else{// grammar writer defined
+ user_t_imp_implementation(Op_str,td,j);
+ }
+ }
+}
+
+@*3 |user_t_use_enum_namespace_for_imp|.
+@<accrue source for emit@>+=
+void user_t_use_enum_namespace_for_imp
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP using_namespace = @/
+ " using namespace %s;\n"
+ " using namespace %s;";// |T_enum|
+ int x = sprintf(big_buf_
+ ,using_namespace
+ ,t_ph->namespace_id()->identifier()->c_str()
+ ,enum_ph->namespace_id()->identifier()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |user_t_include_files_for_imp|.
+@<accrue source for emit@>+=
+void user_t_include_files_for_imp
+(std::ofstream& Op_str){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_lr1_k_phrase* lr_ph = O2_LRK_PHASE;
+ char big_buf_[BIG_BUFFER_32K];
+ KCHARP include_files = @/
+ "#include \"%s%s\"";
+ int x = sprintf(big_buf_
+ ,include_files
+ ,t_ph->filename_id()->identifier()->c_str()
+ ,Suffix_T_hdr
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_USER_T_CPP| implementation.\fbreak
+Bang out thee implementation of those error definitions.
+@<accrue source for emit@>+=
+void OP_USER_T_CPP(TOKEN_GAGGLE& Error_queue){@/
+ T_terminals_phrase* t_ph = O2_T_PHASE;
+ string fn(t_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_Errors_imp;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_errors_impfilename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_USER_T_CPP",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+
+ intro_comment(Op_file,fn.c_str());
+ user_t_include_files_for_imp(Op_file);
+ user_t_use_enum_namespace_for_imp(Op_file);
+ user_t_loop_thru_and_gen_defs_for_imp(Op_file);
+ Op_file.close();
+}
+
+@* Template of FSC File: |OP_FSC_FILE|.\fbreak
+File of grammar's first threads info for \o2{}linker.
+\fbreak
+\INDENT{.1in}{1) Comments --- file name, time and date info}
+\INDENT{.1in}{2) fsc prelude}
+\INDENT{.1in}{3) list of native Tes in grammar's first set}
+\INDENT{.1in}{4) list of directly called threads in its first set}
+\INDENT{.1in}{5) complete list of used threads in grammar for linker document}
+\INDENT{.1in}{6) grammar's comments for linker document}
+
+@*3 |fsc_prelude_imp|.
+@<accrue source for emit@>+=
+void fsc_prelude_imp
+(std::ofstream& Op_str,std::string& Fn){@/
+ KCHARP pp_thd_nm(0);
+ string transitive("n");
+ string mono;
+ char big_buf_[BIG_BUFFER_32K];
+ T_fsm_phrase* fcp = O2_FSM_PHASE;
+ T_parallel_parser_phrase* ppp = O2_PP_PHASE;
+ T_enum_phrase* enum_ph = O2_T_ENUM_PHASE;
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+
+ RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+ rule_def*rd= *i;
+ FIRST_SET_type* fs = rd->first_set();
+ FIRST_SET_ITER_type j = fs->begin();
+ FIRST_SET_ITER_type je = fs->end();
+ for(;j!=je;++j){
+ T_in_stbl* tintbl = *j;
+ T_terminal_def* tdef = tintbl->t_def();
+ if(tdef->enum_id() == LR1_PARALLEL_OPERATOR){
+ transitive[0] = 'y';
+ break;
+ }
+ }
+
+ KCHARP fsc_prelude =
+ "transitive %s\n"
+ "grammar-name \"%s\"\n"
+ "name-space \"%s\"\n"
+ "thread-name \"%s\"\n"
+ "monolithic %s\n"
+ "file-name \"%s\"\n"
+ "no-of-T %i";
+ if(ppp == 0){
+ pp_thd_nm = fcp->fsm_class_phrase()->identifier()->identifier()->c_str();
+ mono += 'y';
+ }else{
+ pp_thd_nm = ppp->pp_funct()->identifier()->identifier()->c_str();
+ mono += 'n';
+ }
+ int x = sprintf(big_buf_
+ ,fsc_prelude
+ ,transitive.c_str()
+ ,fcp->filename_id()->identifier()->c_str()
+ ,fcp->namespace_id()->identifier()->c_str()
+ ,pp_thd_nm
+ ,mono.c_str()
+ ,Fn.c_str()
+ ,enum_ph->total_enumerate()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |list_of_native_Tes_in_fs_imp|.\fbreak
+Create a thread's first set by building a closure-only
+state.
+There are 2 conditions that are different to a
+regular first set calculation:
+\itemitem{1)} an $\epsilon$ start-rule
+\itemitem{2)} rules on the rhs of the start rule that have \INVshift.
+
+Point 1 requires the first set to be the Lookahead expression for the thread.
+Now what does the \INVshift symbol represent
+ within the first set as it is not part
+of the input token stream?
+\INVshift acts like an epsilon rule and therefore u must go through
+the goto states from the closure-only state
+ deriving their concrete first sets.
+This is a recursive situation when \INVshift is present in
+one of these
+shifted states so u keep on being devine...
+If the start-rule has been completely derived (accepted) then
+the thread's ``parallel-la-boundary'' expression
+adds its booty to the first set.
+If the ``eolr'' is present in this booty, then the thread's first set
+is only this symbol as it represents the ``all terminals'' situation.
+
+A cheap way would have been to just make the first set contain the ``eolr''
+symbol if the \INVshift symbol was present. This would work but
+would be inefficient due to the false starts in firing up the thread
+to have it misfire and shut down: a bit of thread farting.
+So lets be efficient by alculating what truely
+represents its thread's first set.
+
+An example of the above situation is a thread
+whose Start-rule contains only rules that are all explicitly or
+implicitely epsilonable (\INVshift is present).
+\fbreak
+\fbreak
+Now for the most efficient and simpliest solution - a bird's view:\fbreak
+As an optimization the current token is used to
+determine whether a thread should fire,
+why not include in this check against the meta \INVshift symbol?
+This way its saves some space as its contains just the threads
+that have it in their first set rather
+than distributing the thread-id-to-run against all its thread first set's concrete Tes.
+Consider the following: if the first set has only the ``all terminal --- eolr'' then
+this is a 1 to 1 relationship but if the lookahead set is volumious
+this becomes a 1 to many situation.
+The 1:m situation becomes less efficient in its set search as
+the current token contains all the possible threads that can
+run. When the running grammar detects threads
+to-be-run against its specific parse state, the first search
+is against the current token, then the secondary
+search for its specific threads takes place.
+So out damn |first_set_for_threads|.
+
+The reason for the remapping of \INVshift into \TRAshift
+ for the thread's first set is the double meaning on \INVshift:
+\itemitem{1)} \INVshift is a conditional meta-terminal
+ used to shift out of ambiguous
+situations. It is checked for its existence after parallelism
+was unsuccessful: no threads to run or an unsuccessful threading parse.
+\itemitem{2)} What does \INVshift mean in thread launching by
+use of the global table of threads per T?
+As the contexts are exclusive, i felt i should still
+not overload its meaning for the 2nd context:
+ie, only use it in the conditional-shift context.
+So \INVshift is renamed to \TRAshift in the global
+T table for wild card thread launches.
+
+Under \o2 there are only 16 threads of this type
+against 2 32 bit words makes for an efficient search against the
+local fsa's state of local threads to possiblely run.
+
+@*4 Driver of |list_of_native_Tes_in_fs_imp|.\fbreak
+@<accrue source for emit@>+=
+void list_of_native_Tes_in_fs_imp
+(std::ofstream& Op_str){@/
+ char big_buf_[BIG_BUFFER_32K];
+ int no_Tes_in_list(0);
+ string Tes_in_list;
+
+
+ STATES_ITER_type si = LR1_STATES.begin();
+ state* cur_state = *si;
+ int no_of_Tes_in_fs(0);
+ std::set<CAbs_lr1_sym*> fs_set;
+
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+ RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+ rule_def*rd= *i;
+ FIRST_SET_type* fs = rd->first_set();
+ FIRST_SET_ITER_type j = fs->begin();
+ FIRST_SET_ITER_type je = fs->end();
+ for(;j!=je;++j){
+ T_in_stbl* tintbl = *j;
+ T_terminal_def* tdef = tintbl->t_def();
+ if(tdef->enum_id() == LR1_PARALLEL_OPERATOR){
+ continue;
+ }
+ ++no_Tes_in_list;
+ }
+
+done:;
+ KCHARP fs_list_of_Tes =
+ "list-of-native-first-set-terminals %i";
+ KCHARP fs_T_in_list =
+ " %s";
+ KCHARP end_fs_list_of_Tes =
+ "end-list-of-native-first-set-terminals%s";
+ int x = sprintf(big_buf_
+ ,fs_list_of_Tes
+ ,no_Tes_in_list
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ j = fs->begin();
+ for(;j!=je;++j){
+ T_in_stbl* tintbl = *j;
+ T_terminal_def* tdef = tintbl->t_def();
+ if(tdef->enum_id() == LR1_PARALLEL_OPERATOR){
+ continue;
+ }
+ if(tdef->enum_id() == LR1_INVISIBLE_SHIFT_OPERATOR){// handled by \olinker
+ x = sprintf(big_buf_
+ ,fs_T_in_list
+ ,LR1_FSET_TRANSIENCE_OPERATOR_LITERAL
+ );
+ }else{
+ x = sprintf(big_buf_
+ ,fs_T_in_list
+ ,tdef->classsym()->c_str()
+ );
+ }
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+ x = sprintf(big_buf_,end_fs_list_of_Tes," ");
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |transitive_list_of_threads_in_fs_imp|.
+@<accrue source for emit@>+=
+void transitive_list_of_threads_in_fs_imp
+(std::ofstream& Op_str){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_rules_phrase* rules_ph = O2_RULES_PHASE;
+ AST* rules_tree = rules_ph->phrase_tree();
+ AST* start_rule_def_t= AST::get_1st_son(*rules_tree);
+ rule_def* rd = (rule_def*)AST::content(*start_rule_def_t);
+
+
+ int no_threads_in_list = rd->called_thread_first_set()->size();
+
+ KCHARP transitive_thread_list =
+ "list-of-transitive-threads %i";
+ KCHARP transitive_thread_in_list =
+ " %s::%s";
+ KCHARP end_transitive_thread_list =
+ "end-list-of-transitive-threads%s";
+
+ int x = sprintf(big_buf_,transitive_thread_list,no_threads_in_list);
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+std::set<T_called_thread_eosubrule*>::iterator e = rd->called_thread_first_set()->begin();
+std::set<T_called_thread_eosubrule*>::iterator ee = rd->called_thread_first_set()->end();
+for(;e!=ee;++e){
+ T_called_thread_eosubrule* called_thd = *e;
+ x = sprintf(big_buf_
+ ,transitive_thread_in_list
+ ,called_thd->ns()->identifier()->c_str()
+ ,called_thd->called_thread_name()->identifier()->c_str());
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+ x = sprintf
+ (big_buf_
+ ,end_transitive_thread_list," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |used_list_of_threads_imp|.
+@<accrue source for emit@>+=
+void used_list_of_threads_imp
+(std::ofstream& Op_str){@/
+ char big_buf_[BIG_BUFFER_32K];
+ std::set<string> used_threads;
+ STATES_ITER_type i = LR1_STATES.begin();
+ STATES_ITER_type ie = LR1_STATES.end();
+for(;i!=ie;++i){// extract all the used threads
+ state* start_state = *i;
+ S_VECTOR_ELEMS_type* state_elems_wparallelism(0);
+ S_VECTORS_type& vect = start_state->state_s_vector_;
+ S_VECTORS_ITER_type vi = vect.find(LR1_PARALLEL_OPERATOR);
+ if(vi == vect.end()) continue; //no parallelism in state?
+ state_elems_wparallelism = &vi->second;
+ S_VECTOR_ELEMS_ITER_type k = state_elems_wparallelism->begin();
+ S_VECTOR_ELEMS_ITER_type ke = state_elems_wparallelism->end();
+ for(;k!=ke;++k){
+ state_element* thread_1st_elem = *k;// parallel operator
+ AST* rtned_T_t = thread_1st_elem->next_state_element_->sr_element_;
+ AST* bypassed_thd_eos_t = AST::brother(*rtned_T_t);
+ if(bypassed_thd_eos_t == 0) continue;
+ CAbs_lr1_sym* sym = AST::content(*bypassed_thd_eos_t);
+ if(sym->enumerated_id__ != T_Enum::T_T_called_thread_eosubrule_){
+ continue;
+ }
+ T_called_thread_eosubrule* called_thd = (T_called_thread_eosubrule*)sym;
+ // add to used thread if first time
+ string fqtnm;
+ fqtnm += called_thd->ns()->identifier()->c_str();
+ fqtnm += "::";
+ fqtnm += called_thd->called_thread_name()->identifier()->c_str();
+ if(used_threads.find(fqtnm) == used_threads.end()) used_threads.insert(fqtnm);
+ }
+}
+ KCHARP used_thread_list =
+ "list-of-used-threads %i";
+ KCHARP used_thread_in_list =
+ " %s";
+ KCHARP end_used_thread_list =
+ "end-list-of-used-threads%s";
+
+ int x = sprintf(big_buf_,used_thread_list,used_threads.size());
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+
+ std::set<string>::iterator si = used_threads.begin();
+ std::set<string>::iterator sie = used_threads.end();
+ for(;si!=sie;++si){
+ x = sprintf(big_buf_
+ ,used_thread_in_list
+ ,si->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+ }
+
+ x = sprintf
+ (big_buf_
+ ,end_used_thread_list," "
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*3 |grammar_s_comments_for_linker_doc_imp|.
+@<accrue source for emit@>+=
+void grammar_s_comments_for_linker_doc_imp
+(std::ofstream& Op_str){@/
+ char big_buf_[BIG_BUFFER_32K];
+ T_fsm_phrase* fcp = O2_FSM_PHASE;
+
+ KCHARP fsm_comments =
+ "fsm-comments\n"
+ "\"%s\"";
+ int x = sprintf
+ (big_buf_
+ ,fsm_comments
+ ,fcp->comment()->c_string()->c_str()
+ );
+ Op_str.write(big_buf_,x);
+ Op_str<<endl;
+}
+
+@*2 |OP_FSC_FILE| implementation.\fbreak
+Okay last of the Moh...
+@<accrue source for emit@>+=
+void OP_FSC_FILE(TOKEN_GAGGLE& Error_queue){@/
+ T_fsm_phrase* fsm_ph = O2_FSM_PHASE;
+ string fn(fsm_ph->filename_id()->identifier()->c_str());
+ fn += Suffix_fsc;
+ std::ofstream Op_file;
+ Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+ if(!Op_file){
+ CAbs_lr1_sym* sym = new Err_bad_fsmtbl_filename(fn.c_str());
+ sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+ sym->set_who_created("o2externs.w - OP_FSC_FILE",__LINE__);
+ Error_queue.push_back(*sym);
+ return;
+ }
+ intro_comment(Op_file,fn.c_str());
+ fsc_prelude_imp(Op_file,fn);
+ list_of_native_Tes_in_fs_imp(Op_file);
+ transitive_list_of_threads_in_fs_imp(Op_file);
+ used_list_of_threads_imp(Op_file);
+ grammar_s_comments_for_linker_doc_imp(Op_file);
+ Op_file.close();
+}
+
+@** Bric-a-brac.\fbreak
+@ Better coordination between the coordinates.\fbreak
+To improve processing of nested files, a global |yacco2::STK_FILE_NOS__|
+was introduced to swing-and-sway with its partner |yacco2::FILE_CNT__|.
+|yacco2::FILE_CNT__| gets incremented by the |tok_can<std::ifstream>| container
+while |yacco2::STK_FILE_NOS__| pushes and pops |yacco2::FILE_CNT__|.
+The global |yacco2::FILE_TBL__| keeps an array of files processed.
+The importance of |yacco2::STK_FILE_NOS__| and |yacco2::FILE_CNT__| is
+in the assignment of the source file coordinates to the manufactured tokens.
+This allows one to correlate the error token back to
+the source file.
+
+As |yacco2::FILE_CNT__| is an expanding number, the grammar writer
+must properly coordinate when nested files are occurring,
+and to ensure when the file gets closed that the calling file
+number becomes |yacco2::STK_FILE_NOS__| current value.
+A little stacking sir...\fbreak
+\fbreak
+Improvement: 8 Mar. 2005
+
+@ Blending of Yacco2 and Linker externals.\fbreak
+General house cleaning. A one-stop-lollipop-stall of recycled ideas:
+your marche puce. Look at the stalls ... folders.
+Externals folder is now equal to
+Linker, Yacco2, Library. Ahem...\fbreak
+\fbreak
+Improvement: 9 Mar. 2005
+
+@ Remove option /s:xxxx number of source lines to generate.\fbreak
+This was a limitation of Microsoft's c++ compiler circa release 5.xx.
+It honked. Now I'm more optimistic of their current products.
+So I removed the /s:xxxx option from the |Yacco2_lcl_options(s).lex| grammars
+and as a passed in parameter to |YACCO2_PARSE_CMD_LINE|.
+Ah the signs of spring cleaning...\fbreak
+\fbreak
+Improvement: 2 June 2005
+
+
+@ Bug in MS compiler 2005.\fbreak
+To make my |mpost_output|
+grammar more print presentable when emitting itself for
+|mpost|, |cweave|, and |pdftex| consumption, i moved
+most of its class code into static class procedures whereby
+their implementations are within this document.
+Part of the improvement was the
+calling of the static member |MPOST_CWEB_EMIT_PREFIX_CODE|
+after |ctor| creation from the class's ``op'' directive
+ to do
+basic table initialization and to establish the output files
+to be written to.
+The class object's ``this'' was passed
+as a parameter to |MPOST_CWEB_EMIT_PREFIX_CODE|.\fbreak
+
+Well the bug, |@<initialize the |Cmpost_output| class variables@>|
+within |MPOST_CWEB_EMIT_PREFIX_CODE|
+established opening the files. After verifying
+that the file's ``ofstream'' was healthy,
+upon the 1st attempt to write to it
+MS c++ emitted code honked from its mutex handling routine.
+Well at least they are improving in their trappings.\fbreak
+
+Work around, extract from the |MPOST_CWEB_EMIT_PREFIX_CODE|
+procedure the initialization of the class's variables
+and place it in the ``op'' directive of the class before
+the call to |MPOST_CWEB_EMIT_PREFIX_CODE|
+to complete the balance of work.
+Now MS's emitted code doesn't honk
+ when
+ the initialization context is within the class code.\fbreak
+\fbreak\fbreak
+Grrr: 26 Jan. 2006
+\fbreak
+@ Initialize the |Cmpost_output| class variables.
+The initial |push_back| of ``0'' is to register a boggy 0 element as
+i count from 1.
+@<initialize the |Cmpost_output| class variables@>=
+ Fsm->no_subrules_per_rule_.push_back(0);
+ Fsm->gened_date_time_ += DATE_AND_TIME();
+
+ Fsm->mp_dimension_ += " abcdefghijklmnopqrstuvwxyz";
+ Fsm->w_fig_no_ = 0;
+ Fsm->rule_def_ = 0;
+ Fsm->subrule_def_ = 0;
+ Fsm->rule_no_ = 0;
+ Fsm->subrule_no_ = 0;
+ Fsm->elem_no_ = 0;
+ Fsm->no_of_rules_ = 0;
+ Fsm->no_of_subrules_ = 0;
+ Fsm->mp_filename_ += Fsm->grammar_filename_prefix_.c_str();
+ Fsm->mp_filename_ += ".mp";
+ Fsm->omp_file_.open(Fsm->mp_filename_.c_str(),ios_base::out|ios::trunc);
+ if(!Fsm->omp_file_){
+ CAbs_lr1_sym* sym = new Err_bad_filename(Fsm->mp_filename_.c_str());
+ Fsm->parser__->add_token_to_error_queue(*sym);
+ Fsm->parser__->set_stop_parse(true);
+ return;
+ }
+ Fsm->w_filename_ += Fsm->grammar_filename_prefix_.c_str();
+ Fsm->w_filename_ += ".w";
+ Fsm->ow_file_.open(Fsm->w_filename_.c_str(),ios_base::out|ios::trunc);
+ if(!Fsm->ow_file_){
+ CAbs_lr1_sym* sym = new Err_bad_filename(Fsm->w_filename_.c_str());
+ Fsm->parser__->add_token_to_error_queue(*sym);
+ Fsm->parser__->set_stop_parse(true);
+ return;
+ }
+
+
+@ |convertMPtoPDF| macro bug.\fbreak
+Well here's the scoop: my grammar diagrams are smoking
+but when there is a blank (space) in a terminal
+being displayed, the |convertMPtoPDF| macro halts
+saying that the |empty| macro is illegally
+terminated.
+
+Alas, for the moment i substitute a ``.'' in place of the space
+to keep the pictures flowing.\fbreak
+\fbreak
+3 Feb. 2006
+
+@ |cweave| emits bad cross-reference command in o2externs.scn file.\fbreak
+It emits:\fbreak
+ $\backslash${}I$\backslash${}X8, xx , yy, 73:accrue source for emit$\backslash${}X\fbreak
+ $\backslash${}U7.\fbreak
+instead of:\fbreak
+$\backslash${}I$\backslash${}X8:accrue source for emit$\backslash${}X\fbreak
+$\backslash${}Us10, 11, ..., 70$\backslash${}ETs72. This works.
+But checking with other modules like ``wlibrary''
+the code is right so what's making it cough?
+\fbreak
+\fbreak
+Until i fix |cweave| either remove ``\\ind'' line at the end of
+``o2externs.tex'' file
+or ``remove or add'' the offending commands in ``o2externs.scn'' file.
+\fbreak
+\fbreak
+14 June 2006
+
+@ |cweave| emits tab in place of ``open brace''.\fbreak
+The ``ctangle'' emitted cpp code is okay. Shows up when i emit ``cpp'' source code
+implementation procedures for the grammar.
+\fbreak
+\fbreak
+12 Nov 2006
+
+@ Language cleanup.\fbreak
+Removed ``entry and exit'' routines from fsm class definition.
+Fsm's ctor and dtor allow the same points to be tweaked. In \O2's creation days, i was
+over zealous on trigger points --- fsm, push and pop action off the parse stack, and
+subrules being separate classes. all this to leave tracks when needed.\fbreak
+Eliminated the subrule directives as they were needed only when a subrule was designed as
+ a separate class --- now a subrule definition is
+ part of the rule definition: srx() where x is the subrule number.
+Separate subrule definitions really had marginal utility --- euphemism for
+useless and never exploited.\fbreak
+\INDENT{.2in}{1) rhs-op replaced by op directive}
+\INDENT{.2in}{2) rhs-xxx elinimated directives}
+\INDENT{.3in}{ where xxx is constructor, destructor, user-declaration or implementation}
+This my take on gently waff where whiffes linger...
+\fbreak
+\fbreak
+13 Nov 2006
+
+@ Templates and their tantrums.\fbreak
+Due to MS's equal algorithm throwing up, i roll my own set compare ---
+|find_common_la_set_idx|.
+\fbreak
+\fbreak
+20 Nov 2006
+
+@ Rule use count off by nested recursion.\fbreak
+The rule use count algorithm didn't handle the following boiled
+ down example properly:\fbreak
+\ptindent{T $\rightarrow$ Ra T Rb}
+\ptindent{T $\rightarrow$ Ra ...}
+The nested T was recognized but not post evaluated on Ra use.
+It should double its maximun calculated use count after direct and indirect
+rule calculations.\fbreak
+\fbreak
+Nov. 2007
+@** Index.
+
+
+
diff --git a/web/yacco2/compiler/o2/prog.w b/web/yacco2/compiler/o2/prog.w
new file mode 100644
index 0000000000..1bc10d828f
--- /dev/null
+++ b/web/yacco2/compiler/o2/prog.w
@@ -0,0 +1,651 @@
+@q file: prog.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** External routines and globals.\fbreak
+General routines to get things going:\fbreak
+\ptindent{1) get control file and put into \O2's holding file}
+\ptindent{2) parse the command line}
+\ptindent{3) format errors}
+\ptindent{4) \O2's parse phrases --- pieces of syntactic structures}
+These are defined by including |o2_externs.h|.
+Item 4 is driven out of the |pass3.lex| grammar.
+It demonstrates a procedural approach similar to recursive descent parsing
+technique.
+
+The globals are:\fbreak
+\ptindent{a) |Error_queue| --- global container of errors passed across all parsings}
+\ptindent{b) Switches from command line parse}
+\ptindent{c) Token containers for the parsing phases}
+
+@<External rtns and variables@>=
+extern int RECURSION_INDEX__;
+extern void COMMONIZE_LA_SETS();
+extern int NO_LR1_STATES;
+extern STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+extern LR1_STATES_type LR1_COMMON_STATES;
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern void Print_dump_state(state* State);
+@** Main line of \O2.
+@<accrue \o2 code@>+=
+
+YACCO2_define_trace_variables();
+//|Recursion_count();|
+int RECURSION_INDEX__(0);
+yacco2::CHAR T_SW('n');
+yacco2::CHAR ERR_SW('n');
+yacco2::CHAR PRT_SW('n');
+
+yacco2::TOKEN_GAGGLE JUNK_tokens;
+yacco2::TOKEN_GAGGLE P3_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+char Big_buf[BIG_BUFFER_32K];
+T_sym_tbl_report_card report_card;
+std::string o2_file_to_compile;
+std::string o2_fq_fn_noext;
+STBL_T_ITEMS_type STBL_T_ITEMS;
+STATES_type LR1_STATES;
+LR1_STATES_type LR1_COMMON_STATES;
+bool LR1_HEALTH(LR1_COMPATIBLE);
+int NO_LR1_STATES(0);
+STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+
+
+int main(int argc, char* argv[])
+{
+ cout << yacco2::Lr1_VERSION << std::endl;
+
+@<setup \O2 for parsing@>;
+@<fetch command line info...@>;
+ lrclog << yacco2::Lr1_VERSION << std::endl;
+
+@<are all phases parsed?@>;
+@<epsilon and pathological assessment of Rules@>;
+@<dump aid: enumerate grammar's components@>;
+@<determine if la expression...@>;
+@<get total number of subrules for |elem_space| size check@>;
+@<calculate rules first sets@>;
+@<calculate Start rule called threads first sets@>;
+@<generate grammar's LR1 states@>;
+@<is the grammar unhealthy? yes report the details and exit@>;
+@<determine each rule use count@>;
+@<emit FSA, FSC, and Documents of grammar@>;
+//|@<print tree@>;|
+//|@<shutdown@>;|
+exit:
+lrclog << "Exiting O2" << std::endl;
+ return 0;
+}
+@** Some Programming sections.
+@*2 Shutdown.\fbreak
+Prints out the thread table with their runtime activity, and calls
+each one of them to quitely remove themselves as threads.
+Within Unix this is not needed as the winddown duties of the
+process removes launched threads:
+That is why it is commented out.
+Uncommenting it provides the
+run statistics for the compiler writer to view reality in terms of performance stats.
+@<shutdown@>=
+lrclog << "Before thread shutdown" << std::endl;
+yacco2::Parallel_threads_shutdown(pass3);
+lrclog << "After thread shutdown" << std::endl;
+
+@*2 Setup \O2 for parsing.\fbreak
+@<setup \O2 for parsing@>=
+ @<load \o2's keywords into symbol table@>;
+
+@*2 Load \O2's keywords into symbol table.\fbreak
+Basic housekeeping. Originally a grammar recognized keywords
+by being in competition with the Identifier thread.
+Keyword thread only ran if its first set matched the starting character
+making up an identifier and keyword.
+Now it's blended into Identifier using the symbol table lookup that
+returns not only the identifier terminal but all other keyword entries put into
+the symbol table.
+
+For now, only the keywords are cloned off as unique entities whilst all other
+entries are
+passed back from their symbol table with its source co-ordinates being overriden.
+@<load \o2's keywords into symbol table@>=
+ LOAD_YACCO2_KEYWORDS_INTO_STBL();
+
+@*2 Fetch command line info and parse the 3 languages.\fbreak
+The 3 separate languages to parse are:\fbreak
+\ptindent{1) fetching of the command line to place into a holding file}
+\ptindent{2) the command line in the holding file --- grammar file name and options}
+\ptindent{3) the grammar file's contents}
+Items 1 and 2 are handled by external routines where
+fetching of the command line is crude but all-purpose whilst
+the command line language is specific to \O2.
+@<fetch command line info and parse the 3 languages@>=
+ @<get command line...@>;
+ @<parse command line data placed in holding file@>;
+ @<parse the grammar@>;
+
+@*2 Get command line, parse it, and place contents into a holding file.
+It uses a generic external routine to do this. The parse is very rudimentary.
+The command data is placed into a holding file provided by
+|Yacco2_holding_file| defined in the external library |o2_externs.h|.
+See |cweb| documents mentioned in the introduction regarding other support libraries.
+If the result is okay, set up \O2's library files for tracing.
+ @<get command line, parse it, and place contents into a holding file@>=
+ GET_CMD_LINE(argc,argv,Yacco2_holding_file,Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+
+
+@*2 Do we have errors?.
+Check that error queue for those errors.
+Note, |DUMP_ERROR_QUEUE| will also flush out
+ any launched threads for the good housekeeping or is it
+housetrained seal
+award? Trying to do my best in the realm of short lived winddowns.
+@<if error queue not empty then deal with posted errors@>=
+if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ return 1;
+}
+
+@*2 Parse command line data placed in holding file.
+@<parse command line data placed in holding file@>=
+ YACCO2_PARSE_CMD_LINE
+ (T_SW,ERR_SW,PRT_SW,o2_file_to_compile,Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+ @<display to user options selected@>;
+ @<extract fq name without extension@>;
+ @<set up logging files@>;
+
+@*3 Extract fully qualified file name to compile without its extension.\fbreak
+Used to access the generated first set control file
+for |cweb| documentation and \O2's tracings.
+Simple check, if the grammar file name does not contain
+a ``.extension'' then use the complete file name.
+@<extract fq name without extension@>=
+std::string::size_type pp = o2_file_to_compile.rfind('.');
+if(pp == std::string::npos){
+ o2_fq_fn_noext += o2_file_to_compile;
+}else{
+ o2_fq_fn_noext += o2_file_to_compile.substr(0,pp);
+}
+
+@*2 Set up \O2's logging files local to the parsed grammar.\fbreak
+There are 2 stages.
+Stage 1 logs to ``1lrerrors.log'' and ``1lrtracings''
+as the command line is being parsed --- |o2_lcl_opts| and |o2_lcl_opt| grammars.
+It has no knowledge of the grammar file to parse.
+Stage 2 passed the command line parsing and the
+inputted grammar file name
+can be used to build the grammar's local \O2 tracing files.
+These log files are ``xxx\_tracings.log'' and ``xxx\_errors.log''
+where the ``xxx'' is the grammar's base file name.
+@<set up logging files@>=
+std::string normal_tracing(o2_fq_fn_noext.c_str());
+normal_tracing += "_tracings.log";
+std::string error_logging(o2_fq_fn_noext.c_str());
+error_logging += "_errors.log";
+yacco2::lrclog.close();
+yacco2::lrerrors.close();
+yacco2::lrclog.open(normal_tracing.c_str());
+yacco2::lrerrors.open(error_logging.c_str());
+
+
+@*3 Display to user options selected.
+@<display to user options selected@>=
+ lrclog << "Parse options selected:" << std::endl;
+ lrclog << " Gen T: " << T_SW;
+ lrclog << " Gen Err: " << ERR_SW;
+ lrclog << " Gen RC: " << PRT_SW;
+
+@*2 Parse the grammar.\fbreak
+Due to the syntax directed code not having legitimate grammars to parse it,
+a character-at-a-time parsing approach is used.
+This is a lexical and syntactic mix of parsing instead of your separate
+lexical, syntax parse stages.
+Why?
+I'll use a question as an answer. How do you recognize the
+`***' directive to end a c++ syntax directed code portion that is an
+ unstructured sequence of characters?
+Well crawl at a character's pace per prefix accessment.
+This is why the bluring between lexical and syntatical boundaries.
+So walk-the-walk-and-talk of a lexical parser using recursive descent
+(for its single call of fame containing a bottom-up parse)
+ tripped off by a bottom-up syntax directed code.
+What a mouthfull!
+Should mother use soap and a tooth brush to punish the child?
+Who is this mother anyway?
+
+Within the |pass3.lex| grammar are procedure calls
+containing the parse phases.
+Each phase is called from
+within the syntax-directed-code of the recognized keyword:
+``fsm'',`` rules'', etc.
+This demonstrates a bottom-up / top-down approach to parsing.
+Options are what it's all about. What's your choice?
+@<parse the grammar@>=
+//|yacco2::YACCO2_TH__ = 1;|
+//|yacco2::YACCO2_MSG__ = 1;|
+ using namespace NS_pass3;
+ tok_can<std::ifstream> cmd_line(o2_file_to_compile.c_str());
+ Cpass3 p3_fsm;
+ Parser pass3(p3_fsm,&cmd_line,&P3_tokens,0,&Error_queue,&JUNK_tokens,0);
+ pass3.parse();
+ @<if error queue not empty then deal with posted errors@>;
+ @<dump lexical and syntactic's outputted tokens@>;
+
+
+@*2 Dump lexical and syntactic's outputted tokens.
+@<dump lexical and syntactic's outputted tokens@>=
+ yacco2::TOKEN_GAGGLE_ITER i = P3_tokens.begin();
+ yacco2::TOKEN_GAGGLE_ITER ie = P3_tokens.end();
+ lrclog << "Dump of P3 tokons" << endl;
+ for(int yyy = 1;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ if(sym == yacco2::PTR_LR1_eog__) continue;
+ lrclog << yyy << ":: " << sym->id__
+ << " file no: " << sym->tok_co_ords__.external_file_id__
+ << " line no: " << sym->tok_co_ords__.line_no__
+ << " pos: " << sym->tok_co_ords__.pos_in_line__
+ << endl;
+ ++yyy;
+}
+
+@*2 Dump aid --- Enumerate grammar's components.\fbreak
+As a reference aid to a grammar's components,
+each component has an enumerate value of ``x.y.z'' where
+x stands for the rule number, y is its subrule number, and z is the component
+number.
+The grammar's enumerated elements are ``rule-def'', ``subrule-def'', and components
+``refered-rule'', ``refered-T'', and ``eosubrule''.
+The ``rules-phrase'' is not enumerated as it just ties all the forests together.
+An enumerate example is ``1'' standing for the Start rule.
+``1.2.2'' goes to its 2nd subrule of component 2.
+
+The grammar is read whereby all its forests are enumerated relative to one another.
+@<dump aid: enumerate grammar's components@>=
+@=set<int> enumerate_filter;@>@/
+ enumerate_filter.insert(T_Enum::T_rule_def_);
+ enumerate_filter.insert(T_Enum::T_T_subrule_def_);
+ enumerate_filter.insert(T_Enum::T_refered_T_);
+ enumerate_filter.insert(T_Enum::T_T_eosubrule_);
+ enumerate_filter.insert(T_Enum::T_refered_rule_);
+ enumerate_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+ enumerate_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+using namespace NS_enumerate_grammar;@/
+
+tok_can_ast_functor walk_the_plank_mate;
+ast_prefix enumerate_grammar_walk
+(*rules_tree,&walk_the_plank_mate,&enumerate_filter,ACCEPT_FILTER);@/
+tok_can<AST*> enumerate_grammar_can(enumerate_grammar_walk);
+Cenumerate_grammar enumerate_grammar_fsm;
+Parser enumerate_grammar(enumerate_grammar_fsm,&enumerate_grammar_can,0,0,&Error_queue);
+enumerate_grammar.parse();
+
+@*2 Epsilon and Pathological assessment of Rules.\fbreak
+Epsilon condition:\fbreak
+Rule contains an empty symbol string in a subrule.
+The only subtlety is when a rule has a subrule(s) containing all rules.
+If all the rules within that subrule are epsiloned, then this
+subrule is an epsilon and so turn on its rule as epsilonable.\fbreak
+\fbreak
+Pathological Rule assessment:\fbreak
+Does a rule derive a terminal string?
+The empty string is included in this assessment.
+|epsilon_rules| grammar tells the whole story.\fbreak
+\fbreak
+Note:\fbreak
+The tree is walked using discrete levels: Rules and Subrules.
+The subrule's elements are filtered out (not included)
+for the discrete rule traversal but is added
+within the rule's syntax directed code logic
+a subrule's element advancement.
+Element advancement bypasses the thread component expression.
+These are neat facilities provided by \O2 using the
+|tok_can| tree traversal containers.
+@<epsilon and pathological assessment of Rules@>=
+using namespace NS_epsilon_rules;@/
+@=set<AST*> yes_pile;@>@/
+@=set<AST*> no_pile;@>@/
+@=list< pair<AST*,AST*> > maybe_list;@>@/
+T_rules_phrase* rules_ph = O2_RULES_PHASE;
+AST* rules_tree = rules_ph->phrase_tree();
+
+@=set<int> filter;@>@/
+filter.insert(T_Enum::T_T_subrule_def_);
+filter.insert(T_Enum::T_rule_def_);
+
+tok_can_ast_functor just_walk_functr;
+ast_prefix rule_walk(*rules_tree,&just_walk_functr,&filter,ACCEPT_FILTER);@/
+tok_can<AST*> rules_can(rule_walk);
+Cepsilon_rules epsilon_fsm;
+Parser epsilon_rules(epsilon_fsm,&rules_can,0,0,&Error_queue);
+epsilon_rules.parse();
+@<Print pathological symptoms but continue@>;
+//|@<print tree@>;|
+
+@ Print pathological symptoms but continue.
+@<Print pathological symptoms but continue@>=
+if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ Error_queue.clear();
+ return 1;
+}
+
+@*2 Get the total number of subrules.\fbreak
+I'm lazy and don't want to distribute the count as
+the individual rules are being parsed so
+do it via the a tree walk on subrules.
+Why do it anyway?
+I've hardwired the |elem_space| table size against
+a constant |Max_no_subrules|.
+Why not allocate the table size dynamicly?
+Glad u asked as the malloc approach burped.
+Maybe there's mixed metaphores on
+malloc versus how the C++ new / delete allocation is done.
+Anyway this works and is reasonable.
+@<get total number of subrules for |elem_space| size check@>=
+@=set<int> sr_filter;@>@/
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+ast_prefix sr_walk(*rules_tree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);@/
+tok_can<AST*> sr_can(sr_walk);
+for(int xx(0);sr_can[xx] != yacco2::PTR_LR1_eog__;++xx);
+O2_T_ENUM_PHASE->total_no_subrules(sr_can.size());
+if(O2_T_ENUM_PHASE->total_no_subrules() > Max_no_subrules){
+ lrclog << "Grammar's number of subrules: "
+ << O2_T_ENUM_PHASE->total_no_subrules()
+ << " exceeds the allocated space for table elem_space: "
+ << Max_no_subrules << endl;
+ lrclog << "This is a big grammar so please correct the grammar." << std::endl;
+ clog << "Grammar's number of subrules: "
+ << O2_T_ENUM_PHASE->total_no_subrules()
+ << " exceeds the allocated space for table elem_space: "
+ << Max_no_subrules << endl;
+ clog << "This is a big grammar so please correct the grammar." << std::endl;
+ return 1;
+}
+
+@*2 Calculate each rule's first set.\fbreak
+Lov the discrete logic of a grammar to code algorithms.
+See |first_set_rules| grammar as it's really is simple in its logic:
+i'm getting there from all corners of the coding world.
+Not any more as i'm pruning the
+overhead so out my drafty thoughts and this grammar |first_set_rules|.
+Just iterate over the grammar tree for filtered |rule_def| nodes only.
+@<calculate rules first sets@>=
+@=set<int> fs_filter;@>@/
+fs_filter.insert(T_Enum::T_rule_def_);
+ast_prefix fs_rule_walk(*rules_tree,&just_walk_functr,&fs_filter,ACCEPT_FILTER);@/
+tok_can<AST*> fs_rules_can(fs_rule_walk);
+for(int xx(0);fs_rules_can[xx] != yacco2::PTR_LR1_eog__;++xx){
+ @=rule_def* rd = (rule_def*)fs_rules_can[xx];@>@/
+ GEN_FS_OF_RULE(rd);
+}
+
+@*2 Calculate Start rule's called threads first set list.\fbreak
+It calculates the ``called threads'' first set
+for the ``to be emitted xxx.fsc''
+ file. The neat wrinkle is the epsilonable rule that requires
+same transience left-to-right moves thru the subrule expressions.
+This is fodder to
+\olinker that builds each thread's first set
+ from the ``list-of-native-first-set-terminal''
+and ``list-of-transitive-threads'' constructs.
+The final outcome of \olinker is an optimized list of threads per terminal.
+The calculation goes across the Start rule and its closured rules
+to determine the list of called threads. This list can be \emptyrule.
+In the ``Start rule'' is the contents for ``list-of-transitive-threads''.
+@<calculate Start rule called threads first sets@>=
+rule_def* start_rule_def = (rule_def*)fs_rules_can.operator[](0);
+GEN_CALLED_THREADS_FS_OF_RULE(start_rule_def);
+
+@*2 Are all Grammar phases parsed?.\fbreak
+As i parse the individual phrases by their keyword presence
+without using a grammar to sequence each phase,
+now is
+the time to see if all the parts are present in the grammar.
+This is a simple iteration on the posted |O2_PHRASE_TBL|
+to fetch their phrase terminals and to put them
+thru a post grammar sequencer.
+
+I changed how the tokens are fetched from fill the container by
+iterating the |O2_xxx| phases to reading the grammar's tree.
+Why?
+Cuz i implicitly changed to on-the-fly enumeration of their values
+while they were being parsed.
+If their order was changed then their appropriate enumerates are out-of-alignment.
+For example if the raw character classification came before the ``lrk'' definitions,
+this would be catastrophic due to the down stream semantics' dependency on their
+correct enumerates. \fbreak
+A bird's view of \O2's phases: indent shows node's dependency\fbreak
+\ptindent{::1 grammar-phrase grammar-phrase file 2:0: line 24:4: sym*: 0122B598}
+\ptindent{ ::2 fsm-phrase fsm-phrase file 2:766: line 24:4: sym*: 01220BA0}
+\ptindent{ ::3 T-enum-phrase T-enum-phrase file 4:1069: line 32:14: sym*: 01272500}
+\ptindent{ ::4 lr1-k-phrase lr1-k-phrase file 5:1727: line 44:21: sym*: 011F0360}
+\ptindent{ ::5 rc-phrase rc-phrase file 6:303: line 13:15: sym*: 01270C98}
+\ptindent{ ::6 error-symbols-phrase error-symbols-phrase file 7:1026: line 34:14: sym*: 0257F388}
+\ptindent{ ::7 terminals-phrase terminals-phrase file 8:474: line 15:10: sym*: 011F1458}
+\ptindent{ ::8 rules-phrase rules-phrase file 2:1708: line 60:6: sym*: 02FB3AA8}
+Notice i walk the tree by |ast_prefix_wbreadth_only|. This visits the start node
+``grammar-phrase'' and only
+its immediate children by the ``breadth-only'' qualifier.
+@<are all phases parsed?@>=
+@=set<int> phase_order_filter;@>@/
+phase_order_filter.insert(T_Enum::T_T_fsm_phrase_);
+phase_order_filter.insert(T_Enum::T_T_enum_phrase_);
+phase_order_filter.insert(T_Enum::T_T_lr1_k_phrase_);
+phase_order_filter.insert(T_Enum::T_T_rc_phrase_);
+phase_order_filter.insert(T_Enum::T_T_error_symbols_phrase_);
+phase_order_filter.insert(T_Enum::T_T_terminals_phrase_);
+phase_order_filter.insert(T_Enum::T_T_rules_phrase_);
+
+tok_can_ast_functor orderly_walk;
+ast_prefix_wbreadth_only
+evaluate_phase_order(*GRAMMAR_TREE,&orderly_walk,&phase_order_filter,ACCEPT_FILTER);@/
+tok_can<AST*> phrases_can(evaluate_phase_order);
+
+using namespace NS_eval_phrases;
+Ceval_phrases eval_fsm;
+Parser eval_phrases(eval_fsm,&phrases_can,0,0,&Error_queue,0,0);
+eval_phrases.parse();
+@<if error queue not...@>;
+
+@*2 Thread's end-of-token stream: Lookahead expression post evaluation.\fbreak
+If the grammar contains the `parallel-parser' construct, then it is considered
+a thread.
+As a refinement, this construct allows one to
+fine-tune the lookahead boundaries of the grammar in its own contextual way.
+As this construct is declared before the grammar's vocabulary definitions --- rules and terminals,
+the expression must be kept in raw character token
+format with some lexems removed like comments.
+Only after all the grammar has been recognized can the lookahead expression be
+parsed properly: the terms in the expression must
+relate to T-in-stbl, rule-in-stbl, and the $+$ or $-$ expression operators.
+
+Squirrelled away in the `parallel-parser' terminal is the raw token stream
+of the lookahead expression.
+The strategy used is to fetch the appropriate parsed phase token from
+the \O2 phase table and then deal with its locally defined pieces of information.
+Originally these parse phases were kept in the global symbol table but
+now they are contained in its own table. Why? Well
+how do u guard against a grammar writer defining a terminal whose key
+could be a synomyn
+to one of my internal parse phases?
+Regardless of how clever one is to naming keys, separation between my
+internal tables and the global symbol table has a 100\% assurance of no conflict.
+
+First set Criteria:\fbreak
+\ptindent{1) Element is a Terminal, use its calculated enumeration value}
+\ptindent{2) If the element is eolr, then use all calculated enumeration values}
+\ptindent{3) Element is a Rule, use its calculated First set terminals}
+
+Before the Lookahead first set can be calculated, the terminal vocabulary must
+be traversed and assigned an enumeration value per terminal.
+The grammar's rules
+must also have their first sets calculated
+before the lookahead expression can be calculated.
+
+The lookahead logic within its grammar(s) is two fold:\fbreak
+ \ptindent{a) parse the lookahead expression for kosher syntax}
+ \ptindent{b) calculate the lookahead's first set from the expression}
+The error checks are for an ill-formed expressions, and for
+an empty first set calculation: for example, `a' - `a', or `b' - `eolr',
+and epsilon Rules used in the lookahead expression.
+This calculated first set is then
+used down stream in the finite state automata (FSA) generation of the grammar.
+@<determine if la expression present. Yes parse it @>=
+ if(O2_PP_PHASE != 0){
+ @<parse la expression and calculate its first set@>;
+ }
+
+@*3 Parse the la expression and calculate its first set.
+@<parse la expression and calculate its first set@>=
+T_parallel_parser_phrase* pp_ph = O2_PP_PHASE;
+
+if(pp_ph->la_bndry() == 0){
+ CAbs_lr1_sym* sym = new Err_pp_la_boundary_attribute_not_fnd;
+ sym->set_rc(*pp_ph);
+ Error_queue.push_back(*sym);
+ @<if error queue not empty then deal with posted errors@>;
+}
+T_parallel_la_boundary* la_bndry = pp_ph->la_bndry();
+yacco2::TOKEN_GAGGLE* la_srce_tok_can = la_bndry->la_supplier();
+yacco2::TOKEN_GAGGLE la_tok_can_lex;
+yacco2::TOKEN_GAGGLE la_expr_tok_can;
+using namespace NS_la_expr_lexical;
+Cla_expr_lexical la_expr_lex_fsm;
+ Parser la_expr_lex_parse(la_expr_lex_fsm,la_srce_tok_can
+ ,&la_tok_can_lex,0,&Error_queue,&JUNK_tokens,0);
+ la_expr_lex_parse.parse();
+ @<if error queue not empty then deal with posted errors@>;
+using namespace NS_la_expr;
+Cla_expr la_expr_fsm;
+ Parser la_expr_parse(la_expr_fsm,&la_tok_can_lex,&la_expr_tok_can
+ ,0,&Error_queue,&JUNK_tokens,0);
+ la_expr_parse.parse();
+ @<if error queue not empty then deal with posted errors@>;
+
+@*2 Determine rule use count: Optimization.\fbreak
+To improve performance, the rules (Productions) symbols are
+newed once and recycled when needed.
+To ensure that there are enough recycled rules available,
+the gramar is traversed and their uses counted.
+If recursion is present within the rule, this adds one more use.
+The grammar tree is traversed looking only for
+``rule-def'', ``subrule-def'', and ``refered-rule'' tokens.
+@<determine each rule use count@>=
+lrclog << "Evaluate rules count" << endl;
+using namespace NS_rules_use_cnt;
+
+@=set<int> rules_use_cnt_filter;@>@/
+rules_use_cnt_filter.insert(T_Enum::T_T_subrule_def_);
+rules_use_cnt_filter.insert(T_Enum::T_rule_def_);
+rules_use_cnt_filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor rules_use_walk_functr;
+ast_prefix rules_use_walk(*GRAMMAR_TREE,&rules_use_walk_functr
+,&rules_use_cnt_filter,ACCEPT_FILTER);
+tok_can<AST*> rules_use_can(rules_use_walk);
+Crules_use_cnt rules_use_cnt_fsm;
+Parser rules_use_cnt(rules_use_cnt_fsm,&rules_use_can,0,0,&Error_queue);
+rules_use_cnt.parse();
+
+
+@*1 Generate grammar's LR1 states.\fbreak
+The global lr states list |LR1_STATES| is added to
+dynamicly as each closure state/vector gens their states.
+|LR1_HEALTH| is the diagnostic of the parsed grammar.
+
+@*2 {\bf {Driver generating lr1 states}}.\fbreak
+Goes thru the lr state list looking for closure states to gen.
+Note: a closure state gens its transitive states.
+A part from the ``closure only'' state (start state), all other states contain
+2 contexts: transitive core items, and possibly added to closured items.
+As the list is read, it evaluates the possible state for gening by
+seeing if there are {\bf {closured}} items needing to be gened.
+There are 3 possible outcomes to this evaluation:\fbreak
+\ptindent{1) items not gened: goto of item is nil.}
+\ptindent{2) items completed due to right boundedness from a previous gen closure state / vector context.}
+\ptindent{3) partially gened items due to common prefix of a previous closure state/vector context.}
+Point 1 + 3 need gening. Point 1 is your regular generation context.
+Point 3 requires walking thru its right side symbols
+to where its goto state needs gening (nil).
+From there its gening proceeds as normal within its own closure state/vector context.
+\fbreak
+
+During each state closure part/vectors pass, lr kosherness is tested within
+each closure state/vector gening context.
+A non lr(1) verdict is returned immediately within
+the gening closure state/vector context.
+The balance of the closure state/vectors to gen are not completed.
+@<generate grammar's LR1 states@>=
+AST* start_rule_def_t = AST::get_1st_son(*rules_tree);
+state* gening_state = new state(start_rule_def_t);
+gen_context gening_context(0,-1);
+STATES_ITER_type si = LR1_STATES.begin();
+STATES_ITER_type sie = LR1_STATES.end();
+
+// list added to dynamicly as each gening context created
+for(;si!=sie;++si){
+ gening_state = *si;
+ gening_context.for_closure_state_ = gening_state;
+ gening_context.gen_vector_ = -1;
+lrclog << "lr state driver considered state: "
+<< gening_context.for_closure_state_->state_no_
+<< " for vector: "
+<< gening_context.gen_vector_
+<< endl;
+
+ LR1_HEALTH = gening_state->gen_transitive_states_for_closure_context(gening_context,*gening_state,*gening_state);
+ if(LR1_HEALTH==NOT_LR1_COMPATIBLE){
+ @<is the grammar unhealthy? yes report the details and exit@>;
+ }
+}
+//|@<print dump state@>;|
+@<commonize la sets@>;
+/* please put back at sign if u want to trace*/
+//|@<print dump state@>;|
+//|@<print dump common states@>;|
+@*3 Is the grammar unhealthy? yes report the details and exit.\fbreak
+@<is the grammar unhealthy? yes report the details and exit@>=
+ if(LR1_HEALTH == NOT_LR1_COMPATIBLE){
+ yacco2::lrclog << "===>Please check Grammar dump file: "
+ << normal_tracing.c_str() << " for Not LR1 details" << endl;
+ std::cout << "===>Please check Grammar dump file: "
+ << normal_tracing.c_str() << " for Not LR1 details" << endl;
+ yacco2::lrclog << "Not LR1 --- check state conflict list of state: "
+ << gening_state->state_no_ << " for details" << endl;
+ @<print dump state@>;
+ @<print dump common states@>;
+ return 1;
+ }
+
+@*3 Commonize LA Sets --- Combine common sets as a space saver.\fbreak
+Go thru the lr states looking for reduced subrules.
+Their lookahead sets have already been calculated so by set equality
+determine common la sets by reading thru the registry for
+its soul mate. This common reference to same sets minimizes space in the emitted lr state tables.
+The index number per set in the |COMMON_LA_SETS| registry will be used
+as part of each generated la set's name.
+This is why the found index number is deposited per reduced subrule.
+When the state tables get emitted, this index number + 1 is used in the gened lookahead's
+name as i prefer its name to be relative to 1.
+ @<commonize la sets@>=
+ COMMONIZE_LA_SETS();
+
+
+@** Overview of \O2's state generated components.\fbreak
+\O2 generates the components making up the automaton and the first set language for \O2{}Linker
+to compile.
+These files are the header definition of the grammar, the ``first set'' file for \O2{}Linker,
+and the implementations of the automata (fsm), it's symbols, and the fsm's states.
+
+Depending on the switches inputted, \O2 can generate the
+Terminal vocubulary defined for the grammar environment:
+the individual terminal classifications of
+errors, lr constants, raw characters, and Terminals.
+As a global reference to all defined terminals,
+an enumeration scheme is emitted.
+
+
diff --git a/web/yacco2/compiler/stbl/yacco2_stbl.w b/web/yacco2/compiler/stbl/yacco2_stbl.w
new file mode 100644
index 0000000000..89ceb72de7
--- /dev/null
+++ b/web/yacco2/compiler/stbl/yacco2_stbl.w
@@ -0,0 +1,860 @@
+@q% file: yacco2_sym_tbl.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% This file is part of YACC02 compiler/compiler project.@>
+
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+%\tracingall=1
+%\tracingall=1
+%\tracingmacros=1
+%\tracingcommands=2
+@i "/usr/local/yacco2/license.w"
+\def\ptindent#1{\line{\hskip.5in{#1}\hfill}}
+\def\fbreak{\hfill\break}
+
+@** Summary of Yacco2 and Linker's Symbol Table.
+Basic hash table for Yacco2's symbols. It is also used by
+Yacco2's linker companion who deals in the terminal first sets of
+threads.
+
+Yacco2's ratatouille:\fbreak
+\ptindent{$\backslash$yacco2$\backslash$compiler$\backslash$stbl - NT symbol table directory}
+\ptindent{|yacco2stbl.w| - cweb generator file}
+\ptindent{|hash_table_size| - current space allocator}
+\ptindent{|yacco2_stbl.h| - header file}
+\ptindent{|yacco2_stbl.cpp| - implementation}
+\ptindent{|yacco2_stbl| - symbol table namespace}
+\ptindent{|yacco2_stbl::stbl| - global symbol table variable}
+\ptindent{|T_sym_report_card| - defined in Yacco2's terminal alphabet}
+
+Dependency files from other Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_err_symbols.h| - error definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from Yacco2's grammar alphabet}
+
+Symbol table procedures:\fbreak
+\ptindent{|yacco2::add_sym_to_stbl|}
+\ptindent{|yacco2::find_sym_in_stbl|}
+\ptindent{|yacco2::get_sym_entry_by_sub|}
+\ptindent{|yacco2::test_program| --- see `how to run the test' section}
+
+Note: |yacco2_stbl.cpp| gets compiled with Yacco2 parse library's grammars and
+placed into the runtime library.
+
+@*2 Synopsis of table entries.\fbreak
+Is it a Forest or a tree?\fbreak
+As u the reader are probably IT types and so trees can have a different meaning,
+ the question can be rephrased: is it a group or an individual?
+The symbol table takes a group approach to symbols.
+What does this mean?
+Each specific symbol (tree) is classified as either
+a rule, terminal, keyword, or a thread thus pigeon holeing
+the entry into a forest.
+This generalization makes parsing the grammar
+easier.
+See |rule_in_stbl| and |T_in_stbl| defined in the terminal grammar
+as classified examples.
+
+The weakness in this 1 to 1 relationship is in
+error processing where the point of reference is not
+where the point of entry into the symbol table occured.
+To correct this weakness, the symbol table's entry has 2 parts:
+the symbol that created the definition
+and a cross reference list as referenced within the
+subrule's right-hand-side string of symbols.
+Each symbol in this xref list provides the source file coordinates
+for error processing purposes.
+The referenced symbol is entered in LILO order.
+
+@*2 Special note.\fbreak
+Scratch pad coordinates of |rule_in_stbl| and |T_in_stbl|\fbreak
+When the symbol table is accessed, the current token's coordinates
+overrides the found table entry's original birthings of
+|rule_in_stbl| or |T_in_stbl|.
+The other entries |th_in_stbl| or |kw_in_stbl| are similarly serviced.
+
+Using this returned generalization terminal with its scratch pad
+origins
+ allows the grammar writer to create other tokens like
+|refered_rule| or |refered_T| containing the current coordinates.
+There are 2 create contexts for a symbol table entry:
+at definition time for all terminals
+and sometimes rules, and referenced time for rules of a subrule
+definition. All symbols in a subrule are references but i
+relaxed the requirement that rules must be defined before use as in
+the formal definition of a grammar. The waiving of this formality
+allows Productions to forward reference to-be-defined rules.
+Of course, Yacco2 must post process the declarations of rule use against
+their definitions to report referenced but not defined rules within the Productions.
+
+
+@** Introduction to Yacco2's Symbol Table.
+This is Yacco2's family of symbol table routines.
+It uses the {\it Linear probing and insertion}
+hashing |Algorithm L| from {\it Vol. 3 Sorting and Searcing}
+P. 526 of {\it The Art of Computer Programming}
+by Donald E. Knuth.
+As the symbols from Yacco2 are variable in length,
+the |Hash procedure code| uses a scheme suggested by R. Sedgewick
+from his book Algorithms 2nd edition p. 233 to modulo per character.
+
+A grammar's symbols are the nonterminals and terminals.
+The terminals are constant
+across all grammars being defined as a thread or a stand-alone unit.
+Usually they are
+brought into the grammar by Yacco2's ``@@'' include file operator.
+Nonterminals (rules) are local to the grammar being defined
+ allowing for same name usuage across multiple grammars.
+The only globalness to a grammar's name is its namespace
+ and possibly its thread name.
+All grammar symbols are mutually exclusive to one another: there is no commonness
+across these enities. From a grammar's perspective, |Terminals| are classified into 4
+categories: errors, raw characters, lr constant symbols, and finally the regular terminals.
+It is their literal string that one uses throughout the grammar's productions which
+makes it global in scope.
+From a syntax-directed code perspective, these categories are emitted
+using their namespace qualifiers.
+This decision was made to lower global namespace pollution.
+Hence the syntax-directed c++ code must use their namespace qualifier.
+From a symbol table management point of view, symbol handling is very easy as
+a symbol scoping stack is not required as in the Pascal language.
+
+Using |cweb| allows me to converse with myself on various considerations which
+hopefully is not too verbous or symptoms of paranoia.
+An array of symbol entry records is used.
+Yes I know what is written about the merits of object oriented programming but...
+As a package all-inclusive-deal the class is safe --- no need to remember cleanup duties like
+ routines that are loosely coupled.
+But do I want to include all the other mechanisms
+required like the operator[] or use a type from the Standard Template Library (STL) like Vector?
+No I don't but I want a containment facility of all
+its loosely declared elements.
+So how to do it? Just wrap it in a namespace construct.
+Now the safe way is to not use a pointer mechanism requiring a destructor for cleanup but
+an array of symbol entry records
+which does not grow out the memory dynamically but
+takes the maximum size at startup time.
+No memory leakage can occur and no cleanup required.
+This requires a change to the symbol entry to indicate vacancy which
+had used the null pointer.
+The cost of table initialization should be done at the compiler/linker/startup time.
+Each occupied entry in the table records how
+the symbol has been used and declared with a pointer to the symbol's definition.
+
+As this is the oracle of
+Yacco2's symbol table management, I want it to be safe and fast. It is the safe part that becomes
+intriguing. There are many ways to handle errors:\fbreak
+\ptindent{1) abort}
+\ptindent{2) throw/catch an error using c++ constructs}
+\ptindent{3) return some form of status}
+
+Abort is a drastic last-resort measure.
+Flow control is shutdown with a message directed
+to the user.
+Throw/catch has merit but I'm not wanting to get into it for efficiency purposes.
+The degree of error processing for this family of routines is single level calls: not recursive.
+Typically point 3 is a singular entity: an integer.
+When things evolve, this strategy is too
+simplistic when more points of evidence need reporting.
+So, lets look at a report card approach which must be safe and efficient.
+When I went to school and teachers could write or would take the time to properly evaluate
+the student through comments, the take home bulletin had to be signed by the parent or a
+proxy...
+Now the report card allows multiple statuses to be marked up and returned
+to the caller. It becomes the caller's responsibility to check for irregularities and
+take appropriate action: not like the old days when an unsigned report card meant
+go back home until a signature acknowledges receipt.
+
+So how can efficiency be put into place?
+A globally defined variable accessed by the caller/called routines has no discipline.
+The caller and the called do their thing with the implicit understanding that each routine
+deposits and checks the global variable.
+It is this implicit coupling that makes
+it highly efficient in a one-to-one action/response narration.
+I do not like implicitness as it forces one to build up all
+these untold truths, constraints, pre-post conditions.
+By importing all components via parameters
+to the called routine removes misunderstanding or forgetfullness.
+
+Now how to make the report card approach efficient? Returning a result by use of
+a function call is the usual way of doing things.
+Established between the caller / called routines
+is the explicit relationship that the result is returned.
+Return-by-value depends on the optimization of the compiler regarding efficiency on
+``the copy of objects'' syndrome.
+Return-by-address thrashs the memory heap.
+Both methods leaves one open to not deal with the returned result.
+In fact the function can be called with the returned parameter being dropped:
+the returned parameter is not assigned to a caller's variable though the compiler
+ should shriek at you.
+This form of calling still
+leaves the potential of memory leaks and sloppy programming.
+Elimination of memory leaks can be programmed out but not the sloppy programming;
+you still need to deal with the report card's verdict.
+Well, 50\% improvement is not bad.
+
+So the only alternative is
+to pass the report card as a parameter: either by reference or by pointer.
+My past experience with threads and pass-by-reference have not been good.
+In fact, depending on the compiler used, the program just did not work consistently!
+Passing by address pointer, though it contains the potential of a bad pointer, has
+never failed me. So my leanings are towards the pointer approach.
+Therefore parameter passing makes the global variable
+a local scope issue for the called routine with its parametric pre-conditions forced onto
+the calling routine.
+This pro-con debate is now
+settled for my routines that are multi-dimensional in findings: even
+a singular dimension gives the mechanism to build out extensions
+using new axes for actions, errors, specific results and ...
+In my mind's eye, this concludes how I will continue developing code.
+The hard part is to maintain this discipline.
+
+October 2004 - grumblings from within.
+Optimism leads to re-trying. We'll have again a go of passing parameters by reference.
+I hope the compilers are more reliable this time in a
+multi-threaded environment than in the past.
+It certainly lowers constraint checks.
+Here goes.
+You'll get a post evaluation report if it's not successful.
+
+Now for the good stuff --- the report card.
+It should contain the following items:\fbreak
+\ptindent{1) status indicator --- okay or failure}
+\ptindent{2) action taken --- aborted,not fnd,fnd,inserted}
+\ptindent{3) $\uparrow$ error terminal when an error occured}
+\ptindent{4) $\uparrow$ symbol-table-entry if found or inserted}
+\ptindent{5) subscript value used}
+
+
+The report card is defined in Yacco2's grammar Terminal section
+that acts as a dictionary of terms.
+
+@*2 Namespace sections.
+@<bns@>=
+namespace yacco2_stbl{
+
+@
+@<ens@>=
+}// end of namspace |yacco2_stbl|
+@
+@<uns@>=
+using namespace yacco2_stbl;
+
+@ Yacco2's symbol table blueprint. Output of the code.
+@(yacco2_stbl.cpp@>=
+@<Include...@>;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+@<Accrue...@>;
+
+
+
+
+@*2 Maintenance.\fbreak
+The following subsections explain what to do in various cases.
+
+@ How to compile the symbol table.
+@^How to compile the symbol table@>
+Originally the project uses Microsoft's Visual Studio c++. Now it's Unix compiled.
+The below notes are in a Microsoft context. U can easily substitute a Unix context.
+In project $\backslash$yacco2$\backslash$compiler$\backslash$grammars,
+the emitted code |yacco2_stbl.cpp| is compiled with
+the grammars used by Yacco2.
+
+@ How to print out |cweave| report.
+@^How to print |cweave| report@>
+
+Fire up the DOS batch command processor
+and set the default directory as follows:\fbreak
+cd $\backslash$yacco2$\backslash$compiler$\backslash$symbol table \fbreak
+
+To produce a PDF document, type in the following at the DOS PROMPT:\fbreak
+pdftex yacco2stbl \fbreak
+
+To produce a postscript document, for the visually impaired like my aging self due
+to the PDF styled greyed section numbers within the table of contents and index,
+type in the following at the DOS PROMPT:\fbreak
+tex yacco2stbl \fbreak
+dvips yacco2stbl \fbreak
+
+Use Ghostscript to print out the yacco2stbl.ps file and Adobe Reader for the \.pdf version.
+
+@*2 Salient Points established.
+@^Salient points @>
+
+Key points concluded:\fbreak
+\ptindent{1) Procedure calls only used. Results are returned thru a passed Report card parameter.}
+\ptindent{2) c++ native types used for efficiency with no memory leaks.}
+\ptindent{3) Namespace eliminates loosely defined entities spread across different spectrums.}
+\ptindent{4) Report card is the scratch pad of evolutionary results used throughout all
+the symbol table phrases.}
+
+@ How to expand the symbol table.
+@^How to expand the symbol table@>
+
+Defined as a cweb macro, |hash_table_size| is the size of the table
+expressed as a prime number.
+If you need to enlarge it, use a Google search on prime number and find
+the Java applelet and run it.
+Adjust this macro definition and re-generate the
+project symbol table in Visual Studio which creates a new
+ctangle |yacco2_stbl.cpp| c++ file.
+This file then needs to be recompiled.
+See |How to compile| @^How to compile the symbol table@> above.
+
+@*2 How to run the test.
+@^How to run the test@>
+
+Create the following DOS batch file:\fbreak
+rem file: t1.bat\fbreak
+@@ECHO OFF\fbreak
+rem testdriver batch harness\fbreak
+rem first parm indicated the option to test\fbreak
+rem 1 - cmd line only\fbreak
+rem 2 - cmd line then P1 lex\fbreak
+rem 3 - cmd line then P3 syntax\fbreak
+rem 4 - runs the symbol table test\fbreak
+echo on\fbreak
+cd $\backslash$yacco2$\backslash$testdriver$\backslash$debug\fbreak
+rem echo Test out symbol table\fbreak
+testdriver 4 $\backslash$yacco2$\backslash$compiler
+$\backslash$grammars$\backslash$fsm\_class\_phrase6.dat\fbreak
+
+Now double click on the batch file created ``t1.bat''.
+NT will launch the batch process and execute the
+``testdriver'' with its passed parameters.
+The appropriate tests are displayed on the
+console of the batch process.
+
+The test run should produce the following approximate facsimile:\fbreak
+C:$\backslash$yacco2$\backslash$testdriver$>$rem file: t1.bat\fbreak
+C:$\backslash$yacco2$\backslash$testdriver$>$
+rem note: remed out lines that have been tested okay\fbreak
+C:$\backslash$yacco2$\backslash$testdriver$>$
+cd $\backslash$yacco2$\backslash$testdriver$\backslash$debug\fbreak
+C:$\backslash$yacco2$\backslash$testdriver$\backslash$Debug$>$
+rem echo test out symbol table\fbreak
+C:$\backslash$yacco2$\backslash$testdriver$\backslash$Debug$>$
+testdriver 4 /yacco2/compiler/grammars/fsm\_class\_phrase6.dat\fbreak
+Prime number used: 20011\fbreak
+Test zero len key\fbreak
+zero\_len\_name: zero-len-symbol\fbreak
+1st entry test\fbreak
+duplicate entry test\fbreak
+Error duplicate entry: dup-entry-in-sym-table\fbreak
+Same key address test\fbreak
+Error same key address: same-address-as-key-in-symbol-table\fbreak
+Fill up balance of table\fbreak
+Overflow test\fbreak
+Error overflow: sym-table-full\fbreak
+Find symbol test\fbreak
+Not found test\fbreak
+Get symbol by subscript test\fbreak
+Error subscript out of range: -1 subscript-out-of-range\fbreak
+Error not found if this message appears more than once: 17482\fbreak
+Remember 1 spot is left vacant in the algorithm!\fbreak
+Error subscript out of range: 20011 subscript-out-of-range\fbreak
+Clean up\fbreak
+enter any key then press Enter: x\fbreak
+
+@*2 Terminology.
+@^Terminology@>
+
+{\bf Symbol's literal} @^Symbol's literal@>
+--- a variable length array of characters delimited by the null character ``00''.
+In c++, it's a |const char*| type. It is the value used to find a
+symbol in Yacco2's symbol table expressed by the string of characters bracketed
+by the double quotes: example is |"#user-declaration"|.
+Go see Yacco2's terminal definitions.
+
+@*2 Facts.
+@^Facts@>
+
+Forget the tabloids and graffitti.
+Here is the gospel truth:\fbreak
+\ptindent{1) |1..prime number| is the total spots in the symbol table}
+\ptindent{2) algorithm leaves 1 spot vacant.}
+\ptindent{3) |prime number-1| is the number of spots for insertion.}
+\ptindent{4) |0..prime number-1| subscript range due to modulo calculation}
+\ptindent{5) Grammar symbols fall into lrk, err, raw character, or terminals}
+\ptindent{6) Each terminal group has its own namespace}
+The vacant spot only surfaces when the table is full
+and is pseudo-random in nature; this is due to value of the keys entered
+and where the hash function @^hash function@> positions them.
+
+@*2 Anatomy of symbol table.
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/yacco2_stbl.1"}{1}{1}
+\fbreak
+\fbreak
+The above figure shows the symbol table (stbl)
+as an array of fixed size records of table$\_$entry having
+one entry in it. I use a quasi Pascal definition to describe the stbl
+cuz its more intuitively descriptive than its ``c++'' cousin.
+A hash function on the symbol's literal name is used where
+it stores the key in its own character pool (char$\_$pool).
+Access to the symbol table is thru the hash function or
+by subscript.
+\fbreak
+\fbreak
+Various table entries:\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/yacco2_stbl.2"}{1}{1}
+
+
+@*2 Create header file for symbol table environment.\fbreak
+Please note the appropriate include files that have been generated by other Yacco2's |cweb|
+sub-systems.
+@(yacco2_stbl.h@>=
+@h
+#ifndef yacco2_stbl_
+#define yacco2_stbl_ 0
+#include "yacco2.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include <cstring>
+namespace yacco2_stbl{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+ extern table_entry stbl[hash_table_size];
+ void hash_fnct(T_sym_tbl_report_card& Report,const char& Key);
+ extern void add_sym_to_stbl@/
+ (T_sym_tbl_report_card& Report
+ ,const char& Name@/
+ ,yacco2::CAbs_lr1_sym& Sym@/
+ ,table_entry::defined_or_used_typ Why@/
+ ,table_entry::entry_typ What);
+ extern void find_sym_in_stbl(T_sym_tbl_report_card& Report,const char& Name);
+ extern void test_program();
+ extern void get_sym_entry_by_sub(T_sym_tbl_report_card& Report,int Sub);
+ extern char char_pool_[char_pool_size];
+ extern int char_pool_idx_;
+};
+#endif
+
+@ Accrue source code.
+@<Accrue source code@>=
+ table_entry yacco2_stbl::stbl[hash_table_size] = {table_entry()};@/
+ char yacco2_stbl::char_pool_[char_pool_size] = {};@/
+ int yacco2_stbl::char_pool_idx_(0);@/
+
+@ @<Hashing@>=
+yacco2_stbl::hash_fnct(Report,Name);
+@ Include header file.
+@<Include header file@>=
+#include "yacco2_stbl.h"
+
+@** Notes regarding hashing.\fbreak
+@^hash function@>
+Due to the variable length of a symbol's name, the hash function
+goes across the character list
+whereby each character's value is added to
+the previous calculated hashed value shifted by some amount
+ and then divided by the |hash_table_size| to get the remainder.
+Moduloing per character prevents a potential overflow.
+
+The reason for not making the hash function external to the world
+ is that its
+output is not universal.
+The calculated value is just the starting seed
+for the |add_sym_to_stbl| to find a vacant spot.
+Hence it is locally accessible by |yacco2_stbl|'s namespace
+procedures.
+
+Constraints:\fbreak
+ \ptindent{ip1: report card to contain the result}
+ \ptindent{ip2: symbol's literal}
+
+Errors:\fbreak
+\ptindent{1) Zero len symbol}
+A potential error could occur if the symbol literal is
+not delimited by a ``00'' the null character.
+This could lead to an address violation.
+As Yacco2 creates this using
+the c++ string facility, this type of error can only
+be caused by the c++ compiler.
+Originally I had programmed an artificial maximun len of
+512 characters but decided that this was overkill.
+
+@d hash_table_size 20011 /* prime of course */
+@d hash_table_full hash_table_size - 1
+@d str_delimiter '\x00'
+@d char_pool_size 100*1024
+@*2 The hash procedure code: |hash_fnct|.
+The length of key includes the delimiter. This allows the complete key to be moved
+into the character pool.
+@<Accrue...@>+=
+void yacco2_stbl::hash_fnct(T_sym_tbl_report_card& Report,const char& Key)
+{
+ Report.pos_ = -1;
+ Report.key_len_ = strlen(&Key);
+ if(Report.key_len_ == 0) {
+ Report.status_ = T_sym_tbl_report_card::failure;
+ Report.err_entry_ = new Err_zero_len_sym;
+ return;
+ }
+ Report.key_len_ += 1;
+ const char* k = &Key;
+ Report.pos_ = *k++;
+ for(;*k != 0;++k) { // walk the plank characters
+ Report.pos_ = ((Report.pos_ *257)+*k) % hash_table_size;
+ }
+ Report.status_ = T_sym_tbl_report_card::okay;
+}
+
+@*2 Add symbol to table routine: |add_sym_to_stbl|.\fbreak
+|Algorithm L|. Watch for the subtlety of the algorithm. It leaves one spot vacant
+so as to not check upfront on every entry whether the table is full.
+This check is done when the item is to be inserted which can produce a table overflow error.
+I was caught by this due to my assumptions going into the reading of the
+algorithm as opposed to
+the remarks on L4 which refines the assumptions to stop the looping due
+to the one spot always left empty.
+Again I prefer the upfront statement of expectations but this was done for teaching purposes.
+As C is not restriced to label length as in MIX, I use the label name to indicate intent
+rather than MIX's letter-number combination.
+The ``leave one spot vacant'' optimization benefits finding an entry.
+
+Constraints:\fbreak
+ \ptindent{ip1: report card to contain the result}
+ \ptindent{ip2: symbol's literal}
+ \ptindent{ip3: symbol object}
+ \ptindent{ip4: reason for entry --- defined or used}
+ \ptindent{ip5: what type of symbol --- terminal or rule}
+
+Errors:\fbreak
+\ptindent{1) duplicate entry}
+\ptindent{3) hash function errors}
+\ptindent{4) same key address between new symbol and item in symbol table}
+
+@<Accrue...@>+=
+void yacco2_stbl::add_sym_to_stbl@/
+ (T_sym_tbl_report_card& Report@/
+ ,const char& Name@/
+ ,yacco2::CAbs_lr1_sym& Sym@/
+ ,table_entry::defined_or_used_typ Why@/
+ ,table_entry::entry_typ What) @/
+{
+ static int guest_cnt(0);
+ hash: @<Hashing@>;
+ @<Handle hash errors@>;
+ compare: @<Compare@>;
+ advance: @<Advance to next@>;
+ insert: @<Insert@>;
+}
+
+
+@ Check the report card for appropriate behavior.
+@<Handle hash errors@>=
+if(Report.status_ == T_sym_tbl_report_card::failure) return;@/
+if(Report.status_ == T_sym_tbl_report_card::fatal) return;@/
+
+
+@ Find a free spot for the symbol.
+@<Compare@>=
+table_entry* te = &yacco2_stbl::stbl[Report.pos_];
+int r(0);
+if(te->vacant_ == true) goto insert;
+
+r = strcmp(te->key_,&Name);
+if(r == 0){
+ Report.status_ = T_sym_tbl_report_card::failure;
+ Report.err_entry_ = new Err_dup_entry_in_sym_table;
+ Report.tbl_entry_ = te;
+ Report.key_len_ = 0;
+ return;
+}
+
+@ Linear probing to find spot.
+@<Advance to next@>=
+--Report.pos_;
+if(Report.pos_ < 0) Report.pos_ += hash_table_size;
+goto compare;
+
+@ Insert the symbol into the table.
+@<Insert@>=
+if(guest_cnt == hash_table_full){@/
+ Report.status_ = T_sym_tbl_report_card::failure;
+ Report.err_entry_ = new Err_sym_tbl_full;
+ return;
+}
+if(char_pool_idx_ + Report.key_len_ > char_pool_size){@/
+ Report.status_ = T_sym_tbl_report_card::failure;
+ Report.err_entry_ = new Err_sym_tbl_char_pool_full;
+ return;
+}
+++guest_cnt;
+te->pos_ = Report.pos_;
+te->vacant_ = false;
+char* key_name = &char_pool_[char_pool_idx_];
+strncpy(key_name,&Name,Report.key_len_);
+te->key_ = key_name;
+te->key_len_ = Report.key_len_;
+char_pool_idx_+=Report.key_len_;
+te->symbol_ = &Sym;
+te->type_ = What;
+if(Why == table_entry::used)
+ te->used_ = true;
+else
+ te->defined_ = true;
+Report.status_ = T_sym_tbl_report_card::okay;
+Report.action_ = T_sym_tbl_report_card::inserted;
+Report.tbl_entry_ = te;
+
+
+
+@*2 Find symbol in table routine: |find_sym_in_stbl|.\fbreak
+This routine's only purpose is to verification
+whether a symbol exists in the symbol table.
+It allows the programmer to be proactive rather than reactive to a
+symbol table problem. How so? Reactive would be when
+ a duplicate error occured when adding a symbol to the table.
+As an error has been posted to the report card, now the programmer
+has to deal with this situation requiring cleanup if
+corrective action is taken that is
+different to the posted error.
+If the error is acceptable, then one can piggy back off the posted error.
+Having options is what it's all about.
+
+Constraints:\fbreak
+ \ptindent{ip1: report card to contain the result}
+ \ptindent{ip2: symbol's literal}
+
+Errors:\fbreak
+\ptindent{1) hash function errors}
+
+@<Accrue...@>+=
+void yacco2_stbl::find_sym_in_stbl(T_sym_tbl_report_card& Report,const char& Name)
+{
+ hash: @<Hashing@>;
+ @<Handle hash errors@>;
+ compare: @<Find Compare@>;
+ advance: @<Find Advance to next@>;
+}
+
+@ Find a free spot for the symbol.
+@<Find Compare@>+=
+Report.tbl_entry_ = &yacco2_stbl::stbl[Report.pos_];
+table_entry* te = Report.tbl_entry_;
+if(te->vacant_ == true) {
+ Report.status_ = T_sym_tbl_report_card::okay;
+ Report.action_ = T_sym_tbl_report_card::not_fnd;
+ return;
+}
+int r = strcmp(te->key_,&Name);
+if(r == 0){
+ Report.status_ = T_sym_tbl_report_card::okay;
+ Report.action_ = T_sym_tbl_report_card::fnd;
+ return;
+}
+
+@ Find Advance to next. Linear probing to find spot.
+@<Find Advance to next@>=
+--Report.pos_;
+if(Report.pos_<0) Report.pos_ += hash_table_size;
+goto compare;
+
+@*2 Get table entry by subscript: |get_sym_entry_by_sub|.
+
+Constraints:\fbreak
+ \ptindent{ip1: report card to contain the result}
+ \ptindent{ip2: subscript where range 0..|hash_table_size| - 1}
+
+Errors:\fbreak
+\ptindent{1) subscript out of range}
+
+@<Accrue...@>+=
+void yacco2_stbl::get_sym_entry_by_sub(T_sym_tbl_report_card& Report,int Sub)
+{
+ Report.pos_ = Sub;
+ if((Sub < 0) || (Sub > hash_table_full)){@/
+ Report.status_ = T_sym_tbl_report_card::failure;
+ Report.err_entry_ = new Err_subscript_out_of_range;
+ return;
+ }
+ Report.tbl_entry_ = &yacco2_stbl::stbl[Sub];
+ Report.status_ = T_sym_tbl_report_card::okay;
+ if(Report.tbl_entry_->vacant_ == false)
+ Report.action_ = T_sym_tbl_report_card::fnd;
+ else
+ Report.action_ = T_sym_tbl_report_card::not_fnd;
+}
+
+
+@** Test program: |test_program|.
+
+A generator manufactures all the symbol literals up to table full.
+The literate routines below describe well each type of test
+ with their appropriate range of errors.
+
+
+
+@<Accrue...@>+=
+void yacco2_stbl::test_program()@/
+{
+@<uns@>;
+ @<Initial var...@>;
+ @<Test 1st entry, duplicate...@>;
+ @<Fill up balance...@>;
+ @<Test table overflow error@>;
+ @<Test find symbol in table@>;
+ @<Test get entry by subscript@>;
+ @<Cleanup@>;
+}
+
+@ Initial variables for test.
+@<Initial variables@>=
+ const char* zero_len_name = "";
+ T_eol* a_good_sym = new T_eol;
+ int cnt(0);
+ T_sym_tbl_report_card report_card;
+ std::cout << "Prime number used: " << hash_table_size << std::endl;
+ std::cout << "Test zero len key" << std::endl;
+ add_sym_to_stbl(report_card,*zero_len_name,*a_good_sym,table_entry::used,table_entry::terminal);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error zero_len_name: " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ std::cout << "Should have been a zero_len_name error " << std::endl;
+ }
+
+@ Test 1st entry, duplicate, and same key address.
+@<Test 1st entry, duplicate, and same key address@>=
+ char buf[256];
+ std::string* sbuf[hash_table_size];// |sbuf[0]| symbolic vacant spot
+ sbuf[1] = new string("1");
+ const char* f1st_dup = "1";
+ std::cout << "1st entry test" << std::endl;
+ add_sym_to_stbl(report_card,*sbuf[1]->c_str(),*a_good_sym,table_entry::defed,table_entry::rule);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error first entry failed: " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }
+
+ std::cout << "duplicate entry test" << std::endl;
+ add_sym_to_stbl(report_card,*f1st_dup,*a_good_sym,table_entry::defed,table_entry::rule);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error duplicate entry: " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ std::cout << "Should have been a duplicate entry error " << std::endl;
+ }
+
+ cout << "Same key address test " << endl;
+ add_sym_to_stbl(report_card,*sbuf[1]->c_str(),*a_good_sym,table_entry::defed,table_entry::rule);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error same key address: " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ std::cout << "Should have been a same key address error " << std::endl;
+ }
+
+@ Fill up balance of table.
+@<Fill up balance of table@>=
+ const char* numeric_key = "%i";
+ std::cout << "Fill up balance of table" << std::endl;
+ for(cnt=2;cnt <= hash_table_full;++cnt){
+ sprintf(buf,numeric_key,cnt);
+ sbuf[cnt] = new string(buf);
+ add_sym_to_stbl(report_card,*sbuf[cnt]->c_str()
+ ,*a_good_sym,table_entry::defed,table_entry::rule);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error entry failed: " << cnt << " "
+ << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }
+ }
+
+@ Test table overflow error.
+@<Test table overflow error@>=
+ const char* overflow_key = "overflow";
+ std::cout << "Overflow test" << std::endl;
+ add_sym_to_stbl(report_card,*overflow_key,*a_good_sym,table_entry::defed,table_entry::rule);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error overflow: " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ std::cout << "Should be overflow error" << std::endl;
+ }
+
+@ Test find symbol in table.
+It walks all the keys just entered whose range is 1..|hash_table_full|.
+The last test is ``not found'' on the overflow key.
+@<Test find symbol in table@>=
+ std::cout << "Find symbol test" << std::endl;
+ for(cnt=1;cnt <= hash_table_full;++cnt){
+ find_sym_in_stbl(report_card,*sbuf[cnt]->c_str());
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error Should have been found: " << cnt
+ << " " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ std::cout << "Error Action should have been found: " << cnt << std::endl;
+ }
+ }
+ }
+ std::cout << "Not found test" << std::endl;
+ find_sym_in_stbl(report_card,*overflow_key);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Should not be an error: " << cnt
+ << " " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ std::cout << "Error should be not found: " << std::endl;
+ }
+ }
+
+@ Test get entry by subscript.
+Walk thru -1..|hash_table_size|. This should produce 2 out-of-bound errors:
+one at each end of the spectrum traveled --- -1 and |hash_table_full|.
+The range 0..|hash_table_full| should have all spots occupied except 1
+vacant spot as explained in the @^Facts@> Facts section.
+@<Test get entry by subscript@>=
+ std::cout << "get symbol by subscript test" << std::endl;
+ for(cnt=-1;cnt <= hash_table_size;++cnt){
+ get_sym_entry_by_sub(report_card,cnt);
+ if(report_card.status_ == T_sym_tbl_report_card::failure){
+ std::cout << "Error subscript out of range: "
+ << cnt << " " << report_card.err_entry_->id__ << std::endl;
+ delete report_card.err_entry_;
+ }else{
+ if(report_card.action_ == T_sym_tbl_report_card::not_fnd){
+ std::cout << "Error not found if this message appears more than once: "
+ << cnt << std::endl;
+ std::cout << "Remember 1 spot is left vacant in the algorithm!" << std::endl;
+ }
+ }
+ }
+
+@ Cleanup.
+@<Cleanup@>=
+ std::cout << "Clean up" << std::endl;
+ delete a_good_sym;
+ for(cnt=1;cnt <= hash_table_full;++cnt){
+ delete sbuf[cnt];
+ }
+
+@* Notes: bric-a-brac.
+@ Remove key address dependency and copy key to a global |char_pool_| area.\fbreak
+Originally I used the passed key's address also as storage and
+guarded against the same key address passed by an error.
+Now what if one drains its info from cin into a common storage area?
+So I am more robust but with more overhead.
+
+The symbol table can now be used elsewhere. The |CAbs_lr1_sym| value item would
+be changed to some generic or specific object. Possibly |void*| with type casting
+or adjusted to the local requirements.
+\fbreak
+Improvement: 8 Mar. 2005
+
+@* Index. \ No newline at end of file
diff --git a/web/yacco2/copyright.w b/web/yacco2/copyright.w
new file mode 100644
index 0000000000..16a9b868aa
--- /dev/null
+++ b/web/yacco2/copyright.w
@@ -0,0 +1,11 @@
+@q file: copyright.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Copyright.\fbreak
+ Copyright \copyright{} Dave Bone 1998 - 2015\fbreak
+\fbreak
+
diff --git a/web/yacco2/diagrams/1test.txt b/web/yacco2/diagrams/1test.txt
new file mode 100644
index 0000000000..6d57ae2378
--- /dev/null
+++ b/web/yacco2/diagrams/1test.txt
@@ -0,0 +1,33 @@
+/* FILE: 1test.lex
+ dates: 17 Apr 2001
+ Purpose: see why merge does not work
+*/
+fsm
+(fsm-id "test.lex",fsm-filename test,fsm-namespace NS_test
+,fsm-class Cpas_keyword
+,fsm-version "1.0",fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments "Merge proplempascal Keyword recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_test
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/pascalxlator/pas_include_files.T"
+rules{
+Rtest AD AB(){
+ -> Rtest_indiv
+}
+
+Rtest_indiv AD AB(){
+ -> Ra Rc
+ -> Rr Ra Rm
+ -> RE Ra Rt
+}
+
+Ra AD AB(){-> "a" -> "A"} Rc AD AB(){-> "c" } Rr AD AB(){-> "r" }
+RE AD AB(){-> "e" } Rt AD AB(){-> "t" } Rm AD AB(){-> "m" }
+}// end of rules \ No newline at end of file
diff --git a/web/yacco2/diagrams/TS_la1.mp b/web/yacco2/diagrams/TS_la1.mp
new file mode 100644
index 0000000000..0b03dfa6fb
--- /dev/null
+++ b/web/yacco2/diagrams/TS_la1.mp
@@ -0,0 +1,60 @@
+% file: TS_la1.mp - grammar railroad diagrams for mpost program
+
+% date: Wed Nov 08 16:30:09 2006
+input "/yacco2/library/o2diag.mp"
+numeric no_of_rules,Box_solid,Box_dotted,Circle_solid,Circle_dotted;
+Box_solid:=1;Box_dotted:=2;Circle_solid:=3;Circle_dotted:=4;
+string rule_names[].literal;
+string rule_names[].vname;
+numeric rule_s_no_rhs[];
+string rhs_elems[][][].literal;
+string rhs_elems[][][].vname;
+numeric rhs_elems[][][].Drw_how;
+numeric rule_s_subrule_no_elems[][];
+no_of_rules := 2;
+rule_names[1].literal := "Reol";rule_names[1].vname := "Reol";
+rule_s_no_rhs[1] := 1;
+rule_s_subrule_no_elems[1][1]:= 1;
+rhs_elems[1][1][1].literal := "Rdelimiters";
+rhs_elems[1][1][1].Drw_how := Box_solid;
+rhs_elems[1][1][1].vname := "aaaaaa";
+rule_names[2].literal := "Rdelimiters";rule_names[2].vname := "Rdelimiters";
+rule_s_no_rhs[2] := 3;
+rule_s_subrule_no_elems[2][1]:= 1;
+rhs_elems[2][1][1].literal := "x0a";
+rhs_elems[2][1][1].Drw_how := Circle_solid;
+rhs_elems[2][1][1].vname := "abaaaa";
+rule_s_subrule_no_elems[2][2]:= 2;
+rhs_elems[2][2][1].literal := "x0d";
+rhs_elems[2][2][1].Drw_how := Circle_solid;
+rhs_elems[2][2][1].vname := "ababaa";
+rhs_elems[2][2][2].literal := "|.|";
+rhs_elems[2][2][2].Drw_how := Circle_solid;
+rhs_elems[2][2][2].vname := "ababab";
+rule_s_subrule_no_elems[2][3]:= 2;
+rhs_elems[2][3][1].literal := "x0d";
+rhs_elems[2][3][1].Drw_how := Circle_solid;
+rhs_elems[2][3][1].vname := "abacaa";
+rhs_elems[2][3][2].literal := "x0a";
+rhs_elems[2][3][2].Drw_how := Circle_solid;
+rhs_elems[2][3][2].vname := "abacab";
+init_variables;
+beginfig(1);
+ drw_rule(1);
+endfig;
+beginfig(2);
+ drw_rule_a_rhs(1,1);
+endfig;
+beginfig(3);
+ drw_rule(2);
+endfig;
+beginfig(4);
+ drw_rule_a_rhs(2,1);
+endfig;
+beginfig(5);
+ drw_rule_a_rhs(2,2);
+endfig;
+beginfig(6);
+ drw_rule_a_rhs(2,3);
+endfig;
+end;
diff --git a/web/yacco2/diagrams/TS_la2.mp b/web/yacco2/diagrams/TS_la2.mp
new file mode 100644
index 0000000000..a864b50af7
--- /dev/null
+++ b/web/yacco2/diagrams/TS_la2.mp
@@ -0,0 +1,60 @@
+% file: TS_la2.mp - grammar railroad diagrams for mpost program
+
+% date: Wed Nov 08 16:30:19 2006
+input "/yacco2/library/o2diag.mp"
+numeric no_of_rules,Box_solid,Box_dotted,Circle_solid,Circle_dotted;
+Box_solid:=1;Box_dotted:=2;Circle_solid:=3;Circle_dotted:=4;
+string rule_names[].literal;
+string rule_names[].vname;
+numeric rule_s_no_rhs[];
+string rhs_elems[][][].literal;
+string rhs_elems[][][].vname;
+numeric rhs_elems[][][].Drw_how;
+numeric rule_s_subrule_no_elems[][];
+no_of_rules := 2;
+rule_names[1].literal := "Reol";rule_names[1].vname := "Reol";
+rule_s_no_rhs[1] := 1;
+rule_s_subrule_no_elems[1][1]:= 1;
+rhs_elems[1][1][1].literal := "Rdelimiters";
+rhs_elems[1][1][1].Drw_how := Box_solid;
+rhs_elems[1][1][1].vname := "aaaaaa";
+rule_names[2].literal := "Rdelimiters";rule_names[2].vname := "Rdelimiters";
+rule_s_no_rhs[2] := 3;
+rule_s_subrule_no_elems[2][1]:= 1;
+rhs_elems[2][1][1].literal := "x0a";
+rhs_elems[2][1][1].Drw_how := Circle_solid;
+rhs_elems[2][1][1].vname := "abaaaa";
+rule_s_subrule_no_elems[2][2]:= 2;
+rhs_elems[2][2][1].literal := "x0d";
+rhs_elems[2][2][1].Drw_how := Circle_solid;
+rhs_elems[2][2][1].vname := "ababaa";
+rhs_elems[2][2][2].literal := "|.|";
+rhs_elems[2][2][2].Drw_how := Circle_solid;
+rhs_elems[2][2][2].vname := "ababab";
+rule_s_subrule_no_elems[2][3]:= 2;
+rhs_elems[2][3][1].literal := "x0d";
+rhs_elems[2][3][1].Drw_how := Circle_solid;
+rhs_elems[2][3][1].vname := "abacaa";
+rhs_elems[2][3][2].literal := "x0a";
+rhs_elems[2][3][2].Drw_how := Circle_solid;
+rhs_elems[2][3][2].vname := "abacab";
+init_variables;
+beginfig(1);
+ drw_rule(1);
+endfig;
+beginfig(2);
+ drw_rule_a_rhs(1,1);
+endfig;
+beginfig(3);
+ drw_rule(2);
+endfig;
+beginfig(4);
+ drw_rule_a_rhs(2,1);
+endfig;
+beginfig(5);
+ drw_rule_a_rhs(2,2);
+endfig;
+beginfig(6);
+ drw_rule_a_rhs(2,3);
+endfig;
+end;
diff --git a/web/yacco2/diagrams/TextFile1.txt b/web/yacco2/diagrams/TextFile1.txt
new file mode 100644
index 0000000000..d901745014
--- /dev/null
+++ b/web/yacco2/diagrams/TextFile1.txt
@@ -0,0 +1,690 @@
+C:\yacco2\compiler\grammars\eol.lex(18): ***
+C:\yacco2\compiler\grammars\eol.lex(21): ***
+C:\yacco2\compiler\grammars\eol.lex(36): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(30): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(36): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(50): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(56): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(76): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(79): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(86): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(96): ***
+C:\yacco2\compiler\grammars\yacco2_err_symbols.lex(103): ***
+C:\yacco2\compiler\grammars\yacco2_T_enumeration.lex(28): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(27): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(45): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(52): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(62): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(69): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(81): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(84): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(92): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(104): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(107): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(115): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(126): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(133): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(144): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(151): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(162): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(168): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(179): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(185): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(197): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(203): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(218): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(233): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(244): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(251): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(262): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(268): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(280): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(288): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(302): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(309): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(312): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(323): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(330): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(333): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(344): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(351): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(354): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(360):"#***" (sym-class T_eocode)
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(375): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(386): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(398): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(405): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(416): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(423): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(426): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(438): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(445): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(458): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(465): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(468): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(488): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(495): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(498): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(514): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(521): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(524): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(535): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(542): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(545): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(564): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(571): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(574): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(588): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(595): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(607): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(614): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(626): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(633): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(645): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(652): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(664): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(671): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(683): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(690): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(702): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(709): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(721): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(728): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(740): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(747): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(759): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(766): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(778): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(785): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(797): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(804): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(816): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(823): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(835): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(842): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(865): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(872): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(878): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(889): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(895): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(913): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(952): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(956): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(989): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1022): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1032): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1045): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1072): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1075): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1096): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1114): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1120): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1138): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1155): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1160): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1201): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1264): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1267): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1284): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1297): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1312): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1322): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1349): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1410): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1417): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1438): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1477): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1482): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1506): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1555): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1561): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1582): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1621): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1626): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1640): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1675): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1678): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1692): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1727): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1730): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1767): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1816): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1821): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1836): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1870): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1873): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1894): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1948): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1952): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1967): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1996): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(1999): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(2011): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(2021): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(2033): ***
+C:\yacco2\compiler\grammars\yacco2_terminals.lex(2043): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(23): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(27): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(34): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(38): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(45): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(49): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(55): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(59): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(66): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(70): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(77): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(81): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(88): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(92): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(99): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(103): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(110): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(114): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(121): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(125): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(132): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(136): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(143): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(147): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(154): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(158): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(165): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(169): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(176): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(180): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(187): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(191): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(198): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(202): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(209): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(213): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(220): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(224): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(231): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(235): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(242): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(246): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(253): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(257): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(264): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(268): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(275): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(279): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(286): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(290): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(297): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(301): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(308): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(312): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(319): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(323): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(330): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(334): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(341): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(345): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(352): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(356): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(363): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(367): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(374): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(378): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(385): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(389): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(396): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(400): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(407): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(411): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(418): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(422): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(429): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(433): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(440): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(444): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(451): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(455): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(462): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(466): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(473): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(477): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(484): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(488): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(495): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(499): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(506): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(510): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(517): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(521): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(528): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(532): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(539): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(543): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(550): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(554): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(561): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(565): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(572): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(576): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(583): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(587): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(594): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(598): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(605): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(609): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(616): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(620): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(627): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(631): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(638): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(642): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(649): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(653): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(660): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(664): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(671): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(675): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(682): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(686): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(693): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(697): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(704): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(708): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(715): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(719): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(726): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(730): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(738): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(742): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(749): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(753): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(760): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(764): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(771): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(775): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(782): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(786): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(793): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(797): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(804): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(808): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(815): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(819): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(826): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(830): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(837): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(841): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(848): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(852): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(859): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(863): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(870): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(874): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(881): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(885): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(892): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(896): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(903): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(907): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(914): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(918): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(925): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(929): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(936): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(940): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(947): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(951): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(958): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(962): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(969): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(973): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(980): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(984): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(991): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(995): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1002): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1006): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1013): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1017): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1024): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1028): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1035): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1039): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1046): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1050): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1057): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1061): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1068): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1072): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1079): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1083): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1091): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1095): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1102): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1106): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1113): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1117): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1124): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1128): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1135): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1139): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1146): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1150): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1157): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1161): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1168): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1172): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1179): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1183): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1190): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1194): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1201): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1205): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1212): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1216): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1223): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1227): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1234): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1238): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1245): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1249): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1256): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1260): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1267): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1271): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1278): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1282): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1289): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1293): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1300): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1304): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1311): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1315): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1322): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1326): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1333): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1337): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1344): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1348): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1355): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1359): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1366): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1370): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1377): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1381): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1388): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1392): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1399): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1403): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1410): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1414): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1421): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1425): ***
+C:\yacco2\library\grammars\yacco2_characters.lex(1435):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1439):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1446):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1450):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1457):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1461):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1468):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1472):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1479):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1483):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1490):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1494):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1501):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1505):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1512):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1516):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1523):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1527):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1534):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1538):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1545):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1549):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1556):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1560):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1567):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1571):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1578):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1582):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1589):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1593):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1600):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1604):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1611):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1615):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1622):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1626):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1633):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1637):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1644):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1648):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1655):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1659):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1666):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1670):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1677):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1681):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1688):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1692):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1699):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1703):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1710):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1714):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1721):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1725):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1732):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1736):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1743):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1747):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1754):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1758):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1765):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1769):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1776):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1780):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1787):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1791):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1798):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1802):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1809):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1813):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1820):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1824):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1831):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1835):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1842):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1846):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1853):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1857):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1864):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1868):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1875):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1879):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1886):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1890):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1897):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1901):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1908):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1912):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1919):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1923):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1930):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1934):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1941):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1945):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1952):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1956):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1963):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1967):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1974):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1978):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1985):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1989):***
+C:\yacco2\library\grammars\yacco2_characters.lex(1996):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2000):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2007):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2011):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2018):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2022):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2029):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2033):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2040):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2044):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2051):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2055):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2062):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2066):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2073):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2077):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2084):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2088):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2095):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2099):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2106):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2110):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2117):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2121):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2128):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2132):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2139):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2143):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2150):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2154):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2161):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2165):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2172):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2176):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2183):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2187):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2194):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2198):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2205):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2209):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2216):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2220):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2227):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2231):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2238):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2242):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2249):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2253):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2260):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2264):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2271):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2275):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2282):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2286):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2293):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2297):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2304):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2308):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2315):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2319):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2326):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2330):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2337):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2341):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2348):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2352):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2359):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2363):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2370):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2374):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2381):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2385):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2392):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2396):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2403):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2407):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2414):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2418):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2425):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2429):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2436):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2440):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2447):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2451):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2458):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2462):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2469):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2473):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2480):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2484):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2491):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2495):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2502):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2506):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2513):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2517):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2524):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2528):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2535):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2539):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2546):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2550):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2557):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2561):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2568):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2572):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2579):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2583):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2590):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2594):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2601):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2605):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2612):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2616):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2623):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2627):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2634):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2638):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2645):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2649):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2656):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2660):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2667):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2671):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2678):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2682):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2689):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2693):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2700):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2704):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2711):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2715):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2722):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2726):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2733):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2737):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2744):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2748):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2755):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2759):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2766):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2770):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2777):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2781):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2788):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2792):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2799):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2803):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2810):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2814):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2821):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2825):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2832):***
+C:\yacco2\library\grammars\yacco2_characters.lex(2836):***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(24): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(31): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(38): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(45): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(52): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(59): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(66): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(73): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(82): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(89): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(96): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(103): ***
+C:\yacco2\library\grammars\yacco2_k_symbols.lex(115):***
diff --git a/web/yacco2/diagrams/Tsym.txt b/web/yacco2/diagrams/Tsym.txt
new file mode 100644
index 0000000000..23bcb3ba3b
--- /dev/null
+++ b/web/yacco2/diagrams/Tsym.txt
@@ -0,0 +1,30 @@
+/*
+file: Tsym.txt
+Why: terminals symbols vocabulary to parse.
+Note: terminals is shown for clarity. It is the keyword trigger
+ that calls this grammar. Parsed is comments onwards.
+*/
+terminals
+// comments
+(file-name o2_terminals,name-space NS_o2_terminals){
+/@
+Makesure c++ forward references compile.
+@/
+ terminals-refs
+ using namespace std;
+ struct T_c_literal;
+ ....
+ struct refered_T;
+ ***
+"option-t" AD
+ /@
+ Command line option for \O2 indicating generate T vocabulary code.
+ Returned from |yacco2_lcl_option| thread.
+ @/
+ (sym-class T_option_t)
+ ....
+ "lint" (sym-class T_lint)
+ terminals-sufx
+ static int* NS_o2_terminals::example_(0);
+ ***
+} \ No newline at end of file
diff --git a/web/yacco2/diagrams/arbitrator.txt b/web/yacco2/diagrams/arbitrator.txt
new file mode 100644
index 0000000000..5a24b1fa9a
--- /dev/null
+++ b/web/yacco2/diagrams/arbitrator.txt
@@ -0,0 +1,25 @@
+,parallel-control-monitor{
+ arbitrator-code
+ // arbitration
+ // between
+ // x y winner
+ // identifier keyword keyword
+ // fp no integer fp no
+ //
+ using namespace NS_pas_T_enum;
+ {
+ for(i=1;i<=ie;++i){
+ if(To_judge->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_pas_T_enum::T_Enum::T_T_keyword_){
+ goto arbitrated_parameter;
+ }
+ }
+ for(i=1;i<=ie;++i){
+ if(To_judge->pp_accept_queue__[i].accept_token__->enumerated_id__
+ == NS_pas_T_enum::T_Enum::T_T_fp_pt_no_){
+ goto arbitrated_parameter;
+ }
+ }
+ }
+ ***
+ }
diff --git a/web/yacco2/diagrams/array_def.txt b/web/yacco2/diagrams/array_def.txt
new file mode 100644
index 0000000000..18b3ca07b4
--- /dev/null
+++ b/web/yacco2/diagrams/array_def.txt
@@ -0,0 +1,5 @@
+// array_def.txt solution to open-ended array definition
+struct Shift_tbl {
+ yacco2::USINT no_entries__;
+ yacco2::Shift_entry first_entry__[1];
+};
diff --git a/web/yacco2/diagrams/bug1.txt b/web/yacco2/diagrams/bug1.txt
new file mode 100644
index 0000000000..91dc7eb1ba
--- /dev/null
+++ b/web/yacco2/diagrams/bug1.txt
@@ -0,0 +1,8 @@
+std::set<state*> VISITED_MERGE_STATES_IN_LA_CALC;
+int main(int argc,char*argv[]){
+ VISITED_MERGE_STATES_IN_LA_CALC.clear();}
+ if(VISITED_MERGE_STATES_IN_LA_CALC.empty() == true){
+ cout << "===========its empty" << endl;
+ }
+ return 0;
+}
diff --git a/web/yacco2/diagrams/docgeneration.1 b/web/yacco2/diagrams/docgeneration.1
new file mode 100644
index 0000000000..ed767bd060
--- /dev/null
+++ b/web/yacco2/diagrams/docgeneration.1
@@ -0,0 +1,193 @@
+%!PS
+%%BoundingBox: -37 -114 307 11
+%%HiResBoundingBox: -36.5142 -113.62396 306.92596 10.16852
+%%Creator: MetaPost 0.993
+%%CreationDate: 2007.04.02:0933
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 22:80080000000000217d36ee
+%*Font: cmex10 9.96265 9.96265 50:8
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+0 0 moveto
+(xxx.mp) cmr10 9.96265 fshow
+35.6996 0 moveto
+(for) cmr10 9.96265 fshow
+50.948 0 moveto
+(mp) cmr10 9.96265 fshow
+65.0618 0 moveto
+(ost) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath -3 -4.9372 moveto
+80.8472 -4.9372 lineto
+80.8472 9.91852 lineto
+-3 9.91852 lineto
+ closepath stroke
+25.474 -26.85715 moveto
+(mp) cmr10 9.96265 fshow
+39.5878 -26.85715 moveto
+(ost) cmr10 9.96265 fshow
+newpath 22.474 -31.79436 moveto
+55.3732 -31.79436 lineto
+55.3732 -17.72932 lineto
+22.474 -17.72932 lineto
+ closepath stroke
+-33.2642 -47.58649 moveto
+(P) cmex10 9.96265 fshow
+-19.4272 -55.05849 moveto
+(railroad) cmr10 9.96265 fshow
+17.7114 -55.05849 moveto
+(diagrams) cmr10 9.96265 fshow
+60.41249 -55.05849 moveto
+(of) cmr10 9.96265 fshow
+71.7589 -55.05849 moveto
+(grammar) cmr10 9.96265 fshow
+newpath -36.2642 -60.5492 moveto
+114.1114 -60.5492 lineto
+114.1114 -44.58649 lineto
+-36.2642 -44.58649 lineto
+ closepath stroke
+160.59998 -0.9686 moveto
+(xxx.w) cmr10 9.96265 fshow
+189.65778 -0.9686 moveto
+(for) cmr10 9.96265 fshow
+204.90617 -0.9686 moveto
+(cw) cmr10 9.96265 fshow
+216.25247 -0.9686 moveto
+(ea) cmr10 9.96265 fshow
+225.38487 -0.9686 moveto
+(v) cmr10 9.96265 fshow
+230.36627 -0.9686 moveto
+(e) cmr10 9.96265 fshow
+newpath 157.59998 -4.9372 moveto
+237.7941 -4.9372 lineto
+237.7941 9.91852 lineto
+157.59998 9.91852 lineto
+ closepath stroke
+182.75308 -26.9066 moveto
+(cw) cmr10 9.96265 fshow
+194.09938 -26.9066 moveto
+(ea) cmr10 9.96265 fshow
+203.23189 -26.9066 moveto
+(v) cmr10 9.96265 fshow
+208.21318 -26.9066 moveto
+(e) cmr10 9.96265 fshow
+newpath 179.75308 -31.79436 moveto
+215.64099 -31.79436 lineto
+215.64099 -17.72932 lineto
+179.75308 -17.72932 lineto
+ closepath stroke
+181.64603 -53.7143 moveto
+(xxx.tex) cmr10 9.96265 fshow
+newpath 178.64603 -56.7143 moveto
+216.74805 -56.7143 lineto
+216.74805 -44.58649 lineto
+178.64603 -44.58649 lineto
+ closepath stroke
+258.12445 -53.14105 moveto
+(p) cmr10 9.96265 fshow
+263.93605 -53.14105 moveto
+(dftex) cmr10 9.96265 fshow
+newpath 255.12444 -58.07825 moveto
+289.07526 -58.07825 lineto
+289.07526 -43.22253 lineto
+255.12444 -43.22253 lineto
+ closepath stroke
+255.63374 -80.78891 moveto
+(xxx.p) cmr10 9.96265 fshow
+279.98694 -80.78891 moveto
+(df) cmr10 9.96265 fshow
+newpath 252.63374 -85.7261 moveto
+291.56596 -85.7261 lineto
+291.56596 -70.87038 lineto
+252.63374 -70.87038 lineto
+ closepath stroke
+240.52374 -108.43677 moveto
+(\\a) cmr10 9.96265 fshow
+253.80724 -108.43677 moveto
+(p) cmr10 9.96265 fshow
+259.61884 -108.43677 moveto
+(df) cmr10 9.96265 fshow
+271.51874 -108.43677 moveto
+(reader") cmr10 9.96265 fshow
+newpath 237.52374 -113.37396 moveto
+306.67596 -113.37396 lineto
+306.67596 -98.51823 lineto
+237.52374 -98.51823 lineto
+ closepath stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth 1 setlinecap
+newpath 38.9236 -4.9372 moveto
+38.9236 -17.72932 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 37.3928 -14.03375 moveto
+38.9236 -17.72932 lineto
+40.45439 -14.03375 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 38.9236 -31.79436 moveto
+38.9236 -44.58649 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 37.3928 -40.89091 moveto
+38.9236 -44.58649 lineto
+40.45439 -40.89091 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 197.69704 -4.9372 moveto
+197.69704 -17.72932 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 196.16624 -14.03375 moveto
+197.69704 -17.72932 lineto
+199.22783 -14.03375 lineto
+ closepath
+gsave fill grestore stroke
+ [0 5 ] 2.5 setdash
+newpath 114.1114 -52.56784 moveto
+127.31908 -52.56784 135.8557 -39.2965 135.8557 -25.03859 curveto stroke
+newpath 135.8557 -25.03859 moveto
+135.8557 -10.7807 144.39232 2.49066 157.59998 2.49066 curveto stroke
+ [] 0 setdash
+newpath 154.08553 0.58069 moveto
+155.15556 1.32169 156.32661 1.96321 157.59998 2.49066 curveto
+156.32661 3.01811 155.04494 3.39258 153.76436 3.62527 curveto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 197.69704 -31.79436 moveto
+197.69704 -44.58649 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 196.16624 -40.89091 moveto
+197.69704 -44.58649 lineto
+199.22783 -40.89091 lineto
+ closepath
+gsave fill grestore stroke
+newpath 216.74805 -50.65039 moveto
+255.12444 -50.65039 lineto stroke
+newpath 251.42886 -52.18118 moveto
+255.12444 -50.65039 lineto
+251.42886 -49.1196 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 272.09985 -58.07825 moveto
+272.09985 -70.87038 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 270.56906 -67.1748 moveto
+272.09985 -70.87038 lineto
+273.63065 -67.1748 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 272.09985 -85.7261 moveto
+272.09985 -98.51823 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 270.56906 -94.82266 moveto
+272.09985 -98.51823 lineto
+273.63065 -94.82266 lineto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/docgeneration.mp b/web/yacco2/diagrams/docgeneration.mp
new file mode 100644
index 0000000000..eb1eeabd43
--- /dev/null
+++ b/web/yacco2/diagrams/docgeneration.mp
@@ -0,0 +1,57 @@
+% file: docgeneration.mp
+% flow control of how grammar's documents are created
+input boxes
+u:=1cc;
+pair sep,fldsep;
+sep := (0,1u);
+fldsep := (3u,0);
+beginfig(1);
+boxit.docsmp(btex xxx.mp for mpost etex); % mpost doc
+boxit.docsw(btex xxx.w for cweave etex); % cweave doc
+boxit.mpraildocs(btex $\sum$ railroad diagrams of grammar etex); % mpost output
+boxit.mpost(btex mpost etex); % mpost
+boxit.cweave(btex cweave etex); % cweave
+boxit.texdoc(btex xxx.tex etex); % tex doc
+boxit.pdftex(btex pdftex etex); % pdftex
+boxit.pdfdoc(btex xxx.pdf etex); % pdf doc
+boxit.pdfrdr(btex ``a pdf reader'' etex); % pdf reader
+
+% place the boxes
+docsmp.s - sep = mpost.n;
+mpost.s - sep = mpraildocs.n;
+docsmp.e + 2fldsep = docsw.w;
+ypart mpost.n = ypart cweave.n;
+ypart mpost.s = ypart cweave.s;
+docsw.s - sep = cweave.n;
+
+
+cweave.s - sep = texdoc.n;
+texdoc.e + fldsep = pdftex.w;
+pdftex.s - sep = pdfdoc.n;
+pdfdoc.s - sep = pdfrdr.n;
+
+% form the boxes
+drawboxed(docsmp);
+drawboxed(mpost);
+drawboxed(mpraildocs);
+drawboxed(docsw);
+drawboxed(cweave);
+drawboxed(texdoc);
+drawboxed(pdftex);
+drawboxed(pdfdoc);
+drawboxed(pdfrdr);
+
+% draw lined arrows between the boxes
+drawarrow docsmp.s -- mpost.n;
+drawarrow mpost.s -- mpraildocs.n;
+drawarrow docsw.s -- cweave.n;
+pair xxx;
+xxx = .5[mpraildocs.e,docsw.w];
+draw mpraildocs.e {right} .. {up} xxx dashed withdots;
+drawarrow xxx {up} .. {right} docsw.w dashed withdots;
+drawarrow cweave.s -- texdoc.n;
+drawarrow texdoc.e -- pdftex.w;
+drawarrow pdftex.s -- pdfdoc.n;
+drawarrow pdfdoc.s -- pdfrdr.n;
+endfig;
+end; \ No newline at end of file
diff --git a/web/yacco2/diagrams/eol.txt b/web/yacco2/diagrams/eol.txt
new file mode 100644
index 0000000000..e885f29314
--- /dev/null
+++ b/web/yacco2/diagrams/eol.txt
@@ -0,0 +1,39 @@
+/*
+FILE: eol.lex
+Dates: 17 Juin 2003
+Purpose: end-of-line recognizer
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end of line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr // - "x0a" more efficient to use |.|
+ ***
+)
+@"c:/yacco2/compiler/grammars/yacco2_include_files.lex"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters {
+ rhs-op
+ CAbs_lr1_sym* sym = new T_eol;
+ sym->set_rc(*parser()->start_token(),*parser());
+ sym->set_line_no_and_pos_in_line(*parser()->start_token());
+ RSVP(sym)
+ ***
+ }
+}
+
+Rdelimiters AD AB(){
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules \ No newline at end of file
diff --git a/web/yacco2/diagrams/errsym.txt b/web/yacco2/diagrams/errsym.txt
new file mode 100644
index 0000000000..aaa4dc8c3a
--- /dev/null
+++ b/web/yacco2/diagrams/errsym.txt
@@ -0,0 +1,37 @@
+/*
+file: errsym.txt
+Why: error symbols vocabulary to parse.
+Note:
+error-symbols is shown for clarity.
+It is the keyword trigger that calls this grammar.
+Parsed is comments onwards.
+*/
+error-symbols
+// comments
+(file-name yacco2_err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested files exceeded"
+(sym-class Err_nested_files_excded {
+ user-declaration
+ public:
+ Err_nested_files_excded(yacco2::INT Nested_file_cnt,std::string& File_name);
+ yacco2::INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ yacco2::INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+ user-implementation
+ Err_nested_files_excded::
+ Err_nested_files_excded(yacco2::INT Nested_cnt,std::string& File_name)
+ T_CTOR("nested files excded",T_Enum::T_Err_nested_files_excded_,0,false,false)
+ {nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+ ***
+ }
+)
+"no end-of-code" (sym-class Err_no_end_of_code)
+"no cmd-lne-data" (sym-class Err_no_cmd_lne_data)
+"no filename" (sym-class Err_no_filename)
+ ...
+}
diff --git a/web/yacco2/diagrams/fsm.txt b/web/yacco2/diagrams/fsm.txt
new file mode 100644
index 0000000000..34e0a5cd9b
--- /dev/null
+++ b/web/yacco2/diagrams/fsm.txt
@@ -0,0 +1,9 @@
+/*
+file: fsm.txt
+Why: example of a fsm construct to parse.
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0",fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer")
diff --git a/web/yacco2/diagrams/fsm_failed.txt b/web/yacco2/diagrams/fsm_failed.txt
new file mode 100644
index 0000000000..cdf6efaedf
--- /dev/null
+++ b/web/yacco2/diagrams/fsm_failed.txt
@@ -0,0 +1,39 @@
+fsm
+(fsm-id "reset_rewrite_opt.lex",fsm-filename reset_rewrite_opt
+,fsm-namespace NS_reset_rewrite_opt
+,fsm-class Creset_rewrite_opt {
+ user-prefix-declaration
+#include "integer_no.h"
+ ***
+/@
+Trap the failed option and return a bad option.
+This covers errors like the premature prefix -e where it should
+be -err. i could have been less specific to trap
+non first set options (-z) by defaulting to this
+facility but i'm teaching myself...
+As this thread is executed according to its first set ``-'',
+any failed attempt is a bad option.
+Please note the use of the |RSVP_FSM| macro.
+Its context is different than the normal Rule's
+use of |RSVP| macro.
+@/
+ failed
+ CAbs_lr1_sym* s = new LR1_err_bad_rsx_rms_opt;
+ s->set_rc(*parser()->current_token(),*parser()
+ ,"reset_rewrite_opt.lex",__LINE__);
+ RSVP_FSM(s);
+ return true;
+ ***
+}
+,fsm-version "1.1",fsm-date "18 Oct. 2003",fsm-debug "true"
+,fsm-comments "individual rsx/rms options")
+parallel-parser
+(
+ parallel-thread-function
+ TH_reset_rewrite_opt
+ ***
+ parallel-la-boundary
+ "/" + "'"
+ ***
+)
+
diff --git a/web/yacco2/diagrams/fsmclass.txt b/web/yacco2/diagrams/fsmclass.txt
new file mode 100644
index 0000000000..a96efee8a7
--- /dev/null
+++ b/web/yacco2/diagrams/fsmclass.txt
@@ -0,0 +1,45 @@
+/*
+file: fsmclass.txt
+Why: example of text to parse by fsm's class construct.
+*/
+fsm-class Crule_lhs_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+#include "lint_balls.h"
+ ***
+ user-declaration
+ public:
+ void add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc);
+ T_rule_lhs_phrase* rule_lhs_phrase_;
+ ***
+ user-implementation
+ void Crule_lhs_phrase::
+ add_sdc_to_directive(yacco2::CAbs_lr1_sym* Dir,T_syntax_code* Sdc){
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ yacco2::INT eid = Dir->enumerated_id();
+ switch (eid){
+ case T_Enum::T_T_user_implementation_: {
+ T_user_implementation* k = (T_user_implementation*)Dir;
+ k->syntax_code(Sdc);
+ break;
+ }
+ default: {
+ CAbs_lr1_sym* sym = new LR1_err_improper_directive;
+ sym->set_rc(*Dir,*parser());
+ RSVP_FSM(sym);
+ parser()->set_stop_parse(true);
+ }
+ }
+ }
+ ***
+ op
+ rule_lhs_phrase_ = new T_rule_lhs_phrase;
+ rule_lhs_phrase_->set_rc(*parser()->start_token(),*parser());
+ AST* t = new AST(*rule_lhs_phrase_);
+ rule_lhs_phrase_->phrase_tree(t);
+ ***
+ constructor
+ rule_lhs_phrase_ = 0;
+ ***
+}
diff --git a/web/yacco2/diagrams/intro1.txt b/web/yacco2/diagrams/intro1.txt
new file mode 100644
index 0000000000..83d70535d4
--- /dev/null
+++ b/web/yacco2/diagrams/intro1.txt
@@ -0,0 +1 @@
+ T-enumeration (file-name yacco2_T_enumeration,name-space NS_yacco2_T_enum) {} \ No newline at end of file
diff --git a/web/yacco2/diagrams/intro2.txt b/web/yacco2/diagrams/intro2.txt
new file mode 100644
index 0000000000..14f3fdec19
--- /dev/null
+++ b/web/yacco2/diagrams/intro2.txt
@@ -0,0 +1,7 @@
+ T-alphabet
+ LR1_questionable_shift_operator
+ LR1_eog
+ LR1_eolr
+ ...
+ T_file_of_T_alphabet
+ end-T-alphabet
diff --git a/web/yacco2/diagrams/intro3.txt b/web/yacco2/diagrams/intro3.txt
new file mode 100644
index 0000000000..80bacdea1b
--- /dev/null
+++ b/web/yacco2/diagrams/intro3.txt
@@ -0,0 +1,30 @@
+/*
+ File: subrule_def.fsc
+ Date and Time: Fri Dec 7 16:28:47 2007
+*/
+transitive y
+grammar-name "subrule_def"
+name-space "NS_subrule_def"
+thread-name "TH_subrule_def"
+monolithic n
+file-name "subrule_def.fsc"
+no-of-T 567
+list-of-native-first-set-terminals 0
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 1
+ NS_subrule_vector::TH_subrule_vector
+end-list-of-transitive-threads
+list-of-used-threads 10
+ NS_cweb_marker::TH_cweb_marker
+ NS_dbl_colon::TH_dbl_colon
+ NS_identifier::TH_identifier
+ NS_lint_balls::TH_lint_balls
+ NS_o2_sdc::TH_o2_sdc
+ NS_parallel_oper::TH_parallel_oper
+ NS_rhs_bnd::TH_rhs_bnd
+ NS_rhs_component::TH_rhs_component
+ NS_rtn_component::TH_rtn_component
+ NS_subrule_vector::TH_subrule_vector
+end-list-of-used-threads
+fsm-comments
+"Parse a subrule: into the valley of sin..."
diff --git a/web/yacco2/diagrams/intro4.txt b/web/yacco2/diagrams/intro4.txt
new file mode 100644
index 0000000000..161f39117a
--- /dev/null
+++ b/web/yacco2/diagrams/intro4.txt
@@ -0,0 +1,21 @@
+ file-of-T-alphabet "c:/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+ emitfile "/yacco2/compiler/grammars/yacco2_fsc.cpp"
+ preamble
+ #include <yacco2.h>
+ #include <yacco2_T_enumeration.h>
+ #include <yacco2_err_symbols.h>
+ #include <yacco2_k_symbols.h>
+ #include <yacco2_terminals.h>
+ #include <yacco2_characters.h>
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_err_symbols;
+ using namespace NS_yacco2_k_symbols;
+ using namespace NS_yacco2_terminals;
+ using namespace NS_yacco2_characters;
+ end-preamble
+ "/yacco2/compiler/grammars/error_symbols_phrase.fsc"
+ "/yacco2/compiler/grammars/error_symbols_phrase_th.fsc"
+ "/yacco2/compiler/grammars/angled_string.fsc"
+ "/yacco2/compiler/grammars/bad_char_set.fsc"
+ "/yacco2/compiler/grammars/c_comments.fsc"
+ ...
diff --git a/web/yacco2/diagrams/linker.1 b/web/yacco2/diagrams/linker.1
new file mode 100644
index 0000000000..68c2a2c118
--- /dev/null
+++ b/web/yacco2/diagrams/linker.1
@@ -0,0 +1,93 @@
+%!PS
+%%BoundingBox: 0 -38 312 7
+%%HiResBoundingBox: 0 -37.50316 311.32541 6.9185
+%%Creator: MetaPost 0.993
+%%CreationDate: 2007.12.03:1258
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0c:800002002402012c800085d5fbe
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+0 0 moveto
+(In) cmr10 9.96265 fshow
+8.8557 0 moveto
+(teractiv) cmr10 9.96265 fshow
+42.0922 0 moveto
+(e:) cmr10 9.96265 fshow
+53.7153 0 moveto
+(\014le) cmr10 9.96265 fshow
+69.7663 0 moveto
+(name) cmr10 9.96265 fshow
+29.36221 -19.71066 moveto
+(Command) cmr10 9.96265 fshow
+77.5151 -19.71066 moveto
+(line) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 96.01251 -16.2514 moveto
+99.21054 -16.2514 lineto
+99.21054 3.45926 lineto
+96.01251 3.45926 lineto stroke
+newpath 99.21054 -6.39607 moveto
+112.00267 -6.39607 lineto stroke
+newpath 108.3071 -7.92686 moveto
+112.00267 -6.39607 lineto
+108.3071 -4.86528 lineto
+ closepath
+gsave fill grestore stroke
+115.00269 -8.88673 moveto
+(Holding) cmr10 9.96265 fshow
+152.36269 -8.88673 moveto
+(\014le) cmr10 9.96265 fshow
+103.50414 -23.74246 moveto
+(\\link) cmr10 9.96265 fshow
+124.53644 -23.74246 moveto
+(ercmd.tmp") cmr10 9.96265 fshow
+183.88495 -9.85533 moveto
+(Link) cmr10 9.96265 fshow
+203.39514 -9.85533 moveto
+(er) cmr10 9.96265 fshow
+newpath 180.88493 -12.85533 moveto
+214.72507 -12.85533 lineto
+214.72507 0.06319 lineto
+180.88493 0.06319 lineto
+ closepath stroke
+230.51721 -8.88673 moveto
+(\\First) cmr10 9.96265 fshow
+259.79631 -8.88673 moveto
+(set) cmr10 9.96265 fshow
+275.3491 -8.88673 moveto
+(\014le".cpp) cmr10 9.96265 fshow
+newpath 168.0928 -6.39607 moveto
+180.88493 -6.39607 lineto stroke
+newpath 177.18936 -7.92686 moveto
+180.88493 -6.39607 lineto
+177.18936 -4.86528 lineto
+ closepath
+gsave fill grestore stroke
+newpath 214.72507 -6.39607 moveto
+227.5172 -6.39607 lineto stroke
+newpath 223.82162 -7.92686 moveto
+227.5172 -6.39607 lineto
+223.82162 -4.86528 lineto
+ closepath
+gsave fill grestore stroke
+124.27505 -35.56596 moveto
+(Figure) cmr10 9.96265 fshow
+155.71275 -35.56596 moveto
+(1:) cmr10 9.96265 fshow
+167.88936 -35.56596 moveto
+(Link) cmr10 9.96265 fshow
+187.39955 -35.56596 moveto
+(er) cmr10 9.96265 fshow
+199.05035 -35.56596 moveto
+(run) cmr10 9.96265 fshow
+217.34285 -35.56596 moveto
+(en) cmr10 9.96265 fshow
+227.02875 -35.56596 moveto
+(vironmen) cmr10 9.96265 fshow
+267.46065 -35.56596 moveto
+(t) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/linker.2 b/web/yacco2/diagrams/linker.2
new file mode 100644
index 0000000000..5c48acd040
--- /dev/null
+++ b/web/yacco2/diagrams/linker.2
@@ -0,0 +1,219 @@
+%!PS
+%%BoundingBox: -56 -70 235 25
+%%HiResBoundingBox: -55.04314 -69.1019 234.30408 24.31938
+%%Creator: MetaPost 0.993
+%%CreationDate: 2007.12.03:1258
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 20:8000f520000008004cc131
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+230.41406 0 lineto
+232.52551 -0.33443 234.34871 1.48877 234.01428 3.60022 curveto
+233.73373 5.37152 232.03331 6.3754 230.41406 7.20044 curveto
+228.79482 8.02548 227.09439 9.02936 226.81384 10.80066 curveto
+226.47942 12.91211 228.30261 14.7353 230.41406 14.40088 curveto
+0 14.40088 lineto
+ closepath stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth 1 setlinecap
+newpath 7.20044 0 moveto
+7.20044 1.44006 lineto stroke
+newpath 14.40088 0 moveto
+14.40088 1.44006 lineto stroke
+newpath 21.60132 0 moveto
+21.60132 1.44006 lineto stroke
+newpath 28.80176 0 moveto
+28.80176 1.44006 lineto stroke
+newpath 36.0022 0 moveto
+36.0022 1.44006 lineto stroke
+newpath 43.20264 0 moveto
+43.20264 1.44006 lineto stroke
+newpath 50.40308 0 moveto
+50.40308 1.44006 lineto stroke
+newpath 57.60352 0 moveto
+57.60352 1.44006 lineto stroke
+newpath 64.80396 0 moveto
+64.80396 1.44006 lineto stroke
+newpath 72.0044 0 moveto
+72.0044 1.44006 lineto stroke
+newpath 79.20483 0 moveto
+79.20483 1.44006 lineto stroke
+newpath 86.40527 0 moveto
+86.40527 1.44006 lineto stroke
+newpath 93.60571 0 moveto
+93.60571 1.44006 lineto stroke
+newpath 100.80615 0 moveto
+100.80615 1.44006 lineto stroke
+newpath 108.00659 0 moveto
+108.00659 1.44006 lineto stroke
+newpath 115.20703 0 moveto
+115.20703 1.44006 lineto stroke
+newpath 122.40747 0 moveto
+122.40747 1.44006 lineto stroke
+newpath 129.60791 0 moveto
+129.60791 1.44006 lineto stroke
+newpath 136.80835 0 moveto
+136.80835 1.44006 lineto stroke
+newpath 144.00879 0 moveto
+144.00879 1.44006 lineto stroke
+newpath 151.20923 0 moveto
+151.20923 1.44006 lineto stroke
+newpath 158.40967 0 moveto
+158.40967 1.44006 lineto stroke
+newpath 165.6101 0 moveto
+165.6101 1.44006 lineto stroke
+newpath 172.81055 0 moveto
+172.81055 1.44006 lineto stroke
+newpath 180.01099 0 moveto
+180.01099 1.44006 lineto stroke
+newpath 187.21143 0 moveto
+187.21143 1.44006 lineto stroke
+newpath 194.41187 0 moveto
+194.41187 1.44006 lineto stroke
+newpath 201.6123 0 moveto
+201.6123 1.44006 lineto stroke
+newpath 208.81274 0 moveto
+208.81274 1.44006 lineto stroke
+newpath 216.01318 0 moveto
+216.01318 1.44006 lineto stroke
+newpath 223.21362 0 moveto
+223.21362 1.44006 lineto stroke
+1.10954 3.99025 moveto
+(1) cmr10 9.96265 fshow
+8.30998 3.99025 moveto
+(0) cmr10 9.96265 fshow
+15.51042 3.99025 moveto
+(0) cmr10 9.96265 fshow
+22.71086 3.99025 moveto
+(0) cmr10 9.96265 fshow
+29.9113 3.99025 moveto
+(0) cmr10 9.96265 fshow
+37.11174 3.99025 moveto
+(0) cmr10 9.96265 fshow
+44.31218 3.99025 moveto
+(0) cmr10 9.96265 fshow
+51.51262 3.99025 moveto
+(0) cmr10 9.96265 fshow
+58.71306 3.99025 moveto
+(1) cmr10 9.96265 fshow
+65.9135 3.99025 moveto
+(0) cmr10 9.96265 fshow
+73.11394 3.99025 moveto
+(0) cmr10 9.96265 fshow
+80.31438 3.99025 moveto
+(0) cmr10 9.96265 fshow
+87.51482 3.99025 moveto
+(0) cmr10 9.96265 fshow
+94.71526 3.99025 moveto
+(0) cmr10 9.96265 fshow
+101.9157 3.99025 moveto
+(0) cmr10 9.96265 fshow
+109.11613 3.99025 moveto
+(0) cmr10 9.96265 fshow
+116.31657 3.99025 moveto
+(1) cmr10 9.96265 fshow
+123.51701 3.99025 moveto
+(0) cmr10 9.96265 fshow
+130.71745 3.99025 moveto
+(0) cmr10 9.96265 fshow
+137.9179 3.99025 moveto
+(0) cmr10 9.96265 fshow
+145.11833 3.99025 moveto
+(0) cmr10 9.96265 fshow
+152.31877 3.99025 moveto
+(0) cmr10 9.96265 fshow
+159.51921 3.99025 moveto
+(0) cmr10 9.96265 fshow
+166.71965 3.99025 moveto
+(0) cmr10 9.96265 fshow
+173.92009 3.99025 moveto
+(1) cmr10 9.96265 fshow
+181.12053 3.99025 moveto
+(0) cmr10 9.96265 fshow
+188.32097 3.99025 moveto
+(0) cmr10 9.96265 fshow
+195.52141 3.99025 moveto
+(0) cmr10 9.96265 fshow
+202.72185 3.99025 moveto
+(0) cmr10 9.96265 fshow
+209.92229 3.99025 moveto
+(0) cmr10 9.96265 fshow
+217.12273 3.99025 moveto
+(0) cmr10 9.96265 fshow
+224.32317 3.99025 moveto
+(1) cmr10 9.96265 fshow
+-55.04314 -9.0185 moveto
+(Thread\040ids:) cmr10 9.96265 fshow
+-31.5629 -19.42038 moveto
+(31) cmr10 9.96265 fshow
+-31.5629 -31.84076 moveto
+(23) cmr10 9.96265 fshow
+-31.5629 -44.26114 moveto
+(15) cmr10 9.96265 fshow
+-29.07224 -56.68152 moveto
+(7) cmr10 9.96265 fshow
+-29.07224 -69.1019 moveto
+(0) cmr10 9.96265 fshow
+93.32547 17.40088 moveto
+(word\0400) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -18.60022 -16.21019 moveto
+3.60022 -16.21019 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 3.60022 -16.21019 moveto
+3.60022 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 5.13103 -3.6956 moveto
+3.60022 0 lineto
+2.06941 -3.6956 lineto
+ closepath
+gsave fill grestore stroke
+newpath -18.60022 -28.63057 moveto
+61.20374 -28.63057 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 61.20374 -28.63057 moveto
+61.20374 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 62.73448 -3.69545 moveto
+61.20374 0 lineto
+59.67299 -3.69545 lineto
+ closepath
+gsave fill grestore stroke
+newpath -18.60022 -41.05095 moveto
+118.80725 -41.05095 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 118.80725 -41.05095 moveto
+118.80725 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 120.33806 -3.6956 moveto
+118.80725 0 lineto
+117.27644 -3.6956 lineto
+ closepath
+gsave fill grestore stroke
+newpath -18.60022 -53.47133 moveto
+176.41077 -53.47133 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 176.41077 -53.47133 moveto
+176.41077 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 177.94168 -3.69586 moveto
+176.41077 0 lineto
+174.87985 -3.69586 lineto
+ closepath
+gsave fill grestore stroke
+newpath -18.60022 -65.89171 moveto
+226.81384 -65.89171 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 226.81384 -65.89171 moveto
+226.81384 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 228.34444 -3.6951 moveto
+226.81384 0 lineto
+225.28325 -3.6951 lineto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/linker.3 b/web/yacco2/diagrams/linker.3
new file mode 100644
index 0000000000..22000c2369
--- /dev/null
+++ b/web/yacco2/diagrams/linker.3
@@ -0,0 +1,11 @@
+%!PS
+%%BoundingBox: 0 0 0 0
+%%HiResBoundingBox: 0 0 0 0
+%%Creator: MetaPost 0.993
+%%CreationDate: 2007.12.03:1258
+%%Pages: 1
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/linker.mp b/web/yacco2/diagrams/linker.mp
new file mode 100644
index 0000000000..96f52d47ce
--- /dev/null
+++ b/web/yacco2/diagrams/linker.mp
@@ -0,0 +1,117 @@
+% file: linker.mp
+input boxes
+%tracingall;
+
+numeric u;
+u=1cc;
+beginfig(1);
+boxjoin(a.se=b.ne);
+numeric ff;
+ff := defaultdy;
+defaultdy:=.5u;
+boxit.int(btex Interactive: file name etex);
+boxit.cmd(btex Command line etex);
+boxjoin(a.se=b.ne);
+drawunboxed(int,cmd);
+
+pair c,d,e,f;
+c:=cmd.e+(.25u,0);
+d:=int.e+(.25u,0);
+e:=.5[c,d];
+f:=e+(1u,0);
+draw cmd.e--c--d--int.e;
+drawarrow e..f;
+defaultdy:= ff;
+
+show f;
+boxjoin();
+
+boxjoin(tmp.nw=holdr.sw;tmp.ne=holdr.se);
+boxit.holdr(btex Holding file etex);
+boxit.tmp(btex ``linkercmd.tmp'' etex);
+boxit.linkr(btex Linker etex);
+boxit.fsc(btex ``First set file''.cpp etex);
+holdr.w=f;
+holdr.e = linkr.w-(1u,0);
+linkr.e = fsc.w-(1u,0);
+
+drawunboxed(holdr);
+drawunboxed(tmp);
+drawboxed(linkr);
+drawunboxed(fsc);
+drawarrow holdr.e--linkr.w;
+drawarrow linkr.e--fsc.w;
+
+
+label.bot(btex Figure 1: Linker run environment etex,linkr.s-(0,1u));
+endfig;
+
+% bit maps
+beginfig(2);
+u:=.1in;
+picture c;
+for i=1 upto 1:
+ x1:= (i-1)*32u;
+ x2:= i*32u;
+ draw (x1,0)--(x2,0)..(x2+.5u,.5u)..(x2,1u)..(x2-.5u,1.5u)..(x2,2u)--(x1,2u)--cycle;
+ for j=1 upto 31:
+ draw (x1+j*u,0)--(x1+j*u,.2u);
+ endfor
+endfor
+% fill in the map contents
+for i=1 upto 32:
+ if (
+ (i = 1) or (i = 9) or
+ (i = 17) or (i = 25) or
+ (i = 32)
+ ):
+ label("1",(x1+i*u-.5u,1u));
+ else:
+ label("0",(x1+i*u-.5u,1u));
+ fi
+endfor
+label.llft("Thread ids:",(x1-.5u,0));
+
+boxjoin(a.sw=b.nw;a.se=b.ne);
+boxit.aa("31");boxit.ba("23");boxit.ca("15");boxit.da("7");boxit.ea("0");
+aa.ne = (x1-.5u,0) -(15bp,10bp);
+drawunboxed(aa,ba,ca,da,ea);
+label.top("word 0",(x1+15*u,2u));
+numeric dlt;
+pair mp,bp;
+bp := (x1+.5u,0);
+dlt:= abs ((x1 + .5u) - xpart aa.e);
+mp:=aa.e+(dlt,0);
+draw aa.e -- mp;
+drawarrow mp--(x1+.5u,0);
+
+bp := (x1+.5u+8u,0);
+dlt:= abs ((x1+.5u+8u) - xpart ba.e);
+mp:=ba.e+(dlt,0);
+draw ba.e -- mp;
+drawarrow mp--bp;
+
+bp := (x1+.5u+16u,0);
+dlt:= abs ((x1+.5u+16u) - xpart ca.e);
+mp:=ca.e+(dlt,0);
+draw ca.e -- mp;
+drawarrow mp--bp;
+
+bp := (x1+.5u+24u,0);
+dlt:= abs ((x1+.5u+24u) - xpart da.e);
+mp:=da.e+(dlt,0);
+draw da.e -- mp;
+drawarrow mp--bp;
+
+bp := (x1+.5u+31u,0);
+dlt:= abs ((x1+.5u+31u) - xpart ea.e);
+mp:=ea.e+(dlt,0);
+draw ea.e -- mp;
+drawarrow mp--bp;
+
+endfig;
+
+% Tables
+beginfig(3);
+endfig;
+end;
diff --git a/web/yacco2/diagrams/lrksym.txt b/web/yacco2/diagrams/lrksym.txt
new file mode 100644
index 0000000000..3400881a98
--- /dev/null
+++ b/web/yacco2/diagrams/lrksym.txt
@@ -0,0 +1,41 @@
+/*
+file: lrksym.txt
+Why: LR k symbols vocabulary to parse.
+Note: lr1-constant-symbols is shown for clarity. It is the keyword trigger
+ that calls this grammar. Parsed is comments onwards.
+*/
+lr1-constant-symbols
+// comments
+(file-name yacco2_k_symbols
+,name-space NS_yacco2_k_symbols){
+ eog
+ /@
+ Used to indicate an end-of-grammar.
+ @/
+ (sym-class LR1_eog {
+ user-declaration
+ LR1_eog();
+ ***
+ user-implementation
+ LR1_eog::LR1_eog()
+ T_CTOR("eog",T_LR1_eog_,0,false,false){}
+ LR1_eog LR1_eog__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_eog__ = &LR1_eog__;
+ ***
+ }
+ )
+ ....
+ "|t|" AD AB(sym-class LR1_fset_transience_operator)
+
+ /@
+ As they are constants, they are defined globally
+ to save space / overhead in the typical new create / delete
+ cycle of terminals. Thar's recycling going on in this green space.
+ @/
+ lrk-sufx
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ ....
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+ ***
+}
+
diff --git a/web/yacco2/diagrams/mpxerr.tex b/web/yacco2/diagrams/mpxerr.tex
new file mode 100644
index 0000000000..bccf03277a
--- /dev/null
+++ b/web/yacco2/diagrams/mpxerr.tex
@@ -0,0 +1,35 @@
+\gdef\mpxshipout{\shipout\hbox\bgroup
+ \setbox0=\hbox\bgroup}
+\gdef\stopmpxshipout{\egroup \dimen0=\ht0 \advance\dimen0\dp0
+ \dimen1=\ht0 \dimen2=\dp0
+ \setbox0=\hbox\bgroup
+ \box0
+ \ifnum\dimen0>0 \vrule width1sp height\dimen1 depth\dimen2
+ \else \vrule width1sp height1sp depth0sp\relax
+ \fi\egroup
+ \ht0=0pt \dp0=0pt \box0 \egroup}
+\mpxshipout% line 10 doc_generation.mp
+xxx.mp output from \strut$O_{2}$%
+\stopmpxshipout
+\mpxshipout% line 11 doc_generation.mp
+mpost%
+\stopmpxshipout
+\mpxshipout% line 12 doc_generation.mp
+$\sum$ xxx railroad diagrams%
+\stopmpxshipout
+\mpxshipout% line 13 doc_generation.mp
+\strut$O_{2}xxx.w%
+\stopmpxshipout
+\mpxshipout% line 14 doc_generation.mp
+cweave%
+\stopmpxshipout
+\mpxshipout% line 15 doc_generation.mp
+\strut$O_{2}$xxx.tex%
+\stopmpxshipout
+\mpxshipout% line 16 doc_generation.mp
+pdftex%
+\stopmpxshipout
+\mpxshipout% line 17 doc_generation.mp
+\strut$O_{2}$xxx.pdf file%
+\stopmpxshipout
+\end{document}
diff --git a/web/yacco2/diagrams/o2_Toverview.1 b/web/yacco2/diagrams/o2_Toverview.1
new file mode 100644
index 0000000000..ec019d82fb
--- /dev/null
+++ b/web/yacco2/diagrams/o2_Toverview.1
@@ -0,0 +1,130 @@
+%!PS
+%%BoundingBox: -4 -4 434 50
+%%HiResBoundingBox: -3.25 -3.25 433.17148 49.38104
+%%Creator: MetaPost 1.005
+%%CreationDate: 2009.11.10:0847
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 2d:8000000001000e9be7e8
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+0 0 moveto
+(en) cmr10 9.96265 fshow
+9.6859 0 moveto
+(umeration) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath -3 -3 moveto
+56.9921 -3 lineto
+56.9921 9.6536 lineto
+-3 9.6536 lineto
+ closepath stroke
+85.57635 -0.13246 moveto
+(lrk) cmr10 9.96265 fshow
+100.82475 -0.13246 moveto
+(meta-terminal) cmr10 9.96265 fshow
+165.60976 -0.13246 moveto
+(constan) cmr10 9.96265 fshow
+198.59715 -0.13246 moveto
+(ts) cmr10 9.96265 fshow
+newpath 82.57635 -3 moveto
+209.40128 -3 lineto
+209.40128 9.6536 lineto
+82.57635 9.6536 lineto
+ closepath stroke
+237.98553 -0.13246 moveto
+(ra) cmr10 9.96265 fshow
+246.59213 -0.13246 moveto
+(w) cmr10 9.96265 fshow
+257.10823 -0.13246 moveto
+(c) cmr10 9.96265 fshow
+261.25934 -0.13246 moveto
+(haracters) cmr10 9.96265 fshow
+newpath 234.98553 -3 moveto
+304.22073 -3 lineto
+304.22073 9.6536 lineto
+234.98553 9.6536 lineto
+ closepath stroke
+332.805 -0.13246 moveto
+(terminals) cmr10 9.96265 fshow
+newpath 329.805 -3 moveto
+376.2922 -3 lineto
+376.2922 9.6536 lineto
+329.805 9.6536 lineto
+ closepath stroke
+404.87646 1.18204 moveto
+(errors) cmr10 9.96265 fshow
+newpath 401.87646 -3 moveto
+432.92148 -3 lineto
+432.92148 9.6536 lineto
+401.87646 9.6536 lineto
+ closepath stroke
+184.43623 39.21252 moveto
+(T) cmr10 9.96265 fshow
+190.80124 39.21252 moveto
+(erminal) cmr10 9.96265 fshow
+226.80524 39.21252 moveto
+(v) cmr10 9.96265 fshow
+231.78653 39.21252 moveto
+(o) cmr10 9.96265 fshow
+237.04463 39.21252 moveto
+(cabulary) cmr10 9.96265 fshow
+newpath 181.43623 34.27533 moveto
+277.43233 34.27533 lineto
+277.43233 49.13104 lineto
+181.43623 49.13104 lineto
+ closepath stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth 1 setlinecap
+newpath 229.43428 34.27533 moveto
+229.43428 22.51498 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 26.99605 22.51498 moveto
+417.39897 22.51498 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 26.99605 22.51498 moveto
+26.99605 9.6536 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 25.46532 13.34903 moveto
+26.99605 9.6536 lineto
+28.52678 13.34903 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 145.98882 22.51498 moveto
+145.98882 9.6536 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 144.45808 13.34903 moveto
+145.98882 9.6536 lineto
+147.51955 13.34903 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 269.60313 22.51498 moveto
+269.60313 9.6536 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 268.0724 13.34903 moveto
+269.60313 9.6536 lineto
+271.13387 13.34903 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 353.0486 22.51498 moveto
+353.0486 9.6536 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 351.51787 13.34903 moveto
+353.0486 9.6536 lineto
+354.57933 13.34903 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 417.39897 22.51498 moveto
+417.39897 9.6536 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 415.86824 13.34903 moveto
+417.39897 9.6536 lineto
+418.9297 13.34903 lineto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/o2_Toverview.mp b/web/yacco2/diagrams/o2_Toverview.mp
new file mode 100644
index 0000000000..1cba6f6435
--- /dev/null
+++ b/web/yacco2/diagrams/o2_Toverview.mp
@@ -0,0 +1,45 @@
+% file: o2_Toverview.mp
+% enumeration and the 4 T classes
+input boxes
+u:=1cc;
+pair sep,fldsep;
+sep := (0,3u);
+fldsep := (2u,0);
+beginfig(1);
+boxit.tclass(btex Terminal vocabulary etex); % enumeration
+boxit.enum(btex enumeration etex); % enumeration
+boxit.lr(btex lrk meta-terminal constants etex); % lrk
+boxit.rc(btex raw characters etex); % raw characters
+boxit.err(btex errors etex); % error tokens
+boxit.t(btex terminals etex); % basic terminal tokens
+
+% place the boxes
+enum.e + fldsep = lr.w;
+lr.e + fldsep = rc.w;
+rc.e + fldsep = t.w;
+t.e + fldsep = err.w;
+ypart enum.n = ypart lr.n = ypart rc.n = ypart t.n = ypart err.n;
+
+
+
+
+drawboxed(enum);
+drawboxed(lr);
+drawboxed(rc);
+drawboxed(t);
+drawboxed(err);
+
+.5[tclass.e,tclass.w] - sep = .5[enum.e,err.w];
+drawboxed(tclass);
+numeric a;
+a := ypart tclass.c - ypart .5sep;
+
+draw tclass.s -- (xpart tclass.s, a);
+draw (xpart enum.n,a) -- (xpart err.n,a); % horozontal line
+drawarrow (xpart enum.n,a) -- enum.n;
+drawarrow (xpart lr.n,a) -- lr.n;
+drawarrow (xpart rc.n,a) -- rc.n;
+drawarrow (xpart t.n,a) -- t.n;
+drawarrow (xpart err.n,a) -- err.n;
+endfig;
+end; \ No newline at end of file
diff --git a/web/yacco2/diagrams/o2_overview.1 b/web/yacco2/diagrams/o2_overview.1
new file mode 100644
index 0000000000..0cc2e2270b
--- /dev/null
+++ b/web/yacco2/diagrams/o2_overview.1
@@ -0,0 +1,368 @@
+%!PS
+%%BoundingBox: -4 -245 426 10
+%%HiResBoundingBox: -3.25 -244.11285 425.9974 9.9036
+%%Creator: MetaPost 0.993
+%%CreationDate: 2008.05.07:1511
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0c:80000010e4000500008147fdfbfc
+%*Font: cmex10 9.96265 9.96265 50:8
+%*Font: cmmi10 9.96265 9.96265 4f:8
+%*Font: cmr7 6.97385 6.97385 32:8
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+0 0 moveto
+(options) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [0 5 ] 2.5 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath -3 -4.9372 moveto
+34.60382 -4.9372 lineto
+34.60382 9.6536 lineto
+-3 9.6536 lineto
+-3 -4.9372 lineto stroke
+75.98022 7.33955 moveto
+(P) cmex10 9.96265 fshow
+89.81723 -0.13245 moveto
+(xxx.lex) cmr10 9.96265 fshow
+124.13312 -0.13245 moveto
+(grammars) cmr10 9.96265 fshow
+ [] 0 setdash
+newpath 72.98021 -4.9372 moveto
+170.41534 -4.9372 lineto
+170.41534 9.6536 lineto
+72.98021 9.6536 lineto
+ closepath stroke
+211.79175 -0.13246 moveto
+(T) cmr10 9.96265 fshow
+218.15675 -0.13246 moveto
+(erminal) cmr10 9.96265 fshow
+254.16075 -0.13246 moveto
+(v) cmr10 9.96265 fshow
+259.14204 -0.13246 moveto
+(o) cmr10 9.96265 fshow
+264.40015 -0.13246 moveto
+(cabulary) cmr10 9.96265 fshow
+newpath 208.79173 -4.9372 moveto
+304.78784 -4.9372 lineto
+304.78784 9.6536 lineto
+208.79173 9.6536 lineto
+ closepath stroke
+115.66348 -38.50885 moveto
+(O) cmmi10 9.96265 fshow
+123.26279 -40.00325 moveto
+(2) cmr7 6.97385 fshow
+newpath 112.66348 -44.99574 moveto
+130.73209 -44.99574 lineto
+130.73209 -27.04063 lineto
+112.66348 -27.04063 lineto
+ closepath stroke
+172.10849 -38.50885 moveto
+(xxx) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath 188.48048 -38.30965 moveto
+191.46928 -38.30965 lineto stroke
+191.46928 -38.50885 moveto
+(errors.log) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 169.10847 -43.44604 moveto
+235.01181 -43.44604 lineto
+235.01181 -28.59033 lineto
+169.10847 -28.59033 lineto
+ closepath stroke
+2.02997 -38.50885 moveto
+(xxx) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath 18.40196 -38.30965 moveto
+21.39076 -38.30965 lineto stroke
+21.39076 -38.50885 moveto
+(tracings.log) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -0.97003 -43.44604 moveto
+74.2871 -43.44604 lineto
+74.2871 -28.59033 lineto
+-0.97003 -28.59033 lineto
+ closepath stroke
+4.75357 -76.88522 moveto
+(xxx[,sym,tbl].cpp) cmr10 9.96265 fshow
+82.84987 -76.88522 moveto
+(\014les) cmr10 9.96265 fshow
+newpath 1.75357 -82.37593 moveto
+102.50958 -82.37593 lineto
+102.50958 -66.41322 lineto
+1.75357 -66.41322 lineto
+ closepath stroke
+143.88599 -76.88524 moveto
+(T-Alphab) cmr10 9.96265 fshow
+186.50409 -76.88524 moveto
+(et) cmr10 9.96265 fshow
+198.12709 -76.88524 moveto
+(and) cmr10 9.96265 fshow
+217.499 -76.88524 moveto
+(xxx.fsc) cmr10 9.96265 fshow
+250.76318 -76.88524 moveto
+(\014les) cmr10 9.96265 fshow
+newpath 140.88597 -82.37593 moveto
+270.423 -82.37593 lineto
+270.423 -66.41322 lineto
+140.88597 -66.41322 lineto
+ closepath stroke
+311.79941 -76.88524 moveto
+(yyy) cmr10 9.96265 fshow
+326.74341 -76.88524 moveto
+(.fsc) cmr10 9.96265 fshow
+344.23341 -76.88524 moveto
+(O) cmmi10 9.96265 fshow
+351.8327 -78.37964 moveto
+(2) cmr7 6.97385 fshow
+356.302 -76.88524 moveto
+(link) cmr10 9.96265 fshow
+372.35301 -76.88524 moveto
+(er) cmr10 9.96265 fshow
+384.00381 -76.88524 moveto
+(mak) cmr10 9.96265 fshow
+402.2687 -76.88524 moveto
+(e) cmr10 9.96265 fshow
+410.01741 -76.88524 moveto
+(\014le) cmr10 9.96265 fshow
+newpath 308.7994 -82.37593 moveto
+425.7474 -82.37593 lineto
+425.7474 -66.41322 lineto
+308.7994 -66.41322 lineto
+ closepath stroke
+349.04866 -115.26163 moveto
+(O) cmmi10 9.96265 fshow
+356.64796 -116.75603 moveto
+(2) cmr7 6.97385 fshow
+361.11726 -115.26163 moveto
+(link) cmr10 9.96265 fshow
+377.16826 -115.26163 moveto
+(er) cmr10 9.96265 fshow
+newpath 346.04866 -121.74852 moveto
+388.49815 -121.74852 lineto
+388.49815 -103.79341 lineto
+346.04866 -103.79341 lineto
+ closepath stroke
+334.63051 -153.63802 moveto
+(O) cmmi10 9.96265 fshow
+342.22981 -155.13242 moveto
+(2) cmr7 6.97385 fshow
+346.69911 -153.63802 moveto
+(link) cmr10 9.96265 fshow
+362.7501 -153.63802 moveto
+(er) cmr10 9.96265 fshow
+374.40091 -153.63802 moveto
+(tables) cmr10 9.96265 fshow
+newpath 331.63051 -160.12491 moveto
+402.9163 -160.12491 lineto
+402.9163 -142.1698 lineto
+331.63051 -142.1698 lineto
+ closepath stroke
+107.36522 -192.92764 moveto
+(CC) cmr10 9.96265 fshow
+newpath 104.36522 -195.92764 moveto
+124.7557 -195.92764 lineto
+124.7557 -183.11984 lineto
+104.36522 -183.11984 lineto
+ closepath stroke
+23.0412 -230.90015 moveto
+(P) cmex10 9.96265 fshow
+36.8782 -238.37215 moveto
+(dispatc) cmr10 9.96265 fshow
+67.6518 -238.37215 moveto
+(h) cmr10 9.96265 fshow
+76.50749 -238.37215 moveto
+(threads) cmr10 9.96265 fshow
+112.0133 -238.37215 moveto
+(table,) cmr10 9.96265 fshow
+139.6873 -238.37215 moveto
+(grammars's) cmr10 9.96265 fshow
+192.9875 -238.37215 moveto
+(lr1) cmr10 9.96265 fshow
+207.9592 -238.37215 moveto
+(tables,) cmr10 9.96265 fshow
+239.563 -238.37215 moveto
+(eac) cmr10 9.96265 fshow
+253.1232 -238.37215 moveto
+(h) cmr10 9.96265 fshow
+261.9789 -238.37215 moveto
+(fsm) cmr10 9.96265 fshow
+280.5759 -238.37215 moveto
+(and) cmr10 9.96265 fshow
+299.9477 -238.37215 moveto
+(rhs) cmr10 9.96265 fshow
+316.6352 -238.37215 moveto
+(pro) cmr10 9.96265 fshow
+331.3301 -238.37215 moveto
+(cedure) cmr10 9.96265 fshow
+newpath 20.0412 -243.86285 moveto
+362.58528 -243.86285 lineto
+362.58528 -227.90013 lineto
+20.0412 -227.90013 lineto
+ closepath stroke
+107.77136 -107.78961 moveto
+(P) cmex10 9.96265 fshow
+121.60837 -115.26161 moveto
+(do) cmr10 9.96265 fshow
+132.40126 -115.26161 moveto
+(c.) cmr10 9.96265 fshow
+144.02437 -115.26161 moveto
+(\014les) cmr10 9.96265 fshow
+164.00507 -115.26161 moveto
+(of) cmr10 9.96265 fshow
+175.35136 -115.26161 moveto
+(xxx.[mp,w]) cmr10 9.96265 fshow
+226.54846 -115.26161 moveto
+(for) cmr10 9.96265 fshow
+241.79686 -115.26161 moveto
+(mp) cmr10 9.96265 fshow
+255.91066 -115.26161 moveto
+(ost,) cmr10 9.96265 fshow
+274.78436 -115.26161 moveto
+(cw) cmr10 9.96265 fshow
+286.13066 -115.26161 moveto
+(ea) cmr10 9.96265 fshow
+295.26306 -115.26161 moveto
+(v) cmr10 9.96265 fshow
+300.24446 -115.26161 moveto
+(e) cmr10 9.96265 fshow
+newpath 104.77136 -121.74852 moveto
+307.67227 -121.74852 lineto
+307.67227 -103.79341 lineto
+104.77136 -103.79341 lineto
+ closepath stroke
+ [0 5 ] 2.5 setdash 1 setlinecap
+newpath 34.60382 -4.9372 moveto
+112.66348 -27.04063 lineto stroke
+ [] 0 setdash
+newpath 108.69101 -27.50664 moveto
+112.66348 -27.04063 lineto
+109.52505 -24.56114 lineto
+ closepath
+gsave fill grestore stroke
+ [0 5 ] 2.5 setdash
+newpath 208.79173 2.3582 moveto
+170.41534 2.3582 lineto stroke
+ [] 0 setdash
+newpath 174.11092 3.88899 moveto
+170.41534 2.3582 lineto
+174.11092 0.82741 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 121.69778 -4.9372 moveto
+121.69778 -27.04063 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 120.167 -23.34511 moveto
+121.69778 -27.04063 lineto
+123.22856 -23.34511 lineto
+ closepath
+gsave fill grestore stroke
+ [0 10 ] 5 setdash
+newpath 130.73209 -36.01819 moveto
+169.10847 -36.01819 lineto stroke
+ [] 0 setdash
+newpath 165.4129 -37.54898 moveto
+169.10847 -36.01819 lineto
+165.4129 -34.4874 lineto
+ closepath
+gsave fill grestore stroke
+ [0 10 ] 5 setdash
+newpath 112.66348 -36.01819 moveto
+74.2871 -36.01819 lineto stroke
+ [] 0 setdash
+newpath 77.98267 -34.4874 moveto
+74.2871 -36.01819 lineto
+77.98267 -37.54898 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 121.69778 -44.99574 moveto
+121.69778 -55.20639 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 121.69778 -55.20639 moveto
+52.13158 -55.20639 lineto stroke
+newpath 121.69778 -55.20639 moveto
+205.6545 -55.20639 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 52.13158 -55.20639 moveto
+52.13158 -66.41322 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 50.60085 -62.71779 moveto
+52.13158 -66.41322 lineto
+53.66231 -62.71779 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 205.6545 -55.20639 moveto
+205.6545 -66.41322 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 204.12376 -62.71779 moveto
+205.6545 -66.41322 lineto
+207.18523 -62.71779 lineto
+ closepath
+gsave fill grestore stroke
+ [0 5 ] 2.5 setdash
+newpath 270.423 -74.39458 moveto
+308.7994 -74.39458 lineto stroke
+ [] 0 setdash
+newpath 305.10382 -75.92537 moveto
+308.7994 -74.39458 lineto
+305.10382 -72.86378 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 367.2734 -82.37593 moveto
+367.2734 -103.79341 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 365.74261 -100.09784 moveto
+367.2734 -103.79341 lineto
+368.8042 -100.09784 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 367.2734 -121.74852 moveto
+367.2734 -142.1698 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 365.74261 -138.47423 moveto
+367.2734 -142.1698 lineto
+368.8042 -138.47423 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 114.56047 -195.92764 moveto
+114.56047 -227.90013 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 113.02971 -224.20465 moveto
+114.56047 -227.90013 lineto
+116.09123 -224.20465 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 52.13158 -82.37593 moveto
+52.13158 -170.33554 lineto stroke
+newpath 367.2734 -160.12491 moveto
+367.2734 -170.33554 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 52.13158 -170.33554 moveto
+367.2734 -170.33554 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 114.56047 -170.33554 moveto
+114.56047 -183.11984 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 113.02971 -179.42436 moveto
+114.56047 -183.11984 lineto
+116.09123 -179.42436 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 121.69778 -44.99574 moveto
+121.69778 -103.79341 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 120.16718 -100.09827 moveto
+121.69778 -103.79341 lineto
+123.2284 -100.09827 lineto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/o2_overview.mp b/web/yacco2/diagrams/o2_overview.mp
new file mode 100644
index 0000000000..a3a7c7213f
--- /dev/null
+++ b/web/yacco2/diagrams/o2_overview.mp
@@ -0,0 +1,105 @@
+% file: o2_overview.mp
+% flow control of O2, O2linker, and c++
+input boxes
+u:=1cc;
+pair sep,fldsep;
+sep := (0,3u);
+fldsep := (3u,0);
+beginfig(1);
+
+boxit.ipoptions(btex options etex); % compile options
+boxit.ipgrammars(btex $\sum$ xxx.lex grammars etex); % input grammars
+boxit.docs(btex $\sum$ doc. files of xxx.[mp,w] for mpost, cweave etex); % doc grammars
+boxit.ipT(btex Terminal vocabulary etex); % T
+boxit.o(btex \strut$O_{2}$ etex); % yacco2 compiler / compiler
+boxit.err(btex xxx\_errors.log etex); % error log
+boxit.tr(btex xxx\_tracings.log etex); % trace log and o2 chatter
+boxit.occ(btex xxx[,sym,tbl].cpp files etex); % yacco2 xxx[,sym,tbl].cpp files
+boxit.fsc(btex T-Alphabet and xxx.fsc files etex); % yacco2 linker files
+boxit.ipfsc(btex yyy.fsc \strut$O_{2}$linker make file etex); % linker make file to build
+boxit.olinker(btex \strut$O_{2}$linker etex); % o2linker
+boxit.olinkerop(btex \strut$O_{2}$linker tables etex); % linker fsc + thd dispatch tble
+boxit.cpp(btex CC etex); % c++ compiler
+boxit.objs(btex $\sum$ dispatch threads table, grammars's lr1 tables, each fsm and rhs procedure etex);
+% place the boxes
+ipoptions.e + fldsep = ipgrammars.w;
+ipgrammars.e + fldsep = ipT.w;
+ypart ipgrammars.n = ypart ipT.n;
+ypart ipoptions.n = ypart ipgrammars.n;
+.5[ipgrammars.e,ipgrammars.w] - sep = .5[o.e,o.w];
+
+occ.e + fldsep = fsc.w;
+fsc.e + fldsep = ipfsc.w;
+.5[o.e,o.w] - sep = .5[occ.e,fsc.w];
+ypart occ.n = ypart fsc.n = ypart ipfsc.n;
+
+.5[ipfsc.e,ipfsc.w] - sep = .5[olinker.e,olinker.w];
+.5[olinker.e,olinker.w] - sep = .5[olinkerop.e,olinkerop.w];
+docs.e + fldsep = olinker.w;
+ypart docs.n = ypart olinker.n;
+tr.e + fldsep = o.w;
+o.e + fldsep = err.w;
+ypart olinkerop.c - ypart sep = ypart cpp.c;
+
+
+objs.n -2fldsep = .5[cpp.e,cpp.w] - sep ;
+
+xx = .5(xpart olinkerop.w - xpart occ.e);
+yy = ypart olinkerop.w;
+(xx,yy) - sep = .5[cpp.e,cpp.w];
+% form the boxes
+
+drawunboxed(ipoptions);
+draw ipoptions.sw -- ipoptions.se -- ipoptions.ne -- ipoptions.nw -- ipoptions.sw dashed withdots;
+%drawboxed(ipoptions);
+drawboxed(ipgrammars);
+drawboxed(ipT);
+drawboxed(o);
+drawboxed(err);
+drawboxed(tr);
+
+drawboxed(occ);
+drawboxed(fsc);
+drawboxed(ipfsc);
+
+drawboxed(olinker);
+drawboxed(olinkerop);
+drawboxed(cpp);
+drawboxed(objs);
+drawboxed(docs);
+% draw lined arrows between the boxes
+drawarrow ipoptions.se -- o.nw dashed withdots;
+drawarrow ipT.w -- ipgrammars.e dashed withdots;
+drawarrow ipgrammars.s -- o.n;
+pair mopt,ldeltaopt,rdeltaopt;
+mopt := .5[o.e,o.w] - .5(0,ypart sep);
+ldeltaopt := (xpart occ.n, ypart mopt);
+rdeltaopt := (xpart fsc.n, ypart mopt);
+drawarrow o.e -- err.w dashed withdots scaled 2;
+drawarrow o.w -- tr.e dashed withdots scaled 2;
+draw o.s -- mopt;
+draw mopt -- ldeltaopt;
+draw mopt -- rdeltaopt;
+drawarrow ldeltaopt -- occ.n;
+drawarrow rdeltaopt -- fsc.n;
+drawarrow fsc.e -- ipfsc.w dashed withdots;
+drawarrow ipfsc.s -- olinker.n;
+drawarrow olinker.s -- olinkerop.n;
+
+y = ypart objs.n - ypart cpp.s;
+drawarrow cpp.s -- cpp.s + (0,y);
+
+pair m,l,r;
+numeric yy;
+yy := ypart cpp.c + ypart .5sep;
+m := (xpart cpp.n,yy);
+l := (xpart occ.s, yy);
+r := (xpart olinkerop.s, yy);
+draw occ.s -- l;
+draw olinkerop.s -- r;
+draw l -- r;
+drawarrow m -- cpp.n;
+drawarrow o.s -- (xpart o.s, ypart docs.n);
+
+endfig;
+end; \ No newline at end of file
diff --git a/web/yacco2/diagrams/o2_structures.1 b/web/yacco2/diagrams/o2_structures.1
new file mode 100644
index 0000000000..974e035ff5
--- /dev/null
+++ b/web/yacco2/diagrams/o2_structures.1
@@ -0,0 +1,80 @@
+%!PS
+%%BoundingBox: -160 -43 201 11
+%%Creator: MetaPost
+%%CreationDate: 2006.11.23:1811
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0d:80000000000002c002400e89f728
+%%EndProlog
+%%Page: 1 1
+0 0 moveto
+(State) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath -3 -3 moveto
+25.69272 -3 lineto
+25.69272 9.8078 lineto
+-3 9.8078 lineto
+ closepath stroke
+-156.13535 -37.40779 moveto
+(V) cmr10 9.96265 fshow
+-149.49355 -37.40779 moveto
+(ectors) cmr10 9.96265 fshow
+-120.62955 -37.40779 moveto
+(map) cmr10 9.96265 fshow
+newpath -159.13535 -42.34499 moveto
+-98.81125 -42.34499 lineto
+-98.81125 -27.59999 lineto
+-159.13535 -27.59999 lineto
+ closepath stroke
+-70.22699 -37.46315 moveto
+(F) cmr10 9.96265 fshow
+-64.55379 -37.46315 moveto
+(ollo) cmr10 9.96265 fshow
+-49.33308 -37.46315 moveto
+(w) cmr10 9.96265 fshow
+-38.81699 -37.46315 moveto
+(set) cmr10 9.96265 fshow
+-23.26419 -37.46315 moveto
+(map) cmr10 9.96265 fshow
+newpath -73.22699 -42.40034 moveto
+-1.44577 -42.40034 lineto
+-1.44577 -27.54463 lineto
+-73.22699 -27.54463 lineto
+ closepath stroke
+27.13852 -37.46315 moveto
+(En) cmr10 9.96265 fshow
+39.17671 -37.46315 moveto
+(try) cmr10 9.96265 fshow
+55.53212 -37.46315 moveto
+(sym) cmr10 9.96265 fshow
+72.74542 -37.46315 moveto
+(b) cmr10 9.96265 fshow
+78.55692 -37.46315 moveto
+(ol) cmr10 9.96265 fshow
+newpath 24.13849 -42.40034 moveto
+89.30573 -42.40034 lineto
+89.30573 -27.54463 lineto
+24.13849 -27.54463 lineto
+ closepath stroke
+117.88998 -38.43175 moveto
+(Con\015ict) cmr10 9.96265 fshow
+155.52669 -38.43175 moveto
+(states) cmr10 9.96265 fshow
+183.86488 -38.43175 moveto
+(list) cmr10 9.96265 fshow
+newpath 114.88998 -41.43175 moveto
+200.2038 -41.43175 lineto
+200.2038 -28.51323 lineto
+114.88998 -28.51323 lineto
+ closepath stroke
+ 1 setlinecap
+newpath -3 -3 moveto
+-98.81125 -27.59999 lineto stroke
+newpath 8.47691 -3 moveto
+-37.33638 -27.54463 lineto stroke
+newpath 17.08481 -3 moveto
+56.7221 -27.54463 lineto stroke
+newpath 25.69272 -3 moveto
+157.54689 -28.51323 lineto stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/o2_structures.2 b/web/yacco2/diagrams/o2_structures.2
new file mode 100644
index 0000000000..770481d2b0
--- /dev/null
+++ b/web/yacco2/diagrams/o2_structures.2
@@ -0,0 +1,263 @@
+%!PS
+%%BoundingBox: 15 -4 344 146
+%%Creator: MetaPost
+%%CreationDate: 2006.11.23:1811
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 27:8000102804040a3fa7dfe
+%*Font: cmsy10 9.96265 9.96265 00:800100002
+%%EndProlog
+%%Page: 1 1
+15.79213 138.22278 moveto
+(v) cmr10 9.96265 fshow
+20.77342 138.22278 moveto
+(ectors) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 0 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 46.91432 138.42198 moveto
+49.90312 138.42198 lineto stroke
+49.90312 138.22278 moveto
+(map[) cmr10 9.96265 fshow
+74.80983 138.22278 moveto
+(eno) cmr10 9.96265 fshow
+93.07463 138.22278 moveto
+(]:) cmr10 9.96265 fshow
+103.03732 138.22278 moveto
+(sym) cmr10 9.96265 fshow
+120.25063 138.22278 moveto
+(b) cmr10 9.96265 fshow
+126.06213 138.22278 moveto
+(ol's) cmr10 9.96265 fshow
+143.82893 138.22278 moveto
+(en) cmr10 9.96265 fshow
+153.51483 138.22278 moveto
+(umerate) cmr10 9.96265 fshow
+28.58426 124.46204 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 124.46204 moveto
+(state's) cmr10 9.96265 fshow
+67.99207 124.46204 moveto
+(elemen) cmr10 9.96265 fshow
+97.60326 124.46204 moveto
+(t) cmr10 9.96265 fshow
+104.79855 124.46204 moveto
+(list) cmr10 9.96265 fshow
+28.58426 112.6385 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 112.6385 moveto
+(state) cmr10 9.96265 fshow
+newpath 58.57185 112.8377 moveto
+61.56065 112.8377 lineto stroke
+61.56065 112.6385 moveto
+(elemen) cmr10 9.96265 fshow
+91.17186 112.6385 moveto
+(t) cmr10 9.96265 fshow
+98.36716 112.6385 moveto
+(") cmsy10 9.96265 fshow
+41.37639 99.84637 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 99.84637 moveto
+(grammar) cmr10 9.96265 fshow
+92.35199 99.84637 moveto
+(tree) cmr10 9.96265 fshow
+112.305 99.84637 moveto
+(no) cmr10 9.96265 fshow
+123.09789 99.84637 moveto
+(de) cmr10 9.96265 fshow
+136.3814 99.84637 moveto
+(") cmsy10 9.96265 fshow
+41.37639 87.05424 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 87.05424 moveto
+(closure) cmr10 9.96265 fshow
+82.97049 87.05424 moveto
+(state) cmr10 9.96265 fshow
+107.37898 87.05424 moveto
+(") cmsy10 9.96265 fshow
+41.37639 74.26212 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 74.26212 moveto
+(go) cmr10 9.96265 fshow
+newpath 60.23898 74.46132 moveto
+63.22778 74.46132 lineto stroke
+63.22778 74.26212 moveto
+(to) cmr10 9.96265 fshow
+75.40439 74.26212 moveto
+(state) cmr10 9.96265 fshow
+99.81288 74.26212 moveto
+(") cmsy10 9.96265 fshow
+41.37639 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 61.46999 moveto
+(previous) cmr10 9.96265 fshow
+89.3355 61.46999 moveto
+(state) cmr10 9.96265 fshow
+113.74399 61.46999 moveto
+(") cmsy10 9.96265 fshow
+41.37639 48.67786 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 48.67786 moveto
+(reduced) cmr10 9.96265 fshow
+86.78949 48.67786 moveto
+(state) cmr10 9.96265 fshow
+111.19798 48.67786 moveto
+(") cmsy10 9.96265 fshow
+41.37639 35.88573 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 35.88573 moveto
+(previous) cmr10 9.96265 fshow
+89.3355 35.88573 moveto
+(state) cmr10 9.96265 fshow
+113.74399 35.88573 moveto
+(elemen) cmr10 9.96265 fshow
+143.3552 35.88573 moveto
+(t) cmr10 9.96265 fshow
+41.37639 22.125 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 22.125 moveto
+(next) cmr10 9.96265 fshow
+72.09459 22.125 moveto
+(state) cmr10 9.96265 fshow
+96.50308 22.125 moveto
+(elemen) cmr10 9.96265 fshow
+126.11429 22.125 moveto
+(t) cmr10 9.96265 fshow
+41.37639 10.30147 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 10.30147 moveto
+(LA) cmr10 9.96265 fshow
+66.69809 10.30147 moveto
+(set) cmr10 9.96265 fshow
+82.25089 10.30147 moveto
+(") cmsy10 9.96265 fshow
+41.37639 -3.45926 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -3.45926 moveto
+(Common) cmr10 9.96265 fshow
+92.29669 -3.45926 moveto
+(LA) cmr10 9.96265 fshow
+109.3162 -3.45926 moveto
+(set) cmr10 9.96265 fshow
+124.86899 -3.45926 moveto
+(index) cmr10 9.96265 fshow
+169.29768 125.43065 moveto
+(follo) cmr10 9.96265 fshow
+187.56258 125.43065 moveto
+(w) cmr10 9.96265 fshow
+newpath 195.35559 125.62985 moveto
+198.34439 125.62985 lineto stroke
+198.34439 125.43065 moveto
+(set) cmr10 9.96265 fshow
+newpath 211.17398 125.62985 moveto
+214.16289 125.62985 lineto stroke
+214.16289 125.43065 moveto
+(map[) cmr10 9.96265 fshow
+239.06949 125.43065 moveto
+(eno) cmr10 9.96265 fshow
+257.33438 125.43065 moveto
+(]:) cmr10 9.96265 fshow
+267.29709 125.43065 moveto
+(rule's) cmr10 9.96265 fshow
+293.94708 125.43065 moveto
+(en) cmr10 9.96265 fshow
+303.63309 125.43065 moveto
+(umerate) cmr10 9.96265 fshow
+194.88194 112.6385 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 112.6385 moveto
+(follo) cmr10 9.96265 fshow
+221.44904 112.6385 moveto
+(w) cmr10 9.96265 fshow
+newpath 229.24205 112.8377 moveto
+232.23085 112.8377 lineto stroke
+232.23085 112.6385 moveto
+(set) cmr10 9.96265 fshow
+newpath 245.06055 112.8377 moveto
+248.04935 112.8377 lineto stroke
+248.04935 112.6385 moveto
+(elemen) cmr10 9.96265 fshow
+277.66054 112.6385 moveto
+(t) cmr10 9.96265 fshow
+284.85574 112.6385 moveto
+(") cmsy10 9.96265 fshow
+194.88194 99.84637 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 99.84637 moveto
+(rule) cmr10 9.96265 fshow
+223.13715 99.84637 moveto
+(no) cmr10 9.96265 fshow
+240.29504 99.84637 moveto
+(\017) cmsy10 9.96265 fshow
+251.91814 99.84637 moveto
+(rule) cmr10 9.96265 fshow
+271.87114 99.84637 moveto
+(def) cmr10 9.96265 fshow
+288.19875 99.84637 moveto
+(tree) cmr10 9.96265 fshow
+308.15175 99.84637 moveto
+(") cmsy10 9.96265 fshow
+194.88194 87.05424 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 87.05424 moveto
+(state) cmr10 9.96265 fshow
+227.59264 87.05424 moveto
+(elemen) cmr10 9.96265 fshow
+257.20384 87.05424 moveto
+(t) cmr10 9.96265 fshow
+264.39914 87.05424 moveto
+(") cmsy10 9.96265 fshow
+276.02225 87.05424 moveto
+(\017) cmsy10 9.96265 fshow
+287.64525 87.05424 moveto
+(it's) cmr10 9.96265 fshow
+304.30504 87.05424 moveto
+(state) cmr10 9.96265 fshow
+328.71355 87.05424 moveto
+(") cmsy10 9.96265 fshow
+194.88194 74.26212 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 74.26212 moveto
+(follo) cmr10 9.96265 fshow
+221.44904 74.26212 moveto
+(w) cmr10 9.96265 fshow
+231.96515 74.26212 moveto
+(set) cmr10 9.96265 fshow
+247.51794 74.26212 moveto
+(of) cmr10 9.96265 fshow
+258.86435 74.26212 moveto
+(T) cmr10 9.96265 fshow
+266.05954 74.26212 moveto
+(\000) cmsy10 9.96265 fshow
+273.80835 74.26212 moveto
+(in) cmr10 9.96265 fshow
+282.11055 74.26212 moveto
+(\000) cmsy10 9.96265 fshow
+289.85924 74.26212 moveto
+(stbl) cmr10 9.96265 fshow
+309.28644 74.26212 moveto
+(") cmsy10 9.96265 fshow
+194.88194 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 61.46999 moveto
+(transitions:) cmr10 9.96265 fshow
+256.45674 61.46999 moveto
+(follo) cmr10 9.96265 fshow
+274.72165 61.46999 moveto
+(w) cmr10 9.96265 fshow
+newpath 282.51465 61.66919 moveto
+285.50345 61.66919 lineto stroke
+285.50345 61.46999 moveto
+(set) cmr10 9.96265 fshow
+newpath 298.33304 61.66919 moveto
+301.32184 61.66919 lineto stroke
+301.32184 61.46999 moveto
+(elemen) cmr10 9.96265 fshow
+330.93314 61.46999 moveto
+(t) cmr10 9.96265 fshow
+338.12834 61.46999 moveto
+(") cmsy10 9.96265 fshow
+194.88194 49.92322 moveto
+(\017) cmsy10 9.96265 fshow
+203.18414 49.92322 moveto
+(merges:) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/o2_structures.mp b/web/yacco2/diagrams/o2_structures.mp
new file mode 100644
index 0000000000..0ff0d10909
--- /dev/null
+++ b/web/yacco2/diagrams/o2_structures.mp
@@ -0,0 +1,59 @@
+% file: o2_structures.mp
+input boxes
+beginfig(1);
+u=1cc;
+% state anatomy
+boxit.state(btex State etex);
+boxit.svectors_map(btex Vectors map etex);
+boxit.follow_set_map(btex Follow set map etex);
+boxit.e_symbol(btex Entry symbol etex);
+boxit.conflict_states(btex Conflict states list etex);
+
+.5[state.e,state.w] - (0,3u) = .5[follow_set_map.e,e_symbol.w];
+svectors_map.e + (2u,0) = follow_set_map.w;
+follow_set_map.e + (2u,0) = e_symbol.w;
+e_symbol.e + (2u,0) = conflict_states.w;
+drawboxed(state);
+drawboxed(svectors_map,follow_set_map,e_symbol,conflict_states);
+draw state.sw -- svectors_map.ne;
+draw .6[state.se,state.sw] -- .5[follow_set_map.ne,follow_set_map.nw];
+draw .3[state.se,state.sw] -- .5[e_symbol.ne,e_symbol.nw];
+draw state.se -- .5[conflict_states.ne,conflict_states.nw];
+endfig;
+
+beginfig(2);
+% outline state's vectors-map
+label.rt(btex vectors$\_$map$[$ eno $]$: symbol's enumerate etex,(1u,11u));
+label.rt(btex $\bullet\ $state's element list etex,(2u,10u));
+label.rt(btex $\bullet\ $state$\_$element\ $\uparrow$ etex,(2u,9u));
+ label.rt(btex $\bullet\ $grammar tree node $\uparrow$ etex,(3u,8u));
+ label.rt(btex $\bullet\ $closure state $\uparrow$ etex,(3u,7u));
+ label.rt(btex $\bullet\ $go$\_$to state $\uparrow$ etex,(3u,6u));
+ label.rt(btex $\bullet\ $previous state $\uparrow$ etex,(3u,5u));
+ label.rt(btex $\bullet\ $reduced state $\uparrow$ etex,(3u,4u));
+ label.rt(btex $\bullet\ $previous state element etex,(3u,3u));
+ label.rt(btex $\bullet\ $next state element etex,(3u,2u));
+ label.rt(btex $\bullet\ $LA set $\uparrow$ etex,(3u,1u));
+ label.rt(btex $\bullet\ $Common LA set index etex,(3u,0u));
+
+
+% outline follow set
+label.rt(btex follow$\_$set$\_$map$[$ eno $]$: rule's enumerate etex,(13u,10u));
+label.rt(btex $\bullet\ $follow$\_$set$\_$element\ $\uparrow$ etex,(15u,9u));
+ label.rt(btex $\bullet\ $rule no \ $\bullet\ $ rule def tree $\uparrow$ etex,(15u,8u));
+ label.rt(btex $\bullet\ $state element $\uparrow$ \ $\bullet\ $ it's state $\uparrow$ etex,(15u,7u));
+ label.rt(btex $\bullet\ $follow set of T$-$in$-$stbl $\uparrow$ etex,(15u,6u));
+ label.rt(btex $\bullet\ $transitions: follow$\_$set$\_$element $\uparrow$ etex,(15u,5u));
+ label.rt(btex $\bullet\ $merges: etex,(15u,4u));
+
+%label.rt(btex follow$\_$set$\_$map$[$ eno $]$: rule's enumerate etex,(1u,-1u));
+%label.rt(btex $\bullet\ $follow$\_$set$\_$element\ $\uparrow$ etex,(2u,-2u));
+ %label.rt(btex $\bullet\ $rule no \ $\bullet\ $ rule def tree $\uparrow$ etex,(3u,-3u));
+ %label.rt(btex $\bullet\ $state element $\uparrow$ \ $\bullet\ $ it's state $\uparrow$ etex,(3u,-4u));
+ %label.rt(btex $\bullet\ $follow set of T$-$in$-$stbl $\uparrow$ etex,(3u,-5u));
+ %label.rt(btex $\bullet\ $transitions: follow$\_$set$\_$element $\uparrow$ etex,(3u,-6u));
+ %label.rt(btex $\bullet\ $merges: etex,(3u,-7u));
+
+endfig;
+
+end;
diff --git a/web/yacco2/diagrams/o2diag.mp b/web/yacco2/diagrams/o2diag.mp
new file mode 100644
index 0000000000..85f73f1b25
--- /dev/null
+++ b/web/yacco2/diagrams/o2diag.mp
@@ -0,0 +1,506 @@
+% file: o2diag.mp - attempt to produce grammar railroad diagrams
+input boxes
+%tracingall;
+%tracingmacros := 1;
+%tracingequations := 1;
+defaultfont := "cmtt8";
+
+
+pair sr_indent,sr_dy,sr_bet_elem,sr[],spillover_sr[],exit_bnd;
+numeric how_drw_obj;
+numeric dx_exit,dy_exit;
+numeric max_dx_bnd;
+numeric half_exit;
+numeric lft_recursion_ht;
+numeric above,below,gap;
+
+vardef is_epsilon_present(expr Str)=
+ boolean present;present:=false;
+ if(length Str = 1):
+ if (substring (0,1) of Str = " "):
+ present:=true;
+ fi;
+ fi;
+ present
+enddef;
+
+vardef is_underscore_present(expr Str)=
+ boolean present;present:=false;
+ for i=1 upto length Str:
+ if substring (i-1,i) of Str = "_":
+ present:=true;
+ fi;
+ endfor
+ present
+enddef;
+
+vardef bld_cmd_to_exec(expr Object,Name,Prefix)=
+ string cmd;cmd := Prefix&Object&"( btex ";
+ string nnm;nnm := "";
+ for i=1 upto length Name:
+ if substring (i-1,i) of Name = "_":
+ nnm := nnm & "\";
+ nnm := nnm & substring (i-1,i) of Name;
+ else:
+ nnm := nnm & substring (i-1,i) of Name;
+ fi;
+ endfor
+ cmd := cmd & nnm;
+ cmd := cmd & " etex);";
+ cmd
+enddef;
+
+def exec_cmd(text Cmd)=
+ scantokens Cmd;
+enddef;
+
+def init_variables =
+ sr_indent :=(.3in,0);
+ sr_dy :=(0,.4in);
+ sr_bet_elem :=(.15in,0);
+ sr[0]:= sr_indent - (0,.2in);
+ lft_recursion_ht:=.15in;
+ dx_exit:=0;
+ dy_exit:=0;
+ above=below=.1in;
+ gap=.025in;
+ max_dx_bnd := 4.5in;
+enddef;
+
+vardef cuta(suffix a,b) expr p =
+drawarrow p cutbefore bpath.a cutafter bpath.b;
+point .5*length p of p
+enddef;
+vardef self@# expr p =
+cuta(@#,@#) @#.c{curl10}..@#.c+p..{curl10}@#.c
+enddef;
+
+def crt_rule_box(expr ruleno) =
+ string vnm; vnm := "rule_" & rule_names[ruleno].vname;
+ string lnm; lnm := rule_names[ruleno].literal;
+ string Cmd;Cmd := "";
+ boolean underscore_present;
+ underscore_present := is_underscore_present(lnm);
+ if(underscore_present = false):
+ forsuffixes i = scantokens vnm :
+ boxit.i(substring (0,infinity) of lnm);
+ endfor
+ else:
+ %Cmd := bld_cmd_to_exec(vnm,lnm,"boxit.");
+ %exec_cmd(Cmd);
+ forsuffixes i = scantokens vnm :
+ boxit.i(substring (0,infinity) of lnm);
+ endfor
+ fi
+enddef;
+
+def drw_rule_box(expr ruleno) =
+ string vnm; vnm := "rule_" & rule_names[ruleno].vname;
+ string lnm; lnm := rule_names[ruleno].literal;
+ forsuffixes i = scantokens vnm :
+ drawunboxed(i);
+ endfor
+enddef;
+
+def crt_rule(expr ruleno,subruleno,elemno) =
+ string vnm; vnm := rhs_elems[ruleno][subruleno][elemno].vname;
+ string nm; nm := rhs_elems[ruleno][subruleno][elemno].literal;
+ forsuffixes i = scantokens vnm :
+ boxit.i(substring (0,infinity) of nm);
+ endfor
+enddef;
+
+def crt_terminal(expr ruleno,subruleno,elemno) =
+ string vnm; vnm := rhs_elems[ruleno][subruleno][elemno].vname;
+ string nm; nm := rhs_elems[ruleno][subruleno][elemno].literal;
+ forsuffixes i = scantokens vnm :
+ circleit.i(substring (0,infinity) of nm);
+ i.dx=i.dy;%make oval
+ endfor
+enddef;
+
+def align_sr_start expr sr_no =
+ if(sr_no = 1):
+ sr[sr_no] := sr[0];
+ else:
+ if(ypart spillover_sr[sr_no - 1] <> 0):
+ sr[sr_no] := spillover_sr[sr_no - 1] - sr_dy;
+ else:
+ sr[sr_no] := sr[sr_no - 1] - sr_dy;
+ fi
+ fi
+enddef;
+
+def align_spec_sr_start expr sr_no =
+ sr[sr_no] := sr[0];
+enddef;
+
+vardef has_spillover_occured(suffix frm,too)=
+ boolean spillover;spillover:=false;
+ pair rt_obj_pos;
+ %%% this makes mpost crazy when bpath the new element
+ %%%rt_obj_pos := urcorner bpath.too - ulcorner bpath.too;
+ %%%numeric rt_obj_size;rt_obj_size := xpart rt_obj_pos;
+
+ %%%numeric sxsxsxsx; sxsxsxsx := xpart urcorner too.w;
+ %%%rt_obj_pos := urcorner bpath.too - ulcorner bpath.too;
+ %%%numeric rt_obj_size;rt_obj_size := xpart rt_obj_pos;
+
+
+ pair cur_pos;cur_pos := urcorner bpath.frm;
+ numeric new_rt_pos;
+ new_rt_pos := xpart sr_bet_elem;
+ new_rt_pos := new_rt_pos + xpart cur_pos;
+ %%%new_rt_pos := new_rt_pos + rt_obj_size;
+ if(new_rt_pos > max_dx_bnd):%shift down into start pt
+ spillover := true;
+ fi
+ spillover
+enddef;
+
+def hz_align_rhs(expr rule_no,subrule_no) =
+ spillover_sr[subrule_no] := sr_indent;
+ for k=1 step 1 until rule_s_subrule_no_elems[rule_no][subrule_no]: % rhs's elems
+ string vnm; vnm := rhs_elems[rule_no][subrule_no][k].vname;
+ forsuffixes i=scantokens vnm:
+ if(k=1):
+ i.w = sr[subrule_no] + sr_bet_elem;
+ else:
+ % fetch previous elem
+ numeric j; j := k-1;
+ string pvnm; pvnm := rhs_elems[rule_no][subrule_no][j].vname;
+ forsuffixes pi=scantokens pvnm:
+ if(has_spillover_occured(pi,i)=true):%shift down into start pt
+ if(ypart spillover_sr[subrule_no] = 0):
+ spillover_sr[subrule_no] := sr[subrule_no];
+ fi
+ spillover_sr[subrule_no] := spillover_sr[subrule_no] - sr_dy;
+ i.w = spillover_sr[subrule_no] + sr_bet_elem;
+ else:
+ i.w = pi.e + sr_bet_elem;
+ fi
+ endfor
+ fi;
+ endfor
+ endfor
+enddef;
+
+def det_exit_bnd(expr rule_no) =
+ dx_exit := 0;
+ dy_exit := 0;
+ for no_sr=1 step 1 until rule_s_no_rhs[rule_no]:
+ for k=1 step 1 until rule_s_subrule_no_elems[rule_no][no_sr]: % rhs's elems
+ string vnm; vnm := rhs_elems[rule_no][no_sr][k].vname;
+ forsuffixes i=scantokens vnm:
+ if(xpart urcorner bpath.i > dx_exit):
+ dx_exit := xpart urcorner bpath.i;
+ fi;
+ endfor
+ endfor
+ endfor
+enddef;
+
+def det_spec_sr_exit_bnd(expr rule_no,subruleno) =
+ dx_exit := 0;
+ dy_exit := 0;
+ for no_sr=subruleno step 1 until subruleno:
+ for k=1 step 1 until rule_s_subrule_no_elems[rule_no][no_sr]: % rhs's elems
+ string vnm; vnm := rhs_elems[rule_no][no_sr][k].vname;
+ forsuffixes i=scantokens vnm:
+ if(xpart urcorner bpath.i > dx_exit):
+ dx_exit := xpart urcorner bpath.i;
+ fi;
+ endfor
+ endfor
+ endfor
+enddef;
+
+def crt_rhs_elems(expr rule_no,subrule_no) =
+ for k=1 step 1 until rule_s_subrule_no_elems[rule_no][subrule_no]: % rhs's elems
+ how_drw_obj := rhs_elems[rule_no][subrule_no][k].Drw_how;
+ if ((how_drw_obj = Box_solid) or (how_drw_obj = Box_dotted)):
+ crt_rule(rule_no,subrule_no,k);
+ else:
+ crt_terminal(rule_no,subrule_no,k);
+ fi;
+ endfor
+enddef;
+
+def drw_spec_vt_exit_line(expr sr_no) =
+ numeric ybot;
+ if(ypart spillover_sr[sr_no] = 0):
+ ybot := ypart sr[sr_no];
+ else:
+ ybot := ypart spillover_sr[sr_no];
+ fi
+ draw (dx_exit,ypart sr[sr_no]+above) .. (dx_exit,ybot-below);
+ draw (dx_exit+gap,ypart sr[sr_no]+above) .. (dx_exit+gap,ybot-below);
+enddef;
+
+def drw_spec_vt_start_line(expr sr_no) =
+ numeric ybot;
+ if(ypart spillover_sr[sr_no] = 0):
+ ybot := ypart sr[sr_no];
+ else:
+ ybot := ypart spillover_sr[sr_no];
+ fi
+ draw (xpart sr_indent,ypart sr[sr_no]+above) .. (xpart sr_indent,ybot-below);
+ for i=sr_no step 1 until sr_no:
+ draw(sr[i]..sr[i]+(xpart sr_bet_elem,0));%start arrow
+ endfor
+enddef;
+
+def drw_vt_exit_line(expr to) =
+ numeric ybot;
+ if(ypart spillover_sr[to] = 0):
+ ybot := ypart sr[to];
+ else:
+ ybot := ypart spillover_sr[to];
+ fi
+ draw (dx_exit,ypart sr[1]+above) .. (dx_exit,ybot-below);
+ draw (dx_exit+gap,ypart sr[1]+above) .. (dx_exit+gap,ybot-below);
+enddef;
+
+def drw_vt_start_line(expr to) =
+ numeric ybot;
+ if(ypart spillover_sr[to] = 0):
+ ybot := ypart sr[to];
+ else:
+ ybot := ypart spillover_sr[to];
+ fi
+ draw (xpart sr_indent,ypart sr[1]+above) .. (xpart sr_indent,ybot-below);
+ for i=1 step 1 until to:
+ draw(sr[i]..sr[i]+(xpart sr_bet_elem,0));%start arrow
+ endfor
+enddef;
+
+def drw_snake(suffix frm,too)=
+ pair jjj; jjj := (xpart frm.e+.1in,ypart frm.e);
+ draw frm.e--jjj;
+ pair dxdy; dxdy := .5[frm.s,too.n];
+ dxdy := (xpart jjj,ypart dxdy);
+ draw jjj--dxdy;
+ pair topof_too;topof_too := (xpart too.n,ypart dxdy);
+ draw dxdy--topof_too;
+
+ drawarrow(topof_too..too.n);
+enddef;
+
+def drw_rhs(expr ruleno,subruleno) =
+ numeric lst_elem;
+ lst_elem := rule_s_subrule_no_elems[ruleno][subruleno];
+ for e=1 step 1 until lst_elem:
+ string vnm; vnm := rhs_elems[ruleno][subruleno][e].vname;
+ string lnm; lnm := rhs_elems[ruleno][subruleno][e].literal;
+ boolean how_dotted;% true dotted , false solid
+ how_drw_obj := rhs_elems[ruleno][subruleno][e].Drw_how;
+ if(is_epsilon_present(lnm) = false):
+ forsuffixes i = scantokens vnm :
+ if((how_drw_obj = Box_solid) or ((how_drw_obj = Circle_solid))):
+ drawboxed(i);
+ else:
+ fixsize(i);
+ fixpos(i);
+ draw pic_mac_.i;% contents
+ if(how_drw_obj = Circle_dotted):
+ draw bpath.i dashed withdots;%dashed dots
+ else:
+ draw bpath.i dashed evenly;%dashed line
+ fi
+ fi
+ endfor
+ else:
+ forsuffixes i = scantokens vnm :
+ fixsize(i);
+ fixpos(i);
+ endfor
+ fi
+ endfor
+ % link by arrows
+ for e=1 step 1 until lst_elem:
+ string vnm; vnm := rhs_elems[ruleno][subruleno][e].vname;
+ forsuffixes i = scantokens vnm :
+ if(e < lst_elem ):
+ string nvnm; nvnm := rhs_elems[ruleno][subruleno][e+1].vname;
+ how_drw_obj := rhs_elems[ruleno][subruleno][e+1].Drw_how;
+ forsuffixes j = scantokens nvnm :
+ if(ypart i.c = ypart j.c):% are px + px+1 on same line?
+ if(how_drw_obj = Box_dotted):%called thread y then reverse arrow
+ drawarrow(cuta(j,i) j.c..i.c);%link elements with arrows
+ else:
+ drawarrow(cuta(i,j) i.c..j.c);%link elements with arrows
+ fi
+ else:%snake your way
+ drw_snake(i,j);
+ fi
+ endfor
+ fi
+ endfor
+ endfor
+enddef;
+
+def drw_spec_rhs(expr ruleno,subruleno) =
+ numeric lst_elem;
+ lst_elem := rule_s_subrule_no_elems[ruleno][subruleno];
+ for e=1 step 1 until lst_elem:
+ string vnm; vnm := rhs_elems[ruleno][subruleno][e].vname;
+ string lnm; lnm := rhs_elems[ruleno][subruleno][e].literal;
+ boolean how_dotted;% true dotted , false solid
+ how_drw_obj := rhs_elems[ruleno][subruleno][e].Drw_how;
+ if(is_epsilon_present(lnm) = false):
+ forsuffixes i = scantokens vnm :
+ if((how_drw_obj = Box_solid) or ((how_drw_obj = Circle_solid))):
+ drawboxed(i);
+ else:
+ fixsize(i);
+ fixpos(i);
+ draw pic_mac_.i;% contents
+ if(how_drw_obj = Circle_dotted):
+ draw bpath.i dashed withdots;%dashed dots
+ else:
+ draw bpath.i dashed evenly;%dashed line
+ fi
+ fi
+ endfor
+ else:
+ forsuffixes i = scantokens vnm :
+ fixsize(i);
+ fixpos(i);
+ endfor
+ fi
+ endfor
+ % link by arrows
+ for e=1 step 1 until lst_elem:
+ string vnm; vnm := rhs_elems[ruleno][subruleno][e].vname;
+ forsuffixes i = scantokens vnm :
+ if(e < lst_elem ):
+ string nvnm; nvnm := rhs_elems[ruleno][subruleno][e+1].vname;
+ how_drw_obj := rhs_elems[ruleno][subruleno][e+1].Drw_how;
+ forsuffixes j = scantokens nvnm :
+ if(ypart i.c = ypart j.c):% are px + px+1 on same line?
+ if(how_drw_obj = Box_dotted):%called thread y then reverse arrow
+ drawarrow(cuta(j,i) j.c..i.c);%link elements with arrows
+ else:
+ drawarrow(cuta(i,j) i.c..j.c);%link elements with arrows
+ fi
+ else:%snake your way
+ drw_snake(i,j);
+ fi
+ endfor
+ fi
+ endfor
+ endfor
+enddef;
+
+def drw_rule_s_rhs(expr ruleno) =
+ for sr=1 step 1 until rule_s_no_rhs[ruleno]:
+ drw_rhs(ruleno,sr);
+ endfor
+ drw_rule_s_bnd_lines(ruleno);
+enddef;
+
+def drw_rule_s_spec_rhs(expr ruleno,subruleno) =
+ for sr=subruleno step 1 until subruleno:
+ drw_spec_rhs(ruleno,sr);
+ endfor
+ drw_rule_s_spec_subrule_bnd_lines(ruleno,subruleno);
+ drw_rule_s_spec_subrule_parms(ruleno,subruleno);
+enddef;
+
+def drw_left_recursion_line(expr ruleno,subruleno,exitbnd) =
+ string lrnm; lrnm := rule_names[ruleno].literal;
+ string lenm; lenm := rhs_elems[ruleno][subruleno][1].literal;
+ if(rule_s_subrule_no_elems[ruleno][subruleno] > 1): % lft recur reqs 2 or elems
+ if(lrnm = lenm):
+ string vnm; vnm := rhs_elems[ruleno][subruleno][2].vname;
+ half_exit := xpart exitbnd - xpart sr_bet_elem;
+ forsuffixes $=scantokens vnm:
+ draw (half_exit,ypart exitbnd)--
+ (half_exit,ypart $.c + lft_recursion_ht)
+ -- $.c + (0,lft_recursion_ht) -- $.n dashed withdots;
+ endfor
+ fi
+ fi
+enddef;
+
+def drw_rule_s_spec_subrule_parms(expr ruleno,subruleno) =
+ numeric lst_elem;
+ lst_elem := rule_s_subrule_no_elems[ruleno][subruleno];
+ for e=1 step 1 until lst_elem:
+ string vnm; vnm := rhs_elems[ruleno][subruleno][e].vname;
+ forsuffixes i = scantokens vnm :
+ string rst;
+ rst := decimal e;
+ label.bot(rst,i.s);
+ endfor
+ endfor
+enddef;
+
+def drw_rule_s_spec_subrule_bnd_lines(expr ruleno,subruleno) =
+ det_spec_sr_exit_bnd(ruleno,subruleno);% determine exit line bnds of rule
+ dx_exit := dx_exit + 2* (xpart sr_bet_elem);
+ numeric sr_lst_elem;
+ for srno=subruleno step 1 until subruleno:
+ sr_lst_elem := rule_s_subrule_no_elems[ruleno][srno];
+ string vnm; vnm := rhs_elems[ruleno][srno][sr_lst_elem].vname;
+ string lnm; lnm := rhs_elems[ruleno][srno][sr_lst_elem].literal;
+ forsuffixes i = scantokens vnm :
+ dy_exit := ypart i.e;
+ exit_bnd := (dx_exit,dy_exit);
+ if(is_epsilon_present(lnm) = true):
+ draw(i.w..exit_bnd);% draw ht exit line
+ else:
+ draw(i.e..exit_bnd);% draw ht exit line
+ drw_left_recursion_line(ruleno,srno,exit_bnd);
+ fi
+ endfor
+ endfor
+ drw_spec_vt_exit_line(subruleno);
+ drw_spec_vt_start_line(subruleno);
+enddef;
+
+def drw_rule_s_bnd_lines(expr ruleno) =
+ det_exit_bnd(ruleno);% determine exit line bnds of rule
+ dx_exit := dx_exit + 2* (xpart sr_bet_elem);
+ numeric sr_lst_elem;
+ for srno=1 step 1 until rule_s_no_rhs[ruleno]:
+ sr_lst_elem := rule_s_subrule_no_elems[ruleno][srno];
+ string vnm; vnm := rhs_elems[ruleno][srno][sr_lst_elem].vname;
+ string lnm; lnm := rhs_elems[ruleno][srno][sr_lst_elem].literal;
+ forsuffixes i = scantokens vnm :
+ dy_exit := ypart i.e;
+ exit_bnd := (dx_exit,dy_exit);
+ if(is_epsilon_present(lnm) = true):
+ draw(i.w..exit_bnd);% draw ht exit line
+ else:
+ draw(i.e..exit_bnd);% draw ht exit line
+ drw_left_recursion_line(ruleno,srno,exit_bnd);
+ fi
+ endfor
+ endfor
+ numeric no_subrules;no_subrules := rule_s_no_rhs[ruleno];
+ drw_vt_exit_line(no_subrules);
+ drw_vt_start_line(no_subrules);
+enddef;
+
+def drw_rule(expr ruleno) =
+ crt_rule_box(ruleno);
+ for j=1 step 1 until rule_s_no_rhs[ruleno]: % rhs
+ align_sr_start(j);
+ crt_rhs_elems(ruleno,j);% establish rhs variables
+ hz_align_rhs(ruleno,j);
+ endfor
+
+ drw_rule_box(ruleno);
+ drw_rule_s_rhs(ruleno);
+enddef;
+
+def drw_rule_a_rhs(expr ruleno,subruleno) =
+ for j=subruleno step subruleno until subruleno: % rhs
+ align_spec_sr_start(j);
+ crt_rhs_elems(ruleno,j);% establish rhs variables
+ hz_align_rhs(ruleno,j);
+ endfor
+
+ drw_rule_s_spec_rhs(ruleno,subruleno);
+enddef;
diff --git a/web/yacco2/diagrams/o2linker_overview.1 b/web/yacco2/diagrams/o2linker_overview.1
new file mode 100644
index 0000000000..3d6c8074f9
--- /dev/null
+++ b/web/yacco2/diagrams/o2linker_overview.1
@@ -0,0 +1,294 @@
+%!PS
+%%BoundingBox: -121 -164 276 11
+%%HiResBoundingBox: -120.55173 -163.65445 275.09767 10.16852
+%%Creator: MetaPost 0.993
+%%CreationDate: 2008.05.05:1312
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0c:8000001020000100000007fffbbc
+%*Font: cmmi10 9.96265 9.96265 4f:8
+%*Font: cmr7 6.97385 6.97385 32:8
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor
+0 0 moveto
+(yyy) cmr10 9.96265 fshow
+14.944 0 moveto
+(.fsc) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath -3 -4.9372 moveto
+32.1131 -4.9372 lineto
+32.1131 9.91852 lineto
+-3 9.91852 lineto
+ closepath stroke
+-3.6682 -38.37639 moveto
+(O) cmmi10 9.96265 fshow
+3.9311 -39.87079 moveto
+(2) cmr7 6.97385 fshow
+8.4004 -38.37639 moveto
+(link) cmr10 9.96265 fshow
+24.4514 -38.37639 moveto
+(er) cmr10 9.96265 fshow
+newpath -6.6682 -44.86328 moveto
+35.7813 -44.86328 lineto
+35.7813 -26.90817 lineto
+-6.6682 -26.90817 lineto
+ closepath stroke
+77.15771 -38.37639 moveto
+(yyy) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath 93.52971 -38.17719 moveto
+96.51851 -38.17719 lineto stroke
+96.51851 -38.37639 moveto
+(errors.log) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 74.15768 -43.31358 moveto
+140.06104 -43.31358 lineto
+140.06104 -28.45787 lineto
+74.15768 -28.45787 lineto
+ closepath stroke
+-117.30173 -38.37639 moveto
+(yyy) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath -100.92973 -38.17719 moveto
+-97.94093 -38.17719 lineto stroke
+-97.94093 -38.37639 moveto
+(tracings.log) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -120.30173 -43.31358 moveto
+-45.04459 -43.31358 lineto
+-45.04459 -28.45787 lineto
+-120.30173 -28.45787 lineto
+ closepath stroke
+-82.30408 -85.73033 moveto
+(yyy) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath -65.93208 -85.53113 moveto
+-62.94328 -85.53113 lineto stroke
+-62.94328 -85.73033 moveto
+(fsc.cpp) cmr10 9.96265 fshow
+-29.95578 -85.73033 moveto
+(\014le) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -85.30408 -90.66753 moveto
+-14.22575 -90.66753 lineto
+-14.22575 -75.81181 lineto
+-85.30408 -75.81181 lineto
+ closepath stroke
+46.33884 -85.73033 moveto
+(O) cmmi10 9.96265 fshow
+53.93814 -87.22473 moveto
+(2) cmr7 6.97385 fshow
+58.40744 -85.73033 moveto
+(link) cmr10 9.96265 fshow
+74.45844 -85.73033 moveto
+(er) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath 83.38603 -85.53113 moveto
+86.37483 -85.53113 lineto stroke
+86.37483 -85.73033 moveto
+(do) cmr10 9.96265 fshow
+97.16774 -85.73033 moveto
+(c.w) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 43.33884 -92.21722 moveto
+114.55826 -92.21722 lineto
+114.55826 -74.26212 lineto
+43.33884 -74.26212 lineto
+ closepath stroke
+136.74646 -85.38443 moveto
+(cw) cmr10 9.96265 fshow
+148.09276 -85.38443 moveto
+(ea) cmr10 9.96265 fshow
+157.22527 -85.38443 moveto
+(v) cmr10 9.96265 fshow
+162.20656 -85.38443 moveto
+(e) cmr10 9.96265 fshow
+newpath 133.74646 -88.38443 moveto
+169.63437 -88.38443 lineto
+169.63437 -78.09491 lineto
+133.74646 -78.09491 lineto
+ closepath stroke
+191.82257 -85.73033 moveto
+(O) cmmi10 9.96265 fshow
+199.42188 -87.22473 moveto
+(2) cmr7 6.97385 fshow
+203.89117 -85.73033 moveto
+(link) cmr10 9.96265 fshow
+219.94217 -85.73033 moveto
+(er) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath 228.86977 -85.53113 moveto
+231.85857 -85.53113 lineto stroke
+231.85857 -85.73033 moveto
+(do) cmr10 9.96265 fshow
+242.65147 -85.73033 moveto
+(c.tex) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 188.82257 -92.21722 moveto
+266.40707 -92.21722 lineto
+266.40707 -74.26212 lineto
+188.82257 -74.26212 lineto
+ closepath stroke
+213.63942 -121.32394 moveto
+(p) cmr10 9.96265 fshow
+219.45102 -121.32394 moveto
+(dftex) cmr10 9.96265 fshow
+newpath 210.63942 -126.26114 moveto
+244.59023 -126.26114 lineto
+244.59023 -111.40543 lineto
+210.63942 -111.40543 lineto
+ closepath stroke
+183.38197 -156.91756 moveto
+(O) cmmi10 9.96265 fshow
+190.98128 -158.41196 moveto
+(2) cmr7 6.97385 fshow
+195.45058 -156.91756 moveto
+(link) cmr10 9.96265 fshow
+211.50157 -156.91756 moveto
+(er) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop
+newpath 220.42917 -156.71835 moveto
+223.41797 -156.71835 lineto stroke
+223.41797 -156.91756 moveto
+(do) cmr10 9.96265 fshow
+234.21088 -156.91756 moveto
+(c.p) cmr10 9.96265 fshow
+247.21777 -156.91756 moveto
+(df) cmr10 9.96265 fshow
+259.11757 -156.91756 moveto
+(\014le) cmr10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 180.38197 -163.40445 moveto
+274.84767 -163.40445 lineto
+274.84767 -145.44934 lineto
+180.38197 -145.44934 lineto
+ closepath stroke
+-56.96017 -119.66351 moveto
+(CC) cmr10 9.96265 fshow
+newpath -59.96017 -122.66351 moveto
+-39.56967 -122.66351 lineto
+-39.56967 -109.85573 lineto
+-59.96017 -109.85573 lineto
+ closepath stroke
+-105.07153 -151.77023 moveto
+(threads's) cmr10 9.96265 fshow
+-62.86864 -151.77023 moveto
+(bit) cmr10 9.96265 fshow
+-47.37114 -151.77023 moveto
+(maps) cmr10 9.96265 fshow
+-21.30223 -151.77023 moveto
+(ob) cmr10 9.96265 fshow
+-10.23253 -151.77023 moveto
+(ject) cmr10 9.96265 fshow
+newpath -108.07153 -156.70743 moveto
+8.54169 -156.70743 lineto
+8.54169 -141.85172 lineto
+-108.07153 -141.85172 lineto
+ closepath stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth 1 setlinecap
+newpath 14.55655 -4.9372 moveto
+14.55655 -26.90817 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 13.02583 -23.21277 moveto
+14.55655 -26.90817 lineto
+16.08727 -23.21277 lineto
+ closepath
+gsave fill grestore stroke
+ [0 10 ] 5 setdash
+newpath 35.7813 -35.88573 moveto
+74.15768 -35.88573 lineto stroke
+ [] 0 setdash
+newpath 70.46211 -37.41652 moveto
+74.15768 -35.88573 lineto
+70.46211 -34.35493 lineto
+ closepath
+gsave fill grestore stroke
+ [0 10 ] 5 setdash
+newpath -6.6682 -35.88573 moveto
+-45.04459 -35.88573 lineto stroke
+ [] 0 setdash
+newpath -41.34901 -34.35493 moveto
+-45.04459 -35.88573 lineto
+-41.34901 -37.41652 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 14.55655 -44.86328 moveto
+14.55655 -55.07393 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 14.55655 -55.07393 moveto
+-49.76492 -55.07393 lineto stroke
+newpath 14.55655 -55.07393 moveto
+78.94855 -55.07393 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath -49.76492 -55.07393 moveto
+-49.76492 -75.81181 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -51.29572 -72.11624 moveto
+-49.76492 -75.81181 lineto
+-48.23413 -72.11624 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 78.94855 -55.07393 moveto
+78.94855 -74.26212 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 77.41776 -70.56654 moveto
+78.94855 -74.26212 lineto
+80.47934 -70.56654 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath -49.76492 -90.66753 moveto
+-49.76492 -109.85573 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -51.29572 -106.16016 moveto
+-49.76492 -109.85573 lineto
+-48.23413 -106.16016 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath -49.76492 -122.66351 moveto
+-49.76492 -141.85172 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath -51.29572 -138.15614 moveto
+-49.76492 -141.85172 lineto
+-48.23413 -138.15614 lineto
+ closepath
+gsave fill grestore stroke
+newpath 114.55826 -83.23967 moveto
+133.74646 -83.23967 lineto stroke
+newpath 130.05089 -84.77046 moveto
+133.74646 -83.23967 lineto
+130.05089 -81.70888 lineto
+ closepath
+gsave fill grestore stroke
+newpath 169.63437 -83.23967 moveto
+188.82257 -83.23967 lineto stroke
+newpath 185.127 -84.77046 moveto
+188.82257 -83.23967 lineto
+185.127 -81.70888 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 227.61482 -92.21722 moveto
+227.61482 -111.40543 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 226.08403 -107.70985 moveto
+227.61482 -111.40543 lineto
+229.14561 -107.70985 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 227.61482 -126.26114 moveto
+227.61482 -145.44934 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 226.08403 -141.75377 moveto
+227.61482 -145.44934 lineto
+229.14561 -141.75377 lineto
+ closepath
+gsave fill grestore stroke
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/o2linker_overview.mp b/web/yacco2/diagrams/o2linker_overview.mp
new file mode 100644
index 0000000000..f07b8dbe10
--- /dev/null
+++ b/web/yacco2/diagrams/o2linker_overview.mp
@@ -0,0 +1,78 @@
+% file: o2linker_overview.mp
+% flow control of O2, O2linker, and c++
+input boxes
+u:=1cc;
+pair sep,fldsep;
+sep := (0,3u);
+fldsep := (3u,0);
+beginfig(1);
+
+boxit.fsc(btex yyy.fsc etex); % input control file
+boxit.o(btex \strut$O_{2}$linker etex); % linker prg
+boxit.err(btex yyy\_errors.log etex); % error log
+boxit.tr(btex yyy\_tracings.log etex); % trace log and o2linker chatter
+
+boxit.occ(btex yyy\_fsc.cpp file etex); % linker c++ tble
+boxit.docs(btex \strut$O_{2}$linker\_doc.w etex); % linker doc
+boxit.cpp(btex CC etex); % c++ compiler
+boxit.objs(btex threads's bit maps object etex);
+boxit.cweave(btex cweave etex);
+boxit.tex(btex \strut$O_{2}$linker\_doc.tex etex);
+boxit.pdftex(btex pdftex etex);
+boxit.xpdf(btex \strut$O_{2}$linker\_doc.pdf file etex);
+%% place the boxes
+
+.5[fsc.e,fsc.w] - sep = .5[o.e,o.w];
+tr.e + fldsep = o.w;
+o.e + fldsep = err.w;
+occ.e + 1.5fldsep = docs.w;
+docs.e + .5fldsep = cweave.w;
+cweave.e + .5fldsep = tex.w;
+tex.s - .5sep = pdftex.n;
+pdftex.s - .5sep = xpdf.n;
+
+o.s - sep = .5[occ.e,docs.w];
+
+occ.s -.5sep = cpp.n;
+cpp.s -.5sep = objs.n;
+
+%% form the boxes
+drawboxed(fsc);
+drawboxed(o);
+drawboxed(err);
+drawboxed(tr);
+
+drawboxed(occ);
+drawboxed(docs);
+
+drawboxed(cweave);
+drawboxed(tex);
+drawboxed(pdftex);
+drawboxed(xpdf);
+
+drawboxed(cpp);
+drawboxed(objs);
+
+%% draw lined arrows between the boxes
+drawarrow fsc.s -- o.n;
+pair mopt,ldeltaopt,rdeltaopt;
+mopt := .5[o.e,o.w] - .5(0,ypart sep);
+ldeltaopt := (xpart occ.n, ypart mopt);
+rdeltaopt := (xpart docs.n, ypart mopt);
+drawarrow o.e -- err.w dashed withdots;
+drawarrow o.w -- tr.e dashed withdots;
+draw o.s -- mopt;
+draw mopt -- ldeltaopt;
+draw mopt -- rdeltaopt;
+drawarrow ldeltaopt -- occ.n;
+drawarrow rdeltaopt -- docs.n;
+
+%y = ypart objs.n - ypart cpp.s;
+drawarrow occ.s -- cpp.n;
+drawarrow cpp.s -- objs.n;
+drawarrow docs.e -- cweave.w;
+drawarrow cweave.e -- tex.w;
+drawarrow tex.s -- pdftex.n;
+drawarrow pdftex.s -- xpdf.n;
+endfig;
+end; \ No newline at end of file
diff --git a/web/yacco2/diagrams/o2mac.tex b/web/yacco2/diagrams/o2mac.tex
new file mode 100644
index 0000000000..f4b040f89c
--- /dev/null
+++ b/web/yacco2/diagrams/o2mac.tex
@@ -0,0 +1,390 @@
+% /yacco2/library/o2mac.tex --- defines common macros for TeX
+\tolerance=10000
+\hbadness=10000
+%\tracingall
+\def\Tex{\TeX}
+\def\cweb{\Cweb}
+\def\Cweb{{\prgstyle Cweb}}
+\def\prgstyle{\tt \sl }
+
+
+\def\Whereyacco2{/usr/local/yacco2}
+
+\def\printlistinglineno{\hskip .7 in \llap{\the\lineno:\quad}}
+\def\ptindent#1{\line{\hskip.5in{#1}\hfill}}
+\def\threeasteric{$***$}
+\def\Yacco2{Ya$c_2o_2$}
+\def\yacco2{\Yacco2}
+\def\O2{$O_2$}
+\def\o2{\O2}
+\def\Cpp{C\kern-.25em \raise.25ex\hbox{\tt $+\kern-0.2ex+$}}
+\def\Olinker{$O_{2}^{linker}$}
+\def\olinker{$O_{2}^{linker}$}
+\def\TILDE{\catcode`\~=11{}~}
+\def\INDENT#1#2{\line{\hskip#1{#2}\hfill}}
+\def\fbreak{\hfill\break}
+\def\emptyrule{
+\ifmmode
+ \epsilon
+\else
+$\epsilon$
+\fi
+}
+
+\def\fnp{\vfill\eject}
+\def\Alpha{$\alpha$}
+\def\Beta{$\beta$}
+\def\o2{\O2}
+\def\prtobrace{$\{$}
+\def\prtcbrace{$\}$}
+\def\prtstartsr{$-$$>$}
+\def\]{\leavevmode\hbox{\tt\char`\ }}
+\def\derives{$\Rightarrow$}
+\def\subrule{$\rightarrow$}
+\def\braceo{\char`\{}
+\def\BRACEOPEN{\tt \char`\{}
+\def\bracec{\char`\}}
+\def\BRACECLOSE{\tt \char`\}}
+\newbox\ALLshiftbox %|+|
+\setbox\ALLshiftbox=\hbox{$|$\kern.5pt\raise1pt\hbox{\kern-2pt\sevenrm+}\kern-2pt$|$}
+\def\ALLshift{\.{|+|}}
+\def\INVshift{\.{|.|}}
+\def\PARshift{\.{|||}}
+\def\REDshift{\.{|r|}}
+\def\PROCshift{\.{|t|}}
+\def\TRAshift{\.{|t|}}
+\def\QUEshift{\.{|?|}}
+
+\def\Verticalbar{\tt \char`|}
+\def\allshift{\ALLshift}
+\def\invisibleshift{\INVshift}
+\def\paralleloperator{\PARshift}
+\def\procedurecalloperator{\PROCshift}
+\def\transienceoperator{\TRAshift}
+\def\questionableoperator{\QUEshift}
+\def\reduceoperator{\REDshift}
+\def\rrrr{\REDshift}
+\def\ATsign{\char`@}
+%\def\NOsign{
+%\ifmmode
+% \char`\#
+%\else
+%$\char`\#$
+%\fi
+%}
+\def\NOsign{
+{\tt \char`\#}
+}
+\def\LTsign{
+\ifmmode
+ <
+\else
+$<$
+\fi
+}
+\def\GTsign{
+\ifmmode
+ >
+\else
+$>$
+\fi
+}
+\def\PLUSsign{$+$}
+\def\MINUSsign{$-$}
+\def\AMPERsign{\char`&}
+\def\ASTERICsign{\char`*}
+\def\PERCENTsign{\char`\%}
+\def\DOLLARsign{\char`$}
+\def\DBLQUOTEsign{\char`\"}
+\def\LFTQUOTEsign{\char`\`}
+\def\RTQUOTEsign{\char`\'}
+
+%\def\BKSLASHsign{
+%\ifmmode \char`\\\else $\backslash$ \fi
+%}
+\def\BKSLASHsign{
+{\tt \char`\\}
+}
+
+\def\UPARROWsign{\char`^}
+\def\UNDERSCOREsign{\char`_}
+\def\Shiftonly{$^s$}
+\def\Reduceonly{$^r$}
+\def\ShiftReduce{$^{s/r}$}
+\def\MultipleReduces{$^{r{^2}}$}
+\def\ShiftandMultipleReduces{$^{s/r{^2}}$}
+\def\Derivedstatessym{$\triangleright$}
+\def\Mergedsym{$^\nearrow$}
+\def\Mergedstate#1{$^\nearrow{^{#1}}$}
+\def\Subrulestartsymstrindent#1{\item{#1}}
+\def\Subrulederivedstatesindent{\item\item{\Derivedstatessym\ }}
+\def\Reducedstatelist{\item\item{$\subset$\ }}
+\def\Linkeridxentry#1{{\par\parindent=2pc{\narrower#1}\smallskip}}
+\def\Linkeridxentryk#1{{\par\parindent=3pc{\item\item{#1}\smallskip}}}
+\def\Linkercalledthreads#1#2{{\par\parindent=#2pc{\narrower#1}\smallskip}}
+\def\Linkercalledthreadstitle{{\par\parindent=0pc{\narrower %
+First set of called threads list.}\smallskip}}
+
+\def\IDXdoctitle#1#2{% p1 banner p2 file name
+ \global\def\title{#1}
+ \global\def\topofcontents{\null\vfill
+ \centerline{\ttitlefont #1}
+ \vskip 15pt
+ \hbox{\ttitlefont Date: \today \ at \hours \hfil}
+ \vskip 15pt
+ \hbox{\ttitlefont File: #2 \hfil}
+ \vfill
+ }
+}
+\def\IDXlinkerdoctitle#1#2#3{% p1 banner p2 file name p3 fsc source file
+ \global\def\title{#1}
+ \global\def\topofcontents{\null\vfill
+ \centerline{\ttitlefont #1}
+ \vskip 15pt
+ \hbox{\ttitlefont Date: \today \ at \hours \hfil}
+ \vskip 15pt
+ \hbox{\ttitlefont File: #2 \hfil}
+ \vskip 15pt
+ \hbox{\ttitlefont Fsc\ : #3 \hfil}
+ \vfill
+ }
+}
+\def\DOCtitle#1#2#3#4{% 1 banner, 2 file name, 3 NS, 4 # T
+ \global\def\title{#1}
+ \global\def\topofcontents{\null\vfill
+ \centerline{\ttitlefont #1}
+ \vskip 15pt
+ \centerline{\ttitlefont Date: \today \ at \hours }
+ \vskip 15pt
+ \centerline{\ttitlefont File: #2 \hfil Namespace: #3}
+ \vskip 15pt
+ \centerline{\ttitlefont Number of terminals: #4}
+ \vfill
+ }
+}
+
+\def\GRAMMARtitle#1#2#3#4#5#6{% p1 fn noext, p2 filename.ext, p3 NS, p4 version
+ \global\def\title{#1 Grammar} %p5 debug, p6 comments
+ \global\def\topofcontents{\null\vfill
+ \centerline{\ttitlefont #1 Grammar}
+ \vskip 15pt
+ \centerline{\ttitlefont Date: \today \ at \hours \hfil}
+ \vskip 15pt
+ \centerline{\ttitlefont File: #2}
+ \vskip 15pt
+ \centerline{\ttitlefont Ns: #3}
+ \vskip 15pt
+ \centerline{Version: #4 \hfil Debug: #5}
+ \vskip 15pt
+ \centerline{Grammar Comments: \hfil Type: Monolithic}
+ \vskip 15pt
+ \centerline{#6}
+ \vfill
+ }
+}
+
+\def\THREADtitle#1#2#3#4#5#6#7#8{% 1 filename noext, 2 file name.lex, 3 NS
+ \global\def\title{#1 Grammar} % 4 vers 5 debug, 6 comments, 7 # T in la, 8 la expr
+ \global\def\topofcontents{\null\vfill
+ \centerline{\ttitlefont #1 Grammar}
+ \vskip 15pt
+ \centerline{\ttitlefont Date: \today \ at \hours \hfil}
+ \vskip 15pt
+ \centerline{\ttitlefont File: #2 \hfil Ns: #3}
+ \vskip 15pt
+ \centerline{Version: #4 \hfil Debug: #5}
+ \vskip 15pt
+ \centerline{Grammar Comments: \hfil Type: Thread}
+ \vskip 15pt
+ \centerline{#6}
+ \vskip 15pt
+ \centerline{\ttitlefont #7 element(s) in Lookahead Expression below}
+ \vskip 10pt
+ \centerline{#8}
+ \vfill
+ }
+}
+
+
+%
+% state no macros to generate the lr1 state report
+%
+\def \statecolumnspace{
+\tabskip=.5em plus1em minus.25em
+}
+
+\def\stateno#1#2#3{%1-state no, 2-vectored into literal symbol, 3-confict state
+\fbreak\noindent
+\hbox{\hbox to 8cm{$\Rightarrow^{\eightrm #2}$ \hfil} State: #1 state type: {#3} \hfil}
+}
+
+\def\statetemplate{
+##&
+\eightrm##\hfil&
+##&
+##&
+##&
+\sevenrm##\hfil&
+##&
+##&
+##&
+##\cr %LA set no template
+}
+
+\def\statetitle{
+{\ }&
+\statetitlerule&
+\statetitlerulecoordinates&
+\statetitlesubrule&
+\statetitlesubrulebirth\cr
+}
+
+\def\statetitleintro{
+\fbreak
+\hbox to .5cm{}
+}
+\def\statetitlerule{
+\hbox to 3.5cm{\tt{$\leftarrow$}\hfil rule \hfil{$\rightarrow$}}
+}
+\def\statetitlerulecoordinates{
+{\tt R\#\ }&{\tt sr\#}&{\tt Po}
+}
+\def\statetitlesubrule{
+\hbox to 7.5cm{\tt{$\leftarrow$}\hfil subrule element\hfil{$\rightarrow$}}
+}
+\def\statetitlesubrulebirth{
+{\tt Brn}&{\tt Gto}&{\tt Red}&{\tt LA}
+}
+
+\def\LRstatenetwork{
+List of productions with their derived LR state lists.
+Their subrule number and symbol string indicates the specific
+production being derived.
+The ``\Derivedstatessym'' symbol indicates the production's list of
+derived states from its closured state.
+Multiple lists within a production indicate 1 of 2 things:\fbreak
+\ptindent{1) derived string that could not be merged due to a lr(1) conflict}
+\ptindent{2) partially derived string merged into another derived lr states}
+A partially derived string is indicated by the ``merged into'' symbol \Mergedsym
+used as a superscript along with the merged into state number.\fbreak
+}
+\def\Listofreducingstates{
+The following legend indicates the type of reducing state.\fbreak
+Points 2--4 are states that must meet the lr(1) condition:\fbreak
+\ptindent{1) r --- only 1 production reducing}
+\ptindent{2) r$^2$ --- 2 or more reducing productions}
+\ptindent{3) s$/$r --- shift and 1 reducing production}
+\ptindent{4) s$/r^2$ --- shift and multiple reducing productions}
+\fbreak
+}
+
+%
+% Follow set info per state and possible reducing subrules lookahead set
+%
+\def\FollSetnotesintro{
+Notes on Follow set expressions:\fbreak
+1) The ``follow set'' for rule uses its literal name
+and tags its grammar rule rank number as a superscript.
+Due to space limitations, part of the follow set information
+uses the rule's literal name
+while the follow set expressions refers to the rule's rank number.
+This \LTsign{}rule name, rule rank number\GTsign tupple allows
+you the reader to decifer the expressions.
+Transitions are represented by S{$_{x}$}R{$_{z}$} whereby
+ S is the LR1 state identified by its ``x'' subscript where
+other transient calculations occur within the LR1 state network.
+R indicates the follow set rule with the subscript ``z'' as its grammar rank number
+that contributes to the follow set.
+\fbreak
+\fbreak
+The \Mergedstate{x} symbol indicates that a merge into state ``x'' has taken place.
+That is, the reduced subrule that depends on this follow set
+finds its follow set in 2 places:
+its birthing state that generated the sequence up to the merged into state,
+and the birthing state that generated the ``merged into'' state.
+So the rule's ``follow set'' calculation must also continue
+its calculation within the birth state generating
+the ``x merged into'' state.
+\fbreak
+\raggedright
+}
+
+\def\FollSettemplate{
+##\hfil& %rule name
+##\hfil\cr % list of contributors template
+}
+
+\def\FollSettitle{
+\FollSettitlerule&
+\FollSettitlecontributors\cr
+}
+
+\def\FollSettitlerule{
+\hbox to 4cm{\tt{$\leftarrow$}\hfil Follow set Rule \hfil{$\rightarrow$}}
+}
+
+\def\FollSettitlecontributors{
+\hbox to 11cm{\tt{$\leftarrow$}\hfil follow set symbols contributors\hfil{$\rightarrow$}}
+}
+
+\def\FollSetlocalyield{
+\hbox{Local follow set yield: $\sum$ first-set(follow symbols)}
+\item{}
+\raggedright
+}
+
+\def\FollSetstateno#1{%1-state no
+\fbreak\noindent
+\hbox{\hbox to 11cm{State: #1 \hfil Follow Set contributors, merges, and transitions \hfil}}
+}
+\def\rulenameno#1{{\sevenrm$^{#1}$}}
+\def\FollSetcreators#1#2#3{R$_{#1}._{#2}._{#3}$}
+\def\FollSetmerges#1{\Mergedstate{#1}}
+\def\FollSettransition#1#2{S$_{#1}R_{#2}$}
+
+\def\FollSetreducinglocalyield{
+\hbox{Local follow set yield: }
+\item{}
+\raggedright
+}
+
+%
+% Reducing subrule's look ahead set
+%
+\def\FollSetreducingsrs{
+\fbreak
+\hbox{Reducing Subrule:}
+}
+
+\def\FollSetreducingsrtemplate{
+##& %R#
+##& %SR
+##\hfil& % list of contributors template
+\quad##\cr % lookahead set index no
+}
+\def\FollSetreducingsubruletitle{
+\FollSetreducingsrtitle&
+\FollSetreducingsrcontributorstitle&
+\FollSetreducingsrlasettitle\cr
+}
+\def\FollSetreducingsrtitle{
+{\tt R\#\ }&{\tt sr\#}
+}
+\def\FollSetreducingsrcontributorstitle{
+\hbox to 13.75cm{\tt{$\leftarrow$}\hfil subrule's reducing symbol position and any right bounded transitions\hfil{$\rightarrow$}}
+}
+\def\FollSetreducingsrlasettitle{
+\hbox {\tt LA\#}
+}
+\def\FollSetreducingsrtotalyield{
+\hbox{Total follow set yield:}
+\item{}
+\raggedright
+}
+\def\LASettotalyield#1{
+\hbox{Lookahead set #1 yield:}
+\item{}
+\raggedright
+}
+
+
diff --git a/web/yacco2/diagrams/o2run_example.txt b/web/yacco2/diagrams/o2run_example.txt
new file mode 100644
index 0000000000..fd987a559f
--- /dev/null
+++ b/web/yacco2/diagrams/o2run_example.txt
@@ -0,0 +1,9 @@
+rem file: o2.bat
+rem compile O2 grammars
+cd \yacco2\compiler\h2o\release
+@echo ON
+
+o2 -p -t -err /yacco2/compiler/grammars/enumerate_grammar.lex
+mpost enumerate_grammar.mp
+cweave enumerate_grammar.w
+pdftex enumerate_grammar
diff --git a/web/yacco2/diagrams/parse_stk_env.1 b/web/yacco2/diagrams/parse_stk_env.1
new file mode 100644
index 0000000000..82bda8a2a9
--- /dev/null
+++ b/web/yacco2/diagrams/parse_stk_env.1
@@ -0,0 +1,136 @@
+%!PS
+%%BoundingBox: 21 -13 306 82
+%%HiResBoundingBox: 21.68697 -12.9627 305.22595 81.18062
+%%Creator: MetaPost 0.993
+%%CreationDate: 2007.07.01:1657
+%%Pages: 1
+%*Font: cmr10 5.97765 9.96265 20:8000e000000000004454188
+%*Font: cmsy10 9.96265 9.96265 0f:80001
+%*Font: cmr10 9.96265 9.96265 2e:8008000008051f07ef92
+%%BeginProlog
+%%EndProlog
+%%Page: 1 1
+ 0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 63.96065 0 moveto
+76.75278 0 lineto
+76.75278 51.16852 lineto
+63.96065 51.16852 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 63.96065 12.79213 moveto
+76.75278 12.79213 lineto stroke
+newpath 63.96065 25.58426 moveto
+76.75278 25.58426 lineto stroke
+newpath 63.96065 38.37639 moveto
+65.72687 40.14261 68.5905 40.14261 70.35672 38.37639 curveto
+72.12294 36.61017 74.98656 36.61017 76.75278 38.37639 curveto stroke
+79.75278 -1.92613 moveto
+(0) cmr10 5.97765 fshow
+79.75278 10.866 moveto
+(1) cmr10 5.97765 fshow
+79.75278 23.65813 moveto
+(2) cmr10 5.97765 fshow
+79.75278 36.30081 moveto
+(max\040stk\040items) cmr10 5.97765 fshow
+21.68697 -10.472 moveto
+(parse) cmr10 9.96265 fshow
+47.78357 -10.472 moveto
+(stac) cmr10 9.96265 fshow
+64.72006 -10.472 moveto
+(k[].parse) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath 101.65387 -10.2728 moveto
+104.64267 -10.2728 lineto stroke
+104.64267 -10.472 moveto
+(record) cmr10 9.96265 fshow
+118.12917 74.26212 moveto
+(parse) cmr10 9.96265 fshow
+newpath 141.50267 74.46132 moveto
+144.49147 74.46132 lineto stroke
+144.49147 74.26212 moveto
+(record:) cmr10 9.96265 fshow
+130.9213 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 61.46999 moveto
+(sym) cmr10 9.96265 fshow
+156.4368 61.46999 moveto
+(b) cmr10 9.96265 fshow
+162.24829 61.46999 moveto
+(ol) cmr10 9.96265 fshow
+169.9971 61.46999 moveto
+(") cmsy10 9.96265 fshow
+130.9213 48.67786 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 48.67786 moveto
+(state) cmr10 9.96265 fshow
+160.3111 48.67786 moveto
+(") cmsy10 9.96265 fshow
+130.9213 34.91713 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 34.91713 moveto
+(ab) cmr10 9.96265 fshow
+150.01639 34.91713 moveto
+(orted) cmr10 9.96265 fshow
+176.0577 34.91713 moveto
+(b) cmr10 9.96265 fshow
+181.8693 34.91713 moveto
+(o) cmr10 9.96265 fshow
+187.12729 34.91713 moveto
+(olean) cmr10 9.96265 fshow
+213.1409 34.91713 moveto
+(v) cmr10 9.96265 fshow
+217.84549 34.91713 moveto
+(alued) cmr10 9.96265 fshow
+130.9213 23.0936 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 23.0936 moveto
+(Rule) cmr10 9.96265 fshow
+newpath 159.88489 23.2928 moveto
+162.87369 23.2928 lineto stroke
+162.87369 23.0936 moveto
+(s) cmr10 9.96265 fshow
+newpath 167.4012 23.2928 moveto
+170.39 23.2928 lineto stroke
+170.39 23.0936 moveto
+(reuse) cmr10 9.96265 fshow
+newpath 193.20999 23.2928 moveto
+196.19879 23.2928 lineto stroke
+196.19879 23.0936 moveto
+(en) cmr10 9.96265 fshow
+205.88469 23.0936 moveto
+(try) cmr10 9.96265 fshow
+218.91919 23.0936 moveto
+(") cmsy10 9.96265 fshow
+156.50555 10.30147 moveto
+(\017) cmsy10 9.96265 fshow
+164.80775 10.30147 moveto
+(recycled) cmr10 9.96265 fshow
+203.30235 10.30147 moveto
+(rule) cmr10 9.96265 fshow
+219.93445 10.30147 moveto
+(") cmsy10 9.96265 fshow
+156.50555 -3.45926 moveto
+(\017) cmsy10 9.96265 fshow
+164.80775 -3.45926 moveto
+(used) cmr10 9.96265 fshow
+187.55585 -3.45926 moveto
+(on) cmr10 9.96265 fshow
+201.39285 -3.45926 moveto
+(stac) cmr10 9.96265 fshow
+218.32936 -3.45926 moveto
+(k) cmr10 9.96265 fshow
+226.90836 -3.45926 moveto
+(|) cmr10 9.96265 fshow
+240.19185 -3.45926 moveto
+(b) cmr10 9.96265 fshow
+246.00336 -3.45926 moveto
+(o) cmr10 9.96265 fshow
+251.26146 -3.45926 moveto
+(olean) cmr10 9.96265 fshow
+277.27505 -3.45926 moveto
+(v) cmr10 9.96265 fshow
+281.97966 -3.45926 moveto
+(alued) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/parse_stk_env.mp b/web/yacco2/diagrams/parse_stk_env.mp
new file mode 100644
index 0000000000..8f41b2bed8
--- /dev/null
+++ b/web/yacco2/diagrams/parse_stk_env.mp
@@ -0,0 +1,53 @@
+% file: yacco2_stbl.mp
+input boxes
+beginfig(1);
+u=1cc;
+
+% parse stack
+pair sw,se,ne,nw;
+pair zx,zy;
+
+sw:=(5u,0);
+se:=(6u,0);
+ne:=(6u,4u);
+nw:=(5u,4u);
+draw sw--se--ne--nw--cycle;
+%outline the bytes
+for i=1 upto 3:
+ zx:=(5u,i*u);zy:=(6u,i*u);
+ if i = 3:
+ draw zx{dir 45} .. .5[zx,zy] {dir -45} .. zy;
+ else:
+ draw zx--zy;
+ fi
+endfor
+
+% label subscripts
+defaultscale:=.6;
+for i=0 upto 3:
+ zy:=(6u,i*u);
+ string a;
+ if i=3:
+ a := "max stk items";
+ label.rt(a,zy);
+ else:
+ a:=decimal (i);
+ label.rt(substring(0,1)of a,zy);
+ fi
+endfor
+label.bot(btex parse stack[].parse$\_$record etex,(6u,0u));
+
+defaultscale:=1;
+
+
+%outline parse record
+label.rt(btex parse$\_$record: etex,(9u,6u));
+label.rt(btex $\bullet\ $symbol$\uparrow$ etex,(10u,5u));
+label.rt(btex $\bullet\ $state$\uparrow$ etex,(10u,4u));
+label.rt(btex $\bullet\ $aborted\ boolean valued etex,(10u,3u));
+label.rt(btex $\bullet\ $Rule$\_$s$\_$reuse$\_$entry$\uparrow$ etex,(10u,2u));
+label.rt(btex $\bullet\ $recycled rule$\uparrow$ etex,(12u,1u));
+label.rt(btex $\bullet\ $used on stack --- boolean valued etex,(12u,0u));
+endfig;
+
+end;
diff --git a/web/yacco2/diagrams/ppmntr.txt b/web/yacco2/diagrams/ppmntr.txt
new file mode 100644
index 0000000000..9a29288815
--- /dev/null
+++ b/web/yacco2/diagrams/ppmntr.txt
@@ -0,0 +1,33 @@
+/*
+file: ppmntr.txt
+Why: text example parallel monitor construct.
+*/
+
+parallel-control-monitor {
+ /@
+ unquoted-string supersets identifier
+ and also includes other T like $-$$>$ and cweb comments ie cweb-marker.
+ Code only gets tried when \# parms in accept queue $>$ 1.
+ Single entry is one of identifier or cweb.
+ @/
+arbitrator-code
+ using namespace NS_yacco2_T_enum;
+ {
+ parallel_accept_queue_iterator_type z;
+ z = To_judge->accept_queue__.find(NS_yacco2_T_enum::T_Enum::T_T_cweb_marker_);
+ if(z != ie){// cweb marker fnd
+ i = z;
+ accept_parse_parm = (*z).second;
+ (*z).second = 0;
+ goto arbitrated_parameter;
+ }
+ // negative: throw out the superset: unquoted-string
+ // cuz identifier or one of its derivatives should be accepted
+ i = To_judge->accept_queue__.find(NS_yacco2_T_enum::T_Enum::T_T_unquoted_string_);
+ delete (*i).second;
+ To_judge->accept_queue__.erase(i);
+ i = To_judge->accept_queue__.begin();
+ accept_parse_parm = (*i).second;
+ }
+ ***
+} \ No newline at end of file
diff --git a/web/yacco2/diagrams/ppprsr.txt b/web/yacco2/diagrams/ppprsr.txt
new file mode 100644
index 0000000000..c5cf7ed6f2
--- /dev/null
+++ b/web/yacco2/diagrams/ppprsr.txt
@@ -0,0 +1,13 @@
+/*
+file: ppprsr.txt
+Why: text example parallel parser construct.
+*/
+parallel-parser
+(
+ parallel-thread-function
+ TH_angled_string
+ ***
+ parallel-la-boundary
+ eolr - ||| - |+| - ">"
+ ***
+)
diff --git a/web/yacco2/diagrams/rcsym.txt b/web/yacco2/diagrams/rcsym.txt
new file mode 100644
index 0000000000..22c8339561
--- /dev/null
+++ b/web/yacco2/diagrams/rcsym.txt
@@ -0,0 +1,46 @@
+/*
+file: rcsym.txt
+Why: raw character symbols vocabulary to parse.
+Note: raw-characters is shown for clarity. It is the keyword trigger
+ that calls this grammar. Parsed is comments onwards.
+*/
+raw-characters
+// comments
+(file-name o2_chars,name-space NS_o2_chars) {
+// 7 bit char set
+"x00" (sym-class raw_nul{
+ user-declaration
+ public:
+ raw_nul(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_nul::raw_nul(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x00",T_raw_nul_,false,false,Ext_file,Pos)}
+ ***
+ }
+)
+ ....
+"!" (sym-class raw_exclam{
+ user-declaration
+ public:
+ raw_exclam(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_exclam::raw_exclam(INT Ext_file,size_t Pos){
+ T_CTOR_RW("!",T_raw_exclam_,false,false,Ext_file,Pos)}
+ ***
+ }
+)
+ ....
+// 8 bit char set
+"xff" (sym-class raw_xff{
+ user-declaration
+ public:
+ raw_xff(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_xff::raw_xff(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xff",T_raw_xff_,false,false,Ext_file,Pos)}
+ ***
+ }
+} \ No newline at end of file
diff --git a/web/yacco2/diagrams/ruledef.txt b/web/yacco2/diagrams/ruledef.txt
new file mode 100644
index 0000000000..63285269b9
--- /dev/null
+++ b/web/yacco2/diagrams/ruledef.txt
@@ -0,0 +1,25 @@
+/*
+file: ruledef.txt
+Why: example of text to parse by rule_def_phrase grammar.
+*/
+Rrule_def_phrase AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> |.|
+ -> ||| "cweb-marker" NS_cweb_marker::TH_cweb_marker {
+ rhs-op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)parser()->fsm_tbl();
+ fsm->rule_def_->add_cweb_marker(sf->p2__->ast());
+ ***
+ }
+ -> ||| |+| NULL {
+ rhs-op
+ RSVP(sf->p2__);
+ parser()->set_stop_parse(true);
+ ***
+ }
+}
diff --git a/web/yacco2/diagrams/rulelhs.txt b/web/yacco2/diagrams/rulelhs.txt
new file mode 100644
index 0000000000..623043ab46
--- /dev/null
+++ b/web/yacco2/diagrams/rulelhs.txt
@@ -0,0 +1,13 @@
+/*
+file: rulelhs.txt
+Why: example of text to parse by rule_lhs_phrase grammar.
+*/
+lhs {
+ user-declaration
+ AST* cweb_t_;
+ ***
+ constructor
+ cweb_t_ = 0;
+ ***
+}
+
diff --git a/web/yacco2/diagrams/sampleoutput.txt b/web/yacco2/diagrams/sampleoutput.txt
new file mode 100644
index 0000000000..cda3cf5fc8
--- /dev/null
+++ b/web/yacco2/diagrams/sampleoutput.txt
@@ -0,0 +1,197 @@
+//
+// File: c:/yacco2/compiler/grammars/yacco2_fsc.cpp
+// Generated by linker.exe
+// Date and Time: Fri May 06 16:30:11 2005
+//
+
+// Preamble code
+#include <yacco2.h>
+#include <yacco2_T_enumeration.h>
+#include <yacco2_err_symbols.h>
+#include <yacco2_k_symbols.h>
+#include <yacco2_terminals.h>
+#include <yacco2_characters.h>
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+// thread include and namespace
+#include <T_enum_phrase_th.h>
+using namespace NS_T_enum_phrase_th;
+#include <angled_string.h>
+using namespace NS_angled_string;
+#include <bad_char_set.h>
+using namespace NS_bad_char_set;
+#include <c_comments.h>
+using namespace NS_c_comments;
+#include <c_literal.h>
+using namespace NS_c_literal;
+ ...
+#include <yacco2_code_end.h>
+using namespace NS_yacco2_code_end;
+#include <yacco2_lcl_option.h>
+using namespace NS_yacco2_lcl_option;
+#include <yacco2_linker_keywords.h>
+using namespace NS_yacco2_linker_keywords;
+#include <yacco2_syntax_code.h>
+using namespace NS_yacco2_syntax_code;
+
+// BIT MAPS
+#define TOTAL_NO_BIT_WORDS 2*1024*50
+int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);
+yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];
+void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;
+int yacco2::BIT_MAP_IDX__(0);
+// THREAD STABLE
+yacco2::Thread_entry ITH_T_enum_phrase_th =
+ {"TH_T_enum_phrase_th",NS_T_enum_phrase_th::TH_T_enum_phrase_th,0
+ ,NS_T_enum_phrase_th::PROC_TH_T_enum_phrase_th};
+yacco2::Thread_entry ITH_angled_string =
+ {"TH_angled_string",NS_angled_string::PROC_TH_angled_string,1
+ ,NS_angled_string::TH_angled_string};
+ ...
+yacco2::Thread_entry ITH_yacco2_syntax_code =
+ {"TH_yacco2_syntax_code",NS_yacco2_syntax_code::TH_yacco2_syntax_code
+ ,52,NS_yacco2_syntax_code::PROC_TH_yacco2_syntax_code};
+struct thd_array_type {
+ yacco2::USINT no_entries__;
+ yacco2::Thread_entry* first_entry__[53];
+};
+thd_array_type thd_array = {
+ 53
+ ,
+ {
+ &ITH_T_enum_phrase_th
+ ,&ITH_angled_string
+ ,&ITH_bad_char_set
+ ,&ITH_c_comments
+ ...
+ ,&ITH_yacco2_code_end
+ ,&ITH_yacco2_lcl_option
+ ,&ITH_yacco2_linker_keywords
+ ,&ITH_yacco2_syntax_code
+ }
+};
+void* yacco2::THDS_STABLE__ = (void*)&thd_array;
+// Terminal thread sets
+struct T_0_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_0_type T_0 = {// for T: LR1_eof
+//20: TH_linker_preamble_code
+//31: TH_rhs_bnd
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {2148532224
+ ,1081345
+ }
+};
+struct T_1_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_1_type T_1 = {// for T: LR1_eog
+//20: TH_linker_preamble_code
+//31: TH_rhs_bnd
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {2148532224
+ ,1081345
+ }
+};
+struct T_6_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_6_type T_6 = {// for T: LR1_all_shift_operator
+//20: TH_linker_preamble_code
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {1048576
+ ,1081345
+ }
+};
+struct T_7_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_7_type T_7 = {// for T: LR1_fset_transience_operator
+//0: TH_T_enum_phrase_th
+//9: TH_error_symbols_phrase_th
+//14: TH_fsm_class_phrase_th
+//15: TH_fsm_phrase_th
+//21: TH_lr1_k_phrase_th
+//24: TH_parallel_control
+//28: TH_parallel_parser_phrase_th
+//29: TH_prefile_include
+//30: TH_rc_phrase_th
+//33: TH_rule_def_phrase
+//35: TH_rules_phrase_th
+//39: TH_subrules_phrase
+//42: TH_terminal_def_phrase
+//44: TH_terminals_phrase_th
+ {1897972225
+ ,5258
+ }
+};
+ ...
+struct T_510_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_510_type T_510 = {// for T: thread_attributes
+//20: TH_linker_preamble_code
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {1048576
+ ,1081345
+ }
+};
+struct T_511_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_511_type T_511 = {// for T: th_in_stbl
+//20: TH_linker_preamble_code
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {1048576
+ ,1081345
+ }
+};
+struct T_512_type{
+ yacco2::ULINT first_entry__[2];
+};
+T_512_type T_512 = {// for T: kw_in_stbl
+//20: TH_linker_preamble_code
+//32: TH_rhs_component
+//47: TH_unquoted_string
+//52: TH_yacco2_syntax_code
+ {1048576
+ ,1081345
+ }
+};
+struct t_array_type {
+ yacco2::USINT no_entries__;
+ yacco2::thd_ids_having_T* first_entry__[513];
+};
+t_array_type t_array = {
+ 513
+ ,{(yacco2::thd_ids_having_T*)&T_0 // LR1_eof
+ ,(yacco2::thd_ids_having_T*)&T_1 // LR1_eog
+ ,0// LR1_eolr
+ ,0// LR1_parallel_operator
+ ,0// LR1_parallel_procedure_call_operator
+ ,0// LR1_invisible_shift_operator
+ ,(yacco2::thd_ids_having_T*)&T_6 // LR1_all_shift_operator
+ ,(yacco2::thd_ids_having_T*)&T_7 // LR1_fset_transience_operator
+ ,(yacco2::thd_ids_having_T*)&T_8 // raw_nul
+ ...
+ ,(yacco2::thd_ids_having_T*)&T_509 // T_attributes
+ ,(yacco2::thd_ids_having_T*)&T_510 // thread_attributes
+ ,(yacco2::thd_ids_having_T*)&T_511 // th_in_stbl
+ ,(yacco2::thd_ids_having_T*)&T_512 // kw_in_stbl
+ }
+};
+void* yacco2::T_ARRAY_HAVING_THD_IDS__ = (void*)&t_array;
diff --git a/web/yacco2/diagrams/sampleoutput2.txt b/web/yacco2/diagrams/sampleoutput2.txt
new file mode 100644
index 0000000000..2ebb718ff1
--- /dev/null
+++ b/web/yacco2/diagrams/sampleoutput2.txt
@@ -0,0 +1,28 @@
+//
+// File: c:/yacco2/linker/ts_0_fsc.cpp
+// Generated by linker.exe
+// Date and Time: Wed May 11 16:06:43 2005
+//
+
+// Preamble code
+#include <yacco2.h>
+#include <yacco2_T_enumeration.h>
+#include <yacco2_err_symbols.h>
+#include <yacco2_k_symbols.h>
+#include <yacco2_terminals.h>
+#include <yacco2_characters.h>
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+// thread include and namespace
+// BIT MAPS
+#define TOTAL_NO_BIT_WORDS 2*1024*50
+int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);
+yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];
+void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;
+int yacco2::BIT_MAP_IDX__(0);
+// There are NO THREADS emitted
+void* yacco2::THDS_STABLE__ = 0;
+void* yacco2::T_ARRAY_HAVING_THD_IDS__ = 0;
diff --git a/web/yacco2/diagrams/subrdef.txt b/web/yacco2/diagrams/subrdef.txt
new file mode 100644
index 0000000000..7929a12174
--- /dev/null
+++ b/web/yacco2/diagrams/subrdef.txt
@@ -0,0 +1,22 @@
+/*
+file: subrdef.txt
+Why: some text examples of sub rule construct.
+*/
+
+ -> ||| "#NULL" NS_identifier::TH_identifier {
+ op
+ Csubrule_def* fsm = (Csubrule_def*)parser()->fsm_tbl();
+ fsm->subrule_def_->add_elem_to_subrule_vector(sf->p2__);
+ ***
+ }
+ -> |?| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_open_brace;
+ sym->set_rc(*parser()->current_token(),*parser());
+ RSVP(sym);
+ parser()->set_stop_parse(true);
+ ***
+ }
+ -> "{"
+ -> Rvector Rlint Rrhs_expr
+
diff --git a/web/yacco2/diagrams/test.pdf b/web/yacco2/diagrams/test.pdf
new file mode 100644
index 0000000000..03895c75d4
--- /dev/null
+++ b/web/yacco2/diagrams/test.pdf
Binary files differ
diff --git a/web/yacco2/diagrams/test.tex b/web/yacco2/diagrams/test.tex
new file mode 100644
index 0000000000..8492984740
--- /dev/null
+++ b/web/yacco2/diagrams/test.tex
@@ -0,0 +1,109 @@
+% test.tex
+\input cwebmac
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+%\IDXlinkerdoctitle{o2linker\_doc.w}{o2linker%
+%\_doc.w}{/yacco2/compiler/grammars/yacco2.fsc}
+%\tracingall=1
+\tabskip=.5em plus1em minus.25em
+
+\stateno1 { } {0} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{c}&{Rtest}&{1\hss}&{1\hss}&{1\hss}&{Rtest\_indiv}&{1\hss}&{17\hss}&{0017\hss}\cr
+{c}&{Rtest\_indiv}&{233\hss}&{1\hss}&{1\hss}&{Ra}&{1\hss}&{6\hss}&{8\hss}\cr
+{c}&{Rtest\_indiv}&{2\hss}&{2\hss}&{1\hss}&{Rr}&{1\hss}&{9\hss}&{12\hss}\cr
+{c}&{Rtest\_indiv}&{2\hss}&{3\hss}&{1\hss}&{RE}&{1\hss}&{13\hss}&{16\hss}\cr
+{c}&{Ra}&{3\hss}&{1\hss}&{1\hss}&{a}&{1\hss}&{2\hss}&{2\hss}\cr
+{c}&{Ra}&{3\hss}&{2\hss}&{1\hss}&{A}&{1\hss}&{3\hss}&{3\hss}\cr
+{c}&{Rr}&{5\hss}&{1\hss}&{1\hss}&{r}&{1\hss}&{4\hss}&{4\hss}\cr
+{c}&{RE}&{7\hss}&{1\hss}&{1\hss}&{e}&{1\hss}&{5\hss}&{5\hss}\cr
+{c}&{REMMMMMMMMMMMzzzzhh...}&{7\hss}&{1\hss}&{1\hss}&{e}&{1\hss}&{5\hss}&{5\hss}\cr
+}
+\stateno2 {a} {15} {no}
+\halign{
+\span\statetemplate%
+\statetitle
+{t}&{Ra}&{003}&{001}&{002}&{eosr}&{0001}&{0000}&{0002}\cr
+}
+\stateno3 {A} {17} {no}
+\halign{
+\span\statetemplate%
+\statetitle
+{t}&{Ra}&{003}&{002}&{002}&{eosr}&{0001}&{0000}&{0002}\cr
+}
+\stateno4 {r} {21} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rr}&{005}&{001}&{002}&{eosr}&{0001}&{0000}&{0004}\cr
+}
+\stateno5 {e} {23} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{RE}&{007}&{001}&{002}&{eosr}&{0001}&{0000}&{0005}\cr
+}
+\stateno6 {Ra} {4} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{002}&{001}&{002}&{Rc}&{0001}&{0008}&{0008}\cr
+{C}&{Rc}&{004}&{001}&{004}&{c}&{0006}&{0007}&{0007}\cr
+}
+\stateno7 {c} {19} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rc}&{004}&{001}&{002}&{eosr}&{0006}&{0000}&{0007}\cr
+}
+\stateno8 {Rc} {5} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{002}&{001}&{003}&{eosr}&{0001}&{0000}&{0008}\cr
+}
+\stateno9 {Rr} {7} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{0002}&{002}&{002}&{Ra}&{0001}&{0010}&{0012}\cr
+{C}&{Ra}&{003}&{001}&{001}&{a}&{0009}&{0002}&{0002}\cr
+{C}&{Ra}&{003}&{001}&{002}&{eosr}&{0009}&{0003}&{0003}\cr
+}
+\stateno{10} {Ra} {8} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{0002}&{002}&{003}&{Rm}&{0001}&{0012}&{0012}\cr
+{C}&{Rm}&{006}&{001}&{001}&{m}&{0010}&{0011}&{0011}\cr
+}
+\stateno{11} {m} {27} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rm}&{006}&{001}&{002}&{eosr}&{0010}&{0000}&{0011}\cr
+}
+\stateno{12} {Rm} {9} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{002}&{002}&{004}&{eosr}&{0001}&{0000}&{0012}\cr
+}
+\stateno{13} {RE} {11} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest\_indiv}&{002}&{003}&{002}&{Ra}&{0001}&{0014}&{0016}\cr
+{C}&{Ra}&{003}&{001}&{001}&{a}&{0013}&{0002}&{0002}\cr
+{C}&{Ra}&{003}&{002}&{001}&{A}&{0013}&{0003}&{0003}\cr
+}
+\stateno{17} {Rtest\_indiv} {2} {no}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&{Rtest}&{001}&{001}&{002}&{eosr}&{0001}&{0000}&{0017}\cr
+}
+
+\end
diff --git a/web/yacco2/diagrams/testsuiteoutput.txt b/web/yacco2/diagrams/testsuiteoutput.txt
new file mode 100644
index 0000000000..0eb9f3637c
--- /dev/null
+++ b/web/yacco2/diagrams/testsuiteoutput.txt
@@ -0,0 +1,622 @@
+C:\yacco2\linker>rem file: testsuite.bat
+C:\yacco2\linker>rem test suite for Linker
+C:\yacco2\linker>cd "c:\yacco2\linker\release\"
+######## Command line edits #######
+######## perfect score: compile linker and yacco2 first set
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/compiler/grammars/yacco2.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Sort thread dictionary
+Emit file name: c:/yacco2/compiler/grammars/yacco2_fsc.cpp
+
+######## Command line error: bad file name inputted
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/compiler/grammars/yacco2.fscc"
+Load linker's keywords
+Get command line and parse it
+Error in file#: 1 "linkercmd.tmp"
+c:/yacco2/compiler/grammars/yacco2.fscc
+^
+ fpos: 0 line#: 1 cpos: 1
+ bad-filename filename: "c:/yacco2/compiler/grammars/yacco2.fscc" does not exist
+
+######## File control file error: no preamble construct
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_1.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_1.fsc"
+emitfile "TS_1_fsc.tmp"
+ ^
+ fpos: 121 line#: 7 cpos: 25
+ preamble keyword not present
+
+######## File control file error: no end-preamble present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_2.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_2.fsc"
+#include <yacco2.h>
+ ^
+ fpos: 151 line#: 9 cpos: 20
+ end-preamble keyword not present
+
+######## File control file error: no preamble code present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_3.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_3.fsc"
+preamble
+ ^
+ fpos: 131 line#: 8 cpos: 9
+ preamble source code not present
+
+######## File control file error: no file-of-T-alphabet keyword present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_4.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_4.fsc"
+file-of-T-alphabe "c:/yacco2/linker/TS_4.fsc"
+^
+ fpos: 57 line#: 6 cpos: 1
+ file-of-T-alphabet keyword not present
+
+######## File control file error: no file-of-T-alphabet file present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_5.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_5.fsc"
+emitfile "TS_5_fsc.tmp"
+^
+ fpos: 82 line#: 7 cpos: 1
+ T-alphabet file not present
+
+######## File control file error: no emitfile keyword present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_6.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_6.fsc"
+emitfilee "TS_6_fsc.tmp"
+^
+ fpos: 102 line#: 7 cpos: 1
+ emitfile keyword not present
+
+######## File control file error: no emitfile file present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_7.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_7.fsc"
+preamble
+^
+ fpos: 108 line#: 8 cpos: 1
+ emitfile file not present
+
+######## File control file error: no fsc file present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_8.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_8.fsc"
+end-preamble
+ ^
+ fpos: 175 line#: 10 cpos: 13
+ fsc control file not present
+
+######## File control file error: bad fsc filename
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_9.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_9.fsc"
+"c:/yacco2/linker/TS_9xx.fsc"
+^
+ fpos: 174 line#: 11 cpos: 1
+ fsc control file does not exist
+
+######## T-alphabet edits #######
+######## T-alphabet: no T-alphabet keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_10.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Error in file#: 3 "c:/yacco2/linker/TS_10t1.fsc"
+T-alphabett
+^
+ fpos: 75 line#: 5 cpos: 1
+ T-alphabet keyword not present
+
+######## T-alphabet: no end-T-alphabet keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_11.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Error in file#: 3 "c:/yacco2/linker/TS_11t1.fsc"
+end-T-alphabett
+ ^
+ fpos: 125 line#: 10 cpos: 3
+ end-T-alphabet keyword not present
+
+######## T-alphabet: duplicate t definition
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_12.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Error in file#: 3 "c:/yacco2/linker/TS_12t1.fsc"
+LR1_eof
+^
+ fpos: 122 line#: 10 cpos: 1
+ dup-entry-in-sym-table
+
+######## T-alphabet: no t definition
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_13.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Error in file#: 3 "c:/yacco2/linker/TS_13t1.fsc"
+end-T-alphabet
+^
+ fpos: 68 line#: 6 cpos: 1
+ no terminals in T-alphabet list
+
+######## T-alphabet: comment overrun
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_14.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Error in file#: 2 "c:/yacco2/linker/TS_14.fsc"
+/*
+^
+ fpos: 0 line#: 1 cpos: 1
+ comment-overrun
+
+######## fsc control files #######
+######## fsc control files: not defined terminal used in fsc control file
+
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_15.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/compiler/grammars/error_symbols_phrase.FSC"
+no-of-T 513
+ ^
+ fpos: 195 line#: 7 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/compiler/grammars/error_symbols_phrase.FSC"
+ LR1_fset_transience_operator
+ ^
+ fpos: 239 line#: 9 cpos: 4
+ bad terminal in list, not defined in T-alphabet
+
+######## fsc control files: thread used but not defined in fsc control file
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_16.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_bad_char_set::TH_bad_char_set
+ ^
+ fpos: 378 line#: 18 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_c_comments::TH_c_comments
+ ^
+ fpos: 413 line#: 19 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_c_literal::TH_c_literal
+ ^
+ fpos: 444 line#: 20 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_c_string::TH_c_string
+ ^
+ fpos: 473 line#: 21 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_eol::TH_eol
+ ^
+ fpos: 500 line#: 22 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_identifier::TH_identifier
+ ^
+ fpos: 517 line#: 23 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_16t1.fsc"
+ NS_ws::TH_ws
+ ^
+ fpos: 548 line#: 24 cpos: 3
+ bad thread in transitive list, not defined by fsc files
+
+######## fsc control files: bad native first set number
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_17.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_17t1.fsc"
+no-of-T 502
+ ^
+ fpos: 205 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_17t1.fsc"
+list-of-native-first-set-terminals -3
+ ^
+ fpos: 244 line#: 12 cpos: 36
+ list-of-native-terminals... number not present
+
+######## fsc control files: native first set number mismatch to no in list
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_18.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_18t1.fsc"
+no-of-T 502
+ ^
+ fpos: 229 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_18t1.fsc"
+list-of-native-first-set-terminals 2
+ ^
+ fpos: 268 line#: 12 cpos: 36
+ no terminals in list not equal, chk items in list
+
+######## fsc control files: thread list number mismatch to no in list
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_19.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_19t1.fsc"
+no-of-T 502
+ ^
+ fpos: 224 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_19t1.fsc"
+list-of-transitive-threads 2
+ ^
+ fpos: 383 line#: 17 cpos: 28
+ no threads in list not equal, chk items in list
+
+######## fsc control files: bad thread list number
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_20.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_20t1.fsc"
+no-of-T 502
+ ^
+ fpos: 205 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_20t1.fsc"
+list-of-transitive-threads -7
+ ^
+ fpos: 364 line#: 17 cpos: 28
+ list-of-transitive-threads... number not present
+
+######## fsc control files: no thread list number present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_21.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_21t1.fsc"
+no-of-T 502
+ ^
+ fpos: 212 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_21t1.fsc"
+ NS_bad_char_set::TH_bad_char_set
+ ^
+ fpos: 374 line#: 18 cpos: 3
+ list-of-transitive-threads... number not present
+
+######## fsc control files: no native first set number present
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_22.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_22t1.fsc"
+no-of-T 502
+ ^
+ fpos: 222 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 3 "c:/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+raw_at_sign
+^
+ fpos: 746 line#: 74 cpos: 1
+ list-of-native-terminals... number not present
+
+######## fsc control files: no-of-T # not matched against T-alphabet
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_23.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_23t1.fsc"
+no-of-T 1502
+ ^
+ fpos: 223 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+
+######## fsc control files: no transitive keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_24.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_24t1.fsc"
+transitivee y
+^
+ fpos: 69 line#: 5 cpos: 1
+ transitive keyword not present
+
+######## fsc control files: bad transitive value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_25.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_25t1.fsc"
+transitive x
+ ^
+ fpos: 81 line#: 5 cpos: 14
+ linker's transitive value not n or y
+
+######## fsc control files: bad grammar-name keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_26.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_26t1.fsc"
+grammar-namee "pass3"
+^
+ fpos: 87 line#: 6 cpos: 1
+ grammar-name keyword not present
+
+######## fsc control files: bad grammar-name value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_27.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_27t1.fsc"
+grammar-name pass3
+ ^
+ fpos: 98 line#: 6 cpos: 14
+ grammar-name value not present or quoted value
+
+######## fsc control files: bad name-space keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_28.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_28t1.fsc"
+name-spacee "NS_pass3"
+^
+ fpos: 106 line#: 7 cpos: 1
+ name-space keyword not present
+
+######## fsc control files: bad name-space value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_29.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_29t1.fsc"
+name-space NS_pass3
+ ^
+ fpos: 117 line#: 7 cpos: 14
+ name-space value not present or quoted value
+
+######## fsc control files: bad thread-name keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_30.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_30t1.fsc"
+thread-namee "Cpass3"
+^
+ fpos: 131 line#: 8 cpos: 1
+ thread-name keyword not present
+
+######## fsc control files: bad thread-name value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_31.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_31t1.fsc"
+thread-name Cpass3
+ ^
+ fpos: 142 line#: 8 cpos: 14
+ thread-name value not present or quoted value
+
+######## fsc control files: bad monolithic keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_32.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_32t1.fsc"
+monolithicc y
+^
+ fpos: 152 line#: 9 cpos: 1
+ monolithic keyword not present
+
+######## fsc control files: bad monolithic value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_33.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_33t1.fsc"
+monolithic Y
+ ^
+ fpos: 163 line#: 9 cpos: 14
+ linker's monolithic value not n or y
+
+######## fsc control files: bad file-name keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_34.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_34t1.fsc"
+file-namee "pass3.fsc"
+^
+ fpos: 166 line#: 10 cpos: 1
+ file-name keyword not present
+
+######## fsc control files: bad file-name value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_35.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_35t1.fsc"
+file-name monolithic.fsc
+ ^
+ fpos: 177 line#: 10 cpos: 14
+ file-name value not present or quoted value
+
+######## fsc control files: bad no-of-T keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_36.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_36t1.fsc"
+no-of-Tt 504
+^
+ fpos: 189 line#: 11 cpos: 1
+ no-of-T keyword not present
+
+######## fsc control files: bad no-of-T value
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_37.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_37t1.fsc"
+no-of-T +504
+ ^
+ fpos: 200 line#: 11 cpos: 14
+ no-of-T value not present
+
+######## fsc control files: bad list-of-native-first-set-terminals keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_38.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_38t1.fsc"
+no-of-T 504
+ ^
+ fpos: 229 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_38t1.fsc"
+transitive 3
+^
+ fpos: 233 line#: 12 cpos: 1
+ list-of-native-terminals keyword not present
+
+######## fsc control files: bad end-list-of-native-first-set-terminals keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_39.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_39t1.fsc"
+no-of-T 504
+ ^
+ fpos: 233 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_39t1.fsc"
+end-list-of-native-first-set-terminalss
+^
+ fpos: 326 line#: 16 cpos: 1
+ bad terminal in list, not defined in T-alphabet
+
+######## fsc control files: bad list-of-transitive-threads keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_40.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_40t1.fsc"
+no-of-T 504
+ ^
+ fpos: 221 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_40t1.fsc"
+list-of-transitive-threadss 0
+^
+ fpos: 353 line#: 17 cpos: 1
+ list-of-transitive-threads keyword not present
+
+######## fsc control files: bad end-list-of-transitive-threads keyword
+C:\yacco2\linker\Release>lnk.exe "c:/yacco2/linker/TS_41.fsc"
+Load linker's keywords
+Get command line and parse it
+Parse linker control file
+Parse alphabet
+Parse fsc files
+Error in file#: 4 "c:/yacco2/linker/TS_41t1.fsc"
+no-of-T 504
+ ^
+ fpos: 225 line#: 11 cpos: 14
+ T-alphabet list vs no. of T not eq. re-compile grammar
+Error in file#: 4 "c:/yacco2/linker/TS_41t1.fsc"
+end-list-of-transitive-threadss
+ ^
+ fpos: 387 line#: 18 cpos: 3
+ end-list-of-transitive-threads keyword not present
+
+C:\yacco2\linker\Release>del c:\yacco2\linker\ts*.tmp
diff --git a/web/yacco2/diagrams/threading_defs.1 b/web/yacco2/diagrams/threading_defs.1
new file mode 100644
index 0000000000..c7382817da
--- /dev/null
+++ b/web/yacco2/diagrams/threading_defs.1
@@ -0,0 +1,203 @@
+%!PS
+%%BoundingBox: -74 -13 344 81
+%%Creator: MetaPost
+%%CreationDate: 2006.05.23:0810
+%%Pages: 1
+%*Font: cmr10 5.97765 9.96265 20:8004e000000000004cc338
+%*Font: cmmi10 9.96265 9.96265 3a:a800020001b320e
+%*Font: cmsy10 9.96265 9.96265 0f:80001
+%*Font: cmr10 9.96265 9.96265 23:80400100000000a3eefdee4
+%%EndProlog
+%%Page: 1 1
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath 12.79213 0 moveto
+25.58426 0 lineto
+25.58426 51.16852 lineto
+12.79213 51.16852 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 12.79213 12.79213 moveto
+25.58426 12.79213 lineto stroke
+newpath 12.79213 25.58426 moveto
+25.58426 25.58426 lineto stroke
+newpath 12.79213 38.37639 moveto
+14.55835 40.14261 17.42198 40.14261 19.1882 38.37639 curveto
+20.95442 36.61017 23.81804 36.61017 25.58426 38.37639 curveto stroke
+28.58426 -1.92613 moveto
+(0) cmr10 5.97765 fshow
+28.58426 10.866 moveto
+(1) cmr10 5.97765 fshow
+28.58426 23.65813 moveto
+(2) cmr10 5.97765 fshow
+28.58426 36.30081 moveto
+(no threads ids-1) cmr10 5.97765 fshow
+-73.87308 -10.472 moveto
+(P) cmmi10 9.96265 fshow
+-66.09317 -10.472 moveto
+(ar) cmmi10 9.96265 fshow
+-56.05557 -10.472 moveto
+(al) cmmi10 9.96265 fshow
+-47.62077 -10.472 moveto
+(l) cmmi10 9.96265 fshow
+-44.45207 -10.472 moveto
+(el) cmmi10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath -36.04678 -10.2728 moveto
+-33.05798 -10.2728 lineto stroke
+-33.05798 -10.472 moveto
+(thr) cmmi10 9.96265 fshow
+-18.94878 -10.472 moveto
+(ead) cmmi10 9.96265 fshow
+newpath -3.26068 -10.2728 moveto
+-0.27177 -10.2728 lineto stroke
+-0.27177 -10.472 moveto
+(tabl) cmmi10 9.96265 fshow
+16.03622 -10.472 moveto
+(e) cmmi10 9.96265 fshow
+20.67513 -10.472 moveto
+([) cmr10 9.96265 fshow
+23.44252 -10.472 moveto
+(thd) cmmi10 9.96265 fshow
+37.96562 -10.472 moveto
+(#]) cmr10 9.96265 fshow
+49.03522 -10.472 moveto
+(:thr) cmmi10 9.96265 fshow
+65.91182 -10.472 moveto
+(ead) cmmi10 9.96265 fshow
+newpath 81.60002 -10.2728 moveto
+84.58882 -10.2728 lineto stroke
+84.58882 -10.472 moveto
+(l) cmmi10 9.96265 fshow
+87.75752 -10.472 moveto
+(ist) cmmi10 9.96265 fshow
+66.96065 73.29352 moveto
+(thr) cmmi10 9.96265 fshow
+81.06985 73.29352 moveto
+(ead) cmmi10 9.96265 fshow
+newpath 96.75795 73.49272 moveto
+99.74675 73.49272 lineto stroke
+99.74675 73.29352 moveto
+(l) cmmi10 9.96265 fshow
+102.91545 73.29352 moveto
+(ist) cmmi10 9.96265 fshow
+117.38264 73.29352 moveto
+(:) cmr10 9.96265 fshow
+79.75278 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+88.05498 61.46999 moveto
+(list) cmr10 9.96265 fshow
+101.39388 61.46999 moveto
+(<) cmmi10 9.96265 fshow
+109.14258 61.46999 moveto
+(w) cmr10 9.96265 fshow
+116.06108 61.46999 moveto
+(ork) cmr10 9.96265 fshow
+129.92587 61.46999 moveto
+(er) cmr10 9.96265 fshow
+newpath 138.85347 61.66919 moveto
+141.84227 61.66919 lineto stroke
+141.84227 61.46999 moveto
+(thread) cmr10 9.96265 fshow
+newpath 170.69518 61.66919 moveto
+173.68408 61.66919 lineto stroke
+173.68408 61.46999 moveto
+(blk) cmr10 9.96265 fshow
+187.24437 61.46999 moveto
+(") cmsy10 9.96265 fshow
+192.22568 61.46999 moveto
+(>) cmmi10 9.96265 fshow
+105.33704 48.67786 moveto
+(\017) cmsy10 9.96265 fshow
+113.63924 48.67786 moveto
+(parser) cmr10 9.96265 fshow
+143.63794 48.67786 moveto
+(") cmsy10 9.96265 fshow
+151.94014 48.67786 moveto
+(|) cmr10 9.96265 fshow
+165.22363 48.67786 moveto
+(grammar) cmr10 9.96265 fshow
+207.89703 48.67786 moveto
+(con) cmr10 9.96265 fshow
+222.56433 48.67786 moveto
+(taining) cmr10 9.96265 fshow
+256.32663 48.67786 moveto
+(w) cmr10 9.96265 fshow
+263.24513 48.67786 moveto
+(ork) cmr10 9.96265 fshow
+277.10983 48.67786 moveto
+(er) cmr10 9.96265 fshow
+newpath 286.03743 48.87706 moveto
+289.02634 48.87706 lineto stroke
+289.02634 48.67786 moveto
+(thread) cmr10 9.96265 fshow
+newpath 317.87924 48.87706 moveto
+320.86804 48.87706 lineto stroke
+320.86804 48.67786 moveto
+(blk) cmr10 9.96265 fshow
+105.33704 35.88573 moveto
+(\017) cmsy10 9.96265 fshow
+113.63924 35.88573 moveto
+(status) cmr10 9.96265 fshow
+143.08444 35.88573 moveto
+(|) cmr10 9.96265 fshow
+156.36794 35.88573 moveto
+(idle,) cmr10 9.96265 fshow
+177.95374 35.88573 moveto
+(w) cmr10 9.96265 fshow
+184.87224 35.88573 moveto
+(orking,) cmr10 9.96265 fshow
+218.38553 35.88573 moveto
+(or) cmr10 9.96265 fshow
+230.58974 35.88573 moveto
+(exiting) cmr10 9.96265 fshow
+105.33704 23.0936 moveto
+(\017) cmsy10 9.96265 fshow
+113.63924 23.0936 moveto
+(run) cmr10 9.96265 fshow
+131.93184 23.0936 moveto
+(cn) cmr10 9.96265 fshow
+141.61774 23.0936 moveto
+(t) cmr10 9.96265 fshow
+148.81294 23.0936 moveto
+(|) cmr10 9.96265 fshow
+162.09644 23.0936 moveto
+(stats) cmr10 9.96265 fshow
+186.00684 23.0936 moveto
+(on) cmr10 9.96265 fshow
+199.84384 23.0936 moveto
+(ho) cmr10 9.96265 fshow
+210.08324 23.0936 moveto
+(w) cmr10 9.96265 fshow
+220.59944 23.0936 moveto
+(man) cmr10 9.96265 fshow
+239.14104 23.0936 moveto
+(y) cmr10 9.96265 fshow
+247.71994 23.0936 moveto
+(times) cmr10 9.96265 fshow
+274.34244 23.0936 moveto
+(thread) cmr10 9.96265 fshow
+305.91853 23.0936 moveto
+(executed) cmr10 9.96265 fshow
+105.33704 9.33287 moveto
+(\017) cmsy10 9.96265 fshow
+113.63924 9.33287 moveto
+(thd) cmr10 9.96265 fshow
+131.90413 9.33287 moveto
+(id) cmr10 9.96265 fshow
+143.52724 9.33287 moveto
+(|) cmr10 9.96265 fshow
+156.81073 9.33287 moveto
+(thread) cmr10 9.96265 fshow
+188.38684 9.33287 moveto
+(id) cmr10 9.96265 fshow
+200.00993 9.33287 moveto
+(n) cmr10 9.96265 fshow
+205.26804 9.33287 moveto
+(um) cmr10 9.96265 fshow
+218.82834 9.33287 moveto
+(b) cmr10 9.96265 fshow
+224.63983 9.33287 moveto
+(er) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/threading_defs.mp b/web/yacco2/diagrams/threading_defs.mp
new file mode 100644
index 0000000000..6fef81e9fa
--- /dev/null
+++ b/web/yacco2/diagrams/threading_defs.mp
@@ -0,0 +1,49 @@
+% file: threading_defs.mp
+input boxes
+pair sw,se,ne,nw;
+pair zx,zy;
+beginfig(1);
+u=1cc;
+% stbl
+sw:=(1u,0);
+se:=(2u,0);
+ne:=(2u,4u);
+nw:=(1u,4u);
+draw sw--se--ne--nw--cycle;
+%outline the tab;e
+for i=1 upto 3:
+ zx:=(1u,i*u);
+ zy:=(2u,i*u);
+ if i = 3:
+ draw zx{dir 45} .. .5[zx,zy] {dir -45} .. zy;
+ else:
+ draw zx--zy;
+ fi
+endfor
+
+% label subscripts
+defaultscale:=.6;
+for i=0 upto 3:
+ zy:=(2u,i*u);
+ string a;
+ if i=3:
+ a := "no threads ids-1";
+ label.rt(a,zy);
+ else:
+ a:=decimal(i);
+ label.rt(a,zy);
+ fi
+endfor
+defaultscale:=1;
+label.bot(btex $Parallel\_thread\_table[thd $\#$].thread\_list$ etex,(1u,0u));
+
+
+%outline table_entry
+label.rt(btex $thread\_list:$ etex,(5u,6u));
+ label.rt(btex $\bullet\ $list$<$worker$\_$thread$\_$blk$\uparrow >$ etex,(6u,5u));
+ label.rt(btex $\bullet\ $parser\ $\uparrow$ --- grammar containing worker$\_$thread$\_$blk etex,(8u,4u));
+ label.rt(btex $\bullet\ $status\ --- idle, working, or exiting etex,(8u,3u));
+ label.rt(btex $\bullet\ $run cnt\ --- stats on how many times thread executed etex,(8u,2u));
+ label.rt(btex $\bullet\ $thd id\ --- thread id number etex,(8u,1u));
+endfig;
+end;
diff --git a/web/yacco2/diagrams/threading_exs.1 b/web/yacco2/diagrams/threading_exs.1
new file mode 100644
index 0000000000..494d9b673c
--- /dev/null
+++ b/web/yacco2/diagrams/threading_exs.1
@@ -0,0 +1,617 @@
+%!PS
+%%BoundingBox: -75 -1 379 287
+%%Creator: MetaPost
+%%CreationDate: 2006.05.29:1634
+%%Pages: 1
+%*Font: cmtt8 4.78212 7.97011 30:ffc
+%*Font: cmr10 9.96265 9.96265 41:82002000a801001
+%*Font: cmtt8 7.97011 7.97011 20:80040020595cb9005fdfff8
+%%EndProlog
+%%Page: 1 1
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+286.54248 0 lineto
+286.54248 286.54248 lineto
+0 286.54248 lineto
+ closepath stroke
+newpath 17.9089 17.9089 moveto
+268.63358 17.9089 lineto
+268.63358 268.63358 lineto
+17.9089 268.63358 lineto
+ closepath stroke
+newpath 26.86336 26.86336 moveto
+259.67912 26.86336 lineto
+259.67912 259.67912 lineto
+26.86336 259.67912 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 0 moveto
+17.9089 17.9089 lineto stroke
+newpath 286.54248 0 moveto
+268.63358 17.9089 lineto stroke
+newpath 286.54248 286.54248 moveto
+268.63358 268.63358 lineto stroke
+newpath 0 286.54248 moveto
+17.9089 268.63358 lineto stroke
+newpath 17.9089 17.9089 moveto
+17.9089 26.86336 lineto
+26.86336 26.86336 lineto
+26.86336 17.9089 lineto stroke
+newpath 17.9089 268.63358 moveto
+26.86336 268.63358 lineto
+26.86336 259.67912 lineto
+17.9089 259.67912 lineto stroke
+newpath 268.63358 268.63358 moveto
+268.63358 259.67912 lineto
+259.67912 259.67912 lineto
+259.67912 268.63358 lineto stroke
+newpath 268.63358 17.9089 moveto
+259.67912 17.9089 lineto
+259.67912 26.86336 lineto
+268.63358 26.86336 lineto stroke
+30.07033 20.9089 moveto
+(0) cmtt8 4.78212 fshow
+30.07033 262.67912 moveto
+(0) cmtt8 4.78212 fshow
+21.11588 253.72467 moveto
+(0) cmtt8 4.78212 fshow
+262.8861 253.72467 moveto
+(0) cmtt8 4.78212 fshow
+39.02478 20.9089 moveto
+(1) cmtt8 4.78212 fshow
+39.02478 262.67912 moveto
+(1) cmtt8 4.78212 fshow
+21.11588 244.77022 moveto
+(1) cmtt8 4.78212 fshow
+262.8861 244.77022 moveto
+(1) cmtt8 4.78212 fshow
+47.97923 20.9089 moveto
+(2) cmtt8 4.78212 fshow
+47.97923 262.67912 moveto
+(2) cmtt8 4.78212 fshow
+21.11588 235.81577 moveto
+(2) cmtt8 4.78212 fshow
+262.8861 235.81577 moveto
+(2) cmtt8 4.78212 fshow
+56.93369 20.9089 moveto
+(3) cmtt8 4.78212 fshow
+56.93369 262.67912 moveto
+(3) cmtt8 4.78212 fshow
+21.11588 226.86131 moveto
+(3) cmtt8 4.78212 fshow
+262.8861 226.86131 moveto
+(3) cmtt8 4.78212 fshow
+65.88814 20.9089 moveto
+(4) cmtt8 4.78212 fshow
+65.88814 262.67912 moveto
+(4) cmtt8 4.78212 fshow
+21.11588 217.90686 moveto
+(4) cmtt8 4.78212 fshow
+262.8861 217.90686 moveto
+(4) cmtt8 4.78212 fshow
+74.84259 20.9089 moveto
+(5) cmtt8 4.78212 fshow
+74.84259 262.67912 moveto
+(5) cmtt8 4.78212 fshow
+21.11588 208.95241 moveto
+(5) cmtt8 4.78212 fshow
+262.8861 208.95241 moveto
+(5) cmtt8 4.78212 fshow
+83.79704 20.9089 moveto
+(6) cmtt8 4.78212 fshow
+83.79704 262.67912 moveto
+(6) cmtt8 4.78212 fshow
+21.11588 199.99796 moveto
+(6) cmtt8 4.78212 fshow
+262.8861 199.99796 moveto
+(6) cmtt8 4.78212 fshow
+92.7515 20.9089 moveto
+(7) cmtt8 4.78212 fshow
+92.7515 262.67912 moveto
+(7) cmtt8 4.78212 fshow
+21.11588 191.0435 moveto
+(7) cmtt8 4.78212 fshow
+262.8861 191.0435 moveto
+(7) cmtt8 4.78212 fshow
+101.70595 20.9089 moveto
+(8) cmtt8 4.78212 fshow
+101.70595 262.67912 moveto
+(8) cmtt8 4.78212 fshow
+21.11588 182.08905 moveto
+(8) cmtt8 4.78212 fshow
+262.8861 182.08905 moveto
+(8) cmtt8 4.78212 fshow
+110.6604 20.9089 moveto
+(9) cmtt8 4.78212 fshow
+110.6604 262.67912 moveto
+(9) cmtt8 4.78212 fshow
+21.11588 173.1346 moveto
+(9) cmtt8 4.78212 fshow
+262.8861 173.1346 moveto
+(9) cmtt8 4.78212 fshow
+118.34457 20.9089 moveto
+(10) cmtt8 4.78212 fshow
+118.34457 262.67912 moveto
+(10) cmtt8 4.78212 fshow
+19.8456 164.18015 moveto
+(10) cmtt8 4.78212 fshow
+261.61581 164.18015 moveto
+(10) cmtt8 4.78212 fshow
+127.29903 20.9089 moveto
+(11) cmtt8 4.78212 fshow
+127.29903 262.67912 moveto
+(11) cmtt8 4.78212 fshow
+19.8456 155.2257 moveto
+(11) cmtt8 4.78212 fshow
+261.61581 155.2257 moveto
+(11) cmtt8 4.78212 fshow
+136.25348 20.9089 moveto
+(12) cmtt8 4.78212 fshow
+136.25348 262.67912 moveto
+(12) cmtt8 4.78212 fshow
+19.8456 146.27124 moveto
+(12) cmtt8 4.78212 fshow
+261.61581 146.27124 moveto
+(12) cmtt8 4.78212 fshow
+145.20793 20.9089 moveto
+(13) cmtt8 4.78212 fshow
+145.20793 262.67912 moveto
+(13) cmtt8 4.78212 fshow
+19.8456 137.31679 moveto
+(13) cmtt8 4.78212 fshow
+261.61581 137.31679 moveto
+(13) cmtt8 4.78212 fshow
+154.16238 20.9089 moveto
+(14) cmtt8 4.78212 fshow
+154.16238 262.67912 moveto
+(14) cmtt8 4.78212 fshow
+19.8456 128.36234 moveto
+(14) cmtt8 4.78212 fshow
+261.61581 128.36234 moveto
+(14) cmtt8 4.78212 fshow
+163.11684 20.9089 moveto
+(15) cmtt8 4.78212 fshow
+163.11684 262.67912 moveto
+(15) cmtt8 4.78212 fshow
+19.8456 119.40788 moveto
+(15) cmtt8 4.78212 fshow
+261.61581 119.40788 moveto
+(15) cmtt8 4.78212 fshow
+172.07129 20.9089 moveto
+(16) cmtt8 4.78212 fshow
+172.07129 262.67912 moveto
+(16) cmtt8 4.78212 fshow
+19.8456 110.45343 moveto
+(16) cmtt8 4.78212 fshow
+261.61581 110.45343 moveto
+(16) cmtt8 4.78212 fshow
+181.02574 20.9089 moveto
+(17) cmtt8 4.78212 fshow
+181.02574 262.67912 moveto
+(17) cmtt8 4.78212 fshow
+19.8456 101.49898 moveto
+(17) cmtt8 4.78212 fshow
+261.61581 101.49898 moveto
+(17) cmtt8 4.78212 fshow
+189.9802 20.9089 moveto
+(18) cmtt8 4.78212 fshow
+189.9802 262.67912 moveto
+(18) cmtt8 4.78212 fshow
+19.8456 92.54453 moveto
+(18) cmtt8 4.78212 fshow
+261.61581 92.54453 moveto
+(18) cmtt8 4.78212 fshow
+198.93465 20.9089 moveto
+(19) cmtt8 4.78212 fshow
+198.93465 262.67912 moveto
+(19) cmtt8 4.78212 fshow
+19.8456 83.59007 moveto
+(19) cmtt8 4.78212 fshow
+261.61581 83.59007 moveto
+(19) cmtt8 4.78212 fshow
+207.8891 20.9089 moveto
+(20) cmtt8 4.78212 fshow
+207.8891 262.67912 moveto
+(20) cmtt8 4.78212 fshow
+19.8456 74.63562 moveto
+(20) cmtt8 4.78212 fshow
+261.61581 74.63562 moveto
+(20) cmtt8 4.78212 fshow
+216.84355 20.9089 moveto
+(21) cmtt8 4.78212 fshow
+216.84355 262.67912 moveto
+(21) cmtt8 4.78212 fshow
+19.8456 65.68117 moveto
+(21) cmtt8 4.78212 fshow
+261.61581 65.68117 moveto
+(21) cmtt8 4.78212 fshow
+225.798 20.9089 moveto
+(22) cmtt8 4.78212 fshow
+225.798 262.67912 moveto
+(22) cmtt8 4.78212 fshow
+19.8456 56.72672 moveto
+(22) cmtt8 4.78212 fshow
+261.61581 56.72672 moveto
+(22) cmtt8 4.78212 fshow
+234.75246 20.9089 moveto
+(23) cmtt8 4.78212 fshow
+234.75246 262.67912 moveto
+(23) cmtt8 4.78212 fshow
+19.8456 47.77226 moveto
+(23) cmtt8 4.78212 fshow
+261.61581 47.77226 moveto
+(23) cmtt8 4.78212 fshow
+243.70691 20.9089 moveto
+(24) cmtt8 4.78212 fshow
+243.70691 262.67912 moveto
+(24) cmtt8 4.78212 fshow
+19.8456 38.81781 moveto
+(24) cmtt8 4.78212 fshow
+261.61581 38.81781 moveto
+(24) cmtt8 4.78212 fshow
+252.66136 20.9089 moveto
+(25) cmtt8 4.78212 fshow
+252.66136 262.67912 moveto
+(25) cmtt8 4.78212 fshow
+19.8456 29.86336 moveto
+(25) cmtt8 4.78212 fshow
+261.61581 29.86336 moveto
+(25) cmtt8 4.78212 fshow
+newpath 286.54248 246.24745 moveto
+268.63358 246.24745 lineto stroke
+newpath 272.32918 247.77826 moveto
+268.63358 246.24745 lineto
+272.32918 244.71664 lineto
+ closepath
+gsave fill grestore stroke
+newpath 282.84688 244.71664 moveto
+286.54248 246.24745 lineto
+282.84688 247.77826 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 244.69771 moveto
+(Acquire g) cmtt8 7.97011 fshow
+289.54248 235.30046 moveto
+(Launch threads) cmtt8 7.97011 fshow
+newpath 286.54248 228.33855 moveto
+268.63358 228.33855 lineto stroke
+newpath 272.32918 229.86935 moveto
+268.63358 228.33855 lineto
+272.32918 226.80774 lineto
+ closepath
+gsave fill grestore stroke
+newpath 282.84688 226.80774 moveto
+286.54248 228.33855 lineto
+282.84688 229.86935 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 226.7888 moveto
+(Acquire x) cmtt8 7.97011 fshow
+newpath 286.54248 219.3841 moveto
+268.63358 219.3841 lineto stroke
+newpath 272.32918 220.9149 moveto
+268.63358 219.3841 lineto
+272.32918 217.85329 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 217.39156 moveto
+(Create A) cmtt8 7.97011 fshow
+newpath 17.9089 210.42964 moveto
+0 210.42964 lineto stroke
+newpath 3.6956 211.96045 moveto
+0 210.42964 lineto
+3.6956 208.89883 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 207.99432 moveto
+(Activated) cmtt8 7.97011 fshow
+newpath 17.9089 201.47519 moveto
+0 201.47519 lineto stroke
+newpath 3.6956 203.006 moveto
+0 201.47519 lineto
+3.6956 199.94438 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 199.94438 moveto
+17.9089 201.47519 lineto
+14.2133 203.006 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 199.92543 moveto
+(Acquire a) cmtt8 7.97011 fshow
+newpath 0 192.52074 moveto
+17.9089 192.52074 lineto stroke
+newpath 14.2133 190.98993 moveto
+17.9089 192.52074 lineto
+14.2133 194.05154 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 190.97098 moveto
+(Acquire x) cmtt8 7.97011 fshow
+newpath 268.63358 183.56628 moveto
+286.54248 183.56628 lineto stroke
+newpath 282.84688 182.03548 moveto
+286.54248 183.56628 lineto
+282.84688 185.09709 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 181.13097 moveto
+(Re-activated) cmtt8 7.97011 fshow
+289.54248 173.06209 moveto
+(Setup: thread results) cmtt8 7.97011 fshow
+newpath 286.54248 165.65738 moveto
+268.63358 165.65738 lineto stroke
+newpath 272.32918 167.18819 moveto
+268.63358 165.65738 lineto
+272.32918 164.12657 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 163.66484 moveto
+(Release x) cmtt8 7.97011 fshow
+newpath 17.9089 156.70293 moveto
+0 156.70293 lineto stroke
+newpath 3.6956 158.23373 moveto
+0 156.70293 lineto
+3.6956 155.17212 lineto
+ closepath
+gsave fill grestore stroke
+-58.0443 155.15317 moveto
+(Wokeup with x) cmtt8 7.97011 fshow
+-41.10759 145.75594 moveto
+(Make idle) cmtt8 7.97011 fshow
+newpath 0 138.79402 moveto
+17.9089 138.79402 lineto stroke
+newpath 14.2133 137.26321 moveto
+17.9089 138.79402 lineto
+14.2133 140.32483 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 136.80148 moveto
+(Release x) cmtt8 7.97011 fshow
+newpath 268.63358 129.83957 moveto
+286.54248 129.83957 lineto stroke
+newpath 282.84688 128.30876 moveto
+286.54248 129.83957 lineto
+282.84688 131.37038 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 127.40425 moveto
+(Re-activated) cmtt8 7.97011 fshow
+newpath 286.54248 120.88512 moveto
+268.63358 120.88512 lineto stroke
+newpath 272.32918 122.41592 moveto
+268.63358 120.88512 lineto
+272.32918 119.35431 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 118.89258 moveto
+(Wait on event) cmtt8 7.97011 fshow
+289.54248 110.38092 moveto
+(release g) cmtt8 7.97011 fshow
+newpath 17.9089 111.93066 moveto
+0 111.93066 lineto stroke
+newpath 3.6956 113.46147 moveto
+0 111.93066 lineto
+3.6956 110.39986 lineto
+ closepath
+gsave fill grestore stroke
+-53.81012 109.49535 moveto
+(Re-activated) cmtt8 7.97011 fshow
+newpath 17.9089 102.97621 moveto
+0 102.97621 lineto stroke
+newpath 3.6956 104.50702 moveto
+0 102.97621 lineto
+3.6956 101.4454 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 101.4454 moveto
+17.9089 102.97621 lineto
+14.2133 104.50702 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 101.42645 moveto
+(Acquire g) cmtt8 7.97011 fshow
+-74.981 92.472 moveto
+(Deposit data in G) cmtt8 7.97011 fshow
+newpath 17.9089 85.0673 moveto
+0 85.0673 lineto stroke
+newpath 3.6956 86.59811 moveto
+0 85.0673 lineto
+3.6956 83.5365 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 83.5365 moveto
+17.9089 85.0673 lineto
+14.2133 86.59811 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 83.51755 moveto
+(Release g) cmtt8 7.97011 fshow
+newpath 17.9089 76.11285 moveto
+0 76.11285 lineto stroke
+newpath 3.6956 77.64366 moveto
+0 76.11285 lineto
+3.6956 74.58205 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 74.58205 moveto
+17.9089 76.11285 lineto
+14.2133 77.64366 lineto
+ closepath
+gsave fill grestore stroke
+-36.87341 74.5631 moveto
+(Signal G) cmtt8 7.97011 fshow
+newpath 0 67.1584 moveto
+17.9089 67.1584 lineto stroke
+newpath 14.2133 65.6276 moveto
+17.9089 67.1584 lineto
+14.2133 68.68921 lineto
+ closepath
+gsave fill grestore stroke
+-58.0443 65.16586 moveto
+(Wait on event) cmtt8 7.97011 fshow
+-41.10759 56.21141 moveto
+(release a) cmtt8 7.97011 fshow
+newpath 268.63358 58.20395 moveto
+286.54248 58.20395 lineto stroke
+newpath 282.84688 56.67314 moveto
+286.54248 58.20395 lineto
+282.84688 59.73476 lineto
+ closepath
+gsave fill grestore stroke
+289.54248 56.6542 moveto
+(Wokeup from event) cmtt8 7.97011 fshow
+289.54248 47.25696 moveto
+(Process data from A) cmtt8 7.97011 fshow
+289.54248 38.7453 moveto
+(Keep running until) cmtt8 7.97011 fshow
+289.54248 29.34805 moveto
+(launch of threads) cmtt8 7.97011 fshow
+74.63562 182.01654 moveto
+(Inner Space: Thread Manager) cmtt8 7.97011 fshow
+29.86336 253.65216 moveto
+(Running queue:) cmtt8 7.97011 fshow
+29.86336 243.81213 moveto
+(G) cmtt8 7.97011 fshow
+29.86336 234.85768 moveto
+(A) cmtt8 7.97011 fshow
+29.86336 208.8799 moveto
+(To Run queue:) cmtt8 7.97011 fshow
+29.86336 199.03987 moveto
+(G) cmtt8 7.97011 fshow
+29.86336 190.08542 moveto
+(A) cmtt8 7.97011 fshow
+29.86336 163.22206 moveto
+(Resources) cmtt8 7.97011 fshow
+29.86336 155.87271 moveto
+(g) cmtt8 7.97011 fshow
+29.86336 146.03268 moveto
+(x) cmtt8 7.97011 fshow
+29.86336 137.07823 moveto
+(a) cmtt8 7.97011 fshow
+newpath 35.81781 246.24745 moveto
+71.63562 246.24745 lineto stroke
+newpath 71.63562 237.293 moveto
+98.49898 237.293 lineto stroke
+newpath 98.49898 246.24745 moveto
+125.36234 246.24745 lineto stroke
+newpath 125.36234 237.293 moveto
+152.2257 237.293 lineto stroke
+newpath 152.2257 246.24745 moveto
+170.1346 246.24745 lineto stroke
+newpath 170.1346 237.293 moveto
+223.86131 237.293 lineto stroke
+newpath 223.86131 246.24745 moveto
+259.67912 246.24745 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 71.63562 246.24745 moveto
+71.63562 237.293 lineto stroke
+newpath 98.49898 237.293 moveto
+98.49898 246.24745 lineto stroke
+newpath 125.36234 246.24745 moveto
+125.36234 237.293 lineto stroke
+newpath 152.2257 237.293 moveto
+152.2257 246.24745 lineto stroke
+newpath 170.1346 246.24745 moveto
+170.1346 237.293 lineto stroke
+newpath 223.86131 237.293 moveto
+223.86131 246.24745 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 53.72672 201.47519 moveto
+89.54453 201.47519 lineto stroke
+newpath 107.45343 201.47519 moveto
+152.2257 201.47519 lineto stroke
+newpath 89.54453 192.52074 moveto
+134.31679 192.52074 lineto stroke
+newpath 35.81781 156.70293 moveto
+170.1346 156.70293 lineto stroke
+newpath 179.08905 156.70293 moveto
+205.95241 156.70293 lineto stroke
+newpath 223.86131 156.70293 moveto
+259.67912 156.70293 lineto stroke
+newpath 53.72672 147.74847 moveto
+125.36234 147.74847 lineto stroke
+newpath 125.36234 147.74847 moveto
+152.2257 147.74847 lineto stroke
+newpath 80.59007 138.79402 moveto
+223.86131 138.79402 lineto stroke
+96.38188 159.70293 moveto
+(G) cmtt8 7.97011 fshow
+194.88086 159.70293 moveto
+(A) cmtt8 7.97011 fshow
+239.65312 159.70293 moveto
+(G) cmtt8 7.97011 fshow
+105.33633 150.74847 moveto
+(G) cmtt8 7.97011 fshow
+150.1086 141.79402 moveto
+(A) cmtt8 7.97011 fshow
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 94.02176 26.86336 moveto
+94.02176 147.74847 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 95.55284 144.05219 moveto
+94.02176 147.74847 lineto
+92.49068 144.05219 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 129.83957 147.74847 moveto
+129.83957 26.86336 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 128.30849 30.55965 moveto
+129.83957 26.86336 lineto
+131.37065 30.55965 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 165.65738 26.86336 moveto
+165.65738 156.70293 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 167.18816 153.0074 moveto
+165.65738 156.70293 lineto
+164.1266 153.0074 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 228.33855 156.70293 moveto
+228.33855 26.86336 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 226.80777 30.55888 moveto
+228.33855 26.86336 lineto
+229.86932 30.55888 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 219.3841 26.86336 moveto
+219.3841 138.79402 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 220.91486 135.09854 moveto
+219.3841 138.79402 lineto
+217.85333 135.09854 lineto
+ closepath
+gsave fill grestore stroke
+-65.2666 257.24382 moveto
+(|) cmr10 9.96265 fshow
+-51.98311 257.24382 moveto
+(A) cmr10 9.96265 fshow
+-41.1902 257.24382 moveto
+(Space) cmr10 9.96265 fshow
+-12.9627 257.24382 moveto
+(|) cmr10 9.96265 fshow
+298.49693 257.24382 moveto
+(|) cmr10 9.96265 fshow
+311.78043 257.24382 moveto
+(G) cmr10 9.96265 fshow
+322.91924 257.24382 moveto
+(Space) cmr10 9.96265 fshow
+351.14673 257.24382 moveto
+(|) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/threading_exs.2 b/web/yacco2/diagrams/threading_exs.2
new file mode 100644
index 0000000000..b9f8406535
--- /dev/null
+++ b/web/yacco2/diagrams/threading_exs.2
@@ -0,0 +1,492 @@
+%!PS
+%%BoundingBox: -56 -51 391 295
+%%Creator: MetaPost
+%%CreationDate: 2006.05.29:1634
+%%Pages: 1
+%*Font: cmtt8 4.78212 7.97011 30:ffc
+%*Font: cmr10 9.9628 9.96265 41:c2002000f881dc3
+%*Font: cmtt8 7.97011 7.97011 20:800e0020794439007ddbfe8
+%%EndProlog
+%%Page: 1 1
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+294.21898 0 lineto
+294.21898 294.21898 lineto
+0 294.21898 lineto
+ closepath stroke
+newpath 25.58426 25.58426 moveto
+268.63472 25.58426 lineto
+268.63472 268.63472 lineto
+25.58426 268.63472 lineto
+ closepath stroke
+newpath 38.37639 38.37639 moveto
+255.84259 38.37639 lineto
+255.84259 255.84259 lineto
+38.37639 255.84259 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 0 moveto
+25.58426 25.58426 lineto stroke
+newpath 294.21898 0 moveto
+268.63472 25.58426 lineto stroke
+newpath 294.21898 294.21898 moveto
+268.63472 268.63472 lineto stroke
+newpath 0 294.21898 moveto
+25.58426 268.63472 lineto stroke
+newpath 25.58426 25.58426 moveto
+25.58426 38.37639 lineto
+38.37639 38.37639 lineto
+38.37639 25.58426 lineto stroke
+newpath 25.58426 268.63472 moveto
+38.37639 268.63472 lineto
+38.37639 255.84259 lineto
+25.58426 255.84259 lineto stroke
+newpath 268.63472 268.63472 moveto
+268.63472 255.84259 lineto
+255.84259 255.84259 lineto
+255.84259 268.63472 lineto stroke
+newpath 268.63472 25.58426 moveto
+255.84259 25.58426 lineto
+255.84259 38.37639 lineto
+268.63472 38.37639 lineto stroke
+43.5022 28.58426 moveto
+(0) cmtt8 4.78212 fshow
+43.5022 258.84259 moveto
+(0) cmtt8 4.78212 fshow
+30.71007 246.05046 moveto
+(0) cmtt8 4.78212 fshow
+260.9684 246.05046 moveto
+(0) cmtt8 4.78212 fshow
+56.29433 28.58426 moveto
+(1) cmtt8 4.78212 fshow
+56.29433 258.84259 moveto
+(1) cmtt8 4.78212 fshow
+30.71007 233.25833 moveto
+(1) cmtt8 4.78212 fshow
+260.9684 233.25833 moveto
+(1) cmtt8 4.78212 fshow
+69.08646 28.58426 moveto
+(2) cmtt8 4.78212 fshow
+69.08646 258.84259 moveto
+(2) cmtt8 4.78212 fshow
+30.71007 220.4662 moveto
+(2) cmtt8 4.78212 fshow
+260.9684 220.4662 moveto
+(2) cmtt8 4.78212 fshow
+81.87859 28.58426 moveto
+(3) cmtt8 4.78212 fshow
+81.87859 258.84259 moveto
+(3) cmtt8 4.78212 fshow
+30.71007 207.67407 moveto
+(3) cmtt8 4.78212 fshow
+260.9684 207.67407 moveto
+(3) cmtt8 4.78212 fshow
+94.67072 28.58426 moveto
+(4) cmtt8 4.78212 fshow
+94.67072 258.84259 moveto
+(4) cmtt8 4.78212 fshow
+30.71007 194.88194 moveto
+(4) cmtt8 4.78212 fshow
+260.9684 194.88194 moveto
+(4) cmtt8 4.78212 fshow
+107.46284 28.58426 moveto
+(5) cmtt8 4.78212 fshow
+107.46284 258.84259 moveto
+(5) cmtt8 4.78212 fshow
+30.71007 182.08981 moveto
+(5) cmtt8 4.78212 fshow
+260.9684 182.08981 moveto
+(5) cmtt8 4.78212 fshow
+120.25497 28.58426 moveto
+(6) cmtt8 4.78212 fshow
+120.25497 258.84259 moveto
+(6) cmtt8 4.78212 fshow
+30.71007 169.29768 moveto
+(6) cmtt8 4.78212 fshow
+260.9684 169.29768 moveto
+(6) cmtt8 4.78212 fshow
+133.0471 28.58426 moveto
+(7) cmtt8 4.78212 fshow
+133.0471 258.84259 moveto
+(7) cmtt8 4.78212 fshow
+30.71007 156.50555 moveto
+(7) cmtt8 4.78212 fshow
+260.9684 156.50555 moveto
+(7) cmtt8 4.78212 fshow
+145.83923 28.58426 moveto
+(8) cmtt8 4.78212 fshow
+145.83923 258.84259 moveto
+(8) cmtt8 4.78212 fshow
+30.71007 143.71342 moveto
+(8) cmtt8 4.78212 fshow
+260.9684 143.71342 moveto
+(8) cmtt8 4.78212 fshow
+158.63136 28.58426 moveto
+(9) cmtt8 4.78212 fshow
+158.63136 258.84259 moveto
+(9) cmtt8 4.78212 fshow
+30.71007 130.9213 moveto
+(9) cmtt8 4.78212 fshow
+260.9684 130.9213 moveto
+(9) cmtt8 4.78212 fshow
+170.15321 28.58426 moveto
+(10) cmtt8 4.78212 fshow
+170.15321 258.84259 moveto
+(10) cmtt8 4.78212 fshow
+29.43979 118.12917 moveto
+(10) cmtt8 4.78212 fshow
+259.69812 118.12917 moveto
+(10) cmtt8 4.78212 fshow
+182.94534 28.58426 moveto
+(11) cmtt8 4.78212 fshow
+182.94534 258.84259 moveto
+(11) cmtt8 4.78212 fshow
+29.43979 105.33704 moveto
+(11) cmtt8 4.78212 fshow
+259.69812 105.33704 moveto
+(11) cmtt8 4.78212 fshow
+195.73747 28.58426 moveto
+(12) cmtt8 4.78212 fshow
+195.73747 258.84259 moveto
+(12) cmtt8 4.78212 fshow
+29.43979 92.5449 moveto
+(12) cmtt8 4.78212 fshow
+259.69812 92.5449 moveto
+(12) cmtt8 4.78212 fshow
+208.5296 28.58426 moveto
+(13) cmtt8 4.78212 fshow
+208.5296 258.84259 moveto
+(13) cmtt8 4.78212 fshow
+29.43979 79.75278 moveto
+(13) cmtt8 4.78212 fshow
+259.69812 79.75278 moveto
+(13) cmtt8 4.78212 fshow
+221.32173 28.58426 moveto
+(14) cmtt8 4.78212 fshow
+221.32173 258.84259 moveto
+(14) cmtt8 4.78212 fshow
+29.43979 66.96065 moveto
+(14) cmtt8 4.78212 fshow
+259.69812 66.96065 moveto
+(14) cmtt8 4.78212 fshow
+234.11386 28.58426 moveto
+(15) cmtt8 4.78212 fshow
+234.11386 258.84259 moveto
+(15) cmtt8 4.78212 fshow
+29.43979 54.16852 moveto
+(15) cmtt8 4.78212 fshow
+259.69812 54.16852 moveto
+(15) cmtt8 4.78212 fshow
+246.90599 28.58426 moveto
+(16) cmtt8 4.78212 fshow
+246.90599 258.84259 moveto
+(16) cmtt8 4.78212 fshow
+29.43979 41.37639 moveto
+(16) cmtt8 4.78212 fshow
+259.69812 41.37639 moveto
+(16) cmtt8 4.78212 fshow
+newpath 25.58426 211.07014 moveto
+0 211.07014 lineto stroke
+newpath 3.6954 212.60086 moveto
+0 211.07014 lineto
+3.6954 209.53943 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 208.63483 moveto
+(Activated) cmtt8 7.97011 fshow
+newpath 25.58426 198.27802 moveto
+0 198.27802 lineto stroke
+newpath 3.6954 199.80873 moveto
+0 198.27802 lineto
+3.6954 196.7473 lineto
+ closepath
+gsave fill grestore stroke
+newpath 21.88885 196.7473 moveto
+25.58426 198.27802 lineto
+21.88885 199.80873 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 196.72826 moveto
+(Acquire a) cmtt8 7.97011 fshow
+newpath 25.58426 185.48589 moveto
+0 185.48589 lineto stroke
+newpath 3.6954 187.0166 moveto
+0 185.48589 lineto
+3.6954 183.95517 lineto
+ closepath
+gsave fill grestore stroke
+newpath 21.88885 183.95517 moveto
+25.58426 185.48589 lineto
+21.88885 187.0166 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 183.93613 moveto
+(Acquire x) cmtt8 7.97011 fshow
+newpath 0 172.69376 moveto
+25.58426 172.69376 lineto stroke
+newpath 21.88885 171.16304 moveto
+25.58426 172.69376 lineto
+21.88885 174.22447 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 170.70122 moveto
+(Release x) cmtt8 7.97011 fshow
+newpath 25.58426 95.94098 moveto
+0 95.94098 lineto stroke
+newpath 3.6954 97.4717 moveto
+0 95.94098 lineto
+3.6954 94.41026 lineto
+ closepath
+gsave fill grestore stroke
+-53.81012 93.50566 moveto
+(Re-activated) cmtt8 7.97011 fshow
+newpath 0 83.14885 moveto
+25.58426 83.14885 lineto stroke
+newpath 21.88885 81.61813 moveto
+25.58426 83.14885 lineto
+21.88885 84.67957 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 81.59909 moveto
+(Acquire b) cmtt8 7.97011 fshow
+newpath 294.21898 236.6544 moveto
+268.63472 236.6544 lineto stroke
+newpath 272.33012 238.18512 moveto
+268.63472 236.6544 lineto
+272.33012 235.12369 lineto
+ closepath
+gsave fill grestore stroke
+newpath 290.52357 235.12369 moveto
+294.21898 236.6544 lineto
+290.52357 238.18512 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 235.10466 moveto
+(Acquire g) cmtt8 7.97011 fshow
+newpath 294.21898 223.86227 moveto
+268.63472 223.86227 lineto stroke
+newpath 272.33012 225.39299 moveto
+268.63472 223.86227 lineto
+272.33012 222.33156 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 221.86974 moveto
+(Create A) cmtt8 7.97011 fshow
+newpath 268.63472 159.90163 moveto
+294.21898 159.90163 lineto stroke
+newpath 290.52357 158.37091 moveto
+294.21898 159.90163 lineto
+290.52357 161.43234 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 157.46631 moveto
+(Re-activated) cmtt8 7.97011 fshow
+newpath 294.21898 147.1095 moveto
+268.63472 147.1095 lineto stroke
+newpath 272.33012 148.64021 moveto
+268.63472 147.1095 lineto
+272.33012 145.57878 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 145.11696 moveto
+(Create B) cmtt8 7.97011 fshow
+newpath 268.63472 70.35672 moveto
+294.21898 70.35672 lineto stroke
+newpath 290.52357 68.826 moveto
+294.21898 70.35672 lineto
+290.52357 71.88744 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 67.9214 moveto
+(Re-activated) cmtt8 7.97011 fshow
+newpath 294.21898 57.56459 moveto
+268.63472 57.56459 lineto stroke
+newpath 272.33012 59.0953 moveto
+268.63472 57.56459 lineto
+272.33012 56.03387 lineto
+ closepath
+gsave fill grestore stroke
+297.21898 56.01485 moveto
+(Wait on signal, rel. g) cmtt8 7.97011 fshow
+297.21898 42.33714 moveto
+(Deadlock) cmtt8 7.97011 fshow
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 159.90163 25.58426 moveto
+159.90163 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 158.37091 3.6954 moveto
+159.90163 0 lineto
+161.43234 3.6954 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 172.69376 25.58426 moveto
+172.69376 0 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 171.16304 3.6954 moveto
+172.69376 0 lineto
+174.22447 3.6954 lineto
+ closepath
+gsave fill grestore stroke
+newpath 174.22447 21.88885 moveto
+172.69376 25.58426 lineto
+171.16304 21.88885 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 185.48589 0 moveto
+185.48589 25.58426 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 187.0166 21.88885 moveto
+185.48589 25.58426 lineto
+183.95517 21.88885 lineto
+ closepath
+gsave fill grestore stroke
+gsave [0.86601 0.5 -0.5 0.86601 129.02559 -25.68143 ] concat 0 0 moveto
+(activ) cmr10 9.9628 fshow grestore
+gsave [0.86601 0.5 -0.5 0.86601 147.00052 -15.30362 ] concat 0 0 moveto
+(ated) cmr10 9.9628 fshow grestore
+gsave [0.86601 0.5 -0.5 0.86601 140.34587 -24.98787 ] concat 0 0 moveto
+(acquire) cmr10 9.9628 fshow grestore
+gsave [0.86601 0.5 -0.5 0.86601 170.32793 -7.67776 ] concat 0 0 moveto
+(b) cmr10 9.9628 fshow grestore
+gsave [0.86601 0.5 -0.5 0.86601 153.61726 -24.7348 ] concat 0 0 moveto
+(acquire) cmr10 9.9628 fshow grestore
+gsave [0.86601 0.5 -0.5 0.86601 183.59932 -7.4247 ] concat 0 0 moveto
+(a) cmr10 9.9628 fshow grestore
+105.33704 132.76762 moveto
+(Inner Space: Thread Manager) cmtt8 7.97011 fshow
+41.37639 247.89679 moveto
+(Running queue:) cmtt8 7.97011 fshow
+41.37639 234.21909 moveto
+(G) cmtt8 7.97011 fshow
+41.37639 221.42696 moveto
+(A) cmtt8 7.97011 fshow
+41.37639 208.63483 moveto
+(B) cmtt8 7.97011 fshow
+41.37639 183.93614 moveto
+(To Run queue:) cmtt8 7.97011 fshow
+41.37639 170.25844 moveto
+(G) cmtt8 7.97011 fshow
+41.37639 157.46631 moveto
+(A) cmtt8 7.97011 fshow
+41.37639 144.67418 moveto
+(B) cmtt8 7.97011 fshow
+41.37639 119.08992 moveto
+(Resources) cmtt8 7.97011 fshow
+41.37639 107.9029 moveto
+(g) cmtt8 7.97011 fshow
+41.37639 94.22519 moveto
+(x) cmtt8 7.97011 fshow
+41.37639 81.43306 moveto
+(a) cmtt8 7.97011 fshow
+41.37639 67.9214 moveto
+(b) cmtt8 7.97011 fshow
+newpath 51.16852 236.6544 moveto
+76.75278 236.6544 lineto stroke
+newpath 127.9213 236.6544 moveto
+153.50555 236.6544 lineto stroke
+newpath 217.4662 236.6544 moveto
+243.05046 236.6544 lineto stroke
+newpath 76.75278 223.86227 moveto
+127.9213 223.86227 lineto stroke
+newpath 191.88194 223.86227 moveto
+217.4662 223.86227 lineto stroke
+newpath 153.50555 211.07014 moveto
+191.88194 211.07014 lineto stroke
+newpath 76.75278 172.69376 moveto
+127.9213 172.69376 lineto stroke
+newpath 153.50555 172.69376 moveto
+217.4662 172.69376 lineto stroke
+newpath 127.9213 159.90163 moveto
+191.88194 159.90163 lineto stroke
+newpath 51.16852 108.73311 moveto
+243.05046 108.73311 lineto stroke
+newpath 102.33704 95.94098 moveto
+127.9213 95.94098 lineto stroke
+newpath 89.5449 83.14885 moveto
+255.84259 83.14885 lineto stroke
+newpath 166.29768 70.35672 moveto
+255.84259 70.35672 lineto stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 185.48589 38.37639 moveto
+185.48589 83.14885 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 187.01665 79.45337 moveto
+185.48589 83.14885 lineto
+183.95512 79.45337 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 211.07014 38.37639 moveto
+211.07014 70.35672 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 212.6009 66.66124 moveto
+211.07014 70.35672 lineto
+209.53938 66.66124 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [0 5 ] 2.5 setdash
+newpath 236.6544 38.37639 moveto
+236.6544 108.73311 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 238.1852 105.03754 moveto
+236.6544 108.73311 lineto
+235.12361 105.03754 lineto
+ closepath
+gsave fill grestore stroke
+ 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 76.75278 236.6544 moveto
+76.75278 223.86227 lineto stroke
+newpath 127.9213 223.86227 moveto
+127.9213 236.6544 lineto stroke
+newpath 153.50555 236.6544 moveto
+153.50555 211.07014 lineto stroke
+newpath 191.88194 211.07014 moveto
+191.88194 223.86227 lineto stroke
+newpath 217.4662 223.86227 moveto
+217.4662 236.6544 lineto stroke
+138.59633 111.73311 moveto
+(G) cmtt8 7.97011 fshow
+113.01207 98.94098 moveto
+(A) cmtt8 7.97011 fshow
+151.38846 86.14885 moveto
+(A) cmtt8 7.97011 fshow
+215.3491 73.35672 moveto
+(B) cmtt8 7.97011 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 243.05046 38.37639 moveto
+255.84259 51.16852 lineto stroke
+newpath 243.05046 51.16852 moveto
+255.84259 38.37639 lineto stroke
+gsave [0.99998 0 0 0.99998 82.05154 -48.18419 ] concat 0 0 moveto
+(||{) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 110.27904 -48.18419 ] concat 0 0 moveto
+(B) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 120.65685 -48.18419 ] concat 0 0 moveto
+(Space) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 148.88434 -48.18419 ] concat 0 0 moveto
+(||{) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 -55.3039 278.99155 ] concat 0 0 moveto
+({) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 -47.0017 278.99155 ] concat 0 0 moveto
+(A) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 -36.2088 278.99155 ] concat 0 0 moveto
+(Space) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 -7.9813 278.99155 ] concat 0 0 moveto
+({) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 297.21898 278.99155 ] concat 0 0 moveto
+({) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 305.52118 278.99155 ] concat 0 0 moveto
+(G) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 316.65997 278.99155 ] concat 0 0 moveto
+(Space) cmr10 9.9628 fshow grestore
+gsave [0.99998 0 0 0.99998 344.88748 278.99155 ] concat 0 0 moveto
+({) cmr10 9.9628 fshow grestore
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/threading_exs.3 b/web/yacco2/diagrams/threading_exs.3
new file mode 100644
index 0000000000..0b70f38128
--- /dev/null
+++ b/web/yacco2/diagrams/threading_exs.3
@@ -0,0 +1,434 @@
+%!PS
+%%BoundingBox: -101 -1 370 269
+%%Creator: MetaPost
+%%CreationDate: 2006.05.29:1510
+%%Pages: 1
+%*Font: cmtt8 4.78212 7.97011 30:ffc
+%*Font: cmtt8 7.97011 7.97011 20:801000005540b1005fdfff8
+%%EndProlog
+%%Page: 1 1
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+268.63358 0 lineto
+268.63358 268.63358 lineto
+0 268.63358 lineto
+ closepath stroke
+newpath 17.9089 17.9089 moveto
+250.72467 17.9089 lineto
+250.72467 250.72467 lineto
+17.9089 250.72467 lineto
+ closepath stroke
+newpath 26.86336 26.86336 moveto
+241.77022 26.86336 lineto
+241.77022 241.77022 lineto
+26.86336 241.77022 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 0 moveto
+17.9089 17.9089 lineto stroke
+newpath 268.63358 0 moveto
+250.72467 17.9089 lineto stroke
+newpath 268.63358 268.63358 moveto
+250.72467 250.72467 lineto stroke
+newpath 0 268.63358 moveto
+17.9089 250.72467 lineto stroke
+newpath 17.9089 17.9089 moveto
+17.9089 26.86336 lineto
+26.86336 26.86336 lineto
+26.86336 17.9089 lineto stroke
+newpath 17.9089 250.72467 moveto
+26.86336 250.72467 lineto
+26.86336 241.77022 lineto
+17.9089 241.77022 lineto stroke
+newpath 250.72467 250.72467 moveto
+250.72467 241.77022 lineto
+241.77022 241.77022 lineto
+241.77022 250.72467 lineto stroke
+newpath 250.72467 17.9089 moveto
+241.77022 17.9089 lineto
+241.77022 26.86336 lineto
+250.72467 26.86336 lineto stroke
+30.07033 20.9089 moveto
+(0) cmtt8 4.78212 fshow
+30.07033 244.77022 moveto
+(0) cmtt8 4.78212 fshow
+21.11588 235.81577 moveto
+(0) cmtt8 4.78212 fshow
+244.97719 235.81577 moveto
+(0) cmtt8 4.78212 fshow
+39.02478 20.9089 moveto
+(1) cmtt8 4.78212 fshow
+39.02478 244.77022 moveto
+(1) cmtt8 4.78212 fshow
+21.11588 226.86131 moveto
+(1) cmtt8 4.78212 fshow
+244.97719 226.86131 moveto
+(1) cmtt8 4.78212 fshow
+47.97923 20.9089 moveto
+(2) cmtt8 4.78212 fshow
+47.97923 244.77022 moveto
+(2) cmtt8 4.78212 fshow
+21.11588 217.90686 moveto
+(2) cmtt8 4.78212 fshow
+244.97719 217.90686 moveto
+(2) cmtt8 4.78212 fshow
+56.93369 20.9089 moveto
+(3) cmtt8 4.78212 fshow
+56.93369 244.77022 moveto
+(3) cmtt8 4.78212 fshow
+21.11588 208.95241 moveto
+(3) cmtt8 4.78212 fshow
+244.97719 208.95241 moveto
+(3) cmtt8 4.78212 fshow
+65.88814 20.9089 moveto
+(4) cmtt8 4.78212 fshow
+65.88814 244.77022 moveto
+(4) cmtt8 4.78212 fshow
+21.11588 199.99796 moveto
+(4) cmtt8 4.78212 fshow
+244.97719 199.99796 moveto
+(4) cmtt8 4.78212 fshow
+74.84259 20.9089 moveto
+(5) cmtt8 4.78212 fshow
+74.84259 244.77022 moveto
+(5) cmtt8 4.78212 fshow
+21.11588 191.0435 moveto
+(5) cmtt8 4.78212 fshow
+244.97719 191.0435 moveto
+(5) cmtt8 4.78212 fshow
+83.79704 20.9089 moveto
+(6) cmtt8 4.78212 fshow
+83.79704 244.77022 moveto
+(6) cmtt8 4.78212 fshow
+21.11588 182.08905 moveto
+(6) cmtt8 4.78212 fshow
+244.97719 182.08905 moveto
+(6) cmtt8 4.78212 fshow
+92.7515 20.9089 moveto
+(7) cmtt8 4.78212 fshow
+92.7515 244.77022 moveto
+(7) cmtt8 4.78212 fshow
+21.11588 173.1346 moveto
+(7) cmtt8 4.78212 fshow
+244.97719 173.1346 moveto
+(7) cmtt8 4.78212 fshow
+101.70595 20.9089 moveto
+(8) cmtt8 4.78212 fshow
+101.70595 244.77022 moveto
+(8) cmtt8 4.78212 fshow
+21.11588 164.18015 moveto
+(8) cmtt8 4.78212 fshow
+244.97719 164.18015 moveto
+(8) cmtt8 4.78212 fshow
+110.6604 20.9089 moveto
+(9) cmtt8 4.78212 fshow
+110.6604 244.77022 moveto
+(9) cmtt8 4.78212 fshow
+21.11588 155.2257 moveto
+(9) cmtt8 4.78212 fshow
+244.97719 155.2257 moveto
+(9) cmtt8 4.78212 fshow
+118.34457 20.9089 moveto
+(10) cmtt8 4.78212 fshow
+118.34457 244.77022 moveto
+(10) cmtt8 4.78212 fshow
+19.8456 146.27124 moveto
+(10) cmtt8 4.78212 fshow
+243.70691 146.27124 moveto
+(10) cmtt8 4.78212 fshow
+127.29903 20.9089 moveto
+(11) cmtt8 4.78212 fshow
+127.29903 244.77022 moveto
+(11) cmtt8 4.78212 fshow
+19.8456 137.31679 moveto
+(11) cmtt8 4.78212 fshow
+243.70691 137.31679 moveto
+(11) cmtt8 4.78212 fshow
+136.25348 20.9089 moveto
+(12) cmtt8 4.78212 fshow
+136.25348 244.77022 moveto
+(12) cmtt8 4.78212 fshow
+19.8456 128.36234 moveto
+(12) cmtt8 4.78212 fshow
+243.70691 128.36234 moveto
+(12) cmtt8 4.78212 fshow
+145.20793 20.9089 moveto
+(13) cmtt8 4.78212 fshow
+145.20793 244.77022 moveto
+(13) cmtt8 4.78212 fshow
+19.8456 119.40788 moveto
+(13) cmtt8 4.78212 fshow
+243.70691 119.40788 moveto
+(13) cmtt8 4.78212 fshow
+154.16238 20.9089 moveto
+(14) cmtt8 4.78212 fshow
+154.16238 244.77022 moveto
+(14) cmtt8 4.78212 fshow
+19.8456 110.45343 moveto
+(14) cmtt8 4.78212 fshow
+243.70691 110.45343 moveto
+(14) cmtt8 4.78212 fshow
+163.11684 20.9089 moveto
+(15) cmtt8 4.78212 fshow
+163.11684 244.77022 moveto
+(15) cmtt8 4.78212 fshow
+19.8456 101.49898 moveto
+(15) cmtt8 4.78212 fshow
+243.70691 101.49898 moveto
+(15) cmtt8 4.78212 fshow
+172.07129 20.9089 moveto
+(16) cmtt8 4.78212 fshow
+172.07129 244.77022 moveto
+(16) cmtt8 4.78212 fshow
+19.8456 92.54453 moveto
+(16) cmtt8 4.78212 fshow
+243.70691 92.54453 moveto
+(16) cmtt8 4.78212 fshow
+181.02574 20.9089 moveto
+(17) cmtt8 4.78212 fshow
+181.02574 244.77022 moveto
+(17) cmtt8 4.78212 fshow
+19.8456 83.59007 moveto
+(17) cmtt8 4.78212 fshow
+243.70691 83.59007 moveto
+(17) cmtt8 4.78212 fshow
+189.9802 20.9089 moveto
+(18) cmtt8 4.78212 fshow
+189.9802 244.77022 moveto
+(18) cmtt8 4.78212 fshow
+19.8456 74.63562 moveto
+(18) cmtt8 4.78212 fshow
+243.70691 74.63562 moveto
+(18) cmtt8 4.78212 fshow
+198.93465 20.9089 moveto
+(19) cmtt8 4.78212 fshow
+198.93465 244.77022 moveto
+(19) cmtt8 4.78212 fshow
+19.8456 65.68117 moveto
+(19) cmtt8 4.78212 fshow
+243.70691 65.68117 moveto
+(19) cmtt8 4.78212 fshow
+207.8891 20.9089 moveto
+(20) cmtt8 4.78212 fshow
+207.8891 244.77022 moveto
+(20) cmtt8 4.78212 fshow
+19.8456 56.72672 moveto
+(20) cmtt8 4.78212 fshow
+243.70691 56.72672 moveto
+(20) cmtt8 4.78212 fshow
+216.84355 20.9089 moveto
+(21) cmtt8 4.78212 fshow
+216.84355 244.77022 moveto
+(21) cmtt8 4.78212 fshow
+19.8456 47.77226 moveto
+(21) cmtt8 4.78212 fshow
+243.70691 47.77226 moveto
+(21) cmtt8 4.78212 fshow
+225.798 20.9089 moveto
+(22) cmtt8 4.78212 fshow
+225.798 244.77022 moveto
+(22) cmtt8 4.78212 fshow
+19.8456 38.81781 moveto
+(22) cmtt8 4.78212 fshow
+243.70691 38.81781 moveto
+(22) cmtt8 4.78212 fshow
+234.75246 20.9089 moveto
+(23) cmtt8 4.78212 fshow
+234.75246 244.77022 moveto
+(23) cmtt8 4.78212 fshow
+19.8456 29.86336 moveto
+(23) cmtt8 4.78212 fshow
+243.70691 29.86336 moveto
+(23) cmtt8 4.78212 fshow
+newpath 268.63358 228.33855 moveto
+250.72467 228.33855 lineto stroke
+newpath 254.42027 229.86935 moveto
+250.72467 228.33855 lineto
+254.42027 226.80774 lineto
+ closepath
+gsave fill grestore stroke
+newpath 264.93797 226.80774 moveto
+268.63358 228.33855 lineto
+264.93797 229.86935 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 226.7888 moveto
+(Acquire g) cmtt8 7.97011 fshow
+271.63358 217.39156 moveto
+(launch threads) cmtt8 7.97011 fshow
+newpath 268.63358 210.42964 moveto
+250.72467 210.42964 lineto stroke
+newpath 254.42027 211.96045 moveto
+250.72467 210.42964 lineto
+254.42027 208.89883 lineto
+ closepath
+gsave fill grestore stroke
+newpath 264.93797 208.89883 moveto
+268.63358 210.42964 lineto
+264.93797 211.96045 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 208.8799 moveto
+(Acquire x) cmtt8 7.97011 fshow
+newpath 268.63358 201.47519 moveto
+250.72467 201.47519 lineto stroke
+newpath 254.42027 203.006 moveto
+250.72467 201.47519 lineto
+254.42027 199.94438 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 199.48265 moveto
+(Create A) cmtt8 7.97011 fshow
+newpath 17.9089 192.52074 moveto
+0 192.52074 lineto stroke
+newpath 3.6956 194.05154 moveto
+0 192.52074 lineto
+3.6956 190.98993 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 190.08542 moveto
+(Activated) cmtt8 7.97011 fshow
+newpath 17.9089 183.56628 moveto
+0 183.56628 lineto stroke
+newpath 3.6956 185.09709 moveto
+0 183.56628 lineto
+3.6956 182.03548 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 182.03548 moveto
+17.9089 183.56628 lineto
+14.2133 185.09709 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 182.01653 moveto
+(Acquire a) cmtt8 7.97011 fshow
+newpath 0 174.61183 moveto
+17.9089 174.61183 lineto stroke
+newpath 14.2133 173.08102 moveto
+17.9089 174.61183 lineto
+14.2133 176.14264 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 173.06207 moveto
+(Acquire x) cmtt8 7.97011 fshow
+newpath 250.72467 165.65738 moveto
+268.63358 165.65738 lineto stroke
+newpath 264.93797 164.12657 moveto
+268.63358 165.65738 lineto
+264.93797 167.18819 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 164.10764 moveto
+(Wokeup) cmtt8 7.97011 fshow
+newpath 268.63358 156.70293 moveto
+250.72467 156.70293 lineto stroke
+newpath 254.42027 158.23373 moveto
+250.72467 156.70293 lineto
+254.42027 155.17212 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 154.71039 moveto
+(Release x) cmtt8 7.97011 fshow
+newpath 17.9089 147.74847 moveto
+0 147.74847 lineto stroke
+newpath 3.6956 149.27928 moveto
+0 147.74847 lineto
+3.6956 146.21767 lineto
+ closepath
+gsave fill grestore stroke
+-58.0443 146.19872 moveto
+(Wokeup with x) cmtt8 7.97011 fshow
+newpath 17.9089 138.79402 moveto
+0 138.79402 lineto stroke
+newpath 3.6956 140.32483 moveto
+0 138.79402 lineto
+3.6956 137.26321 lineto
+ closepath
+gsave fill grestore stroke
+-87.68353 136.80148 moveto
+(Set idle work status) cmtt8 7.97011 fshow
+newpath 0 129.83957 moveto
+17.9089 129.83957 lineto stroke
+newpath 14.2133 128.30876 moveto
+17.9089 129.83957 lineto
+14.2133 131.37038 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 127.84703 moveto
+(Release x) cmtt8 7.97011 fshow
+newpath 250.72467 120.88512 moveto
+268.63358 120.88512 lineto stroke
+newpath 264.93797 119.35431 moveto
+268.63358 120.88512 lineto
+264.93797 122.41592 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 119.33537 moveto
+(Wokeup) cmtt8 7.97011 fshow
+newpath 268.63358 111.93066 moveto
+250.72467 111.93066 lineto stroke
+newpath 254.42027 113.46147 moveto
+250.72467 111.93066 lineto
+254.42027 110.39986 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 110.38092 moveto
+(Wait on event+release g) cmtt8 7.97011 fshow
+newpath 17.9089 102.97621 moveto
+0 102.97621 lineto stroke
+newpath 3.6956 104.50702 moveto
+0 102.97621 lineto
+3.6956 101.4454 lineto
+ closepath
+gsave fill grestore stroke
+-58.0443 101.42645 moveto
+(Wokeup with g) cmtt8 7.97011 fshow
+-49.57594 92.02922 moveto
+(Set thd cnt) cmtt8 7.97011 fshow
+newpath 17.9089 85.0673 moveto
+0 85.0673 lineto stroke
+newpath 3.6956 86.59811 moveto
+0 85.0673 lineto
+3.6956 83.5365 lineto
+ closepath
+gsave fill grestore stroke
+newpath 14.2133 83.5365 moveto
+17.9089 85.0673 lineto
+14.2133 86.59811 lineto
+ closepath
+gsave fill grestore stroke
+-87.68353 83.51755 moveto
+(Send G wakeup signal) cmtt8 7.97011 fshow
+newpath 0 76.11285 moveto
+17.9089 76.11285 lineto stroke
+newpath 14.2133 74.58205 moveto
+17.9089 76.11285 lineto
+14.2133 77.64366 lineto
+ closepath
+gsave fill grestore stroke
+-41.10759 74.5631 moveto
+(Release g) cmtt8 7.97011 fshow
+newpath 250.72467 67.1584 moveto
+268.63358 67.1584 lineto stroke
+newpath 264.93797 65.6276 moveto
+268.63358 67.1584 lineto
+264.93797 68.68921 lineto
+ closepath
+gsave fill grestore stroke
+271.63358 65.60866 moveto
+(Wokeup from signal) cmtt8 7.97011 fshow
+-96.15189 65.60864 moveto
+(Wait for wakeup signal) cmtt8 7.97011 fshow
+271.63358 56.21141 moveto
+(Process returned data) cmtt8 7.97011 fshow
+271.63358 47.25696 moveto
+(Run until a call) cmtt8 7.97011 fshow
+271.63358 38.3025 moveto
+(to Inner) cmtt8 7.97011 fshow
+-70.74683 38.74529 moveto
+(Eventual wake up) cmtt8 7.97011 fshow
+-100.38606 29.34805 moveto
+(Wait on event+release a) cmtt8 7.97011 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/threading_exs.mp b/web/yacco2/diagrams/threading_exs.mp
new file mode 100644
index 0000000000..a9cf0d55d1
--- /dev/null
+++ b/web/yacco2/diagrams/threading_exs.mp
@@ -0,0 +1,565 @@
+% file: threading_exs.mp
+% thread examples deadlock, and critcal resource
+input boxes
+%tracingall;
+%tracingmacros := 1;
+%tracingequations := 1;
+defaultfont := "cmtt8";
+
+numeric u;u:=1cc;
+numeric Half_tunit;
+numeric Time_unit_size,No_time_units;
+numeric lt_hd,rt_hd,both_hd,no_hd,up_hd,dwn_hd,below,above;
+lt_hd:=0;rt_hd:=1;both_hd:=2;no_hd:=3;up_hd:=4;dwn_hd:=5;
+above:=6;below:=7;
+
+%How - l,r,b,n left head rt head both head no heads 0..3
+numeric Outer_side_size,Time_side_size,Inner_side_size;
+numeric Outer_to_time_side_size,Time_to_inner_side_size;
+pair Sw_inner,Sw_time,Sw_outer;
+pair Mid_tunit;
+pair Time_lft_tpos,Inner_tpos,Time_rt_tpos,Bot_side_tpos,Top_side_tpos;
+pair Outer_lft_tpos,Outer_rt_tpos,obot_side_tpos,otop_side_tpos;
+
+
+def drw_obelisk(expr Time_units,Size_time_unit)=
+ Time_unit_size := Size_time_unit;
+ Half_tunit:=.5*Time_unit_size;
+ No_time_units := Time_units;
+ Outer_to_time_side_size:=2*Time_unit_size;
+ Time_to_inner_side_size:=Time_unit_size;
+ Inner_side_size:=No_time_units*Time_unit_size;
+ Time_side_size:=Time_to_inner_side_size+Inner_side_size+Time_to_inner_side_size;
+ Outer_side_size:=Outer_to_time_side_size+Time_side_size+Outer_to_time_side_size;
+ Sw_outer:=(0,0);
+ Sw_time:= Sw_outer shifted (Outer_to_time_side_size,Outer_to_time_side_size);
+ Sw_inner:= Sw_time shifted (Time_to_inner_side_size,Time_to_inner_side_size);
+ drw_box(Sw_outer,Outer_side_size,Outer_side_size);
+ drw_box(Sw_time,Time_side_size,Time_side_size);
+ drw_box(Sw_inner,Inner_side_size,Inner_side_size);
+ drw_outer_mitre(Sw_outer,Outer_side_size,Outer_to_time_side_size);
+ drw_mark_time(Sw_time);
+enddef;
+
+def drw_mark_time(expr Sw)=
+ draw Sw
+ -- Sw +(0,Time_to_inner_side_size)
+ -- Sw +(Time_to_inner_side_size,Time_to_inner_side_size)
+ -- Sw +(Time_to_inner_side_size,0);
+ draw Sw shifted (0,Time_side_size)
+ --Sw +(0,Time_to_inner_side_size) rotated -90 shifted (0,Time_side_size)
+ -- Sw +(Time_to_inner_side_size,Time_to_inner_side_size) rotated -90 shifted (0,Time_side_size)
+ -- Sw +(Time_to_inner_side_size,0) rotated -90 shifted (0,Time_side_size);
+ draw Sw shifted (Time_side_size,Time_side_size)
+ -- Sw +(0,Time_to_inner_side_size) rotated -180 shifted (Time_side_size,Time_side_size)
+ -- Sw +(Time_to_inner_side_size,Time_to_inner_side_size) rotated -180 shifted (Time_side_size,Time_side_size)
+ -- Sw +(Time_to_inner_side_size,0) rotated -180 shifted (Time_side_size,Time_side_size);
+ draw Sw shifted (Time_side_size,0)
+ -- Sw +(0,Time_to_inner_side_size) rotated -270 shifted (Time_side_size,0)
+ -- Sw +(Time_to_inner_side_size,Time_to_inner_side_size) rotated -270 shifted (Time_side_size,0)
+ -- Sw +(Time_to_inner_side_size,0) rotated -270 shifted (Time_side_size,0);
+ % draw marks of twain
+ defaultscale:=.6;
+ string a;
+ Time_lft_tpos := Sw shifted (0,Time_side_size-2*Time_to_inner_side_size);
+ Inner_tpos := Time_lft_tpos shifted (Time_unit_size,0);
+ Outer_lft_tpos := Time_lft_tpos shifted (-Outer_to_time_side_size,0);
+ Time_rt_tpos := Time_lft_tpos shifted (Time_side_size,0);
+ Outer_rt_tpos := Time_rt_tpos shifted (Outer_to_time_side_size,0);
+ Bot_side_tpos := Sw shifted (Time_to_inner_side_size,0);
+ Top_side_tpos := Bot_side_tpos shifted (0,Time_side_size - Time_to_inner_side_size);
+ Mid_tunit := .5[(0,0),(Time_to_inner_side_size,0)];
+ numeric tunit;
+ for i=0 upto No_time_units - 1:
+ a:=decimal i;
+ tunit := i*Time_to_inner_side_size;
+ label.top(a,Mid_tunit shifted Bot_side_tpos + (tunit,0));%bottom time line
+ label.top(a,Mid_tunit shifted Top_side_tpos + (tunit,0));%top time line
+ label.top(a,Mid_tunit shifted Time_lft_tpos + (0,-tunit));%left side time line
+ label.top(a,Mid_tunit shifted Time_rt_tpos + (-Time_to_inner_side_size,-tunit));%rt side time line
+ endfor
+ defaultscale:=1;
+enddef;
+
+def drw_outer_mitre(expr Pos,Side,Mitre_size)=
+ draw Pos--Pos+(Mitre_size,Mitre_size);
+ draw Pos shifted (Side,0)-- Pos+(Mitre_size,Mitre_size) rotated 90 shifted (Side,0);
+ draw Pos shifted (Side,Side)-- Pos+(Mitre_size,Mitre_size) rotated 180 shifted (Side,Side);
+ draw Pos shifted (0,Side)-- Pos+(Mitre_size,Mitre_size) rotated -90 shifted (0,Side);
+enddef;
+
+def drw_box(expr Pos,Side,Ht)=
+ pair nw,ne,sw,se;
+ sw:=Pos;
+ se:=sw+(Side,0);
+ nw:=sw+(0,Ht);
+ ne:=nw+(Ht,0);
+ draw sw--se--ne--nw--cycle;
+enddef;
+
+%
+% Lft_time_side_tpos inner point of 0 unit
+%
+def drw_lft_side_hz_vector(expr Tunit,How)=
+ pair zr,zl;
+ zr := Time_lft_tpos;% from anchor pt
+ numeric row;
+ row:= Time_unit_size*Tunit;%bot of time unit
+ zr := zr shifted (0,-row);%row
+ zr := zr shifted (0,Half_tunit);%put in middle of box
+ zl := zr shifted (-Outer_to_time_side_size,0);% to anchor pt
+ if(How = rt_hd):
+ drawarrow zl .. zr ;
+ else:
+ if (How = lt_hd):
+ drawarrow zr .. zl ;
+ else:
+ if (How = both_hd):
+ drawdblarrow zr .. zl ;
+ else:
+ if (How = no_hd):
+ draw zr -- zl;
+ fi
+ fi
+ fi
+ fi
+enddef;
+
+%
+% rt_side_tpos inner point of 0 unit
+%
+def drw_rt_side_hz_vector(expr Tunit,How)=
+ pair zr,zl;
+ zl := Time_rt_tpos;% from anchor pt
+ numeric row;
+ row:= Time_unit_size*Tunit;%bot of time unit
+ zl := zl shifted (0,-row);%row
+ zl := zl shifted (0,Half_tunit);%put in middle of box
+ zr := zl shifted (Outer_to_time_side_size,0);% to anchor pt
+ if(How = rt_hd):
+ drawarrow zl .. zr ;
+ else:
+ if (How = lt_hd):
+ drawarrow zr .. zl ;
+ else:
+ if (How = both_hd):
+ drawdblarrow zr .. zl ;
+ else:
+ if (How = no_hd):
+ draw zr -- zl;
+ fi
+ fi
+ fi
+ fi
+enddef;
+
+% Lft_time_side_tpos used
+% row the time unit to mark against
+% time unit start, stop
+%How - l,r,b,n left head rt head both head no heads 0..3
+def drw_hz_inner_vector(expr Tunit_row,From_Tunit,To_Tunit,How)=
+ pair f,t;
+ f := Inner_tpos;% resource 0 time row
+ numeric row;
+ row:= Time_unit_size*Tunit_row;
+ f:= f shifted (0,-row) + (0,Half_tunit);
+ t := f;
+ f:= f shifted (Time_unit_size*From_Tunit,0);% from col
+ t:= t shifted (Time_unit_size*To_Tunit,0);% to col
+ t:= t shifted (Time_unit_size,0);%rt boundary of time slot
+ if(How = rt_hd):
+ drawarrow f shifted ..t ;
+ else:
+ if (How = lt_hd):
+ drawarrow t ..f ;
+ else:
+ if (How = both_hd):
+ drawdblarrow f ..t ;
+ else:
+ if (How = no_hd):
+ draw f -- t ;
+ fi
+ fi
+ fi
+ fi
+enddef;
+
+def drw_hz_inner_ownership(expr Tunit,Tunit_x,What)=
+ numeric row;
+ row:= Time_unit_size*Tunit;%bot of time unit
+ pair f;
+ f := Inner_tpos shifted (0,-row)+(0,Half_tunit);% from anchor pt
+ f:= f shifted (Time_unit_size*Tunit_x,0);
+ label.top(What,f);
+enddef;
+
+%How - l,r,b,n left head rt head both head no heads 0..3
+def drw_vt_vector(expr Bot_line,Col,How)=
+ pair base_line;
+ numeric row,tu;
+ row := Time_unit_size*Bot_line;
+ tu := Time_to_inner_side_size;
+ base_line := Inner_tpos shifted (0,-row)+(0,-tu);
+ numeric dcol,dht;
+ dcol:= Time_unit_size*Col;
+ dht:= Outer_to_time_side_size;
+ base_line := base_line shifted (dcol,0) + (Half_tunit,0);
+ pair f,t;
+ f := base_line;% from anchor pt
+ t := base_line shifted (0,-dht);% from anchor pt
+ if(How = up_hd):
+ drawarrow t..f;
+ else:
+ if (How = dwn_hd):
+ drawarrow f..t;
+ else:
+ drawdblarrow f..t;
+ fi
+ fi
+enddef;
+
+% Opos top outer corner lt or rt
+% Tunit the time unit 0..16
+%Delta --- sixe of vector track + if lt, - if rt side
+%How - l,r,b,n left head rt head both head no heads 0..3
+def drw_vt_dotted_vector(expr Bot_Tline,Tunit_x,Tunit_y,How)=
+ pair base_line,t;
+ base_line := Inner_tpos shifted (0,-Bot_Tline*Time_unit_size);%base part of line
+ numeric xcol,y_ht;
+ xcol := Time_unit_size*Tunit_x;%bot of time unit
+ y_ht := Time_unit_size*Tunit_y;
+ base_line := base_line shifted (xcol,0)+(Half_tunit,0);
+ t:= Inner_tpos shifted (xcol,-y_ht)+(Half_tunit,Half_tunit);
+ if(How = up_hd):
+ drawarrow base_line..t dashed withdots;
+ else:
+ drawarrow t..base_line dashed evenly;
+ fi
+enddef;
+
+def drw_x_deadlock(expr Tunit_x,Tunit_y)=
+ pair base_line;
+ base_line := Inner_tpos shifted (0,-Tunit_x*Time_unit_size);%base part of line
+ numeric col;
+ col:= Time_unit_size*Tunit_y;
+ base_line := base_line shifted (col,0);
+ draw base_line -- base_line shifted (Time_unit_size,Time_unit_size);
+ draw base_line shifted (0,Time_unit_size)
+ -- base_line shifted (Time_unit_size,0);
+enddef;
+
+def drw_lft_outer_hz_note(expr Tunit,Note)=
+ pair f;
+ f := Outer_lft_tpos shifted (0,Half_tunit);% from anchor pt
+ numeric row;
+ row:= Time_unit_size*Tunit;
+ f := f shifted (0,-row);
+ label.lft(Note,f);
+enddef;
+
+def drw_rt_outer_hz_note(expr Tunit,Note)=
+ pair f;
+ f := Outer_rt_tpos shifted (0,Half_tunit);% from anchor pt
+ numeric row;
+ row:= Time_unit_size*Tunit;
+ f := f shifted (0,-row);
+ label.rt(Note,f);
+enddef;
+
+
+def drw_hz_xy_inner_note(expr Tunit_x,Tunit_y,Note)=
+ numeric row,col;
+ row:= Time_unit_size*Tunit_x;%bot of time unit
+ col:= Time_unit_size*Tunit_y;%interior of time unit
+ pair f;
+ f := Inner_tpos shifted (0,-row)+(col,0)+(0,Half_tunit);
+ label.rt(Note,f);
+enddef;
+
+% Opos top outer corner lt or rt
+% Tunit the time unit 0..16
+%Delta --- size of vector track + if lt, - if rt side
+def drw_vt_note(expr Opos,Tunit,Note)=
+ pair zz;
+ zz := Opos;% from anchor pt
+ numeric time_delta;
+ time_delta:= 1u*Tunit;%bot of time unit
+ pair f,t;
+ f:=zz+(time_delta,0)+(.5u,0);
+ %f:=f + (0,1u);% align closer to outer box line
+ numeric str_len;
+ str_len := length(Note);
+ t:=f;
+ pair accum_letter_ht,letter_ht;letter_ht:=(0,0);accum_letter_ht:=(0,0);
+
+ for i=0 upto str_len-1:
+ t:=f - (0,ypart accum_letter_ht);
+ string d; d:=substring(i,i+1) of Note;
+ label.bot(d,t);
+ picture letter;
+ letter := d infont defaultfont scaled defaultscale;
+ letter_ht := ulcorner letter - llcorner letter;
+ accum_letter_ht:= accum_letter_ht + letter_ht+(0,bboxmargin);
+ endfor
+enddef;
+
+def drw_vt_dashed_vector(expr Tunit_f,Tunit_t,Tunity)=
+ numeric rowf,rowy;
+ rowf:= Time_unit_size*Tunit_f;%bot of time unit
+ rowy:= Time_unit_size*Tunit_t;%bot of time unit
+ pair f,t;
+ f:=Inner_tpos shifted (0,-rowf)+(Tunity*Time_unit_size,0)+(Time_unit_size,0);
+ t:=Inner_tpos shifted (0,-rowy)+(Tunity*Time_unit_size,0)+(Time_unit_size,0);
+ draw f shifted (0,Half_tunit)..t shifted (0,Half_tunit) dashed evenly;
+enddef;
+
+%
+% Yacco2 example
+%
+beginfig(1);
+drw_obelisk(26,.7u);
+% G space
+drw_rt_side_hz_vector(1,both_hd);
+ drw_rt_outer_hz_note(1,"Acquire g");
+
+ drw_rt_outer_hz_note(2,"Launch threads");
+drw_rt_side_hz_vector(3,both_hd);
+ drw_rt_outer_hz_note(3,"Acquire x");
+drw_rt_side_hz_vector(4,lt_hd);
+ drw_rt_outer_hz_note(4,"Create A");
+
+drw_lft_side_hz_vector(5,lt_hd);
+ drw_lft_outer_hz_note(5,"Activated");
+drw_lft_side_hz_vector(6,both_hd);
+ drw_lft_outer_hz_note(6,"Acquire a");
+drw_lft_side_hz_vector(7,rt_hd);
+ drw_lft_outer_hz_note(7,"Acquire x");
+
+drw_rt_side_hz_vector(8,rt_hd);
+ drw_rt_outer_hz_note(8,"Re-activated");
+
+ drw_rt_outer_hz_note(9,"Setup: thread results");
+drw_rt_side_hz_vector(10,lt_hd);
+ drw_rt_outer_hz_note(10,"Release x");
+
+drw_lft_side_hz_vector(11,lt_hd);
+ drw_lft_outer_hz_note(11,"Wokeup with x");
+ drw_lft_outer_hz_note(12,"Make idle");
+drw_lft_side_hz_vector(13,rt_hd);
+ drw_lft_outer_hz_note(13,"Release x");
+
+drw_rt_side_hz_vector(14,rt_hd);
+ drw_rt_outer_hz_note(14,"Re-activated");
+drw_rt_side_hz_vector(15,lt_hd);
+ drw_rt_outer_hz_note(15,"Wait on event");
+ drw_rt_outer_hz_note(16,"release g");
+
+drw_lft_side_hz_vector(16,lt_hd);
+ drw_lft_outer_hz_note(16,"Re-activated");
+drw_lft_side_hz_vector(17,both_hd);
+ drw_lft_outer_hz_note(17,"Acquire g");
+ drw_lft_outer_hz_note(18,"Deposit data in G");
+drw_lft_side_hz_vector(19,both_hd);
+ drw_lft_outer_hz_note(19,"Release g");
+drw_lft_side_hz_vector(20,both_hd);
+ drw_lft_outer_hz_note(20,"Signal G");
+drw_lft_side_hz_vector(21,rt_hd);
+ drw_lft_outer_hz_note(21,"Wait on event");
+ drw_lft_outer_hz_note(22,"release a");
+
+drw_rt_side_hz_vector(22,rt_hd);
+ drw_rt_outer_hz_note(22,"Wokeup from event");
+ drw_rt_outer_hz_note(23,"Process data from A");
+ drw_rt_outer_hz_note(24,"Keep running until");
+ drw_rt_outer_hz_note(25,"launch of threads");
+
+
+% inner space
+drw_hz_xy_inner_note(8,5,"Inner Space: Thread Manager");
+drw_hz_xy_inner_note(0,0,"Running queue:");
+drw_hz_xy_inner_note(1,0,"G");
+drw_hz_xy_inner_note(2,0,"A");
+
+drw_hz_xy_inner_note(5,0,"To Run queue:");
+drw_hz_xy_inner_note(6,0,"G");
+drw_hz_xy_inner_note(7,0,"A");
+
+drw_hz_xy_inner_note(10,0,"Resources");
+drw_hz_xy_inner_note(11,0,"g");
+drw_hz_xy_inner_note(12,0,"x");
+drw_hz_xy_inner_note(13,0,"a");
+
+% G running
+ drw_hz_inner_vector(1,1,4,no_hd);
+ drw_hz_inner_vector(2,5,7,no_hd);
+ drw_hz_inner_vector(1,8,10,no_hd);
+ drw_hz_inner_vector(2,11,13,no_hd);
+ drw_hz_inner_vector(1,14,15,no_hd);
+ drw_hz_inner_vector(2,16,21,no_hd);
+ drw_hz_inner_vector(1,22,25,no_hd);
+% draw continuity
+drw_vt_dashed_vector(1,2,4);
+drw_vt_dashed_vector(2,1,7);
+drw_vt_dashed_vector(1,2,10);
+drw_vt_dashed_vector(2,1,13);
+drw_vt_dashed_vector(1,2,15);
+drw_vt_dashed_vector(2,1,21);
+
+
+% G to run
+ drw_hz_inner_vector(6,3,6,no_hd);
+ drw_hz_inner_vector(6,9,13,no_hd);
+% A running
+ drw_hz_inner_vector(7,7,11,no_hd);
+
+% resources
+% g
+ drw_hz_inner_vector(11,1,15,no_hd);
+ drw_hz_inner_vector(11,17,19,no_hd);
+ drw_hz_inner_vector(11,22,25,no_hd);
+% x
+ drw_hz_inner_vector(12,3,10,no_hd);
+ drw_hz_inner_vector(12,11,13,no_hd);
+% a
+ drw_hz_inner_vector(13,6,21,no_hd);
+
+% waiting on resource
+% label ownership
+drw_hz_inner_ownership(11,8,"G");
+drw_hz_inner_ownership(11,19,"A");
+drw_hz_inner_ownership(11,24,"G");
+drw_hz_inner_ownership(12,9,"G");
+drw_hz_inner_ownership(13,14,"A");
+
+drw_vt_dotted_vector(25,7,12,up_hd);
+drw_vt_dotted_vector(25,11,12,dwn_hd);
+drw_vt_dotted_vector(25,15,11,up_hd);
+drw_vt_dotted_vector(25,22,11,dwn_hd);
+drw_vt_dotted_vector(25,21,13,up_hd);
+%space labels
+
+defaultscale:=1.5;
+label.lft(btex --- A Space --- etex,Sw_outer+(0,29*Time_unit_size));
+label.rt(btex --- G Space --- etex,Sw_outer+(33*Time_unit_size,29*Time_unit_size));
+endfig;
+
+%
+% Deadlock example
+%
+beginfig(2);
+drw_obelisk(17,1u);
+% A space
+drw_lft_side_hz_vector(3,lt_hd);
+ drw_lft_outer_hz_note(3,"Activated");
+drw_lft_side_hz_vector(4,both_hd);
+ drw_lft_outer_hz_note(4,"Acquire a");
+drw_lft_side_hz_vector(5,both_hd);
+ drw_lft_outer_hz_note(5,"Acquire x");
+drw_lft_side_hz_vector(6,rt_hd);
+ drw_lft_outer_hz_note(6,"Release x");
+drw_lft_side_hz_vector(12,lt_hd);
+ drw_lft_outer_hz_note(12,"Re-activated");
+drw_lft_side_hz_vector(13,rt_hd);
+ drw_lft_outer_hz_note(13,"Acquire b");
+
+% G space
+drw_rt_side_hz_vector(1,both_hd);
+ drw_rt_outer_hz_note(1,"Acquire g");
+drw_rt_side_hz_vector(2,lt_hd);
+ drw_rt_outer_hz_note(2,"Create A");
+drw_rt_side_hz_vector(7,rt_hd);
+ drw_rt_outer_hz_note(7,"Re-activated");
+drw_rt_side_hz_vector(8,lt_hd);
+ drw_rt_outer_hz_note(8,"Create B");
+drw_rt_side_hz_vector(14,rt_hd);
+ drw_rt_outer_hz_note(14,"Re-activated");
+drw_rt_side_hz_vector(15,lt_hd);
+ drw_rt_outer_hz_note(15,"Wait on signal, rel. g");
+ drw_rt_outer_hz_note(16,"Deadlock");
+
+% B space
+
+drw_vt_vector(16,9,dwn_hd);
+%%%% %drw_vt_note(bot_lt,9,"Activated");
+drw_vt_vector(16,10,both_hd);
+%%%% %drw_vt_note(bot_lt,10,"Acquire b");
+drw_vt_vector(16,11,up_hd);
+%%%% %drw_vt_note(bot_lt,11,"Acquire a");
+pair odisp;
+odisp := (0,0)
+ + (Time_unit_size*Outer_to_time_side_size,0)
+ + (Time_unit_size*Time_to_inner_side_size,0);
+
+%label.lft(btex activated etex rotated 30,odisp shifted (10*Time_unit_size,-Time_unit_size));
+label.lft(btex activated etex rotated 30,(0,0) + (13u,-u));
+%label.lft(btex acquire b etex rotated 30,odisp shifted (11*Time_unit_size,-Time_unit_size));
+label.lft(btex acquire b etex rotated 30,(0,0) + (14*Time_unit_size,-Time_unit_size));
+%label.lft(btex acquire a etex rotated 30,odisp shifted (12*Time_unit_size,-Time_unit_size));
+label.lft(btex acquire a etex rotated 30,(0,0) shifted (15*Time_unit_size,-Time_unit_size));
+
+% inner space
+drw_hz_xy_inner_note(9,5,"Inner Space: Thread Manager");
+drw_hz_xy_inner_note(0,0,"Running queue:");
+drw_hz_xy_inner_note(1,0,"G");
+drw_hz_xy_inner_note(2,0,"A");
+drw_hz_xy_inner_note(3,0,"B");
+drw_hz_xy_inner_note(5,0,"To Run queue:");
+drw_hz_xy_inner_note(6,0,"G");
+drw_hz_xy_inner_note(7,0,"A");
+drw_hz_xy_inner_note(8,0,"B");
+drw_hz_xy_inner_note(10,0,"Resources");
+drw_hz_xy_inner_note(11,0,"g");
+drw_hz_xy_inner_note(12,0,"x");
+drw_hz_xy_inner_note(13,0,"a");
+drw_hz_xy_inner_note(14,0,"b");
+% G running
+ drw_hz_inner_vector(1,1,2,no_hd);
+ drw_hz_inner_vector(1,7,8,no_hd);
+ drw_hz_inner_vector(1,14,15,no_hd);
+% A running
+ drw_hz_inner_vector(2,3,6,no_hd);
+ drw_hz_inner_vector(2,12,13,no_hd);
+% B running
+ drw_hz_inner_vector(3,9,11,no_hd);
+
+% G to run
+ drw_hz_inner_vector(6,3,6,no_hd);
+ drw_hz_inner_vector(6,9,13,no_hd);
+% A running
+ drw_hz_inner_vector(7,7,11,no_hd);
+
+% resources
+% g
+ drw_hz_inner_vector(11,1,15,no_hd);
+% x
+ drw_hz_inner_vector(12,5,6,no_hd);
+% a
+ drw_hz_inner_vector(13,4,16,no_hd);
+% b
+ drw_hz_inner_vector(14,10,16,no_hd);
+% waiting on resource
+drw_vt_dotted_vector(16,11,13,up_hd);
+drw_vt_dotted_vector(16,13,14,up_hd);
+drw_vt_dotted_vector(16,15,11,up_hd);
+% draw continuity
+drw_vt_dashed_vector(1,2,2);
+drw_vt_dashed_vector(2,1,6);
+drw_vt_dashed_vector(1,3,8);
+drw_vt_dashed_vector(3,2,11);
+drw_vt_dashed_vector(2,1,13);
+% label ownership
+drw_hz_inner_ownership(11,8,"G");
+drw_hz_inner_ownership(12,6,"A");
+drw_hz_inner_ownership(13,9,"A");
+drw_hz_inner_ownership(14,14,"B");
+
+% X where deadlock occurs
+%drw_vt_dotted_vector(16,11,13,hd_hd);
+drw_x_deadlock(16,16);
+%space labels
+defaultscale:=1.5;
+label.bot(btex -------- B Space -------- etex,Sw_outer+(10*Time_unit_size,-3*Time_unit_size));
+label.lft(btex -- A Space -- etex,Sw_outer+(0,22*Time_unit_size));
+label.rt(btex -- G Space -- etex,Sw_outer+(23*Time_unit_size,22*Time_unit_size));
+endfig;
+end;
diff --git a/web/yacco2/diagrams/threadmanualcall.txt b/web/yacco2/diagrams/threadmanualcall.txt
new file mode 100644
index 0000000000..ec1c574d43
--- /dev/null
+++ b/web/yacco2/diagrams/threadmanualcall.txt
@@ -0,0 +1,74 @@
+/*
+ file: /yacco2/diagrams+etc/threadmanualcall.txt
+ Example of a subrule calling a thread manually.
+ Taken from grammar pass3.lex before explicit procedure call of threads
+ construct invented.
+ The start_manually_parallel_parsing function uses the
+ thread's id generated from O2linker as its key to find the thread to launch.
+*/
+ -> "@"
+ /@
+ \Yacco2's pre-processor include directive.\fbreak
+ \fbreak
+ This demonstrates a nested environment
+ where the grammar uses recursion by
+ calling a function which contains the |pass3| grammar sequence.
+ In this example, grammar |pass3|
+ manually calls a thread via
+ |start_manually_parallel_parsing|
+ to get its file name to process.
+ With the returned ``file-inclusion'' terminal,
+ |PROCESS_INCLUDE_FILE| is called to parse
+ the include file: a bom-de-bom-bom bump-and-grind sequence.
+ The |use_cnt_| is a global variable that protects
+ against the file include recursion of calling self
+ until a stack overflow occurs.
+ @/
+ {
+ op
+ using namespace NS_prefile_include;
+ using namespace NS_yacco2_T_enum;
+
+ Parser::parse_result result =
+ rule_info__.parser__->
+ start_manually_parallel_parsing(ITH_prefile_include.thd_id__);
+ if(result == Parser::erred){
+ // in this case, it will not happen: here for education
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ // process returned token
+ Caccept_parse& accept_parm =
+ *rule_info__.parser__->arbitrated_token__;
+ CAbs_lr1_sym* rtn_tok = accept_parm.accept_token__;
+ int id = rtn_tok->enumerated_id__;
+ accept_parm.accept_token__ = 0;
+ if(id == T_Enum::T_T_file_inclusion_) {
+ T_file_inclusion* finc = (T_file_inclusion*)(rtn_tok);
+ CAbs_lr1_sym* err = finc->error_sym();
+ if(err != 0) {
+ rule_info__.parser__->set_abort_parse(true);
+ ADD_TOKEN_TO_ERROR_QUEUE(*finc);
+ ADD_TOKEN_TO_ERROR_QUEUE(*finc->error_sym());
+ finc->error_sym(0);
+ return;
+ }
+ rule_info__.parser__->
+ override_current_token(*accept_parm.la_token__
+ ,accept_parm.la_token_pos__);
+ bool result =
+ PROCESS_INCLUDE_FILE
+ (*rule_info__.parser__
+ ,*finc,*rule_info__.parser__->token_producer__);
+ if(result == false){ // exceeded nested file limit
+ rule_info__.parser__->set_abort_parse(true);
+ return;
+ }
+ ADD_TOKEN_TO_RECYCLE_BIN(*finc);//file name inside
+ return;
+ }
+ // catch all errors
+ rule_info__.parser__->set_abort_parse(true);
+ ***
+ }
+
diff --git a/web/yacco2/diagrams/tokcanaccess.txt b/web/yacco2/diagrams/tokcanaccess.txt
new file mode 100644
index 0000000000..1098356f6f
--- /dev/null
+++ b/web/yacco2/diagrams/tokcanaccess.txt
@@ -0,0 +1,13 @@
+// file: /yacco2/diagrams+etc/tokcanaccess.txt
+ using namespace NS_yacco2_T_enum;
+ using namespace NS_yacco2_terminals;
+ using namespace yacco2;
+ INT_SET_type filter;
+ filter.insert(T_Enum::T_T_cweb_comment_);
+ tok_can_ast_functor walk_functr;
+ ast_prefix_1forest rule_walk(*tree_ptr,&walk_functr,&filter,ACCEPT_FILTER);
+ tok_can<AST*> comments_can(rule_walk);// container
+ for(int x(0);comments_can[x] != yacco2::PTR_LR1_eog__;++x){
+ T_cweb_comment* k = (T_cweb_comment*)comments_can[x];
+ (*Wfile) << k->comment_data()->c_str() << endl;
+ }
diff --git a/web/yacco2/diagrams/treemodify.txt b/web/yacco2/diagrams/treemodify.txt
new file mode 100644
index 0000000000..5839658355
--- /dev/null
+++ b/web/yacco2/diagrams/treemodify.txt
@@ -0,0 +1,9 @@
+/*
+file: /yacco2/diagrams+etc/treemodify.txt
+Example of re-aligning the parser's LA T when dynamically modifying the tree
+*/
+tok_can<yacco2::AST*>* ct
+ = (tok_can<yacco2::AST*>*)parser()->token_supplier();
+ct->remove();//drop the la T as i could have morphed this into a comment
+parser()->override_current_token_pos(parser()->current_token_pos()-1);
+parser()->get_next_token();
diff --git a/web/yacco2/diagrams/yacco2_stbl.1 b/web/yacco2/diagrams/yacco2_stbl.1
new file mode 100644
index 0000000000..0dd975da01
--- /dev/null
+++ b/web/yacco2/diagrams/yacco2_stbl.1
@@ -0,0 +1,289 @@
+%!PS
+%%BoundingBox: -31 -13 433 82
+%%Creator: MetaPost
+%%CreationDate: 2006.05.15:1236
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0c:8000000080020000028147ddfbf48
+%*Font: cmmi10 9.96265 9.96265 3a:8000000001d26ee1
+%*Font: cmsy10 9.96265 9.96265 0f:800010001
+%*Font: cmr10 5.97765 9.96265 2d:9f8000000000008894
+%%EndProlog
+%%Page: 1 1
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 1 setlinejoin 10 setmiterlimit
+newpath 0 0 moveto
+12.79213 0 lineto
+12.79213 76.75278 lineto
+0 76.75278 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 0 12.79213 moveto
+12.79213 12.79213 lineto stroke
+2.72926 3 moveto
+(R) cmr10 9.96265 fshow
+-5.98883 -1.92613 moveto
+(0) cmr10 5.97765 fshow
+newpath 0 25.58426 moveto
+12.79213 25.58426 lineto stroke
+3.62866 15.79213 moveto
+(b) cmr10 9.96265 fshow
+-5.98883 10.866 moveto
+(1) cmr10 5.97765 fshow
+newpath 0 38.37639 moveto
+12.79213 38.37639 lineto stroke
+4.18214 28.58426 moveto
+(e) cmr10 9.96265 fshow
+-5.98883 23.65813 moveto
+(2) cmr10 5.97765 fshow
+newpath 0 51.16852 moveto
+12.79213 51.16852 lineto stroke
+3.9054 43.31358 moveto
+(g) cmr10 9.96265 fshow
+-5.98883 36.45026 moveto
+(3) cmr10 5.97765 fshow
+newpath 0 63.96065 moveto
+12.79213 63.96065 lineto stroke
+newpath 0 63.96065 moveto
+12.79213 76.75278 lineto stroke
+newpath 6.39607 63.96065 moveto
+12.79213 70.35672 lineto stroke
+newpath 0 70.35672 moveto
+6.39607 76.75278 lineto stroke
+3.62866 54.16852 moveto
+(n) cmr10 9.96265 fshow
+-5.98883 49.24239 moveto
+(4) cmr10 5.97765 fshow
+-5.98883 62.03452 moveto
+(5) cmr10 5.97765 fshow
+-20.7575 -9.9185 moveto
+(char) cmmi10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath -0.07071 -9.7193 moveto
+2.91809 -9.7193 lineto stroke
+2.91809 -9.9185 moveto
+(pool) cmmi10 9.96265 fshow
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 63.96065 0 moveto
+76.75278 0 lineto
+76.75278 51.16852 lineto
+63.96065 51.16852 lineto
+ closepath stroke
+ 1 setlinecap
+newpath 63.96065 12.79213 moveto
+76.75278 12.79213 lineto stroke
+newpath 63.96065 25.58426 moveto
+76.75278 25.58426 lineto stroke
+newpath 63.96065 38.37639 moveto
+65.72687 40.14261 68.5905 40.14261 70.35672 38.37639 curveto
+72.12294 36.61017 74.98656 36.61017 76.75278 38.37639 curveto stroke
+newpath 70.35672 6.39607 moveto
+12.79213 6.39607 lineto stroke
+newpath 16.4877 7.92686 moveto
+12.79213 6.39607 lineto
+16.4877 4.86528 lineto
+ closepath
+gsave fill grestore stroke
+-30.18266 68.26138 moveto
+(top) cmr10 9.96265 fshow
+newpath -12.79213 70.35672 moveto
+0 70.35672 lineto stroke
+newpath -3.69557 68.82593 moveto
+0 70.35672 lineto
+-3.69557 71.88751 lineto
+ closepath
+gsave fill grestore stroke
+40.36403 -10.472 moveto
+(stbl) cmmi10 9.96265 fshow
+56.07593 -10.472 moveto
+([]) cmr10 9.96265 fshow
+61.61073 -10.472 moveto
+(:tabl) cmmi10 9.96265 fshow
+80.68623 -10.472 moveto
+(e) cmmi10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop 0 setlinecap
+newpath 85.92284 -10.2728 moveto
+88.91173 -10.2728 lineto stroke
+88.91173 -10.472 moveto
+(entr) cmmi10 9.96265 fshow
+107.89954 -10.472 moveto
+(y) cmmi10 9.96265 fshow
+30.00957 11.33327 moveto
+(k) cmmi10 9.96265 fshow
+35.50977 11.33327 moveto
+(ey) cmmi10 9.96265 fshow
+48.15797 11.33327 moveto
+(") cmsy10 9.96265 fshow
+79.75278 -1.92613 moveto
+(0) cmr10 5.97765 fshow
+79.75278 10.866 moveto
+(1) cmr10 5.97765 fshow
+79.75278 23.65813 moveto
+(2) cmr10 5.97765 fshow
+79.75278 36.96144 moveto
+(prime-1) cmr10 5.97765 fshow
+118.12917 74.26212 moveto
+(table) cmr10 9.96265 fshow
+newpath 140.31267 74.46132 moveto
+143.30147 74.46132 lineto stroke
+143.30147 74.26212 moveto
+(en) cmr10 9.96265 fshow
+152.98737 74.26212 moveto
+(try:) cmr10 9.96265 fshow
+130.9213 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 61.46999 moveto
+(k) cmr10 9.96265 fshow
+144.20479 61.46999 moveto
+(ey) cmr10 9.96265 fshow
+153.8908 61.46999 moveto
+(") cmsy10 9.96265 fshow
+168.8347 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+177.1369 61.46999 moveto
+(k) cmr10 9.96265 fshow
+182.1183 61.46999 moveto
+(ey) cmr10 9.96265 fshow
+195.12509 61.46999 moveto
+(len) cmr10 9.96265 fshow
+214.4969 61.46999 moveto
+(\017) cmsy10 9.96265 fshow
+222.7991 61.46999 moveto
+(stbl) cmr10 9.96265 fshow
+242.22629 61.46999 moveto
+(p) cmr10 9.96265 fshow
+248.0378 61.46999 moveto
+(os) cmr10 9.96265 fshow
+130.9213 47.70926 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 47.70926 moveto
+(v) cmr10 9.96265 fshow
+143.9281 47.70926 moveto
+(acan) cmr10 9.96265 fshow
+163.57669 47.70926 moveto
+(t) cmr10 9.96265 fshow
+170.7719 47.70926 moveto
+(|) cmr10 9.96265 fshow
+184.0555 47.70926 moveto
+(b) cmr10 9.96265 fshow
+189.86699 47.70926 moveto
+(o) cmr10 9.96265 fshow
+195.12509 47.70926 moveto
+(olean) cmr10 9.96265 fshow
+221.1387 47.70926 moveto
+(v) cmr10 9.96265 fshow
+225.84329 47.70926 moveto
+(alued) cmr10 9.96265 fshow
+130.9213 34.91713 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 34.91713 moveto
+(de\014ned) cmr10 9.96265 fshow
+176.8602 34.91713 moveto
+(\017) cmsy10 9.96265 fshow
+185.1624 34.91713 moveto
+(used) cmr10 9.96265 fshow
+207.91049 34.91713 moveto
+(|) cmr10 9.96265 fshow
+221.194 34.91713 moveto
+(b) cmr10 9.96265 fshow
+227.0056 34.91713 moveto
+(oth) cmr10 9.96265 fshow
+244.717 34.91713 moveto
+(b) cmr10 9.96265 fshow
+250.52849 34.91713 moveto
+(o) cmr10 9.96265 fshow
+255.78659 34.91713 moveto
+(olean) cmr10 9.96265 fshow
+281.8002 34.91713 moveto
+(v) cmr10 9.96265 fshow
+286.50479 34.91713 moveto
+(alued) cmr10 9.96265 fshow
+130.9213 23.0936 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 23.0936 moveto
+(t) cmr10 9.96265 fshow
+142.82109 23.0936 moveto
+(yp) cmr10 9.96265 fshow
+153.8908 23.0936 moveto
+(e) cmr10 9.96265 fshow
+161.6395 23.0936 moveto
+(2) cmsy10 9.96265 fshow
+174.92299 23.0936 moveto
+(rule,) cmr10 9.96265 fshow
+197.6434 23.0936 moveto
+(terminal,) cmr10 9.96265 fshow
+240.2891 23.0936 moveto
+(k) cmr10 9.96265 fshow
+245.2705 23.0936 moveto
+(eyw) cmr10 9.96265 fshow
+261.8749 23.0936 moveto
+(ord,) cmr10 9.96265 fshow
+282.3814 23.0936 moveto
+(thread,) cmr10 9.96265 fshow
+316.7249 23.0936 moveto
+(unkno) cmr10 9.96265 fshow
+343.29199 23.0936 moveto
+(wn) cmr10 9.96265 fshow
+130.9213 10.30147 moveto
+(\017) cmsy10 9.96265 fshow
+139.2235 10.30147 moveto
+(sym) cmr10 9.96265 fshow
+156.4368 10.30147 moveto
+(b) cmr10 9.96265 fshow
+162.24829 10.30147 moveto
+(ol) cmr10 9.96265 fshow
+173.318 10.30147 moveto
+(") cmsy10 9.96265 fshow
+181.6202 10.30147 moveto
+(2) cmsy10 9.96265 fshow
+191.5828 10.30147 moveto
+(rule) cmr10 9.96265 fshow
+newpath 208.8127 10.50067 moveto
+211.8015 10.50067 lineto stroke
+211.8015 10.30147 moveto
+(in) cmr10 9.96265 fshow
+newpath 220.7014 10.50067 moveto
+223.69029 10.50067 lineto stroke
+223.69029 10.30147 moveto
+(stbl,) cmr10 9.96265 fshow
+245.88489 10.30147 moveto
+(T) cmr10 9.96265 fshow
+newpath 253.6778 10.50067 moveto
+256.6667 10.50067 lineto stroke
+256.6667 10.30147 moveto
+(in) cmr10 9.96265 fshow
+newpath 265.56659 10.50067 moveto
+268.55539 10.50067 lineto stroke
+268.55539 10.30147 moveto
+(stbl,) cmr10 9.96265 fshow
+290.75 10.30147 moveto
+(kw) cmr10 9.96265 fshow
+newpath 303.8011 10.50067 moveto
+306.7899 10.50067 lineto stroke
+306.7899 10.30147 moveto
+(in) cmr10 9.96265 fshow
+newpath 315.6899 10.50067 moveto
+318.6787 10.50067 lineto stroke
+318.6787 10.30147 moveto
+(stbl,) cmr10 9.96265 fshow
+340.87329 10.30147 moveto
+(th) cmr10 9.96265 fshow
+newpath 350.88019 10.50067 moveto
+353.86899 10.50067 lineto stroke
+353.86899 10.30147 moveto
+(in) cmr10 9.96265 fshow
+newpath 362.769 10.50067 moveto
+365.7578 10.50067 lineto stroke
+365.7578 10.30147 moveto
+(stbl,) cmr10 9.96265 fshow
+387.9524 10.30147 moveto
+(tth) cmr10 9.96265 fshow
+newpath 401.8337 10.50067 moveto
+404.8225 10.50067 lineto stroke
+404.8225 10.30147 moveto
+(in) cmr10 9.96265 fshow
+newpath 413.72249 10.50067 moveto
+416.71129 10.50067 lineto stroke
+416.71129 10.30147 moveto
+(stbl) cmr10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/yacco2_stbl.2 b/web/yacco2/diagrams/yacco2_stbl.2
new file mode 100644
index 0000000000..2d1a25a726
--- /dev/null
+++ b/web/yacco2/diagrams/yacco2_stbl.2
@@ -0,0 +1,444 @@
+%!PS
+%%BoundingBox: 15 -146 472 132
+%%Creator: MetaPost
+%%CreationDate: 2006.05.15:1236
+%%Pages: 1
+%*Font: cmr10 9.96265 9.96265 0c:8000000084020500808007fdfffc8
+%*Font: cmmi10 9.96265 9.96265 3c:a
+%*Font: cmsy10 9.96265 9.96265 0f:80001
+%%EndProlog
+%%Page: 1 1
+15.79213 124.46204 moveto
+(rule) cmr10 9.96265 fshow
+ 0 0.3985 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+ 0 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 33.02193 124.66124 moveto
+36.01083 124.66124 lineto stroke
+36.01083 124.46204 moveto
+(in) cmr10 9.96265 fshow
+newpath 44.91074 124.66124 moveto
+47.89954 124.66124 lineto stroke
+47.89954 124.46204 moveto
+(stbl:) cmr10 9.96265 fshow
+28.58426 111.6699 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 111.6699 moveto
+(stbl) cmr10 9.96265 fshow
+56.31366 111.6699 moveto
+(index) cmr10 9.96265 fshow
+28.58426 99.84637 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 99.84637 moveto
+(rule) cmr10 9.96265 fshow
+newpath 54.11626 100.04558 moveto
+57.10516 100.04558 lineto stroke
+57.10516 99.84637 moveto
+(def) cmr10 9.96265 fshow
+73.43286 99.84637 moveto
+(") cmsy10 9.96265 fshow
+41.37639 86.08565 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 86.08565 moveto
+(auto) cmr10 9.96265 fshow
+72.37129 86.08565 moveto
+(delete) cmr10 9.96265 fshow
+101.15228 86.08565 moveto
+(\017) cmsy10 9.96265 fshow
+112.77539 86.08565 moveto
+(auto) cmr10 9.96265 fshow
+135.46819 86.08565 moveto
+(ab) cmr10 9.96265 fshow
+146.2611 86.08565 moveto
+(ort) cmr10 9.96265 fshow
+41.37639 74.26212 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 74.26212 moveto
+(con) cmr10 9.96265 fshow
+64.34589 74.26212 moveto
+(tains) cmr10 9.96265 fshow
+88.7544 74.26212 moveto
+(an) cmr10 9.96265 fshow
+102.59138 74.26212 moveto
+(epsilon) cmr10 9.96265 fshow
+135.85559 74.26212 moveto
+(subrule) cmr10 9.96265 fshow
+41.37639 60.50139 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 60.50139 moveto
+(rule) cmr10 9.96265 fshow
+69.63159 60.50139 moveto
+(name) cmr10 9.96265 fshow
+41.37639 48.67786 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 48.67786 moveto
+(parallel) cmr10 9.96265 fshow
+newpath 82.40588 48.87706 moveto
+85.39479 48.87706 lineto stroke
+85.39479 48.67786 moveto
+(monitor) cmr10 9.96265 fshow
+newpath 120.33598 48.87706 moveto
+123.32478 48.87706 lineto stroke
+123.32478 48.67786 moveto
+(phrase) cmr10 9.96265 fshow
+151.63539 48.67786 moveto
+(") cmsy10 9.96265 fshow
+41.37639 35.88573 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 35.88573 moveto
+(subrules) cmr10 9.96265 fshow
+newpath 85.8375 36.08493 moveto
+88.8263 36.08493 lineto stroke
+88.8263 35.88573 moveto
+(phrase) cmr10 9.96265 fshow
+117.13689 35.88573 moveto
+(") cmsy10 9.96265 fshow
+41.37639 23.0936 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 23.0936 moveto
+(rule) cmr10 9.96265 fshow
+newpath 66.90839 23.2928 moveto
+69.8973 23.2928 lineto stroke
+69.8973 23.0936 moveto
+(lhs) cmr10 9.96265 fshow
+newpath 82.72688 23.2928 moveto
+85.71579 23.2928 lineto stroke
+85.71579 23.0936 moveto
+(phrase) cmr10 9.96265 fshow
+114.02629 23.0936 moveto
+(") cmsy10 9.96265 fshow
+41.37639 10.30147 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 10.30147 moveto
+(lhs) cmr10 9.96265 fshow
+65.23138 10.30147 moveto
+(directiv) cmr10 9.96265 fshow
+97.91449 10.30147 moveto
+(es) cmr10 9.96265 fshow
+109.5929 10.30147 moveto
+(map) cmr10 9.96265 fshow
+131.73209 10.30147 moveto
+(|) cmr10 9.96265 fshow
+145.01569 10.30147 moveto
+(<) cmmi10 9.96265 fshow
+152.76439 10.30147 moveto
+(string,) cmr10 9.96265 fshow
+183.84239 10.30147 moveto
+(CAbs) cmr10 9.96265 fshow
+newpath 208.57188 10.50067 moveto
+211.56068 10.50067 lineto stroke
+211.56068 10.30147 moveto
+(lr1) cmr10 9.96265 fshow
+newpath 223.80919 10.50067 moveto
+226.79799 10.50067 lineto stroke
+226.79799 10.30147 moveto
+(sym) cmr10 9.96265 fshow
+244.28809 10.30147 moveto
+(") cmsy10 9.96265 fshow
+249.2694 10.30147 moveto
+(>) cmmi10 9.96265 fshow
+28.58426 -2.49066 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 -2.49066 moveto
+(list) cmr10 9.96265 fshow
+53.54626 -2.49066 moveto
+(of) cmr10 9.96265 fshow
+64.89256 -2.49066 moveto
+(refered) cmr10 9.96265 fshow
+newpath 95.15686 -2.29146 moveto
+98.14575 -2.29146 lineto stroke
+98.14575 -2.49066 moveto
+(rule) cmr10 9.96265 fshow
+118.09866 -2.49066 moveto
+(") cmsy10 9.96265 fshow
+41.37639 -15.28279 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -15.28279 moveto
+(referenced) cmr10 9.96265 fshow
+97.05649 -15.28279 moveto
+(rule) cmr10 9.96265 fshow
+120.33038 -15.28279 moveto
+(|) cmr10 9.96265 fshow
+133.61389 -15.28279 moveto
+(rule) cmr10 9.96265 fshow
+newpath 150.8438 -15.08359 moveto
+153.8326 -15.08359 lineto stroke
+153.8326 -15.28279 moveto
+(in) cmr10 9.96265 fshow
+newpath 162.73248 -15.08359 moveto
+165.72139 -15.08359 lineto stroke
+165.72139 -15.28279 moveto
+(stbl) cmr10 9.96265 fshow
+181.82768 -15.28279 moveto
+(") cmsy10 9.96265 fshow
+246.05046 124.46204 moveto
+(T) cmr10 9.96265 fshow
+newpath 253.84346 124.66124 moveto
+256.83226 124.66124 lineto stroke
+256.83226 124.46204 moveto
+(in) cmr10 9.96265 fshow
+newpath 265.73225 124.66124 moveto
+268.72105 124.66124 lineto stroke
+268.72105 124.46204 moveto
+(stbl:) cmr10 9.96265 fshow
+258.84259 111.6699 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 111.6699 moveto
+(stbl) cmr10 9.96265 fshow
+286.57199 111.6699 moveto
+(index) cmr10 9.96265 fshow
+258.84259 99.84637 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 99.84637 moveto
+(terminal) cmr10 9.96265 fshow
+newpath 304.29999 100.04558 moveto
+307.28879 100.04558 lineto stroke
+307.28879 99.84637 moveto
+(def) cmr10 9.96265 fshow
+323.61649 99.84637 moveto
+(") cmsy10 9.96265 fshow
+271.63472 86.08565 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 86.08565 moveto
+(auto) cmr10 9.96265 fshow
+302.62962 86.08565 moveto
+(delete) cmr10 9.96265 fshow
+331.41061 86.08565 moveto
+(\017) cmsy10 9.96265 fshow
+343.03372 86.08565 moveto
+(auto) cmr10 9.96265 fshow
+365.72652 86.08565 moveto
+(ab) cmr10 9.96265 fshow
+376.51942 86.08565 moveto
+(ort) cmr10 9.96265 fshow
+271.63472 73.29352 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 73.29352 moveto
+(terminal) cmr10 9.96265 fshow
+319.81522 73.29352 moveto
+(name) cmr10 9.96265 fshow
+271.63472 60.50139 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 60.50139 moveto
+(class) cmr10 9.96265 fshow
+303.29382 60.50139 moveto
+(name) cmr10 9.96265 fshow
+271.63472 48.67786 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 48.67786 moveto
+(directiv) cmr10 9.96265 fshow
+312.62003 48.67786 moveto
+(es) cmr10 9.96265 fshow
+324.29842 48.67786 moveto
+(map) cmr10 9.96265 fshow
+346.43762 48.67786 moveto
+(|) cmr10 9.96265 fshow
+359.72122 48.67786 moveto
+(<) cmmi10 9.96265 fshow
+367.46992 48.67786 moveto
+(string,) cmr10 9.96265 fshow
+398.54791 48.67786 moveto
+(CAbs) cmr10 9.96265 fshow
+newpath 423.27742 48.87706 moveto
+426.26622 48.87706 lineto stroke
+426.26622 48.67786 moveto
+(lr1) cmr10 9.96265 fshow
+newpath 438.51472 48.87706 moveto
+441.50352 48.87706 lineto stroke
+441.50352 48.67786 moveto
+(sym) cmr10 9.96265 fshow
+458.99362 48.67786 moveto
+(") cmsy10 9.96265 fshow
+463.97491 48.67786 moveto
+(>) cmmi10 9.96265 fshow
+258.84259 35.88573 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 35.88573 moveto
+(list) cmr10 9.96265 fshow
+283.8046 35.88573 moveto
+(of) cmr10 9.96265 fshow
+295.1509 35.88573 moveto
+(refered) cmr10 9.96265 fshow
+newpath 325.41519 36.08493 moveto
+328.40408 36.08493 lineto stroke
+328.40408 35.88573 moveto
+(T) cmr10 9.96265 fshow
+338.9202 35.88573 moveto
+(") cmsy10 9.96265 fshow
+271.63472 23.0936 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 23.0936 moveto
+(referenced) cmr10 9.96265 fshow
+327.31482 23.0936 moveto
+(terminal) cmr10 9.96265 fshow
+370.51402 23.0936 moveto
+(|) cmr10 9.96265 fshow
+383.79762 23.0936 moveto
+(T) cmr10 9.96265 fshow
+newpath 391.59062 23.2928 moveto
+394.57942 23.2928 lineto stroke
+394.57942 23.0936 moveto
+(in) cmr10 9.96265 fshow
+newpath 403.47932 23.2928 moveto
+406.46822 23.2928 lineto stroke
+406.46822 23.0936 moveto
+(stbl) cmr10 9.96265 fshow
+422.57452 23.0936 moveto
+(") cmsy10 9.96265 fshow
+15.79213 -40.86705 moveto
+(th) cmr10 9.96265 fshow
+newpath 25.79903 -40.66785 moveto
+28.78783 -40.66785 lineto stroke
+28.78783 -40.86705 moveto
+(in) cmr10 9.96265 fshow
+newpath 37.68784 -40.66785 moveto
+40.67664 -40.66785 lineto stroke
+40.67664 -40.86705 moveto
+(stbl:) cmr10 9.96265 fshow
+63.97823 -40.86705 moveto
+(Link) cmr10 9.96265 fshow
+83.48843 -40.86705 moveto
+(er) cmr10 9.96265 fshow
+95.13924 -40.86705 moveto
+(only) cmr10 9.96265 fshow
+28.58426 -54.62778 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 -54.62778 moveto
+(stbl) cmr10 9.96265 fshow
+56.31366 -54.62778 moveto
+(index) cmr10 9.96265 fshow
+28.58426 -66.45131 moveto
+(\017) cmsy10 9.96265 fshow
+36.88646 -66.45131 moveto
+(thread) cmr10 9.96265 fshow
+newpath 65.73946 -66.2521 moveto
+68.72826 -66.2521 lineto stroke
+68.72826 -66.45131 moveto
+(attributes) cmr10 9.96265 fshow
+114.75015 -66.45131 moveto
+(") cmsy10 9.96265 fshow
+41.37639 -80.21204 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -80.21204 moveto
+(transitiv) cmr10 9.96265 fshow
+86.29138 -80.21204 moveto
+(e) cmr10 9.96265 fshow
+94.04008 -80.21204 moveto
+(\017) cmsy10 9.96265 fshow
+105.6632 -80.21204 moveto
+(monolithic) cmr10 9.96265 fshow
+41.37639 -90.7902 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -90.7902 moveto
+(grammar) cmr10 9.96265 fshow
+92.35199 -90.7902 moveto
+(name) cmr10 9.96265 fshow
+41.37639 -103.58234 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -103.58234 moveto
+(namespace) cmr10 9.96265 fshow
+99.5472 -103.58234 moveto
+(name) cmr10 9.96265 fshow
+41.37639 -118.58842 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -118.58842 moveto
+(thread) cmr10 9.96265 fshow
+81.25468 -118.58842 moveto
+(name) cmr10 9.96265 fshow
+41.37639 -131.38055 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -131.38055 moveto
+(\014le) cmr10 9.96265 fshow
+65.72949 -131.38055 moveto
+(name) cmr10 9.96265 fshow
+41.37639 -144.17268 moveto
+(\017) cmsy10 9.96265 fshow
+49.67859 -144.17268 moveto
+(en) cmr10 9.96265 fshow
+59.36449 -144.17268 moveto
+(umeration) cmr10 9.96265 fshow
+106.9916 -144.17268 moveto
+(v) cmr10 9.96265 fshow
+111.69618 -144.17268 moveto
+(alue) cmr10 9.96265 fshow
+246.05046 -40.86705 moveto
+(tth) cmr10 9.96265 fshow
+newpath 259.93176 -40.66785 moveto
+262.92056 -40.66785 lineto stroke
+262.92056 -40.86705 moveto
+(in) cmr10 9.96265 fshow
+newpath 271.82056 -40.66785 moveto
+274.80936 -40.66785 lineto stroke
+274.80936 -40.86705 moveto
+(stbl:) cmr10 9.96265 fshow
+298.11086 -40.86705 moveto
+(Link) cmr10 9.96265 fshow
+317.62115 -40.86705 moveto
+(er) cmr10 9.96265 fshow
+329.27187 -40.86705 moveto
+(only) cmr10 9.96265 fshow
+258.84259 -54.62778 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 -54.62778 moveto
+(stbl) cmr10 9.96265 fshow
+286.57199 -54.62778 moveto
+(index) cmr10 9.96265 fshow
+258.84259 -66.45131 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 -66.45131 moveto
+(T) cmr10 9.96265 fshow
+newpath 274.93779 -66.2521 moveto
+277.92659 -66.2521 lineto stroke
+277.92659 -66.45131 moveto
+(attributes) cmr10 9.96265 fshow
+323.9486 -66.45131 moveto
+(") cmsy10 9.96265 fshow
+271.63472 -79.24344 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 -79.24344 moveto
+(fully) cmr10 9.96265 fshow
+302.62971 -79.24344 moveto
+(quali\014ed) cmr10 9.96265 fshow
+342.75702 -79.24344 moveto
+(name) cmr10 9.96265 fshow
+271.63472 -93.00417 moveto
+(\017) cmsy10 9.96265 fshow
+279.93692 -93.00417 moveto
+(en) cmr10 9.96265 fshow
+289.62282 -93.00417 moveto
+(umeration) cmr10 9.96265 fshow
+337.24992 -93.00417 moveto
+(v) cmr10 9.96265 fshow
+341.95451 -93.00417 moveto
+(alue) cmr10 9.96265 fshow
+246.05046 -118.58842 moveto
+(kw) cmr10 9.96265 fshow
+newpath 259.10156 -118.38922 moveto
+262.09036 -118.38922 lineto stroke
+262.09036 -118.58842 moveto
+(in) cmr10 9.96265 fshow
+newpath 270.99026 -118.38922 moveto
+273.97916 -118.38922 lineto stroke
+273.97916 -118.58842 moveto
+(stbl:) cmr10 9.96265 fshow
+258.84259 -131.38055 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 -131.38055 moveto
+(stbl) cmr10 9.96265 fshow
+286.57199 -131.38055 moveto
+(index) cmr10 9.96265 fshow
+258.84259 -143.20409 moveto
+(\017) cmsy10 9.96265 fshow
+267.14479 -143.20409 moveto
+(CAbs) cmr10 9.96265 fshow
+newpath 291.87428 -143.00488 moveto
+294.86308 -143.00488 lineto stroke
+294.86308 -143.20409 moveto
+(lr1) cmr10 9.96265 fshow
+newpath 307.11159 -143.00488 moveto
+310.1005 -143.00488 lineto stroke
+310.1005 -143.20409 moveto
+(sym) cmr10 9.96265 fshow
+330.91139 -143.20409 moveto
+(") cmsy10 9.96265 fshow
+showpage
+%%EOF
diff --git a/web/yacco2/diagrams/yacco2_stbl.mp b/web/yacco2/diagrams/yacco2_stbl.mp
new file mode 100644
index 0000000000..23454a4345
--- /dev/null
+++ b/web/yacco2/diagrams/yacco2_stbl.mp
@@ -0,0 +1,136 @@
+% file: yacco2_stbl.mp
+input boxes
+beginfig(1);
+u=1cc;
+% char_pool
+pair sw,se,ne,nw;
+sw:=(0,0);
+se:=(1u,0);
+ne:=(1u,6u);
+nw:=(0,6u);
+draw sw--se--ne--nw--cycle;
+%outline the bytes
+pair zx,zy;
+for i=1 upto 5:
+ zx:=(0,i*u);zy:=(1u,i*u);
+ draw zx--zy;
+ if i=5:
+ pair ze,zw;
+ ze:=(1u,6u);zw:=(0,6u);
+ draw zx--ze;
+ draw .5[zx,zy]--.5[zy,ze];
+ draw .5[zx,zw]--.5[zw,ze];
+ fi
+ string d; d:=substring(i-1,i) of "Rbegn";
+ label.top(d,.5[zx-(0,1u),zy-(0,1u)]);
+ string a;a:=decimal (i-1);
+ defaultscale:=.6;
+ label.lft(substring(0,1)of a,zx-(0,1u));
+ defaultscale:=1;
+endfor
+ defaultscale:=.6;
+ label.lft("5",(0,5u));
+ defaultscale:=1;
+ label.bot(btex $char\_pool$ etex,(0,0u));
+
+% stbl
+sw:=(5u,0);
+se:=(6u,0);
+ne:=(6u,4u);
+nw:=(5u,4u);
+draw sw--se--ne--nw--cycle;
+%outline the bytes
+for i=1 upto 3:
+ zx:=(5u,i*u);zy:=(6u,i*u);
+ if i = 3:
+ draw zx{dir 45} .. .5[zx,zy] {dir -45} .. zy;
+ else:
+ draw zx--zy;
+ fi
+endfor
+% draw arrows
+drawarrow .5[(5u,0u),(6u,1u)]{left}.. .5[(1u,0),(1u,1u)];
+ label.lft("top",(-1u,5.5u));
+ drawarrow (-1u,5.5u)..(0,5.5u);
+label.bot(btex $stbl[].table\_entry$ etex,(6u,0u));
+label.top(btex $key\uparrow$ etex,.5[.5[(5u,0u),(6u,1u)],.5[(1u,0),(1u,1u)]]);
+
+% label subscripts
+defaultscale:=.6;
+for i=0 upto 3:
+ zy:=(6u,i*u);
+ string a;
+ if i=3:
+ a := "prime-1";
+ label.rt(a,zy);
+ else:
+ a:=decimal (i);
+ label.rt(substring(0,1)of a,zy);
+ fi
+endfor
+defaultscale:=1;
+
+
+%outline table_entry
+label.rt(btex table$\_$entry: etex,(9u,6u));
+label.rt(btex $\bullet\ $key$\uparrow$ \ \ $\bullet\ $key\ len\ \ $\bullet\ $stbl\ pos etex,(10u,5u));
+label.rt(btex $\bullet\ $vacant --- boolean valued etex,(10u,4u));
+label.rt(btex $\bullet\ $defined\ \ $\bullet\ $used --- both boolean valued etex,(10u,3u));
+label.rt(btex $\bullet\ $type\ $\in\ $\ rule, terminal, keyword, thread, unknown etex,(10u,2u));
+label.rt(btex $\bullet\ $symbol\ $\uparrow\ \in\ $rule$\_$in$\_$stbl, T$\_$in$\_$stbl, kw$\_$in$\_$stbl, th$\_$in$\_$stbl, tth$\_$in$\_$stbl etex,(10u,1u));
+endfig;
+
+beginfig(2);
+% outline rule-in-stbl
+label.rt(btex rule$\_$in$\_$stbl: etex,(1u,10u));
+label.rt(btex $\bullet\ $stbl index etex,(2u,9u));
+label.rt(btex $\bullet\ $rule$\_$def\ $\uparrow$ etex,(2u,8u));
+ label.rt(btex $\bullet\ $auto delete\ $\bullet\ $ auto abort etex,(3u,7u));
+ label.rt(btex $\bullet\ $contains an epsilon subrule etex,(3u,6u));
+ label.rt(btex $\bullet\ $rule name etex,(3u,5u));
+ label.rt(btex $\bullet\ $parallel$\_$monitor$\_$phrase$\uparrow$ etex,(3u,4u));
+ label.rt(btex $\bullet\ $subrules$\_$phrase$\uparrow$ etex,(3u,3u));
+ label.rt(btex $\bullet\ $rule$\_$lhs$\_$phrase$\uparrow$ etex,(3u,2u));
+ label.rt(btex $\bullet\ $lhs directives map\ --- $<$string, CAbs$\_$lr1$\_$sym$\uparrow > $ etex,(3u,1u));
+
+label.rt(btex $\bullet\ $list of refered$\_$rule $\uparrow$ etex,(2u,0u));
+ label.rt(btex $\bullet\ $referenced rule \ --- rule$\_$in$\_$stbl$\uparrow$ etex,(3u,-1u));
+
+
+% outline T-in-stbl
+label.rt(btex T$\_$in$\_$stbl: etex,(19u,10u));
+label.rt(btex $\bullet\ $stbl index etex,(20u,9u));
+label.rt(btex $\bullet\ $terminal$\_$def\ $\uparrow$ etex,(20u,8u));
+ label.rt(btex $\bullet\ $auto delete\ $\bullet\ $ auto abort etex,(21u,7u));
+ label.rt(btex $\bullet\ $terminal name etex,(21u,6u));
+ label.rt(btex $\bullet\ $class name etex,(21u,5u));
+ label.rt(btex $\bullet\ $directives map\ --- $<$string, CAbs$\_$lr1$\_$sym$\uparrow > $ etex,(21u,4u));
+
+label.rt(btex $\bullet\ $list of refered$\_$T $\uparrow$ etex,(20u,3u));
+ label.rt(btex $\bullet\ $referenced terminal \ --- T$\_$in$\_$stbl$\uparrow$ etex,(21u,2u));
+
+% outline th-in-stbl
+label.rt(btex th$\_$in$\_$stbl: Linker only etex,(1u,-3u));
+label.rt(btex $\bullet\ $stbl index etex,(2u,-4u));
+label.rt(btex $\bullet\ $thread$\_$attributes\ $\uparrow$ etex,(2u,-5u));
+ label.rt(btex $\bullet\ $transitive\ $\bullet\ $ monolithic etex,(3u,-6u));
+ label.rt(btex $\bullet\ $grammar name etex,(3u,-7u));
+ label.rt(btex $\bullet\ $namespace name etex,(3u,-8u));
+ label.rt(btex $\bullet\ $thread name etex,(3u,-9u));
+ label.rt(btex $\bullet\ $file name etex,(3u,-10u));
+ label.rt(btex $\bullet\ $enumeration value etex,(3u,-11u));
+
+
+% outline tth-in-stbl - linker's terminals
+label.rt(btex tth$\_$in$\_$stbl: Linker only etex,(19u,-3u));
+label.rt(btex $\bullet\ $stbl index etex,(20u,-4u));
+label.rt(btex $\bullet\ $T$\_$attributes\ $\uparrow$ etex,(20u,-5u));
+ label.rt(btex $\bullet\ $fully qualified name etex,(21u,-6u));
+ label.rt(btex $\bullet\ $enumeration value etex,(21u,-7u));
+
+% outline kw-in-stbl
+label.rt(btex kw$\_$in$\_$stbl: etex,(19u,-9u));
+label.rt(btex $\bullet\ $stbl index etex,(20u,-10u));
+label.rt(btex $\bullet\ $CAbs$\_$lr1$\_$sym\ $\uparrow$ etex,(20u,-11u));
+endfig;
+end;
diff --git a/web/yacco2/docs/Err.pdf b/web/yacco2/docs/Err.pdf
new file mode 100644
index 0000000000..897dd29ad4
--- /dev/null
+++ b/web/yacco2/docs/Err.pdf
Binary files differ
diff --git a/web/yacco2/docs/Lrk.pdf b/web/yacco2/docs/Lrk.pdf
new file mode 100644
index 0000000000..7cc4700d85
--- /dev/null
+++ b/web/yacco2/docs/Lrk.pdf
Binary files differ
diff --git a/web/yacco2/docs/T.pdf b/web/yacco2/docs/T.pdf
new file mode 100644
index 0000000000..1a0e3765f9
--- /dev/null
+++ b/web/yacco2/docs/T.pdf
Binary files differ
diff --git a/web/yacco2/docs/T_enum_phrase.pdf b/web/yacco2/docs/T_enum_phrase.pdf
new file mode 100644
index 0000000000..24bf2e515a
--- /dev/null
+++ b/web/yacco2/docs/T_enum_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/T_enum_phrase_idx.pdf b/web/yacco2/docs/T_enum_phrase_idx.pdf
new file mode 100644
index 0000000000..c10f7f7b45
--- /dev/null
+++ b/web/yacco2/docs/T_enum_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/T_enum_phrase_th.pdf b/web/yacco2/docs/T_enum_phrase_th.pdf
new file mode 100644
index 0000000000..606590f079
--- /dev/null
+++ b/web/yacco2/docs/T_enum_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/T_enum_phrase_th_idx.pdf b/web/yacco2/docs/T_enum_phrase_th_idx.pdf
new file mode 100644
index 0000000000..82bb8c59dc
--- /dev/null
+++ b/web/yacco2/docs/T_enum_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/angled_string.pdf b/web/yacco2/docs/angled_string.pdf
new file mode 100644
index 0000000000..37da421287
--- /dev/null
+++ b/web/yacco2/docs/angled_string.pdf
Binary files differ
diff --git a/web/yacco2/docs/angled_string_idx.pdf b/web/yacco2/docs/angled_string_idx.pdf
new file mode 100644
index 0000000000..6fdd41dfb0
--- /dev/null
+++ b/web/yacco2/docs/angled_string_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/bad_char_set.pdf b/web/yacco2/docs/bad_char_set.pdf
new file mode 100644
index 0000000000..a97fe55461
--- /dev/null
+++ b/web/yacco2/docs/bad_char_set.pdf
Binary files differ
diff --git a/web/yacco2/docs/bad_char_set_idx.pdf b/web/yacco2/docs/bad_char_set_idx.pdf
new file mode 100644
index 0000000000..acf1b6628d
--- /dev/null
+++ b/web/yacco2/docs/bad_char_set_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_comments.pdf b/web/yacco2/docs/c_comments.pdf
new file mode 100644
index 0000000000..80dbf4b302
--- /dev/null
+++ b/web/yacco2/docs/c_comments.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_comments_idx.pdf b/web/yacco2/docs/c_comments_idx.pdf
new file mode 100644
index 0000000000..6d4b307477
--- /dev/null
+++ b/web/yacco2/docs/c_comments_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_k_of_cweb_or_cpp.pdf b/web/yacco2/docs/c_k_of_cweb_or_cpp.pdf
new file mode 100644
index 0000000000..5f05145324
--- /dev/null
+++ b/web/yacco2/docs/c_k_of_cweb_or_cpp.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_k_of_cweb_or_cpp_idx.pdf b/web/yacco2/docs/c_k_of_cweb_or_cpp_idx.pdf
new file mode 100644
index 0000000000..c83efa9d8d
--- /dev/null
+++ b/web/yacco2/docs/c_k_of_cweb_or_cpp_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_literal.pdf b/web/yacco2/docs/c_literal.pdf
new file mode 100644
index 0000000000..1ba92c765d
--- /dev/null
+++ b/web/yacco2/docs/c_literal.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_literal_idx.pdf b/web/yacco2/docs/c_literal_idx.pdf
new file mode 100644
index 0000000000..90d9135cad
--- /dev/null
+++ b/web/yacco2/docs/c_literal_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_string.pdf b/web/yacco2/docs/c_string.pdf
new file mode 100644
index 0000000000..24864de58a
--- /dev/null
+++ b/web/yacco2/docs/c_string.pdf
Binary files differ
diff --git a/web/yacco2/docs/c_string_idx.pdf b/web/yacco2/docs/c_string_idx.pdf
new file mode 100644
index 0000000000..f01c3be5b4
--- /dev/null
+++ b/web/yacco2/docs/c_string_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/common_externs.pdf b/web/yacco2/docs/common_externs.pdf
new file mode 100644
index 0000000000..1c64adcf58
--- /dev/null
+++ b/web/yacco2/docs/common_externs.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_T_sdc.pdf b/web/yacco2/docs/cweave_T_sdc.pdf
new file mode 100644
index 0000000000..2c0580d124
--- /dev/null
+++ b/web/yacco2/docs/cweave_T_sdc.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_T_sdc_idx.pdf b/web/yacco2/docs/cweave_T_sdc_idx.pdf
new file mode 100644
index 0000000000..da8c2201ec
--- /dev/null
+++ b/web/yacco2/docs/cweave_T_sdc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_fsm_sdc.pdf b/web/yacco2/docs/cweave_fsm_sdc.pdf
new file mode 100644
index 0000000000..834974c14e
--- /dev/null
+++ b/web/yacco2/docs/cweave_fsm_sdc.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_fsm_sdc_idx.pdf b/web/yacco2/docs/cweave_fsm_sdc_idx.pdf
new file mode 100644
index 0000000000..8dc991bebe
--- /dev/null
+++ b/web/yacco2/docs/cweave_fsm_sdc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_lhs_sdc.pdf b/web/yacco2/docs/cweave_lhs_sdc.pdf
new file mode 100644
index 0000000000..bcb18c2209
--- /dev/null
+++ b/web/yacco2/docs/cweave_lhs_sdc.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_lhs_sdc_idx.pdf b/web/yacco2/docs/cweave_lhs_sdc_idx.pdf
new file mode 100644
index 0000000000..9ca25ccc61
--- /dev/null
+++ b/web/yacco2/docs/cweave_lhs_sdc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_sdc.pdf b/web/yacco2/docs/cweave_sdc.pdf
new file mode 100644
index 0000000000..b913e2d842
--- /dev/null
+++ b/web/yacco2/docs/cweave_sdc.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweave_sdc_idx.pdf b/web/yacco2/docs/cweave_sdc_idx.pdf
new file mode 100644
index 0000000000..56cd4f509f
--- /dev/null
+++ b/web/yacco2/docs/cweave_sdc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweb_or_c_k.pdf b/web/yacco2/docs/cweb_or_c_k.pdf
new file mode 100644
index 0000000000..c0e2b27b6f
--- /dev/null
+++ b/web/yacco2/docs/cweb_or_c_k.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweb_or_c_k_idx.pdf b/web/yacco2/docs/cweb_or_c_k_idx.pdf
new file mode 100644
index 0000000000..e3d50ce875
--- /dev/null
+++ b/web/yacco2/docs/cweb_or_c_k_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweb_put_k_into_ph.pdf b/web/yacco2/docs/cweb_put_k_into_ph.pdf
new file mode 100644
index 0000000000..4326c38e09
--- /dev/null
+++ b/web/yacco2/docs/cweb_put_k_into_ph.pdf
Binary files differ
diff --git a/web/yacco2/docs/cweb_put_k_into_ph_idx.pdf b/web/yacco2/docs/cweb_put_k_into_ph_idx.pdf
new file mode 100644
index 0000000000..d80dc3d539
--- /dev/null
+++ b/web/yacco2/docs/cweb_put_k_into_ph_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/dbl_colon.pdf b/web/yacco2/docs/dbl_colon.pdf
new file mode 100644
index 0000000000..e2322314ec
--- /dev/null
+++ b/web/yacco2/docs/dbl_colon.pdf
Binary files differ
diff --git a/web/yacco2/docs/dbl_colon_idx.pdf b/web/yacco2/docs/dbl_colon_idx.pdf
new file mode 100644
index 0000000000..dbccaed992
--- /dev/null
+++ b/web/yacco2/docs/dbl_colon_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/dp_1.pdf b/web/yacco2/docs/dp_1.pdf
new file mode 100644
index 0000000000..690fde8349
--- /dev/null
+++ b/web/yacco2/docs/dp_1.pdf
Binary files differ
diff --git a/web/yacco2/docs/dp_1_idx.pdf b/web/yacco2/docs/dp_1_idx.pdf
new file mode 100644
index 0000000000..9ecf9fcaf0
--- /dev/null
+++ b/web/yacco2/docs/dp_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/dp_2.pdf b/web/yacco2/docs/dp_2.pdf
new file mode 100644
index 0000000000..a8f703a013
--- /dev/null
+++ b/web/yacco2/docs/dp_2.pdf
Binary files differ
diff --git a/web/yacco2/docs/dp_2_idx.pdf b/web/yacco2/docs/dp_2_idx.pdf
new file mode 100644
index 0000000000..edd3639312
--- /dev/null
+++ b/web/yacco2/docs/dp_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/enumerate_T_alphabet.pdf b/web/yacco2/docs/enumerate_T_alphabet.pdf
new file mode 100644
index 0000000000..0d12126ce6
--- /dev/null
+++ b/web/yacco2/docs/enumerate_T_alphabet.pdf
Binary files differ
diff --git a/web/yacco2/docs/enumerate_T_alphabet_idx.pdf b/web/yacco2/docs/enumerate_T_alphabet_idx.pdf
new file mode 100644
index 0000000000..1f34ad7be8
--- /dev/null
+++ b/web/yacco2/docs/enumerate_T_alphabet_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/enumerate_grammar.pdf b/web/yacco2/docs/enumerate_grammar.pdf
new file mode 100644
index 0000000000..fa0ff6d621
--- /dev/null
+++ b/web/yacco2/docs/enumerate_grammar.pdf
Binary files differ
diff --git a/web/yacco2/docs/enumerate_grammar_idx.pdf b/web/yacco2/docs/enumerate_grammar_idx.pdf
new file mode 100644
index 0000000000..216e2996c6
--- /dev/null
+++ b/web/yacco2/docs/enumerate_grammar_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/eol.pdf b/web/yacco2/docs/eol.pdf
new file mode 100644
index 0000000000..52f976012c
--- /dev/null
+++ b/web/yacco2/docs/eol.pdf
Binary files differ
diff --git a/web/yacco2/docs/eol_idx.pdf b/web/yacco2/docs/eol_idx.pdf
new file mode 100644
index 0000000000..8bc2b02452
--- /dev/null
+++ b/web/yacco2/docs/eol_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/epsilon_rules.pdf b/web/yacco2/docs/epsilon_rules.pdf
new file mode 100644
index 0000000000..be1464a423
--- /dev/null
+++ b/web/yacco2/docs/epsilon_rules.pdf
Binary files differ
diff --git a/web/yacco2/docs/epsilon_rules_idx.pdf b/web/yacco2/docs/epsilon_rules_idx.pdf
new file mode 100644
index 0000000000..ecece14489
--- /dev/null
+++ b/web/yacco2/docs/epsilon_rules_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/err_symbols_ph.pdf b/web/yacco2/docs/err_symbols_ph.pdf
new file mode 100644
index 0000000000..cdf33a5194
--- /dev/null
+++ b/web/yacco2/docs/err_symbols_ph.pdf
Binary files differ
diff --git a/web/yacco2/docs/err_symbols_ph_idx.pdf b/web/yacco2/docs/err_symbols_ph_idx.pdf
new file mode 100644
index 0000000000..8c226efb97
--- /dev/null
+++ b/web/yacco2/docs/err_symbols_ph_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/err_symbols_ph_th.pdf b/web/yacco2/docs/err_symbols_ph_th.pdf
new file mode 100644
index 0000000000..e7d59ce362
--- /dev/null
+++ b/web/yacco2/docs/err_symbols_ph_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/err_symbols_ph_th_idx.pdf b/web/yacco2/docs/err_symbols_ph_th_idx.pdf
new file mode 100644
index 0000000000..0bcf6a3cad
--- /dev/null
+++ b/web/yacco2/docs/err_symbols_ph_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/esc_seq.pdf b/web/yacco2/docs/esc_seq.pdf
new file mode 100644
index 0000000000..3fa80e2340
--- /dev/null
+++ b/web/yacco2/docs/esc_seq.pdf
Binary files differ
diff --git a/web/yacco2/docs/esc_seq_idx.pdf b/web/yacco2/docs/esc_seq_idx.pdf
new file mode 100644
index 0000000000..e977d5f786
--- /dev/null
+++ b/web/yacco2/docs/esc_seq_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/eval_phrases.pdf b/web/yacco2/docs/eval_phrases.pdf
new file mode 100644
index 0000000000..487b0e03c5
--- /dev/null
+++ b/web/yacco2/docs/eval_phrases.pdf
Binary files differ
diff --git a/web/yacco2/docs/eval_phrases_idx.pdf b/web/yacco2/docs/eval_phrases_idx.pdf
new file mode 100644
index 0000000000..e0b8938c5a
--- /dev/null
+++ b/web/yacco2/docs/eval_phrases_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/first_set_for_threads.pdf b/web/yacco2/docs/first_set_for_threads.pdf
new file mode 100644
index 0000000000..c2f2de54a4
--- /dev/null
+++ b/web/yacco2/docs/first_set_for_threads.pdf
Binary files differ
diff --git a/web/yacco2/docs/first_set_for_threads_idx.pdf b/web/yacco2/docs/first_set_for_threads_idx.pdf
new file mode 100644
index 0000000000..8852cd01e2
--- /dev/null
+++ b/web/yacco2/docs/first_set_for_threads_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/first_set_rules.pdf b/web/yacco2/docs/first_set_rules.pdf
new file mode 100644
index 0000000000..3c4401008e
--- /dev/null
+++ b/web/yacco2/docs/first_set_rules.pdf
Binary files differ
diff --git a/web/yacco2/docs/first_set_rules_idx.pdf b/web/yacco2/docs/first_set_rules_idx.pdf
new file mode 100644
index 0000000000..e677f4da5b
--- /dev/null
+++ b/web/yacco2/docs/first_set_rules_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsc_file.pdf b/web/yacco2/docs/fsc_file.pdf
new file mode 100644
index 0000000000..02cdff680e
--- /dev/null
+++ b/web/yacco2/docs/fsc_file.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsc_file_idx.pdf b/web/yacco2/docs/fsc_file_idx.pdf
new file mode 100644
index 0000000000..00e47aed94
--- /dev/null
+++ b/web/yacco2/docs/fsc_file_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_class_phrase_th.pdf b/web/yacco2/docs/fsm_class_phrase_th.pdf
new file mode 100644
index 0000000000..9bd9f1dc05
--- /dev/null
+++ b/web/yacco2/docs/fsm_class_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_class_phrase_th_idx.pdf b/web/yacco2/docs/fsm_class_phrase_th_idx.pdf
new file mode 100644
index 0000000000..92e6798ef7
--- /dev/null
+++ b/web/yacco2/docs/fsm_class_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_phrase.pdf b/web/yacco2/docs/fsm_phrase.pdf
new file mode 100644
index 0000000000..5e9fc216f5
--- /dev/null
+++ b/web/yacco2/docs/fsm_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_phrase_idx.pdf b/web/yacco2/docs/fsm_phrase_idx.pdf
new file mode 100644
index 0000000000..257233056c
--- /dev/null
+++ b/web/yacco2/docs/fsm_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_phrase_th.pdf b/web/yacco2/docs/fsm_phrase_th.pdf
new file mode 100644
index 0000000000..ec18978c3b
--- /dev/null
+++ b/web/yacco2/docs/fsm_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/fsm_phrase_th_idx.pdf b/web/yacco2/docs/fsm_phrase_th_idx.pdf
new file mode 100644
index 0000000000..6b0ca94867
--- /dev/null
+++ b/web/yacco2/docs/fsm_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/identifier.pdf b/web/yacco2/docs/identifier.pdf
new file mode 100644
index 0000000000..5e70f04a34
--- /dev/null
+++ b/web/yacco2/docs/identifier.pdf
Binary files differ
diff --git a/web/yacco2/docs/identifier_idx.pdf b/web/yacco2/docs/identifier_idx.pdf
new file mode 100644
index 0000000000..3ee9e9f8e5
--- /dev/null
+++ b/web/yacco2/docs/identifier_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/int_no.pdf b/web/yacco2/docs/int_no.pdf
new file mode 100644
index 0000000000..26e046d8f9
--- /dev/null
+++ b/web/yacco2/docs/int_no.pdf
Binary files differ
diff --git a/web/yacco2/docs/int_no_idx.pdf b/web/yacco2/docs/int_no_idx.pdf
new file mode 100644
index 0000000000..1ac4909136
--- /dev/null
+++ b/web/yacco2/docs/int_no_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/km_1.pdf b/web/yacco2/docs/km_1.pdf
new file mode 100644
index 0000000000..ad91390311
--- /dev/null
+++ b/web/yacco2/docs/km_1.pdf
Binary files differ
diff --git a/web/yacco2/docs/km_1_idx.pdf b/web/yacco2/docs/km_1_idx.pdf
new file mode 100644
index 0000000000..14b0f38c5c
--- /dev/null
+++ b/web/yacco2/docs/km_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr.pdf b/web/yacco2/docs/la_expr.pdf
new file mode 100644
index 0000000000..b12d575b6f
--- /dev/null
+++ b/web/yacco2/docs/la_expr.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr_idx.pdf b/web/yacco2/docs/la_expr_idx.pdf
new file mode 100644
index 0000000000..5ac3f7dde3
--- /dev/null
+++ b/web/yacco2/docs/la_expr_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr_lexical.pdf b/web/yacco2/docs/la_expr_lexical.pdf
new file mode 100644
index 0000000000..5da298e334
--- /dev/null
+++ b/web/yacco2/docs/la_expr_lexical.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr_lexical_idx.pdf b/web/yacco2/docs/la_expr_lexical_idx.pdf
new file mode 100644
index 0000000000..56923c693c
--- /dev/null
+++ b/web/yacco2/docs/la_expr_lexical_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr_src.pdf b/web/yacco2/docs/la_expr_src.pdf
new file mode 100644
index 0000000000..4c86c11573
--- /dev/null
+++ b/web/yacco2/docs/la_expr_src.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_expr_src_idx.pdf b/web/yacco2/docs/la_expr_src_idx.pdf
new file mode 100644
index 0000000000..6f4747cedf
--- /dev/null
+++ b/web/yacco2/docs/la_expr_src_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_lrk_T.pdf b/web/yacco2/docs/la_lrk_T.pdf
new file mode 100644
index 0000000000..fde7142edb
--- /dev/null
+++ b/web/yacco2/docs/la_lrk_T.pdf
Binary files differ
diff --git a/web/yacco2/docs/la_lrk_T_idx.pdf b/web/yacco2/docs/la_lrk_T_idx.pdf
new file mode 100644
index 0000000000..e2e8cb7391
--- /dev/null
+++ b/web/yacco2/docs/la_lrk_T_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/link_cleanser.pdf b/web/yacco2/docs/link_cleanser.pdf
new file mode 100644
index 0000000000..e86c06d351
--- /dev/null
+++ b/web/yacco2/docs/link_cleanser.pdf
Binary files differ
diff --git a/web/yacco2/docs/link_cleanser_idx.pdf b/web/yacco2/docs/link_cleanser_idx.pdf
new file mode 100644
index 0000000000..a14eed7d3b
--- /dev/null
+++ b/web/yacco2/docs/link_cleanser_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_id.pdf b/web/yacco2/docs/linker_id.pdf
new file mode 100644
index 0000000000..04203108b6
--- /dev/null
+++ b/web/yacco2/docs/linker_id.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_id_idx.pdf b/web/yacco2/docs/linker_id_idx.pdf
new file mode 100644
index 0000000000..7d475b0ea6
--- /dev/null
+++ b/web/yacco2/docs/linker_id_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_pass3.pdf b/web/yacco2/docs/linker_pass3.pdf
new file mode 100644
index 0000000000..cd9df8f8ef
--- /dev/null
+++ b/web/yacco2/docs/linker_pass3.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_pass3_idx.pdf b/web/yacco2/docs/linker_pass3_idx.pdf
new file mode 100644
index 0000000000..7c34e7c12f
--- /dev/null
+++ b/web/yacco2/docs/linker_pass3_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_preamble_code.pdf b/web/yacco2/docs/linker_preamble_code.pdf
new file mode 100644
index 0000000000..7baf1d25a1
--- /dev/null
+++ b/web/yacco2/docs/linker_preamble_code.pdf
Binary files differ
diff --git a/web/yacco2/docs/linker_preamble_code_idx.pdf b/web/yacco2/docs/linker_preamble_code_idx.pdf
new file mode 100644
index 0000000000..77d5b82686
--- /dev/null
+++ b/web/yacco2/docs/linker_preamble_code_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/lint_balls.pdf b/web/yacco2/docs/lint_balls.pdf
new file mode 100644
index 0000000000..3b331df65a
--- /dev/null
+++ b/web/yacco2/docs/lint_balls.pdf
Binary files differ
diff --git a/web/yacco2/docs/lint_balls_idx.pdf b/web/yacco2/docs/lint_balls_idx.pdf
new file mode 100644
index 0000000000..a653501510
--- /dev/null
+++ b/web/yacco2/docs/lint_balls_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/lr1_k_phrase.pdf b/web/yacco2/docs/lr1_k_phrase.pdf
new file mode 100644
index 0000000000..bc96112bb9
--- /dev/null
+++ b/web/yacco2/docs/lr1_k_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/lr1_k_phrase_idx.pdf b/web/yacco2/docs/lr1_k_phrase_idx.pdf
new file mode 100644
index 0000000000..71588fd0e5
--- /dev/null
+++ b/web/yacco2/docs/lr1_k_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/lr1_k_phrase_th.pdf b/web/yacco2/docs/lr1_k_phrase_th.pdf
new file mode 100644
index 0000000000..462ac7c38e
--- /dev/null
+++ b/web/yacco2/docs/lr1_k_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/lr1_k_phrase_th_idx.pdf b/web/yacco2/docs/lr1_k_phrase_th_idx.pdf
new file mode 100644
index 0000000000..2066cba2a2
--- /dev/null
+++ b/web/yacco2/docs/lr1_k_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/mpost_output.pdf b/web/yacco2/docs/mpost_output.pdf
new file mode 100644
index 0000000000..ccc3a9a868
--- /dev/null
+++ b/web/yacco2/docs/mpost_output.pdf
Binary files differ
diff --git a/web/yacco2/docs/mpost_output_idx.pdf b/web/yacco2/docs/mpost_output_idx.pdf
new file mode 100644
index 0000000000..fc1559af06
--- /dev/null
+++ b/web/yacco2/docs/mpost_output_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2.pdf b/web/yacco2/docs/o2.pdf
new file mode 100644
index 0000000000..c91858cd3e
--- /dev/null
+++ b/web/yacco2/docs/o2.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_code_end.pdf b/web/yacco2/docs/o2_code_end.pdf
new file mode 100644
index 0000000000..81dd50ea8b
--- /dev/null
+++ b/web/yacco2/docs/o2_code_end.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_code_end_idx.pdf b/web/yacco2/docs/o2_code_end_idx.pdf
new file mode 100644
index 0000000000..a642d806e9
--- /dev/null
+++ b/web/yacco2/docs/o2_code_end_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_err_hdlr.pdf b/web/yacco2/docs/o2_err_hdlr.pdf
new file mode 100644
index 0000000000..12a19a708f
--- /dev/null
+++ b/web/yacco2/docs/o2_err_hdlr.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_err_hdlr_idx.pdf b/web/yacco2/docs/o2_err_hdlr_idx.pdf
new file mode 100644
index 0000000000..1872687671
--- /dev/null
+++ b/web/yacco2/docs/o2_err_hdlr_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_lcl_opt.pdf b/web/yacco2/docs/o2_lcl_opt.pdf
new file mode 100644
index 0000000000..17fb95a91c
--- /dev/null
+++ b/web/yacco2/docs/o2_lcl_opt.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_lcl_opt_idx.pdf b/web/yacco2/docs/o2_lcl_opt_idx.pdf
new file mode 100644
index 0000000000..ac5ec9bf48
--- /dev/null
+++ b/web/yacco2/docs/o2_lcl_opt_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_lcl_opts.pdf b/web/yacco2/docs/o2_lcl_opts.pdf
new file mode 100644
index 0000000000..8d6a77bf43
--- /dev/null
+++ b/web/yacco2/docs/o2_lcl_opts.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_lcl_opts_idx.pdf b/web/yacco2/docs/o2_lcl_opts_idx.pdf
new file mode 100644
index 0000000000..9be1189ca7
--- /dev/null
+++ b/web/yacco2/docs/o2_lcl_opts_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_linker_opts.pdf b/web/yacco2/docs/o2_linker_opts.pdf
new file mode 100644
index 0000000000..97a01388ea
--- /dev/null
+++ b/web/yacco2/docs/o2_linker_opts.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_linker_opts_idx.pdf b/web/yacco2/docs/o2_linker_opts_idx.pdf
new file mode 100644
index 0000000000..77fd73a8b8
--- /dev/null
+++ b/web/yacco2/docs/o2_linker_opts_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_sdc.pdf b/web/yacco2/docs/o2_sdc.pdf
new file mode 100644
index 0000000000..155a0ec5df
--- /dev/null
+++ b/web/yacco2/docs/o2_sdc.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_sdc_idx.pdf b/web/yacco2/docs/o2_sdc_idx.pdf
new file mode 100644
index 0000000000..0c6c5aea70
--- /dev/null
+++ b/web/yacco2/docs/o2_sdc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2_types.pdf b/web/yacco2/docs/o2_types.pdf
new file mode 100644
index 0000000000..c157d54671
--- /dev/null
+++ b/web/yacco2/docs/o2_types.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2book.pdf b/web/yacco2/docs/o2book.pdf
new file mode 100644
index 0000000000..392ae27062
--- /dev/null
+++ b/web/yacco2/docs/o2book.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2externs.pdf b/web/yacco2/docs/o2externs.pdf
new file mode 100644
index 0000000000..5a88ae13d7
--- /dev/null
+++ b/web/yacco2/docs/o2externs.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2linker.pdf b/web/yacco2/docs/o2linker.pdf
new file mode 100644
index 0000000000..cb3b31d611
--- /dev/null
+++ b/web/yacco2/docs/o2linker.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2linker_doc.pdf b/web/yacco2/docs/o2linker_doc.pdf
new file mode 100644
index 0000000000..90cae7944b
--- /dev/null
+++ b/web/yacco2/docs/o2linker_doc.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2linker_externs.pdf b/web/yacco2/docs/o2linker_externs.pdf
new file mode 100644
index 0000000000..16b520eed1
--- /dev/null
+++ b/web/yacco2/docs/o2linker_externs.pdf
Binary files differ
diff --git a/web/yacco2/docs/o2linker_types.pdf b/web/yacco2/docs/o2linker_types.pdf
new file mode 100644
index 0000000000..26271a63e8
--- /dev/null
+++ b/web/yacco2/docs/o2linker_types.pdf
Binary files differ
diff --git a/web/yacco2/docs/p1.pdf b/web/yacco2/docs/p1.pdf
new file mode 100644
index 0000000000..6ac76cf75a
--- /dev/null
+++ b/web/yacco2/docs/p1.pdf
Binary files differ
diff --git a/web/yacco2/docs/p2.pdf b/web/yacco2/docs/p2.pdf
new file mode 100644
index 0000000000..18a28e1198
--- /dev/null
+++ b/web/yacco2/docs/p2.pdf
Binary files differ
diff --git a/web/yacco2/docs/pager_1.pdf b/web/yacco2/docs/pager_1.pdf
new file mode 100644
index 0000000000..a77afc2827
--- /dev/null
+++ b/web/yacco2/docs/pager_1.pdf
Binary files differ
diff --git a/web/yacco2/docs/pager_1_idx.pdf b/web/yacco2/docs/pager_1_idx.pdf
new file mode 100644
index 0000000000..a47ad6a323
--- /dev/null
+++ b/web/yacco2/docs/pager_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/pager_2.pdf b/web/yacco2/docs/pager_2.pdf
new file mode 100644
index 0000000000..cbd32124d5
--- /dev/null
+++ b/web/yacco2/docs/pager_2.pdf
Binary files differ
diff --git a/web/yacco2/docs/pager_2_idx.pdf b/web/yacco2/docs/pager_2_idx.pdf
new file mode 100644
index 0000000000..04975c3019
--- /dev/null
+++ b/web/yacco2/docs/pager_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_monitor_ph.pdf b/web/yacco2/docs/parallel_monitor_ph.pdf
new file mode 100644
index 0000000000..d2a4bb7e99
--- /dev/null
+++ b/web/yacco2/docs/parallel_monitor_ph.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_monitor_ph_idx.pdf b/web/yacco2/docs/parallel_monitor_ph_idx.pdf
new file mode 100644
index 0000000000..d367a59f61
--- /dev/null
+++ b/web/yacco2/docs/parallel_monitor_ph_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_oper.pdf b/web/yacco2/docs/parallel_oper.pdf
new file mode 100644
index 0000000000..9768c1e732
--- /dev/null
+++ b/web/yacco2/docs/parallel_oper.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_oper_idx.pdf b/web/yacco2/docs/parallel_oper_idx.pdf
new file mode 100644
index 0000000000..fe568caf6e
--- /dev/null
+++ b/web/yacco2/docs/parallel_oper_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_parser_ph_th.pdf b/web/yacco2/docs/parallel_parser_ph_th.pdf
new file mode 100644
index 0000000000..a6cf2f82fd
--- /dev/null
+++ b/web/yacco2/docs/parallel_parser_ph_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_parser_ph_th_idx.pdf b/web/yacco2/docs/parallel_parser_ph_th_idx.pdf
new file mode 100644
index 0000000000..e7e0410a03
--- /dev/null
+++ b/web/yacco2/docs/parallel_parser_ph_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_parser_phrase.pdf b/web/yacco2/docs/parallel_parser_phrase.pdf
new file mode 100644
index 0000000000..5328f4986e
--- /dev/null
+++ b/web/yacco2/docs/parallel_parser_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/parallel_parser_phrase_idx.pdf b/web/yacco2/docs/parallel_parser_phrase_idx.pdf
new file mode 100644
index 0000000000..79b509a353
--- /dev/null
+++ b/web/yacco2/docs/parallel_parser_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/pass3.pdf b/web/yacco2/docs/pass3.pdf
new file mode 100644
index 0000000000..0941ddcc3c
--- /dev/null
+++ b/web/yacco2/docs/pass3.pdf
Binary files differ
diff --git a/web/yacco2/docs/pass3_idx.pdf b/web/yacco2/docs/pass3_idx.pdf
new file mode 100644
index 0000000000..383475df0a
--- /dev/null
+++ b/web/yacco2/docs/pass3_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/prefile_inc.pdf b/web/yacco2/docs/prefile_inc.pdf
new file mode 100644
index 0000000000..e04250659a
--- /dev/null
+++ b/web/yacco2/docs/prefile_inc.pdf
Binary files differ
diff --git a/web/yacco2/docs/prefile_inc_idx.pdf b/web/yacco2/docs/prefile_inc_idx.pdf
new file mode 100644
index 0000000000..900ae5ff2a
--- /dev/null
+++ b/web/yacco2/docs/prefile_inc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/prefile_include.pdf b/web/yacco2/docs/prefile_include.pdf
new file mode 100644
index 0000000000..510ecb509c
--- /dev/null
+++ b/web/yacco2/docs/prefile_include.pdf
Binary files differ
diff --git a/web/yacco2/docs/prefile_include_idx.pdf b/web/yacco2/docs/prefile_include_idx.pdf
new file mode 100644
index 0000000000..64c60843d7
--- /dev/null
+++ b/web/yacco2/docs/prefile_include_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_fs_of_rules.pdf b/web/yacco2/docs/prt_fs_of_rules.pdf
new file mode 100644
index 0000000000..38db64ac13
--- /dev/null
+++ b/web/yacco2/docs/prt_fs_of_rules.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_fs_of_rules_idx.pdf b/web/yacco2/docs/prt_fs_of_rules_idx.pdf
new file mode 100644
index 0000000000..b98a208faa
--- /dev/null
+++ b/web/yacco2/docs/prt_fs_of_rules_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_sr_elements.pdf b/web/yacco2/docs/prt_sr_elements.pdf
new file mode 100644
index 0000000000..266df5c66c
--- /dev/null
+++ b/web/yacco2/docs/prt_sr_elements.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_sr_elements_idx.pdf b/web/yacco2/docs/prt_sr_elements_idx.pdf
new file mode 100644
index 0000000000..c002390573
--- /dev/null
+++ b/web/yacco2/docs/prt_sr_elements_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_xrefs_docs.pdf b/web/yacco2/docs/prt_xrefs_docs.pdf
new file mode 100644
index 0000000000..f6dcd78760
--- /dev/null
+++ b/web/yacco2/docs/prt_xrefs_docs.pdf
Binary files differ
diff --git a/web/yacco2/docs/prt_xrefs_docs_idx.pdf b/web/yacco2/docs/prt_xrefs_docs_idx.pdf
new file mode 100644
index 0000000000..58eb71141a
--- /dev/null
+++ b/web/yacco2/docs/prt_xrefs_docs_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rc_phrase.pdf b/web/yacco2/docs/rc_phrase.pdf
new file mode 100644
index 0000000000..e05f5437fc
--- /dev/null
+++ b/web/yacco2/docs/rc_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/rc_phrase_idx.pdf b/web/yacco2/docs/rc_phrase_idx.pdf
new file mode 100644
index 0000000000..f2f8be5e0f
--- /dev/null
+++ b/web/yacco2/docs/rc_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rc_phrase_th.pdf b/web/yacco2/docs/rc_phrase_th.pdf
new file mode 100644
index 0000000000..cde3878a44
--- /dev/null
+++ b/web/yacco2/docs/rc_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/rc_phrase_th_idx.pdf b/web/yacco2/docs/rc_phrase_th_idx.pdf
new file mode 100644
index 0000000000..236ea34b39
--- /dev/null
+++ b/web/yacco2/docs/rc_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rhs_bnd.pdf b/web/yacco2/docs/rhs_bnd.pdf
new file mode 100644
index 0000000000..22c8426be5
--- /dev/null
+++ b/web/yacco2/docs/rhs_bnd.pdf
Binary files differ
diff --git a/web/yacco2/docs/rhs_bnd_idx.pdf b/web/yacco2/docs/rhs_bnd_idx.pdf
new file mode 100644
index 0000000000..e1c34af901
--- /dev/null
+++ b/web/yacco2/docs/rhs_bnd_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rhs_component.pdf b/web/yacco2/docs/rhs_component.pdf
new file mode 100644
index 0000000000..6ba4c38f63
--- /dev/null
+++ b/web/yacco2/docs/rhs_component.pdf
Binary files differ
diff --git a/web/yacco2/docs/rhs_component_idx.pdf b/web/yacco2/docs/rhs_component_idx.pdf
new file mode 100644
index 0000000000..f0b66e1efd
--- /dev/null
+++ b/web/yacco2/docs/rhs_component_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rtn_component.pdf b/web/yacco2/docs/rtn_component.pdf
new file mode 100644
index 0000000000..ecf740d2a1
--- /dev/null
+++ b/web/yacco2/docs/rtn_component.pdf
Binary files differ
diff --git a/web/yacco2/docs/rtn_component_idx.pdf b/web/yacco2/docs/rtn_component_idx.pdf
new file mode 100644
index 0000000000..ff06d20801
--- /dev/null
+++ b/web/yacco2/docs/rtn_component_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rule_def_phrase.pdf b/web/yacco2/docs/rule_def_phrase.pdf
new file mode 100644
index 0000000000..91537c7d29
--- /dev/null
+++ b/web/yacco2/docs/rule_def_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/rule_def_phrase_idx.pdf b/web/yacco2/docs/rule_def_phrase_idx.pdf
new file mode 100644
index 0000000000..19adcb574a
--- /dev/null
+++ b/web/yacco2/docs/rule_def_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rule_lhs_phrase.pdf b/web/yacco2/docs/rule_lhs_phrase.pdf
new file mode 100644
index 0000000000..70046ee3d1
--- /dev/null
+++ b/web/yacco2/docs/rule_lhs_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/rule_lhs_phrase_idx.pdf b/web/yacco2/docs/rule_lhs_phrase_idx.pdf
new file mode 100644
index 0000000000..d4e79ac1c8
--- /dev/null
+++ b/web/yacco2/docs/rule_lhs_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_phrase.pdf b/web/yacco2/docs/rules_phrase.pdf
new file mode 100644
index 0000000000..dc4abec769
--- /dev/null
+++ b/web/yacco2/docs/rules_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_phrase_idx.pdf b/web/yacco2/docs/rules_phrase_idx.pdf
new file mode 100644
index 0000000000..068d9745b0
--- /dev/null
+++ b/web/yacco2/docs/rules_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_phrase_th.pdf b/web/yacco2/docs/rules_phrase_th.pdf
new file mode 100644
index 0000000000..253f105706
--- /dev/null
+++ b/web/yacco2/docs/rules_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_phrase_th_idx.pdf b/web/yacco2/docs/rules_phrase_th_idx.pdf
new file mode 100644
index 0000000000..4c748a150d
--- /dev/null
+++ b/web/yacco2/docs/rules_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_use_cnt.pdf b/web/yacco2/docs/rules_use_cnt.pdf
new file mode 100644
index 0000000000..96ee8c7001
--- /dev/null
+++ b/web/yacco2/docs/rules_use_cnt.pdf
Binary files differ
diff --git a/web/yacco2/docs/rules_use_cnt_idx.pdf b/web/yacco2/docs/rules_use_cnt_idx.pdf
new file mode 100644
index 0000000000..2c8eac6d69
--- /dev/null
+++ b/web/yacco2/docs/rules_use_cnt_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/sp_1.pdf b/web/yacco2/docs/sp_1.pdf
new file mode 100644
index 0000000000..2a72d999dd
--- /dev/null
+++ b/web/yacco2/docs/sp_1.pdf
Binary files differ
diff --git a/web/yacco2/docs/sp_1_idx.pdf b/web/yacco2/docs/sp_1_idx.pdf
new file mode 100644
index 0000000000..7ece31cce6
--- /dev/null
+++ b/web/yacco2/docs/sp_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/sp_2.pdf b/web/yacco2/docs/sp_2.pdf
new file mode 100644
index 0000000000..145bd783dd
--- /dev/null
+++ b/web/yacco2/docs/sp_2.pdf
Binary files differ
diff --git a/web/yacco2/docs/sp_2_idx.pdf b/web/yacco2/docs/sp_2_idx.pdf
new file mode 100644
index 0000000000..0f2f875a4d
--- /dev/null
+++ b/web/yacco2/docs/sp_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrule_def.pdf b/web/yacco2/docs/subrule_def.pdf
new file mode 100644
index 0000000000..08dc818714
--- /dev/null
+++ b/web/yacco2/docs/subrule_def.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrule_def_idx.pdf b/web/yacco2/docs/subrule_def_idx.pdf
new file mode 100644
index 0000000000..a54fe861f1
--- /dev/null
+++ b/web/yacco2/docs/subrule_def_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrule_vector.pdf b/web/yacco2/docs/subrule_vector.pdf
new file mode 100644
index 0000000000..1e807da48a
--- /dev/null
+++ b/web/yacco2/docs/subrule_vector.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrule_vector_idx.pdf b/web/yacco2/docs/subrule_vector_idx.pdf
new file mode 100644
index 0000000000..6daecc97c1
--- /dev/null
+++ b/web/yacco2/docs/subrule_vector_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrules_phrase.pdf b/web/yacco2/docs/subrules_phrase.pdf
new file mode 100644
index 0000000000..1219ebfe5b
--- /dev/null
+++ b/web/yacco2/docs/subrules_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/subrules_phrase_idx.pdf b/web/yacco2/docs/subrules_phrase_idx.pdf
new file mode 100644
index 0000000000..0e0da576ed
--- /dev/null
+++ b/web/yacco2/docs/subrules_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/t_alphabet.pdf b/web/yacco2/docs/t_alphabet.pdf
new file mode 100644
index 0000000000..219644fdd8
--- /dev/null
+++ b/web/yacco2/docs/t_alphabet.pdf
Binary files differ
diff --git a/web/yacco2/docs/t_alphabet_idx.pdf b/web/yacco2/docs/t_alphabet_idx.pdf
new file mode 100644
index 0000000000..6319915493
--- /dev/null
+++ b/web/yacco2/docs/t_alphabet_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/t_def_delabort_tags.pdf b/web/yacco2/docs/t_def_delabort_tags.pdf
new file mode 100644
index 0000000000..9d9a8d5882
--- /dev/null
+++ b/web/yacco2/docs/t_def_delabort_tags.pdf
Binary files differ
diff --git a/web/yacco2/docs/t_def_delabort_tags_idx.pdf b/web/yacco2/docs/t_def_delabort_tags_idx.pdf
new file mode 100644
index 0000000000..69afc5d9a6
--- /dev/null
+++ b/web/yacco2/docs/t_def_delabort_tags_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/term_def_ph.pdf b/web/yacco2/docs/term_def_ph.pdf
new file mode 100644
index 0000000000..8b54a911b5
--- /dev/null
+++ b/web/yacco2/docs/term_def_ph.pdf
Binary files differ
diff --git a/web/yacco2/docs/term_def_ph_idx.pdf b/web/yacco2/docs/term_def_ph_idx.pdf
new file mode 100644
index 0000000000..f3aa81bb91
--- /dev/null
+++ b/web/yacco2/docs/term_def_ph_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminal_def_symclass.pdf b/web/yacco2/docs/terminal_def_symclass.pdf
new file mode 100644
index 0000000000..398d2a5507
--- /dev/null
+++ b/web/yacco2/docs/terminal_def_symclass.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminal_def_symclass_idx.pdf b/web/yacco2/docs/terminal_def_symclass_idx.pdf
new file mode 100644
index 0000000000..f393d109e3
--- /dev/null
+++ b/web/yacco2/docs/terminal_def_symclass_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminals_phrase.pdf b/web/yacco2/docs/terminals_phrase.pdf
new file mode 100644
index 0000000000..cc2db00972
--- /dev/null
+++ b/web/yacco2/docs/terminals_phrase.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminals_phrase_idx.pdf b/web/yacco2/docs/terminals_phrase_idx.pdf
new file mode 100644
index 0000000000..adcc8cfdc2
--- /dev/null
+++ b/web/yacco2/docs/terminals_phrase_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminals_phrase_th.pdf b/web/yacco2/docs/terminals_phrase_th.pdf
new file mode 100644
index 0000000000..8799287930
--- /dev/null
+++ b/web/yacco2/docs/terminals_phrase_th.pdf
Binary files differ
diff --git a/web/yacco2/docs/terminals_phrase_th_idx.pdf b/web/yacco2/docs/terminals_phrase_th_idx.pdf
new file mode 100644
index 0000000000..1dd35f86d9
--- /dev/null
+++ b/web/yacco2/docs/terminals_phrase_th_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/test_components.pdf b/web/yacco2/docs/test_components.pdf
new file mode 100644
index 0000000000..7ac713584f
--- /dev/null
+++ b/web/yacco2/docs/test_components.pdf
Binary files differ
diff --git a/web/yacco2/docs/test_components_idx.pdf b/web/yacco2/docs/test_components_idx.pdf
new file mode 100644
index 0000000000..00ad008cf2
--- /dev/null
+++ b/web/yacco2/docs/test_components_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/testdriver.pdf b/web/yacco2/docs/testdriver.pdf
new file mode 100644
index 0000000000..a4ac03a33a
--- /dev/null
+++ b/web/yacco2/docs/testdriver.pdf
Binary files differ
diff --git a/web/yacco2/docs/testout.pdf b/web/yacco2/docs/testout.pdf
new file mode 100644
index 0000000000..32d87c843b
--- /dev/null
+++ b/web/yacco2/docs/testout.pdf
Binary files differ
diff --git a/web/yacco2/docs/testout_err_hdlr.pdf b/web/yacco2/docs/testout_err_hdlr.pdf
new file mode 100644
index 0000000000..d937113e17
--- /dev/null
+++ b/web/yacco2/docs/testout_err_hdlr.pdf
Binary files differ
diff --git a/web/yacco2/docs/testout_err_hdlr_idx.pdf b/web/yacco2/docs/testout_err_hdlr_idx.pdf
new file mode 100644
index 0000000000..96fe9904e9
--- /dev/null
+++ b/web/yacco2/docs/testout_err_hdlr_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/thread_fs_calc.pdf b/web/yacco2/docs/thread_fs_calc.pdf
new file mode 100644
index 0000000000..b76ed680ca
--- /dev/null
+++ b/web/yacco2/docs/thread_fs_calc.pdf
Binary files differ
diff --git a/web/yacco2/docs/thread_fs_calc_idx.pdf b/web/yacco2/docs/thread_fs_calc_idx.pdf
new file mode 100644
index 0000000000..9b8a95f39c
--- /dev/null
+++ b/web/yacco2/docs/thread_fs_calc_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/tugboat-o2.pdf b/web/yacco2/docs/tugboat-o2.pdf
new file mode 100644
index 0000000000..ac407b5c85
--- /dev/null
+++ b/web/yacco2/docs/tugboat-o2.pdf
Binary files differ
diff --git a/web/yacco2/docs/unq_str.pdf b/web/yacco2/docs/unq_str.pdf
new file mode 100644
index 0000000000..925f2ce2bc
--- /dev/null
+++ b/web/yacco2/docs/unq_str.pdf
Binary files differ
diff --git a/web/yacco2/docs/unq_str_idx.pdf b/web/yacco2/docs/unq_str_idx.pdf
new file mode 100644
index 0000000000..d5c70b5aaf
--- /dev/null
+++ b/web/yacco2/docs/unq_str_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/wlibrary.pdf b/web/yacco2/docs/wlibrary.pdf
new file mode 100644
index 0000000000..4f37e78c80
--- /dev/null
+++ b/web/yacco2/docs/wlibrary.pdf
Binary files differ
diff --git a/web/yacco2/docs/ws.pdf b/web/yacco2/docs/ws.pdf
new file mode 100644
index 0000000000..0c63edfb0b
--- /dev/null
+++ b/web/yacco2/docs/ws.pdf
Binary files differ
diff --git a/web/yacco2/docs/ws_idx.pdf b/web/yacco2/docs/ws_idx.pdf
new file mode 100644
index 0000000000..d8dc463e57
--- /dev/null
+++ b/web/yacco2/docs/ws_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/xc_str.pdf b/web/yacco2/docs/xc_str.pdf
new file mode 100644
index 0000000000..9788539cf7
--- /dev/null
+++ b/web/yacco2/docs/xc_str.pdf
Binary files differ
diff --git a/web/yacco2/docs/xc_str_idx.pdf b/web/yacco2/docs/xc_str_idx.pdf
new file mode 100644
index 0000000000..0e04afb434
--- /dev/null
+++ b/web/yacco2/docs/xc_str_idx.pdf
Binary files differ
diff --git a/web/yacco2/docs/xxx.pdf b/web/yacco2/docs/xxx.pdf
new file mode 100644
index 0000000000..00a37b61c2
--- /dev/null
+++ b/web/yacco2/docs/xxx.pdf
Binary files differ
diff --git a/web/yacco2/docs/yacco2_stbl.pdf b/web/yacco2/docs/yacco2_stbl.pdf
new file mode 100644
index 0000000000..467403d5a9
--- /dev/null
+++ b/web/yacco2/docs/yacco2_stbl.pdf
Binary files differ
diff --git a/web/yacco2/externals/common_externs.w b/web/yacco2/externals/common_externs.w
new file mode 100644
index 0000000000..cdfe5d535d
--- /dev/null
+++ b/web/yacco2/externals/common_externs.w
@@ -0,0 +1,489 @@
+@q file: common_externs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% This file is part of YACC02 compiler/compiler project.@>
+
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+%\tracingall=1
+%\tracingall=1
+%\tracingmacros=1
+%\tracingcommands=2
+@i "/usr/local/yacco2/license.w"
+@** Summary of Yacco2 and Linker Common External Routines.\fbreak
+These are the various procedures that parse \Yacco2's grammar language
+and emit the grammar's c++ code
+and tex document with mpost generated diagrams.
+Each language construct has its appropriate external procedure that houses
+the monolithic grammar to start the parse.
+There is no namespace used to contain these routines as I felt that this was overkill.
+As this is a closed system, their grammars are not universal and
+cannot be re-cycled for others.
+Their only outside value are in teaching examples on ``how to skin a cat'' or is it
+``how to parse a lion?''...
+
+External routines ratatouille:\fbreak
+\ptindent{|o2externs.w| - cweb generator file}
+\ptindent{|o2_externs.h| - header file}
+\ptindent{|o2_externs.cpp| - implementation}
+
+Dependency files from other Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_T_enumeration.h| - terminal enumeration for Yacco2's terminal grammar alphabet}
+\ptindent{|yacco2_err_symbols.h| - error terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_characters.h| - raw character definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_k_symbols.h| - constant meta terminal defs from Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|*.h| - assorted grammar definitions for Yacco2's parsing}
+\ptindent{|yacco2_stbl.h| - symbol table defnitions}
+
+External procedures and other globals:\fbreak
+\ptindent{|GET_CMD_LINE| --- global routine for public consumption}
+\ptindent{|DUMP_ERROR_QUEUE|}
+\ptindent{|DATE_AND_TIME|}
+
+@** Global definitions, External parse routines for Yacco2.\fbreak
+Why |CWEB_MARKER| external?
+It holds the |T_cweb_marker| tree containing |cweb| comments.
+Why? It is a holding pointer that allows |cweb| comments
+to be processed before
+the appropriate parse phrases like |process_xxx_phrase|
+that are triggered by |PROCESS_KEYWORD_FOR_SYNTAX_CODE|.
+\def\ptindent#1{\line{\hskip.5in{#1}\hfill}}
+\def\fbreak{\hfill\break}
+\def\wildcard{$\vert$+$\vert$}
+\def\parallelop{$\vert\vert\vert$}
+
+@ Create header file.
+@(common_externs.h@>=
+#ifndef common_extern_
+#define common_extern_ 1
+@h
+@<Files for header@>;
+#endif
+
+@*2 Files for header.
+@<Files for header@>=
+#include "globals.h"
+#include "/usr/local/yacco2/compiler/o2/o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "o2_err_hdlr.h"
+extern @/
+void GET_CMD_LINE(int argc, char* argv[]
+ ,const char* File,yacco2::TOKEN_GAGGLE& Errors);
+extern @/
+ void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE& Errors);
+extern const char* DATE_AND_TIME();
+@ Include Header file.
+@<Include Header file@>=
+#include "common_externs.h"
+@ Yacco2 external routines blueprint. Output of the code.
+@(common_externs.cpp@>=
+@<Include Header file@>;
+@<accrue source for emit@>;
+
+
+@ Accrue source for emit.
+@<accrue source for emit@>=
+// add source code
+
+@** External routines.
+@*2 Extract command line parameters: |GET_CMD_LINE|.\fbreak
+This is a simple routine to fetch the
+program's run parameters and place them into a passed holding file.
+If there is no command line data, it asks the user for the command line via |cin|.
+This holding file gets parsed first.
+The extraction process from the program environment is more general than required
+for example Linker.
+It will accept more than just the fsc file name.
+It is left to the likes of |xxxx_PARSE_CMD_LINE| and its associated grammar to determine
+whether the command line is acceptable.
+
+Constraints:\fbreak
+ \ptindent{ip1-2: argc and argv program run parameters}
+ \ptindent{ip3: Holding file to place the command line or interactive data}
+ \ptindent{ip4: Error token container for generated error token}
+
+Errors:\fbreak
+\ptindent{1) bad filename for holding file}
+
+@<accrue source for emit@>+=
+extern @/
+void GET_CMD_LINE
+ (int argc, char* argv[],const char* Holding,yacco2::TOKEN_GAGGLE& Errors)
+{
+ using namespace std;
+ using namespace NS_yacco2_err_symbols;
+ using namespace yacco2;
+ ofstream ofile;
+ ofile.open(Holding,ios_base::out|ios::trunc);
+ if(!ofile){
+ CAbs_lr1_sym* sym = new Err_bad_filename(Holding);
+ sym->set_external_file_id(1);
+ sym->set_line_no(1);
+ sym->set_pos_in_line(1);
+ Errors.push_back(*sym);
+ return;
+ }
+ if(argc == 1){// just program name : no parms
+ char cmd_line[Max_buf_size];
+ cout << "Please enter Command line to process: ";
+ cin.get(cmd_line,Max_buf_size,'\n');
+ ofile << cmd_line;
+ ofile.close();
+ return;
+ }
+ for(int x=1;x<argc;++x){
+ ofile << argv[x] << ' ';
+ }
+ ofile.close();
+ return;
+}
+
+@*2 Dump Error queue tokens: |DUMP_ERROR_QUEUE|.\fbreak
+Its 5 minutes of fame is the use of a grammar
+to parse the error queue and format the outputted error message(s).
+It demonstrates how grammars can be used in various situations.
+The output is a tupple of 5 elements: file being parsed, the extracted source line,
+and its coordinates by line number and position within the line, and
+the error message with an arrow positioned within
+the above extracted souce line indicating the why-where-who-did-it.
+It also shutsdown the threads launched.
+
+2 places are outputed to for gazing at those bugs. cout handles the screen addict
+while the Java sippers can flip thru Yacco2's log or is it a blog?:\fbreak
+ \ptindent{op1: Yacco2's log file}
+ \ptindent{op2: cout}
+
+Constraints:\fbreak
+ \ptindent{ip1: Error token contain}
+
+@<accrue source for emit@>+=
+extern
+void
+DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE& Errors)@/
+{
+ using namespace NS_yacco2_k_symbols;
+ using namespace yacco2;
+ Errors.push_back(*yacco2::PTR_LR1_eog__);
+ Errors.push_back(*yacco2::PTR_LR1_eog__);
+ using namespace NS_o2_err_hdlr;
+ Co2_err_hdlr fsm;
+ Parser pass_errors(fsm,&Errors,0);
+ pass_errors.parse();
+ yacco2::Parallel_threads_shutdown(pass_errors);
+
+}
+
+@*2 |DATE_AND_TIME|.\fbreak
+@<accrue source for emit@>+=
+extern const char* DATE_AND_TIME(){
+ static std::string dt;
+ if(dt.empty()){
+ time_t theTime = time(0);
+ char* cTime = ctime(&theTime);
+ dt += cTime;
+ int n = dt.find('\n');
+ dt[n] = ' ';
+ }
+ return dt.c_str();
+}
+
+@*2 |XLATE_SYMBOLS_FOR_cweave|.\fbreak
+@<accrue source for emit@>+=
+extern
+void
+XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym){@/
+Xlated_sym[0] = (char)0;
+int lll = strlen(Sym_to_xlate);
+int app_ptr = 0;
+for(int x=0;x<lll;++x,--app_ptr){// app\_ptr re-align to (chr)0 cuz rel to 1 so bkup
+ switch (Sym_to_xlate[x]){
+ case '{':{
+ int sz = sizeof("\\BRACEOPEN{}");
+ strncpy(&Xlated_sym[app_ptr],"\\BRACEOPEN{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '}':{
+ int sz = sizeof("\\BRACECLOSE{}");
+ strncpy(&Xlated_sym[app_ptr],"\\BRACECLOSE{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '<':{
+ int sz = sizeof("\\LTsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\LTsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '>':{
+ int sz = sizeof("\\GTsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\GTsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '@@':{
+ int sz = sizeof("\\ATsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\ATsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '|':{
+ if(x+2 < lll){
+ if(Sym_to_xlate[x+2] != '|'){
+ int sz = sizeof("\\Verticalbar ");
+ strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+ app_ptr += sz;
+ continue;
+ }
+ }else{
+ int sz = sizeof("\\Verticalbar ");
+ strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+ app_ptr += sz;
+ continue;
+ }
+ switch(Sym_to_xlate[x+1]){
+ case '+':{
+ int sz = sizeof("\\ALLshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\ALLshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case '.':{
+ int sz = sizeof("\\INVshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\INVshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case '?':{
+ int sz = sizeof("\\QUEshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\QUEshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case '|':{
+ int sz = sizeof("\\PARshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\PARshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case 'r':{
+ int sz = sizeof("\\REDshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\REDshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case 'p':{
+ int sz = sizeof("\\PROCshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\PROCshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ case 't':{
+ int sz = sizeof("\\TRAshift{}");
+ strncpy(&Xlated_sym[app_ptr],"\\TRAshift{}",sz);
+ app_ptr += sz;
+ x+=2;
+ continue;
+ }
+ default:{
+ int sz = sizeof("\\Verticalbar{}");
+ strncpy(&Xlated_sym[app_ptr],"\\Verticalbar{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ }
+ }
+ case '+':{
+ int sz = sizeof("+");
+ strncpy(&Xlated_sym[app_ptr],"+",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '-':{
+ int sz = sizeof("-");
+ strncpy(&Xlated_sym[app_ptr],"-",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '*':{
+ int sz = sizeof("\\ASTERICsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\ASTERICsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '#':{
+ int sz = sizeof("\\NOsign ");
+ strncpy(&Xlated_sym[app_ptr],"\\NOsign ",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '&':{
+ int sz = sizeof("\\AMPERsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\AMPERsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '%':{
+ int sz = sizeof("\\PERCENTsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\PERCENTsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '$':{
+ int sz = sizeof("\\DOLLARsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\DOLLARsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '\\':{// escaped
+ if(lll == 1){
+ int sz = sizeof("\\BKSLASHsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ switch(Sym_to_xlate[x+1]){
+ case '\\':{
+ if(lll==2){// only a bkslash esc seq and not a TeX macro
+ int sz= sizeof("\\BKSLASHsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+ app_ptr+= sz;
+ ++x;
+ continue;
+ }
+ int sz = sizeof("\\");
+ strcat(Xlated_sym,"\\");
+ app_ptr += sz;
+ ++x;// this is adv past 2nd char; the loop handles \
+ continue;
+ }
+ case '"':{
+ int sz = sizeof("\\DBLQUOTEsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\DBLQUOTEsign{}",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case '\'':{
+ int sz = sizeof("\\RTQUOTEsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\RTQUOTEsign{}",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'n':{
+ int sz = sizeof("\n");
+ strncpy(&Xlated_sym[app_ptr],"\n",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 't':{
+ int sz = sizeof("\t");
+ strncpy(&Xlated_sym[app_ptr],"\t",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'r':{
+ int sz = sizeof("\r");
+ strncpy(&Xlated_sym[app_ptr],"\r",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'v':{
+ int sz = sizeof("\v");
+ strncpy(&Xlated_sym[app_ptr],"\v",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'b':{
+ int sz = sizeof("\b");
+ strncpy(&Xlated_sym[app_ptr],"\b",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'f':{
+ int sz = sizeof("\f");
+ strncpy(&Xlated_sym[app_ptr],"\f",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case 'a':{
+ int sz = sizeof("\a");
+ strncpy(&Xlated_sym[app_ptr],"\a",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ case '?':{
+ int sz = sizeof("\?");
+ strncpy(&Xlated_sym[app_ptr],"\?",sz);
+ app_ptr += sz;
+ ++x;
+ continue;
+ }
+ default:{//
+ int sz = sizeof("\\");
+ strncpy(&Xlated_sym[app_ptr],"\\",sz);
+ app_ptr += sz-1;
+ strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x+1],1);
+ ++app_ptr;
+ strncpy(&Xlated_sym[app_ptr],"",1);
+ ++x;
+ ++app_ptr;
+ continue;
+ }
+ }
+ }
+ case '^':{
+ int sz = sizeof("\\UPARROWsign{}");
+ strncpy(&Xlated_sym[app_ptr],"\\UPARROWsign{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '~':{
+ int sz = sizeof("\\TILDE{}");
+ strncpy(&Xlated_sym[app_ptr],"\\TILDE{}",sz);
+ app_ptr += sz;
+ continue;
+ }
+ case '_':{
+ int sz = sizeof("\\_");
+ strncpy(&Xlated_sym[app_ptr],"\\_",sz);
+ app_ptr += sz;
+ continue;
+ }
+ default:{
+ strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x],1);
+ ++app_ptr;
+ strncpy(&Xlated_sym[app_ptr],"",1);
+ ++app_ptr;
+ continue;
+ }
+ }
+ }
+}
+
+@** Index.
+
+
+
diff --git a/web/yacco2/grammar-testsuite/Err.w b/web/yacco2/grammar-testsuite/Err.w
new file mode 100644
index 0000000000..ab22055e9b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/Err.w
@@ -0,0 +1,60 @@
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+\DOCtitle{Error Vocabulary}{testout\_err\_symbols}
+{NS\_testout\_err\_symbols}{4}
+
+@i "/yacco2/copyright.w"
+@** Testout Error symbols vocabulary.\fbreak
+
+@*2 {\bf Bad T inputted}.\fbreak
+Enum: T\_Err\_bad\_T\_inputted\_
+\fbreak
+\line{Class: Err\_bad\_T\_inputted \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf bad filename}.\fbreak
+Enum: T\_Err\_bad\_filename\_
+\fbreak
+\line{Class: Err\_bad\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*3 bad filename user-declaration directive.
+@<bad filename user-declaration directive@>=
+
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+@*3 bad filename user-implementation directive.
+@<bad filename user-implementation directive@>=
+
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+
+@*2 {\bf no cmd-lne-data}.\fbreak
+Enum: T\_Err\_no\_cmd\_lne\_data\_
+\fbreak
+\line{Class: Err\_no\_cmd\_lne\_data \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@*2 {\bf no filename}.\fbreak
+Enum: T\_Err\_no\_filename\_
+\fbreak
+\line{Class: Err\_no\_filename \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@** Index.
diff --git a/web/yacco2/grammar-testsuite/Lrk.w b/web/yacco2/grammar-testsuite/Lrk.w
new file mode 100644
index 0000000000..02f9d47a6e
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/Lrk.w
@@ -0,0 +1,331 @@
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+\DOCtitle{Lr K Vocabulary}{yacco2\_k\_symbols}
+{NS\_yacco2\_k\_symbols}{8}
+
+@i "/yacco2/library/copyright.w"
+@** K symbols vocabulary.\fbreak
+Ahh the ``Constant grammar'' symbols used throughout all grammars.
+Depending on the command line options \O2 can generate the grammar
+and possibly the various flavours of the Terminal vocabulary.
+Under normal development, the grammar writer
+compiles and emits just the grammar.
+Flavours of the terminal vocabulary are not usually generated unless
+there have been changes
+to either {\bf error} or
+{\bf terminal} with accompaning command line option.
+At the
+initial ``big bang'' of bootstrapping \O2's library and compiler / compiler,
+both {\bf raw characters} and {\bf lr k} terminals were generated
+using their command line options
+{/rc} and {/lrk}. The command line option
+now uses an Unix style {-t, -err} and
+these 2 terminal types ``lrk'' and ``raw characters''
+are now cast in cement: u cannot regen them
+ from their ``*.T'' file definitions but
+u can change their ``big bang'' generated ``c++'' modules.
+These terminals are now read-only:
+they will never be changed by a user of \O2 and who'd want to anyway?.
+
+The hardwired ``k'' terminals are used by \O2's library
+ for internal parsing situations.
+Apart from {\bf eog} who represents
+the end-of-grammar and end-of-file conditions,
+all other definitions are not part of the token source
+ stream being parsed.
+I call them meta terminals
+as they are never in the token stream but
+represent internal parsing conditions within the emitted
+finite-state table that triggers the \O2's library routines.
+For example, the presence of \paralleloperator within
+a parse state
+indicates the potential ``to run'' threads.
+If u look carefully, their file definitions and
+implementations reside in \O2's ``../yacco2/library/grammars'' folder.
+Their definition files are ``yacco2\_k\_symbols.T'' and
+``yacco2\_characters.T'' with
+their ``c++'' variants having the ``.h'' and ''.cpp'' extensions.
+
+@*2 {\bf eog}.\fbreak
+Enum: T\_LR1\_eog\_
+\fbreak
+\line{Class: LR1\_eog \hfil AB: N \hfil AD: N}
+
+
+ Used to indicate an end-of-grammar or an end-of-file condition.
+ When the token container is reached, calls for another terminal
+ will always return the |eog|.
+ It's your door bouncer before hell.
+
+\fbreak
+\hrule
+@*3 eog user-declaration directive.
+@<eog user-declaration directive@>=
+
+ LR1_eog();
+
+@*3 eog user-implementation directive.
+@<eog user-implementation directive@>=
+
+ LR1_eog::LR1_eog()
+ T_CTOR("eog",T_LR1_eog_,0,false,false)
+ {}
+ LR1_eog LR1_eog__;
+ yacco2::CAbs_lr1_sym* yacco2::PTR_LR1_eog__ = &LR1_eog__;
+
+@*2 {\bf eolr}.\fbreak
+Enum: T\_LR1\_eolr\_
+\fbreak
+\line{Class: LR1\_eolr \hfil AB: N \hfil AD: N}
+
+
+ Used to indicate all-terminals of the
+ terminal vocabulary including itself.
+ It saves finger blisters by not having
+ to be explicit in the thread's lookahead expression.
+ Dieting hasn't been this effective to code bloat.
+
+\fbreak
+\hrule
+@*3 eolr user-declaration directive.
+@<eolr user-declaration directive@>=
+
+ LR1_eolr();
+
+@*3 eolr user-implementation directive.
+@<eolr user-implementation directive@>=
+
+ LR1_eolr::LR1_eolr()
+ T_CTOR("eolr",T_LR1_eolr_,0,false,false)
+ {}
+ LR1_eolr LR1_eolr__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_eolr__ = &LR1_eolr__;
+
+@*2 {\bf \ALLshift{}}.\fbreak
+Enum: T\_LR1\_all\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_all\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ Represents the wild token situation.
+ Lowers the specific shifts of the finite-state-table and
+ allows the grammar writer to field the unexpected from returned
+ threads. Good stuff.
+
+Caveat: One should use the \QUEshift to field unknow return Tes if
+they are to be interpreted as errors.
+
+\fbreak
+\hrule
+@*3 \ALLshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\ALLshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_all_shift_operator();
+
+@*3 \ALLshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\ALLshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_all_shift_operator::LR1_all_shift_operator()
+ T_CTOR("|+|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_all_shift_operator LR1_all_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_all_shift_operator__
+= &LR1_all_shift_operator__;
+
+@*2 {\bf \INVshift{}}.\fbreak
+Enum: T\_LR1\_invisible\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_invisible\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ It's a nice way to program
+ out of an ambiguous grammar.
+ It can also lower the code bloat
+ of a thread's first set.
+
+\fbreak
+\hrule
+@*3 \INVshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\INVshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_invisible_shift_operator();
+
+@*3 \INVshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\INVshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_invisible_shift_operator::LR1_invisible_shift_operator()
+ T_CTOR("|.|",T_LR1_invisible_shift_operator_,0,false,false)
+ {}
+ LR1_invisible_shift_operator LR1_invisible_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__
+ = &LR1_invisible_shift_operator__;
+
+@*2 {\bf \QUEshift{}}.\fbreak
+Enum: T\_LR1\_questionable\_shift\_operator\_
+\fbreak
+\line{Class: LR1\_questionable\_shift\_operator \hfil AB: N \hfil AD: N}
+
+
+ Represents a questionable grammar situation.
+It pinpoints programmed error points within the grammar.
+The subrule using this symbol has a lr(0) reduction as
+the lookahead is not kosher and so would probably not reduce
+in the lr(1) context.
+It can be used both in the following grammar expressions:\fbreak
+\INDENT{1.5cm}{1) \subrule \QUEshift}
+\INDENT{1.5cm}{2) \subrule \PARshift \quad \QUEshift \quad NULL}
+Point 1 covers the state where the current token being parsed
+is improper. Point 2 is more interesting as it captures
+a returned terminal that the thread passes back as an error.
+
+The \QUEshift was not one of the original
+``k'' terminals. It replaced the ``eof'' terminal
+which was marginal in intent.
+I felt the \QUEshift symbol drew the reader's eye of the grammar where
+``faulty'' points where captured and to force lr(0) context processing
+to reduce its subrule.
+Why lr(0) context? Glad u asked, the lookahead terminal --- the current
+terminal being parsed, is in error and
+so ``how is the subrule with the \QUEshift to reduce after its shifted T?''.
+It must be divorced of any lookahead and just acted upon.
+
+Now another question arises: ``how is this condition detected in
+a parsing state of
+mixed conditions --- threading, shifting, reducing''?
+There is a pecking order on the conditions tried by the parser:\fbreak
+\INDENT{1.5cm}{$\circ$ threading}
+\INDENT{2.5cm}{if tried and unsuccessful the balance of conditions are attempted}
+\INDENT{1.5cm}{$\circ$ shifts pecking order by their presence in current parse state:}
+\INDENT{2.5cm}{can the current token be shifted?}
+\INDENT{2.5cm}{\QUEshift --- error condition}
+\INDENT{2.5cm}{\INVshift --- explicit \emptyrule}
+\INDENT{2.5cm}{\ALLshift --- any terminial}
+\INDENT{1.5cm}{$\circ$ reduce}
+\INDENT{2.5cm}{note shifting is favoured over reducing}
+
+\fbreak
+\hrule
+@*3 \QUEshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\QUEshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_questionable_shift_operator();
+
+@*3 \QUEshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\QUEshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_questionable_shift_operator::LR1_questionable_shift_operator()
+ T_CTOR("|?|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_questionable_shift_operator LR1_questionable_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_questionable_shift_operator__
+= &LR1_questionable_shift_operator__;
+
+@*2 {\bf \REDshift{}}.\fbreak
+Enum: T\_LR1\_reduce\_operator\_
+\fbreak
+\line{Class: LR1\_reduce\_operator \hfil AB: Y \hfil AD: Y}
+
+
+ Its presence within the individual state of
+ the ``fsm'' table is to force a reduce operation.
+ Why? it's a back-to-back
+ situation within the state table whereby a thread should reduce
+ while its reducing lookahead is the \paralleloperator indicating to run a thread.
+
+\fbreak
+\hrule
+@*2 {\bf \TRAshift{}}.\fbreak
+Enum: T\_LR1\_fset\_transience\_operator\_
+\fbreak
+\line{Class: LR1\_fset\_transience\_operator \hfil AB: Y \hfil AD: Y}
+
+
+ \TRAshift has dual purposes: used in \O2linker to process the transient
+ first sets generated by threads, and used within a grammar's
+``chained call procedure'' expression to lower thread overhead by
+calling a procedure with explicit intent on double use of its
+``first set'' token.
+I'll give an example of a ``chained procedure call'' expression drawn from
+the ``pass3.lex'' grammar handling the grammar's file include expression:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rprefile\_inc\_dispatcher}
+\fbreak
+The ``Rprefile\_inc\_dispatcher'' grammar rule has the following subrule:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule \TRAshift "file-inclusion" NS\_prefile\_include::PROC\_TH\_prefile\_include}
+\fbreak
+The ``chained'' part is in the duplicating of ``\ATsign'';
+that is, the parsing mechanism does not get a new terminal when shifted but
+passes this T onto the called procedure.
+The called PROC\_TH\_prefile\_include procedure / thread has its
+start rule as:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rpossible\_ws Rfile\_string Reof}
+\fbreak
+The repeated use of ``\ATsign'' was to reenforce the idea
+that the procedure called cuz of ``\ATsign'': there's that ``first set'' again.
+Well time will pass its comments on this thought process.
+
+\fbreak
+\hrule
+@*3 \TRAshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\TRAshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_fset_transience_operator();
+
+@*3 \TRAshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\TRAshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_fset_transience_operator::LR1_fset_transience_operator()
+ T_CTOR("|t|",T_LR1_fset_transience_operator_,0,false,false)
+ {}
+ LR1_fset_transience_operator LR1_fset_transience_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__
+ = &LR1_fset_transience_operator__;
+
+@*2 {\bf \PARshift{}}.\fbreak
+Enum: T\_LR1\_parallel\_operator\_
+\fbreak
+\line{Class: LR1\_parallel\_operator \hfil AB: N \hfil AD: N}
+
+
+ Its presence within the individual state of
+ the ``fsm'' table dictates potential threads to run.
+ You see it sprinkled throughout my grammars
+ to call threads.
+ This is part of \O2's raison d'{\^e}tre.
+
+\fbreak
+\hrule
+@*3 \PARshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive.
+@<\PARshift\BRACEOPEN{}\BRACECLOSE{} user-declaration directive@>=
+
+ LR1_parallel_operator();
+
+@*3 \PARshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive.
+@<\PARshift\BRACEOPEN{}\BRACECLOSE{} user-implementation directive@>=
+
+ LR1_parallel_operator::LR1_parallel_operator()
+ T_CTOR("|||",T_LR1_parallel_operator_,0,false,false)
+ {}
+ LR1_parallel_operator LR1_parallel_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_parallel_operator__
+= &LR1_parallel_operator__;
+
+@*1 {\bf lrk-sufx} directive.\fbreak
+
+As they are constants, they are defined globally
+to save space / overhead in the typical new create / delete
+cycle of terminals. Thar's recycling going on in this green space.
+
+@<lrk-sufx directive@>=
+
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_fset_transience_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_invisible_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_questionable_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_all_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+
+
+@** Index.
diff --git a/web/yacco2/grammar-testsuite/Makefile_Edit_cweb b/web/yacco2/grammar-testsuite/Makefile_Edit_cweb
new file mode 100644
index 0000000000..5dcdd45ab5
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/Makefile_Edit_cweb
@@ -0,0 +1,30 @@
+# Makefile_Edit_cweb
+# clean up the ctangle and cweave droppings
+# changed cwebmac.tex to include \input eplain instead of modifying before o2,yacco2stbl, and yacco2extn.tex
+# comment out #line of cweb emits
+#
+tmp=/tmp/o2
+mkdir /tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+
+sed_cmd1="'-e s;^#line;//line;'"
+sed_cmd2="'-e s/^;$//'"
+
+for i in o2 o2_externs common_externs o2_defs # comment out line reference macros
+do
+ j=$i.cpp
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+for i in o2 o2_externs common_externs extndefs globals # comment out line reference macros of gened headers
+do
+ j=$i.h
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+rm -fr $tmp \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/T.w b/web/yacco2/grammar-testsuite/T.w
new file mode 100644
index 0000000000..d9b6866d85
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/T.w
@@ -0,0 +1,17 @@
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+\DOCtitle{Terminal Vocabulary}{testout\_terminals}
+{NS\_testout\_terminals}{1}
+
+@i "/yacco2/copyright.w"
+@** Testout Terminal vocabulary.\fbreak
+The one T definition is defined as \O2{} does not allow an empty definition.
+
+@*2 {\bf testout-ok}.\fbreak
+Enum: T\_T\_testout\_ok\_
+\fbreak
+\line{Class: T\_testout\_ok \hfil AB: N \hfil AD: N}
+
+\fbreak
+\hrule
+@** Index.
diff --git a/web/yacco2/grammar-testsuite/dp_1.cpp b/web/yacco2/grammar-testsuite/dp_1.cpp
new file mode 100644
index 0000000000..f6e231125a
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1.cpp
@@ -0,0 +1,75 @@
+/*
+ File: dp_1.cpp
+ Date and Time: Sat Jan 31 11:58:31 2015
+*/
+#include "dp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cdp_1::
+ Cdp_1()
+ :yacco2::CAbs_fsm
+ ("dp_1.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"LALR(1) Deremer and Pennello grammar from page 632."
+ ,"Sat Jan 31 11:58:31 2015 "
+ ,S1_Cdp_1){
+
+ }
+
+Cdp_1::~Cdp_1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cdp_1::failed(){
+ return false;
+ }
+ void Cdp_1::op(){
+}
+int Cdp_1::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Cdp_1::R_Rs_,P,false,false){
+}
+
+Rs1::Rs1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs1",0,Cdp_1::R_Rs1_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Cdp_1::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Cdp_1::R_Rb_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/dp_1.fsc b/web/yacco2/grammar-testsuite/dp_1.fsc
new file mode 100644
index 0000000000..6d539781f4
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: dp_1.fsc
+ Date and Time: Sat Jan 31 11:58:31 2015
+*/
+transitive n
+grammar-name "dp_1"
+name-space "NS_dp_1"
+thread-name "Cdp_1"
+monolithic y
+file-name "dp_1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"LALR(1) Deremer and Pennello grammar from page 632."
diff --git a/web/yacco2/grammar-testsuite/dp_1.h b/web/yacco2/grammar-testsuite/dp_1.h
new file mode 100644
index 0000000000..767617d72f
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1.h
@@ -0,0 +1,76 @@
+/*
+ File: dp_1.h
+ Date and Time: Sat Jan 31 11:58:31 2015
+*/
+#ifndef __dp_1_h__
+#define __dp_1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cdp_1;
+namespace NS_dp_1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cdp_1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rs_ = 569//start_of_rule_list + 0
+ ,rhs1_Rs_ = 1
+ ,R_Rs1_ = 570//start_of_rule_list + 2
+ ,rhs1_Rs1_ = 2
+ ,rhs2_Rs1_ = 3
+ ,rhs3_Rs1_ = 4
+ ,rhs4_Rs1_ = 5
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 6
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 15
+ Cdp_1();
+ ~Cdp_1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rs;
+struct Rs1;
+struct Ra;
+struct Rb;
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Rs1:public yacco2::CAbs_lr1_sym {
+ Rs1(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/dp_1.lex b/web/yacco2/grammar-testsuite/dp_1.lex
new file mode 100644
index 0000000000..8c2c364024
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1.lex
@@ -0,0 +1,40 @@
+/*
+Author: Dave Bone
+FILE: dp_1.lex
+Date: 7 mar 2014
+Purpose: Test out compiler/compiler with Deremer and Pennello lalr grammar page 632
+*/
+
+/@
+@** Deremer and Pennello page 632 Lalr(1) Grammar.\fbreak
+Efficient Computation of LALR(1) Look-Ahead Sets\fbreak
+ACM Transactions on Programming Languages and Systems, 4(4):615—649, 1982\fbreak
+@/
+
+fsm
+(fsm-id "dp_1.lex",fsm-filename dp_1,fsm-namespace NS_dp_1
+,fsm-class Cdp_1
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "LALR(1) Deremer and Pennello grammar from page 632.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rs(){
+ -> Rs1 eog
+}
+
+Rs1(){
+ -> a Ra c
+ -> a g d
+ -> b Ra d
+ -> b g c
+}
+
+Ra(){
+ -> Rb
+}
+
+Rb(){
+ -> g
+}
+}
diff --git a/web/yacco2/grammar-testsuite/dp_1.pdf b/web/yacco2/grammar-testsuite/dp_1.pdf
new file mode 100644
index 0000000000..8e40087b59
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/dp_1_idx.pdf b/web/yacco2/grammar-testsuite/dp_1_idx.pdf
new file mode 100644
index 0000000000..48ac4d2209
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/dp_1_idx.w b/web/yacco2/grammar-testsuite/dp_1_idx.w
new file mode 100644
index 0000000000..cd849b0cf7
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1_idx.w
@@ -0,0 +1,228 @@
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+\IDXdoctitle{dp\_1\_idx.w}{dp\_1\_idx.w}
+@** Grammar symbols: Used cross reference.\fbreak
+Reference of each grammar's symbol used within each rule's productions. The index
+uses the tripple: rule name, its subrule no, and the symbol's position
+ within the symbol string.
+@*2 Ra:.\fbreak
+Rs1 1.2\ \
+Rs1 3.2\ \
+\fbreak
+@*2 Rb:.\fbreak
+Ra 1.1\ \
+\fbreak
+@*2 Rs1:.\fbreak
+Rs 1.1\ \
+\fbreak
+@*2 a:.\fbreak
+Rs1 1.1\ \
+Rs1 2.1\ \
+\fbreak
+@*2 b:.\fbreak
+Rs1 3.1\ \
+Rs1 4.1\ \
+\fbreak
+@*2 c:.\fbreak
+Rs1 1.3\ \
+Rs1 4.3\ \
+\fbreak
+@*2 d:.\fbreak
+Rs1 2.3\ \
+Rs1 3.3\ \
+\fbreak
+@*2 eog:.\fbreak
+Rs 1.2\ \
+\fbreak
+@*2 g:.\fbreak
+Rs1 2.2\ \
+Rs1 4.2\ \
+Rb 1.1\ \
+\fbreak
+@** Grammar Rules's First Sets.\fbreak
+
+@*2 |Rs| \# in set: 2.\fbreak
+ a\ \
+ b\ \
+@*2 |Rs1| \# in set: 2.\fbreak
+ a\ \
+ b\ \
+@*2 |Ra| \# in set: 1.\fbreak
+ g\ \
+@*2 |Rb| \# in set: 1.\fbreak
+ g\ \
+@*2 LR State Network.\fbreak
+\LRstatenetwork
+
+@*3 Rs.\fbreak
+@.R$_{1}$ --- Rs@>
+
+\Subrulestartsymstrindent{1} Rs1\ \
+eog\ \
+\Subrulederivedstatesindent
+1\ \
+12\ \
+13\ \
+@*3 Rs1.\fbreak
+@.R$_{2}$ --- Rs1@>
+
+\Subrulestartsymstrindent{1} a\ \
+Ra\ \
+c\ \
+\Subrulederivedstatesindent
+1\ \
+2\ \
+5\ \
+6\ \
+\Subrulestartsymstrindent{2} a\ \
+g\ \
+d\ \
+\Subrulederivedstatesindent
+1\ \
+2\ \
+3\ \
+4\ \
+\Subrulestartsymstrindent{3} b\ \
+Ra\ \
+d\ \
+\Subrulederivedstatesindent
+1\ \
+7\ \
+10\ \
+11\ \
+\Subrulestartsymstrindent{4} b\ \
+g\ \
+c\ \
+\Subrulederivedstatesindent
+1\ \
+7\ \
+8\ \
+9\ \
+@*3 Ra.\fbreak
+@.R$_{3}$ --- Ra@>
+
+\Subrulestartsymstrindent{1} Rb\ \
+\Subrulederivedstatesindent
+2\ \
+14\ \
+\Subrulederivedstatesindent
+7\ \
+15\ \
+@*3 Rb.\fbreak
+@.R$_{4}$ --- Rb@>
+
+\Subrulestartsymstrindent{1} g\ \
+\Subrulederivedstatesindent
+2\ \
+3\ \
+\Subrulederivedstatesindent
+7\ \
+8\ \
+@*2 List of reducing states.\fbreak
+\Listofreducingstates
+\fbreak
+
+\Reducedstatelist
+{3\ShiftReduce\ \ }
+{4\Reduceonly\ \ }
+{6\Reduceonly\ \ }
+{8\ShiftReduce\ \ }
+{9\Reduceonly\ \ }
+{11\Reduceonly\ \ }
+{13\Reduceonly\ \ }
+{14\Reduceonly\ \ }
+{15\Reduceonly\ \ }
+@** Lr1 State's Follow sets and reducing lookahead sets.\fbreak
+\FollSetnotesintro
+\fbreak
+\FollSetstateno{1}
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Rs\rulenameno{1}}&
+{
+} \cr
+}
+\FollSetreducinglocalyield
+eolr.
+
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Rs1\rulenameno{2}}&
+{
+\FollSetcreators{1}{1}{1}
+} \cr
+}
+\FollSetreducinglocalyield
+eog.
+
+\FollSetstateno{2}
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Ra\rulenameno{3}}&
+{
+\FollSetcreators{2}{1}{2}
+} \cr
+}
+\FollSetreducinglocalyield
+c.
+
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Rb\rulenameno{4}}&
+{
+\FollSetcreators{3}{1}{1}
+\FollSettransition{2}{3}
+} \cr
+}
+\FollSetreducinglocalyield
+
+\FollSetstateno{7}
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Ra\rulenameno{3}}&
+{
+\FollSetcreators{2}{3}{2}
+} \cr
+}
+\FollSetreducinglocalyield
+d.
+
+\halign{
+\span\FollSettemplate
+\FollSettitle
+{Rb\rulenameno{4}}&
+{
+\FollSetcreators{3}{1}{1}
+\FollSettransition{7}{3}
+} \cr
+}
+\FollSetreducinglocalyield
+
+@*1 Common Follow sets.\fbreak
+
+@*2 LA set: 1.\fbreak
+\item{}
+\raggedright
+c.
+
+@*2 LA set: 2.\fbreak
+\item{}
+\raggedright
+eog.
+
+@*2 LA set: 3.\fbreak
+\item{}
+\raggedright
+d.
+
+@*2 LA set: 4.\fbreak
+\item{}
+\raggedright
+eolr.
+
+@** Index.
diff --git a/web/yacco2/grammar-testsuite/dp_1sym.cpp b/web/yacco2/grammar-testsuite/dp_1sym.cpp
new file mode 100644
index 0000000000..aec0a228ff
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: dp_1sym.cpp
+ Date and Time: Sat Jan 31 11:58:31 2015
+*/
+#include "dp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cdp_1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/dp_1tbl.cpp b/web/yacco2/grammar-testsuite/dp_1tbl.cpp
new file mode 100644
index 0000000000..d7e4a56a55
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_1tbl.cpp
@@ -0,0 +1,287 @@
+/*
+ File: dp_1tbl.cpp
+ Date and Time: Sat Jan 31 11:58:31 2015
+*/
+#include "dp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_1;// grammar's ns
+// first set terminals
+// raw_c
+yacco2::UCHAR LA1_Cdp_1[] ={
+1
+,13,8
+};
+// LR1_eog
+yacco2::UCHAR LA2_Cdp_1[] ={
+1
+,0,2
+};
+// raw_d
+yacco2::UCHAR LA3_Cdp_1[] ={
+1
+,13,16
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Cdp_1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cdp_1;
+extern yacco2::State S2_Cdp_1;
+extern yacco2::State S3_Cdp_1;
+extern yacco2::State S4_Cdp_1;
+extern yacco2::State S5_Cdp_1;
+extern yacco2::State S6_Cdp_1;
+extern yacco2::State S7_Cdp_1;
+extern yacco2::State S8_Cdp_1;
+extern yacco2::State S9_Cdp_1;
+extern yacco2::State S10_Cdp_1;
+extern yacco2::State S11_Cdp_1;
+extern yacco2::State S12_Cdp_1;
+extern yacco2::State S13_Cdp_1;
+extern yacco2::State S14_Cdp_1;
+extern yacco2::State S15_Cdp_1;
+struct S1std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cdp_1 S1st_Cdp_1 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Cdp_1} // shift sym: raw_a
+ ,{106,(State*)&S7_Cdp_1} // shift sym: raw_b
+ ,{569,(State*)&S1_Cdp_1} // accept sym: Rs
+ ,{570,(State*)&S12_Cdp_1} // shift sym: Rs1
+ }// end of shift table
+};
+yacco2::State S1_Cdp_1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cdp_1,0,0,0,0};
+struct S2std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Cdp_1 S2st_Cdp_1 = {
+ 3
+ ,
+ {// start of table
+ {111,(State*)&S3_Cdp_1} // shift sym: raw_g
+ ,{571,(State*)&S5_Cdp_1} // shift sym: Ra
+ ,{572,(State*)&S14_Cdp_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S2_Cdp_1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cdp_1,0,0,0,0};
+struct S3std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cdp_1 S3st_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Cdp_1} // shift sym: raw_d
+ }// end of shift table
+};
+struct S3rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Cdp_1 S3rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdp_1,Cdp_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S3_Cdp_1 = //State's vectored into symbol: "g"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cdp_1,(Reduce_tbl*)&S3rt_Cdp_1,0,0,0};
+struct S4rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cdp_1 S4rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_1,Cdp_1::rhs2_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S4_Cdp_1 = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cdp_1,0,0,0};
+struct S5std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cdp_1 S5st_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S6_Cdp_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S5_Cdp_1 = //State's vectored into symbol: "Ra"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cdp_1,0,0,0,0};
+struct S6rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cdp_1 S6rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_1,Cdp_1::rhs1_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S6_Cdp_1 = //State's vectored into symbol: "c"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cdp_1,0,0,0};
+struct S7std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Cdp_1 S7st_Cdp_1 = {
+ 3
+ ,
+ {// start of table
+ {111,(State*)&S8_Cdp_1} // shift sym: raw_g
+ ,{571,(State*)&S10_Cdp_1} // shift sym: Ra
+ ,{572,(State*)&S15_Cdp_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S7_Cdp_1 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cdp_1,0,0,0,0};
+struct S8std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cdp_1 S8st_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S9_Cdp_1} // shift sym: raw_c
+ }// end of shift table
+};
+struct S8rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cdp_1 S8rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cdp_1,Cdp_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S8_Cdp_1 = //State's vectored into symbol: "g"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cdp_1,(Reduce_tbl*)&S8rt_Cdp_1,0,0,0};
+struct S9rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cdp_1 S9rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_1,Cdp_1::rhs4_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S9_Cdp_1 = //State's vectored into symbol: "c"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cdp_1,0,0,0};
+struct S10std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cdp_1 S10st_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S11_Cdp_1} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S10_Cdp_1 = //State's vectored into symbol: "Ra"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cdp_1,0,0,0,0};
+struct S11rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cdp_1 S11rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_1,Cdp_1::rhs3_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S11_Cdp_1 = //State's vectored into symbol: "d"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cdp_1,0,0,0};
+struct S12std_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Cdp_1 S12st_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Cdp_1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Cdp_1 = //State's vectored into symbol: "Rs1"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cdp_1,0,0,0,0};
+struct S13rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cdp_1 S13rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cdp_1,Cdp_1::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S13_Cdp_1 = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cdp_1,0,0,0};
+struct S14rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cdp_1 S14rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdp_1,Cdp_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S14_Cdp_1 = //State's vectored into symbol: "Rb"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cdp_1,0,0,0};
+struct S15rtd_Cdp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cdp_1 S15rt_Cdp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cdp_1,Cdp_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S15_Cdp_1 = //State's vectored into symbol: "Rb"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cdp_1,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/dp_2.cpp b/web/yacco2/grammar-testsuite/dp_2.cpp
new file mode 100644
index 0000000000..1d9b488c8e
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2.cpp
@@ -0,0 +1,88 @@
+/*
+ File: dp_2.cpp
+ Date and Time: Sat Jan 31 11:58:36 2015
+*/
+#include "dp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Cdp_2::
+ Cdp_2()
+ :yacco2::CAbs_fsm
+ ("dp_2.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"LR(0) Deremer and Pennello grammar from page 633."
+ ,"Sat Jan 31 11:58:36 2015 "
+ ,S1_Cdp_2){
+
+ }
+
+Cdp_2::~Cdp_2(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cdp_2::failed(){
+ return false;
+ }
+ void Cdp_2::op(){
+}
+int Cdp_2::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+};
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Cdp_2::R_Rs_,P,false,false){
+}
+
+Rs1::Rs1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs1",0,Cdp_2::R_Rs1_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Cdp_2::R_Rb_,P,false,false){
+}
+
+Rc::Rc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc",0,Cdp_2::R_Rc_,P,false,false){
+}
+
+Rd::Rd(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rd",0,Cdp_2::R_Rd_,P,false,false){
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Cdp_2::R_Re_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/dp_2.fsc b/web/yacco2/grammar-testsuite/dp_2.fsc
new file mode 100644
index 0000000000..660e0e237b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: dp_2.fsc
+ Date and Time: Sat Jan 31 11:58:36 2015
+*/
+transitive n
+grammar-name "dp_2"
+name-space "NS_dp_2"
+thread-name "Cdp_2"
+monolithic y
+file-name "dp_2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_c
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"LR(0) Deremer and Pennello grammar from page 633."
diff --git a/web/yacco2/grammar-testsuite/dp_2.h b/web/yacco2/grammar-testsuite/dp_2.h
new file mode 100644
index 0000000000..f53f65f258
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2.h
@@ -0,0 +1,91 @@
+/*
+ File: dp_2.h
+ Date and Time: Sat Jan 31 11:58:36 2015
+*/
+#ifndef __dp_2_h__
+#define __dp_2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cdp_2;
+namespace NS_dp_2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Cdp_2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rs_ = 569//start_of_rule_list + 0
+ ,rhs1_Rs_ = 1
+ ,R_Rs1_ = 570//start_of_rule_list + 2
+ ,rhs1_Rs1_ = 2
+ ,rhs2_Rs1_ = 3
+ ,rhs3_Rs1_ = 4
+ ,R_Rb_ = 571//start_of_rule_list + 4
+ ,rhs1_Rb_ = 5
+ ,R_Rc_ = 572//start_of_rule_list + 6
+ ,rhs1_Rc_ = 6
+ ,R_Rd_ = 573//start_of_rule_list + 8
+ ,rhs1_Rd_ = 7
+ ,R_Re_ = 574//start_of_rule_list + 10
+ ,rhs1_Re_ = 8
+ };
+ //no of la sets = 4
+ //no of states = 13
+ Cdp_2();
+ ~Cdp_2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+ };
+struct Rs;
+struct Rs1;
+struct Rb;
+struct Rc;
+struct Rd;
+struct Re;
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Rs1:public yacco2::CAbs_lr1_sym {
+ Rs1(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+struct Rc:public yacco2::CAbs_lr1_sym {
+ Rc(yacco2::Parser* P);
+ public:
+};
+
+struct Rd:public yacco2::CAbs_lr1_sym {
+ Rd(yacco2::Parser* P);
+ public:
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/dp_2.lex b/web/yacco2/grammar-testsuite/dp_2.lex
new file mode 100644
index 0000000000..822b88fb8c
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2.lex
@@ -0,0 +1,46 @@
+/*
+Author: Dave Bone
+FILE: dp_2.lex
+Date: 7 mar 2014
+Purpose: Test out compiler/compiler with Deremer and Pennello lair grammar page 633
+*/
+/@
+@** Deremer and Pennello page 633 Lalr(0) Grammar.\fbreak
+Efficient Computation of LALR(1) Look-Ahead Sets\fbreak
+ACM Transactions on Programming Languages and Systems, 4(4):615—649, 1982\fbreak
+@/
+fsm
+(fsm-id "dp_2.lex",fsm-filename dp_2,fsm-namespace NS_dp_2
+,fsm-class Cdp_2
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "LR(0) Deremer and Pennello grammar from page 633.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rs(){
+ -> Rs1 eog
+}
+
+Rs1(){
+ -> c d
+ -> a Rb d
+ -> Rc Rb g
+}
+
+Rb(){
+ -> Rd Re
+}
+
+Rc(){
+ -> c
+}
+
+Rd(){
+ ->
+}
+
+Re(){
+ ->
+}
+}
+
diff --git a/web/yacco2/grammar-testsuite/dp_2.pdf b/web/yacco2/grammar-testsuite/dp_2.pdf
new file mode 100644
index 0000000000..22149cc57e
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/dp_2_idx.pdf b/web/yacco2/grammar-testsuite/dp_2_idx.pdf
new file mode 100644
index 0000000000..196c3f1fcc
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/dp_2sym.cpp b/web/yacco2/grammar-testsuite/dp_2sym.cpp
new file mode 100644
index 0000000000..30151cbff5
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2sym.cpp
@@ -0,0 +1,139 @@
+/*
+ File: dp_2sym.cpp
+ Date and Time: Sat Jan 31 11:58:36 2015
+*/
+#include "dp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cdp_2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rs1_:{
+ Rs1* sym;
+ if(re->rule_ == 0){
+ sym = new Rs1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rc_:{
+ Rc* sym;
+ if(re->rule_ == 0){
+ sym = new Rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rd_:{
+ Rd* sym;
+ if(re->rule_ == 0){
+ sym = new Rd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/dp_2tbl.cpp b/web/yacco2/grammar-testsuite/dp_2tbl.cpp
new file mode 100644
index 0000000000..b44ff81fe4
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/dp_2tbl.cpp
@@ -0,0 +1,279 @@
+/*
+ File: dp_2tbl.cpp
+ Date and Time: Sat Jan 31 11:58:36 2015
+*/
+#include "dp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_dp_2;// grammar's ns
+// first set terminals
+// raw_d
+// raw_g
+yacco2::UCHAR LA1_Cdp_2[] ={
+1
+,13,144
+};
+// LR1_eog
+yacco2::UCHAR LA2_Cdp_2[] ={
+1
+,0,2
+};
+// raw_g
+yacco2::UCHAR LA3_Cdp_2[] ={
+1
+,13,128
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Cdp_2[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cdp_2;
+extern yacco2::State S2_Cdp_2;
+extern yacco2::State S3_Cdp_2;
+extern yacco2::State S4_Cdp_2;
+extern yacco2::State S5_Cdp_2;
+extern yacco2::State S6_Cdp_2;
+extern yacco2::State S7_Cdp_2;
+extern yacco2::State S8_Cdp_2;
+extern yacco2::State S9_Cdp_2;
+extern yacco2::State S10_Cdp_2;
+extern yacco2::State S11_Cdp_2;
+extern yacco2::State S12_Cdp_2;
+extern yacco2::State S13_Cdp_2;
+struct S1std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Cdp_2 S1st_Cdp_2 = {
+ 5
+ ,
+ {// start of table
+ {105,(State*)&S2_Cdp_2} // shift sym: raw_a
+ ,{107,(State*)&S5_Cdp_2} // shift sym: raw_c
+ ,{569,(State*)&S1_Cdp_2} // accept sym: Rs
+ ,{570,(State*)&S7_Cdp_2} // shift sym: Rs1
+ ,{572,(State*)&S9_Cdp_2} // shift sym: Rc
+ }// end of shift table
+};
+yacco2::State S1_Cdp_2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cdp_2,0,0,0,0};
+struct S2std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cdp_2 S2st_Cdp_2 = {
+ 2
+ ,
+ {// start of table
+ {571,(State*)&S3_Cdp_2} // shift sym: Rb
+ ,{573,(State*)&S12_Cdp_2} // shift sym: Rd
+ }// end of shift table
+};
+struct S2rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cdp_2 S2rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdp_2,Cdp_2::rhs1_Rd_}
+ }// end of reduce table
+};
+yacco2::State S2_Cdp_2 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cdp_2,(Reduce_tbl*)&S2rt_Cdp_2,0,0,0};
+struct S3std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cdp_2 S3st_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Cdp_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S3_Cdp_2 = //State's vectored into symbol: "Rb"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cdp_2,0,0,0,0};
+struct S4rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cdp_2 S4rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_2,Cdp_2::rhs2_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S4_Cdp_2 = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cdp_2,0,0,0};
+struct S5std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cdp_2 S5st_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S6_Cdp_2} // shift sym: raw_d
+ }// end of shift table
+};
+struct S5rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cdp_2 S5rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cdp_2,Cdp_2::rhs1_Rc_}
+ }// end of reduce table
+};
+yacco2::State S5_Cdp_2 = //State's vectored into symbol: "c"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cdp_2,(Reduce_tbl*)&S5rt_Cdp_2,0,0,0};
+struct S6rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cdp_2 S6rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_2,Cdp_2::rhs1_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S6_Cdp_2 = //State's vectored into symbol: "d"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cdp_2,0,0,0};
+struct S7std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Cdp_2 S7st_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S8_Cdp_2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S7_Cdp_2 = //State's vectored into symbol: "Rs1"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cdp_2,0,0,0,0};
+struct S8rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cdp_2 S8rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cdp_2,Cdp_2::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S8_Cdp_2 = //State's vectored into symbol: "eog"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cdp_2,0,0,0};
+struct S9std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Cdp_2 S9st_Cdp_2 = {
+ 2
+ ,
+ {// start of table
+ {571,(State*)&S10_Cdp_2} // shift sym: Rb
+ ,{573,(State*)&S12_Cdp_2} // shift sym: Rd
+ }// end of shift table
+};
+struct S9rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cdp_2 S9rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cdp_2,Cdp_2::rhs1_Rd_}
+ }// end of reduce table
+};
+yacco2::State S9_Cdp_2 = //State's vectored into symbol: "Rc"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Cdp_2,(Reduce_tbl*)&S9rt_Cdp_2,0,0,0};
+struct S10std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cdp_2 S10st_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {111,(State*)&S11_Cdp_2} // shift sym: raw_g
+ }// end of shift table
+};
+yacco2::State S10_Cdp_2 = //State's vectored into symbol: "Rb"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cdp_2,0,0,0,0};
+struct S11rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cdp_2 S11rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cdp_2,Cdp_2::rhs3_Rs1_}
+ }// end of reduce table
+};
+yacco2::State S11_Cdp_2 = //State's vectored into symbol: "g"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cdp_2,0,0,0};
+struct S12std_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Cdp_2 S12st_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {574,(State*)&S13_Cdp_2} // shift sym: Re
+ }// end of shift table
+};
+struct S12rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cdp_2 S12rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdp_2,Cdp_2::rhs1_Re_}
+ }// end of reduce table
+};
+yacco2::State S12_Cdp_2 = //State's vectored into symbol: "Rd"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cdp_2,(Reduce_tbl*)&S12rt_Cdp_2,0,0,0};
+struct S13rtd_Cdp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cdp_2 S13rt_Cdp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cdp_2,Cdp_2::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S13_Cdp_2 = //State's vectored into symbol: "Re"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cdp_2,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/km_1.cpp b/web/yacco2/grammar-testsuite/km_1.cpp
new file mode 100644
index 0000000000..50fbd82e99
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1.cpp
@@ -0,0 +1,77 @@
+/*
+ File: km_1.cpp
+ Date and Time: Sat Jan 31 11:58:40 2015
+*/
+#include "km_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_km_1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Ckm_1::
+ Ckm_1()
+ :yacco2::CAbs_fsm
+ ("km_1.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"Test out LALR(1) resolution."
+ ,"Sat Jan 31 11:58:40 2015 "
+ ,S1_Ckm_1){
+
+ }
+
+Ckm_1::~Ckm_1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ckm_1::failed(){
+ return false;
+ }
+ void Ckm_1::op(){
+}
+int Ckm_1::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+};
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Ckm_1::R_Rs_,P,false,false){
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Ckm_1::R_Re_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Ckm_1::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Ckm_1::R_Rb_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/km_1.fsc b/web/yacco2/grammar-testsuite/km_1.fsc
new file mode 100644
index 0000000000..84a27edc74
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: km_1.fsc
+ Date and Time: Sat Jan 31 11:58:40 2015
+*/
+transitive n
+grammar-name "km_1"
+name-space "NS_km_1"
+thread-name "Ckm_1"
+monolithic y
+file-name "km_1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_u
+ raw_x
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out LALR(1) resolution."
diff --git a/web/yacco2/grammar-testsuite/km_1.h b/web/yacco2/grammar-testsuite/km_1.h
new file mode 100644
index 0000000000..fd36dd78b8
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1.h
@@ -0,0 +1,78 @@
+/*
+ File: km_1.h
+ Date and Time: Sat Jan 31 11:58:40 2015
+*/
+#ifndef __km_1_h__
+#define __km_1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Ckm_1;
+namespace NS_km_1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Ckm_1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rs_ = 569//start_of_rule_list + 0
+ ,rhs1_Rs_ = 1
+ ,R_Re_ = 570//start_of_rule_list + 2
+ ,rhs1_Re_ = 2
+ ,rhs2_Re_ = 3
+ ,rhs3_Re_ = 4
+ ,rhs4_Re_ = 5
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 6
+ ,rhs2_Ra_ = 7
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 8
+ ,rhs2_Rb_ = 9
+ };
+ //no of la sets = 4
+ //no of states = 24
+ Ckm_1();
+ ~Ckm_1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+ };
+struct Rs;
+struct Re;
+struct Ra;
+struct Rb;
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/km_1.lex b/web/yacco2/grammar-testsuite/km_1.lex
new file mode 100644
index 0000000000..90b1adaad1
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1.lex
@@ -0,0 +1,41 @@
+/*
+Author: Dave Bone
+FILE: km_1.lex
+Date: 7 mar 2014
+Purpose: Test out compiler/compiler with Kristensen and Madsen grammar - lalr resolution
+*/
+/@
+@** Kristensen and Madsen Grammar.\fbreak
+Bent Bruun Kristensen and Ole Lehrmann Madsen\fbreak
+Correspondence ACM Sigplan Notices, 19(8), August 1984.\fbreak
+Test out LALR(1) resolution.
+@/
+fsm
+(fsm-id "km_1.lex",fsm-filename km_1,fsm-namespace NS_km_1
+,fsm-class Ckm_1
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "Test out LALR(1) resolution.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rs(){
+ -> Re eog
+}
+
+Re(){
+ -> Ra a
+ -> Rb b
+ -> u Ra b
+ -> u Rb a
+}
+
+Ra(){
+ -> x y z Ra
+ -> x q
+}
+
+Rb(){
+ -> x y z Rb
+ -> x q
+}
+}
diff --git a/web/yacco2/grammar-testsuite/km_1.pdf b/web/yacco2/grammar-testsuite/km_1.pdf
new file mode 100644
index 0000000000..5ed512c345
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/km_1_idx.pdf b/web/yacco2/grammar-testsuite/km_1_idx.pdf
new file mode 100644
index 0000000000..ca086528bf
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/km_1sym.cpp b/web/yacco2/grammar-testsuite/km_1sym.cpp
new file mode 100644
index 0000000000..df1797cb12
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1sym.cpp
@@ -0,0 +1,153 @@
+/*
+ File: km_1sym.cpp
+ Date and Time: Sat Jan 31 11:58:40 2015
+*/
+#include "km_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_km_1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ckm_1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/km_1tbl.cpp b/web/yacco2/grammar-testsuite/km_1tbl.cpp
new file mode 100644
index 0000000000..ab30486d11
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/km_1tbl.cpp
@@ -0,0 +1,408 @@
+/*
+ File: km_1tbl.cpp
+ Date and Time: Sat Jan 31 11:58:40 2015
+*/
+#include "km_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_km_1;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Ckm_1[] ={
+1
+,0,2
+};
+// raw_a
+yacco2::UCHAR LA2_Ckm_1[] ={
+1
+,13,2
+};
+// raw_b
+yacco2::UCHAR LA3_Ckm_1[] ={
+1
+,13,4
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Ckm_1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Ckm_1;
+extern yacco2::State S2_Ckm_1;
+extern yacco2::State S3_Ckm_1;
+extern yacco2::State S4_Ckm_1;
+extern yacco2::State S5_Ckm_1;
+extern yacco2::State S6_Ckm_1;
+extern yacco2::State S7_Ckm_1;
+extern yacco2::State S8_Ckm_1;
+extern yacco2::State S9_Ckm_1;
+extern yacco2::State S10_Ckm_1;
+extern yacco2::State S11_Ckm_1;
+extern yacco2::State S12_Ckm_1;
+extern yacco2::State S13_Ckm_1;
+extern yacco2::State S14_Ckm_1;
+extern yacco2::State S15_Ckm_1;
+extern yacco2::State S16_Ckm_1;
+extern yacco2::State S17_Ckm_1;
+extern yacco2::State S18_Ckm_1;
+extern yacco2::State S19_Ckm_1;
+extern yacco2::State S20_Ckm_1;
+extern yacco2::State S21_Ckm_1;
+extern yacco2::State S22_Ckm_1;
+extern yacco2::State S23_Ckm_1;
+extern yacco2::State S24_Ckm_1;
+struct S1std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Ckm_1 S1st_Ckm_1 = {
+ 6
+ ,
+ {// start of table
+ {125,(State*)&S2_Ckm_1} // shift sym: raw_u
+ ,{128,(State*)&S7_Ckm_1} // shift sym: raw_x
+ ,{569,(State*)&S1_Ckm_1} // accept sym: Rs
+ ,{570,(State*)&S13_Ckm_1} // shift sym: Re
+ ,{571,(State*)&S15_Ckm_1} // shift sym: Ra
+ ,{572,(State*)&S17_Ckm_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S1_Ckm_1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Ckm_1,0,0,0,0};
+struct S2std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Ckm_1 S2st_Ckm_1 = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S19_Ckm_1} // shift sym: raw_x
+ ,{571,(State*)&S3_Ckm_1} // shift sym: Ra
+ ,{572,(State*)&S5_Ckm_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S2_Ckm_1 = //State's vectored into symbol: "u"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Ckm_1,0,0,0,0};
+struct S3std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Ckm_1 S3st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S4_Ckm_1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S3_Ckm_1 = //State's vectored into symbol: "Ra"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Ckm_1,0,0,0,0};
+struct S4rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ckm_1 S4rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ckm_1,Ckm_1::rhs3_Re_}
+ }// end of reduce table
+};
+yacco2::State S4_Ckm_1 = //State's vectored into symbol: "b"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ckm_1,0,0,0};
+struct S5std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Ckm_1 S5st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S6_Ckm_1} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S5_Ckm_1 = //State's vectored into symbol: "Rb"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Ckm_1,0,0,0,0};
+struct S6rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Ckm_1 S6rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ckm_1,Ckm_1::rhs4_Re_}
+ }// end of reduce table
+};
+yacco2::State S6_Ckm_1 = //State's vectored into symbol: "a"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Ckm_1,0,0,0};
+struct S7std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Ckm_1 S7st_Ckm_1 = {
+ 2
+ ,
+ {// start of table
+ {121,(State*)&S8_Ckm_1} // shift sym: raw_q
+ ,{129,(State*)&S9_Ckm_1} // shift sym: raw_y
+ }// end of shift table
+};
+yacco2::State S7_Ckm_1 = //State's vectored into symbol: "x"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Ckm_1,0,0,0,0};
+struct S8rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S8rtd_Ckm_1 S8rt_Ckm_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ckm_1,Ckm_1::rhs2_Ra_}
+ ,{(Set_tbl*)&LA3_Ckm_1,Ckm_1::rhs2_Rb_}
+ }// end of reduce table
+};
+yacco2::State S8_Ckm_1 = //State's vectored into symbol: "q"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ckm_1,0,0,0};
+struct S9std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Ckm_1 S9st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S10_Ckm_1} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S9_Ckm_1 = //State's vectored into symbol: "y"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Ckm_1,0,0,0,0};
+struct S10std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Ckm_1 S10st_Ckm_1 = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S7_Ckm_1} // shift sym: raw_x
+ ,{571,(State*)&S11_Ckm_1} // shift sym: Ra
+ ,{572,(State*)&S12_Ckm_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S10_Ckm_1 = //State's vectored into symbol: "z"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Ckm_1,0,0,0,0};
+struct S11rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ckm_1 S11rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ckm_1,Ckm_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S11_Ckm_1 = //State's vectored into symbol: "Ra"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ckm_1,0,0,0};
+struct S12rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Ckm_1 S12rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ckm_1,Ckm_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S12_Ckm_1 = //State's vectored into symbol: "Rb"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Ckm_1,0,0,0};
+struct S13std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Ckm_1 S13st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S14_Ckm_1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S13_Ckm_1 = //State's vectored into symbol: "Re"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Ckm_1,0,0,0,0};
+struct S14rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ckm_1 S14rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ckm_1,Ckm_1::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S14_Ckm_1 = //State's vectored into symbol: "eog"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ckm_1,0,0,0};
+struct S15std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S15std_Ckm_1 S15st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S16_Ckm_1} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S15_Ckm_1 = //State's vectored into symbol: "Ra"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Ckm_1,0,0,0,0};
+struct S16rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Ckm_1 S16rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ckm_1,Ckm_1::rhs1_Re_}
+ }// end of reduce table
+};
+yacco2::State S16_Ckm_1 = //State's vectored into symbol: "a"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Ckm_1,0,0,0};
+struct S17std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Ckm_1 S17st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S18_Ckm_1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S17_Ckm_1 = //State's vectored into symbol: "Rb"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Ckm_1,0,0,0,0};
+struct S18rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Ckm_1 S18rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ckm_1,Ckm_1::rhs2_Re_}
+ }// end of reduce table
+};
+yacco2::State S18_Ckm_1 = //State's vectored into symbol: "b"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Ckm_1,0,0,0};
+struct S19std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S19std_Ckm_1 S19st_Ckm_1 = {
+ 2
+ ,
+ {// start of table
+ {121,(State*)&S20_Ckm_1} // shift sym: raw_q
+ ,{129,(State*)&S21_Ckm_1} // shift sym: raw_y
+ }// end of shift table
+};
+yacco2::State S19_Ckm_1 = //State's vectored into symbol: "x"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Ckm_1,0,0,0,0};
+struct S20rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S20rtd_Ckm_1 S20rt_Ckm_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ckm_1,Ckm_1::rhs2_Ra_}
+ ,{(Set_tbl*)&LA2_Ckm_1,Ckm_1::rhs2_Rb_}
+ }// end of reduce table
+};
+yacco2::State S20_Ckm_1 = //State's vectored into symbol: "q"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Ckm_1,0,0,0};
+struct S21std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S21std_Ckm_1 S21st_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S22_Ckm_1} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S21_Ckm_1 = //State's vectored into symbol: "y"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Ckm_1,0,0,0,0};
+struct S22std_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S22std_Ckm_1 S22st_Ckm_1 = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S19_Ckm_1} // shift sym: raw_x
+ ,{571,(State*)&S23_Ckm_1} // shift sym: Ra
+ ,{572,(State*)&S24_Ckm_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S22_Ckm_1 = //State's vectored into symbol: "z"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Ckm_1,0,0,0,0};
+struct S23rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Ckm_1 S23rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ckm_1,Ckm_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S23_Ckm_1 = //State's vectored into symbol: "Ra"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Ckm_1,0,0,0};
+struct S24rtd_Ckm_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Ckm_1 S24rt_Ckm_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ckm_1,Ckm_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S24_Ckm_1 = //State's vectored into symbol: "Rb"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Ckm_1,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/makefile_testout_APPLE b/web/yacco2/grammar-testsuite/makefile_testout_APPLE
new file mode 100644
index 0000000000..d7195ddf23
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/makefile_testout_APPLE
@@ -0,0 +1,100 @@
+# File: makefile_testout_APPLE
+# Why: Creates the testout using the GNU make program
+# Ks: Depending on your system, this utility might be called gmake or make
+#
+# testout placement:
+# Rlse: /usr/local/yacco2/grammar-testsuite
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, or Genw
+# Rlse --- gen the optimized version of testout with no debug support
+# Dbg --- gen the debug version of O2
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvelous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Make sure that the pager_1.lex and testout_err_hdlr.lex grammars has been gened:
+# o2 pager_1.lex
+# o2 testout_err_hdlr.lex
+#
+# Create the bitmaps for testout
+# o2linker testout.fsc
+#
+# ---> Know where the stdc++ library resides and adjust the STDCC_dir variable
+#
+# Example: gen the compiler/compiler o2 release version using GNU make
+# cd /usr/local/yacco2/grammar-testsuite
+# make Rlse -f makefile_testout_APPLE
+#
+# Example: gen programs from cweb
+# make Genw -f makefile_testout_APPLE
+#
+echo "=======> Build testout compiler using pager_1.lex grammar"
+O2 := /usr/local/yacco2
+##CC := /opt/local/bin/c++-mp-4.9
+CC := clang++#g++
+##LD := /opt/local/bin/ld
+LD := ld #apple linker
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+Prg := testout
+O2_target_dir := Release
+Compile_opts := -c -pthread -arch x86_64 #-frepo -fno-implicit-templates -fno-rtti
+else
+O2_target_dir := Debug
+Prg := testout_debug
+Compile_opts := -c -g -pthread -arch x86_64
+endif
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_library := $(Base_o2)/library
+O2_externs := $(Base_o2)/compiler/o2
+O2_grammars := $(Base_o2)/compiler/grammars
+O2_library_grm := $(Base_o2)/library/grammars
+O2_library_lib := $(O2_library)/lib/Release
+Testout := $(Base_o2)/grammar-testsuite
+Testout_includes := -I'$(Testout)' -I'$(O2_externs)' -I'$(O2_grammars)' -I'$(O2_library)' -I'$(O2_library_grm)'
+Testout_req_libraries := -lyacco2
+Testout_lib_directories := -L$(O2_library_lib)
+CC_lib := c++
+LD_PARMS := -arch x86_64 -macosx_version_min 10.9 #-stack_size 0x2000000 -no_compact_unwind
+
+#STDCC_dir := -L/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/
+STDCC_dir := -L/usr/lib/
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY
+
+YYY:
+ $(CC) -v $(Compile_opts) $(Testout_includes) $(Prg).cpp -o $(Prg).o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_err_hdlr.cpp -o testout_err_hdlr.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_err_hdlrsym.cpp -o testout_err_hdlrsym.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_err_hdlrtbl.cpp -o testout_err_hdlrtbl.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) pager_1.cpp -o pager_1.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) pager_1sym.cpp -o pager_1sym.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) pager_1tbl.cpp -o pager_1tbl.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_err_symbols.cpp -o testout_err_symbols.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_terminals.cpp -o testout_terminals.o
+ $(CC) -v $(Compile_opts) $(Testout_includes) testout_fsc.cpp -o testout_fsc.o
+ $(LD) $(LD_PARMS) -o $(Prg) $(STDCC_dir) $(Testout_lib_directories) $(Testout_req_libraries) -l$(CC_lib) -lpthread testout_err_symbols.o testout_terminals.o testout_err_hdlr.o testout_err_hdlrsym.o testout_err_hdlrtbl.o pager_1.o pager_1sym.o pager_1tbl.o testout_fsc.o $(Prg).o
+ rm *o
+
+Genw:
+ cweave testout
+ pdftex testout
+ mv testout\.pdf /usr/local/yacco2/docs/
+ ctangle -l +e testout
+ rm testout.idx
+ rm testout.scn
+ rm testout.toc
+ rm testout.tex
+ rm testout.log
+ rm testout.c
diff --git a/web/yacco2/grammar-testsuite/makefile_testout_GNU b/web/yacco2/grammar-testsuite/makefile_testout_GNU
new file mode 100644
index 0000000000..52a7367327
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/makefile_testout_GNU
@@ -0,0 +1,90 @@
+# File: makefile_GNU
+# Why: Creates the o2 compiler /compiler using the GNU make program
+# Ks: Depending on your system, this utility might be called gmake or make
+#
+# O2 placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_dbg
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, or Genw
+# Rlse --- gen the optimizwd version of O2 with no debug support
+# Dbg --- gen the debug version of O2
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library using GNU make = gmake
+# cd /usr/local/yacco2/compiler/o2
+# make Rlse -f GNU_makefile
+#
+O2 := /usr/local/yacco2
+
+CC := g++
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+else
+O2_target_dir := Debug
+endif
+
+###
+# Set up directories
+###
+Base_yacco2 := $(O2)
+O2_bin := $(Base_yacco2)/bin
+O2_eternals := $(Base_yacco2)/externals
+O2_docs := $(Base_yacco2)/docs
+O2_lib := $(Base_yacco2)/library
+O2_lib_grms := $(Base_yacco2)/library/grammars
+O2_cc_grms := $(Base_yacco2)/compiler/grammars
+O2_cc := $(Base_yacco2)/compiler/o2
+O2_includes := -I'$(O2_cc)' -I'$(O2_cc_grms)' -I'$(O2_lib)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_lib)/lib/$(O2_target_dir)
+
+###
+# Set up c++ compiler and ld linker options
+###
+
+Rlse: Compile_opts := -c -O3 -pthread #-frepo -fno-implicit-templates -fno-rtti
+Dbg: Compile_opts := -c -g -pthread -arch x86_64
+Link_opts := -Wl,-z -Wl,muldefs -Wl,-Ur #$(O2_lib_directories)
+Multi_rd_libs := -static-libgcc -Wl,--start-group -lyacco2 -lo2grammars -Wl,--end-group -lpthread
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY Move_rlse_o2
+Dbg: YYY Move_dbg_o2
+YYY:
+ $(CC) -v $(Compile_opts) o2.cpp -o o2.o $(O2_includes)
+ $(CC) -v $(Compile_opts) common_externs.cpp -o common_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2_externs.cpp -o o2_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2_defs.cpp -o o2_defs.o $(O2_includes)
+ ld '-o' 'o2' '-shared-libgcc' '-mtune=generic'\
+ --eh-frame-hdr -m elf_i386 --hash-style=both -dynamic-linker\
+ /lib/ld-linux.so.2 -o o2 -z relro /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2 -L/usr/lib/gcc/i486-linux-gnu/4.3.2\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../..\
+ $(O2_lib_directories) o2_externs.o o2_defs.o common_externs.o o2.o\
+ --whole-archive -lyacco2 --no-whole-archive -start-group -lo2grammars --end-group -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc\
+ -lpthread /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o
+
+Move_rlse_o2:
+ mv o2 $(O2_bin)
+ rm *.o
+Move_dbg_o2:
+ mv o2 o2_dbg
+ mv o2_dbg $(O2_bin)
+ rm o2
+ rm *.o
+
diff --git a/web/yacco2/grammar-testsuite/makefile_testout_SOLARIS b/web/yacco2/grammar-testsuite/makefile_testout_SOLARIS
new file mode 100644
index 0000000000..6079a234e2
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/makefile_testout_SOLARIS
@@ -0,0 +1,125 @@
+# File: makefile_SOLARIS
+# Why: Creates the o2 compiler /compiler
+# Library placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+# Notice: Some possible construction to be done
+# 1) Adjust base_dir variable if the ``yacco2'' package is moved elsewhere.
+# For example, if u installed the ``yacco2'' package in /opt/yacco2
+# Set the base_dir variable in this file to: base_dir = /opt/
+# The trailing / must be there or ugly things will happen.
+#
+# Example: gen the debug version of the library
+# cd /usr/local/yacco2/compiler/o2
+# make Dbg -f Solaris_makefile
+#
+O2 := /usr/local/yacco2
+
+Rlse: BASICOPTS := -fast -c -m64 -lpthread
+Rlse: Bld_BASICOPTS := -m64 -lpthread
+
+Dbg: BASICOPTS := -c -m64 -lpthread -xs -g
+Dbg: Bld_BASICOPTS := -m64 -lpthread -xs -g
+
+o2_lib := $(O2)/library/
+o2_stbl := $(O2)/compiler/stbl/
+o2_docs := $(O2)/docs/
+o2_lib_grms := $(O2)/library/grammars/
+o2_grms := $(O2)/compiler/grammars/
+o2 := $(O2)/compiler/o2/
+
+
+O2_includes := -I'$(o2)' -I'$(o2_grms)' -I'$(o2_lib)' -I'$(o2_lib_grms)'
+o2_req_libraries := -lyacco2 -lo2grammars
+Rlse: o2_lib_directories := -L $(o2_grms)lib/Release/ -L $(o2_lib)lib/Release/
+Dbg: o2_lib_directories := -L $(o2_grms)lib/Debug/ -L $(o2_lib)lib/Debug/
+files_to_cc := \
+o2_defs.cpp \
+common_externs.cpp \
+o2_externs.cpp \
+o2.cpp
+files_to_o := $(files_to_cc:.cpp=.o)
+
+Rlse: Compile Rlse_o2
+Rlse_o2:
+ mv o2prg $(base_dir)yacco2/bin/o2
+ rm -f *.o
+
+Dbg: $(files_to_o) Dbg_o2
+Dbg_o2:
+ mv o2prg $(base_dir)yacco2/bin/o2_debug
+ rm -f *.o
+
+Compile: $(files_to_o)
+common_externs.o: common_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) common_externs.cpp -o $@
+o2_externs.o: o2_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) o2_externs.cpp -o $@
+o2_defs.o: o2_defs.cpp
+ CC $(BASICOPTS) $(O2_includes) o2_defs.cpp -o $@
+o2.o: o2.cpp
+ CC $(Bld_BASICOPTS) $(O2_includes) o2.cpp -o o2prg \
+o2_defs.o common_externs.o o2_externs.o \
+$(o2_lib_directories) $(o2_req_libraries)
+Genw:
+ cweave types.w
+ ctangle -l +e types.w
+ pdftex types
+ pdftops types.pdf
+ mv types.pdf $(o2_docs)
+ mv types.ps $(o2_docs)
+ cweave common_externs.w
+ ctangle -l +e common_externs.w
+ pdftex common_externs
+ pdftops common_externs.pdf
+ mv common_externs.pdf $(o2_docs)
+ mv common_externs.ps $(o2_docs)
+ cweave o2externs.w
+ ctangle -l +e o2externs.w
+ pdftex o2externs
+ pdftops o2externs.pdf
+ mv o2externs.pdf $(o2_docs)
+ mv o2externs.ps $(o2_docs)
+ cweave o2.w
+ ctangle -l +e o2.w
+ sh Makefile_Edit_cweb
+ pdftex o2
+ pdftops o2.pdf
+ mv o2.pdf $(o2_docs)
+ mv o2.ps $(o2_docs)
+ rm types.idx
+ rm types.scn
+ rm types.toc
+ rm types.tex
+ rm types.log
+ rm types.c
+ rm common_externs.idx
+ rm common_externs.scn
+ rm common_externs.toc
+ rm common_externs.tex
+ rm common_externs.log
+ rm common_externs.c
+ rm o2externs.idx
+ rm o2externs.scn
+ rm o2externs.toc
+ rm o2externs.tex
+ rm o2externs.log
+ rm o2externs.c
+ rm o2.idx
+ rm o2.scn
+ rm o2.toc
+ rm o2.tex
+ rm o2.log
+ rm o2.c
diff --git a/web/yacco2/grammar-testsuite/pager_1.cpp b/web/yacco2/grammar-testsuite/pager_1.cpp
new file mode 100644
index 0000000000..96043481cf
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.cpp
@@ -0,0 +1,82 @@
+/*
+ File: pager_1.cpp
+ Date and Time: Sat Jan 31 11:58:44 2015
+*/
+#include "pager_1.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cpager_1::
+ Cpager_1()
+ :yacco2::CAbs_fsm
+ ("pager_1.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,true
+ ,"Test out David Pager LR(1) resolution page 61."
+ ,"Sat Jan 31 11:58:44 2015 "
+ ,S1_Cpager_1){
+
+ }
+
+Cpager_1::~Cpager_1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cpager_1::failed(){
+
+ CAbs_lr1_sym* sym = new Err_bad_T_inputted;
+ sym->set_rc(*parser__->current_token__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE_FSM(*sym);
+ return true;
+
+ }
+ void Cpager_1::op(){
+}
+int Cpager_1::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+};
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Cpager_1::R_Rs_,P,false,false){
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Cpager_1::R_Re_,P,false,false){
+}
+
+Rx::Rx(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rx",0,Cpager_1::R_Rx_,P,false,false){
+}
+
+Ry::Ry(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ry",0,Cpager_1::R_Ry_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/pager_1.fsc b/web/yacco2/grammar-testsuite/pager_1.fsc
new file mode 100644
index 0000000000..fd970058b8
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: pager_1.fsc
+ Date and Time: Sat Jan 31 11:58:44 2015
+*/
+transitive n
+grammar-name "pager_1"
+name-space "NS_pager_1"
+thread-name "Cpager_1"
+monolithic y
+file-name "pager_1.fsc"
+no-of-T 269
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out David Pager LR(1) resolution page 61."
diff --git a/web/yacco2/grammar-testsuite/pager_1.h b/web/yacco2/grammar-testsuite/pager_1.h
new file mode 100644
index 0000000000..4c2221157a
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.h
@@ -0,0 +1,78 @@
+/*
+ File: pager_1.h
+ Date and Time: Sat Jan 31 11:58:44 2015
+*/
+#ifndef __pager_1_h__
+#define __pager_1_h__ 1
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "testout_err_symbols.h"
+#include "testout_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cpager_1;
+namespace NS_pager_1 {
+using namespace NS_testout_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cpager_1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_testout_T_enum::T_Enum::sum_total_T
+ ,R_Rs_ = 269//start_of_rule_list + 0
+ ,rhs1_Rs_ = 1
+ ,R_Re_ = 270//start_of_rule_list + 2
+ ,rhs1_Re_ = 2
+ ,rhs2_Re_ = 3
+ ,rhs3_Re_ = 4
+ ,rhs4_Re_ = 5
+ ,R_Rx_ = 271//start_of_rule_list + 4
+ ,rhs1_Rx_ = 6
+ ,rhs2_Rx_ = 7
+ ,R_Ry_ = 272//start_of_rule_list + 6
+ ,rhs1_Ry_ = 8
+ ,rhs2_Ry_ = 9
+ };
+ //no of la sets = 4
+ //no of states = 19
+ Cpager_1();
+ ~Cpager_1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+ };
+struct Rs;
+struct Re;
+struct Rx;
+struct Ry;
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ public:
+};
+
+struct Rx:public yacco2::CAbs_lr1_sym {
+ Rx(yacco2::Parser* P);
+ public:
+};
+
+struct Ry:public yacco2::CAbs_lr1_sym {
+ Ry(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/pager_1.lex b/web/yacco2/grammar-testsuite/pager_1.lex
new file mode 100644
index 0000000000..c0035e17b0
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.lex
@@ -0,0 +1,65 @@
+/*
+Author: Dave Bone
+FILE: pager_1.lex
+Date: 7 mar 2014
+Purpose: Test out David Pager lr(1) resolution page 61
+*/
+/@
+@** David Pager Grammar.\fbreak
+David Pager\fbreak
+The Lane Table Method Of Constructing LR(1) Parsers.\fbreak
+@/
+fsm
+(fsm-id "pager_1.lex",fsm-filename pager_1,fsm-namespace NS_pager_1
+,fsm-class Cpager_1{
+/@
+The |RSVP_FSM| macro is used
+to pass back an error to the calling grammar
+in its ``Accept queue''!
+Here the error is within the monolithic grammar so place it
+directly into the ``Error queue''.
+Please read ``wlibrary.pdf'' or ``o2book.pdf'' on the differences between:\fbreak
+|RSVP| and |RSVP_FSM| and their contextes to place a T into the ``Accept queue''
+whereas
+ |ADD_TOKEN_TO_ERROR_QUEUE| and |ADD_TOKEN_TO_ERROR_QUEUE_FSM|
+macros
+store the T into the ``Error queue''.
+\fbreak
+{\bf{Note}}: Reference to |current_token|
+to fetch its token stream gps.
+@/
+ failed
+ CAbs_lr1_sym* sym = new Err_bad_T_inputted;
+ sym->set_rc(*parser__->current_token__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE_FSM(*sym);
+ return true;
+***
+}
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "true"
+,fsm-comments "Test out David Pager LR(1) resolution page 61.")
+@"/usr/local/yacco2/grammar-testsuite/testout_T_includes.T"
+
+rules{
+
+Rs(){
+ -> Re eog
+}
+
+Re(){
+ -> a Rx d
+ -> b Rx c
+ -> a Ry c
+ -> b Ry d
+}
+
+Rx(){
+ -> e Rx
+ -> e
+}
+
+Ry(){
+ -> e Ry
+ -> e
+}
+
+}
diff --git a/web/yacco2/grammar-testsuite/pager_1.pdf b/web/yacco2/grammar-testsuite/pager_1.pdf
new file mode 100644
index 0000000000..c9d15347cc
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/pager_1.w b/web/yacco2/grammar-testsuite/pager_1.w
new file mode 100644
index 0000000000..e15a6a08db
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1.w
@@ -0,0 +1,687 @@
+% file: pager_1.w - cweb grammar
+%Date: Sun Jun 15 15:01:27 2014
+\input "supp-pdf"
+\input "/yacco2/diagrams+etc/o2mac.tex"
+\GRAMMARtitle{pager\_1}
+{pager\_1.lex}{NS\_pager\_1}
+{1.0}{true}
+{Test out David Pager LR(1) resolution page 61.}
+
+
+@** David Pager Grammar.\fbreak
+David Pager\fbreak
+The Lane Table Method Of Constructing LR(1) Parsers.\fbreak
+
+@*2 Fsm Cpager\_1 class.
+
+@*3 Cpager\_1 failed directive.
+
+The |RSVP_FSM| macro is used
+to pass back an error to the calling grammar
+in its ``Accept queue''!
+Here the error is within the monolithic grammar so place it
+directly into the ``Error queue''.
+Please read ``wlibrary.pdf'' or ``o2book.pdf'' on the differences between:\fbreak
+|RSVP| and |RSVP_FSM| and their contextes to place a T into the ``Accept queue''
+whereas
+ |ADD_TOKEN_TO_ERROR_QUEUE| and |ADD_TOKEN_TO_ERROR_QUEUE_FSM|
+macros
+store the T into the ``Error queue''.
+\fbreak
+{\bf{Note}}: Reference to |current_token|
+to fetch its token stream gps.
+
+@<Cpager\_1 failed directive@>=
+
+ CAbs_lr1_sym* sym = new Err_bad_T_inputted;
+ sym->set_rc(*parser__->current_token__,__FILE__,__LINE__);
+ ADD_TOKEN_TO_ERROR_QUEUE_FSM(*sym);
+ return true;
+
+@*2 |@!Rs| rule.\fbreak
+\fbreak
+\convertMPtoPDF{pager_1.1}{1}{1}
+@.Re@>
+@.eog@>
+@*2 |@!Re| rule.\fbreak
+\fbreak
+\convertMPtoPDF{pager_1.3}{1}{1}
+@.Rx@>
+@.Rx@>
+@.Ry@>
+@.Ry@>
+@*2 |@!Rx| rule.\fbreak
+\fbreak
+\convertMPtoPDF{pager_1.8}{1}{1}
+@.Rx@>
+@*2 |@!Ry| rule.\fbreak
+\fbreak
+\convertMPtoPDF{pager_1.11}{1}{1}
+@.Ry@>
+@** First Set Language for \Olinker.\fbreak
+\openin 1 = "/yacco2/grammar-testsuite/pager_1.fsc"
+\ifeof 1 true
+ \closein 1
+\else
+ \closein 1
+ \listing{"/yacco2/grammar-testsuite/pager_1.fsc"}\fi
+@** Lr1 State Network.\fbreak
+\statecolumnspace
+\stateno{1} {} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{c}&
+{Re}&
+{2\hss}&
+{3\hss}&
+{1\hss}&
+{{a}
+}&
+{1\hss}&
+{2\hss}&
+{6\hss}&
+{\hss}\cr
+{c}&
+{Re}&
+{2\hss}&
+{1\hss}&
+{1\hss}&
+{{a}
+}&
+{1\hss}&
+{2\hss}&
+{4\hss}&
+{\hss}\cr
+{c}&
+{Re}&
+{2\hss}&
+{2\hss}&
+{1\hss}&
+{{b}
+}&
+{1\hss}&
+{7\hss}&
+{9\hss}&
+{\hss}\cr
+{c}&
+{Re}&
+{2\hss}&
+{4\hss}&
+{1\hss}&
+{{b}
+}&
+{1\hss}&
+{7\hss}&
+{11\hss}&
+{\hss}\cr
+{c}&
+{Rs}&
+{1\hss}&
+{1\hss}&
+{1\hss}&
+{{Re}
+{$\underline{eog}$}
+}&
+{1\hss}&
+{12\hss}&
+{13\hss}&
+{\hss}\cr
+}
+\stateno{2} {a} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{c}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{2\hss}&
+{14\hss}&
+{15\hss}&
+{\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{2\hss}&
+{14\hss}&
+{14\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{2\hss}&
+{14\hss}&
+{16\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{2\hss}&
+{14\hss}&
+{14\hss}&
+{\hss}\cr
+{t}&
+{Re}&
+{2\hss}&
+{1\hss}&
+{2\hss}&
+{{Rx}
+{$\underline{d}$}
+}&
+{1\hss}&
+{3\hss}&
+{4\hss}&
+{\hss}\cr
+{t}&
+{Re}&
+{2\hss}&
+{3\hss}&
+{2\hss}&
+{{Ry}
+{$\underline{c}$}
+}&
+{1\hss}&
+{5\hss}&
+{6\hss}&
+{\hss}\cr
+}
+\stateno{3} {Rx} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{1\hss}&
+{3\hss}&
+{{d}
+}&
+{1\hss}&
+{4\hss}&
+{4\hss}&
+{\hss}\cr
+}
+\stateno{4} {d} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{1\hss}&
+{4\hss}&
+{{}
+}&
+{1\hss}&
+{0\hss}&
+{4\hss}&
+{1\hss}\cr
+}
+\stateno{5} {Ry} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{3\hss}&
+{3\hss}&
+{{c}
+}&
+{1\hss}&
+{6\hss}&
+{6\hss}&
+{\hss}\cr
+}
+\stateno{6} {c} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{3\hss}&
+{4\hss}&
+{{}
+}&
+{1\hss}&
+{0\hss}&
+{6\hss}&
+{1\hss}\cr
+}
+\stateno{7} {b} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{c}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{7\hss}&
+{17\hss}&
+{18\hss}&
+{\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{7\hss}&
+{17\hss}&
+{17\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{7\hss}&
+{17\hss}&
+{19\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{7\hss}&
+{17\hss}&
+{17\hss}&
+{\hss}\cr
+{t}&
+{Re}&
+{2\hss}&
+{2\hss}&
+{2\hss}&
+{{Rx}
+{$\underline{c}$}
+}&
+{1\hss}&
+{8\hss}&
+{9\hss}&
+{\hss}\cr
+{t}&
+{Re}&
+{2\hss}&
+{4\hss}&
+{2\hss}&
+{{Ry}
+{$\underline{d}$}
+}&
+{1\hss}&
+{10\hss}&
+{11\hss}&
+{\hss}\cr
+}
+\stateno{8} {Rx} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{2\hss}&
+{3\hss}&
+{{c}
+}&
+{1\hss}&
+{9\hss}&
+{9\hss}&
+{\hss}\cr
+}
+\stateno{9} {c} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{2\hss}&
+{4\hss}&
+{{}
+}&
+{1\hss}&
+{0\hss}&
+{9\hss}&
+{1\hss}\cr
+}
+\stateno{10} {Ry} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{4\hss}&
+{3\hss}&
+{{d}
+}&
+{1\hss}&
+{11\hss}&
+{11\hss}&
+{\hss}\cr
+}
+\stateno{11} {d} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Re}&
+{2\hss}&
+{4\hss}&
+{4\hss}&
+{{}
+}&
+{1\hss}&
+{0\hss}&
+{11\hss}&
+{1\hss}\cr
+}
+\stateno{12} {Re} {\Shiftonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rs}&
+{1\hss}&
+{1\hss}&
+{2\hss}&
+{{eog}
+}&
+{1\hss}&
+{13\hss}&
+{13\hss}&
+{\hss}\cr
+}
+\stateno{13} {eog} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rs}&
+{1\hss}&
+{1\hss}&
+{3\hss}&
+{{}
+}&
+{1\hss}&
+{0\hss}&
+{13\hss}&
+{2\hss}\cr
+}
+\stateno{14} {e} {\ShiftandMultipleReduces}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{2\hss}&
+{{}
+}&
+{2\hss}&
+{0\hss}&
+{14\hss}&
+{3\hss}\cr
+{t}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{2\hss}&
+{{}
+}&
+{2\hss}&
+{0\hss}&
+{14\hss}&
+{4\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{14\hss}&
+{14\hss}&
+{15\hss}&
+{\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{14\hss}&
+{14\hss}&
+{14\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{14\hss}&
+{14\hss}&
+{16\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{14\hss}&
+{14\hss}&
+{14\hss}&
+{\hss}\cr
+{t}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{2\hss}&
+{{Rx}
+}&
+{2\hss}&
+{15\hss}&
+{15\hss}&
+{\hss}\cr
+{t}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{2\hss}&
+{{Ry}
+}&
+{2\hss}&
+{16\hss}&
+{16\hss}&
+{\hss}\cr
+}
+\stateno{15} {Rx} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{3\hss}&
+{{}
+}&
+{2\hss}&
+{0\hss}&
+{15\hss}&
+{3\hss}\cr
+}
+\stateno{16} {Ry} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{3\hss}&
+{{}
+}&
+{2\hss}&
+{0\hss}&
+{16\hss}&
+{4\hss}\cr
+}
+\stateno{17} {e} {\ShiftandMultipleReduces}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{2\hss}&
+{{}
+}&
+{7\hss}&
+{0\hss}&
+{17\hss}&
+{4\hss}\cr
+{t}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{2\hss}&
+{{}
+}&
+{7\hss}&
+{0\hss}&
+{17\hss}&
+{3\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{17\hss}&
+{17\hss}&
+{18\hss}&
+{\hss}\cr
+{c}&
+{Rx}&
+{3\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{17\hss}&
+{17\hss}&
+{17\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{1\hss}&
+{{e}
+}&
+{17\hss}&
+{17\hss}&
+{19\hss}&
+{\hss}\cr
+{c}&
+{Ry}&
+{4\hss}&
+{2\hss}&
+{1\hss}&
+{{e}
+}&
+{17\hss}&
+{17\hss}&
+{17\hss}&
+{\hss}\cr
+{t}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{2\hss}&
+{{Rx}
+}&
+{7\hss}&
+{18\hss}&
+{18\hss}&
+{\hss}\cr
+{t}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{2\hss}&
+{{Ry}
+}&
+{7\hss}&
+{19\hss}&
+{19\hss}&
+{\hss}\cr
+}
+\stateno{18} {Rx} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Rx}&
+{3\hss}&
+{1\hss}&
+{3\hss}&
+{{}
+}&
+{7\hss}&
+{0\hss}&
+{18\hss}&
+{4\hss}\cr
+}
+\stateno{19} {Ry} {\Reduceonly}
+\halign{
+\span\statetemplate
+\statetitle
+{t}&
+{Ry}&
+{4\hss}&
+{1\hss}&
+{3\hss}&
+{{}
+}&
+{7\hss}&
+{0\hss}&
+{19\hss}&
+{3\hss}\cr
+}
+@** Index.
diff --git a/web/yacco2/grammar-testsuite/pager_1_idx.pdf b/web/yacco2/grammar-testsuite/pager_1_idx.pdf
new file mode 100644
index 0000000000..ba8e7478da
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/pager_1sym.cpp b/web/yacco2/grammar-testsuite/pager_1sym.cpp
new file mode 100644
index 0000000000..ba3da17aae
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1sym.cpp
@@ -0,0 +1,153 @@
+/*
+ File: pager_1sym.cpp
+ Date and Time: Sat Jan 31 11:58:44 2015
+*/
+#include "pager_1.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cpager_1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rx_:{
+ Rx* sym;
+ if(re->rule_ == 0){
+ sym = new Rx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rx_:{
+ Rx* sym;
+ if(re->rule_ == 0){
+ sym = new Rx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Ry_:{
+ Ry* sym;
+ if(re->rule_ == 0){
+ sym = new Ry(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ry*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Ry_:{
+ Ry* sym;
+ if(re->rule_ == 0){
+ sym = new Ry(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ry*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/pager_1tbl.cpp b/web/yacco2/grammar-testsuite/pager_1tbl.cpp
new file mode 100644
index 0000000000..71259dfd9a
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_1tbl.cpp
@@ -0,0 +1,353 @@
+/*
+ File: pager_1tbl.cpp
+ Date and Time: Sat Jan 31 11:58:44 2015
+*/
+#include "pager_1.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_1;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Cpager_1[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cpager_1[] ={
+1
+,0,4
+};
+// raw_d
+yacco2::UCHAR LA3_Cpager_1[] ={
+1
+,13,16
+};
+// raw_c
+yacco2::UCHAR LA4_Cpager_1[] ={
+1
+,13,8
+};
+extern yacco2::State S1_Cpager_1;
+extern yacco2::State S2_Cpager_1;
+extern yacco2::State S3_Cpager_1;
+extern yacco2::State S4_Cpager_1;
+extern yacco2::State S5_Cpager_1;
+extern yacco2::State S6_Cpager_1;
+extern yacco2::State S7_Cpager_1;
+extern yacco2::State S8_Cpager_1;
+extern yacco2::State S9_Cpager_1;
+extern yacco2::State S10_Cpager_1;
+extern yacco2::State S11_Cpager_1;
+extern yacco2::State S12_Cpager_1;
+extern yacco2::State S13_Cpager_1;
+extern yacco2::State S14_Cpager_1;
+extern yacco2::State S15_Cpager_1;
+extern yacco2::State S16_Cpager_1;
+extern yacco2::State S17_Cpager_1;
+extern yacco2::State S18_Cpager_1;
+extern yacco2::State S19_Cpager_1;
+struct S1std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cpager_1 S1st_Cpager_1 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Cpager_1} // shift sym: raw_a
+ ,{106,(State*)&S7_Cpager_1} // shift sym: raw_b
+ ,{269,(State*)&S1_Cpager_1} // accept sym: Rs
+ ,{270,(State*)&S12_Cpager_1} // shift sym: Re
+ }// end of shift table
+};
+yacco2::State S1_Cpager_1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cpager_1,0,0,0,0};
+struct S2std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Cpager_1 S2st_Cpager_1 = {
+ 3
+ ,
+ {// start of table
+ {109,(State*)&S14_Cpager_1} // shift sym: raw_e
+ ,{271,(State*)&S3_Cpager_1} // shift sym: Rx
+ ,{272,(State*)&S5_Cpager_1} // shift sym: Ry
+ }// end of shift table
+};
+yacco2::State S2_Cpager_1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cpager_1,0,0,0,0};
+struct S3std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cpager_1 S3st_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Cpager_1} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S3_Cpager_1 = //State's vectored into symbol: "Rx"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cpager_1,0,0,0,0};
+struct S4rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cpager_1 S4rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_1,Cpager_1::rhs1_Re_}
+ }// end of reduce table
+};
+yacco2::State S4_Cpager_1 = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cpager_1,0,0,0};
+struct S5std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cpager_1 S5st_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S6_Cpager_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S5_Cpager_1 = //State's vectored into symbol: "Ry"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cpager_1,0,0,0,0};
+struct S6rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cpager_1 S6rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_1,Cpager_1::rhs3_Re_}
+ }// end of reduce table
+};
+yacco2::State S6_Cpager_1 = //State's vectored into symbol: "c"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cpager_1,0,0,0};
+struct S7std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Cpager_1 S7st_Cpager_1 = {
+ 3
+ ,
+ {// start of table
+ {109,(State*)&S17_Cpager_1} // shift sym: raw_e
+ ,{271,(State*)&S8_Cpager_1} // shift sym: Rx
+ ,{272,(State*)&S10_Cpager_1} // shift sym: Ry
+ }// end of shift table
+};
+yacco2::State S7_Cpager_1 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cpager_1,0,0,0,0};
+struct S8std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cpager_1 S8st_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S9_Cpager_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S8_Cpager_1 = //State's vectored into symbol: "Rx"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cpager_1,0,0,0,0};
+struct S9rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cpager_1 S9rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_1,Cpager_1::rhs2_Re_}
+ }// end of reduce table
+};
+yacco2::State S9_Cpager_1 = //State's vectored into symbol: "c"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cpager_1,0,0,0};
+struct S10std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cpager_1 S10st_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S11_Cpager_1} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S10_Cpager_1 = //State's vectored into symbol: "Ry"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cpager_1,0,0,0,0};
+struct S11rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cpager_1 S11rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_1,Cpager_1::rhs4_Re_}
+ }// end of reduce table
+};
+yacco2::State S11_Cpager_1 = //State's vectored into symbol: "d"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cpager_1,0,0,0};
+struct S12std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Cpager_1 S12st_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Cpager_1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Cpager_1 = //State's vectored into symbol: "Re"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cpager_1,0,0,0,0};
+struct S13rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cpager_1 S13rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cpager_1,Cpager_1::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S13_Cpager_1 = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cpager_1,0,0,0};
+struct S14std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S14std_Cpager_1 S14st_Cpager_1 = {
+ 3
+ ,
+ {// start of table
+ {109,(State*)&S14_Cpager_1} // shift sym: raw_e
+ ,{271,(State*)&S15_Cpager_1} // shift sym: Rx
+ ,{272,(State*)&S16_Cpager_1} // shift sym: Ry
+ }// end of shift table
+};
+struct S14rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S14rtd_Cpager_1 S14rt_Cpager_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cpager_1,Cpager_1::rhs2_Rx_}
+ ,{(Set_tbl*)&LA4_Cpager_1,Cpager_1::rhs2_Ry_}
+ }// end of reduce table
+};
+yacco2::State S14_Cpager_1 = //State's vectored into symbol: "e"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cpager_1,(Reduce_tbl*)&S14rt_Cpager_1,0,0,0};
+struct S15rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cpager_1 S15rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cpager_1,Cpager_1::rhs1_Rx_}
+ }// end of reduce table
+};
+yacco2::State S15_Cpager_1 = //State's vectored into symbol: "Rx"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cpager_1,0,0,0};
+struct S16rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cpager_1 S16rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_1,Cpager_1::rhs1_Ry_}
+ }// end of reduce table
+};
+yacco2::State S16_Cpager_1 = //State's vectored into symbol: "Ry"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Cpager_1,0,0,0};
+struct S17std_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Cpager_1 S17st_Cpager_1 = {
+ 3
+ ,
+ {// start of table
+ {109,(State*)&S17_Cpager_1} // shift sym: raw_e
+ ,{271,(State*)&S18_Cpager_1} // shift sym: Rx
+ ,{272,(State*)&S19_Cpager_1} // shift sym: Ry
+ }// end of shift table
+};
+struct S17rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S17rtd_Cpager_1 S17rt_Cpager_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_1,Cpager_1::rhs2_Rx_}
+ ,{(Set_tbl*)&LA3_Cpager_1,Cpager_1::rhs2_Ry_}
+ }// end of reduce table
+};
+yacco2::State S17_Cpager_1 = //State's vectored into symbol: "e"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cpager_1,(Reduce_tbl*)&S17rt_Cpager_1,0,0,0};
+struct S18rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cpager_1 S18rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_1,Cpager_1::rhs1_Rx_}
+ }// end of reduce table
+};
+yacco2::State S18_Cpager_1 = //State's vectored into symbol: "Rx"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cpager_1,0,0,0};
+struct S19rtd_Cpager_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cpager_1 S19rt_Cpager_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cpager_1,Cpager_1::rhs1_Ry_}
+ }// end of reduce table
+};
+yacco2::State S19_Cpager_1 = //State's vectored into symbol: "Ry"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cpager_1,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/pager_2.cpp b/web/yacco2/grammar-testsuite/pager_2.cpp
new file mode 100644
index 0000000000..711c9f276c
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2.cpp
@@ -0,0 +1,128 @@
+/*
+ File: pager_2.cpp
+ Date and Time: Sat Jan 31 11:58:48 2015
+*/
+#include "pager_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 10;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+}
+ Cpager_2::
+ Cpager_2()
+ :yacco2::CAbs_fsm
+ ("pager_2.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"Test out David Pager LR(1) resolution page 61."
+ ,"Sat Jan 31 11:58:48 2015 "
+ ,S1_Cpager_2){
+
+ }
+
+Cpager_2::~Cpager_2(){
+
+ for(int x = 0;x < 10;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cpager_2::failed(){
+ return false;
+ }
+ void Cpager_2::op(){
+}
+int Cpager_2::rhs_to_rules_mapping_[25] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,1 // subrule 8 for rule 2
+ ,1 // subrule 9 for rule 2
+ ,2 // subrule 10 for rule 3
+ ,3 // subrule 11 for rule 4
+ ,4 // subrule 12 for rule 5
+ ,4 // subrule 13 for rule 5
+ ,5 // subrule 14 for rule 6
+ ,5 // subrule 15 for rule 6
+ ,6 // subrule 16 for rule 7
+ ,6 // subrule 17 for rule 7
+ ,7 // subrule 18 for rule 8
+ ,7 // subrule 19 for rule 8
+ ,7 // subrule 20 for rule 8
+ ,7 // subrule 21 for rule 8
+ ,8 // subrule 22 for rule 9
+ ,8 // subrule 23 for rule 9
+ ,9 // subrule 24 for rule 10
+};
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Cpager_2::R_Rs_,P,false,false){
+}
+
+Rg::Rg(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rg",0,Cpager_2::R_Rg_,P,false,false){
+}
+
+Rw::Rw(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rw",0,Cpager_2::R_Rw_,P,false,false){
+}
+
+Rv::Rv(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rv",0,Cpager_2::R_Rv_,P,false,false){
+}
+
+Rx::Rx(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rx",0,Cpager_2::R_Rx_,P,false,false){
+}
+
+Ry::Ry(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ry",0,Cpager_2::R_Ry_,P,false,false){
+}
+
+Ru::Ru(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ru",0,Cpager_2::R_Ru_,P,false,false){
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Cpager_2::R_Re_,P,false,false){
+}
+
+Rc::Rc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc",0,Cpager_2::R_Rc_,P,false,false){
+}
+
+Rp::Rp(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rp",0,Cpager_2::R_Rp_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/pager_2.fsc b/web/yacco2/grammar-testsuite/pager_2.fsc
new file mode 100644
index 0000000000..bd2e2097f3
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2.fsc
@@ -0,0 +1,23 @@
+/*
+ File: pager_2.fsc
+ Date and Time: Sat Jan 31 11:58:48 2015
+*/
+transitive n
+grammar-name "pager_2"
+name-space "NS_pager_2"
+thread-name "Cpager_2"
+monolithic y
+file-name "pager_2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ raw_u
+ raw_x
+ raw_y
+ raw_z
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out David Pager LR(1) resolution page 61."
diff --git a/web/yacco2/grammar-testsuite/pager_2.h b/web/yacco2/grammar-testsuite/pager_2.h
new file mode 100644
index 0000000000..15dcdd409f
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2.h
@@ -0,0 +1,135 @@
+/*
+ File: pager_2.h
+ Date and Time: Sat Jan 31 11:58:48 2015
+*/
+#ifndef __pager_2_h__
+#define __pager_2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cpager_2;
+namespace NS_pager_2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[10];
+};
+class Cpager_2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rs_ = 569//start_of_rule_list + 0
+ ,rhs1_Rs_ = 1
+ ,R_Rg_ = 570//start_of_rule_list + 2
+ ,rhs1_Rg_ = 2
+ ,rhs2_Rg_ = 3
+ ,rhs3_Rg_ = 4
+ ,rhs4_Rg_ = 5
+ ,rhs5_Rg_ = 6
+ ,rhs6_Rg_ = 7
+ ,rhs7_Rg_ = 8
+ ,rhs8_Rg_ = 9
+ ,R_Rw_ = 571//start_of_rule_list + 4
+ ,rhs1_Rw_ = 10
+ ,R_Rv_ = 572//start_of_rule_list + 6
+ ,rhs1_Rv_ = 11
+ ,R_Rx_ = 573//start_of_rule_list + 8
+ ,rhs1_Rx_ = 12
+ ,rhs2_Rx_ = 13
+ ,R_Ry_ = 574//start_of_rule_list + 10
+ ,rhs1_Ry_ = 14
+ ,rhs2_Ry_ = 15
+ ,R_Ru_ = 575//start_of_rule_list + 12
+ ,rhs1_Ru_ = 16
+ ,rhs2_Ru_ = 17
+ ,R_Re_ = 576//start_of_rule_list + 14
+ ,rhs1_Re_ = 18
+ ,rhs2_Re_ = 19
+ ,rhs3_Re_ = 20
+ ,rhs4_Re_ = 21
+ ,R_Rc_ = 577//start_of_rule_list + 16
+ ,rhs1_Rc_ = 22
+ ,rhs2_Rc_ = 23
+ ,R_Rp_ = 578//start_of_rule_list + 18
+ ,rhs1_Rp_ = 24
+ };
+ //no of la sets = 7
+ //no of states = 40
+ Cpager_2();
+ ~Cpager_2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[25];
+ };
+struct Rs;
+struct Rg;
+struct Rw;
+struct Rv;
+struct Rx;
+struct Ry;
+struct Ru;
+struct Re;
+struct Rc;
+struct Rp;
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Rg:public yacco2::CAbs_lr1_sym {
+ Rg(yacco2::Parser* P);
+ public:
+};
+
+struct Rw:public yacco2::CAbs_lr1_sym {
+ Rw(yacco2::Parser* P);
+ public:
+};
+
+struct Rv:public yacco2::CAbs_lr1_sym {
+ Rv(yacco2::Parser* P);
+ public:
+};
+
+struct Rx:public yacco2::CAbs_lr1_sym {
+ Rx(yacco2::Parser* P);
+ public:
+};
+
+struct Ry:public yacco2::CAbs_lr1_sym {
+ Ry(yacco2::Parser* P);
+ public:
+};
+
+struct Ru:public yacco2::CAbs_lr1_sym {
+ Ru(yacco2::Parser* P);
+ public:
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ public:
+};
+
+struct Rc:public yacco2::CAbs_lr1_sym {
+ Rc(yacco2::Parser* P);
+ public:
+};
+
+struct Rp:public yacco2::CAbs_lr1_sym {
+ Rp(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/pager_2.lex b/web/yacco2/grammar-testsuite/pager_2.lex
new file mode 100644
index 0000000000..f34ffe2014
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2.lex
@@ -0,0 +1,75 @@
+/*
+Author: Dave Bone
+FILE: pager_2.lex
+Date: 7 mar 2014
+Purpose: Test out David Pager lr(1) resolution page 61
+*/
+/@
+@** David Pager Grammar.\fbreak
+David Pager\fbreak
+The Lane Table Method Of Constructing LR(1) Parsers.\fbreak
+@/
+fsm
+(fsm-id "pager_2.lex",fsm-filename pager_2,fsm-namespace NS_pager_2
+,fsm-class Cpager_2
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "Test out David Pager LR(1) resolution page 61.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+
+Rs(){
+ -> Rg eog
+}
+
+Rg(){
+ -> x Rw a
+ -> x Rv t
+ -> y Rw b
+ -> y Rv t
+ -> z Rw r
+ -> z Rv b
+ -> u Ru Rx a
+ -> u Ru Ry r
+}
+
+Rw(){
+ -> Ru Rx Rc
+}
+
+Rv(){
+ -> Ru Ry d
+}
+
+Rx(){
+ -> k t Ru Rx Rp
+ -> k t
+}
+
+Ry(){
+ -> k t Ru Ry u
+ -> k t
+}
+
+Ru(){
+ -> Ru k t
+ -> s
+}
+
+Re(){
+ -> a
+ -> b
+ -> c
+ -> v
+}
+
+Rc(){
+ -> c
+ -> w
+}
+
+Rp(){
+ -> z
+}
+
+}
diff --git a/web/yacco2/grammar-testsuite/pager_2.pdf b/web/yacco2/grammar-testsuite/pager_2.pdf
new file mode 100644
index 0000000000..10d6a9e0ff
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/pager_2_idx.pdf b/web/yacco2/grammar-testsuite/pager_2_idx.pdf
new file mode 100644
index 0000000000..c0093bee25
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/pager_2sym.cpp b/web/yacco2/grammar-testsuite/pager_2sym.cpp
new file mode 100644
index 0000000000..d83adcec29
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2sym.cpp
@@ -0,0 +1,363 @@
+/*
+ File: pager_2sym.cpp
+ Date and Time: Sat Jan 31 11:58:48 2015
+*/
+#include "pager_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cpager_2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs5_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs6_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs7_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs8_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_Rw_:{
+ Rw* sym;
+ if(re->rule_ == 0){
+ sym = new Rw(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rw*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rv_:{
+ Rv* sym;
+ if(re->rule_ == 0){
+ sym = new Rv(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rv*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Rx_:{
+ Rx* sym;
+ if(re->rule_ == 0){
+ sym = new Rx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Rx_:{
+ Rx* sym;
+ if(re->rule_ == 0){
+ sym = new Rx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Ry_:{
+ Ry* sym;
+ if(re->rule_ == 0){
+ sym = new Ry(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ry*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs2_Ry_:{
+ Ry* sym;
+ if(re->rule_ == 0){
+ sym = new Ry(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ry*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Ru_:{
+ Ru* sym;
+ if(re->rule_ == 0){
+ sym = new Ru(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ru*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Ru_:{
+ Ru* sym;
+ if(re->rule_ == 0){
+ sym = new Ru(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ru*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rc_:{
+ Rc* sym;
+ if(re->rule_ == 0){
+ sym = new Rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rc_:{
+ Rc* sym;
+ if(re->rule_ == 0){
+ sym = new Rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rp_:{
+ Rp* sym;
+ if(re->rule_ == 0){
+ sym = new Rp(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rp*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/pager_2tbl.cpp b/web/yacco2/grammar-testsuite/pager_2tbl.cpp
new file mode 100644
index 0000000000..5bacd6f66b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/pager_2tbl.cpp
@@ -0,0 +1,699 @@
+/*
+ File: pager_2tbl.cpp
+ Date and Time: Sat Jan 31 11:58:48 2015
+*/
+#include "pager_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_pager_2;// grammar's ns
+// first set terminals
+// raw_a
+// raw_c
+// raw_w
+// raw_z
+yacco2::UCHAR LA1_Cpager_2[] ={
+3
+,13,10
+,15,128
+,16,4
+};
+// raw_d
+// raw_r
+// raw_u
+yacco2::UCHAR LA2_Cpager_2[] ={
+2
+,13,16
+,15,36
+};
+// raw_k
+yacco2::UCHAR LA3_Cpager_2[] ={
+1
+,14,8
+};
+// LR1_eog
+yacco2::UCHAR LA4_Cpager_2[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA5_Cpager_2[] ={
+1
+,0,4
+};
+// raw_a
+// raw_b
+// raw_r
+yacco2::UCHAR LA6_Cpager_2[] ={
+2
+,13,6
+,15,4
+};
+// raw_b
+// raw_t
+yacco2::UCHAR LA7_Cpager_2[] ={
+2
+,13,4
+,15,16
+};
+extern yacco2::State S1_Cpager_2;
+extern yacco2::State S2_Cpager_2;
+extern yacco2::State S3_Cpager_2;
+extern yacco2::State S4_Cpager_2;
+extern yacco2::State S5_Cpager_2;
+extern yacco2::State S6_Cpager_2;
+extern yacco2::State S7_Cpager_2;
+extern yacco2::State S8_Cpager_2;
+extern yacco2::State S9_Cpager_2;
+extern yacco2::State S10_Cpager_2;
+extern yacco2::State S11_Cpager_2;
+extern yacco2::State S12_Cpager_2;
+extern yacco2::State S13_Cpager_2;
+extern yacco2::State S14_Cpager_2;
+extern yacco2::State S15_Cpager_2;
+extern yacco2::State S16_Cpager_2;
+extern yacco2::State S17_Cpager_2;
+extern yacco2::State S18_Cpager_2;
+extern yacco2::State S19_Cpager_2;
+extern yacco2::State S20_Cpager_2;
+extern yacco2::State S21_Cpager_2;
+extern yacco2::State S22_Cpager_2;
+extern yacco2::State S23_Cpager_2;
+extern yacco2::State S24_Cpager_2;
+extern yacco2::State S25_Cpager_2;
+extern yacco2::State S26_Cpager_2;
+extern yacco2::State S27_Cpager_2;
+extern yacco2::State S28_Cpager_2;
+extern yacco2::State S29_Cpager_2;
+extern yacco2::State S30_Cpager_2;
+extern yacco2::State S31_Cpager_2;
+extern yacco2::State S32_Cpager_2;
+extern yacco2::State S33_Cpager_2;
+extern yacco2::State S34_Cpager_2;
+extern yacco2::State S35_Cpager_2;
+extern yacco2::State S36_Cpager_2;
+extern yacco2::State S37_Cpager_2;
+extern yacco2::State S38_Cpager_2;
+extern yacco2::State S39_Cpager_2;
+extern yacco2::State S40_Cpager_2;
+struct S1std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Cpager_2 S1st_Cpager_2 = {
+ 6
+ ,
+ {// start of table
+ {125,(State*)&S2_Cpager_2} // shift sym: raw_u
+ ,{128,(State*)&S16_Cpager_2} // shift sym: raw_x
+ ,{129,(State*)&S21_Cpager_2} // shift sym: raw_y
+ ,{130,(State*)&S26_Cpager_2} // shift sym: raw_z
+ ,{569,(State*)&S1_Cpager_2} // accept sym: Rs
+ ,{570,(State*)&S31_Cpager_2} // shift sym: Rg
+ }// end of shift table
+};
+yacco2::State S1_Cpager_2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cpager_2,0,0,0,0};
+struct S2std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cpager_2 S2st_Cpager_2 = {
+ 2
+ ,
+ {// start of table
+ {123,(State*)&S33_Cpager_2} // shift sym: raw_s
+ ,{575,(State*)&S3_Cpager_2} // shift sym: Ru
+ }// end of shift table
+};
+yacco2::State S2_Cpager_2 = //State's vectored into symbol: "u"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cpager_2,0,0,0,0};
+struct S3std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Cpager_2 S3st_Cpager_2 = {
+ 3
+ ,
+ {// start of table
+ {115,(State*)&S4_Cpager_2} // shift sym: raw_k
+ ,{573,(State*)&S12_Cpager_2} // shift sym: Rx
+ ,{574,(State*)&S14_Cpager_2} // shift sym: Ry
+ }// end of shift table
+};
+yacco2::State S3_Cpager_2 = //State's vectored into symbol: "Ru"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cpager_2,0,0,0,0};
+struct S4std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Cpager_2 S4st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {124,(State*)&S5_Cpager_2} // shift sym: raw_t
+ }// end of shift table
+};
+yacco2::State S4_Cpager_2 = //State's vectored into symbol: "k"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cpager_2,0,0,0,0};
+struct S5std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Cpager_2 S5st_Cpager_2 = {
+ 2
+ ,
+ {// start of table
+ {123,(State*)&S33_Cpager_2} // shift sym: raw_s
+ ,{575,(State*)&S6_Cpager_2} // shift sym: Ru
+ }// end of shift table
+};
+struct S5rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[3];
+};
+S5rtd_Cpager_2 S5rt_Cpager_2 = {
+ 3
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_2,Cpager_2::rhs2_Rx_}
+ ,{(Set_tbl*)&LA2_Cpager_2,Cpager_2::rhs2_Ry_}
+ ,{(Set_tbl*)&LA3_Cpager_2,Cpager_2::rhs1_Ru_}
+ }// end of reduce table
+};
+yacco2::State S5_Cpager_2 = //State's vectored into symbol: "t"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cpager_2,(Reduce_tbl*)&S5rt_Cpager_2,0,0,0};
+struct S6std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Cpager_2 S6st_Cpager_2 = {
+ 3
+ ,
+ {// start of table
+ {115,(State*)&S4_Cpager_2} // shift sym: raw_k
+ ,{573,(State*)&S7_Cpager_2} // shift sym: Rx
+ ,{574,(State*)&S10_Cpager_2} // shift sym: Ry
+ }// end of shift table
+};
+yacco2::State S6_Cpager_2 = //State's vectored into symbol: "Ru"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cpager_2,0,0,0,0};
+struct S7std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Cpager_2 S7st_Cpager_2 = {
+ 2
+ ,
+ {// start of table
+ {130,(State*)&S8_Cpager_2} // shift sym: raw_z
+ ,{578,(State*)&S9_Cpager_2} // shift sym: Rp
+ }// end of shift table
+};
+yacco2::State S7_Cpager_2 = //State's vectored into symbol: "Rx"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cpager_2,0,0,0,0};
+struct S8rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cpager_2 S8rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_2,Cpager_2::rhs1_Rp_}
+ }// end of reduce table
+};
+yacco2::State S8_Cpager_2 = //State's vectored into symbol: "z"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cpager_2,0,0,0};
+struct S9rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cpager_2 S9rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cpager_2,Cpager_2::rhs1_Rx_}
+ }// end of reduce table
+};
+yacco2::State S9_Cpager_2 = //State's vectored into symbol: "Rp"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cpager_2,0,0,0};
+struct S10std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cpager_2 S10st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {125,(State*)&S11_Cpager_2} // shift sym: raw_u
+ }// end of shift table
+};
+yacco2::State S10_Cpager_2 = //State's vectored into symbol: "Ry"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cpager_2,0,0,0,0};
+struct S11rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cpager_2 S11rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cpager_2,Cpager_2::rhs1_Ry_}
+ }// end of reduce table
+};
+yacco2::State S11_Cpager_2 = //State's vectored into symbol: "u"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cpager_2,0,0,0};
+struct S12std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Cpager_2 S12st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S13_Cpager_2} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S12_Cpager_2 = //State's vectored into symbol: "Rx"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cpager_2,0,0,0,0};
+struct S13rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Cpager_2 S13rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs7_Rg_}
+ }// end of reduce table
+};
+yacco2::State S13_Cpager_2 = //State's vectored into symbol: "a"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Cpager_2,0,0,0};
+struct S14std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Cpager_2 S14st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {122,(State*)&S15_Cpager_2} // shift sym: raw_r
+ }// end of shift table
+};
+yacco2::State S14_Cpager_2 = //State's vectored into symbol: "Ry"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cpager_2,0,0,0,0};
+struct S15rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cpager_2 S15rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs8_Rg_}
+ }// end of reduce table
+};
+yacco2::State S15_Cpager_2 = //State's vectored into symbol: "r"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cpager_2,0,0,0};
+struct S16std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S16std_Cpager_2 S16st_Cpager_2 = {
+ 4
+ ,
+ {// start of table
+ {123,(State*)&S33_Cpager_2} // shift sym: raw_s
+ ,{571,(State*)&S17_Cpager_2} // shift sym: Rw
+ ,{572,(State*)&S19_Cpager_2} // shift sym: Rv
+ ,{575,(State*)&S34_Cpager_2} // shift sym: Ru
+ }// end of shift table
+};
+yacco2::State S16_Cpager_2 = //State's vectored into symbol: "x"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cpager_2,0,0,0,0};
+struct S17std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Cpager_2 S17st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S18_Cpager_2} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S17_Cpager_2 = //State's vectored into symbol: "Rw"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cpager_2,0,0,0,0};
+struct S18rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cpager_2 S18rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs1_Rg_}
+ }// end of reduce table
+};
+yacco2::State S18_Cpager_2 = //State's vectored into symbol: "a"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Cpager_2,0,0,0};
+struct S19std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S19std_Cpager_2 S19st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {124,(State*)&S20_Cpager_2} // shift sym: raw_t
+ }// end of shift table
+};
+yacco2::State S19_Cpager_2 = //State's vectored into symbol: "Rv"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Cpager_2,0,0,0,0};
+struct S20rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Cpager_2 S20rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs2_Rg_}
+ }// end of reduce table
+};
+yacco2::State S20_Cpager_2 = //State's vectored into symbol: "t"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Cpager_2,0,0,0};
+struct S21std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S21std_Cpager_2 S21st_Cpager_2 = {
+ 4
+ ,
+ {// start of table
+ {123,(State*)&S33_Cpager_2} // shift sym: raw_s
+ ,{571,(State*)&S22_Cpager_2} // shift sym: Rw
+ ,{572,(State*)&S24_Cpager_2} // shift sym: Rv
+ ,{575,(State*)&S34_Cpager_2} // shift sym: Ru
+ }// end of shift table
+};
+yacco2::State S21_Cpager_2 = //State's vectored into symbol: "y"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Cpager_2,0,0,0,0};
+struct S22std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S22std_Cpager_2 S22st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S23_Cpager_2} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S22_Cpager_2 = //State's vectored into symbol: "Rw"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Cpager_2,0,0,0,0};
+struct S23rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Cpager_2 S23rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs3_Rg_}
+ }// end of reduce table
+};
+yacco2::State S23_Cpager_2 = //State's vectored into symbol: "b"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Cpager_2,0,0,0};
+struct S24std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S24std_Cpager_2 S24st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {124,(State*)&S25_Cpager_2} // shift sym: raw_t
+ }// end of shift table
+};
+yacco2::State S24_Cpager_2 = //State's vectored into symbol: "Rv"
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Cpager_2,0,0,0,0};
+struct S25rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Cpager_2 S25rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs4_Rg_}
+ }// end of reduce table
+};
+yacco2::State S25_Cpager_2 = //State's vectored into symbol: "t"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Cpager_2,0,0,0};
+struct S26std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S26std_Cpager_2 S26st_Cpager_2 = {
+ 4
+ ,
+ {// start of table
+ {123,(State*)&S33_Cpager_2} // shift sym: raw_s
+ ,{571,(State*)&S27_Cpager_2} // shift sym: Rw
+ ,{572,(State*)&S29_Cpager_2} // shift sym: Rv
+ ,{575,(State*)&S34_Cpager_2} // shift sym: Ru
+ }// end of shift table
+};
+yacco2::State S26_Cpager_2 = //State's vectored into symbol: "z"
+{26
+,0,0,0,0,(Shift_tbl*)&S26st_Cpager_2,0,0,0,0};
+struct S27std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S27std_Cpager_2 S27st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {122,(State*)&S28_Cpager_2} // shift sym: raw_r
+ }// end of shift table
+};
+yacco2::State S27_Cpager_2 = //State's vectored into symbol: "Rw"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Cpager_2,0,0,0,0};
+struct S28rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Cpager_2 S28rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs5_Rg_}
+ }// end of reduce table
+};
+yacco2::State S28_Cpager_2 = //State's vectored into symbol: "r"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Cpager_2,0,0,0};
+struct S29std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S29std_Cpager_2 S29st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S30_Cpager_2} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S29_Cpager_2 = //State's vectored into symbol: "Rv"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Cpager_2,0,0,0,0};
+struct S30rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Cpager_2 S30rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cpager_2,Cpager_2::rhs6_Rg_}
+ }// end of reduce table
+};
+yacco2::State S30_Cpager_2 = //State's vectored into symbol: "b"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Cpager_2,0,0,0};
+struct S31std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S31std_Cpager_2 S31st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S32_Cpager_2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S31_Cpager_2 = //State's vectored into symbol: "Rg"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Cpager_2,0,0,0,0};
+struct S32rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Cpager_2 S32rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Cpager_2,Cpager_2::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S32_Cpager_2 = //State's vectored into symbol: "eog"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Cpager_2,0,0,0};
+struct S33rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Cpager_2 S33rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cpager_2,Cpager_2::rhs2_Ru_}
+ }// end of reduce table
+};
+yacco2::State S33_Cpager_2 = //State's vectored into symbol: "s"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Cpager_2,0,0,0};
+struct S34std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S34std_Cpager_2 S34st_Cpager_2 = {
+ 3
+ ,
+ {// start of table
+ {115,(State*)&S4_Cpager_2} // shift sym: raw_k
+ ,{573,(State*)&S35_Cpager_2} // shift sym: Rx
+ ,{574,(State*)&S39_Cpager_2} // shift sym: Ry
+ }// end of shift table
+};
+yacco2::State S34_Cpager_2 = //State's vectored into symbol: "Ru"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Cpager_2,0,0,0,0};
+struct S35std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S35std_Cpager_2 S35st_Cpager_2 = {
+ 3
+ ,
+ {// start of table
+ {107,(State*)&S36_Cpager_2} // shift sym: raw_c
+ ,{127,(State*)&S37_Cpager_2} // shift sym: raw_w
+ ,{577,(State*)&S38_Cpager_2} // shift sym: Rc
+ }// end of shift table
+};
+yacco2::State S35_Cpager_2 = //State's vectored into symbol: "Rx"
+{35
+,0,0,0,0,(Shift_tbl*)&S35st_Cpager_2,0,0,0,0};
+struct S36rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Cpager_2 S36rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cpager_2,Cpager_2::rhs1_Rc_}
+ }// end of reduce table
+};
+yacco2::State S36_Cpager_2 = //State's vectored into symbol: "c"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Cpager_2,0,0,0};
+struct S37rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Cpager_2 S37rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cpager_2,Cpager_2::rhs2_Rc_}
+ }// end of reduce table
+};
+yacco2::State S37_Cpager_2 = //State's vectored into symbol: "w"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Cpager_2,0,0,0};
+struct S38rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S38rtd_Cpager_2 S38rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Cpager_2,Cpager_2::rhs1_Rw_}
+ }// end of reduce table
+};
+yacco2::State S38_Cpager_2 = //State's vectored into symbol: "Rc"
+{38
+,0,0,0,0,0,(Reduce_tbl*)&S38rt_Cpager_2,0,0,0};
+struct S39std_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S39std_Cpager_2 S39st_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S40_Cpager_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S39_Cpager_2 = //State's vectored into symbol: "Ry"
+{39
+,0,0,0,0,(Shift_tbl*)&S39st_Cpager_2,0,0,0,0};
+struct S40rtd_Cpager_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S40rtd_Cpager_2 S40rt_Cpager_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA7_Cpager_2,Cpager_2::rhs1_Rv_}
+ }// end of reduce table
+};
+yacco2::State S40_Cpager_2 = //State's vectored into symbol: "d"
+{40
+,0,0,0,0,0,(Reduce_tbl*)&S40rt_Cpager_2,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/sp_1.cpp b/web/yacco2/grammar-testsuite/sp_1.cpp
new file mode 100644
index 0000000000..386b362981
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1.cpp
@@ -0,0 +1,75 @@
+/*
+ File: sp_1.cpp
+ Date and Time: Sat Jan 31 11:58:53 2015
+*/
+#include "sp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Csp_1::
+ Csp_1()
+ :yacco2::CAbs_fsm
+ ("sp_1.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"Test out Spector LR(1) resolution from page 64."
+ ,"Sat Jan 31 11:58:53 2015 "
+ ,S1_Csp_1){
+
+ }
+
+Csp_1::~Csp_1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csp_1::failed(){
+ return false;
+ }
+ void Csp_1::op(){
+}
+int Csp_1::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+};
+Rmm::Rmm(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rmm",0,Csp_1::R_Rmm_,P,false,false){
+}
+
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Csp_1::R_Rs_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Csp_1::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Csp_1::R_Rb_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/sp_1.fsc b/web/yacco2/grammar-testsuite/sp_1.fsc
new file mode 100644
index 0000000000..2e0ff8ba16
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1.fsc
@@ -0,0 +1,20 @@
+/*
+ File: sp_1.fsc
+ Date and Time: Sat Jan 31 11:58:53 2015
+*/
+transitive n
+grammar-name "sp_1"
+name-space "NS_sp_1"
+thread-name "Csp_1"
+monolithic y
+file-name "sp_1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out Spector LR(1) resolution from page 64."
diff --git a/web/yacco2/grammar-testsuite/sp_1.h b/web/yacco2/grammar-testsuite/sp_1.h
new file mode 100644
index 0000000000..61328ce647
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1.h
@@ -0,0 +1,76 @@
+/*
+ File: sp_1.h
+ Date and Time: Sat Jan 31 11:58:53 2015
+*/
+#ifndef __sp_1_h__
+#define __sp_1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Csp_1;
+namespace NS_sp_1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Csp_1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rmm_ = 569//start_of_rule_list + 0
+ ,rhs1_Rmm_ = 1
+ ,R_Rs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rs_ = 2
+ ,rhs2_Rs_ = 3
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 4
+ ,rhs2_Ra_ = 5
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 6
+ ,rhs2_Rb_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 17
+ Csp_1();
+ ~Csp_1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rmm;
+struct Rs;
+struct Ra;
+struct Rb;
+struct Rmm:public yacco2::CAbs_lr1_sym {
+ Rmm(yacco2::Parser* P);
+ public:
+};
+
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/sp_1.lex b/web/yacco2/grammar-testsuite/sp_1.lex
new file mode 100644
index 0000000000..4acf0be476
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1.lex
@@ -0,0 +1,40 @@
+/*
+Author: Dave Bone
+FILE: sp_1.lex
+Date: 7 mar 2014
+Purpose: Test out compiler/compiler with Kristensen and Madsen grammar - lalr resolution
+*/
+/@
+@** Spector Grammar.\fbreak
+David Spector\fbreak
+Full LR(1) Parser Generator ACM Sigplan Notices, 16(8), August 1981.\fbreak
+Test out LR(1) resolution - page 64.
+@/
+fsm
+(fsm-id "sp_1.lex",fsm-filename sp_1,fsm-namespace NS_sp_1
+,fsm-class Csp_1
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "Test out Spector LR(1) resolution from page 64.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+
+Rmm(){
+ -> Rs eog
+}
+
+Rs(){
+ -> Ra b
+ -> Rb c
+}
+
+Ra(){
+ -> a Ra c
+ -> a
+}
+
+Rb(){
+ -> a Rb b
+ -> a
+}
+}
diff --git a/web/yacco2/grammar-testsuite/sp_1.pdf b/web/yacco2/grammar-testsuite/sp_1.pdf
new file mode 100644
index 0000000000..a4b3b2dac1
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/sp_1_idx.pdf b/web/yacco2/grammar-testsuite/sp_1_idx.pdf
new file mode 100644
index 0000000000..53855b49a7
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/sp_1sym.cpp b/web/yacco2/grammar-testsuite/sp_1sym.cpp
new file mode 100644
index 0000000000..187e402c6a
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: sp_1sym.cpp
+ Date and Time: Sat Jan 31 11:58:53 2015
+*/
+#include "sp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Csp_1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rmm_:{
+ Rmm* sym;
+ if(re->rule_ == 0){
+ sym = new Rmm(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rmm*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/sp_1tbl.cpp b/web/yacco2/grammar-testsuite/sp_1tbl.cpp
new file mode 100644
index 0000000000..278c35a12b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_1tbl.cpp
@@ -0,0 +1,320 @@
+/*
+ File: sp_1tbl.cpp
+ Date and Time: Sat Jan 31 11:58:53 2015
+*/
+#include "sp_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_1;// grammar's ns
+// first set terminals
+// raw_b
+yacco2::UCHAR LA1_Csp_1[] ={
+1
+,13,4
+};
+// raw_c
+yacco2::UCHAR LA2_Csp_1[] ={
+1
+,13,8
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Csp_1[] ={
+1
+,0,4
+};
+// LR1_eog
+yacco2::UCHAR LA4_Csp_1[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Csp_1;
+extern yacco2::State S2_Csp_1;
+extern yacco2::State S3_Csp_1;
+extern yacco2::State S4_Csp_1;
+extern yacco2::State S5_Csp_1;
+extern yacco2::State S6_Csp_1;
+extern yacco2::State S7_Csp_1;
+extern yacco2::State S8_Csp_1;
+extern yacco2::State S9_Csp_1;
+extern yacco2::State S10_Csp_1;
+extern yacco2::State S11_Csp_1;
+extern yacco2::State S12_Csp_1;
+extern yacco2::State S13_Csp_1;
+extern yacco2::State S14_Csp_1;
+extern yacco2::State S15_Csp_1;
+extern yacco2::State S16_Csp_1;
+extern yacco2::State S17_Csp_1;
+struct S1std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Csp_1 S1st_Csp_1 = {
+ 5
+ ,
+ {// start of table
+ {105,(State*)&S2_Csp_1} // shift sym: raw_a
+ ,{569,(State*)&S1_Csp_1} // accept sym: Rmm
+ ,{570,(State*)&S7_Csp_1} // shift sym: Rs
+ ,{571,(State*)&S9_Csp_1} // shift sym: Ra
+ ,{572,(State*)&S11_Csp_1} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S1_Csp_1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Csp_1,0,0,0,0};
+struct S2std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Csp_1 S2st_Csp_1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S13_Csp_1} // shift sym: raw_a
+ ,{571,(State*)&S3_Csp_1} // shift sym: Ra
+ ,{572,(State*)&S5_Csp_1} // shift sym: Rb
+ }// end of shift table
+};
+struct S2rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S2rtd_Csp_1 S2rt_Csp_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_1,Csp_1::rhs2_Ra_}
+ ,{(Set_tbl*)&LA2_Csp_1,Csp_1::rhs2_Rb_}
+ }// end of reduce table
+};
+yacco2::State S2_Csp_1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Csp_1,(Reduce_tbl*)&S2rt_Csp_1,0,0,0};
+struct S3std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Csp_1 S3st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S4_Csp_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S3_Csp_1 = //State's vectored into symbol: "Ra"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Csp_1,0,0,0,0};
+struct S4rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Csp_1 S4rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_1,Csp_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S4_Csp_1 = //State's vectored into symbol: "c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Csp_1,0,0,0};
+struct S5std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Csp_1 S5st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S6_Csp_1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S5_Csp_1 = //State's vectored into symbol: "Rb"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Csp_1,0,0,0,0};
+struct S6rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Csp_1 S6rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csp_1,Csp_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S6_Csp_1 = //State's vectored into symbol: "b"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Csp_1,0,0,0};
+struct S7std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Csp_1 S7st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S8_Csp_1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S7_Csp_1 = //State's vectored into symbol: "Rs"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Csp_1,0,0,0,0};
+struct S8rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Csp_1 S8rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csp_1,Csp_1::rhs1_Rmm_}
+ }// end of reduce table
+};
+yacco2::State S8_Csp_1 = //State's vectored into symbol: "eog"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Csp_1,0,0,0};
+struct S9std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Csp_1 S9st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S10_Csp_1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S9_Csp_1 = //State's vectored into symbol: "Ra"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Csp_1,0,0,0,0};
+struct S10rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Csp_1 S10rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csp_1,Csp_1::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S10_Csp_1 = //State's vectored into symbol: "b"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Csp_1,0,0,0};
+struct S11std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Csp_1 S11st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S12_Csp_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S11_Csp_1 = //State's vectored into symbol: "Rb"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Csp_1,0,0,0,0};
+struct S12rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Csp_1 S12rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csp_1,Csp_1::rhs2_Rs_}
+ }// end of reduce table
+};
+yacco2::State S12_Csp_1 = //State's vectored into symbol: "c"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Csp_1,0,0,0};
+struct S13std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Csp_1 S13st_Csp_1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S13_Csp_1} // shift sym: raw_a
+ ,{571,(State*)&S14_Csp_1} // shift sym: Ra
+ ,{572,(State*)&S16_Csp_1} // shift sym: Rb
+ }// end of shift table
+};
+struct S13rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S13rtd_Csp_1 S13rt_Csp_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csp_1,Csp_1::rhs2_Ra_}
+ ,{(Set_tbl*)&LA1_Csp_1,Csp_1::rhs2_Rb_}
+ }// end of reduce table
+};
+yacco2::State S13_Csp_1 = //State's vectored into symbol: "a"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Csp_1,(Reduce_tbl*)&S13rt_Csp_1,0,0,0};
+struct S14std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Csp_1 S14st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S15_Csp_1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S14_Csp_1 = //State's vectored into symbol: "Ra"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Csp_1,0,0,0,0};
+struct S15rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Csp_1 S15rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csp_1,Csp_1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S15_Csp_1 = //State's vectored into symbol: "c"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Csp_1,0,0,0};
+struct S16std_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Csp_1 S16st_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S17_Csp_1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S16_Csp_1 = //State's vectored into symbol: "Rb"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Csp_1,0,0,0,0};
+struct S17rtd_Csp_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Csp_1 S17rt_Csp_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_1,Csp_1::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S17_Csp_1 = //State's vectored into symbol: "b"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Csp_1,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/sp_2.cpp b/web/yacco2/grammar-testsuite/sp_2.cpp
new file mode 100644
index 0000000000..6e8ea8576c
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2.cpp
@@ -0,0 +1,75 @@
+/*
+ File: sp_2.cpp
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Csp_2::
+ Csp_2()
+ :yacco2::CAbs_fsm
+ ("sp_2.lex"
+ ,"1.0"
+ ,"7 mar 2014"
+ ,false
+ ,"Test out Spector LR(1) resolution page 61."
+ ,"Sat Jan 31 11:58:57 2015 "
+ ,S1_Csp_2){
+
+ }
+
+Csp_2::~Csp_2(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Csp_2::failed(){
+ return false;
+ }
+ void Csp_2::op(){
+}
+int Csp_2::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rg::Rg(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rg",0,Csp_2::R_Rg_,P,false,false){
+}
+
+Rs::Rs(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rs",0,Csp_2::R_Rs_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Csp_2::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Csp_2::R_Rb_,P,false,false){
+}
+
diff --git a/web/yacco2/grammar-testsuite/sp_2.fsc b/web/yacco2/grammar-testsuite/sp_2.fsc
new file mode 100644
index 0000000000..04643b40a5
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: sp_2.fsc
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+transitive n
+grammar-name "sp_2"
+name-space "NS_sp_2"
+thread-name "Csp_2"
+monolithic y
+file-name "sp_2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Test out Spector LR(1) resolution page 61."
diff --git a/web/yacco2/grammar-testsuite/sp_2.h b/web/yacco2/grammar-testsuite/sp_2.h
new file mode 100644
index 0000000000..2f46c71613
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2.h
@@ -0,0 +1,76 @@
+/*
+ File: sp_2.h
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+#ifndef __sp_2_h__
+#define __sp_2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Csp_2;
+namespace NS_sp_2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Csp_2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rg_ = 569//start_of_rule_list + 0
+ ,rhs1_Rg_ = 1
+ ,R_Rs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rs_ = 2
+ ,rhs2_Rs_ = 3
+ ,rhs3_Rs_ = 4
+ ,rhs4_Rs_ = 5
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 6
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 15
+ Csp_2();
+ ~Csp_2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rg;
+struct Rs;
+struct Ra;
+struct Rb;
+struct Rg:public yacco2::CAbs_lr1_sym {
+ Rg(yacco2::Parser* P);
+ public:
+};
+
+struct Rs:public yacco2::CAbs_lr1_sym {
+ Rs(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/sp_2.lex b/web/yacco2/grammar-testsuite/sp_2.lex
new file mode 100644
index 0000000000..130feb53ad
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2.lex
@@ -0,0 +1,40 @@
+/*
+Author: Dave Bone
+FILE: sp_2.lex
+Date: 7 mar 2014
+Purpose: Test out Spector lr(1) resolution page 61
+*/
+/@
+@** Spector Grammar.\fbreak
+David Spector\fbreak
+Full LR(1) Parser Generator ACM Sigplan Notices, 16(8), August 1981.\fbreak
+Test out LR(1) resolution page 61.
+@/
+fsm
+(fsm-id "sp_2.lex",fsm-filename sp_2,fsm-namespace NS_sp_2
+,fsm-class Csp_2
+,fsm-version "1.0",fsm-date "7 mar 2014",fsm-debug "false"
+,fsm-comments "Test out Spector LR(1) resolution page 61.")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+
+Rg(){
+ -> Rs eog
+}
+
+Rs(){
+ -> a Ra c
+ -> a Rb d
+ -> b Ra d
+ -> b Rb c
+}
+
+Ra(){
+ -> f
+}
+
+Rb(){
+ -> f
+}
+}
diff --git a/web/yacco2/grammar-testsuite/sp_2.pdf b/web/yacco2/grammar-testsuite/sp_2.pdf
new file mode 100644
index 0000000000..dad7e8928b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/sp_2_idx.pdf b/web/yacco2/grammar-testsuite/sp_2_idx.pdf
new file mode 100644
index 0000000000..4a3abd708d
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2_idx.pdf
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/sp_2sym.cpp b/web/yacco2/grammar-testsuite/sp_2sym.cpp
new file mode 100644
index 0000000000..7869a8aea5
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: sp_2sym.cpp
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Csp_2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rg_:{
+ Rg* sym;
+ if(re->rule_ == 0){
+ sym = new Rg(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rg*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_Rs_:{
+ Rs* sym;
+ if(re->rule_ == 0){
+ sym = new Rs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/sp_2tbl.cpp b/web/yacco2/grammar-testsuite/sp_2tbl.cpp
new file mode 100644
index 0000000000..6bc32de307
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/sp_2tbl.cpp
@@ -0,0 +1,267 @@
+/*
+ File: sp_2tbl.cpp
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+#include "sp_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_sp_2;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Csp_2[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Csp_2[] ={
+1
+,0,4
+};
+// raw_c
+yacco2::UCHAR LA3_Csp_2[] ={
+1
+,13,8
+};
+// raw_d
+yacco2::UCHAR LA4_Csp_2[] ={
+1
+,13,16
+};
+extern yacco2::State S1_Csp_2;
+extern yacco2::State S2_Csp_2;
+extern yacco2::State S3_Csp_2;
+extern yacco2::State S4_Csp_2;
+extern yacco2::State S5_Csp_2;
+extern yacco2::State S6_Csp_2;
+extern yacco2::State S7_Csp_2;
+extern yacco2::State S8_Csp_2;
+extern yacco2::State S9_Csp_2;
+extern yacco2::State S10_Csp_2;
+extern yacco2::State S11_Csp_2;
+extern yacco2::State S12_Csp_2;
+extern yacco2::State S13_Csp_2;
+extern yacco2::State S14_Csp_2;
+extern yacco2::State S15_Csp_2;
+struct S1std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Csp_2 S1st_Csp_2 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Csp_2} // shift sym: raw_a
+ ,{106,(State*)&S7_Csp_2} // shift sym: raw_b
+ ,{569,(State*)&S1_Csp_2} // accept sym: Rg
+ ,{570,(State*)&S12_Csp_2} // shift sym: Rs
+ }// end of shift table
+};
+yacco2::State S1_Csp_2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Csp_2,0,0,0,0};
+struct S2std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Csp_2 S2st_Csp_2 = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S14_Csp_2} // shift sym: raw_f
+ ,{571,(State*)&S3_Csp_2} // shift sym: Ra
+ ,{572,(State*)&S5_Csp_2} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S2_Csp_2 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Csp_2,0,0,0,0};
+struct S3std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Csp_2 S3st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S4_Csp_2} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S3_Csp_2 = //State's vectored into symbol: "Ra"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Csp_2,0,0,0,0};
+struct S4rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Csp_2 S4rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs1_Rs_}
+ }// end of reduce table
+};
+yacco2::State S4_Csp_2 = //State's vectored into symbol: "c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Csp_2,0,0,0};
+struct S5std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Csp_2 S5st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S6_Csp_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S5_Csp_2 = //State's vectored into symbol: "Rb"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Csp_2,0,0,0,0};
+struct S6rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Csp_2 S6rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs2_Rs_}
+ }// end of reduce table
+};
+yacco2::State S6_Csp_2 = //State's vectored into symbol: "d"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Csp_2,0,0,0};
+struct S7std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Csp_2 S7st_Csp_2 = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S15_Csp_2} // shift sym: raw_f
+ ,{571,(State*)&S8_Csp_2} // shift sym: Ra
+ ,{572,(State*)&S10_Csp_2} // shift sym: Rb
+ }// end of shift table
+};
+yacco2::State S7_Csp_2 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Csp_2,0,0,0,0};
+struct S8std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Csp_2 S8st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S9_Csp_2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S8_Csp_2 = //State's vectored into symbol: "Ra"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Csp_2,0,0,0,0};
+struct S9rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Csp_2 S9rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs3_Rs_}
+ }// end of reduce table
+};
+yacco2::State S9_Csp_2 = //State's vectored into symbol: "d"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Csp_2,0,0,0};
+struct S10std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Csp_2 S10st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S11_Csp_2} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S10_Csp_2 = //State's vectored into symbol: "Rb"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Csp_2,0,0,0,0};
+struct S11rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Csp_2 S11rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Csp_2,Csp_2::rhs4_Rs_}
+ }// end of reduce table
+};
+yacco2::State S11_Csp_2 = //State's vectored into symbol: "c"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Csp_2,0,0,0};
+struct S12std_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Csp_2 S12st_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Csp_2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Csp_2 = //State's vectored into symbol: "Rs"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Csp_2,0,0,0,0};
+struct S13rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Csp_2 S13rt_Csp_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Csp_2,Csp_2::rhs1_Rg_}
+ }// end of reduce table
+};
+yacco2::State S13_Csp_2 = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Csp_2,0,0,0};
+struct S14rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S14rtd_Csp_2 S14rt_Csp_2 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Csp_2,Csp_2::rhs1_Ra_}
+ ,{(Set_tbl*)&LA4_Csp_2,Csp_2::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S14_Csp_2 = //State's vectored into symbol: "f"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Csp_2,0,0,0};
+struct S15rtd_Csp_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S15rtd_Csp_2 S15rt_Csp_2 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Csp_2,Csp_2::rhs1_Ra_}
+ ,{(Set_tbl*)&LA3_Csp_2,Csp_2::rhs1_Rb_}
+ }// end of reduce table
+};
+yacco2::State S15_Csp_2 = //State's vectored into symbol: "f"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Csp_2,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/test-out-grammars.sh b/web/yacco2/grammar-testsuite/test-out-grammars.sh
new file mode 100755
index 0000000000..72bdf396d7
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/test-out-grammars.sh
@@ -0,0 +1,120 @@
+#! /bin/sh
+#file: test-out-grammars.bat
+# verify that o2 works against some lr(0), lr(1), and lalr(1) grammars
+#o2=/mnt/c2d0s0/yacco2/bin/o2
+# parms: -t -err
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+cont=n
+ccresult=0
+
+sw1=$1
+sw2=$2
+sw3=$3
+sw4=$4
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ eval "$o2 $sw1 $sw2 $sw3 $sw4 $1"
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+ for j in $sw1 $sw2 $sw3 $sw4
+ do
+ case $j in
+ *p)
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ eval "pdftex $file_name_only.tex"
+ xref="$file_name_only""_idx"
+ echo "%%%%%%%%%%%%%%%%% index file: $xref to cweave and pdftex"
+ eval "cweave $xref.w"
+ eval "pdftex $xref.tex"
+ pdftops "$file_name_only.pdf"
+ pdftops "$xref"".pdf"
+ esac
+ done
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ ##eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ ##eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+for i in `find /usr/local/yacco2/grammar-testsuite | grep '.*\.lex$'`;
+do
+ echo "==========> Test Grammar to compile: $i"
+ file_no=$((++file_no))
+ if test $((file_no)) -ge $((file_pos)); then
+ file_no_ext=${i%%.*}
+ cc_lex $i $file_no_ext
+ fi
+done
+
+echo "==========> Run testout program against some data files"
+cd /usr/local/yacco2/grammar-testsuite
+./testout testout_1.dat
+./testout testout_2.dat
+./testout testout_3.dat
+./testout xxxx \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout b/web/yacco2/grammar-testsuite/testout
new file mode 100755
index 0000000000..46b0bcbce6
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout
Binary files differ
diff --git a/web/yacco2/grammar-testsuite/testout.cpp b/web/yacco2/grammar-testsuite/testout.cpp
new file mode 100644
index 0000000000..142bc1d8eb
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout.cpp
@@ -0,0 +1,171 @@
+/*14:*/
+#line 212 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+/*2:*/
+#line 54 "/usr/local//yacco2/grammar-testsuite/testout_comments.w"
+
+/*3:*/
+#line 11 "/usr/local//yacco2/grammar-testsuite/testout_includes.w"
+
+#include "testout.h"
+
+/*:3*/
+#line 55 "/usr/local//yacco2/grammar-testsuite/testout_comments.w"
+;
+
+#line 1 "/usr/local//yacco2/grammar-testsuite/testout_includes.w"
+
+
+
+
+
+
+
+/*:2*//*5:*/
+#line 13 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+#define Max_buf_size 2*1024
+std::string Holding_file("testout_holding_file.cmd");
+std::string To_parse_file;
+
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE JUNK_tokens;
+yacco2::TOKEN_GAGGLE IP_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+
+/*:5*//*7:*/
+#line 64 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+void GET_CMD_LINE(int argc,char*argv[]
+,const char*Holding
+,std::string&File_to_parse
+,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace std;
+using namespace NS_testout_err_symbols;
+using namespace yacco2;
+ofstream ofile;
+ofile.open(Holding,ios_base::out|ios::trunc);
+if(!ofile){
+CAbs_lr1_sym*sym= new Err_bad_filename(Holding);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+if(argc==1){
+char cmd_line[Max_buf_size];
+cout<<"Please enter Command line to process: ";
+cin.get(cmd_line,Max_buf_size,'\n');
+ofile<<cmd_line;
+File_to_parse+= cmd_line;
+ofile.close();
+}else{
+for(int x= 1;x<argc;++x){
+ofile<<argv[x];
+File_to_parse+= argv[x];
+}
+ofile.close();
+}
+tok_can<std::ifstream> Cmd1_tokens(Holding);
+ifstream ifile;
+ifile.open(File_to_parse.c_str());
+if(!ifile){
+CAbs_lr1_sym*sym= new Err_bad_filename(File_to_parse.c_str());
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+ifile.close();
+return;
+}
+/*:7*//*8:*/
+#line 114 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_k_symbols;
+using namespace yacco2;
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+using namespace NS_testout_err_hdlr;
+
+Ctestout_err_hdlr fsm;
+Parser pass_errors(fsm,&Errors,0);
+pass_errors.parse();
+yacco2::Parallel_threads_shutdown(pass_errors);
+}
+
+/*:8*//*9:*/
+#line 148 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+int main(int argc,char*argv[])
+{
+std::cout<<"testout start"<<std::endl;
+using namespace yacco2;
+/*11:*/
+#line 184 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+yacco2::YACCO2_T__= 1;
+yacco2::YACCO2_TH__= 1;
+yacco2::YACCO2_MSG__= 1;
+
+
+/*:11*/
+#line 153 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+;
+/*12:*/
+#line 191 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+GET_CMD_LINE(argc,argv,Holding_file.c_str(),To_parse_file,Error_queue);
+/*13:*/
+#line 202 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+
+/*:13*/
+#line 193 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+;
+
+
+/*:12*/
+#line 154 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+;
+using namespace NS_pager_1;
+tok_can<std::ifstream> cmd_line(To_parse_file.c_str());
+Cpager_1 pager_1_fsm;
+Parser testout_parse(pager_1_fsm,&cmd_line,&IP_tokens,0,&Error_queue,&JUNK_tokens,0);
+if(testout_parse.parse()==Parser::erred){
+std::cout<<"===============>ERROR OCCURRED"<<std::endl;
+/*13:*/
+#line 202 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+
+/*:13*/
+#line 161 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+;
+}
+
+exit:
+std::cout<<"Exiting testout"<<std::endl;
+return 0;
+}
+
+/*:9*/
+#line 213 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+;
+
+#line 15 "./testout.w"
+/*:14*/
diff --git a/web/yacco2/grammar-testsuite/testout.fsc b/web/yacco2/grammar-testsuite/testout.fsc
new file mode 100644
index 0000000000..b9e6b732b8
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout.fsc
@@ -0,0 +1,19 @@
+/*
+file: /yacco2/grammar-testsuite/testout.fsc
+*/
+file-of-T-alphabet "/yacco2/grammar-testsuite/testout_T_enumeration.fsc"
+emitfile "/yacco2/grammar-testsuite/testout_fsc.cpp"
+preamble
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "testout_terminals.h"
+#include "yacco2_characters.h"
+using namespace NS_testout_T_enum;
+using namespace NS_testout_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_testout_terminals;
+using namespace NS_yacco2_characters;
+end-preamble
+"/yacco2/grammar-testsuite/pager_1.fsc"
+"/yacco2/grammar-testsuite/testout_err_hdlr.fsc"
diff --git a/web/yacco2/grammar-testsuite/testout.h b/web/yacco2/grammar-testsuite/testout.h
new file mode 100644
index 0000000000..9b45fe9294
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout.h
@@ -0,0 +1,39 @@
+/*4:*/
+#line 26 "/usr/local//yacco2/grammar-testsuite/testout_includes.w"
+
+
+#line 27 "/usr/local//yacco2/grammar-testsuite/testout_includes.w"
+
+#ifndef testout__
+#define testout__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "testout_terminals.h"
+#include "testout_err_symbols.h"
+#include "pager_1.h"
+#include "testout_err_hdlr.h"
+
+using namespace std;
+using namespace NS_testout_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_testout_terminals;
+using namespace NS_testout_err_symbols;
+using namespace yacco2;
+#endif
+#line 1 "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+
+
+
+
+
+
+
+
+/*:4*/
diff --git a/web/yacco2/grammar-testsuite/testout.w b/web/yacco2/grammar-testsuite/testout.w
new file mode 100644
index 0000000000..a588e24688
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout.w
@@ -0,0 +1,15 @@
+@q file: testout.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+@i "/usr/local/yacco2/license.w"
+@i "/usr/local//yacco2/grammar-testsuite/testout_comments.w"
+@i "/usr/local//yacco2/grammar-testsuite/testout_includes.w"
+@i "/usr/local//yacco2/grammar-testsuite/testout_prog.w"
+@** Index. \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_1.dat b/web/yacco2/grammar-testsuite/testout_1.dat
new file mode 100644
index 0000000000..b30fd9d1f8
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_1.dat
@@ -0,0 +1 @@
+aeeeeed \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_2.dat b/web/yacco2/grammar-testsuite/testout_2.dat
new file mode 100644
index 0000000000..c123665cf1
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_2.dat
@@ -0,0 +1 @@
+aeeeec \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_3.dat b/web/yacco2/grammar-testsuite/testout_3.dat
new file mode 100644
index 0000000000..3774b9f589
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_3.dat
@@ -0,0 +1 @@
+aeeexz \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_T_enumeration.T b/web/yacco2/grammar-testsuite/testout_T_enumeration.T
new file mode 100644
index 0000000000..39484d6eda
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_T_enumeration.T
@@ -0,0 +1,39 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: testout_T_enumeration.lex
+Date: 25 July 2014
+Author: Dave Bone
+Purpose:
+ Supplies emitted enumeration file name and namespace. The lr1 compiler/compiler
+ generates the "enum" type for the 4 classes of terminals:
+ 1) lr1 constants
+ 2) raw characters
+ 3) errors
+ 4) terminals
+ Note:
+ The enumerated type is emitted which is referenced in the other
+ emitted grammars via the "#include" directive having a symbol ordering:
+ 0 <= Lr1_K < raw chars < error terminals < Terminals < grammar's Rules
+ The subrules of a grammar's rule are locally enumerated within the grammar
+ starting from 1.
+
+ This order is per emitted grammar. That is to say, each parallel grammar has
+ its own generated lr1 table using the enumerated terminal class symbols with
+ its enumerated rules starting 1 after the high bound of the enumerated terminal
+ classes.
+ After the parameters, a { k-body } can follow. This k-body
+ is used for global definitions of contants:
+ {
+ constant-defs
+ C++ syntax directed code for constant definitions
+ ***
+ }
+
+*/
+T-enumeration
+(file-name testout_T_enumeration
+,name-space NS_testout_T_enum) {
+}
diff --git a/web/yacco2/grammar-testsuite/testout_T_enumeration.fsc b/web/yacco2/grammar-testsuite/testout_T_enumeration.fsc
new file mode 100644
index 0000000000..48cd0374ca
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_T_enumeration.fsc
@@ -0,0 +1,275 @@
+/*
+ File: testout_T_enumeration.fsc
+ Date and Time: Mon Jun 9 08:45:19 2014
+*/
+T-alphabet
+LR1_questionable_shift_operator
+LR1_eog
+LR1_eolr
+LR1_parallel_operator
+LR1_reduce_operator
+LR1_invisible_shift_operator
+LR1_all_shift_operator
+LR1_fset_transience_operator
+raw_nul
+raw_soh
+raw_stx
+raw_etx
+raw_eot
+raw_enq
+raw_ack
+raw_bel
+raw_bs
+raw_ht
+raw_lf
+raw_vt
+raw_ff
+raw_cr
+raw_so
+raw_si
+raw_dle
+raw_dc1
+raw_dc2
+raw_dc3
+raw_dc4
+raw_nak
+raw_syn
+raw_etb
+raw_can
+raw_em
+raw_sub
+raw_esc
+raw_fs
+raw_gs
+raw_rs
+raw_us
+raw_sp
+raw_exclam
+raw_dbl_quote
+raw_no_sign
+raw_dollar_sign
+raw_percent
+raw_ampersign
+raw_right_quote
+raw_open_bracket
+raw_close_bracket
+raw_asteric
+raw_plus
+raw_comma
+raw_minus
+raw_period
+raw_slash
+raw_0
+raw_1
+raw_2
+raw_3
+raw_4
+raw_5
+raw_6
+raw_7
+raw_8
+raw_9
+raw_colon
+raw_semi_colon
+raw_less_than
+raw_eq
+raw_gt_than
+raw_question_mark
+raw_at_sign
+raw_A
+raw_B
+raw_C
+raw_D
+raw_E
+raw_F
+raw_G
+raw_H
+raw_I
+raw_J
+raw_K
+raw_L
+raw_M
+raw_N
+raw_O
+raw_P
+raw_Q
+raw_R
+raw_S
+raw_T
+raw_U
+raw_V
+raw_W
+raw_X
+raw_Y
+raw_Z
+raw_open_sq_bracket
+raw_back_slash
+raw_close_sq_bracket
+raw_up_arrow
+raw_under_score
+raw_left_quote
+raw_a
+raw_b
+raw_c
+raw_d
+raw_e
+raw_f
+raw_g
+raw_h
+raw_i
+raw_j
+raw_k
+raw_l
+raw_m
+raw_n
+raw_o
+raw_p
+raw_q
+raw_r
+raw_s
+raw_t
+raw_u
+raw_v
+raw_w
+raw_x
+raw_y
+raw_z
+raw_open_brace
+raw_vertical_line
+raw_close_brace
+raw_tilde
+raw_del
+raw_x80
+raw_x81
+raw_x82
+raw_x83
+raw_x84
+raw_x85
+raw_x86
+raw_x87
+raw_x88
+raw_x89
+raw_x8a
+raw_x8b
+raw_x8c
+raw_x8d
+raw_x8e
+raw_x8f
+raw_x90
+raw_x91
+raw_x92
+raw_x93
+raw_x94
+raw_x95
+raw_x96
+raw_x97
+raw_x98
+raw_x99
+raw_x9a
+raw_x9b
+raw_x9c
+raw_x9d
+raw_x9e
+raw_x9f
+raw_xa0
+raw_xa1
+raw_xa2
+raw_xa3
+raw_xa4
+raw_xa5
+raw_xa6
+raw_xa7
+raw_xa8
+raw_xa9
+raw_xaa
+raw_xab
+raw_xac
+raw_xad
+raw_xae
+raw_xaf
+raw_xb0
+raw_xb1
+raw_xb2
+raw_xb3
+raw_xb4
+raw_xb5
+raw_xb6
+raw_xb7
+raw_xb8
+raw_xb9
+raw_xba
+raw_xbb
+raw_xbc
+raw_xbd
+raw_xbe
+raw_xbf
+raw_xc0
+raw_xc1
+raw_xc2
+raw_xc3
+raw_xc4
+raw_xc5
+raw_xc6
+raw_xc7
+raw_xc8
+raw_xc9
+raw_xca
+raw_xcb
+raw_xcc
+raw_xcd
+raw_xce
+raw_xcf
+raw_xd0
+raw_xd1
+raw_xd2
+raw_xd3
+raw_xd4
+raw_xd5
+raw_xd6
+raw_xd7
+raw_xd8
+raw_xd9
+raw_xda
+raw_xdb
+raw_xdc
+raw_xdd
+raw_xde
+raw_xdf
+raw_xe0
+raw_xe1
+raw_xe2
+raw_xe3
+raw_xe4
+raw_xe5
+raw_xe6
+raw_xe7
+raw_xe8
+raw_xe9
+raw_xea
+raw_xeb
+raw_xec
+raw_xed
+raw_xee
+raw_xef
+raw_xf0
+raw_xf1
+raw_xf2
+raw_xf3
+raw_xf4
+raw_xf5
+raw_xf6
+raw_xf7
+raw_xf8
+raw_xf9
+raw_xfa
+raw_xfb
+raw_xfc
+raw_xfd
+raw_xfe
+raw_xff
+T_testout_ok
+Err_no_cmd_lne_data
+Err_no_filename
+Err_bad_filename
+Err_bad_T_inputted
+end-T-alphabet
diff --git a/web/yacco2/grammar-testsuite/testout_T_enumeration.h b/web/yacco2/grammar-testsuite/testout_T_enumeration.h
new file mode 100644
index 0000000000..29f521ab72
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_T_enumeration.h
@@ -0,0 +1,292 @@
+/*
+ File: testout_T_enumeration.h
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+#ifndef __testout_T_enumeration_h__
+#define __testout_T_enumeration_h__ 1
+namespace NS_testout_T_enum {
+ struct T_Enum {
+ enum enumerated_terminals {
+ sum_total_T = 269
+ ,no_of_terminals = 1
+ ,no_of_raw_chars = 256
+ ,no_of_lr1_constants = 8
+ ,no_of_error_terminals = 4
+ ,start_LRK=0,end_LRK=7
+ ,start_RC=8,end_RC=263
+ ,start_T=264,end_T=264
+ ,start_ERR=265,end_ERR=268
+ ,start_R=269
+ ,T_LR1_questionable_shift_operator_ = 0
+ ,T_LR1_eog_ = 1
+ ,T_LR1_eolr_ = 2
+ ,T_LR1_parallel_operator_ = 3
+ ,T_LR1_reduce_operator_ = 4
+ ,T_LR1_invisible_shift_operator_ = 5
+ ,T_LR1_all_shift_operator_ = 6
+ ,T_LR1_fset_transience_operator_ = 7
+ ,T_raw_nul_ = 8
+ ,T_raw_soh_ = 9
+ ,T_raw_stx_ = 10
+ ,T_raw_etx_ = 11
+ ,T_raw_eot_ = 12
+ ,T_raw_enq_ = 13
+ ,T_raw_ack_ = 14
+ ,T_raw_bel_ = 15
+ ,T_raw_bs_ = 16
+ ,T_raw_ht_ = 17
+ ,T_raw_lf_ = 18
+ ,T_raw_vt_ = 19
+ ,T_raw_ff_ = 20
+ ,T_raw_cr_ = 21
+ ,T_raw_so_ = 22
+ ,T_raw_si_ = 23
+ ,T_raw_dle_ = 24
+ ,T_raw_dc1_ = 25
+ ,T_raw_dc2_ = 26
+ ,T_raw_dc3_ = 27
+ ,T_raw_dc4_ = 28
+ ,T_raw_nak_ = 29
+ ,T_raw_syn_ = 30
+ ,T_raw_etb_ = 31
+ ,T_raw_can_ = 32
+ ,T_raw_em_ = 33
+ ,T_raw_sub_ = 34
+ ,T_raw_esc_ = 35
+ ,T_raw_fs_ = 36
+ ,T_raw_gs_ = 37
+ ,T_raw_rs_ = 38
+ ,T_raw_us_ = 39
+ ,T_raw_sp_ = 40
+ ,T_raw_exclam_ = 41
+ ,T_raw_dbl_quote_ = 42
+ ,T_raw_no_sign_ = 43
+ ,T_raw_dollar_sign_ = 44
+ ,T_raw_percent_ = 45
+ ,T_raw_ampersign_ = 46
+ ,T_raw_right_quote_ = 47
+ ,T_raw_open_bracket_ = 48
+ ,T_raw_close_bracket_ = 49
+ ,T_raw_asteric_ = 50
+ ,T_raw_plus_ = 51
+ ,T_raw_comma_ = 52
+ ,T_raw_minus_ = 53
+ ,T_raw_period_ = 54
+ ,T_raw_slash_ = 55
+ ,T_raw_0_ = 56
+ ,T_raw_1_ = 57
+ ,T_raw_2_ = 58
+ ,T_raw_3_ = 59
+ ,T_raw_4_ = 60
+ ,T_raw_5_ = 61
+ ,T_raw_6_ = 62
+ ,T_raw_7_ = 63
+ ,T_raw_8_ = 64
+ ,T_raw_9_ = 65
+ ,T_raw_colon_ = 66
+ ,T_raw_semi_colon_ = 67
+ ,T_raw_less_than_ = 68
+ ,T_raw_eq_ = 69
+ ,T_raw_gt_than_ = 70
+ ,T_raw_question_mark_ = 71
+ ,T_raw_at_sign_ = 72
+ ,T_raw_A_ = 73
+ ,T_raw_B_ = 74
+ ,T_raw_C_ = 75
+ ,T_raw_D_ = 76
+ ,T_raw_E_ = 77
+ ,T_raw_F_ = 78
+ ,T_raw_G_ = 79
+ ,T_raw_H_ = 80
+ ,T_raw_I_ = 81
+ ,T_raw_J_ = 82
+ ,T_raw_K_ = 83
+ ,T_raw_L_ = 84
+ ,T_raw_M_ = 85
+ ,T_raw_N_ = 86
+ ,T_raw_O_ = 87
+ ,T_raw_P_ = 88
+ ,T_raw_Q_ = 89
+ ,T_raw_R_ = 90
+ ,T_raw_S_ = 91
+ ,T_raw_T_ = 92
+ ,T_raw_U_ = 93
+ ,T_raw_V_ = 94
+ ,T_raw_W_ = 95
+ ,T_raw_X_ = 96
+ ,T_raw_Y_ = 97
+ ,T_raw_Z_ = 98
+ ,T_raw_open_sq_bracket_ = 99
+ ,T_raw_back_slash_ = 100
+ ,T_raw_close_sq_bracket_ = 101
+ ,T_raw_up_arrow_ = 102
+ ,T_raw_under_score_ = 103
+ ,T_raw_left_quote_ = 104
+ ,T_raw_a_ = 105
+ ,T_raw_b_ = 106
+ ,T_raw_c_ = 107
+ ,T_raw_d_ = 108
+ ,T_raw_e_ = 109
+ ,T_raw_f_ = 110
+ ,T_raw_g_ = 111
+ ,T_raw_h_ = 112
+ ,T_raw_i_ = 113
+ ,T_raw_j_ = 114
+ ,T_raw_k_ = 115
+ ,T_raw_l_ = 116
+ ,T_raw_m_ = 117
+ ,T_raw_n_ = 118
+ ,T_raw_o_ = 119
+ ,T_raw_p_ = 120
+ ,T_raw_q_ = 121
+ ,T_raw_r_ = 122
+ ,T_raw_s_ = 123
+ ,T_raw_t_ = 124
+ ,T_raw_u_ = 125
+ ,T_raw_v_ = 126
+ ,T_raw_w_ = 127
+ ,T_raw_x_ = 128
+ ,T_raw_y_ = 129
+ ,T_raw_z_ = 130
+ ,T_raw_open_brace_ = 131
+ ,T_raw_vertical_line_ = 132
+ ,T_raw_close_brace_ = 133
+ ,T_raw_tilde_ = 134
+ ,T_raw_del_ = 135
+ ,T_raw_x80_ = 136
+ ,T_raw_x81_ = 137
+ ,T_raw_x82_ = 138
+ ,T_raw_x83_ = 139
+ ,T_raw_x84_ = 140
+ ,T_raw_x85_ = 141
+ ,T_raw_x86_ = 142
+ ,T_raw_x87_ = 143
+ ,T_raw_x88_ = 144
+ ,T_raw_x89_ = 145
+ ,T_raw_x8a_ = 146
+ ,T_raw_x8b_ = 147
+ ,T_raw_x8c_ = 148
+ ,T_raw_x8d_ = 149
+ ,T_raw_x8e_ = 150
+ ,T_raw_x8f_ = 151
+ ,T_raw_x90_ = 152
+ ,T_raw_x91_ = 153
+ ,T_raw_x92_ = 154
+ ,T_raw_x93_ = 155
+ ,T_raw_x94_ = 156
+ ,T_raw_x95_ = 157
+ ,T_raw_x96_ = 158
+ ,T_raw_x97_ = 159
+ ,T_raw_x98_ = 160
+ ,T_raw_x99_ = 161
+ ,T_raw_x9a_ = 162
+ ,T_raw_x9b_ = 163
+ ,T_raw_x9c_ = 164
+ ,T_raw_x9d_ = 165
+ ,T_raw_x9e_ = 166
+ ,T_raw_x9f_ = 167
+ ,T_raw_xa0_ = 168
+ ,T_raw_xa1_ = 169
+ ,T_raw_xa2_ = 170
+ ,T_raw_xa3_ = 171
+ ,T_raw_xa4_ = 172
+ ,T_raw_xa5_ = 173
+ ,T_raw_xa6_ = 174
+ ,T_raw_xa7_ = 175
+ ,T_raw_xa8_ = 176
+ ,T_raw_xa9_ = 177
+ ,T_raw_xaa_ = 178
+ ,T_raw_xab_ = 179
+ ,T_raw_xac_ = 180
+ ,T_raw_xad_ = 181
+ ,T_raw_xae_ = 182
+ ,T_raw_xaf_ = 183
+ ,T_raw_xb0_ = 184
+ ,T_raw_xb1_ = 185
+ ,T_raw_xb2_ = 186
+ ,T_raw_xb3_ = 187
+ ,T_raw_xb4_ = 188
+ ,T_raw_xb5_ = 189
+ ,T_raw_xb6_ = 190
+ ,T_raw_xb7_ = 191
+ ,T_raw_xb8_ = 192
+ ,T_raw_xb9_ = 193
+ ,T_raw_xba_ = 194
+ ,T_raw_xbb_ = 195
+ ,T_raw_xbc_ = 196
+ ,T_raw_xbd_ = 197
+ ,T_raw_xbe_ = 198
+ ,T_raw_xbf_ = 199
+ ,T_raw_xc0_ = 200
+ ,T_raw_xc1_ = 201
+ ,T_raw_xc2_ = 202
+ ,T_raw_xc3_ = 203
+ ,T_raw_xc4_ = 204
+ ,T_raw_xc5_ = 205
+ ,T_raw_xc6_ = 206
+ ,T_raw_xc7_ = 207
+ ,T_raw_xc8_ = 208
+ ,T_raw_xc9_ = 209
+ ,T_raw_xca_ = 210
+ ,T_raw_xcb_ = 211
+ ,T_raw_xcc_ = 212
+ ,T_raw_xcd_ = 213
+ ,T_raw_xce_ = 214
+ ,T_raw_xcf_ = 215
+ ,T_raw_xd0_ = 216
+ ,T_raw_xd1_ = 217
+ ,T_raw_xd2_ = 218
+ ,T_raw_xd3_ = 219
+ ,T_raw_xd4_ = 220
+ ,T_raw_xd5_ = 221
+ ,T_raw_xd6_ = 222
+ ,T_raw_xd7_ = 223
+ ,T_raw_xd8_ = 224
+ ,T_raw_xd9_ = 225
+ ,T_raw_xda_ = 226
+ ,T_raw_xdb_ = 227
+ ,T_raw_xdc_ = 228
+ ,T_raw_xdd_ = 229
+ ,T_raw_xde_ = 230
+ ,T_raw_xdf_ = 231
+ ,T_raw_xe0_ = 232
+ ,T_raw_xe1_ = 233
+ ,T_raw_xe2_ = 234
+ ,T_raw_xe3_ = 235
+ ,T_raw_xe4_ = 236
+ ,T_raw_xe5_ = 237
+ ,T_raw_xe6_ = 238
+ ,T_raw_xe7_ = 239
+ ,T_raw_xe8_ = 240
+ ,T_raw_xe9_ = 241
+ ,T_raw_xea_ = 242
+ ,T_raw_xeb_ = 243
+ ,T_raw_xec_ = 244
+ ,T_raw_xed_ = 245
+ ,T_raw_xee_ = 246
+ ,T_raw_xef_ = 247
+ ,T_raw_xf0_ = 248
+ ,T_raw_xf1_ = 249
+ ,T_raw_xf2_ = 250
+ ,T_raw_xf3_ = 251
+ ,T_raw_xf4_ = 252
+ ,T_raw_xf5_ = 253
+ ,T_raw_xf6_ = 254
+ ,T_raw_xf7_ = 255
+ ,T_raw_xf8_ = 256
+ ,T_raw_xf9_ = 257
+ ,T_raw_xfa_ = 258
+ ,T_raw_xfb_ = 259
+ ,T_raw_xfc_ = 260
+ ,T_raw_xfd_ = 261
+ ,T_raw_xfe_ = 262
+ ,T_raw_xff_ = 263
+ ,T_T_testout_ok_ = 264
+ ,T_Err_no_cmd_lne_data_ = 265
+ ,T_Err_no_filename_ = 266
+ ,T_Err_bad_filename_ = 267
+ ,T_Err_bad_T_inputted_ = 268
+ }; // close defining enum list
+ }; // close defining T_enum
+} // end of namespace
+#endif
diff --git a/web/yacco2/grammar-testsuite/testout_T_includes.T b/web/yacco2/grammar-testsuite/testout_T_includes.T
new file mode 100644
index 0000000000..3f8e1c200f
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_T_includes.T
@@ -0,0 +1,15 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: testout_T_includes.T
+Purpose: Terminal alphabet definitions used by testsuite grammars.
+Author: Dave Bone
+Date: 25 May 2014
+*/
+@"/yacco2/grammar-testsuite/testout_T_enumeration.T"
+@"/yacco2/library/grammars/yacco2_k_symbols.T"
+@"/yacco2/library/grammars/yacco2_characters.T"
+@"/yacco2/grammar-testsuite/testout_terminals.T"
+@"/yacco2/grammar-testsuite/testout_err_symbols.T"
diff --git a/web/yacco2/grammar-testsuite/testout_comments.w b/web/yacco2/grammar-testsuite/testout_comments.w
new file mode 100644
index 0000000000..e46305151b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_comments.w
@@ -0,0 +1,56 @@
+@q file: testout_comments.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Comments.\fbreak
+There are 3 principle reasons for this program:\fbreak
+\ptindent{1) To verify that \O2{} parses a lr(1) grammar, and its parse tables accepts the language expessed}
+\ptindent{2) To give a glimpse into what the compiler writer ``will do'' in creating a translator/compiler}
+\ptindent{3) An example for your own learning}
+This ``will do'' activity prepares the Terminal vocabulary, and shows
+a simple way to fetch the input file to parse, and use the built in ``error reporting''
+facilities within your own compiler/translator context.
+\fbreak
+
+The development cycle one needs to create a compiler/translator is:\fbreak
+\ptindent{1) write/compile your grammar(s) using \O2}
+\ptindent{2) using an editor, create your compiler's fsc file for \O2linker's consumption}
+\ptindent{3) write/compile your compiler and any other external functions}
+\ptindent{4) link your compiler/translator}
+Have a look at {\bf{\Whereyacco2/grammar-testsuite/makefile\_testout\_APPLE}} bash script
+detailing the documentation generation and compiling/linking activities.
+This example is in ``literate programming'' genre and u can read the ``testout*.w'' files.
+If u prefer or u do not have \Cweb{} installed, u can write raw \Cpp code instead.
+The gened \Cpp{} files *.h and *.cpp are also in {\bf{../grammar-testsuite}}
+to model from.
+\fbreak
+
+The grammar used is from David Pager --- ``The Lane Table Method Of Constructing LR(1) Parsers''
+discussing lr(1) resolution page 61.
+To testout pager\_1.lex grammar, u can input one of the following files to {\it{testout}}:\fbreak
+\ptindent{1) ./grammar-testsuite/testout\_1.dat}
+\ptindent{2) ./grammar-testsuite/testout\_2.dat}
+\ptindent{3) x --- no file}
+\ptindent{4) ./grammar-testsuite/testout\_error.dat}
+An example of running the program:\fbreak
+\ptindent{{\bf {cd \Whereyacco2/yacco2/grammar-testsuite}}}
+\ptindent{{\bf {./testout testout\_1.dat}}}
+Various \Yacco2 tracings are turned on to demo their activity.
+Please read wlibrary's pdf document for more details on their
+capabilities and meaning or ``o2book.pdf'' reference manual.
+Added to the tracing are file/line number source coordinates.
+At least u can go back to \Yacco2's library
+code when things need adjusting.
+``{\bf {1lrtracings.log}}'' contains the dynamic tracings when running the program.\fbreak
+\fbreak
+General routines to get things going:\fbreak
+\ptindent{1) get file-to-parse and put into holding file}
+\ptindent{2) parse the command line containing the file to parse}
+\ptindent{3) use pager\_1 grammar to parse input file's contents}
+@<accrue testout code@>+=
+@<Include files@>;
+
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlr.cpp b/web/yacco2/grammar-testsuite/testout_err_hdlr.cpp
new file mode 100644
index 0000000000..57bd604357
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlr.cpp
@@ -0,0 +1,118 @@
+/*
+ File: testout_err_hdlr.cpp
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+#include "testout_err_hdlr.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_testout_err_hdlr;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 3;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+}
+ Ctestout_err_hdlr::
+ Ctestout_err_hdlr()
+ :yacco2::CAbs_fsm
+ ("testout_err_hdlr.lex"
+ ,"1.0"
+ ,"8 Jul 2003"
+ ,false
+ ,"Logic sequencer: Print out errors from testout grammars - pager_1."
+ ,"Sat Jan 31 11:59:00 2015 "
+ ,S1_Ctestout_err_hdlr){
+
+ }
+
+Ctestout_err_hdlr::~Ctestout_err_hdlr(){
+
+ for(int x = 0;x < 3;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ctestout_err_hdlr::failed(){
+ return false;
+ }
+ void Ctestout_err_hdlr::op(){
+}
+int Ctestout_err_hdlr::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+};
+Rtestout_err_hdlr::Rtestout_err_hdlr(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtestout_err_hdlr",0,Ctestout_err_hdlr::R_Rtestout_err_hdlr_,P,false,false){
+}
+
+Rerrors::Rerrors(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerrors",0,Ctestout_err_hdlr::R_Rerrors_,P,false,false){
+}
+
+Rerror::Rerror(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rerror",0,Ctestout_err_hdlr::R_Rerror_,P,false,false){
+}
+
+void Rerror::sr1(){
+ struct SF{
+ Err_no_filename* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
+void Rerror::sr2(){
+ struct SF{
+ Err_bad_filename* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+
+}
+
+void Rerror::sr3(){
+ struct SF{
+ CAbs_lr1_sym* p1__;
+ State* s1__;
+ bool abort1__;
+ Rule_s_reuse_entry* rule_s_reuse_entry1__;
+ };
+ SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(1);
+
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+
+}
+
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlr.fsc b/web/yacco2/grammar-testsuite/testout_err_hdlr.fsc
new file mode 100644
index 0000000000..4aacc17c94
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlr.fsc
@@ -0,0 +1,23 @@
+/*
+ File: testout_err_hdlr.fsc
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+transitive n
+grammar-name "testout_err_hdlr"
+name-space "NS_testout_err_hdlr"
+thread-name "Ctestout_err_hdlr"
+monolithic y
+file-name "testout_err_hdlr.fsc"
+no-of-T 269
+list-of-native-first-set-terminals 4
+ LR1_eog
+ LR1_all_shift_operator
+ Err_no_filename
+ Err_bad_filename
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Logic sequencer: Print out errors from testout grammars - pager_1."
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlr.h b/web/yacco2/grammar-testsuite/testout_err_hdlr.h
new file mode 100644
index 0000000000..ebc6be9b4b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlr.h
@@ -0,0 +1,130 @@
+/*
+ File: testout_err_hdlr.h
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+#ifndef __testout_err_hdlr_h__
+#define __testout_err_hdlr_h__ 1
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "testout_err_symbols.h"
+#include "testout_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Ctestout_err_hdlr;
+namespace NS_testout_err_hdlr {
+using namespace NS_testout_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Ctestout_err_hdlr: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_testout_T_enum::T_Enum::sum_total_T
+ ,R_Rtestout_err_hdlr_ = 269//start_of_rule_list + 0
+ ,rhs1_Rtestout_err_hdlr_ = 1
+ ,rhs2_Rtestout_err_hdlr_ = 2
+ ,R_Rerrors_ = 270//start_of_rule_list + 2
+ ,rhs1_Rerrors_ = 3
+ ,rhs2_Rerrors_ = 4
+ ,R_Rerror_ = 271//start_of_rule_list + 4
+ ,rhs1_Rerror_ = 5
+ ,rhs2_Rerror_ = 6
+ ,rhs3_Rerror_ = 7
+ };
+ //no of la sets = 2
+ //no of states = 9
+ Ctestout_err_hdlr();
+ ~Ctestout_err_hdlr();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rtestout_err_hdlr;
+struct Rerrors;
+struct Rerror;
+struct Rtestout_err_hdlr:public yacco2::CAbs_lr1_sym {
+ Rtestout_err_hdlr(yacco2::Parser* P);
+ public:
+};
+
+struct Rerrors:public yacco2::CAbs_lr1_sym {
+ Rerrors(yacco2::Parser* P);
+ public:
+};
+
+struct Rerror:public yacco2::CAbs_lr1_sym {
+ Rerror(yacco2::Parser* P);
+
+ void error_where(CAbs_lr1_sym* E_sym){
+ std::string ext_fle;
+ if(E_sym->tok_co_ords__.external_file_id__<yacco2::FILE_TBL__.size()){
+ ext_fle = yacco2::FILE_TBL__[E_sym->tok_co_ords__.external_file_id__];
+}else{
+ ext_fle = "File not found";
+}
+ std::string line_of_data;
+ std::ifstream ifile;
+ ifile.open(ext_fle.c_str());
+ if(ifile.good()){
+ yacco2::UINT lno(1);yacco2::UINT dlno(E_sym->tok_co_ords__.line_no__);
+ for(;lno<=dlno;++lno){
+ getline(ifile,line_of_data);
+ if(lno == dlno) break;
+ line_of_data.clear();
+ }
+ }
+
+ std::string space(" ");
+ std::string::size_type f = line_of_data.find_first_of('\t');
+ for(;f != std::string::npos;){
+ line_of_data.replace(f,1,space);
+ f = line_of_data.find_first_of('\t');
+ }
+
+ yacco2::lrclog << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ yacco2::lrclog << line_of_data.c_str() << std::endl;
+ std::cout << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ std::cout << line_of_data.c_str() << std::endl;
+ for(int pos = 1;pos < E_sym->tok_co_ords__.pos_in_line__;++pos){
+ yacco2::lrclog << ' ';
+ std::cout << ' ';
+ }
+ yacco2::lrclog << '^' << std::endl;
+ yacco2::lrclog << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ std::cout << '^' << std::endl;
+ std::cout << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ if(E_sym->tok_co_ords__.who_file__ != 0){
+ yacco2::lrclog << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ std::cout << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ }
+ ifile.close();
+ };
+
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlr.lex b/web/yacco2/grammar-testsuite/testout_err_hdlr.lex
new file mode 100644
index 0000000000..6887960cec
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlr.lex
@@ -0,0 +1,123 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+FILE: o2_err_hdlr.lex
+Date: 8 Jul 2003
+Purpose: grammar to process errors from yacco2
+Conduit: none
+Change: 11 Mar 2004 - replace tab with space so that
+ displaced error lines up properly
+*/
+/@
+@i "/yacco2/copyright.w"
+@** |o2_err_hdlr| grammar.\fbreak
+Grammar that processes for printing posted errors from yacco2.
+@/
+fsm
+(fsm-id "testout_err_hdlr.lex",fsm-filename testout_err_hdlr,fsm-namespace NS_testout_err_hdlr
+,fsm-class Ctestout_err_hdlr
+,fsm-version "1.0",fsm-date "8 Jul 2003",fsm-debug "false"
+,fsm-comments "Logic sequencer: Print out errors from testout grammars - pager_1.")
+@"/usr/local/yacco2/grammar-testsuite/testout_T_includes.T"
+rules{
+Rtestout_err_hdlr (){
+ -> Rerrors eog
+ -> eog
+}
+
+Rerrors (){
+ -> Rerror
+ -> Rerrors Rerror
+}
+
+Rerror (
+lhs{
+ user-declaration
+ void error_where(CAbs_lr1_sym* E_sym){
+ std::string ext_fle;
+ if(E_sym->tok_co_ords__.external_file_id__<yacco2::FILE_TBL__.size()){
+ ext_fle = yacco2::FILE_TBL__[E_sym->tok_co_ords__.external_file_id__];
+}else{
+ ext_fle = "File not found";
+}
+ std::string line_of_data;
+ std::ifstream ifile;
+ ifile.open(ext_fle.c_str());
+ if(ifile.good()){
+ yacco2::UINT lno(1);yacco2::UINT dlno(E_sym->tok_co_ords__.line_no__);
+ for(;lno<=dlno;++lno){
+ getline(ifile,line_of_data);
+ if(lno == dlno) break;
+ line_of_data.clear();
+ }
+ }
+
+ std::string space(" ");
+ std::string::size_type f = line_of_data.find_first_of('\t');
+ for(;f != std::string::npos;){
+ line_of_data.replace(f,1,space);
+ f = line_of_data.find_first_of('\t');
+ }
+
+ yacco2::lrclog << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ yacco2::lrclog << line_of_data.c_str() << std::endl;
+ std::cout << "Error in file#: " << E_sym->tok_co_ords__.external_file_id__
+ << " \"" << ext_fle.c_str() << "\"" << std::endl;
+ std::cout << line_of_data.c_str() << std::endl;
+ for(int pos = 1;pos < E_sym->tok_co_ords__.pos_in_line__;++pos){
+ yacco2::lrclog << ' ';
+ std::cout << ' ';
+ }
+ yacco2::lrclog << '^' << std::endl;
+ yacco2::lrclog << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ std::cout << '^' << std::endl;
+ std::cout << "\tfpos: " << E_sym->tok_co_ords__.rc_pos__
+ << " line#: " << E_sym->tok_co_ords__.line_no__
+ << " cpos: " << E_sym->tok_co_ords__.pos_in_line__
+ << std::endl;
+ if(E_sym->tok_co_ords__.who_file__ != 0){
+ yacco2::lrclog << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ std::cout << "\twho thru it: " << E_sym->tok_co_ords__.who_file__
+ << " line#: " << E_sym->tok_co_ords__.who_line_no__
+ << std::endl;
+ }
+ ifile.close();
+ };
+ ***
+}
+){
+ -> "no filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+ -> "bad filename" {
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ std::cout << "\t" << sf->p1__->id__
+ << " filename: \"" << sf->p1__->file_name()->c_str()
+ << "\" does not exist" << std::endl;
+ ***
+ }
+ -> |+| {// catch balance of errors
+ op
+ error_where(sf->p1__);
+ yacco2::lrclog << "\t" << sf->p1__->id__ << std::endl;
+ std::cout << "\t" << sf->p1__->id__ << std::endl;
+ ***
+ }
+}
+}// end of rules
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlrsym.cpp b/web/yacco2/grammar-testsuite/testout_err_hdlrsym.cpp
new file mode 100644
index 0000000000..2ee6b75477
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlrsym.cpp
@@ -0,0 +1,128 @@
+/*
+ File: testout_err_hdlrsym.cpp
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+#include "testout_err_hdlr.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_testout_err_hdlr;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Ctestout_err_hdlr::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rtestout_err_hdlr_:{
+ Rtestout_err_hdlr* sym;
+ if(re->rule_ == 0){
+ sym = new Rtestout_err_hdlr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtestout_err_hdlr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_Rtestout_err_hdlr_:{
+ Rtestout_err_hdlr* sym;
+ if(re->rule_ == 0){
+ sym = new Rtestout_err_hdlr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtestout_err_hdlr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rerrors_:{
+ Rerrors* sym;
+ if(re->rule_ == 0){
+ sym = new Rerrors(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerrors*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rerrors_:{
+ Rerrors* sym;
+ if(re->rule_ == 0){
+ sym = new Rerrors(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerrors*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr1();
+ return;}
+ case rhs2_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr2();
+ return;}
+ case rhs3_Rerror_:{
+ Rerror* sym;
+ if(re->rule_ == 0){
+ sym = new Rerror(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rerror*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr3();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/grammar-testsuite/testout_err_hdlrtbl.cpp b/web/yacco2/grammar-testsuite/testout_err_hdlrtbl.cpp
new file mode 100644
index 0000000000..3e5c80c3fb
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_hdlrtbl.cpp
@@ -0,0 +1,176 @@
+/*
+ File: testout_err_hdlrtbl.cpp
+ Date and Time: Sat Jan 31 11:59:00 2015
+*/
+#include "testout_err_hdlr.h"
+using namespace NS_testout_T_enum;// enumerate
+using namespace NS_testout_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_testout_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_testout_err_hdlr;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Ctestout_err_hdlr[] ={
+1
+,0,4
+};
+// LR1_eog
+// LR1_all_shift_operator
+// Err_no_filename
+// Err_bad_filename
+yacco2::UCHAR LA2_Ctestout_err_hdlr[] ={
+2
+,0,66
+,33,12
+};
+extern yacco2::State S1_Ctestout_err_hdlr;
+extern yacco2::State S2_Ctestout_err_hdlr;
+extern yacco2::State S3_Ctestout_err_hdlr;
+extern yacco2::State S4_Ctestout_err_hdlr;
+extern yacco2::State S5_Ctestout_err_hdlr;
+extern yacco2::State S6_Ctestout_err_hdlr;
+extern yacco2::State S7_Ctestout_err_hdlr;
+extern yacco2::State S8_Ctestout_err_hdlr;
+extern yacco2::State S9_Ctestout_err_hdlr;
+struct S1std_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S1std_Ctestout_err_hdlr S1st_Ctestout_err_hdlr = {
+ 7
+ ,
+ {// start of table
+ {1,(State*)&S2_Ctestout_err_hdlr} // shift sym: LR1_eog
+ ,{6,(State*)&S3_Ctestout_err_hdlr} // shift sym: LR1_all_shift_operator
+ ,{266,(State*)&S4_Ctestout_err_hdlr} // shift sym: Err_no_filename
+ ,{267,(State*)&S5_Ctestout_err_hdlr} // shift sym: Err_bad_filename
+ ,{269,(State*)&S1_Ctestout_err_hdlr} // accept sym: Rtestout_err_hdlr
+ ,{270,(State*)&S6_Ctestout_err_hdlr} // shift sym: Rerrors
+ ,{271,(State*)&S9_Ctestout_err_hdlr} // shift sym: Rerror
+ }// end of shift table
+};
+yacco2::Shift_entry S1ase_Ctestout_err_hdlr = {6,(State*)&S3_Ctestout_err_hdlr};
+yacco2::State S1_Ctestout_err_hdlr = //State's vectored into symbol: " No symbol"
+{1
+,0,(Shift_entry*)&S1ase_Ctestout_err_hdlr
+,0,0,(Shift_tbl*)&S1st_Ctestout_err_hdlr,0,0,0,0};
+struct S2rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Ctestout_err_hdlr S2rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs2_Rtestout_err_hdlr_}
+ }// end of reduce table
+};
+yacco2::State S2_Ctestout_err_hdlr = //State's vectored into symbol: "eog"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Ctestout_err_hdlr,0,0,0};
+struct S3rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ctestout_err_hdlr S3rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs3_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S3_Ctestout_err_hdlr = //State's vectored into symbol: "|+|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ctestout_err_hdlr,0,0,0};
+struct S4rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ctestout_err_hdlr S4rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs1_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S4_Ctestout_err_hdlr = //State's vectored into symbol: "no filename"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ctestout_err_hdlr,0,0,0};
+struct S5rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Ctestout_err_hdlr S5rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs2_Rerror_}
+ }// end of reduce table
+};
+yacco2::State S5_Ctestout_err_hdlr = //State's vectored into symbol: "bad filename"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Ctestout_err_hdlr,0,0,0};
+struct S6std_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S6std_Ctestout_err_hdlr S6st_Ctestout_err_hdlr = {
+ 5
+ ,
+ {// start of table
+ {1,(State*)&S7_Ctestout_err_hdlr} // shift sym: LR1_eog
+ ,{6,(State*)&S3_Ctestout_err_hdlr} // shift sym: LR1_all_shift_operator
+ ,{266,(State*)&S4_Ctestout_err_hdlr} // shift sym: Err_no_filename
+ ,{267,(State*)&S5_Ctestout_err_hdlr} // shift sym: Err_bad_filename
+ ,{271,(State*)&S8_Ctestout_err_hdlr} // shift sym: Rerror
+ }// end of shift table
+};
+yacco2::Shift_entry S6ase_Ctestout_err_hdlr = {6,(State*)&S3_Ctestout_err_hdlr};
+yacco2::State S6_Ctestout_err_hdlr = //State's vectored into symbol: "Rerrors"
+{6
+,0,(Shift_entry*)&S6ase_Ctestout_err_hdlr
+,0,0,(Shift_tbl*)&S6st_Ctestout_err_hdlr,0,0,0,0};
+struct S7rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ctestout_err_hdlr S7rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs1_Rtestout_err_hdlr_}
+ }// end of reduce table
+};
+yacco2::State S7_Ctestout_err_hdlr = //State's vectored into symbol: "eog"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ctestout_err_hdlr,0,0,0};
+struct S8rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ctestout_err_hdlr S8rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs2_Rerrors_}
+ }// end of reduce table
+};
+yacco2::State S8_Ctestout_err_hdlr = //State's vectored into symbol: "Rerror"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ctestout_err_hdlr,0,0,0};
+struct S9rtd_Ctestout_err_hdlr{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ctestout_err_hdlr S9rt_Ctestout_err_hdlr = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctestout_err_hdlr,Ctestout_err_hdlr::rhs1_Rerrors_}
+ }// end of reduce table
+};
+yacco2::State S9_Ctestout_err_hdlr = //State's vectored into symbol: "Rerror"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Ctestout_err_hdlr,0,0,0};
diff --git a/web/yacco2/grammar-testsuite/testout_err_symbols.T b/web/yacco2/grammar-testsuite/testout_err_symbols.T
new file mode 100644
index 0000000000..82bb8ee5c7
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_symbols.T
@@ -0,0 +1,45 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: testout_err_symbols.lex
+Date: 7 July 2003
+Author: Dave Bone
+*/
+/@
+@i "/yacco2/copyright.w"
+@** Testout Error symbols vocabulary.\fbreak
+@/
+
+error-symbols
+(file-name testout_err_symbols
+,name-space NS_testout_err_symbols)
+{
+"no cmd-lne-data" (sym-class Err_no_cmd_lne_data)
+"no filename" (sym-class Err_no_filename)
+"bad filename"
+(sym-class Err_bad_filename {
+ user-declaration
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+ ***
+ user-implementation
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+ ***
+ }
+)
+"Bad T inputted" (sym-class Err_bad_T_inputted)
+}
diff --git a/web/yacco2/grammar-testsuite/testout_err_symbols.cpp b/web/yacco2/grammar-testsuite/testout_err_symbols.cpp
new file mode 100644
index 0000000000..ff00ae5b55
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_symbols.cpp
@@ -0,0 +1,26 @@
+/*
+ File: testout_err_symbols.cpp
+ Date and Time: Mon Jun 9 08:45:19 2014
+*/
+#include "testout_err_symbols.h"
+ using namespace NS_testout_err_symbols;
+ using namespace NS_testout_T_enum;
+Err_no_cmd_lne_data::
+Err_no_cmd_lne_data()
+ T_CTOR("no cmd-lne-data",T_Enum::T_Err_no_cmd_lne_data_,0,false,false){}
+Err_no_filename::
+Err_no_filename()
+ T_CTOR("no filename",T_Enum::T_Err_no_filename_,0,false,false){}
+
+ Err_bad_filename::
+ Err_bad_filename(std::string& File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name.c_str();}
+ Err_bad_filename::
+ Err_bad_filename(const char* File_name)
+ T_CTOR("bad filename",T_Enum::T_Err_bad_filename_,0,false,false)
+ {file_name_ += File_name;}
+ std::string* Err_bad_filename::file_name(){return &file_name_;}
+ Err_bad_T_inputted::
+Err_bad_T_inputted()
+ T_CTOR("Bad T inputted",T_Enum::T_Err_bad_T_inputted_,0,false,false){}
diff --git a/web/yacco2/grammar-testsuite/testout_err_symbols.h b/web/yacco2/grammar-testsuite/testout_err_symbols.h
new file mode 100644
index 0000000000..95e4b08933
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_err_symbols.h
@@ -0,0 +1,32 @@
+/*
+ File: testout_err_symbols.h
+ Date and Time: Mon Jun 9 08:45:19 2014
+*/
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#ifndef __testout_err_symbols_h__
+#define __testout_err_symbols_h__ 1
+namespace NS_testout_err_symbols{
+ using namespace NS_testout_T_enum;
+ struct Err_no_cmd_lne_data:public yacco2::CAbs_lr1_sym{
+ Err_no_cmd_lne_data();
+ };
+ struct Err_no_filename:public yacco2::CAbs_lr1_sym{
+ Err_no_filename();
+ };
+ struct Err_bad_filename:public yacco2::CAbs_lr1_sym{
+
+ public:
+ Err_bad_filename(std::string& File_name);
+ Err_bad_filename(const char* File_name);
+ std::string* file_name();
+ private:
+ std::string file_name_;
+
+ };
+ struct Err_bad_T_inputted:public yacco2::CAbs_lr1_sym{
+ Err_bad_T_inputted();
+ };
+}//namespace
+#endif
diff --git a/web/yacco2/grammar-testsuite/testout_error.dat b/web/yacco2/grammar-testsuite/testout_error.dat
new file mode 100644
index 0000000000..a1095a9b92
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_error.dat
@@ -0,0 +1 @@
+aeezeec \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_fsc.cpp b/web/yacco2/grammar-testsuite/testout_fsc.cpp
new file mode 100644
index 0000000000..e3f17ed899
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_fsc.cpp
@@ -0,0 +1,40 @@
+//
+// File: /yacco2/grammar-testsuite/testout_fsc.cpp
+// Generated by linker.exe
+// Date and Time: Mon Jun 9 08:47:15 2014
+//
+
+// Preamble code
+
+
+#include "yacco2.h"
+
+#include "testout_T_enumeration.h"
+
+#include "yacco2_k_symbols.h"
+
+#include "testout_terminals.h"
+
+#include "yacco2_characters.h"
+
+using namespace NS_testout_T_enum;
+
+using namespace NS_testout_err_symbols;
+
+using namespace NS_yacco2_k_symbols;
+
+using namespace NS_testout_terminals;
+
+using namespace NS_yacco2_characters;
+
+
+// thread include and namespace
+// BIT MAPS
+#define TOTAL_NO_BIT_WORDS 2*1024*50
+int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);
+yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];
+void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;
+int yacco2::BIT_MAP_IDX__(0);
+// There are NO THREADS emitted
+void* yacco2::THDS_STABLE__ = 0;
+void* yacco2::T_ARRAY_HAVING_THD_IDS__ = 0;
diff --git a/web/yacco2/grammar-testsuite/testout_holding_file.cmd b/web/yacco2/grammar-testsuite/testout_holding_file.cmd
new file mode 100644
index 0000000000..5ee608e743
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_holding_file.cmd
@@ -0,0 +1 @@
+xxxx \ No newline at end of file
diff --git a/web/yacco2/grammar-testsuite/testout_includes.w b/web/yacco2/grammar-testsuite/testout_includes.w
new file mode 100644
index 0000000000..761e53c1a6
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_includes.w
@@ -0,0 +1,50 @@
+@q file: testout_includes.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@*1 Include files.\fbreak
+To start things off, these are the Standard Template Library (STL) containers
+needed by Yacco2's parse library definitions.
+@<Include files@>=
+#include "testout.h"
+
+@*2 Create header file for testout environment.\fbreak
+The include files format is:\fbreak
+\ptindent{1) system related definitions}
+\ptindent{2) the grammar vocabulary framework}
+\ptindent{3) grammars used}
+\ptindent{4) namespace use for convenience in your \Cpp{} code}
+Note the namespace turn-ons for Error and Meta-terminal vocabularies.
+Your own language will define your vocabularies with their own namespaces.
+Have a look at their definition files: |testout_err_symbols.T|
+and |testout_terminals.T| and possibly re-read ``o2book.pdf'' for a refresher on their Ws.
+This example is skeletal for teaching purposes whereas your own vocabulary will be meater.
+Also note the 2 grammar headers: |pager_1.h| and the error handler |testout_err_hdlr.h|.
+@(testout.h@>=
+@h
+#ifndef testout__
+#define testout__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "testout_terminals.h"
+#include "testout_err_symbols.h"
+#include "pager_1.h"
+#include "testout_err_hdlr.h"
+
+using namespace std;
+using namespace NS_testout_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_testout_terminals;
+using namespace NS_testout_err_symbols;
+using namespace yacco2;
+#endif
diff --git a/web/yacco2/grammar-testsuite/testout_prog.w b/web/yacco2/grammar-testsuite/testout_prog.w
new file mode 100644
index 0000000000..14491e43b4
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_prog.w
@@ -0,0 +1,214 @@
+@q file: testout_prog.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Define variables.\fbreak
+\ptindent{1) Holding file to start things off --- command line data is put into this file}
+\ptindent{2) Define the \O2's tracing variable by macro}
+\ptindent{3) \O2's token containers needed}
+@<accrue testout code@>+=
+#define Max_buf_size 2*1024
+std::string Holding_file("testout_holding_file.cmd");
+std::string To_parse_file;
+
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE JUNK_tokens;
+yacco2::TOKEN_GAGGLE IP_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+
+@** Local Routines.\fbreak
+|GET_CMD_LINE| is a basic copy of |O2|'s command line routine.
+It is changed as it just fetches the file to process. There are no other parameters to deal with.
+Have a read and compare |O2|'s routine against this one to see the variances.
+\O2's routines are written up in |common_externs.pdf| in the ``./docs'' folder.
+
+|DUMP_ERROR_QUEUE| ditto's |O2|'s error processing routine.
+Testout's difference to \O2{} is the use of its own error handler grammar.
+This is due to the different T vocabulary defined over \O2's vocabulary.
+This was done to show u what u'll be doing for your own compiler development
+as your T vocabulary will definitely be different from \O2.
+Have a look at the |testout_err_hdlr| grammar and see
+how it resolves the external file associated with the error T.
+The Error T processing is basicly a template using your specific grammar
+ relative to its own language/Terminal Vocabulary.
+
+As O2's |o2_error_hdlr.lex| grammar deals with its own specific errors,
+this is why there is not a generic error template grammar that uses only the \ALLshift{}
+to trace all the T errors as anonymous entities.
+One could do this but u'll find that this is not too creative.
+Look at |o2_error_hdlr.lex|'s subrule with tandom errors --- ``file-inclusion'' ``bad filename''
+as an example.
+
+
+Your own error reporting is open to your own code and style to format
+ and notification.
+ U might want to compare |testout_terminals.T| and |testout_err_symbols.T|
+ definitions against \O2's vocabulary:
+ |yacco2_terminals.T| and |yacco2_err_symbols.T| to get a feel on
+ the range of Tes within \O2. What they stand for, and the different
+ definition templates used: canned to full \Cpp{} definition / implementation.
+
+
+@*1 |GET_CMD_LINE| --- go fetch the fodder.\fbreak
+To note: the ``File\_to\_parse'' parameter is passed in as a reference which
+gets filled with the command line input.
+The file's existence check is done and
+if it exists, downstream parsing uses it passed in reference variable
+for the input tok\_can container
+to parse its contents.
+
+@<accrue testout code@>+=
+void GET_CMD_LINE(int argc,char*argv[]@/
+,const char*Holding@/
+,std::string& File_to_parse@/
+,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace std;
+using namespace NS_testout_err_symbols;
+using namespace yacco2;
+ofstream ofile;
+ofile.open(Holding,ios_base::out|ios::trunc);
+if(!ofile){
+CAbs_lr1_sym*sym= new Err_bad_filename(Holding);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+if(argc==1){
+char cmd_line[Max_buf_size];
+cout<<"Please enter Command line to process: ";
+cin.get(cmd_line,Max_buf_size,'\n');
+ofile<<cmd_line;
+File_to_parse+=cmd_line;
+ofile.close();
+}else{
+for(int x= 1;x<argc;++x){
+ofile<<argv[x];
+File_to_parse+=argv[x];
+}
+ofile.close();
+}
+tok_can<std::ifstream> Cmd1_tokens(Holding);//sets the table of files controlled by yacco2 for parsing T gpsing
+ifstream ifile;
+ifile.open(File_to_parse.c_str());
+if(!ifile){
+CAbs_lr1_sym*sym= new Err_bad_filename(File_to_parse.c_str());
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+ifile.close();
+return;
+}
+@*1 |DUMP_ERROR_QUEUE| --- the teller of horror.\fbreak
+The 2 |yacco2::PTR_LR1_eog__| added to the end-of-the-container allows
+the grammar's |start_rule| to be accepted.
+@<accrue testout code@>+=
+void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_k_symbols;
+using namespace yacco2;
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+using namespace NS_testout_err_hdlr;
+
+Ctestout_err_hdlr fsm;
+Parser pass_errors(fsm,&Errors,0);
+pass_errors.parse();
+yacco2::Parallel_threads_shutdown(pass_errors);
+}
+
+@** Mainline.\fbreak
+The mainline code demonstrates various ways to do ``literate programming:
+a mixture of Literate programming code modules and standard ``c'' code.
+
+{\bf{Note}:} I checked the returned code from the parser |Parser::erred|
+as to whether a parse error occurred.
+This is the proper way to do things but u'll see my lazyness in \O2's program
+listing to just check the ``Error queue''.
+If u misused the |RSVP_FSM| macro from a monolithic grammar's |failed| directive to do this,
+the parser did abort, the |failed| directive fired but the ``Error queue'' is empty as
+the error T is placed within the ``Accept queue'' which is the context for a
+threaded grammar to return a result back to a calling grammar.
+
+To see that |failed| works within the monolithic context, use ``testout\_error.dat''
+file as input.
+\fbreak
+
+{\bf{So be forwarned}}. I guess this should be checked for by \O2{}
+and to thrown an error when compiling the grammar but for the moment it does not.
+@<accrue testout code@>+=
+int main(int argc, char* argv[])
+{
+ std::cout << "testout start" << std::endl;
+using namespace yacco2;
+@<turn on some \O2's tracing@>;
+@<get command line...@>;
+ using namespace NS_pager_1;
+ tok_can<std::ifstream> cmd_line(To_parse_file.c_str());
+ Cpager_1 pager_1_fsm;
+ Parser testout_parse(pager_1_fsm,&cmd_line,&IP_tokens,0,&Error_queue,&JUNK_tokens,0);
+ if (testout_parse.parse() == Parser::erred){
+ std::cout << "===============>ERROR OCCURRED" << std::endl;
+ @<if error queue not empty then deal with posted errors@>;
+ }
+
+exit:@/
+std::cout << "Exiting testout" << std::endl;
+ return 0;
+}
+
+@*1 Some Programming sections.
+@*2 Turn on some of \O2's dynamic tracing variables.\fbreak
+Tracings:\fbreak
+\ptindent{T - terminals}
+\ptindent{TH - threads if their fsm-debug options turned on}
+\ptindent{MSG - messages between grammars}
+\ptindent{MU - trace mutex activity}
+Notice that MU was turned off but kept as a comment.
+Due to how |Cweb| deals with comments, the underscore ``\_'' must be escaped.
+Have a look in the ``testout\_prog.w'' file where u'll see this.
+
+You will not see any ``MSG'' or ``TH'' tracings as there was not a threaded grammar
+called.
+So why do u include them?
+Just to pique your interest to \O2's delights.
+@<turn on some \O2's tracing@>=
+yacco2::YACCO2_T__ = 1;
+yacco2::YACCO2_TH__ = 1;
+yacco2::YACCO2_MSG__ = 1;
+//yacco2::YACCO2\_MU\_TRACING\_\_ = 1;
+
+@*2 Get command line, parse it, and place contents into a holding file.\fbreak
+@<get command line, parse it, and place contents into a holding file@>=
+ GET_CMD_LINE(argc,argv,Holding_file.c_str(),To_parse_file,Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+
+
+@*2 Do we have errors?.\fbreak
+Check that error queue for those errors.
+Note, |DUMP_ERROR_QUEUE| will also flush out
+ any launched threads for the good housekeeping or is it
+housetrained seal
+award? Trying to do my best in the realm of short lived winddowns.
+@<if error queue not empty then deal with posted errors@>=
+if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ return 1;
+}
+
+
+@*1 Testout implementation.\fbreak
+Start the code output to |testout.cpp|
+by appending its include file.
+@(testout.cpp@>=
+@<accrue testout code@>;
+
diff --git a/web/yacco2/grammar-testsuite/testout_terminals.T b/web/yacco2/grammar-testsuite/testout_terminals.T
new file mode 100644
index 0000000000..20e185e92b
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_terminals.T
@@ -0,0 +1,17 @@
+/*
+ Copyright Dave Bone 1998 - 2014
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+ file: testout_terminals.lex
+*/
+/@
+@i "/yacco2/copyright.w"
+@** Testout Terminal vocabulary.\fbreak
+The one T definition is defined as \O2{} does not allow an empty definition.
+@/
+terminals
+(file-name testout_terminals
+,name-space NS_testout_terminals){
+"testout-ok" (sym-class T_testout_ok)
+} // end of terminals
diff --git a/web/yacco2/grammar-testsuite/testout_terminals.cpp b/web/yacco2/grammar-testsuite/testout_terminals.cpp
new file mode 100644
index 0000000000..897c02f179
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_terminals.cpp
@@ -0,0 +1,10 @@
+/*
+ File: testout_terminals.cpp
+ Date and Time: Mon Jun 9 08:45:19 2014
+*/
+#include "testout_terminals.h"
+ using namespace NS_testout_terminals;
+ using namespace NS_testout_T_enum;
+T_testout_ok::
+T_testout_ok()
+ T_CTOR("testout-ok",T_Enum::T_T_testout_ok_,0,false,false){}
diff --git a/web/yacco2/grammar-testsuite/testout_terminals.h b/web/yacco2/grammar-testsuite/testout_terminals.h
new file mode 100644
index 0000000000..3e90674fa2
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_terminals.h
@@ -0,0 +1,17 @@
+/*
+ File: testout_terminals.h
+ Date and Time: Mon Jun 9 08:45:19 2014
+*/
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "testout_err_symbols.h"
+#ifndef __testout_terminals_h__
+#define __testout_terminals_h__ 1
+namespace NS_testout_terminals{
+ using namespace NS_testout_T_enum;
+ struct T_testout_ok:public yacco2::CAbs_lr1_sym{
+ T_testout_ok();
+ };
+}//namespace
+#endif
diff --git a/web/yacco2/grammar-testsuite/testout_types.w b/web/yacco2/grammar-testsuite/testout_types.w
new file mode 100644
index 0000000000..edcb52ddd8
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/testout_types.w
@@ -0,0 +1,34 @@
+@q file: testout_types.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "eplain"
+\input "supp-pdf"
+\input"/yacco2/diagrams/o2mac.tex"
+@*2 Global definitions and files.\fbreak
+Basic preamble include files used by all others.
+@(globals.h@>=
+// file: globals.h
+// prelude files using yacco2: for o2, o2linker utilities
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "testout_T_enumeration.h"
+#include "testout_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "testout_terminals.h"
+using namespace std;
+using namespace NS_testout_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_testout_terminals;
+using namespace yacco2;
+#endif
diff --git a/web/yacco2/grammar-testsuite/yacco2_T_enumeration.h b/web/yacco2/grammar-testsuite/yacco2_T_enumeration.h
new file mode 100644
index 0000000000..155d8317f3
--- /dev/null
+++ b/web/yacco2/grammar-testsuite/yacco2_T_enumeration.h
@@ -0,0 +1,592 @@
+/*
+ File: yacco2_T_enumeration.h
+ Date and Time: Sat Jan 31 11:58:57 2015
+*/
+#ifndef __yacco2_T_enumeration_h__
+#define __yacco2_T_enumeration_h__ 1
+namespace NS_yacco2_T_enum {
+ struct T_Enum {
+ enum enumerated_terminals {
+ sum_total_T = 569
+ ,no_of_terminals = 114
+ ,no_of_raw_chars = 256
+ ,no_of_lr1_constants = 8
+ ,no_of_error_terminals = 191
+ ,start_LRK=0,end_LRK=7
+ ,start_RC=8,end_RC=263
+ ,start_T=264,end_T=377
+ ,start_ERR=378,end_ERR=568
+ ,start_R=569
+ ,T_LR1_questionable_shift_operator_ = 0
+ ,T_LR1_eog_ = 1
+ ,T_LR1_eolr_ = 2
+ ,T_LR1_parallel_operator_ = 3
+ ,T_LR1_reduce_operator_ = 4
+ ,T_LR1_invisible_shift_operator_ = 5
+ ,T_LR1_all_shift_operator_ = 6
+ ,T_LR1_fset_transience_operator_ = 7
+ ,T_raw_nul_ = 8
+ ,T_raw_soh_ = 9
+ ,T_raw_stx_ = 10
+ ,T_raw_etx_ = 11
+ ,T_raw_eot_ = 12
+ ,T_raw_enq_ = 13
+ ,T_raw_ack_ = 14
+ ,T_raw_bel_ = 15
+ ,T_raw_bs_ = 16
+ ,T_raw_ht_ = 17
+ ,T_raw_lf_ = 18
+ ,T_raw_vt_ = 19
+ ,T_raw_ff_ = 20
+ ,T_raw_cr_ = 21
+ ,T_raw_so_ = 22
+ ,T_raw_si_ = 23
+ ,T_raw_dle_ = 24
+ ,T_raw_dc1_ = 25
+ ,T_raw_dc2_ = 26
+ ,T_raw_dc3_ = 27
+ ,T_raw_dc4_ = 28
+ ,T_raw_nak_ = 29
+ ,T_raw_syn_ = 30
+ ,T_raw_etb_ = 31
+ ,T_raw_can_ = 32
+ ,T_raw_em_ = 33
+ ,T_raw_sub_ = 34
+ ,T_raw_esc_ = 35
+ ,T_raw_fs_ = 36
+ ,T_raw_gs_ = 37
+ ,T_raw_rs_ = 38
+ ,T_raw_us_ = 39
+ ,T_raw_sp_ = 40
+ ,T_raw_exclam_ = 41
+ ,T_raw_dbl_quote_ = 42
+ ,T_raw_no_sign_ = 43
+ ,T_raw_dollar_sign_ = 44
+ ,T_raw_percent_ = 45
+ ,T_raw_ampersign_ = 46
+ ,T_raw_right_quote_ = 47
+ ,T_raw_open_bracket_ = 48
+ ,T_raw_close_bracket_ = 49
+ ,T_raw_asteric_ = 50
+ ,T_raw_plus_ = 51
+ ,T_raw_comma_ = 52
+ ,T_raw_minus_ = 53
+ ,T_raw_period_ = 54
+ ,T_raw_slash_ = 55
+ ,T_raw_0_ = 56
+ ,T_raw_1_ = 57
+ ,T_raw_2_ = 58
+ ,T_raw_3_ = 59
+ ,T_raw_4_ = 60
+ ,T_raw_5_ = 61
+ ,T_raw_6_ = 62
+ ,T_raw_7_ = 63
+ ,T_raw_8_ = 64
+ ,T_raw_9_ = 65
+ ,T_raw_colon_ = 66
+ ,T_raw_semi_colon_ = 67
+ ,T_raw_less_than_ = 68
+ ,T_raw_eq_ = 69
+ ,T_raw_gt_than_ = 70
+ ,T_raw_question_mark_ = 71
+ ,T_raw_at_sign_ = 72
+ ,T_raw_A_ = 73
+ ,T_raw_B_ = 74
+ ,T_raw_C_ = 75
+ ,T_raw_D_ = 76
+ ,T_raw_E_ = 77
+ ,T_raw_F_ = 78
+ ,T_raw_G_ = 79
+ ,T_raw_H_ = 80
+ ,T_raw_I_ = 81
+ ,T_raw_J_ = 82
+ ,T_raw_K_ = 83
+ ,T_raw_L_ = 84
+ ,T_raw_M_ = 85
+ ,T_raw_N_ = 86
+ ,T_raw_O_ = 87
+ ,T_raw_P_ = 88
+ ,T_raw_Q_ = 89
+ ,T_raw_R_ = 90
+ ,T_raw_S_ = 91
+ ,T_raw_T_ = 92
+ ,T_raw_U_ = 93
+ ,T_raw_V_ = 94
+ ,T_raw_W_ = 95
+ ,T_raw_X_ = 96
+ ,T_raw_Y_ = 97
+ ,T_raw_Z_ = 98
+ ,T_raw_open_sq_bracket_ = 99
+ ,T_raw_back_slash_ = 100
+ ,T_raw_close_sq_bracket_ = 101
+ ,T_raw_up_arrow_ = 102
+ ,T_raw_under_score_ = 103
+ ,T_raw_left_quote_ = 104
+ ,T_raw_a_ = 105
+ ,T_raw_b_ = 106
+ ,T_raw_c_ = 107
+ ,T_raw_d_ = 108
+ ,T_raw_e_ = 109
+ ,T_raw_f_ = 110
+ ,T_raw_g_ = 111
+ ,T_raw_h_ = 112
+ ,T_raw_i_ = 113
+ ,T_raw_j_ = 114
+ ,T_raw_k_ = 115
+ ,T_raw_l_ = 116
+ ,T_raw_m_ = 117
+ ,T_raw_n_ = 118
+ ,T_raw_o_ = 119
+ ,T_raw_p_ = 120
+ ,T_raw_q_ = 121
+ ,T_raw_r_ = 122
+ ,T_raw_s_ = 123
+ ,T_raw_t_ = 124
+ ,T_raw_u_ = 125
+ ,T_raw_v_ = 126
+ ,T_raw_w_ = 127
+ ,T_raw_x_ = 128
+ ,T_raw_y_ = 129
+ ,T_raw_z_ = 130
+ ,T_raw_open_brace_ = 131
+ ,T_raw_vertical_line_ = 132
+ ,T_raw_close_brace_ = 133
+ ,T_raw_tilde_ = 134
+ ,T_raw_del_ = 135
+ ,T_raw_x80_ = 136
+ ,T_raw_x81_ = 137
+ ,T_raw_x82_ = 138
+ ,T_raw_x83_ = 139
+ ,T_raw_x84_ = 140
+ ,T_raw_x85_ = 141
+ ,T_raw_x86_ = 142
+ ,T_raw_x87_ = 143
+ ,T_raw_x88_ = 144
+ ,T_raw_x89_ = 145
+ ,T_raw_x8a_ = 146
+ ,T_raw_x8b_ = 147
+ ,T_raw_x8c_ = 148
+ ,T_raw_x8d_ = 149
+ ,T_raw_x8e_ = 150
+ ,T_raw_x8f_ = 151
+ ,T_raw_x90_ = 152
+ ,T_raw_x91_ = 153
+ ,T_raw_x92_ = 154
+ ,T_raw_x93_ = 155
+ ,T_raw_x94_ = 156
+ ,T_raw_x95_ = 157
+ ,T_raw_x96_ = 158
+ ,T_raw_x97_ = 159
+ ,T_raw_x98_ = 160
+ ,T_raw_x99_ = 161
+ ,T_raw_x9a_ = 162
+ ,T_raw_x9b_ = 163
+ ,T_raw_x9c_ = 164
+ ,T_raw_x9d_ = 165
+ ,T_raw_x9e_ = 166
+ ,T_raw_x9f_ = 167
+ ,T_raw_xa0_ = 168
+ ,T_raw_xa1_ = 169
+ ,T_raw_xa2_ = 170
+ ,T_raw_xa3_ = 171
+ ,T_raw_xa4_ = 172
+ ,T_raw_xa5_ = 173
+ ,T_raw_xa6_ = 174
+ ,T_raw_xa7_ = 175
+ ,T_raw_xa8_ = 176
+ ,T_raw_xa9_ = 177
+ ,T_raw_xaa_ = 178
+ ,T_raw_xab_ = 179
+ ,T_raw_xac_ = 180
+ ,T_raw_xad_ = 181
+ ,T_raw_xae_ = 182
+ ,T_raw_xaf_ = 183
+ ,T_raw_xb0_ = 184
+ ,T_raw_xb1_ = 185
+ ,T_raw_xb2_ = 186
+ ,T_raw_xb3_ = 187
+ ,T_raw_xb4_ = 188
+ ,T_raw_xb5_ = 189
+ ,T_raw_xb6_ = 190
+ ,T_raw_xb7_ = 191
+ ,T_raw_xb8_ = 192
+ ,T_raw_xb9_ = 193
+ ,T_raw_xba_ = 194
+ ,T_raw_xbb_ = 195
+ ,T_raw_xbc_ = 196
+ ,T_raw_xbd_ = 197
+ ,T_raw_xbe_ = 198
+ ,T_raw_xbf_ = 199
+ ,T_raw_xc0_ = 200
+ ,T_raw_xc1_ = 201
+ ,T_raw_xc2_ = 202
+ ,T_raw_xc3_ = 203
+ ,T_raw_xc4_ = 204
+ ,T_raw_xc5_ = 205
+ ,T_raw_xc6_ = 206
+ ,T_raw_xc7_ = 207
+ ,T_raw_xc8_ = 208
+ ,T_raw_xc9_ = 209
+ ,T_raw_xca_ = 210
+ ,T_raw_xcb_ = 211
+ ,T_raw_xcc_ = 212
+ ,T_raw_xcd_ = 213
+ ,T_raw_xce_ = 214
+ ,T_raw_xcf_ = 215
+ ,T_raw_xd0_ = 216
+ ,T_raw_xd1_ = 217
+ ,T_raw_xd2_ = 218
+ ,T_raw_xd3_ = 219
+ ,T_raw_xd4_ = 220
+ ,T_raw_xd5_ = 221
+ ,T_raw_xd6_ = 222
+ ,T_raw_xd7_ = 223
+ ,T_raw_xd8_ = 224
+ ,T_raw_xd9_ = 225
+ ,T_raw_xda_ = 226
+ ,T_raw_xdb_ = 227
+ ,T_raw_xdc_ = 228
+ ,T_raw_xdd_ = 229
+ ,T_raw_xde_ = 230
+ ,T_raw_xdf_ = 231
+ ,T_raw_xe0_ = 232
+ ,T_raw_xe1_ = 233
+ ,T_raw_xe2_ = 234
+ ,T_raw_xe3_ = 235
+ ,T_raw_xe4_ = 236
+ ,T_raw_xe5_ = 237
+ ,T_raw_xe6_ = 238
+ ,T_raw_xe7_ = 239
+ ,T_raw_xe8_ = 240
+ ,T_raw_xe9_ = 241
+ ,T_raw_xea_ = 242
+ ,T_raw_xeb_ = 243
+ ,T_raw_xec_ = 244
+ ,T_raw_xed_ = 245
+ ,T_raw_xee_ = 246
+ ,T_raw_xef_ = 247
+ ,T_raw_xf0_ = 248
+ ,T_raw_xf1_ = 249
+ ,T_raw_xf2_ = 250
+ ,T_raw_xf3_ = 251
+ ,T_raw_xf4_ = 252
+ ,T_raw_xf5_ = 253
+ ,T_raw_xf6_ = 254
+ ,T_raw_xf7_ = 255
+ ,T_raw_xf8_ = 256
+ ,T_raw_xf9_ = 257
+ ,T_raw_xfa_ = 258
+ ,T_raw_xfb_ = 259
+ ,T_raw_xfc_ = 260
+ ,T_raw_xfd_ = 261
+ ,T_raw_xfe_ = 262
+ ,T_raw_xff_ = 263
+ ,T_T_option_t_ = 264
+ ,T_T_option_p_ = 265
+ ,T_T_option_err_ = 266
+ ,T_T_esc_seq_ = 267
+ ,T_T_eol_ = 268
+ ,T_T_basic_char_ = 269
+ ,T_T_raw_char_ = 270
+ ,T_T_comment_ = 271
+ ,T_T_ws_ = 272
+ ,T_T_angled_string_ = 273
+ ,T_T_c_literal_ = 274
+ ,T_T_c_string_ = 275
+ ,T_T_xc_str_ = 276
+ ,T_T_unquoted_string_ = 277
+ ,T_T_file_inclusion_ = 278
+ ,T_T_identifier_ = 279
+ ,T_T_int_no_ = 280
+ ,T_T_raw_characters_ = 281
+ ,T_T_lr1_constant_symbols_ = 282
+ ,T_T_error_symbols_ = 283
+ ,T_T_eocode_ = 284
+ ,T_T_AD_ = 285
+ ,T_T_AB_ = 286
+ ,T_T_parallel_la_boundary_ = 287
+ ,T_T_arbitrator_code_ = 288
+ ,T_T_parallel_parser_ = 289
+ ,T_T_parallel_thread_function_ = 290
+ ,T_T_parallel_control_monitor_ = 291
+ ,T_T_fsm_ = 292
+ ,T_T_fsm_id_ = 293
+ ,T_T_fsm_filename_ = 294
+ ,T_T_fsm_namespace_ = 295
+ ,T_T_fsm_class_ = 296
+ ,T_T_fsm_version_ = 297
+ ,T_T_fsm_date_ = 298
+ ,T_T_fsm_debug_ = 299
+ ,T_T_fsm_comments_ = 300
+ ,T_T_terminals_ = 301
+ ,T_T_enumeration_ = 302
+ ,T_T_file_name_ = 303
+ ,T_T_name_space_ = 304
+ ,T_T_sym_class_ = 305
+ ,T_T_rules_ = 306
+ ,T_T_lhs_ = 307
+ ,T_T_user_declaration_ = 308
+ ,T_T_user_prefix_declaration_ = 309
+ ,T_T_user_suffix_declaration_ = 310
+ ,T_T_constructor_ = 311
+ ,T_T_destructor_ = 312
+ ,T_T_op_ = 313
+ ,T_T_failed_ = 314
+ ,T_T_user_implementation_ = 315
+ ,T_T_user_imp_tbl_ = 316
+ ,T_T_user_imp_sym_ = 317
+ ,T_T_constant_defs_ = 318
+ ,T_T_terminals_refs_ = 319
+ ,T_T_terminals_sufx_ = 320
+ ,T_T_lrk_sufx_ = 321
+ ,T_T_selector_ = 322
+ ,T_T_NULL_ = 323
+ ,T_T_2colon_ = 324
+ ,T_T_block_ = 325
+ ,T_T_syntax_code_ = 326
+ ,T_T_fsm_class_phrase_ = 327
+ ,T_T_fsm_phrase_ = 328
+ ,T_T_parallel_parser_phrase_ = 329
+ ,T_T_enum_phrase_ = 330
+ ,T_T_terminal_def_ = 331
+ ,T_table_entry_ = 332
+ ,T_T_sym_tbl_report_card_ = 333
+ ,T_T_terminals_phrase_ = 334
+ ,T_T_error_symbols_phrase_ = 335
+ ,T_T_lr1_k_phrase_ = 336
+ ,T_T_rc_phrase_ = 337
+ ,T_T_rule_lhs_phrase_ = 338
+ ,T_T_parallel_monitor_phrase_ = 339
+ ,T_rule_def_ = 340
+ ,T_T_rules_phrase_ = 341
+ ,T_T_subrule_def_ = 342
+ ,T_T_subrules_phrase_ = 343
+ ,T_T_in_stbl_ = 344
+ ,T_refered_T_ = 345
+ ,T_rule_in_stbl_ = 346
+ ,T_refered_rule_ = 347
+ ,T_T_transitive_ = 348
+ ,T_T_grammar_name_ = 349
+ ,T_T_thread_name_ = 350
+ ,T_T_monolithic_ = 351
+ ,T_T_no_of_T_ = 352
+ ,T_T_list_of_native_first_set_terminals_ = 353
+ ,T_T_end_list_of_native_first_set_terminals_ = 354
+ ,T_T_list_of_transitive_threads_ = 355
+ ,T_T_end_list_of_transitive_threads_ = 356
+ ,T_T_emitfile_ = 357
+ ,T_T_preamble_ = 358
+ ,T_T_end_preamble_ = 359
+ ,T_T_T_alphabet_ = 360
+ ,T_T_end_T_alphabet_ = 361
+ ,T_T_file_of_T_alphabet_ = 362
+ ,T_T_attributes_ = 363
+ ,T_tth_in_stbl_ = 364
+ ,T_thread_attributes_ = 365
+ ,T_th_in_stbl_ = 366
+ ,T_kw_in_stbl_ = 367
+ ,T_T_la_expr_src_ = 368
+ ,T_T_eosubrule_ = 369
+ ,T_T_called_thread_eosubrule_ = 370
+ ,T_T_null_call_thread_eosubrule_ = 371
+ ,T_T_cweb_comment_ = 372
+ ,T_T_grammar_phrase_ = 373
+ ,T_T_cweb_marker_ = 374
+ ,T_T_lint_ = 375
+ ,T_T_list_of_used_threads_ = 376
+ ,T_T_end_list_of_used_threads_ = 377
+ ,T_Err_nested_files_exceeded_ = 378
+ ,T_Err_no_end_of_code_ = 379
+ ,T_Err_no_cmd_lne_data_ = 380
+ ,T_Err_no_filename_ = 381
+ ,T_Err_bad_filename_ = 382
+ ,T_Err_bad_fsmheader_filename_ = 383
+ ,T_Err_bad_fsmcpp_filename_ = 384
+ ,T_Err_bad_fsmsym_filename_ = 385
+ ,T_Err_bad_fsmtbl_filename_ = 386
+ ,T_Err_bad_enum_filename_ = 387
+ ,T_Err_bad_errors_hdrfilename_ = 388
+ ,T_Err_bad_errors_impfilename_ = 389
+ ,T_Err_bad_cmd_lne_opt_ = 390
+ ,T_Err_bad_int_no_ = 391
+ ,T_Err_bad_int_no_range_ = 392
+ ,T_Err_no_int_present_ = 393
+ ,T_Err_bad_eos_ = 394
+ ,T_Err_bad_esc_ = 395
+ ,T_Err_comment_overrun_ = 396
+ ,T_Err_bad_char_ = 397
+ ,T_Err_bad_univ_seq_ = 398
+ ,T_Err_improper_closing_of_rules_ = 399
+ ,T_Err_no_identifier_present_ = 400
+ ,T_Err_no_directive_present_ = 401
+ ,T_Err_duplicate_directive_ = 402
+ ,T_Err_no_syntax_code_present_ = 403
+ ,T_Err_no_open_parenthesis_ = 404
+ ,T_Err_no_close_parenthesis_ = 405
+ ,T_Err_no_fsm_id_present_ = 406
+ ,T_Err_no_fsm_id_string_ = 407
+ ,T_Err_no_fsm_filename_present_ = 408
+ ,T_Err_no_fsm_filename_id_present_ = 409
+ ,T_Err_no_comma_present_ = 410
+ ,T_Err_no_fsm_namespace_present_ = 411
+ ,T_Err_no_fsm_namespace_id_present_ = 412
+ ,T_Err_no_fsm_class_present_ = 413
+ ,T_Err_no_fsm_version_present_ = 414
+ ,T_Err_no_fsm_version_string_ = 415
+ ,T_Err_no_fsm_date_present_ = 416
+ ,T_Err_no_fsm_date_string_ = 417
+ ,T_Err_no_fsm_debug_present_ = 418
+ ,T_Err_no_fsm_debug_string_ = 419
+ ,T_Err_no_fsm_comments_present_ = 420
+ ,T_Err_no_fsm_comments_string_ = 421
+ ,T_Err_fsm_debug_string_not_true_or_false_ = 422
+ ,T_Err_no_pp_thread_function_present_ = 423
+ ,T_Err_no_pp_ctrl_mntor_kw_present_ = 424
+ ,T_Err_no_pp_fnct_id_present_ = 425
+ ,T_Err_no_pp_bndry_present_ = 426
+ ,T_Err_no_pp_la_bndary_expr_present_ = 427
+ ,T_Err_no_syntax_code_end_present_ = 428
+ ,T_Err_no_pp_code_present_ = 429
+ ,T_Err_no_pp_code_stc_present_ = 430
+ ,T_Err_not_arbitration_code_kw_ = 431
+ ,T_Err_no_open_brace_ = 432
+ ,T_Err_no_close_brace_ = 433
+ ,T_Err_no_constant_defs_present_ = 434
+ ,T_Err_no_filename_present_ = 435
+ ,T_Err_no_filename_id_present_ = 436
+ ,T_Err_no_namespace_present_ = 437
+ ,T_Err_no_namespace_id_present_ = 438
+ ,T_Err_no_kdefs_code_present_ = 439
+ ,T_Err_no_kdefs_kw_present_ = 440
+ ,T_Err_no_tdef_code_present_ = 441
+ ,T_Err_no_sym_defs_present_ = 442
+ ,T_Err_no_terminal_key_present_ = 443
+ ,T_Err_dup_entry_in_alphabet_ = 444
+ ,T_Err_already_defined_AB_ = 445
+ ,T_Err_already_defined_AD_ = 446
+ ,T_Err_improper_directive_ = 447
+ ,T_Err_no_sym_class_present_ = 448
+ ,T_Err_no_sym_class_id_present_ = 449
+ ,T_Err_zero_len_sym_ = 450
+ ,T_Err_sym_tbl_full_ = 451
+ ,T_Err_sym_tbl_char_pool_full_ = 452
+ ,T_Err_dup_entry_in_sym_table_ = 453
+ ,T_Err_subscript_out_of_range_ = 454
+ ,T_Err_sym_tbl_nested_scope_stk_overflow_ = 455
+ ,T_Err_sym_tbl_nested_scope_stk_underflow_ = 456
+ ,T_Err_sym_tbl_context_buf_overflow_ = 457
+ ,T_Err_report_card_ptr_0_ = 458
+ ,T_Err_cannot_define_term_after_sufx_dir_ = 459
+ ,T_Err_dup_sufx_directive_ = 460
+ ,T_Err_terminals_refs_def_after_terminals_ = 461
+ ,T_Err_terminals_refs_dup_def_ = 462
+ ,T_Err_no_rule_name_present_ = 463
+ ,T_Err_no_sub_rule_present_ = 464
+ ,T_Err_subrule_use_undefined_T_ = 465
+ ,T_Err_stbl_entry_unknown_ = 466
+ ,T_Err_subrule_overrun_ = 467
+ ,T_Err_stble_has_entry_but_not_a_rule_ = 468
+ ,T_Err_file_of_T_alphabet_kw_not_present_ = 469
+ ,T_Err_emitfile_kw_not_present_ = 470
+ ,T_Err_preamble_kw_not_present_ = 471
+ ,T_Err_preamble_srce_code_not_present_ = 472
+ ,T_Err_end_preamble_kw_not_present_ = 473
+ ,T_Err_cmd_line_chaffe_ = 474
+ ,T_Err_T_alphabet_kw_not_present_ = 475
+ ,T_Err_T_alphabet_file_not_present_ = 476
+ ,T_Err_end_T_alphabet_kw_not_present_ = 477
+ ,T_Err_no_terminals_in_T_alphabet_list_ = 478
+ ,T_Err_rotten_chr_in_T_alphabet_ = 479
+ ,T_Err_transitive_kw_not_present_ = 480
+ ,T_Err_grammar_name_kw_not_present_ = 481
+ ,T_Err_namespace_kw_not_present_ = 482
+ ,T_Err_filename_kw_not_present_ = 483
+ ,T_Err_threadname_kw_not_present_ = 484
+ ,T_Err_monolithic_kw_not_present_ = 485
+ ,T_Err_no_of_T_kw_not_present_ = 486
+ ,T_Err_list_of_terminals_kw_not_present_ = 487
+ ,T_Err_no_list_of_trans_threads_kw_ = 488
+ ,T_Err_no_terminals_present_in_T_alphabet_ = 489
+ ,T_Err_transitive_value_bad_ = 490
+ ,T_Err_monolithic_value_bad_ = 491
+ ,T_Err_grammar_name_value_not_present_ = 492
+ ,T_Err_namespace_value_not_present_ = 493
+ ,T_Err_threadname_value_not_present_ = 494
+ ,T_Err_filename_value_not_present_ = 495
+ ,T_Err_no_of_T_value_not_present_ = 496
+ ,T_Err_no_of_terminals_not_present_ = 497
+ ,T_Err_end_list_native_T_kw_not_present_ = 498
+ ,T_Err_end_list_of_transitive_threads_kw_not_present_ = 499
+ ,T_Err_no_of_native_Ts_in_list_not_equal_ = 500
+ ,T_Err_no_of_threads_in_list_not_equal_ = 501
+ ,T_Err_thread_refed_but_not_defined_ = 502
+ ,T_Err_bad_T_in_list_ = 503
+ ,T_Err_bad_th_in_list_ = 504
+ ,T_Err_already_defined_in_fsc_file_ = 505
+ ,T_Err_bad_thread_subscript_ = 506
+ ,T_Err_not_a_keyword_ = 507
+ ,T_Err_no_of_threads_not_present_ = 508
+ ,T_Err_bad_T_alphabet_ = 509
+ ,T_Err_fsc_file_does_not_exist_ = 510
+ ,T_Err_filename_file_does_not_exist_ = 511
+ ,T_Err_T_alphabet_file_does_not_exist_ = 512
+ ,T_Err_emitfile_file_does_not_exist_ = 513
+ ,T_Err_emitfile_file_not_present_ = 514
+ ,T_Err_fsc_cntl_file_not_present_ = 515
+ ,T_Err_file_of_T_alphabet_not_present_ = 516
+ ,T_Err_epsilon_pass_thru_ = 517
+ ,T_Err_epsilon_pass_thru_no_Ts_ = 518
+ ,T_Err_rule_not_in_stbl_ = 519
+ ,T_Err_T_not_in_stbl_ = 520
+ ,T_Err_bad_directive_ = 521
+ ,T_Err_bad_term_in_la_expr_ = 522
+ ,T_Err_empty_set_removal_in_la_expr_ = 523
+ ,T_Err_bad_operator_in_la_expr_ = 524
+ ,T_Err_not_a_lhs_kw_ = 525
+ ,T_Err_pp_la_boundary_attribute_not_fnd_ = 526
+ ,T_Err_already_processed_fsm_phase_ = 527
+ ,T_Err_already_processed_pp_phase_ = 528
+ ,T_Err_already_processed_T_enum_phase_ = 529
+ ,T_Err_already_processed_error_phase_ = 530
+ ,T_Err_already_processed_rc_phase_ = 531
+ ,T_Err_already_processed_lrk_phase_ = 532
+ ,T_Err_already_processed_T_phase_ = 533
+ ,T_Err_already_processed_rule_phase_ = 534
+ ,T_Err_not_T_for_rtned_token_from_th_ = 535
+ ,T_Err_not_id_for_ns_in_th_stmt_ = 536
+ ,T_Err_not_id_for_th_name_in_th_stmt_ = 537
+ ,T_Err_bad_th_qualifier_ = 538
+ ,T_Err_not_dbl_colon_in_th_stmt_ = 539
+ ,T_Err_not_T_or_R_in_subrule_expr_ = 540
+ ,T_Err_not_T_or_R_or_eos_in_subrule_expr_ = 541
+ ,T_Err_not_eos_in_subrule_expr_ = 542
+ ,T_Err_invalid_logical_name_ = 543
+ ,T_Err_invalid_logical_value_ = 544
+ ,T_Err_duplicate_logical_name_ = 545
+ ,T_Err_missing_terminals_refs_kw_ = 546
+ ,T_Err_missing_terminals_sufx_kw_ = 547
+ ,T_Err_not_a_terminal_definition_ = 548
+ ,T_Err_missing_lrk_sufx_kw_ = 549
+ ,T_ERR_sick_grammar_ = 550
+ ,T_ERR_no_fsm_phrase_ = 551
+ ,T_ERR_no_T_enum_phrase_ = 552
+ ,T_ERR_no_lrk_phrase_ = 553
+ ,T_ERR_no_rc_phrase_ = 554
+ ,T_ERR_no_errors_phrase_ = 555
+ ,T_ERR_no_terminals_phrase_ = 556
+ ,T_ERR_no_rules_phrase_ = 557
+ ,T_Err_used_rule_but_undefined_ = 558
+ ,T_Err_rule_already_defined_ = 559
+ ,T_Err_la_expr_calc_empty_set_ = 560
+ ,T_Err_no_close_brace_ending_rules_defs_ = 561
+ ,T_Err_use_of_T_outside_Rules_construct_ = 562
+ ,T_Err_not_kw_defining_grammar_construct_ = 563
+ ,T_Err_use_of_N_outside_Rules_construct_ = 564
+ ,T_Err_misplaced_or_misspelt_Rule_or_T_ = 565
+ ,T_Err_not_a_Rule_ = 566
+ ,T_Err_empty_file_ = 567
+ ,T_Err_not_lhs_pcnrl_mntr_ = 568
+ }; // close defining enum list
+ }; // close defining T_enum
+} // end of namespace
+#endif
diff --git a/web/yacco2/library/CAbs_lr1_sym.w b/web/yacco2/library/CAbs_lr1_sym.w
new file mode 100644
index 0000000000..4200ad7dd5
--- /dev/null
+++ b/web/yacco2/library/CAbs_lr1_sym.w
@@ -0,0 +1,493 @@
+@q file: CAbs_lr1_sym.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Abstract symbol class for all alphabets.\fbreak
+|CAbs_lr1_sym| is your base structure from which all
+grammar symbols of terminal and rule alphabets are derived.
+Two symbol identities are maintained: description and enumeration.
+The descriptive form is its name used in the grammar while the enumeration id depends
+on how Yacco2 has iterated across the Terminal alphabet.
+This iteration is described elsewhere.
+
+To save space, an union structure is used between the co-ordinate of a terminal and
+the rule's associated number of right-handside elements (subrule) and parser context.
+At one time there was a distinction of generated symbols for the rule and its
+subrules. Now a subrule is a method within the rule's class.
+The utility for separate symbols for rules and their
+subrules was evaluated.
+The cost of the extra subrule symbols was too heavy in the
+little utility that they gave but rarely exercised!
+
+A rule and the lrk constants terminals have no association with the token source stream,
+only terminals do in their various forms ---
+error, raw characters, and user defined.
+The source file co-ordinates are expressed in terms of a line number and
+a character position
+within the line.
+A file number index is kept as a key into the global table of copied files that holds
+their file names.
+
+The balance of the variables are grammatical attributes: `auto delete', `auto abort', and its
+destructor function if present.
+Why is there a dtor function instead of a class destructor.
+Efficiency! Virtual tables can be expensive in space and time.
+In this case, it is not needed very often and it is controlled by Yacco2's output code.
+Remember there are hoards of symbols: at least one per character.
+
+I've added the terminal's compressed set key to speed things up for the lookahead
+set operations. Some parsing operations use the raw enumerate value as
+it is a 1:1 in content.
+Lookahead sets are composed of sorted dupples where each dupple is composed
+ of a partition no and its elements members
+derived from the terminal's
+enumerated value.
+This eliminates the calculation of a terminal's enumerate value to
+its set equivalent every time it is checked for membership
+within a set.
+
+@<Struct...@>+=
+struct CAbs_lr1_sym {
+ CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,bool Auto_delete
+ ,bool Affected_by_abort);
+
+ CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,bool Auto_delete
+ ,bool Affected_by_abort
+ ,yacco2::USINT Ext_file_no
+ ,yacco2::UINT Rc_pos);
+
+ CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,yacco2::Parser* P
+ ,bool Auto_delete=false
+ ,bool Affected_by_abort=false);
+
+ yacco2::KCHARP id()const;
+ yacco2::USINT enumerated_id()const;
+ void set_enumerated_id(yacco2::USINT Id);
+ void set_auto_delete(bool X);
+ bool auto_delete()const;
+ void set_affected_by_abort(bool X);
+ bool affected_by_abort()const;
+ yacco2::UINT rc_pos();
+ void set_rc_pos(yacco2::UINT Pos);
+ yacco2::UINT external_file_id();
+ void set_external_file_id(yacco2::UINT File);
+ void set_rc(yacco2::CAbs_lr1_sym& Rc
+ ,yacco2::KCHARP GPS_FILE=__FILE__,yacco2::UINT GPS_LINE=__LINE__);
+ yacco2::UINT line_no();
+ void set_line_no(yacco2::UINT Line_no);
+ yacco2::UINT pos_in_line();
+ void set_pos_in_line(yacco2::UINT Pos_in_line);
+ void set_line_no_and_pos_in_line(yacco2::CAbs_lr1_sym& Rc);
+ void set_line_no_and_pos_in_line(yacco2::UINT Line_no,yacco2::UINT Pos_in_line);
+ void set_who_created(yacco2::KCHARP File,yacco2::UINT Line_no);
+ yacco2::UINT who_line_no();
+ yacco2::KCHARP who_file();
+ yacco2::Parser* parser();
+ yacco2::FN_DTOR dtor();
+ yacco2::USINT rhs_no_of_parms();
+ yacco2::KCHARP id__;
+ yacco2::FN_DTOR dtor__;
+ yacco2::USINT enumerated_id__;
+ bool auto_delete__;
+ bool affected_by_abort__;
+ UCHAR enum_id_set_partition_no()const;
+ UCHAR enum_id_set_member()const;
+
+ struct tok_co_ordinates{
+ yacco2::KCHARP who_file__;
+ yacco2::UINT who_line_no__;
+ yacco2::UINT rc_pos__;
+ yacco2::UINT line_no__;
+ yacco2::USINT external_file_id__;
+ yacco2::USINT pos_in_line__;
+ Set_entry set_entry__;
+ };
+ struct rule_info{
+ yacco2::Parser* parser__;
+ yacco2::USINT rhs_no_of_parms__;
+ };
+ union {
+ tok_co_ordinates tok_co_ords__;
+ rule_info rule_info__;
+ };
+};
+
+@*2 Grammar abstract symbol implementation.\fbreak
+Why the 3 |CAbs_lr1_sym| constructors?
+The 1st |CAbs_lr1_sym| defines rules, the 2nd defines the terminals without
+the GPS, while
+the 3rd can be used by the grammar writer in the syntax directed code
+ to create terminals having a GPS to its source file.
+@ |CAbs_lr1_sym| constructor.
+@<accrue yacco2 code@>=
+yacco2::
+CAbs_lr1_sym::
+ CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,yacco2::Parser* P
+ ,bool Auto_delete
+ ,bool Affected_by_abort
+)
+ :id__(Id)
+ ,dtor__(Dtor)
+ ,enumerated_id__(Enum_id)
+ ,auto_delete__(Auto_delete)
+ ,affected_by_abort__(Affected_by_abort)
+ {rule_info__.parser__ = P;
+ @<|create_set_entry for CAbs_lr1_sym|@>;
+}
+
+ yacco2::
+CAbs_lr1_sym::
+CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,bool Auto_delete
+ ,bool Affected_by_abort)
+ :id__(Id)
+ ,dtor__(Dtor)
+ ,enumerated_id__(Enum_id)
+ ,auto_delete__(Auto_delete)
+ ,affected_by_abort__(Affected_by_abort)
+{
+ tok_co_ords__.rc_pos__ = 0;
+ tok_co_ords__.line_no__ = 0;
+ tok_co_ords__.external_file_id__ = 0;
+ tok_co_ords__.pos_in_line__ = 0;
+ tok_co_ords__.who_file__ = 0;
+ tok_co_ords__.who_line_no__ = 0;
+ @<|create_set_entry for CAbs_lr1_sym|@>;
+}
+
+yacco2::
+CAbs_lr1_sym::
+CAbs_lr1_sym(
+ yacco2::KCHARP Id
+ ,yacco2::FN_DTOR Dtor
+ ,yacco2::USINT Enum_id
+ ,bool Auto_delete
+ ,bool Affected_by_abort
+ ,yacco2::USINT Ext_file_no
+ ,yacco2::UINT Rc_pos)
+ :id__(Id)
+ ,dtor__(Dtor)
+ ,enumerated_id__(Enum_id)
+ ,auto_delete__(Auto_delete)
+ ,affected_by_abort__(Affected_by_abort)
+{
+ tok_co_ords__.rc_pos__ = Rc_pos;
+ tok_co_ords__.line_no__ = 0;
+ tok_co_ords__.external_file_id__ = Ext_file_no;
+ tok_co_ords__.pos_in_line__ = 0;
+ tok_co_ords__.who_file__ = 0;
+ tok_co_ords__.who_line_no__ = 0;
+ @<|create_set_entry for CAbs_lr1_sym|@>;
+}
+
+@*2 |enum_id_set_partition_no| and |enum_id_set_member|.\fbreak
+A compressed set key.
+@<accrue yacco2 code@>=
+yacco2::UCHAR yacco2::CAbs_lr1_sym::enum_id_set_partition_no()const{
+ return tok_co_ords__.set_entry__.partition__;
+}
+
+yacco2::UCHAR yacco2::CAbs_lr1_sym::enum_id_set_member()const{
+ return tok_co_ords__.set_entry__.elements__;
+}
+
+@*2 |rhs_no_of_parms|. Number of elements contained in a rule's right hand side subrule.\fbreak
+@<accrue yacco2 code@>=
+yacco2::USINT
+yacco2::
+CAbs_lr1_sym::
+rhs_no_of_parms(){
+ return rule_info__.rhs_no_of_parms__;
+}
+
+@*2 |parser|. Associated parser with the grammar being used.\fbreak
+A terminal symbol has no association with a parser apart from
+where it was constructed> Where as a rule does require this reference that gets
+assigned at construction time. So be ware as the parser variable is unionized!
+@<accrue yacco2 code@>=
+yacco2::
+Parser*
+yacco2::
+CAbs_lr1_sym::
+parser(){
+ return rule_info__.parser__;
+}
+
+@*2 |id|. Descriptive form of the symbol for tracing purposes.\fbreak
+For rules, this is optimized out when the grammar's debug switch is set to off.
+You must regenerate the grammar when you want to turn on the grammar's debug facilty.
+Just setting the \CPLUSPLUS/ code for debug is not sufficient. Trust me.
+@<accrue yacco2 code@>=
+yacco2::KCHARP
+yacco2::
+CAbs_lr1_sym::
+id()const{
+ return id__;
+}
+
+@*2 |enumerated_id|.\fbreak
+The iteration scheme for the terminal alphabet
+starts at 0 followed by the grammar's rules.
+Subrules enumeration start from 1.
+Their enumerates are mutually exclusive and are defined in the
+generated fsm class of the grammar.
+@<accrue yacco2 code@>=
+yacco2::USINT
+yacco2::
+CAbs_lr1_sym::
+enumerated_id()const{
+ return enumerated_id__;
+}
+
+@*2 |set_enumerated_id|.
+@<accrue yacco2 code@>=
+void yacco2::
+CAbs_lr1_sym::
+set_enumerated_id(yacco2::USINT Id){
+ enumerated_id__ = Id;
+}
+@*2 |set_affected_by_abort| and |affected_by_abort|. \fbreak
+These are the writer and reader of the grammar's
+auto abort attribute `AB' for the symbol.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_affected_by_abort(bool X){
+ affected_by_abort__ = X;
+}
+
+bool
+yacco2::
+CAbs_lr1_sym::
+affected_by_abort()const{
+ return affected_by_abort__;
+}
+@*2 |set_auto_delete| and |CAbs_lr1_sym::auto_delete|.\fbreak
+These are the writer and reader of the grammar's
+auto delete attribute `AD' for the symbol.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_auto_delete(bool X){
+ auto_delete__ = X;
+}
+
+bool
+yacco2::
+CAbs_lr1_sym::
+auto_delete()const{
+ return auto_delete__;
+}
+@*2 |dtor|.\fbreak
+ Destructor function defined by the grammar writer for
+the symbol.
+Why not use the class genetics?
+A class is too expensive in its implementation.
+Your basic structure is sufficient with no virtual table overhead.
+Within this context, the dtor is rarely needed and it's upto Yacco2 to create when needed.
+See the |destructor| directive of the grammar.
+@<accrue yacco2 code@>=
+yacco2::FN_DTOR
+yacco2::
+CAbs_lr1_sym::
+dtor(){
+ return dtor__;
+}
+
+@*2 |set_rc|, |set_rc_pos|, and |rc_pos|.\fbreak
+These are the writers and reader of the terminal's
+co-ordinate. The only symbol that directly sets these values are the raw character
+symbols. All other symbols are composites built from raw character terminals.
+The co-ordinate parts can be individually set, or all parts of the co-ordinate can
+be copied from a previous symbol's co-ordinate.
+Normally their use comes from a parsing environment producing tokens
+built from a grammar but this is not a hardfast rule.
+
+The reason why the parser address is passed to |CAbs_lr1_sym::set_rc|
+is due to |eog|.
+It is shared across all token containers and all copied source files.
+This sharing behavior was taken to lower the new-delete overhead
+to creating of the terminal.
+Consequently there is no definite co-ordinate associated with this terminal and
+one must go to the previous token of the supplier to tack on the real co-ordinates +
+the number of previous terminals tried for a co-ordinate.
+The supplier context comes from the |parser__|.
+
+The 2 GPS parameters allows parental histronics: Don't know if this is received well by
+the user of \O2 but it certainly helps to debug.
+This was added down the road and so the reason for the defaults
+in the prototype as to not disturb existing grammars.
+If the default is taken then the GPS is not set as it could be done elsewhere.
+|set_who_created| allows one to initially set or override previous settings.
+
+Some marginal additives: parse stack co-ordinates for error tokens
+and ``eog'' association with from current token supplier.
+Added the situation if no token symbol
+to find for the ``eog'' token (no data entered at the command line),
+i force the command line co-ordinates instead of throwing up.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_rc(yacco2::CAbs_lr1_sym& Rc,yacco2::KCHARP GPS_FILE,yacco2::UINT GPS_LINE){@/
+ if(GPS_FILE != 0){
+ tok_co_ords__.who_file__ = GPS_FILE;
+ tok_co_ords__.who_line_no__ = GPS_LINE;
+ }
+ if(Rc.tok_co_ords__.external_file_id__ > 0){
+ tok_co_ords__.external_file_id__ = Rc.tok_co_ords__.external_file_id__;
+ tok_co_ords__.rc_pos__ = Rc.tok_co_ords__.rc_pos__;
+ tok_co_ords__.line_no__ = Rc.tok_co_ords__.line_no__;
+ tok_co_ords__.pos_in_line__ = Rc.tok_co_ords__.pos_in_line__;
+ return;
+ }
+return;
+}
+
+@*2 Does terminal have a legitimate co-ordinate?.\fbreak
+Do you see the moonwalk? This goes backwards through the supplier tokens
+looking for a source address.
+Inside the supplier routine is the validation on the requested subscript.
+@<does terminal have a legitimate co-ordinate? yes set it and exit. no keep trying@>=
+ if(pt->tok_co_ords__.rc_pos__ != 0) goto set_co_ordinates;
+ ++bk_cnt;
+ --prev_pos;
+ goto find_legitimate_terminal;
+
+
+@
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_rc_pos(yacco2::UINT Pos){
+@<Validate Pos parameter@>;
+ tok_co_ords__.rc_pos__ = Pos;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+rc_pos(){
+ return tok_co_ords__.rc_pos__;
+}
+
+@*2 |set_external_file_id| and |external_file_id|. \fbreak
+These are the writer and reader of the grammar's
+external file index used to reference the copied files descriptive name.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_external_file_id(yacco2::UINT File_no){
+@<Validate File no parameter@>;
+ tok_co_ords__.external_file_id__ = File_no;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+external_file_id(){
+ return tok_co_ords__.external_file_id__;
+}
+
+@*2 Set line no, and character position routines.\fbreak
+These are the writer and reader to parts of the co-ordinate.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no(yacco2::UINT Line_no){
+@<Validate Line no parameter@>;
+ tok_co_ords__.line_no__ = Line_no;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+line_no(){
+ return tok_co_ords__.line_no__;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+pos_in_line(){
+ return tok_co_ords__.pos_in_line__;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_pos_in_line(yacco2::UINT Pos_in_line){
+ @<Validate Pos in line parameter@>;
+ tok_co_ords__.pos_in_line__ = Pos_in_line;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no_and_pos_in_line(yacco2::UINT Line_no,yacco2::UINT Pos_in_line){
+ @<Validate Line no parameter@>;
+ @<Validate Pos in line parameter@>;
+ tok_co_ords__.line_no__ = Line_no;
+ tok_co_ords__.pos_in_line__ = Pos_in_line;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no_and_pos_in_line(yacco2::CAbs_lr1_sym& Rc){
+ tok_co_ords__.line_no__ = Rc.tok_co_ords__.line_no__;
+ tok_co_ords__.pos_in_line__ = Rc.tok_co_ords__.pos_in_line__;
+}
+
+
+@*2 |set_who_created|, |who_line_no|, |who_file|.\fbreak
+These are the writer and reader to parts of the co-ordinate
+giving the source that created the symbol.
+@<accrue yacco2 code@>=
+void
+yacco2::
+CAbs_lr1_sym::
+set_who_created(yacco2::KCHARP File,yacco2::UINT Line_no){
+ tok_co_ords__.who_file__ = File;
+ tok_co_ords__.who_line_no__ = Line_no;
+}
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+who_line_no(){
+ return tok_co_ords__.who_line_no__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_lr1_sym::
+who_file(){
+ return tok_co_ords__.who_file__;
+}
diff --git a/web/yacco2/library/Makefile_Edit_cweb b/web/yacco2/library/Makefile_Edit_cweb
new file mode 100644
index 0000000000..9833b36505
--- /dev/null
+++ b/web/yacco2/library/Makefile_Edit_cweb
@@ -0,0 +1,30 @@
+# Makefile_Edit_cweb
+# clean up the ctangle and cweave droppings
+# add \input eplain before wlibrary.tex
+# comment out #line of cweb emits
+# delete ;
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+#echo '\input eplain' > $tmp/eplain.txt
+#cat $tmp/eplain.txt wlibrary.tex > $tmp/wlibrary.tex
+#cp $tmp/wlibrary.tex wlibrary.tex
+sed_cmd1="'-e s;^#line;//#line;'"
+sed_cmd2="'-e s/^;$//'"
+for i in wrc wset wthread wtok_can wtree yacco2
+do
+ j=$i.cpp
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+for i in yacco2 war_begin_code war_end_code yacco2_typedefs yacco2_macros wproc_pp_core wpp_core
+do
+ j=$i.h
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+rm -fr $tmp \ No newline at end of file
diff --git a/web/yacco2/library/bugs.w b/web/yacco2/library/bugs.w
new file mode 100644
index 0000000000..3e33d0a82e
--- /dev/null
+++ b/web/yacco2/library/bugs.w
@@ -0,0 +1,509 @@
+@q file: bugs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+
+@** Bugs in all their splender.\fbreak
+
+@*2 Error on ``file-overrun''.\fbreak
+Where the meta terminals `eog' or `eof'
+have no co-ordinates assigned to them and the error token being generated
+needs a real co-ordinte assigned to it.
+The |tok_can<ifstream>operator []|
+did not respect the requested token subscript when the end-of-file was reached.
+It always returned the `eog' token.
+
+Now if the requested subscript |<=| the container's |pos_| the appropriate
+token is returned from that the associated error terminal will associate to the previous
+real terminal returned. The container is walked backwards looking for Mr. Right.
+\fbreak
+Jan. 1/2005.\fbreak
+\fbreak
+June 2008\fbreak
+``eof'' has been end-of-the-line for \QUEshift.
+
+@*2 Parallel parse assumed that the grammar would do more{...}.\fbreak
+than just
+parse and accept a single \PARshift phrase. This showed up when
+I implemented a consolidated grammar to reduce the First set testing to launch threads.
+\fbreak
+Fix: replace |reduce| with |@<try reduce@>|.\fbreak
+Jan. 1/2005.
+
+@*2 Parallel thread table aborts when program winds down.\fbreak
+ This is a Microsoft problem as
+it's a simple template of map of thread strings and list of current threads available.\fbreak
+Jan. 1/2005.
+
+@*2 \ALLshift and end-of-container.\fbreak
+Ahh the Ides of March --- what do u do
+when the ``all shift'' facility is on and u reached the ``eog'' or ``eof'' token:
+the end of the container?
+Originally I turned off the ``all shift'' facility and returned without executing
+the |all_shift| procedure if present in the configuration state.
+Overruns in any context are not liked.
+Well an improvement to this situation is to turn off the facility
+and still execute the |all_shift| if its present in the state's configuration.
+This allows the grammar writer to use this facility as an error handler.\fbreak
+Mar. 15/2005.
+
+@*2 Test availability of |BIT_MAPS_FOR_SALE__|.\fbreak
+Finally getting
+around to refining the constraints by adding an extern indicating the
+total number of words for sale.
+When bit maps need generating --- just-in-time manufacture per fsm state calling threads,
+the global |BIT_MAP_IDX__| is the accrued number of maps already created. It is this
+value that is measured for overflow against |TOTAL_NO_BIT_WORDS__|.
+See |@<determine if there is a bit map gened for state. no do it@>| for implementation.
+A thrown error will be generated.\fbreak
+Apr. 10/2005.
+
+@*2 Monolithic grammar's |start_token| should be set in constructor.\fbreak
+This error showed up when a standalone grammar was calling out of its
+first set a thread that should have run and didn't.
+The grammar highlighting the error was properly programmed
+but used the |start_token| procedure as a reference
+to set the error token co-ordinates.
+This type of error means either Yacco2's Linker
+did not generate properly its first sets, or the grammar writer did not
+regen the first sets using Linker after adding or subtracting
+terminals from the Terminal vocabulary.
+
+Now one can set it 2 ways: by calling one of these procedures
+|start_token| or |current_token|.\fbreak
+May 10/2005.
+
+@*2 Mismatched file number associated with error token co-ordinates.\fbreak
+Well this is just a dumb error! Like all others.\fbreak
+History:\fbreak
+To support nested file includes, 2 globals were used:
+|FILE_CNT__| and |NESTED_FILE_CNT__| to be efficiently clever.
+How so? I did not want to push, pop, and pant a stack.
+ As new files were being processed,
+their literal names were kept in a map: file number and its description.
+Of course this could be a vector but my file number starts from
+one due to my bias on counting; I'll stick with the bias but fiddle the vector after
+this.
+
+Now |FILE_CNT__| is an incrementing number while |NESTED_FILE_CNT__|
+is the nested level of includes. U guessed it the file number being
+associated with the error was the
+nested level and not |FILE_CNT__|. So just stack the |FILE_CNT__|
+ at time of file processing and use the stack depth to guard against
+ run away file recursion.\fbreak
+19 May, 2005.
+
+@*2 Validate accept message against the new lookahead token position.\fbreak
+With experience, this reality check is not needed. Why? Error tokens can
+be returned from a thread with no consumption of the token stream occuring.
+The check came about when threads were being developed with the assumption
+that tokens returned consumed the current token stream which is
+not the case as one could post process tokens and forward post an error
+past the current token position or
+re-align the error outside of the token stream being read.
+
+Now with a more creative approach to error handling and
+threads working properly, this check is too restraining. So beware as it can still happen.\fbreak
+26 May, 2005.
+
+@*2 Linux bug --- dropping namespace |yacco2::| on extern "C" referenced objects.\fbreak
+The |yacco2| namespace wrapped the below globals to manage threads.
+ They get defined by Yacco2's linker. Now the shaker: originally I referenced
+ these globals by using "C" extern. I used this approach to
+ indicate that other languages could get a hold of them though the
+ real use of extern "C" is for functions and the order of parameters pushed onto
+ the calling stack. Unfortunately when porting |yacco2| to Linux these globals were not
+ resolved by the regular language linker. The |wthread.cpp| code that referenced them compiled but
+ emitted object code without the |yacco2::| prefix.
+
+\ptindent{1) extern "C" void* |THDS_STABLE__;|}
+\ptindent{2) extern "C" void* |T_ARRAY_HAVING_THD_IDS__;|}
+\ptindent{3) extern "C" void* |BIT_MAPS_FOR_SALE__;|}
+\ptindent{4) extern "C" int |TOTAL_NO_BIT_WORDS__;|}
+\ptindent{5) extern "C" int |BIT_MAP_IDX__;|}
+\ptindent{6) extern "C" |CAbs_lr1_sym|* |PTR_LR1_eog__;|}
+
+The fix: drop the "C" from the above extern statements. The object
+code now contains the |yacco2::| prefix to these globals.\fbreak
+25 July, 2005.
+
+@*2 Why me the ginea pig using other \CPLUSPLUS/ compiler foibles?.\fbreak
+Linux ugh what's it good for? absolutely... as the song goes. The out-of-the-box
+\CPLUSPLUS/ compiler generates unreolved references that are due to its template processing.
+Going thru g++ to assembler output only and looking for the undefined references
+from their STL and using the ``nm'' facility to see an object's symbols just doesn't
+help.
+
+So the moral of this story is to try another compiler like Intel \CPLUSPLUS/? or should I
+become involved with the free-open-source movement. For now my time is limited and
+so I will take the first option.\fbreak
+31 July 2005
+
+@*2 MS \CPLUSPLUS/ problems.\fbreak
+While converting to the dynamic approach to tracing, MS \CPLUSPLUS/ compile hit the wall.
+It's symbol table management got confused in symbols that had common prefixes.
+Enough of my rants --- detour no: xxx. At least I can still keep going instead of the more
+fundlemental problem posted about Linux and the unresolved ctors from template
+instantiation.\fbreak
+5 Aug. 2005
+
+@*2 Regular parse and no input container: just parsed the empty language.\fbreak
+To support grammars as logic sequencers, i forgot to
+force a |current_token__ = yacco2::PTR_LR1_eog__;| against
+the current token within the parser ctor
+when no input token container inputted.
+Even though there is no token
+consumption taking place,
+the parser starts things off by fetching the first token.
+If there is no token present,
+the ctor of the parser does not set up for parsing: parse stack etc, but exits
+as if an empty language had been parsed.
+
+Correction:\fbreak
+In this case there is no token so i force the meta terminal
+|eog| to indicate the end-of-the-token-stream:
+a bit of a hack as regular parsing expects to receive its
+input from a token container but works as there is no token consumption
+by this particular grammar.
+This approach represents properly the empty language string
+when the grammar / parser consumes the token stream.
+
+Observation:\fbreak
+As this is a very simple correction, why wasn't it programmed properly?
+Again the forest versus the trees situation. Local patch without overall
+assessment of how parsing requires a token.
+Now i'm being hard on myself as it was caught with my 1st test try
+but the observation still holds.\fbreak
+16 Aug. 2005
+
+@*2 MS 7{.}0 heap delete bug{...}.\fbreak
+I commented out the delete statement so that things at least work.\fbreak
+31 Oct. 2005 Goulish wonders...
+
+@*2 MS 7{.}0 bug pranks.\fbreak
+For now bypass the |delete_tokens| request by
+returning immediately out of the routine.\fbreak
+31 Oct. 2005 wonders never cease...
+
+@*2 Intel \CPLUSPLUS/ release 9.\fbreak
+History:\fbreak
+Well, Intel's VTune is an excellent product that works first time.
+So from this experience and my problems with Red Hat's gcc compiler
+weaknesses of not compiling proper code, MS compiler 7.0
+having little displays of irregularity lead
+me to try out Intel's compiler products particularly when
+Apple is endorsing their chips --- chip wars with salt and vinegar?
+Well the install was easy and the anticipation high as to
+performance, optimization, and space.
+Crunch crunch crunch --- that's the sound of the man ...
+Enough of my mental droppings... mumblings in karaoke. Hear's the scoup (intended):
+The compiler is approximately 3 times slower than MS compiler.\fbreak
+Code bloat is in fat city --- 5.5 times bigger.
+My program is 675k using MS versus 3350k for Intel\fbreak
+
+The killer, the code produced does not handle a multi-threaded
+program and its contexts.
+It loses its proper thread run context.
+This did take place in Visual Studio 6.0
+but they corrected this in release 7.
+As \O2 starts with no threads --- on demand, the thread
+table of workers grows dynamically according to jit source context.
+Now the lost context, when a thread
+finishes it work, it sets its working status back to waiting-for-work.
+This setting does not happen with Intel's version of \O2.
+So the thread table keeps growing to approximately 2k threads created and
+then the program goes into a deadly wait state where all parties
+are politely nodding.
+
+Upon debugging this in 2 ways:
+log all the events textually
+(let's hear it for my tracings:
+all events turned on --- messaging between events, arbitration, tokens fetched, etc)
+ and use of Intel's source code debugger,
+2 things came out: the Intel debugger gets lost upon single stepping the source code for
+|set_waiting_for_work| and the smoking gun displayed its
+evidence as more common threads got created like |eol| where they were always
+busy even after their completion.
+
+All this in 3 hours of high expectations to the sobering truth that
+\CPLUSPLUS/ compilers are gum and shoe laced together in a top-down affair.
+Now Sunday 4 December, my clean up to bring me back to living with
+MS \CPLUSPLUS/ and its little tantrums. At least it compiles fast, and
+my program runs in release mode.
+In debug mode, MS \CPLUSPLUS/ has a bit of a problem with its
+memory re-cycling at
+program-exit time but this is now tolerated as there is nowhere to go
+for me at present.
+Hey what about Apple? i'll see how they do regarding top-down compiling.
+What about HP/Compaq/Dec? It worked 2 years ago so my
+porting of the Pascal translator will be the test
+with HP's new STL.
+
+Alas i'm becoming more convinced of formal methods to compiling.
+This certainly saddens me a lot in year end 2005...
+about the Intel's state of affairs regarding compiling?
+or was it just their \CPLUSPLUS/ implementation?
+I just don't know as the song goes but
+\CPLUSPLUS/ certainly is a dog of a language to get right particularly
+when porting to different platforms exposes different compiler weaknesses.
+Wait till the meta-language crew start exhorting their virtues.
+Just try single stepping those songs! \fbreak
+4 Dec. 2005\fbreak
+
+@*2 Apple's cough in handling template definition.\fbreak
+See |Sour Apple on template definition| for an explanation of why the slight
+arberation and work around.\fbreak
+13 Dec. 2005\fbreak
+\fbreak
+Apple's response was fast and polite. They quoted the \CPLUSPLUS/ Standard showing that this was
+left to the implementors and that their interpretation was appropriate.
+Upon reading Standard, they are right.
+The others (Microsoft, Intel, HP) use a more general approach
+and in my opinion would be the direction i would take dealing with glorified macros
+ but kukos to
+the Open Source implementation. My correction was minimal to
+place all referenced variables
+before the defining template shell.\fbreak
+Feb. 2006
+
+@*2 HP Alpha \CPLUSPLUS/ ``this'' object mis-address.\fbreak
+See |worker_thread_blk initialization: threaded grammar|.\fbreak
+The launched thread places the |worker_thread_blk| ``this'' pointer
+within
+the |Parallel_thread_table| for thread reuse.
+Unfortunately the address of this object is not the same as the address
+within the containing grammar's parser object.
+Apple and Microsoft got it right!\fbreak
+\fbreak
+The fix:\fbreak
+As the parser object containing it is also passed for tracing
+purposes, i now fetch its address thru the parser's object.
+\fbreak
+10 May 2006.
+\fbreak
+\fbreak
+Take 1.329...\fbreak
+The problem was |ctor()| producing a temporary variable that
+became |ctor(ctor(x)\&))| in the initialization list of a defining ctor.
+Eg, box A contains box B where box B has only B(x) ctor.
+|A::A():b_(B(x)){};| is the problem.\fbreak
+The ctor of box B in the list produces a temporary variable and
+\CPLUSPLUS/ creates an implicit default ctor of |B()| and an implicit copy |ctor(B\&)|.
+Why did u not just program |A::A():...b_(x){};|? where the argument to the
+|b_| variable in the list is a regular ctor declaration?
+U got it, this is circa code of 1998 where the \CPLUSPLUS/ compilers were not so good
+and that was the only way to initialize the variable in the list.
+Now 3 flavors of MS \CPLUSPLUS/ compilers, 1 old Alpha compiler, and Apple's compiler
+morphed the code seeing that a temporary variable is not needed
+and respected the old way of compiling.
+Alas the vagaries of the past the present the future.\fbreak
+20 July, 2006\fbreak
+
+@*2 Rule reuse but forgot to remove the ``AD'' from each grammar.\fbreak
+For speed, the mallocing of rules is too expensive so i calculated its re-use count.
+See {\bf |rules_use_cnt|} grammar on how it's done.
+The push / pop of the parse stack's symbols having each rule's ``AD'' auto delete attribute
+turned on got deleted every time it was popped. Consequence: any reference to the rule
+became a ghost reference.\fbreak
+\fbreak
+Solution: just remove the attribute declaration from each rule within their grammars.\fbreak
+Nov. 2007\fbreak
+
+@*2 Recursion on ``Procedure call'' of a thread.\fbreak
+Ugly things happen as the thread's cloned ``procedure call'' is {\bf not re-entrant}
+due to ctor / run / dtor overhead. Its fsm table is global and can
+only support 1 call at a time.
+This is a design decision for speed reasons.
+Needed is a recursion detection table |Parallel_thread_proc_call_table|
+to register call attempts for all threads.
+When called as a procedure turn on the use and remove the registered use after
+it has return
+from the call. This table is mutex protected unfortunately but necessary due to parallelism.
+\fbreak
+Apr. 2008\fbreak
+
+@*2 VMS misqueue on Mutex Recursion and Pthread stacksize.\fbreak
+Ugly things happen as the thread is activated. The pthread's default stack size
+|pthread_attr_t| variable does not set the stack size properly.
+causes the pthread library to throw up. So explicitly set it
+using the |pthread_attr_setstacksize| procedure before the pthread create.
+
+The second more serious issue is its detection of what it thinks is
+recursion on a single use mutex. It's reaction is down right violent ---
+spews of core dump and attempts at calming the hoard with
+ information messages of potential inaccuracies.
+This reaction is illussionary as
+this is not so. Each thread or its singular procedure partner
+has their own private copy for
+ the control message Mutex and Conditional variables.
+This was tested on Unix out-of-the-box Pthread library variants (Sun and Apple)
+without this hacking or
+is it gagging?
+So just remove the ``procedure call'' optimization for VMS and make it a
+thread call.
+\fbreak
+Aug. 2008\fbreak
+
+@*2 \QUEshift{} used instead of \ALLshift{} making it a perpetual motion machine.\fbreak
+Guard against \QUEshift as it does not advance |get_next_token|
+ so the parse keeps on going dancing at the same token spot: this is perpetual motion machine
+--- swap file eventually fills up and Boom Ca Boom.
+Sometimes the grammar writer is using improperly the \QUEshift instead of an epsilon rule.
+So how to detect this?
+Well if the |has_questionable_shift_occured__| has been previous set,
+then stop parsing instead of
+aborting. Should i message or not to message that is the question.
+I'll message the errant grammar and parse stack state where the problem was detected.
+The grammar writer
+should use the \ALLshift{} symbol.\fbreak
+Patched |@<try various shift types. if executed go to
+ process next token in token stream@>|.\fbreak
+Sept. 2008\fbreak
+
+@*2 Rule reuse Code emmission did not store the newed rule in its recycle table.\fbreak
+I did not store the newed grammar rule in its recycle table.
+This was brought out using a marvellous tool call dtrace from Sun.
+Well the thought was right but my details were wrong --- like the kid who
+runs ahead in thought while learning to crawl.
+
+The other part to rule recycling is making sure local
+grammar rule's variables are re-initialized
+as the past dribbles will effect the present.
+Speak clearly boy! Example, in |la_expr| grammar |Ra| and |Rt| rules
+contain the local set |fset_| variable.
+This holds the terminal in the lookahead expression
+so that set ``union and difference'' expressions can take place.
+Having a recycled rule with this set not cleared will contain its past history.
+This is the cost of an optimization: 25\% improvement so be forewarned.\fbreak
+\fbreak
+Dec. 2008\fbreak
+
+@*2 String template container did not set the |eof_pos_| variable and random boom.\fbreak
+The sky is falling. As the string container didn't set this variable,
+random droppings other than EOF meant that at least a first read on the
+string container would take place.
+Well u guessed it.
+As it was never read the eof symbol was not set and so nil pointer
+on the returned token.
+At least the file container set |eof_pos_| properly.
+Alas just sloppiness Dave and a swill to u.
+\fbreak
+Mar. 2009\fbreak
+
+@*2 |TOKEN_GAGGLE|'s virtual table access [] operator not respected.\fbreak
+This showed up in an xml/message dispatcher system written for VMS/Alpha.
+The ``Error queue'' being parsed was getting an array out-of-bounds error when the
+end-of-token stream was reached.
+THE |TOKEN_GAGGLE|'S ACCESS [] PROTECTS AGAINST THIS.
+But the internal container used aka STL's array container was being called directly.
+This problem only occured in c++ VMS/Alpha port. Sun, Apple, Linux flavours all worked
+by respecting the virtual table of the abstracted |tok_base|.
+So tighter checks within the |get_next_token| Parse method is done ensuring the |current_token__|
+is always set on an empty container or any of the overflow checks.
+
+Originally |current_token__| was set only when the overflow was first detected.
+As a post evaluation, the Parser ``Error queue'' which was originally declared as a |TOKEN_GAGGLE|
+is now declared as an abstract |tok_base| just
+like the other containers Supplier, Producer, and Recycle bin.
+This allows the language designer to
+use a different Error container like trees.
+In conclusion, though not a bug but a porting weakness, this modification makes the Parser
+more flexible.
+So Dave your fixed Error thoughts are virtualized.
+\fbreak
+Oct. 2010\fbreak
+
+@*2 Procedure calls in VMS revisited: thread versus procedure.\fbreak
+Revisited the optimization on procedure calling of grammars
+when only 1 grammar is to be called.
+This is a major improvement over thread calls.
+Well this is the scoop.
+Make sure that the stack paramater to the VMS linker is adequate or
+not fun abortive things happen within a called thread that u know works.
+This happened to a command that was parsed properly using the same called thead
+while the other command to be parsed aborted.
+
+Second, make sure thare are no overruns in a std type container happening.
+Somehow VMS only has a problem guarding against an overrun which is properly
+guarded against within \O2's library.
+For now the code in |@<request threads to work@>|
+has renamed the conditional variable |VMS_| to |VMS111__| so that it is not used.
+I'm keeping it there as a reminder to possible future reguritations.
+\fbreak
+Nov. 2010\fbreak
+
+@*2 Size of tree container --- number of items in container.\fbreak
+What is the size of the tree container?
+It depends whether its end-of-tree has been reached.
+So put a conditional test in its size method: return |MAX_UINT|
+if tree walk is still in process.
+End-of-tree reached then return the size of its internal container.
+\fbreak
+Feb. 2011\fbreak
+
+@*2 |Find_reduce_entry| current token not found.\fbreak
+My to my stupidity. The searching for the subrule reducing was optimized.
+Not to get into my stupidity but the meta symbols were
+found before the next subrule's LA set was searched.
+The correct search is 2.5 passes --- find the current tok against the potential subrules.
+Followed by meta symbols against a new round of potental subrules list , and
+then the last gasp \QUEshift is search if the previous passes not met.
+\fbreak
+Nov. 2012\fbreak
+
+@*2 Date macro use --- Apple LLVM \Cpp{} compiler.\fbreak
+Version 5.1 (clang-503.0.40) (based on LLVM 3.4svn).\fbreak
+This is caused when the version literal per \O2linker{} and \O2{} is built.
+See ``runtime\_env.w'' file for details.
+Must split lines or delimit by spaces when concatenating
+the macro '\_\_DATE\_\_' by bounded literals.\fbreak
+Example: "xxx" \_\_DATE\_\_ "yyy" //works cuz spaces\fbreak
+Without the spaces the compiler thinks its a template mistake with this error:\fbreak
+No matching literal operator for call to 'operator"' \_\_DATE\_\_
+with arguments of types 'const char*' and 'unsigned long', and no matching literal operator template.
+\fbreak
+Apr. 2014\fbreak
+
+@*2 Eog symbol not gpsing on external file and internal line no.\fbreak
+Here's the stik. I was playing around with the Pager\_1.lex grammar.
+To make it interesting, the T vocabulary files were changed.
+By mistake the Error T vocabulary file did not have a close off brace: $\}$.
+So the right error was thrown but the file co-ordinates were 0 and did not
+reference the external file!
+
+Looking at the |tok_can<std::ifstream>| container, the end-of-file indicator
+was passing the appropriate file references.
+So what the heck?
+Well to the rescue, yacco2::YACCO2\_T\_\_ tracing of Tes.
+In all the gory details and low and behold the ``eog'' had no external references.
+Well the culprit was |map_char_to_raw_char_sym| that draws from
+its premade raw character pool and makes a T symbol. It
+was passed the appropriate external file's co-ordinates but...
+
+To quicken raw character mapping to a |CAbs_lr1_sym| symbol
+a premade |PTR_LR1_eog| symbol was just
+returned without setting the passed-in file co-ordinates. \fbreak
+\fbreak
+Man Dave you sure r a winner!
+\fbreak
+May 2014\fbreak
+
+@*2 Cleaned up Arbitrator's |YACCO2_AR__| tracings.\fbreak
+2 items corrected:\fbreak
+\ptindent{1) misplaced |@<release trace mu@>;| in |TAR_2| walking accept-queue. The 5 computer nerds waiting}
+\ptindent{2) commented out for |TAR_1 - 3| macros use of |trace_parser_env| }
+\fbreak
+Oct 2014\fbreak
+
+
+
+
+
+
+
+
+
diff --git a/web/yacco2/library/constants.w b/web/yacco2/library/constants.w
new file mode 100644
index 0000000000..5fda11f9e6
--- /dev/null
+++ b/web/yacco2/library/constants.w
@@ -0,0 +1,52 @@
+@q file: constants.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Constant definitions.\fbreak
+These are used by a hodge-podge of functionalities.
+The majority of the constants are enumerates:
+|LR1_Questionable_operator| to
+|LR1_Procedure_call_operator|are the lr constants.
+Some individual definitions below have comments relating their grammar's logical symbol.
+I did this as a memory jog to read the grammars.
+For example, to introduce parallelism into the grammar, the \PARshift symbol
+is used.
+These constants allow one to efficiently test against an
+abstract symbol for its appropriate identity.
+Why test its identity?: to cast to a concrete object or to do conditional processing.
+Why not use \CPLUSPLUS/ cast type operators --- just too expensive in space and time!
+This is not a complaint but expressed from experience
+with Yacco2's environment ---
+lots and lots of symbols and type cast operators lead to `fat city'.
+
+All grammar symbols (terminals and rules) have an emitted enumeration definition.
+The reason for these hardwired definitions is that they are
+also referenced within the Yacco2 compiler/compiler before I bootstrapped
+Yacco2 to compile its own grammars.
+These symbols will be explained when the code is developed.
+Possibly as I recast Yacco2 into |cweb|, these constants could be dropped
+for their generated look-alikes.
+Until then, they have earned their keep.
+
+@ Enumerates. Events.
+@d FORCE_STK_TRACE 0
+@d COND_STK_TRACE 1
+@d Accept_parallel_parse 1
+@d Shutdown 2
+@d LR1_Questionable_operator 0 // \QUEshift
+@d LR1_Eog 1
+@d LR1_Eolr 2
+@d LR1_Parallel_operator 3 // \PARshift
+@d LR1_Reduce_operator 4 // \REDshift
+@d LR1_Invisible_shift_operator 5 // \INVshift
+@d LR1_All_shift_operator 6 // \ALLshift
+@d LR1_FSET_transience_operator 7 // \TRAshift
+@d LR1_Procedure_call_operator 7 // \PROCshift
+
+@ The only reason for this section is to stop the appended slash to the last |cweb| macro above.
+This is a slight deviation in |cweb| code emission.
+Another abnormality is the use of the word ``error'' within \CPLUSPLUS/ code: eg. enums.
+|cweb| has a slight clearing of the throat. So, just rename ``error'' to some other form: err ...
diff --git a/web/yacco2/library/constraints.w b/web/yacco2/library/constraints.w
new file mode 100644
index 0000000000..df77e1a04b
--- /dev/null
+++ b/web/yacco2/library/constraints.w
@@ -0,0 +1,258 @@
+@q file: constraints.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Constraints. Validation code snippets.\fbreak
+This is the source collector of all constraints used across Yacco2's code.
+Why one place insead of keeping the code close to the routines using them?
+Good question. Code comprehension demands that the code be within the
+the reading periphery of the programmer. But, code clutter can remove
+this advantage to understanding. |cweb| provides a better way to do it.
+You can still use the code clutter approach but it provides a better way.
+Just describe the code block with intention and reference it.
+No need to keep the code near by!
+Gardening chores are tidier, one-place-only
+to correct and improve.
+
+@ Invalid use of \QUEshift{} instead of \ALLshift{} symbol.
+@<Invalid \QUEshift instead of \ALLshift use@>=
+@.Err Invalid \QUEshift{} instead of \ALLshift@>
+ char a[BUFFER_SIZE];
+ yacco2::KCHARP msg =
+ "Error - Bad use of |?| instead of |+| symbol or epsilon subrule. "
+ "Correct %s grammar, parse state: %i. Cannot continue parsing.";
+ sprintf(a,msg,fsm_tbl__->id__,parse_stack__.top__->state__->state_no__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+
+@ Validate any token for parsing.
+@<Validate any token for parsing@>=
+ if (current_token__ == 0){
+@.Err current token ptr zero. Cann...@>
+ yacco2::KCHARP msg = "Error - current token ptr zero. Cannot continue parsing.";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+}
+
+@ Validate Line no parameter.
+@<Validate Line no parameter@>=
+ if (Line_no < 1){@/
+@.Err Line\_no not 1 or greater@>
+ yacco2::KCHARP msg = "Error - Line_no not 1 or greater";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+@ Validate Pos parameter.
+@<Validate Pos parameter@>=
+ if (Pos < 1){@/
+@.Err Pos not 1 or greater@>
+ yacco2::KCHARP msg = "Error - Pos not 1 or greater";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+@ Validate Pos in line parameter.
+@<Validate Pos in line parameter@>=
+ if (Pos_in_line < 1){@/
+@.Err Pos\_in\_line not 1 or great...@>
+ yacco2::KCHARP msg = "Error - Pos_in_line not 1 or greater";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+@ Validate File no parameter.
+@<Validate File no parameter@>=
+ if (File_no < 1){@/
+@.Err File\_no not 1 or greater@>
+ yacco2::KCHARP msg = "Error - File_no not 1 or greater";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate any symbol for co-ordinate setting to relate to?.
+@<Validate any symbol for co-ordinate setting to relate to?@>=
+ if (pt == 0){@/
+@.Err no supplier symbol found to ...@>;
+ yacco2::KCHARP msg = "Error - no supplier symbol found to relate to for co-ordinate setting";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate parser's finite state table.
+@<Validate parser's finite state table@>=
+ if (parser->fsm_tbl__ == 0){@/
+@.Err parser's finite state table ...@>
+ yacco2::KCHARP msg = "Error - parser's finite state table is zero ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate that parser stack is not empty.
+@<Validate that parser stack is not empty@>=
+ if (parser->parse_stack__.top_sub__ < 1) {
+@.Err parser's stack is empty@>
+ yacco2::KCHARP msg = "Error - parser's stack is empty";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate if parser's supplier exists.
+@<Validate if parser's supplier exists@>=
+ if(token_supplier__ == 0){@/
+@.Err parser's supplier is zero ptr@>
+ yacco2::KCHARP msg = "Error - parser's supplier is zero ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate if subscript within supplier's bnds.
+@<Validate if subscript within supplier's bnds@>=
+ if (Pos > token_supplier__->size()){@/
+@.Err Pos out of bounds against su...@>
+ yacco2::KCHARP msg = "Error - Pos out of bounds against supplier";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+
+@ Validate subscript not |<=| 0.
+The subscript must be a positive integer.
+This condition is now controlled by |Token_start_pos| macro.
+The original subscript is relative to 0. My preference is relative to 1.
+So, provide a mechanism to change in one place so that these conditions
+can be experimented with.
+@<Validate subscript not |<=| 0@>=
+ if (Pos < Token_start_pos){
+ char a[BUFFER_SIZE];
+@.Err Subcript Pos value < ...@>
+ yacco2::KCHARP msg = "Error - Subcript Pos value < %i --- out of bounds";
+ sprintf(a,msg,Token_start_pos);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+
+
+@ Validate parse stack number of removal items.
+@<Validate parse stack number of removal items@>=
+ if (No_to_remove < 0){
+@.Err parse stack number of remova...@>
+ yacco2::KCHARP msg = "Error - parse stack number of removal items < 0";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate parse stack removal for underflow.
+@< Validate parse stack removal for underflow@>=
+ if(parse_stack__.top_sub__ < 1) {
+ char a[BUFFER_SIZE];
+@.Err FSM id: ... parse stack empt...@>
+ yacco2::KCHARP msg =
+ "FSM id: %s parse stack empty!";
+ sprintf(a,msg,fsm_tbl__->id__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+ if (No_to_remove > MAX_LR_STK_ITEMS){
+ char a[BUFFER_SIZE];
+@.Err Underflow FSM id: ...@>
+ yacco2::KCHARP msg =
+ "Error - Underflow FSM id: %s on parse stack size:%i removal request: %i ";
+ sprintf(a,msg,fsm_tbl__->id__,MAX_LR_STK_ITEMS,No_to_remove);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+
+@ Validate error queue.
+@<Validate error queue@>=
+ if (error_queue__ == 0){
+@.Err Trying to add to Parser erro...@>
+ yacco2::KCHARP msg =
+ "Error - Trying to add to Parser error_queue__ which is zero ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Error shift symbol not fnd in fsm table.\fbreak
+The reason for not using a Error type T is that
+this is below the language being parsed.
+It would force having a pre-canned error terminal
+in the error class of the language being defined:
+ lr constants and rc terminals
+are enough cement.
+That's the short of it.
+@<Error shift symbol not fnd in fsm table@>=
+ if(se == 0){
+ char a[BUFFER_SIZE];
+@.Err Can't find symbol to shift i...@>
+ yacco2::KCHARP msg =
+ "Error - Can't find symbol to shift in FSM id: %s state: %i sym-id: %i literal: %s";
+ CAbs_lr1_sym* xxx = current_token();
+ sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__,xxx->enumerated_id(),xxx->id());
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ yacco2::KCHARP msg2 =
+ "T co-ordinates: file: %s GPS LINE: %i GPS CHR POS: %i";
+ sprintf(a,msg2
+ ,xxx->tok_co_ords__.external_file_id__ != MAX_USINT?
+ yacco2::FILE_TBL__[xxx->tok_co_ords__.external_file_id__].c_str()
+ :" No external file"
+ ,xxx->tok_co_ords__.line_no__
+ ,xxx->tok_co_ords__.pos_in_line__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate if rule shift symbol in fsm table.
+@<Validate if rule shift symbol in fsm table@>=
+ if(se == 0){
+ char a[BUFFER_SIZE];
+@.Err Cant find rule shift in stat...@>
+ yacco2::KCHARP msg =
+ "Error - Cant find rule shift in state FSM id: %s state: %i rule id: %i ";
+ sprintf(a,msg,fsm_tbl__->id__,parse_stack__.top__->state__->state_no__
+ ,(*rule_rec)->rule_->enumerated_id__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Validate reduce entry.
+@<Validate reduce entry@>=
+ if(re == 0){
+ char a[BUFFER_SIZE];
+@.Err Cant find parallel sym reduc...@>
+ yacco2::KCHARP msg =
+ "Error - Cant find parallel sym reduce in FSM id: %s state: %i token: %s subs: %i ";
+ sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__
+ ,current_token__->id__,current_token_pos__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+@ Validate accept message.
+@< Validate accept message@>=
+ if(arbitrated_token__->accept_token_pos__ == arbitrated_token__->la_token_pos__){
+@.Err Parallel token boundry same ...@>
+ yacco2::KCHARP msg =
+ "Error - Parallel token boundry same as LA token boundry";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+
+@ Error bad character mapping.
+@<Error bad character mapping@>=
+ char a[BUFFER_SIZE];
+@.Err Bad char mapping chr value: ...@>
+ yacco2::KCHARP msg =
+ "Error - Bad char mapping chr value: %i";
+ sprintf(a,msg,Char);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+
+@ Error no more raw character storage.
+@<Error no more raw character storage@>=
+ char a[BUFFER_SIZE];
+@.Err Sorry run out of raw charact...@>
+ yacco2::KCHARP msg =
+ "Error - Sorry run out of raw character storage: need to regen Yacco2: %i";
+ sprintf(a,msg,SIZE_RC_MALLOC);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
diff --git a/web/yacco2/library/enum.w b/web/yacco2/library/enum.w
new file mode 100644
index 0000000000..9e72138b9c
--- /dev/null
+++ b/web/yacco2/library/enum.w
@@ -0,0 +1,37 @@
+@q file: enum.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Enumeration of Alphabets --- Terminals and Rules.
+@ Enumeration.\fbreak
+The terminal alphabet is represented by the positive integers
+starting at zero.
+Lr constant terminals (meta terminals) are indicators of parsing situations
+like end-of-token stream reached,
+parallel parsing to take place, to different wild type shifts.
+None of these meta-terminals are found within the input language being parsed.
+
+Raw characters represent the mapping from the 8 bit ASCII character into its
+raw character terminal.
+Both the meta and raw characters terminals are fixed and will never expand.
+They are therefore constant in their positions.
+Error terminals are internally generated situations produced by the parsing grammars
+manufactured by the grammar writer. They indicate the appropriate faulty situation detected
+and will grow in numbers as new error situations are developed.
+Regular terminals are composites that get created by the grammars from streams of other
+raw character terminals or composite terminals.
+They are evolutionary and come into existance from various passes made on
+the token streams: lexical to syntactic. Consequently, both errors and regular terminals
+are variable in their numbers as the grammar system is being developed.\
+
+To help speed up bottom-up parsing, the enumerate value of
+each terminal is computed to its
+compressed set key.
+This will be used in the various set operations like reduce, shift, and accept against the
+lookahead sets. The following |Set handling| section describes the details.
+
+
diff --git a/web/yacco2/library/errhdling.w b/web/yacco2/library/errhdling.w
new file mode 100644
index 0000000000..ff1a706775
--- /dev/null
+++ b/web/yacco2/library/errhdling.w
@@ -0,0 +1,263 @@
+@q file: errhdling.w @>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Error detection and handling.\fbreak
+Let's review how this can be done.
+Within a grammar's production there are points where an invalid symbol
+could arrive.
+If one does not program for it, the parser will go kapout.
+So what are the options open to a grammar writer?
+First there is a ``{\bf failed}'' directive in the ``fsm'' construct
+that will field aborted parses.
+It is the last chance to deal with errors in a rather
+insensitive way.
+If there are many contexts within the grammar that could go
+wrong then this approach is too insensitive to be specific
+about the context's
+error point.
+Though the errant current token is available
+to report on, what was the inapproproiate context that threw it?
+Well u could try to figure it out from the remnants on the parse stack.
+
+To deal with specific error points, the \QUEshift{}, \ALLshift{},
+and \INVshift{} symbols can catch
+errant tokens, or one can be very specific in specifiying the errant T to catch.
+This last option can be very daunting when one has 500+ T to deal with
+and lets be honest not really appropriate.
+This was why i introduced the meta-terminals \QUEshift{} and \ALLshift.
+To catch a rogue and associate syntax directed code to handle the situation,
+these symbols MUST be within prefix subrules where they are the
+last symbol in the subrule's symbol string.
+What does this mean?
+Having a string of symbols where these catch T symbols are burried
+ within a larger symbol string
+means the subrule's containing these symbols
+will not be executed as its sentence has not been
+completely recognized.
+For example:\fbreak
+\INDENT{.4in}{\subrule{} a \QUEshift{} b --- will not handle the error
+at the \QUEshift{} point}
+\INDENT{.4in}{\subrule{} a Rqueshift b --- will catch the problem}
+\INDENT{.7in}{Rule Rqueshift \subrule{} \QUEshift{}...}
+\INDENT{.9in}{will catch the error with appropriate syntax directed code directive }
+\fbreak
+Caution: The ranking of meta-terminal shifts: 1 and a
+2 and a 3 ---\QUEshift{}, \INVshift{}, \ALLshift{}\fbreak
+The \QUEshift{} symbol is checked first for its presence within the current parse state
+followed by the \INVshift{} symbol as it is normally used to
+get out of a quasi-ambigous parse. The \ALLshift{} aka wild shifter
+is the last to be checked in the parse state.
+It is their presence within the parse state that activates their use.
+The \QUEshift{} is an error statement and was my reason to put it at the head of the
+conditional shifts.
+So watch your shifts as this could catch u like me.
+Remove 1 of the 2 competing shift symbols: \ALLshift or \INVshift. For the moment i
+have not issued an error message on this situation.
+@^ To do error message conditional shift ranking both \ALLshift{} and \INVshift{} in state@>
+@^ To do error message conditional shift \INVshift{} takes precedence over \ALLshift{}@>
+\fbreak
+\fbreak
+Dictate no 1: Last symbol in subrule's symbol string must be the catcher in the Error\fbreak
+Make sure your error catch point has \QUEshift{} or \ALLshift{} as its
+last symbol within the symbol string and let your syntax directed code
+decree the error escape route to be taken.
+Yeah that's fine but what if the symbol string to be recognized
+contains many catch points?
+Just make each symbol string segment a separate rule with the error code catch point
+being the last symbol in the string competing with its legitimate accepted T symbols and
+use these rules within another rule's subrule as part of its symbol string to be recognized!
+The lr algorithm is a collection of various symbol string configurations
+per state
+in various accepted T points along their parsing.
+So by transitive closure these prefix rules get included in the state to
+be
+recognized along with the other similar prefix symbols.
+When the prefix rule's ```rhs'' boundary is recognized, depending
+on the error catcher used, the reduce will fire either in good form or
+as an error.
+\fbreak
+\fbreak
+What to do when an error is detected?\fbreak
+For now i have not thought out error correction strategies though i am marginally
+aware of the backtracking techniques.
+I will now discuss current programming options open to the grammar writer.
+Depending on the context, the thread could abort which is the most drastic.
+This takes place when no error catching is programmed
+and \O2 issues a runtime message on the aborted grammar with its run stack goodies.
+This might be okay to get things going but isn't too appropriate within a
+production environment.
+Well the catch points have 2 programming options available:\fbreak
+\INDENT{.4in}{1) return an error token back to the calling grammar
+and stop parsing of the active grammar}
+\INDENT{.4in}{2) abort the parse and field it using the ``failed''
+directive to return an error T}
+Point 1 should be your main course of action.
+That is both macros |RSVP| and |RSVP_FSM| return a T back to the calling
+grammar through the accept queue facility
+as if the parse was successfull. This is what point 2 does using the |RSVP_FSM| macro
+as its execution is within the ``fsm'' context of the grammar and not the reducing rule.
+The calling grammar can then field this returned T specifically
+or use the two meta-terminal \QUEshift{} or \ALLshift{} to deal with them.
+They are allowed in any subrule symbol string context:
+thread calls where its returned T can be one of these symbols, and the
+regular subrule symbol string.
+\fbreak
+\fbreak
+Pinpointing where the error occured in the source file\fbreak
+Built into \O2 is the facility to tag each T with its approriate source file's GPS ---
+filename, line number, and character position. These co-ordinates
+are used to print out the errant source line
+ with an arrow underlining the errant source token.
+So when an error T is created, use of the |set_rc| and variants allows one to pinpoint the
+error T against the GPS's source file T.
+Have a read on ``Abstract symbol class for all symbols'' --- |CAbs_lr1_sym|.
+\fbreak
+\fbreak
+Some subtleties on making the errant T fire off the error
+catching syntact directed code.\fbreak
+Let me pose a question: What happens when the errant T is not in the lookahead set
+to reduce that subrule? Well it will not get executed! Ugh. This is just
+not acceptable Dave.
+Well to the rescue is the \QUEshift{} symbol.
+It is not in the token stream but represents an errant situation.
+So where is this errant T placed?
+When one enters the subrule's syntact directed code segment,
+all its subrule's elements have been shifted onto the parse stack
+where this last errant symbol is represented by \QUEshift{}.
+But the \QUEshift{} symbol {\bf does not advance past the errant T}
+ as in regular parsing.
+So what does this mean?
+The current errant T is also the lookahead symbol for the reduction.
+But wait what if this T is not in the lookahead set to reduce this subrule.
+Well i made this type of reduce a lr(0) context: no lookahead symbol required
+to reduce the subrule.
+
+To get at the current elements on the parse stack,
+\O2 emits within each subrule's c++ code the stack frame with each
+subrule's symbol string assigned to ``|sf->pxx__|'' where xx is the symbol's
+string position.
+This is the difference to \ALLshift: \ALLshift{} depends on the lookahead set to reduce.
+Now what then is the advantage to using \ALLshift?
+One can test its under-its-hood T's enumerate value and then take error action or
+stop use of the \ALLshift{} facility that allows the grammar
+to continue parsing up to the ``start rule''.
+As it's a wild symbol shifter, it really lowers the grammar's parse tables sizes
+and eases the grammar writer's typing.
+\fbreak
+\fbreak
+Dictate no 2: Games on returning the new lookahead T back to the calling grammar\fbreak
+U can play games with resetting the new lookahead T that is passed back
+ with its |RSVP| T companion within the accept queue.
+This is what happens when
+just 1 T is returned: the lookahead T is the parse stream continue point
+and also its contents to set the calling parser's current token to continue with.
+As an aside why use the returned lookahead's T contents
+instead of just resetting the continue T from the token stream's
+container
+using the lookahead token position?
+Well u could also remap the current token into another T type
+due to say a symbol table remapping --- like Pascal and its ``const-id'', ''function-id''
+as described in the railroad diagrams of ``The Pascal Reference Manual''.
+The remapping facility is open for use via the ``Table lookup functor'' facility.
+The following methods adjust the parser's token stream:\fbreak
+\INDENT{.4in}{|override_current_token_pos(symbol,position)|}
+\INDENT{.4in}{|override_current_token(symbol)|}
+\INDENT{.4in}{|reset_current_token(position)|}
+
+In a dual competing threads situation
+where each grammar have accepted their
+parse and are returning their booty to the calling grammar,
+the calling grammar must use arbitration to select the T gift and
+sets its parse stream accordingly and the balance in the ``accept queue''
+are so-to-speak thrown away.
+Of course the {\bf arbitration} facility
+is programmed by the compiler writer when 2 or more successfull threads are
+returning their booty back to the calling grammar.
+Normally this does not occur as there is just one thread that will
+report its findings but this city is built on rock and nondeterminism.
+So a subset / superset competition, or an accept and error combo
+ is quite acceptable and for the arbitrator's
+choosing. Forgotten arbitration code will be regurgitated by the \O2 library
+in message form
+for your fixing.
+
+The one caveat to watch for is: What is the current
+token and its position in the parse stream
+when it enters the subrule's syntax directed code?
+\QUEshift{} still has the errant T as its current T and to reset back
+to the previous T u only subtract 1 from the current token position.
+\ALLshift{} demands 2 be subtracted as the current T is the new lookahead T.
+So u've been warned.
+\fbreak
+\fbreak
+Some comments on stopping a parse by syntax directed code:\fbreak
+Apart from the don't do anything approach, the grammar writer can talk to the parser
+and dictate
+his intentions. The 2 methods open are abort-the-parse or stop-parsing.
+The abort-the-parse action allows the thread to stop without any T returned to
+the caller grammar
+or
+ use the {\bf failed} directive to last-chance return an error T back to the caller.
+The stop-parsing approach returns a T back to the user but does not want
+to continue the complete parse through to its ``start rule''.
+It just short-circuits the overall grammar's parsing action.
+Remember that if the parse has been successfull ``why complete the parsing
+thru to start-rule?''.
+Depending on your local grammar logic this might be the most expedient way to program.
+Here are the 2 methods to do this:\fbreak
+\INDENT{.4in}{|set_abort_parse(true)|}
+\INDENT{.4in}{|set_stop_parse(true)|}
+What about the reducing of this subrule?
+Well it occurs, as entry into the syntax directed code that
+contains the grammar writer's code to execute these statements
+are kosher reducing conditions.
+So why the ``abort-parse'' versus ``stop-parse'' difference.
+``stop-parse'' should contain the |RSVP| macro that
+enters the returned T into the calling grammar's ``accept-queue''.
+The ``abort-parse'' normally does not contain this action.
+\fbreak
+\fbreak
+Warning no 3: if \ALLshift{} being used, don't forget to turn it off.\fbreak
+This symbol is voracious: eats and eats everything in its path.
+So u can arrive at trying to eat the ``end-of-the-parse-stream'' ``|eog|'' symbol
+forever...
+\O2 guards against this but is rather abrupt in its message to the grammar writer
+and stopping
+of the parse immediately.
+So u'll see in some the suggested grammars |set_use_all_shift_off| method being
+called to get out of this perpetual motion and possiblely continue up the parse chain to the
+``start rule''.
+Here is a list of some \O2 grammars having error handling and premature
+ stopping of a parse to learn from.
+\INDENT{.4in}{1) |o2_lcl_opts.lex| and called thread |o2_lcl_opt.lex| --- command line parser}
+\INDENT{.4in}{2) |la_express.lex| --- |set_abort_parse(true)| thread's la expression parser}
+\INDENT{.4in}{3) |c_string.lex| --- semantic example stopping a parse and programmed fsa}
+Point 1 gives an example of how the ``failed'' directive in the called thread |o2_lcl_opt.lex|
+is programmed and ``|set_stop_parse(true)|'' use in the calling grammar |o2_lcl_opts.lex|
+of a monolitic grammar. |pass3.lex| and point 2 give more examples on monolithic use
+to aborting. Point 3 also shows programming use of the ``|set_abort_parse(true)|''.
+For the really curious, why not use the find/grep/xargs combo to settle your appetite against
+\O2's grammars.
+\fbreak
+\fbreak
+The last word, amen and happy parsing.\fbreak
+Remember that the normal flow of errors should be placed into the ``error queue'' and
+then post processed to report its findings.
+|ADD_TOKEN_TO_ERROR_QUEUE| and its variant |FSM_ADD_TOKEN_TO_ERROR_QUEUE|
+allow u to do this. |pass3.lex| gives lots of examples and \O2's program shows its
+way of post-verbing the troubles.
+And with all this error stutter, each grammar does a post-execution grammar
+cleanup on current parsing
+for the next round of their calling. Again what does this mean?
+A semi-abort was done just to stop its execution leaving the grammar in an abort state.
+But
+each grammar does a resetting to a clean slate for its next round of
+calling either by ``procedure call'' if no nesting calls of itself is occuring
+or by the heavy thread call.
+Hygiene is important so the cat washes itself for the next eating.
+
diff --git a/web/yacco2/library/fsm.w b/web/yacco2/library/fsm.w
new file mode 100644
index 0000000000..37fa4abcd0
--- /dev/null
+++ b/web/yacco2/library/fsm.w
@@ -0,0 +1,233 @@
+@q file: fsm.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Finite state machine definition.
+@*2 |CAbs_fsm|.\fbreak
+It provides the basis for all grammar `fsm' definitions.
+Yacco2 generates a specific `fsm' per grammar derived from |CAbs_fsm|.
+The first 5 parameters are the grammar attributes extracted from the `fsm' construct
+of the grammar.
+Parameters |Gened_date| thru to |Start_state|
+are specifics from the compiling of the grammar.
+For-your-information, the date and time as to when the grammar was compiled is
+passed by |Gened_date|.
+
+|Start_state| parameter is the object address.
+|Start_state| is the ``S'' in your formal finite automaton definition.
+@<Struct...@>+=
+class CAbs_fsm{
+ public:@/
+ virtual void op()=0;
+ virtual bool failed()=0;
+ yacco2::KCHARP id();
+ yacco2::KCHARP version();
+ yacco2::KCHARP date();
+ bool debug();
+ yacco2::KCHARP comments();
+ yacco2::KCHARP gened_date();
+ yacco2::State* start_state();
+ virtual ~CAbs_fsm();
+ virtual void reduce_rhs_of_rule@/
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule)=0;@/
+ yacco2::Parser* parser();
+ void parser(yacco2::Parser& A);
+ void find_a_recycled_rule
+ (Per_rule_s_reuse_table* Reuse_rule_table
+ ,Rule_s_reuse_entry** Reuse_rule_entry);
+ void recycle_rule(Rule_s_reuse_entry* Rule_to_recycle);
+ protected:@/
+ CAbs_fsm(yacco2::KCHARP Id@/
+ ,yacco2::KCHARP Version@/
+ ,yacco2::KCHARP Date@/
+ ,bool Debug@/
+ ,yacco2::KCHARP Comments@/
+ ,yacco2::KCHARP Gened_date@/
+ ,yacco2::State& Start_state@/
+ );@/
+ public:@/
+ yacco2::KCHARP id__;@/
+ yacco2::KCHARP version__;@/
+ yacco2::KCHARP date__;@/
+ bool debug__;@/
+ yacco2::KCHARP comments__;@/
+ yacco2::KCHARP gened_date__;@/
+ yacco2::State* start_state__;@/
+ yacco2::Parser* parser__;@/
+};@/
+@*3 Trapping of Premature Parsing Failures --- failed directive.\fbreak
+The ``failed'' directive within the ``fsm'' construct
+allows one to deal with premature aborts within a grammar.
+It makes it reeeeeeeal easy to trap errors instead
+of specifically trying to program within the grammar each potential
+abort position per T shift.
+It's a ``catch-all'' last chance to provide an error response back
+from a threaded grammar to their calling grammars,
+ or to place an error within the error queue of a
+monolithic grammar.
+A failed example:\fbreak
+\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/fsm_failed.txt"}
+\fbreak
+\fbreak
+
+@** Finite state machine implementation.
+@*2 |CAbs_fsm| and |~CAbs_fsm|.\fbreak
+Constructor and destructor of the finite state class.
+@<accrue yacco2 code@>=
+yacco2::
+CAbs_fsm::
+CAbs_fsm@/
+ (yacco2::KCHARP Id@/
+ ,yacco2::KCHARP Version@/
+ ,yacco2::KCHARP Date@/
+ ,bool Debug@/
+ ,yacco2::KCHARP Comments@/
+ ,yacco2::KCHARP Gened_date@/
+ ,yacco2::State& Start_state)@/
+ :id__(Id)
+ ,version__(Version)
+ ,date__(Date)
+ ,gened_date__(Gened_date)
+ ,debug__(Debug)
+ ,comments__(Comments)
+ ,start_state__(&Start_state)
+ ,parser__(0)
+{}
+
+yacco2::
+CAbs_fsm::
+~CAbs_fsm(){}
+
+@*2 Fsm implementation.
+@<accrue yacco2 code@>=
+
+yacco2::State*
+yacco2::
+CAbs_fsm::
+start_state(){
+ return start_state__;
+}
+
+yacco2::Parser*
+yacco2::
+CAbs_fsm::
+parser(){
+ return parser__;
+}
+
+void
+yacco2::
+CAbs_fsm::
+parser(yacco2::Parser& A){
+ parser__ = &A;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+gened_date(){
+ return gened_date__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+id(){
+ return id__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+version(){
+ return version__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+date(){
+ return date__;
+}
+
+bool
+yacco2::
+CAbs_fsm::
+debug(){
+ return debug__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+comments(){
+ return comments__;
+}@/
+
+@*2 |find_a_recycled_rule| and |recycle_rule|.\fbreak
+Each |fsm| is virtual and the concrete grammar's |fsm|
+gets gened up with its specific |reduce_rhs_of_rule|.
+It is here that the fetching of recycled rules are done.
+The popping of the parse stack by cleanup or a
+ reduce operation recycles the rules.
+For the love of speed and environment,
+Recycle baby recycle!
+@<accrue yacco2 code@>=
+void
+CAbs_fsm::find_a_recycled_rule
+ (Per_rule_s_reuse_table* Reuse_rule_table
+ ,Rule_s_reuse_entry** Reuse_rule_entry){
+ reuse_rule_list* rrl(0);
+ if(Reuse_rule_table->for_use_list_!= 0){
+ rrl = Reuse_rule_table->for_use_list_;
+ (*Reuse_rule_entry) = rrl->reuse_rule_entry_;
+ Reuse_rule_table->for_use_list_ = rrl->older_;
+ }else{
+ (*Reuse_rule_entry) = new Rule_s_reuse_entry();
+ rrl = &(*Reuse_rule_entry)->its_linked_list_;
+ rrl->reuse_rule_entry_= (*Reuse_rule_entry);
+ rrl->per_rule_tbl_ptr_ = Reuse_rule_table;
+ }
+fnd_rrl:
+ rrl->older_ = 0;
+ rrl->younger_ = 0;
+ if(Reuse_rule_table->in_use_list_ != 0) {
+ Reuse_rule_table->in_use_list_->younger_ = rrl;
+ rrl->older_ = Reuse_rule_table->in_use_list_;
+ Reuse_rule_table->in_use_list_ = rrl;
+ }else{
+ Reuse_rule_table->in_use_list_ = rrl;
+ }
+}
+void
+CAbs_fsm::recycle_rule(Rule_s_reuse_entry* Rule_to_recycle){
+ Per_rule_s_reuse_table* reuse_tbl = Rule_to_recycle->its_linked_list_.per_rule_tbl_ptr_;
+ reuse_rule_list* iul = reuse_tbl->in_use_list_;
+ reuse_rule_list* ful = reuse_tbl->for_use_list_;
+ reuse_rule_list* rrl = &Rule_to_recycle->its_linked_list_;
+ reuse_rule_list* older_rrl = rrl->older_;
+ reuse_rule_list* younger_rrl = rrl->younger_;
+ // break bonds from ``in use'' and reattach to ``for use''
+ rrl->younger_ = 0;
+ rrl->older_ = reuse_tbl->for_use_list_;
+ reuse_tbl->for_use_list_ = rrl;
+
+ if(rrl == iul){// removal was end of iu list
+ reuse_tbl->in_use_list_ = older_rrl;
+ if(older_rrl != 0){
+ older_rrl->younger_ = 0;
+ }
+ return;
+ }
+ if(older_rrl == 0){// rechain the iu list
+ younger_rrl->older_ = 0;
+ return;
+ }
+ younger_rrl->older_ = older_rrl;
+ older_rrl->younger_ = younger_rrl;
+}
diff --git a/web/yacco2/library/fsm_tbls.w b/web/yacco2/library/fsm_tbls.w
new file mode 100644
index 0000000000..55ebbce2f1
--- /dev/null
+++ b/web/yacco2/library/fsm_tbls.w
@@ -0,0 +1,536 @@
+@q file: fsm_tbls.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Finite automaton table definitions and their functions.
+These definitions support Yacco2's generated finite state automaton tables.
+A binary search is used on all tables: |Shift_tbl|, |Reduce_tbl|, and |State_s_thread_tbl|.
+Their structure contains the prefix giving the number of elements in the table,
+and the first record in the array.
+The elements are a concatenation of `in ascending sequence' sorted records for the binary search.
+
+@*2 State structure.\fbreak
+ This represents the finite automaton state.
+The only wrinkles to your normal finite state definition are the
+entries supporting parallelism and the 2 meta terminals for the `all shift' and
+`invisible shift' functions.
+These extra shifts act like a normal shift requiring their own shift entries.
+
+Parallelism is the \PARshift grammatical expressions within the state
+calling threads.
+Each expression supplies the thread and the returned terminal be it successful or
+an error terminal. An aborted thread returns nothing.
+The expression itself requires 2 shifts:
+the \PARshift followed by the winning terminal that the arbitrator
+has selected.
+Why is there not 3 shifts to include the thread used?
+I originally thought of this but it has no relevance to the expression parsed.
+The thread call is a pre-conditional condition to the T stream.
+If all the threads have aborted, then the \PARshift terminal must be removed
+from the parse stack before trying the standard finite automaton's operations.
+The list of threads
+associated with the state needing launching completes the declaration of parallelism.
+
+|proc_call_shift__| has been added to deal with chained procedure calls.
+What the heck is that? It is a dispatcher of procedure calls reacting
+to the returned T.
+This grammatical structure allows one to call a thread, react on the returned T
+by calling a specific procedure.
+For example, this subrule \PARshift ``lhs'' |TH_id| |Rdispatch_lhs|.
+The thread ``id'' is a identifier / symbol table lookup for
+keywords on a character token stream.
+The following |Rdispatch_lhs| becomes the dispatcher of called procedures
+based on the returned T ``first set'' is ``lhs''.
+|Rdispatch_lhs| subrule would be \PROCshift ``lhs-phrase'' |PROC_TH_lhs_phrase|
+receiving the ``lhs'' start T.
+Its other subrules would be programmed to catch the errors.
+This ``procedure call'' sublety requires the called procedure
+to use the stacked returned T ``lhs'' as
+its current T and not the current T of the caller. Also it must
+set its own token position to 1 less the caller's current token position.
+There is an overlap on the input token stream whereby the characters used
+to create the ``lhs'' T are still in the supplier's token stream and not ``lhs''.
+
+The other subtelty is a non-chained procedure call when the calling parser
+has only 1 thread to call so call it as a procedure and not as a thread
+to juice the optimization process.
+
+|questionable_shift__| is used in questionable situations like error
+detection points within a grammar. See notes to myself for an explanation.
+@<Struct...@>+=
+struct State{
+ yacco2::UINT state_no__;
+ yacco2::Shift_entry* parallel_shift__; // \PARshift
+ yacco2::Shift_entry* all_shift__; // \ALLshift
+ yacco2::Shift_entry* inv_shift__; // \INVshift
+ yacco2::Shift_entry* proc_call_shift__; // \TRAshift
+ yacco2::Shift_tbl* shift_tbl_ptr__;
+ yacco2::Reduce_tbl* reduce_tbl_ptr__;
+ yacco2::State_s_thread_tbl* state_s_thread_tbl__;
+ yacco2::Type_pc_fnct_ptr proc_call_addr__; // function for \TRAshift
+ yacco2::Shift_entry* questionable_shift__; // \QUEshift
+};@/
+
+@*2 Shift table lookup.\fbreak
+The |Shift_tbl| is a binary array of |Shift_entry| of the finite state.
+The shift operation goes through a sequential list of ranked terminals trying
+always to shift first before trying to reduce.
+The ranking of potential shifts are:\fbreak
+\ptindent{1) current terminal being parsed}
+\ptindent{2) questionable shift terminal \QUEshift}
+\ptindent{3) invisible meta terminal \INVshift}
+\ptindent{4) all shift terminal \ALLshift}
+
+Their presence in the state's configuration dictates the shift operation.
+There are 4 individual search attempts to see
+ whether the shift operation should take place.
+The numbered points indicates their
+ranking order: point 2 and 3 should be mutually exclusive.
+
+The |goto__| in the |shift_entry| is your vanilla flavoured
+fsa `go to' state.
+The actual state definition is laced with extra information
+to support parallel and conditional parsing.
+\INVshift is a bailout mechanism from ambiguous gramatical contexts.
+It can be used to describe an epsilon rule. How?
+Though there is a shift happening, there is no consumption of the token stream.
+Its use depends on the palative tastes of the grammar writer or the
+ingredients demanded by the grammar.
+@<Struct...@>+=
+struct Shift_entry {
+ yacco2::USINT id__;
+ yacco2::State* goto__;
+};@/
+struct Shift_tbl {
+ yacco2::USINT no_entries__;
+ yacco2::Shift_entry first_entry__[1];
+};@/
+
+@*2 Reduce table entry.\fbreak
+The |Reduce_entry| gives the lookahead set number to be checked.
+The |rhs_id__| gives the subrule identity that will collapse
+to its left-handside rule.
+Where is the binary compare function?
+It is the set compare function. See |Set handling|.
+@<Struct...@>+=
+struct Reduce_entry {
+ yacco2::Set_tbl* la_set__;
+ yacco2::USINT rhs_id__;
+};@/
+struct Reduce_tbl {
+ yacco2::USINT no_entries__;
+ yacco2::Reduce_entry first_entry__[1];
+};@/
+
+
+@** Threading Definitions.\fbreak
+Lots of merit but if it's not fast then this idea is side-lined or in football terms benched.
+To optimize the dispatching of threads, a global approach is required.
+This is resolved by Yacco2's linker.
+Why is a global approach needed? Sequential first set evaluation per thread
+within the state's configuation is just tooooo slowww.
+To properly assess the first sets of all threads, the linker must read
+the ``fsc'' files generated per thread by Yacco2.
+The linker can now apply the transience operator on the first sets where
+a thread can call another thread in its first set: the start (closure) state of the grammar
+could contain
+a call to a thread.\fbreak
+\fbreak
+Thought:\fbreak
+How many stacked focuses does one need with fad out to see the forest from the trees?
+Programming demands this talent of Yoga reflection but how many times
+have u consciously
+observed oneself observing oneself...
+In this case, the tree scope lost to the forest,
+as the local optimizations discussed in |Notes to myself|
+had reached their effectiveness and I still needed more
+improvement.
+\fbreak
+Thought no 2:\fbreak
+Why wasn't this global approach thought of before now?
+Well I tried to get my threading ideas to work first.
+Thoughts of efficiency were not my first priority.
+Now reality of slowness demands gettting it to work faster.
+The speed approach is test the current token's enumeration id
+against a global ``thread list having T in their first set'' when paralellism is present
+within the finite automaton's current state's configuration.
+If there are threads with this first set item, then go thru the state's potential
+thread list looking to launch them.
+On an aside, common prefix threads will showup together in their common terminals.
+There should not be too many of these
+so the list should be short --- normally one thread.
+To get speed, a thread id is required. It is the enumeration of all the thread grammars.
+This enumeration is done within Yacco2's Linker. As Yacco2 is local to the
+grammar being compiled, its local table must use indirection to get at this thread id.
+So u will see pointers to items that only get resolved by the language linker.
+See |@<Global external variables from yacco2's linker@>| for the global symbols referenced
+within this library but generated by Yacco2's Linker.
+\fbreak
+\fbreak
+Mutexes controlling the hoards:\fbreak
+\ptindent{1) |yacco2::TOKEN_MU| - token dispensor access}
+\ptindent{2) |yacco2::TRACE_MU| - used to log tracing}
+\ptindent{3) |yacco2::TH_TBL_MU| - access thread dispatch table}
+\ptindent{4) |yacco2::SYM_TBL_MU| - symbol table access}
+With my dual core AMD Sun work station, readonly access to the token dispensor
+requires a mutex |TOKEN_MU| to prevent thread residues poluting other threads accessing
+``at the same time'' their tokens.
+My tracings re-affirmed my intuitions as to why it was not working in this configuration.
+Past portings onto Apple's OSx, VMS Alpha, and NT Windows all worked.
+In a single chip environment execution is normally sequential but in multi-chip
+environments parallel execution streams are dancing together on the same stage.
+|TOKEN_MU| ensures that each fetch to the token supplier is atomicly completed
+before others requests are serviced. Unfortunately this has a
+potential braking effect
+by throatling back to 1 only thread executing if there are multiple simultaneously token
+read requests happening
+ until i can
+explore who / what causes the downstream polution.
+Currently my library is staticly declared and not declared as shared.???
+Remember as multiple threads are launched by a parser, each thread's
+execution path is asynchronous in their token fetches even
+though each launched competing thread starts at the same position within the token stream.
+Please see ``Notes to myself'' on eliminating the ``jit'' token fetch.
+
+|TRACE_MU| mutex ensures that the complete text traced is completely outputed.
+The atomicity is bracketed by the acquire / release cycle of the |TRACE_MU| mutex.
+This prevents interleaving of parallel thread loggings to occur.
+For example, i/o calls are fielded by the operating system; it is the operating system's
+decision as to who will run next.
+
+|SYM_TBL_MU| is reserved for possible parallel symbol table access.
+|TH_TBL_MU| is the bouncer of the global thread table that registers launched threads.
+These thoroughbreds keep their engines running with environmental friendly
+octane while waiting for their next serve request
+that provides the needed pep to parallel parsing.
+As each access to the table is read / write, |TH_TBL_MU| keeps this
+critical region in tip-top shape.
+The following section discusses in detail how this table is used.
+\fbreak
+@*2 Critical region discussion surrounding |Parallel_thread_table|.\fbreak
+|Parallel_thread_table| raison d'\^etre is speed.
+Depending on the parsed context, threads are created dynamically.
+ This stable of threads are
+reused on demand that eliminates the create-run-destroy cycle of a thread.
+Now it's create once, run as many times as needed, and exit when finished parsing.
+Nested thread calls like recursion is supported: thread A calls thread B calls thread A.
+Each thread in the list keeps an availability status: busy or idle.
+There are 2 parts to the global thread table:\fbreak
+\ptindent{1) |Parallel_thread_table| --- the array of thread lists}
+\ptindent{2) |TH_TBL_MU| mutex --- the guard dog controlling the crowds}
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/threading_defs.1"}{1}{1}
+\fbreak
+\fbreak
+The above figure depicts the thread table generated from \O2 linker.
+The 2 contexts requiring reader / writer access are:\fbreak
+\ptindent{1) grammar's launching or requesting threads to run}
+\ptindent{2) launched thread setting its work status back to idle or exiting}
+As an optimization, threads receive an unique ordered id from \O2 linker.
+This is just a lexigraphical ordering on their names
+ allowing table access by subscript.
+The thread table is a single writer controlled by mutex primitives
+|@<acquire global thread table critical region@>|
+and |@<release global thread table critical region@>|.
+These |cweb| sections are calls to the thread manager
+using the |TH_TBL_MU| mutex.
+To acquire control a launching grammar
+uses the |@<acquire global thread table critical region@>| primitive.
+If someone else has possession on the resource,
+the thread manager places the requestor into a hold queue
+until the resource is freed.
+It is the thread manager that dispenses execution control.
+\fbreak
+\fbreak
+Thread table possession:\fbreak
+Quick review: \fbreak
+A grammar's finite automata can
+contain lists of threads for the running within each state's context.
+To juice the running, each thread has a first set of tokens that start its parse.
+Potential thread launch evaluation uses the current token against these
+first sets to
+determine what threads should run.\fbreak
+\fbreak
+So possession is 9/10$^{th}$ of whose law?
+Now launch or run those threads by calling the thread manager ---
+the ``how'' will be described later.
+New threads add their |worker_thread_blk|*
+to the thread table without any care for critical region hygiene.
+The |Parser| object of the newly launched grammar does it from its |constructor|.
+Cuz the launching grammar has possession of the thread table
+ and the launched threads are unique, there
+is no potential reader / writer destructive scribbling to the table.
+A thread's work status is maintained in the table depending on how they get run.
+``Just created'' threads do a |push_back| of their |worker_thread_blk|* into the
+ thread list while ``already created'' threads set their |worker_thread_blk|'s
+status to busy that is already registered in the thread table's list.
+A grammar's potential thread list
+does not contain multiple requests of the same thread so that u'll never
+get a parallel set of identical threads spoiling the broth within the same launch list.
+Remember the table's granularity is by thread id subscript:
+So there is no conflict.\fbreak
+\fbreak
+Note:\fbreak
+If the thread manager flips execution to a launched thread
+(single or multiple cpus don't matter) and this newly executed thread
+ requires thread table access,
+ it must call the |@<acquire global thread table critical region@>|
+that puts its request on hold until the resource is freed up.
+Eventually the original grammar releases control of the thread table
+by |@<release global thread table critical region@>|
+that activates execution of the requestor.
+\fbreak
+\fbreak
+Sleeping beauty:\fbreak
+Finally the calling grammar places itself
+into a wait state (is it ripper van winkle?)
+to be wakened by one of its
+called dwarfs.
+This is done by calling the |@<wait for event to arrive with no loop@>|
+that releases the grammar's mutex,
+puts it on ice,
+and places its conditional variable into the thread manager's event wait queue.
+Freeing up of these ``thread manager'' variables allows its called
+threads to play with its calling grammar's critical region
+and to eventually wake it up.
+Remember, each called thread must
+go thru the acquiring / releasing of the called thread's mutex.
+U wouldn't want the dwarfs to screwup ogre's critcal region and
+the grammar writer's ire.
+Why the playing with the calling grammar's critical region away?
+Its called threads can
+report back their parse findings thru the ``acceptance token'' queue
+of the sleeping beauty.
+To wake up the ogre, the last thread finished executing
+calls primitive |@<signal thread to wake up...@>|.
+How is this determined?
+The calling grammar's critical region has a launched thread count.
+Each called thread decrements it when completed regardless of
+its parsing outcome.
+When it hits zero, this indicates last thread to finish and so
+jostle the snoring beauty.
+The last duty of a running thread is
+|@<acquire global thread table critical region@>|,
+set its run status to idle
+,|@<release global thread table critical region@>|,
+and place itself into a wait state for another round of drinks:
+|@<wait for event to arrive with no loop@>|.\fbreak
+\fbreak
+\fbreak
+How does a called thread know its requestor?\fbreak
+Let's review the 2 situations:\fbreak
+\ptindent{1) create a thread}
+\ptindent{2) call an already created thread}
+There are 2 doors of entry into a thread.
+``Creation of a thread'' is at the mercy of the thread manager to
+register the thread and prepare it for the calling.
+The only way information can be passed to the to-be created thread is thru a
+parameter passed to the called thread procedure by the thread manager.
+The calling grammar's |Parser| object address is passed
+as a parameter to |CREATE_THREAD|
+who passes it to the to-be-executed thread.
+Built within the thread code is the casting and extraction of
+the requestor's |Parser| object.
+Once the called thread is finished running, it puts itself into a wait state
+for its next marching order.\fbreak
+\fbreak
+The 2nd port of entry.\fbreak
+U guessed it, the thread list contains the thread's |Parser| object that
+has been freed of its
+mutex and conditional variable put on ice.
+So the 2nd entry point is the |@<wait for event to arrive with no loop@>|.
+The calling grammar calls |SIGNAL_COND_VAR| to wake up the dwarf while the
+called thread uses the |@<signal thread to wake up and work@>|
+to wake up the ogre that really calls |SIGNAL_COND_VAR|.
+Within the critical region of the ``to be requested'' thread
+is |pp_requesting_parallelism__| that holds the calling grammar's
+deposited critical region address.
+Note: thru out a parse a thread can be activated
+ by different suitors.
+Each deposit by the requesting grammar leaves its tale for the dwarf.\fbreak
+\fbreak
+Draining the thread swamp:\fbreak
+How does one get out of this infinite loop of
+ wait for its marching order, do the parse, and wait again.
+This is Sambo and the tigers twirl: tail chasing ain't it?
+There is another marching order to exit-work.
+A bit of a subtlety here needs explaining:
+how does one know if the thread manager has placed all the toe tapping threads into a
+wait status within a single cpu environment?
+To let the swamp drain, a |@<pause for x seconds@>| takes place
+that could be not effective but i'm trying: better yet would be to have
+a |pthread| procedure to do the act of bleeding...
+followed by
+a ``stop work'' order --- it has other euphemisms.
+This is how the thread breaks out of its tail spin.
+The global |Parallel_threads_shutdown| procedure initiates the above
+and details the threads run stats and shutdown attempts.
+It is usually called from the ``mainline'' code of the program. \fbreak
+
+@*3 Diagrams, do we have diagrams --- examples of critical region activity.\fbreak
+Let a figure detail a 1000 words. In a single cpu environment, a process's
+execution sequence is sequential.
+To depict this using G as the process, A and B threads, and the critical region
+resources, i will use a box within a box
+concept to simulate multi-dimensions.
+Why a box? In one of the following examples there are
+3 outer space dimensions representing G, A, and B.
+This really is a triangle but the running comments and activity vectors makes it easier
+to annotate using a box.
+An obelisk with its point removed represents all the dimensions.
+
+Going from the outer to the inner parts of the obelisk,
+the outer walls are the process / thread spaces.
+Next, time rulers are the motes between outer and inner spaces.
+The court yard is the inner space (resource space).
+It contains the critical regions' resources,
+and execution queues --- running and waiting to run.
+
+Commented outer space events are registered aginst its time mark by
+vectors using an arrowhead to indicate the activity's direction into or out
+of the resource space. A double headed vector
+indicates the outer space call to the inner space that
+returns execution back to the calling outer space.
+
+To indicate ownership and duration of time, each resource uses a line similar to
+the math open / close interval.
+The ``running queue'' also ties together the start/stop boundaries with a dashed
+vertical line to show continuity.
+Other resources have the owner above their time line marker.
+A dotted vertical vectored to the resource marks a request for ownership that is pending.
+Its converse uses a dashed line away from the resource
+marking the acquisition from a pending a request.
+\fbreak
+\fbreak
+\fbreak
+Example of threads being run by \O2.
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/threading_exs.1"}{1}{1}
+\fbreak
+\fbreak
+A single thread A that gets launched and reports back to its caller G .
+The resource ``x'' is the global guard to the global thread table.
+Basic comments on the critical region components of G have been left out due to space.
+As previously described, an active thread count is maintained along with
+the acceptance token queue
+that the called threads deposit their results for G's arbitration code assessment.
+Lines 18 and 23 comments these situations with the bracketed acquisition.
+Line 18 shows the called thread A reporting its results within G's protected area.
+The signal variables of G and A have also been ommitted due to space.
+In the above example, it would not have mattered whether
+the launched thread started executing immediately with the calling grammar
+put on hold as
+the launching grammar G still has ownership on ``x'' that
+eventually the A will require and so it would be put into a pending state until
+the ``x'' resource could be re-allocated.
+In this illustration, G goes into a wait state to be signalled later by A.
+If the interweave of G's execution sequence was such that
+A was working and signaled G before G put itself into a wait-on-signal state,
+it is the thread library that pends the signal for when G finally requests it.
+
+
+\fbreak
+\fbreak
+A Deadlock Example:\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/threading_exs.2"}{1}{1}
+\fbreak
+Some comments:\fbreak
+Deadlock is a graph of cyclicity.
+In the example, resource ``x'' is an intermediary used by the thread manager
+to relinquish execution control held by A when it releases ``x''.
+Process G then continues by creating thread B with its Acquire events on ``b''
+and attempts on ``a''. Eventually thread A attempts its acquiring of ``b''.
+By sequencing the Acquire requests --- Acquire(a) by A, Acquire(b) by B,
+Acquire(a) by B, and Acquire(b) by A, a cyclicity check could be done
+per Acquire to
+determine whether deadlock is met.
+The third Acquire(a) by B has the potential deadlock cyclic condition established.
+Because A is still running, it is not a conclusive deadlock as thread A could
+Release(a) to free up the cycle created by B.
+Only when thread A asks for ``b'' does it become a solid deadlock
+regardless of process G being able to run.
+
+The simplest run death is G requesting a wait-on-signal when there are no other
+threads running that could wake it up --- Sleeping beauty with no Prince to
+do resusitation.
+
+
+@*2 Thread entry.\fbreak
+Just your basic attributes describing a thread.
+Each thread block is generated by the Linker.
+Remember, the thread ids are in lexigraphical order: upper / lower case are different.
+ Only the Linker has access to all
+the threads to produce this order.
+Each thread entry block will have the Linker's manufactured thread name which
+will be referenced by the state's thread table and the global stable of threads.
+The thread entry will be identified by the following rule:\fbreak
+\ptindent{concatenate the letter ``I'' to the thread's name}
+For example, ``|TH_eol|'' is the end-of-line detector thread.
+Its variable name would be ``|ITH_eol|'' where the |TH_eol| value is taken from the grammar's
+``parallel-thread-function'' component.
+
+The reason for the |thread_array_record| having an array of |Thread_entry*| is due to
+ the thread entry name.
+ It is referenced by the |State_s_thread_tbl| and can be referenced by the grammar writer
+ when using the |spawn_thread_manually| procedure.
+The thread entry names are generated by Yacco2's Linker that is outside of
+Yacco2's library jurisdiction
+but used by it. This generation is specific per language being generated.
+@<Struct...@>+=
+struct Thread_entry {
+ yacco2::KCHARP thread_fnct_name__;
+ yacco2::Type_pp_fnct_ptr thread_fnct_ptr__;
+ yacco2::USINT thd_id__;
+ yacco2::Type_pc_fnct_ptr proc_thread_fnct_ptr__;
+};
+
+@*2 Thread stable.
+@<Struct...@>+=
+struct thread_array_record{
+ yacco2::USINT no_entries__;
+ yacco2::Thread_entry* first_entry__[1];
+};
+@*2 State's thread table.\fbreak
+ The thread entries are in sorted order. How?
+Though the list of potential threads order within the grammar
+are as programmed by the grammar writer, their names
+will be sorted lexigraphically. Hence their order in the table are
+relatively sorted.
+
+The thread entry variable and its contents are generated by Yacco2's Linker.
+
+@<Struct...@>+=
+struct State_s_thread_tbl {
+ yacco2::USINT no_entries__;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr__;
+ yacco2::ULINT (*thd_id_bit_map__);
+ yacco2::Thread_entry* first_entry__[1];
+};@/
+
+@*2 Threads having terminal in first set.\fbreak
+Well here's the turbo charger of threads. It is generated by Yacco2's Linker.
+As the number of terminals defined is unknown to this general library,
+a spoofing technique is used.
+
+Have a pointer to a structure that defines the running grammar's environment that
+contains another indirection to the local information. I use T as a generic
+symbol representing the individual terminals within the grammar's
+Terminal vocabulary.
+These 2 structures are:\fbreak
+\ptindent{1) terminal array pointing to the threads with T in the grammar's first set}
+\ptindent{2) the thread id list having T in their first set}
+This spoofing technique is:
+@<Struct...@>+=
+struct thd_ids_having_T {
+ yacco2::ULINT first_thd_id__[1];
+};@/
+struct T_array_having_thd_ids {
+ yacco2::USINT no_of_T__;
+ yacco2::thd_ids_having_T* first_entry__[1];
+};@/
+
diff --git a/web/yacco2/library/gbl_defs.w b/web/yacco2/library/gbl_defs.w
new file mode 100644
index 0000000000..5f4433e49f
--- /dev/null
+++ b/web/yacco2/library/gbl_defs.w
@@ -0,0 +1,58 @@
+@q file: gbl_defs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Global macro definitions.
+These are references throughout all Yacco2's |cweb| files.
+One definition to watch for is |SIZE_CAbs_lr1_sym|. It attempts
+to optimize the allocation of raw characters.
+Due to some of |CAbs_lr1_sym| items --- the boolean and short ints,
+there are slack bytes
+generated when alignment for 64 bit support takes place for pointers
+on 8 byte boundries.
+|SIZE_RC_MALLOC| is used to eliminate dflt ctor of |CAbs_lr1_sym|.
+@d START_OF_LRK_ENUMERATE 0
+@d END_OF_LRK_ENUMERATE 7
+@d START_OF_RC_ENUMERATE END_OF_LRK_ENUMERATE+1
+@d END_OF_RC_ENUMERATE START_OF_RC_ENUMERATE+256-1
+@d START_OF_ERROR_ENUMERATE END_OF_RC_ENUMERATE+1
+@d SEQ_SRCH_VS_BIN_SRCH_LIMIT 71
+@d MAX_UINT (0xffffffff) //1024*1024*1024*4 - 1
+@d MAX_USINT 256*256 - 1
+@d MAX_LR_STK_ITEMS 256
+@d C_MAX_LR_STK_ITEMS MAX_LR_STK_ITEMS+1
+@d BITS_PER_WORD 32
+@d BITS_PER_WORD_REL_0 BITS_PER_WORD - 1
+@d MAX_NO_THDS 1024
+@d START_OF_RC_ENUM 8
+@d SIZE_CAbs_lr1_sym 56 // 32 bit: 24..28 bytes, 64 bit: 56
+@d NO_CAbs_lr1_sym_ENTRIES 1024*1024
+@d SIZE_RC_MALLOC NO_CAbs_lr1_sym_ENTRIES*SIZE_CAbs_lr1_sym
+@d ASCII_8_BIT 256
+@d START_LINE_NO 1
+@d START_CHAR_POS 0
+@d LINE_FEED 10
+@d EOF_CHAR_SUB 256
+@d YES true
+@d NO false
+@d ON true
+@d OFF false
+@d BUFFER_SIZE 1024*4
+@d BIG_BUFFER_32K 1024*32
+@d SMALL_BUFFER_4K 1024*4
+@d THREAD_WORKING 0
+@d THREAD_WAITING_FOR_WORK 1
+@d ALL_THREADS_BUSY 2
+@d NO_THREAD_AT_ALL 3
+@d THREAD_TO_EXIT 4
+@d EVENT_RECEIVED 0
+@d WAIT_FOR_EVENT 1
+@d Token_start_pos 0 // rel 0 for now
+@d No_Token_start_pos Token_start_pos - 1 // rel 0 for now
+@d CALLED_AS_THREAD true
+@d CALLED_AS_PROC false
+@d ACCEPT_FILTER true
+@d BYPASS_FILTER false
diff --git a/web/yacco2/library/grammars/yacco2_T_enumeration.h b/web/yacco2/library/grammars/yacco2_T_enumeration.h
new file mode 100644
index 0000000000..3b6442a4ba
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_T_enumeration.h
@@ -0,0 +1,294 @@
+//
+// file: yacco2_T_enumeration.h
+// Gened Date and Time: Fri Sep 30 12:19:52 2005
+//
+/*
+ Copyright Dave Bone 1998 - 2010
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+*/
+#ifndef __yacco2_T_enumeration_h__
+#define __yacco2_T_enumeration_h__ 1
+namespace NS_yacco2_T_enum{
+
+struct T_Enum{
+ enum enumerated_terminals {
+ sum_total_T = 543
+ ,no_of_terminals = 114
+ ,no_of_raw_chars = 256
+ ,no_of_lr1_constants = 8
+ ,no_of_error_terminals = 165
+,start_LRK=0,end_LRK=7
+,start_RC=8,end_RC=263
+,start_T=264,end_T=377
+,start_ERR=378,end_ERR=542
+,start_R=543
+ ,T_LR1_questionable_shift_operator_ = 0
+ ,T_LR1_eog_ = 1
+ ,T_LR1_eolr_ = 2
+ ,T_LR1_parallel_operator_ = 3
+ ,T_LR1_reduce_operator_ = 4
+ ,T_LR1_procedure_call_operator_ = 7
+ ,T_LR1_invisible_shift_operator_ = 5
+ ,T_LR1_all_shift_operator_ = 6
+ ,T_LR1_fset_transience_operator_ = 7
+ ,T_raw_nul_ = 8
+ ,T_raw_soh_ = 9
+ ,T_raw_stx_ = 10
+ ,T_raw_etx_ = 11
+ ,T_raw_eot_ = 12
+ ,T_raw_enq_ = 13
+ ,T_raw_ack_ = 14
+ ,T_raw_bel_ = 15
+ ,T_raw_bs_ = 16
+ ,T_raw_ht_ = 17
+ ,T_raw_lf_ = 18
+ ,T_raw_vt_ = 19
+ ,T_raw_ff_ = 20
+ ,T_raw_cr_ = 21
+ ,T_raw_so_ = 22
+ ,T_raw_si_ = 23
+ ,T_raw_dle_ = 24
+ ,T_raw_dc1_ = 25
+ ,T_raw_dc2_ = 26
+ ,T_raw_dc3_ = 27
+ ,T_raw_dc4_ = 28
+ ,T_raw_nak_ = 29
+ ,T_raw_syn_ = 30
+ ,T_raw_etb_ = 31
+ ,T_raw_can_ = 32
+ ,T_raw_em_ = 33
+ ,T_raw_sub_ = 34
+ ,T_raw_esc_ = 35
+ ,T_raw_fs_ = 36
+ ,T_raw_gs_ = 37
+ ,T_raw_rs_ = 38
+ ,T_raw_us_ = 39
+ ,T_raw_sp_ = 40
+ ,T_raw_exclam_ = 41
+ ,T_raw_dbl_quote_ = 42
+ ,T_raw_no_sign_ = 43
+ ,T_raw_dollar_sign_ = 44
+ ,T_raw_percent_ = 45
+ ,T_raw_ampersign_ = 46
+ ,T_raw_right_quote_ = 47
+ ,T_raw_open_bracket_ = 48
+ ,T_raw_close_bracket_ = 49
+ ,T_raw_asteric_ = 50
+ ,T_raw_plus_ = 51
+ ,T_raw_comma_ = 52
+ ,T_raw_minus_ = 53
+ ,T_raw_period_ = 54
+ ,T_raw_slash_ = 55
+ ,T_raw_0_ = 56
+ ,T_raw_1_ = 57
+ ,T_raw_2_ = 58
+ ,T_raw_3_ = 59
+ ,T_raw_4_ = 60
+ ,T_raw_5_ = 61
+ ,T_raw_6_ = 62
+ ,T_raw_7_ = 63
+ ,T_raw_8_ = 64
+ ,T_raw_9_ = 65
+ ,T_raw_colon_ = 66
+ ,T_raw_semi_colon_ = 67
+ ,T_raw_less_than_ = 68
+ ,T_raw_eq_ = 69
+ ,T_raw_gt_than_ = 70
+ ,T_raw_question_mark_ = 71
+ ,T_raw_at_sign_ = 72
+ ,T_raw_A_ = 73
+ ,T_raw_B_ = 74
+ ,T_raw_C_ = 75
+ ,T_raw_D_ = 76
+ ,T_raw_E_ = 77
+ ,T_raw_F_ = 78
+ ,T_raw_G_ = 79
+ ,T_raw_H_ = 80
+ ,T_raw_I_ = 81
+ ,T_raw_J_ = 82
+ ,T_raw_K_ = 83
+ ,T_raw_L_ = 84
+ ,T_raw_M_ = 85
+ ,T_raw_N_ = 86
+ ,T_raw_O_ = 87
+ ,T_raw_P_ = 88
+ ,T_raw_Q_ = 89
+ ,T_raw_R_ = 90
+ ,T_raw_S_ = 91
+ ,T_raw_T_ = 92
+ ,T_raw_U_ = 93
+ ,T_raw_V_ = 94
+ ,T_raw_W_ = 95
+ ,T_raw_X_ = 96
+ ,T_raw_Y_ = 97
+ ,T_raw_Z_ = 98
+ ,T_raw_open_sq_bracket_ = 99
+ ,T_raw_back_slash_ = 100
+ ,T_raw_close_sq_bracket_ = 101
+ ,T_raw_up_arrow_ = 102
+ ,T_raw_under_score_ = 103
+ ,T_raw_left_quote_ = 104
+ ,T_raw_a_ = 105
+ ,T_raw_b_ = 106
+ ,T_raw_c_ = 107
+ ,T_raw_d_ = 108
+ ,T_raw_e_ = 109
+ ,T_raw_f_ = 110
+ ,T_raw_g_ = 111
+ ,T_raw_h_ = 112
+ ,T_raw_i_ = 113
+ ,T_raw_j_ = 114
+ ,T_raw_k_ = 115
+ ,T_raw_l_ = 116
+ ,T_raw_m_ = 117
+ ,T_raw_n_ = 118
+ ,T_raw_o_ = 119
+ ,T_raw_p_ = 120
+ ,T_raw_q_ = 121
+ ,T_raw_r_ = 122
+ ,T_raw_s_ = 123
+ ,T_raw_t_ = 124
+ ,T_raw_u_ = 125
+ ,T_raw_v_ = 126
+ ,T_raw_w_ = 127
+ ,T_raw_x_ = 128
+ ,T_raw_y_ = 129
+ ,T_raw_z_ = 130
+ ,T_raw_open_brace_ = 131
+ ,T_raw_vertical_line_ = 132
+ ,T_raw_close_brace_ = 133
+ ,T_raw_tilde_ = 134
+ ,T_raw_del_ = 135
+ ,T_raw_x80_ = 136
+ ,T_raw_x81_ = 137
+ ,T_raw_x82_ = 138
+ ,T_raw_x83_ = 139
+ ,T_raw_x84_ = 140
+ ,T_raw_x85_ = 141
+ ,T_raw_x86_ = 142
+ ,T_raw_x87_ = 143
+ ,T_raw_x88_ = 144
+ ,T_raw_x89_ = 145
+ ,T_raw_x8a_ = 146
+ ,T_raw_x8b_ = 147
+ ,T_raw_x8c_ = 148
+ ,T_raw_x8d_ = 149
+ ,T_raw_x8e_ = 150
+ ,T_raw_x8f_ = 151
+ ,T_raw_x90_ = 152
+ ,T_raw_x91_ = 153
+ ,T_raw_x92_ = 154
+ ,T_raw_x93_ = 155
+ ,T_raw_x94_ = 156
+ ,T_raw_x95_ = 157
+ ,T_raw_x96_ = 158
+ ,T_raw_x97_ = 159
+ ,T_raw_x98_ = 160
+ ,T_raw_x99_ = 161
+ ,T_raw_x9a_ = 162
+ ,T_raw_x9b_ = 163
+ ,T_raw_x9c_ = 164
+ ,T_raw_x9d_ = 165
+ ,T_raw_x9e_ = 166
+ ,T_raw_x9f_ = 167
+ ,T_raw_xa0_ = 168
+ ,T_raw_xa1_ = 169
+ ,T_raw_xa2_ = 170
+ ,T_raw_xa3_ = 171
+ ,T_raw_xa4_ = 172
+ ,T_raw_xa5_ = 173
+ ,T_raw_xa6_ = 174
+ ,T_raw_xa7_ = 175
+ ,T_raw_xa8_ = 176
+ ,T_raw_xa9_ = 177
+ ,T_raw_xaa_ = 178
+ ,T_raw_xab_ = 179
+ ,T_raw_xac_ = 180
+ ,T_raw_xad_ = 181
+ ,T_raw_xae_ = 182
+ ,T_raw_xaf_ = 183
+ ,T_raw_xb0_ = 184
+ ,T_raw_xb1_ = 185
+ ,T_raw_xb2_ = 186
+ ,T_raw_xb3_ = 187
+ ,T_raw_xb4_ = 188
+ ,T_raw_xb5_ = 189
+ ,T_raw_xb6_ = 190
+ ,T_raw_xb7_ = 191
+ ,T_raw_xb8_ = 192
+ ,T_raw_xb9_ = 193
+ ,T_raw_xba_ = 194
+ ,T_raw_xbb_ = 195
+ ,T_raw_xbc_ = 196
+ ,T_raw_xbd_ = 197
+ ,T_raw_xbe_ = 198
+ ,T_raw_xbf_ = 199
+ ,T_raw_xc0_ = 200
+ ,T_raw_xc1_ = 201
+ ,T_raw_xc2_ = 202
+ ,T_raw_xc3_ = 203
+ ,T_raw_xc4_ = 204
+ ,T_raw_xc5_ = 205
+ ,T_raw_xc6_ = 206
+ ,T_raw_xc7_ = 207
+ ,T_raw_xc8_ = 208
+ ,T_raw_xc9_ = 209
+ ,T_raw_xca_ = 210
+ ,T_raw_xcb_ = 211
+ ,T_raw_xcc_ = 212
+ ,T_raw_xcd_ = 213
+ ,T_raw_xce_ = 214
+ ,T_raw_xcf_ = 215
+ ,T_raw_xd0_ = 216
+ ,T_raw_xd1_ = 217
+ ,T_raw_xd2_ = 218
+ ,T_raw_xd3_ = 219
+ ,T_raw_xd4_ = 220
+ ,T_raw_xd5_ = 221
+ ,T_raw_xd6_ = 222
+ ,T_raw_xd7_ = 223
+ ,T_raw_xd8_ = 224
+ ,T_raw_xd9_ = 225
+ ,T_raw_xda_ = 226
+ ,T_raw_xdb_ = 227
+ ,T_raw_xdc_ = 228
+ ,T_raw_xdd_ = 229
+ ,T_raw_xde_ = 230
+ ,T_raw_xdf_ = 231
+ ,T_raw_xe0_ = 232
+ ,T_raw_xe1_ = 233
+ ,T_raw_xe2_ = 234
+ ,T_raw_xe3_ = 235
+ ,T_raw_xe4_ = 236
+ ,T_raw_xe5_ = 237
+ ,T_raw_xe6_ = 238
+ ,T_raw_xe7_ = 239
+ ,T_raw_xe8_ = 240
+ ,T_raw_xe9_ = 241
+ ,T_raw_xea_ = 242
+ ,T_raw_xeb_ = 243
+ ,T_raw_xec_ = 244
+ ,T_raw_xed_ = 245
+ ,T_raw_xee_ = 246
+ ,T_raw_xef_ = 247
+ ,T_raw_xf0_ = 248
+ ,T_raw_xf1_ = 249
+ ,T_raw_xf2_ = 250
+ ,T_raw_xf3_ = 251
+ ,T_raw_xf4_ = 252
+ ,T_raw_xf5_ = 253
+ ,T_raw_xf6_ = 254
+ ,T_raw_xf7_ = 255
+ ,T_raw_xf8_ = 256
+ ,T_raw_xf9_ = 257
+ ,T_raw_xfa_ = 258
+ ,T_raw_xfb_ = 259
+ ,T_raw_xfc_ = 260
+ ,T_raw_xfd_ = 261
+ ,T_raw_xfe_ = 262
+ ,T_raw_xff_ = 263
+ };//close enum
+};// close template
+}// namespace
+#endif
diff --git a/web/yacco2/library/grammars/yacco2_characters.T b/web/yacco2/library/grammars/yacco2_characters.T
new file mode 100644
index 0000000000..01aa178b73
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_characters.T
@@ -0,0 +1,2848 @@
+/*
+ Copyright Dave Bone 1998 - 2011
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+ file: yacco2_characters.lex
+
+ Note:
+ This is one of the terminal classes used to generate
+ the enumerated terminals
+ It defines 8 bit characters.
+
+ Remember, it generates the C++ definitions which get used
+ in the parallel grammars recognizing the
+ basic character sets etc.
+*/
+/@
+@i "/yacco2/library/copyright.w"
+@** Raw characters vocabulary.\fbreak
+@/
+raw-characters
+(file-name yacco2_characters
+,name-space NS_yacco2_characters) {
+//
+// 7 bit char set
+//
+"x00" (sym-class raw_nul{
+ user-declaration
+ public:
+ raw_nul(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_nul::raw_nul(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x00",T_raw_nul_,false,false,Ext_file,Pos)}
+ ***
+ }
+)
+
+"x01" (sym-class raw_soh{
+ user-declaration
+ public: raw_soh(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_soh::raw_soh(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x01",T_raw_soh_,false,false,Ext_file,Pos)}
+ ***
+ }
+)
+
+"x02" (sym-class raw_stx{
+ user-declaration
+ public: raw_stx(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_stx::raw_stx(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x02",T_raw_stx_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x03" (sym-class raw_etx{
+ user-declaration
+ public: raw_etx(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_etx::raw_etx(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x03",T_raw_etx_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x04" (sym-class raw_eot{
+ user-declaration
+ public:
+ raw_eot(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_eot::raw_eot(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x04",T_raw_eot_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x05" (sym-class raw_enq{
+ user-declaration
+ public:
+ raw_enq(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_enq::raw_enq(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x05",T_raw_enq_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x06" (sym-class raw_ack{
+ user-declaration
+ public:
+ raw_ack(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_ack::raw_ack(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x06",T_raw_ack_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x07" (sym-class raw_bel{
+ user-declaration
+ public:
+ raw_bel(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_bel::raw_bel(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x07",T_raw_bel_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x08" (sym-class raw_bs{
+ user-declaration
+ public:
+ raw_bs(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_bs::raw_bs(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x08",T_raw_bs_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x09" (sym-class raw_ht{
+ user-declaration
+ public:
+ raw_ht(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_ht::raw_ht(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x09",T_raw_ht_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0a" AD (sym-class raw_lf{
+ user-declaration
+ public:
+ raw_lf(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_lf::raw_lf(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0a",T_raw_lf_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0b" (sym-class raw_vt{
+ user-declaration
+ public:
+ raw_vt(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_vt::raw_vt(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0b",T_raw_vt_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0c" (sym-class raw_ff{
+ user-declaration
+ public:
+ raw_ff(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_ff::raw_ff(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0c",T_raw_ff_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0d" AD (sym-class raw_cr{
+ user-declaration
+ public:
+ raw_cr(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_cr::raw_cr(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0d",T_raw_cr_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0e" (sym-class raw_so{
+ user-declaration
+ public:
+ raw_so(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_so::raw_so(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0e",T_raw_so_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x0f" (sym-class raw_si{
+ user-declaration
+ public:
+ raw_si(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_si::raw_si(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x0f",T_raw_si_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x10" (sym-class raw_dle{
+ user-declaration
+ public:
+ raw_dle(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dle::raw_dle(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x10",T_raw_dle_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x11" (sym-class raw_dc1{
+ user-declaration
+ public:
+ raw_dc1(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dc1::raw_dc1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x11",T_raw_dc1_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x12" (sym-class raw_dc2{
+ user-declaration
+ public:
+ raw_dc2(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dc2::raw_dc2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x12",T_raw_dc2_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x13" (sym-class raw_dc3{
+ user-declaration
+ public:
+ raw_dc3(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dc3::raw_dc3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x13",T_raw_dc3_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x14" (sym-class raw_dc4{
+ user-declaration
+ public:
+ raw_dc4(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dc4::raw_dc4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x14",T_raw_dc4_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x15" (sym-class raw_nak{
+ user-declaration
+ public:
+ raw_nak(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_nak::raw_nak(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x15",T_raw_nak_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x16" (sym-class raw_syn{
+ user-declaration
+ public:
+ raw_syn(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_syn::raw_syn(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x16",T_raw_syn_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x17" (sym-class raw_etb{
+ user-declaration
+ public:
+ raw_etb(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_etb::raw_etb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x17",T_raw_etb_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x18" (sym-class raw_can{
+ user-declaration
+ public:
+ raw_can(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_can::raw_can(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x18",T_raw_can_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x19" (sym-class raw_em{
+ user-declaration
+ public:
+ raw_em(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_em::raw_em(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x19",T_raw_em_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1a" (sym-class raw_sub{
+ user-declaration
+ public:
+ raw_sub(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_sub::raw_sub(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1a",T_raw_sub_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1b" (sym-class raw_esc{
+ user-declaration
+ public:
+ raw_esc(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_esc::raw_esc(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1b",T_raw_esc_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1c" (sym-class raw_fs{
+ user-declaration
+ public:
+ raw_fs(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_fs::raw_fs(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1c",T_raw_fs_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1d" (sym-class raw_gs{
+ user-declaration
+ public:
+ raw_gs(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_gs::raw_gs(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1d",T_raw_gs_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1e" (sym-class raw_rs{
+ user-declaration
+ public:
+ raw_rs(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_rs::raw_rs(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1e",T_raw_rs_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x1f" (sym-class raw_us{
+ user-declaration
+ public:
+ raw_us(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_us::raw_us(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x1f",T_raw_us_,false,false,Ext_file,Pos)}
+ ***
+})
+//
+" " (sym-class raw_sp{
+ user-declaration
+ public:
+ raw_sp(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_sp::raw_sp(INT Ext_file,size_t Pos){
+ T_CTOR_RW(" ",T_raw_sp_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"!" (sym-class raw_exclam{
+ user-declaration
+ public:
+ raw_exclam(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_exclam::raw_exclam(INT Ext_file,size_t Pos){
+ T_CTOR_RW("!",T_raw_exclam_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"\"" (sym-class raw_dbl_quote{
+ user-declaration
+ public:
+ raw_dbl_quote(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dbl_quote::raw_dbl_quote(INT Ext_file,size_t Pos){
+ T_CTOR_RW("\"",T_raw_dbl_quote_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"#" (sym-class raw_no_sign{
+ user-declaration
+ public:
+ raw_no_sign(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_no_sign::raw_no_sign(INT Ext_file,size_t Pos){
+ T_CTOR_RW("#",T_raw_no_sign_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"$" (sym-class raw_dollar_sign{
+ user-declaration
+ public:
+ raw_dollar_sign(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_dollar_sign::raw_dollar_sign(INT Ext_file,size_t Pos){
+ T_CTOR_RW("$",T_raw_dollar_sign_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"%" (sym-class raw_percent{
+ user-declaration
+ public:
+ raw_percent(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_percent::raw_percent(INT Ext_file,size_t Pos){
+ T_CTOR_RW("%",T_raw_percent_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"&" (sym-class raw_ampersign{
+ user-declaration
+ public:
+ raw_ampersign(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_ampersign::raw_ampersign(INT Ext_file,size_t Pos){
+ T_CTOR_RW("&",T_raw_ampersign_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"'" (sym-class raw_right_quote{
+ user-declaration
+ public:
+ raw_right_quote(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_right_quote::raw_right_quote(INT Ext_file,size_t Pos){
+ T_CTOR_RW("'",T_raw_right_quote_,false,false,Ext_file,Pos)}
+ ***
+}) // ` aka apostrophe
+
+"(" (sym-class raw_open_bracket{
+ user-declaration
+ public:
+ raw_open_bracket(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_open_bracket::raw_open_bracket(INT Ext_file,size_t Pos){
+ T_CTOR_RW("(",T_raw_open_bracket_,false,false,Ext_file,Pos)}
+ ***
+})
+
+")" (sym-class raw_close_bracket{
+ user-declaration
+ public:
+ raw_close_bracket(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_close_bracket::raw_close_bracket(INT Ext_file,size_t Pos){
+ T_CTOR_RW(")",T_raw_close_bracket_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"*" (sym-class raw_asteric{
+ user-declaration
+ public:
+ raw_asteric(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_asteric::raw_asteric(INT Ext_file,size_t Pos){
+ T_CTOR_RW("*",T_raw_asteric_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"+" (sym-class raw_plus{
+ user-declaration
+ public:
+ raw_plus(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_plus::raw_plus(INT Ext_file,size_t Pos){
+ T_CTOR_RW("+",T_raw_plus_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"," (sym-class raw_comma{
+ user-declaration
+ public:
+ raw_comma(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_comma::raw_comma(INT Ext_file,size_t Pos){
+ T_CTOR_RW(",",T_raw_comma_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"-" (sym-class raw_minus{
+ user-declaration
+ public:
+ raw_minus(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_minus::raw_minus(INT Ext_file,size_t Pos){
+ T_CTOR_RW("-",T_raw_minus_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"." (sym-class raw_period{
+ user-declaration
+ public:
+ raw_period(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_period::raw_period(INT Ext_file,size_t Pos){
+ T_CTOR_RW(".",T_raw_period_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"/" (sym-class raw_slash{
+ user-declaration
+ public:
+ raw_slash(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_slash::raw_slash(INT Ext_file,size_t Pos){
+ T_CTOR_RW("/",T_raw_slash_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"0" (sym-class raw_0{
+ user-declaration
+ public:
+ raw_0(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_0::raw_0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("0",T_raw_0_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"1" (sym-class raw_1{
+ user-declaration
+ public:
+ raw_1(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_1::raw_1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("1",T_raw_1_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"2" (sym-class raw_2{
+ user-declaration
+ public:
+ raw_2(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_2::raw_2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("2",T_raw_2_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"3" (sym-class raw_3{
+ user-declaration
+ public:
+ raw_3(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_3::raw_3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("3",T_raw_3_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"4" (sym-class raw_4{
+ user-declaration
+ public:
+ raw_4(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_4::raw_4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("4",T_raw_4_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"5" (sym-class raw_5{
+ user-declaration
+ public:
+ raw_5(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_5::raw_5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("5",T_raw_5_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"6" (sym-class raw_6{
+ user-declaration
+ public:
+ raw_6(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_6::raw_6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("6",T_raw_6_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"7" (sym-class raw_7{
+ user-declaration
+ public:
+ raw_7(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_7::raw_7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("7",T_raw_7_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"8" (sym-class raw_8{
+ user-declaration
+ public:
+ raw_8(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_8::raw_8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("8",T_raw_8_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"9" (sym-class raw_9{
+ user-declaration
+ public:
+ raw_9(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_9::raw_9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("9",T_raw_9_,false,false,Ext_file,Pos)}
+ ***
+})
+
+":" (sym-class raw_colon{
+ user-declaration
+ public:
+ raw_colon(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_colon::raw_colon(INT Ext_file,size_t Pos){
+ T_CTOR_RW(":",T_raw_colon_,false,false,Ext_file,Pos)}
+ ***
+})
+
+";" (sym-class raw_semi_colon{
+ user-declaration
+ public:
+ raw_semi_colon(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_semi_colon::raw_semi_colon(INT Ext_file,size_t Pos){
+ T_CTOR_RW(";",T_raw_semi_colon_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"<" (sym-class raw_less_than{
+ user-declaration
+ public:
+ raw_less_than(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_less_than::raw_less_than(INT Ext_file,size_t Pos){
+ T_CTOR_RW("<",T_raw_less_than_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"=" (sym-class raw_eq{
+ user-declaration
+ public:
+ raw_eq(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_eq::raw_eq(INT Ext_file,size_t Pos){
+ T_CTOR_RW("=",T_raw_eq_,false,false,Ext_file,Pos)}
+ ***
+})
+
+">" (sym-class raw_gt_than{
+ user-declaration
+ public:
+ raw_gt_than(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_gt_than::raw_gt_than(INT Ext_file,size_t Pos){
+ T_CTOR_RW(">",T_raw_gt_than_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"?" (sym-class raw_question_mark{
+ user-declaration
+ public:
+ raw_question_mark(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_question_mark::raw_question_mark(INT Ext_file,size_t Pos){
+ T_CTOR_RW("?",T_raw_question_mark_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"@" (sym-class raw_at_sign{
+ user-declaration
+ public:
+ raw_at_sign(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_at_sign::raw_at_sign(INT Ext_file,size_t Pos){
+ T_CTOR_RW("@",T_raw_at_sign_,false,false,Ext_file,Pos)}
+ ***
+})
+
+//
+"A" (sym-class raw_A{
+ user-declaration
+ public:
+ raw_A(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_A::raw_A(INT Ext_file,size_t Pos){
+ T_CTOR_RW("A",T_raw_A_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"B" (sym-class raw_B{
+ user-declaration
+ public:
+ raw_B(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_B::raw_B(INT Ext_file,size_t Pos){
+ T_CTOR_RW("B",T_raw_B_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"C" (sym-class raw_C{
+ user-declaration
+ public:
+ raw_C(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_C::raw_C(INT Ext_file,size_t Pos){
+ T_CTOR_RW("C",T_raw_C_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"D" (sym-class raw_D{
+ user-declaration
+ public:
+ raw_D(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_D::raw_D(INT Ext_file,size_t Pos){
+ T_CTOR_RW("D",T_raw_D_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"E" (sym-class raw_E{
+ user-declaration
+ public:
+ raw_E(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_E::raw_E(INT Ext_file,size_t Pos){
+ T_CTOR_RW("E",T_raw_E_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"F" (sym-class raw_F{
+ user-declaration
+ public:
+ raw_F(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_F::raw_F(INT Ext_file,size_t Pos){
+ T_CTOR_RW("F",T_raw_F_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"G" (sym-class raw_G{
+ user-declaration
+ public:
+ raw_G(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_G::raw_G(INT Ext_file,size_t Pos){
+ T_CTOR_RW("G",T_raw_G_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"H" (sym-class raw_H{
+ user-declaration
+ public:
+ raw_H(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_H::raw_H(INT Ext_file,size_t Pos){
+ T_CTOR_RW("H",T_raw_H_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"I" (sym-class raw_I{
+ user-declaration
+ public:
+ raw_I(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_I::raw_I(INT Ext_file,size_t Pos){
+ T_CTOR_RW("I",T_raw_I_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"J" (sym-class raw_J{
+ user-declaration
+ public:
+ raw_J(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_J::raw_J(INT Ext_file,size_t Pos){
+ T_CTOR_RW("J",T_raw_J_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"K" (sym-class raw_K{
+ user-declaration
+ public:
+ raw_K(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_K::raw_K(INT Ext_file,size_t Pos){
+ T_CTOR_RW("K",T_raw_K_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"L" (sym-class raw_L{
+ user-declaration
+ public:
+ raw_L(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_L::raw_L(INT Ext_file,size_t Pos){
+ T_CTOR_RW("L",T_raw_L_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"M" (sym-class raw_M{
+ user-declaration
+ public:
+ raw_M(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_M::raw_M(INT Ext_file,size_t Pos){
+ T_CTOR_RW("M",T_raw_M_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"N" (sym-class raw_N{
+ user-declaration
+ public:
+ raw_N(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_N::raw_N(INT Ext_file,size_t Pos){
+ T_CTOR_RW("N",T_raw_N_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"O" (sym-class raw_O{
+ user-declaration
+ public:
+ raw_O(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_O::raw_O(INT Ext_file,size_t Pos){
+ T_CTOR_RW("O",T_raw_O_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"P" (sym-class raw_P{
+ user-declaration
+ public:
+ raw_P(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_P::raw_P(INT Ext_file,size_t Pos){
+ T_CTOR_RW("P",T_raw_P_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"Q" (sym-class raw_Q{
+ user-declaration
+ public:
+ raw_Q(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_Q::raw_Q(INT Ext_file,size_t Pos){
+ T_CTOR_RW("Q",T_raw_Q_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"R" (sym-class raw_R{
+ user-declaration
+ public:
+ raw_R(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_R::raw_R(INT Ext_file,size_t Pos){
+ T_CTOR_RW("R",T_raw_R_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"S" (sym-class raw_S{
+ user-declaration
+ public:
+ raw_S(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_S::raw_S(INT Ext_file,size_t Pos){
+ T_CTOR_RW("S",T_raw_S_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"T" (sym-class raw_T{
+ user-declaration
+ public:
+ raw_T(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_T::raw_T(INT Ext_file,size_t Pos){
+ T_CTOR_RW("T",T_raw_T_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"U" (sym-class raw_U{
+ user-declaration
+ public:
+ raw_U(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_U::raw_U(INT Ext_file,size_t Pos){
+ T_CTOR_RW("U",T_raw_U_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"V" (sym-class raw_V{
+ user-declaration
+ public:
+ raw_V(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_V::raw_V(INT Ext_file,size_t Pos){
+ T_CTOR_RW("V",T_raw_V_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"W" (sym-class raw_W{
+ user-declaration
+ public:
+ raw_W(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_W::raw_W(INT Ext_file,size_t Pos){
+ T_CTOR_RW("W",T_raw_W_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"X" (sym-class raw_X{
+ user-declaration
+ public:
+ raw_X(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_X::raw_X(INT Ext_file,size_t Pos){
+ T_CTOR_RW("X",T_raw_X_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"Y" (sym-class raw_Y{
+ user-declaration
+ public:
+ raw_Y(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_Y::raw_Y(INT Ext_file,size_t Pos){
+ T_CTOR_RW("Y",T_raw_Y_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"Z" (sym-class raw_Z{
+ user-declaration
+ public:
+ raw_Z(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_Z::raw_Z(INT Ext_file,size_t Pos){
+ T_CTOR_RW("Z",T_raw_Z_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"[" (sym-class raw_open_sq_bracket{
+ user-declaration
+ public:
+ raw_open_sq_bracket(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_open_sq_bracket::raw_open_sq_bracket(INT Ext_file,size_t Pos){
+ T_CTOR_RW("[",T_raw_open_sq_bracket_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"\\" (sym-class raw_back_slash{
+ user-declaration
+ public:
+ raw_back_slash(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_back_slash::raw_back_slash(INT Ext_file,size_t Pos){
+ T_CTOR_RW("\\",T_raw_back_slash_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"]" (sym-class raw_close_sq_bracket{
+ user-declaration
+ public:
+ raw_close_sq_bracket(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_close_sq_bracket::raw_close_sq_bracket(INT Ext_file,size_t Pos){
+ T_CTOR_RW("]",T_raw_close_sq_bracket_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"^" (sym-class raw_up_arrow{
+ user-declaration
+ public:
+ raw_up_arrow(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_up_arrow::raw_up_arrow(INT Ext_file,size_t Pos){
+ T_CTOR_RW("^",T_raw_up_arrow_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"_" (sym-class raw_under_score{
+ user-declaration
+ public:
+ raw_under_score(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_under_score::raw_under_score(INT Ext_file,size_t Pos){
+ T_CTOR_RW("_",T_raw_under_score_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"`" (sym-class raw_left_quote{
+ user-declaration
+ public:
+ raw_left_quote(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_left_quote::raw_left_quote(INT Ext_file,size_t Pos){
+ T_CTOR_RW("`",T_raw_left_quote_,false,false,Ext_file,Pos)}
+ ***
+})
+
+
+"a" (sym-class raw_a{
+ user-declaration
+ public:
+ raw_a(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_a::raw_a(INT Ext_file,size_t Pos){
+ T_CTOR_RW("a",T_raw_a_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"b" (sym-class raw_b{
+ user-declaration
+ public:
+ raw_b(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_b::raw_b(INT Ext_file,size_t Pos){
+ T_CTOR_RW("b",T_raw_b_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"c" (sym-class raw_c{
+ user-declaration
+ public:
+ raw_c(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_c::raw_c(INT Ext_file,size_t Pos){
+ T_CTOR_RW("c",T_raw_c_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"d" (sym-class raw_d{
+ user-declaration
+ public:
+ raw_d(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_d::raw_d(INT Ext_file,size_t Pos){
+ T_CTOR_RW("d",T_raw_d_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"e" (sym-class raw_e{
+ user-declaration
+ public:
+ raw_e(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_e::raw_e(INT Ext_file,size_t Pos){
+ T_CTOR_RW("e",T_raw_e_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"f" (sym-class raw_f{
+ user-declaration
+ public:
+ raw_f(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_f::raw_f(INT Ext_file,size_t Pos){
+ T_CTOR_RW("f",T_raw_f_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"g" (sym-class raw_g{
+ user-declaration
+ public:
+ raw_g(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_g::raw_g(INT Ext_file,size_t Pos){
+ T_CTOR_RW("g",T_raw_g_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"h" (sym-class raw_h{
+ user-declaration
+ public:
+ raw_h(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_h::raw_h(INT Ext_file,size_t Pos){
+ T_CTOR_RW("h",T_raw_h_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"i" (sym-class raw_i{
+ user-declaration
+ public:
+ raw_i(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_i::raw_i(INT Ext_file,size_t Pos){
+ T_CTOR_RW("i",T_raw_i_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"j" (sym-class raw_j{
+ user-declaration
+ public:
+ raw_j(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_j::raw_j(INT Ext_file,size_t Pos){
+ T_CTOR_RW("j",T_raw_j_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"k" (sym-class raw_k{
+ user-declaration
+ public:
+ raw_k(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_k::raw_k(INT Ext_file,size_t Pos){
+ T_CTOR_RW("k",T_raw_k_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"l" (sym-class raw_l{
+ user-declaration
+ public:
+ raw_l(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_l::raw_l(INT Ext_file,size_t Pos){
+ T_CTOR_RW("l",T_raw_l_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"m" (sym-class raw_m{
+ user-declaration
+ public:
+ raw_m(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_m::raw_m(INT Ext_file,size_t Pos){
+ T_CTOR_RW("m",T_raw_m_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"n" (sym-class raw_n{
+ user-declaration
+ public:
+ raw_n(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_n::raw_n(INT Ext_file,size_t Pos){
+ T_CTOR_RW("n",T_raw_n_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"o" (sym-class raw_o{
+ user-declaration
+ public:
+ raw_o(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_o::raw_o(INT Ext_file,size_t Pos){
+ T_CTOR_RW("o",T_raw_o_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"p" (sym-class raw_p{
+ user-declaration
+ public:
+ raw_p(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_p::raw_p(INT Ext_file,size_t Pos){
+ T_CTOR_RW("p",T_raw_p_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"q" (sym-class raw_q{
+ user-declaration
+ public:
+ raw_q(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_q::raw_q(INT Ext_file,size_t Pos){
+ T_CTOR_RW("q",T_raw_q_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"r" (sym-class raw_r{
+ user-declaration
+ public:
+ raw_r(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_r::raw_r(INT Ext_file,size_t Pos){
+ T_CTOR_RW("r",T_raw_r_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"s" (sym-class raw_s{
+ user-declaration
+ public:
+ raw_s(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_s::raw_s(INT Ext_file,size_t Pos){
+ T_CTOR_RW("s",T_raw_s_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"t" (sym-class raw_t{
+ user-declaration
+ public:
+ raw_t(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_t::raw_t(INT Ext_file,size_t Pos){
+ T_CTOR_RW("t",T_raw_t_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"u" (sym-class raw_u{
+ user-declaration
+ public:
+ raw_u(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_u::raw_u(INT Ext_file,size_t Pos){
+ T_CTOR_RW("u",T_raw_u_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"v" (sym-class raw_v{
+ user-declaration
+ public:
+ raw_v(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_v::raw_v(INT Ext_file,size_t Pos){
+ T_CTOR_RW("v",T_raw_v_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"w" (sym-class raw_w{
+ user-declaration
+ public:
+ raw_w(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_w::raw_w(INT Ext_file,size_t Pos){
+ T_CTOR_RW("w",T_raw_w_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x" (sym-class raw_x{
+ user-declaration
+ public:
+ raw_x(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_x::raw_x(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x",T_raw_x_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"y" (sym-class raw_y{
+ user-declaration
+ public:
+ raw_y(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_y::raw_y(INT Ext_file,size_t Pos){
+ T_CTOR_RW("y",T_raw_y_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"z" (sym-class raw_z{
+ user-declaration
+ public:
+ raw_z(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_z::raw_z(INT Ext_file,size_t Pos){
+ T_CTOR_RW("z",T_raw_z_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"{" (sym-class raw_open_brace{
+ user-declaration
+ public:
+ raw_open_brace(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_open_brace::raw_open_brace(INT Ext_file,size_t Pos){
+ T_CTOR_RW("{",T_raw_open_brace_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"|" (sym-class raw_vertical_line{
+ user-declaration
+ public:
+ raw_vertical_line(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_vertical_line::raw_vertical_line(INT Ext_file,size_t Pos){
+ T_CTOR_RW("|",T_raw_vertical_line_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"}" (sym-class raw_close_brace{
+ user-declaration
+ public:
+ raw_close_brace(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_close_brace::raw_close_brace(INT Ext_file,size_t Pos){
+ T_CTOR_RW("}",T_raw_close_brace_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"~" (sym-class raw_tilde{
+ user-declaration
+ public:
+ raw_tilde(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_tilde::raw_tilde(INT Ext_file,size_t Pos){
+ T_CTOR_RW("~",T_raw_tilde_,false,false,Ext_file,Pos)}
+ ***
+})
+
+"x7f" (sym-class raw_del{
+ user-declaration
+ public:
+ raw_del(INT Ext_file,size_t Pos);
+ ***
+ user-implementation
+ raw_del::raw_del(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x7f",T_raw_del_,false,false,Ext_file,Pos)}
+ ***
+})
+//
+//
+// 8 bit char set
+//
+"x80" (sym-class raw_x80{
+user-declaration
+ public:
+ raw_x80(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x80::raw_x80(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x80",T_raw_x80_,false,false,Ext_file,Pos)}
+***
+})
+
+"x81" (sym-class raw_x81{
+user-declaration
+ public:
+ raw_x81(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x81::raw_x81(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x81",T_raw_x81_,false,false,Ext_file,Pos)}
+***
+})
+
+"x82" (sym-class raw_x82{
+user-declaration
+ public:
+ raw_x82(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x82::raw_x82(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x82",T_raw_x82_,false,false,Ext_file,Pos)}
+***
+})
+
+"x83" (sym-class raw_x83{
+user-declaration
+ public:
+ raw_x83(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x83::raw_x83(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x83",T_raw_x83_,false,false,Ext_file,Pos)}
+***
+})
+
+"x84" (sym-class raw_x84{
+user-declaration
+ public:
+ raw_x84(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x84::raw_x84(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x84",T_raw_x84_,false,false,Ext_file,Pos)}
+***
+})
+
+"x85" (sym-class raw_x85{
+user-declaration
+ public:
+ raw_x85(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x85::raw_x85(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x85",T_raw_x85_,false,false,Ext_file,Pos)}
+***
+})
+
+"x86" (sym-class raw_x86{
+user-declaration
+ public:
+ raw_x86(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x86::raw_x86(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x86",T_raw_x86_,false,false,Ext_file,Pos)}
+***
+})
+
+"x87" (sym-class raw_x87{
+user-declaration
+ public:
+ raw_x87(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x87::raw_x87(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x87",T_raw_x87_,false,false,Ext_file,Pos)}
+***
+})
+
+"x88" (sym-class raw_x88{
+user-declaration
+ public:
+ raw_x88(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x88::raw_x88(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x88",T_raw_x88_,false,false,Ext_file,Pos)}
+***
+})
+
+"x89" (sym-class raw_x89{
+user-declaration
+ public:
+ raw_x89(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x89::raw_x89(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x89",T_raw_x89_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8a" (sym-class raw_x8a{
+user-declaration
+ public:
+ raw_x8a(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8a::raw_x8a(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8a",T_raw_x8a_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8b" (sym-class raw_x8b{
+user-declaration
+ public:
+ raw_x8b(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8b::raw_x8b(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8b",T_raw_x8b_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8c" (sym-class raw_x8c{
+user-declaration
+ public:
+ raw_x8c(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8c::raw_x8c(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8c",T_raw_x8c_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8d" (sym-class raw_x8d{
+user-declaration
+ public:
+ raw_x8d(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8d::raw_x8d(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8d",T_raw_x8d_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8e" (sym-class raw_x8e{
+user-declaration
+ public:
+ raw_x8e(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8e::raw_x8e(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8e",T_raw_x8e_,false,false,Ext_file,Pos)}
+***
+})
+
+"x8f" (sym-class raw_x8f{
+user-declaration
+ public:
+ raw_x8f(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x8f::raw_x8f(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x8f",T_raw_x8f_,false,false,Ext_file,Pos)}
+***
+})
+
+"x90" (sym-class raw_x90{
+user-declaration
+ public:
+ raw_x90(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x90::raw_x90(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x90",T_raw_x90_,false,false,Ext_file,Pos)}
+***
+})
+
+"x91" (sym-class raw_x91{
+user-declaration
+ public:
+ raw_x91(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x91::raw_x91(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x91",T_raw_x91_,false,false,Ext_file,Pos)}
+***
+})
+
+"x92" (sym-class raw_x92{
+user-declaration
+ public:
+ raw_x92(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x92::raw_x92(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x92",T_raw_x92_,false,false,Ext_file,Pos)}
+***
+})
+
+"x93" (sym-class raw_x93{
+user-declaration
+ public:
+ raw_x93(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x93::raw_x93(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x93",T_raw_x93_,false,false,Ext_file,Pos)}
+***
+})
+
+"x94" (sym-class raw_x94{
+user-declaration
+ public:
+ raw_x94(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x94::raw_x94(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x94",T_raw_x94_,false,false,Ext_file,Pos)}
+***
+})
+
+"x95" (sym-class raw_x95{
+user-declaration
+ public:
+ raw_x95(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x95::raw_x95(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x95",T_raw_x95_,false,false,Ext_file,Pos)}
+***
+})
+
+"x96" (sym-class raw_x96{
+user-declaration
+ public:
+ raw_x96(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x96::raw_x96(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x96",T_raw_x96_,false,false,Ext_file,Pos)}
+***
+})
+
+"x97" (sym-class raw_x97{
+user-declaration
+ public:
+ raw_x97(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x97::raw_x97(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x97",T_raw_x97_,false,false,Ext_file,Pos)}
+***
+})
+
+"x98" (sym-class raw_x98{
+user-declaration
+ public:
+ raw_x98(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x98::raw_x98(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x98",T_raw_x98_,false,false,Ext_file,Pos)}
+***
+})
+
+"x99" (sym-class raw_x99{
+user-declaration
+ public:
+ raw_x99(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x99::raw_x99(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x99",T_raw_x99_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9a" (sym-class raw_x9a{
+user-declaration
+ public:
+ raw_x9a(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9a::raw_x9a(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9a",T_raw_x9a_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9b" (sym-class raw_x9b{
+user-declaration
+ public:
+ raw_x9b(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9b::raw_x9b(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9b",T_raw_x9b_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9c" (sym-class raw_x9c{
+user-declaration
+ public:
+ raw_x9c(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9c::raw_x9c(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9c",T_raw_x9c_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9d" (sym-class raw_x9d{
+user-declaration
+ public:
+ raw_x9d(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9d::raw_x9d(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9d",T_raw_x9d_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9e" (sym-class raw_x9e{
+user-declaration
+ public:
+ raw_x9e(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9e::raw_x9e(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9e",T_raw_x9e_,false,false,Ext_file,Pos)}
+***
+})
+
+"x9f" (sym-class raw_x9f{
+user-declaration
+ public:
+ raw_x9f(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_x9f::raw_x9f(INT Ext_file,size_t Pos){
+ T_CTOR_RW("x9f",T_raw_x9f_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa0" (sym-class raw_xa0{
+user-declaration
+ public:
+ raw_xa0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa0::raw_xa0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa0",T_raw_xa0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa1" (sym-class raw_xa1{
+user-declaration
+ public:
+ raw_xa1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa1::raw_xa1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa1",T_raw_xa1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa2" (sym-class raw_xa2{
+user-declaration
+ public:
+ raw_xa2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa2::raw_xa2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa2",T_raw_xa2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa3" (sym-class raw_xa3{
+user-declaration
+ public:
+ raw_xa3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa3::raw_xa3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa3",T_raw_xa3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa4" (sym-class raw_xa4{
+user-declaration
+ public:
+ raw_xa4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa4::raw_xa4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa4",T_raw_xa4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa5" (sym-class raw_xa5{
+user-declaration
+ public:
+ raw_xa5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa5::raw_xa5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa5",T_raw_xa5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa6" (sym-class raw_xa6{
+user-declaration
+ public:
+ raw_xa6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa6::raw_xa6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa6",T_raw_xa6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa7" (sym-class raw_xa7{
+user-declaration
+ public:
+ raw_xa7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa7::raw_xa7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa7",T_raw_xa7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa8" (sym-class raw_xa8{
+user-declaration
+ public:
+ raw_xa8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa8::raw_xa8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa8",T_raw_xa8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xa9" (sym-class raw_xa9{
+user-declaration
+ public:
+ raw_xa9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xa9::raw_xa9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xa9",T_raw_xa9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xaa" (sym-class raw_xaa{
+user-declaration
+ public:
+ raw_xaa(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xaa::raw_xaa(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xaa",T_raw_xaa_,false,false,Ext_file,Pos)}
+***
+})
+
+"xab" (sym-class raw_xab{
+user-declaration
+ public:
+ raw_xab(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xab::raw_xab(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xab",T_raw_xab_,false,false,Ext_file,Pos)}
+***
+})
+
+"xac" (sym-class raw_xac{
+user-declaration
+ public:
+ raw_xac(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xac::raw_xac(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xac",T_raw_xac_,false,false,Ext_file,Pos)}
+***
+})
+
+"xad" (sym-class raw_xad{
+user-declaration
+ public:
+ raw_xad(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xad::raw_xad(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xad",T_raw_xad_,false,false,Ext_file,Pos)}
+***
+})
+
+"xae" (sym-class raw_xae{
+user-declaration
+ public:
+ raw_xae(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xae::raw_xae(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xae",T_raw_xae_,false,false,Ext_file,Pos)}
+***
+})
+
+"xaf" (sym-class raw_xaf{
+user-declaration
+ public:
+ raw_xaf(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xaf::raw_xaf(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xaf",T_raw_xaf_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb0" (sym-class raw_xb0{
+user-declaration
+ public:
+ raw_xb0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb0::raw_xb0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb0",T_raw_xb0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb1" (sym-class raw_xb1{
+user-declaration
+ public:
+ raw_xb1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb1::raw_xb1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb1",T_raw_xb1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb2" (sym-class raw_xb2{
+user-declaration
+ public:
+ raw_xb2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb2::raw_xb2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb2",T_raw_xb2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb3" (sym-class raw_xb3{
+user-declaration
+ public:
+ raw_xb3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb3::raw_xb3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb3",T_raw_xb3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb4" (sym-class raw_xb4{
+user-declaration
+ public:
+ raw_xb4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb4::raw_xb4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb4",T_raw_xb4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb5" (sym-class raw_xb5{
+user-declaration
+ public:
+ raw_xb5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb5::raw_xb5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb5",T_raw_xb5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb6" (sym-class raw_xb6{
+user-declaration
+ public:
+ raw_xb6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb6::raw_xb6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb6",T_raw_xb6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb7" (sym-class raw_xb7{
+user-declaration
+ public:
+ raw_xb7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb7::raw_xb7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb7",T_raw_xb7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb8" (sym-class raw_xb8{
+user-declaration
+ public:
+ raw_xb8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb8::raw_xb8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb8",T_raw_xb8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xb9" (sym-class raw_xb9{
+user-declaration
+ public:
+ raw_xb9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xb9::raw_xb9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xb9",T_raw_xb9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xba" (sym-class raw_xba{
+user-declaration
+ public:
+ raw_xba(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xba::raw_xba(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xba",T_raw_xba_,false,false,Ext_file,Pos)}
+***
+})
+
+"xbb" (sym-class raw_xbb{
+user-declaration
+ public:
+ raw_xbb(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xbb::raw_xbb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xbb",T_raw_xbb_,false,false,Ext_file,Pos)}
+***
+})
+
+"xbc" (sym-class raw_xbc{
+user-declaration
+ public:
+ raw_xbc(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xbc::raw_xbc(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xbc",T_raw_xbc_,false,false,Ext_file,Pos)}
+***
+})
+
+"xbd" (sym-class raw_xbd{
+user-declaration
+ public:
+ raw_xbd(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xbd::raw_xbd(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xbd",T_raw_xbd_,false,false,Ext_file,Pos)}
+***
+})
+
+"xbe" (sym-class raw_xbe{
+user-declaration
+ public:
+ raw_xbe(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xbe::raw_xbe(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xbe",T_raw_xbe_,false,false,Ext_file,Pos)}
+***
+})
+
+"xbf" (sym-class raw_xbf{
+user-declaration
+ public:
+ raw_xbf(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xbf::raw_xbf(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xbf",T_raw_xbf_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc0" (sym-class raw_xc0{
+user-declaration
+ public:
+ raw_xc0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc0::raw_xc0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc0",T_raw_xc0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc1" (sym-class raw_xc1{
+user-declaration
+ public:
+ raw_xc1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc1::raw_xc1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc1",T_raw_xc1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc2" (sym-class raw_xc2{
+user-declaration
+ public:
+ raw_xc2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc2::raw_xc2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc2",T_raw_xc2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc3" (sym-class raw_xc3{
+user-declaration
+ public:
+ raw_xc3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc3::raw_xc3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc3",T_raw_xc3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc4" (sym-class raw_xc4{
+user-declaration
+ public:
+ raw_xc4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc4::raw_xc4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc4",T_raw_xc4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc5" (sym-class raw_xc5{
+user-declaration
+ public:
+ raw_xc5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc5::raw_xc5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc5",T_raw_xc5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc6" (sym-class raw_xc6{
+user-declaration
+ public:
+ raw_xc6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc6::raw_xc6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc6",T_raw_xc6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc7" (sym-class raw_xc7{
+user-declaration
+ public:
+ raw_xc7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc7::raw_xc7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc7",T_raw_xc7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc8" (sym-class raw_xc8{
+user-declaration
+ public:
+ raw_xc8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc8::raw_xc8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc8",T_raw_xc8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xc9" (sym-class raw_xc9{
+user-declaration
+ public:
+ raw_xc9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xc9::raw_xc9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xc9",T_raw_xc9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xca" (sym-class raw_xca{
+user-declaration
+ public:
+ raw_xca(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xca::raw_xca(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xca",T_raw_xca_,false,false,Ext_file,Pos)}
+***
+})
+
+"xcb" (sym-class raw_xcb{
+user-declaration
+ public:
+ raw_xcb(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xcb::raw_xcb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xcb",T_raw_xcb_,false,false,Ext_file,Pos)}
+***
+})
+
+"xcc" (sym-class raw_xcc{
+user-declaration
+ public:
+ raw_xcc(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xcc::raw_xcc(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xcc",T_raw_xcc_,false,false,Ext_file,Pos)}
+***
+})
+
+"xcd" (sym-class raw_xcd{
+user-declaration
+ public:
+ raw_xcd(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xcd::raw_xcd(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xcd",T_raw_xcd_,false,false,Ext_file,Pos)}
+***
+})
+
+"xce" (sym-class raw_xce{
+user-declaration
+ public:
+ raw_xce(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xce::raw_xce(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xce",T_raw_xce_,false,false,Ext_file,Pos)}
+***
+})
+
+"xcf" (sym-class raw_xcf{
+user-declaration
+ public:
+ raw_xcf(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xcf::raw_xcf(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xcf",T_raw_xcf_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd0" (sym-class raw_xd0{
+user-declaration
+ public:
+ raw_xd0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd0::raw_xd0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd0",T_raw_xd0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd1" (sym-class raw_xd1{
+user-declaration
+ public:
+ raw_xd1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd1::raw_xd1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd1",T_raw_xd1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd2" (sym-class raw_xd2{
+user-declaration
+ public:
+ raw_xd2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd2::raw_xd2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd2",T_raw_xd2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd3" (sym-class raw_xd3{
+user-declaration
+ public:
+ raw_xd3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd3::raw_xd3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd3",T_raw_xd3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd4" (sym-class raw_xd4{
+user-declaration
+ public:
+ raw_xd4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd4::raw_xd4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd4",T_raw_xd4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd5" (sym-class raw_xd5{
+user-declaration
+ public:
+ raw_xd5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd5::raw_xd5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd5",T_raw_xd5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd6" (sym-class raw_xd6{
+user-declaration
+ public:
+ raw_xd6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd6::raw_xd6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd6",T_raw_xd6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd7" (sym-class raw_xd7{
+user-declaration
+ public:
+ raw_xd7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd7::raw_xd7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd7",T_raw_xd7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd8" (sym-class raw_xd8{
+user-declaration
+ public:
+ raw_xd8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd8::raw_xd8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd8",T_raw_xd8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xd9" (sym-class raw_xd9{
+user-declaration
+ public:
+ raw_xd9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xd9::raw_xd9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xd9",T_raw_xd9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xda" (sym-class raw_xda{
+user-declaration
+ public:
+ raw_xda(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xda::raw_xda(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xda",T_raw_xda_,false,false,Ext_file,Pos)}
+***
+})
+
+"xdb" (sym-class raw_xdb{
+user-declaration
+ public:
+ raw_xdb(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xdb::raw_xdb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xdb",T_raw_xdb_,false,false,Ext_file,Pos)}
+***
+})
+
+"xdc" (sym-class raw_xdc{
+user-declaration
+ public:
+ raw_xdc(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xdc::raw_xdc(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xdc",T_raw_xdc_,false,false,Ext_file,Pos)}
+***
+})
+
+"xdd" (sym-class raw_xdd{
+user-declaration
+ public:
+ raw_xdd(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xdd::raw_xdd(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xdd",T_raw_xdd_,false,false,Ext_file,Pos)}
+***
+})
+
+"xde" (sym-class raw_xde{
+user-declaration
+ public:
+ raw_xde(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xde::raw_xde(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xde",T_raw_xde_,false,false,Ext_file,Pos)}
+***
+})
+
+"xdf" (sym-class raw_xdf{
+user-declaration
+ public:
+ raw_xdf(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xdf::raw_xdf(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xdf",T_raw_xdf_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe0" (sym-class raw_xe0{
+user-declaration
+ public:
+ raw_xe0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe0::raw_xe0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe0",T_raw_xe0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe1" (sym-class raw_xe1{
+user-declaration
+ public:
+ raw_xe1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe1::raw_xe1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe1",T_raw_xe1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe2" (sym-class raw_xe2{
+user-declaration
+ public:
+ raw_xe2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe2::raw_xe2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe2",T_raw_xe2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe3" (sym-class raw_xe3{
+user-declaration
+ public:
+ raw_xe3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe3::raw_xe3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe3",T_raw_xe3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe4" (sym-class raw_xe4{
+user-declaration
+ public:
+ raw_xe4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe4::raw_xe4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe4",T_raw_xe4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe5" (sym-class raw_xe5{
+user-declaration
+ public:
+ raw_xe5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe5::raw_xe5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe5",T_raw_xe5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe6" (sym-class raw_xe6{
+user-declaration
+ public:
+ raw_xe6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe6::raw_xe6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe6",T_raw_xe6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe7" (sym-class raw_xe7{
+user-declaration
+ public:
+ raw_xe7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe7::raw_xe7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe7",T_raw_xe7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe8" (sym-class raw_xe8{
+user-declaration
+ public:
+ raw_xe8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe8::raw_xe8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe8",T_raw_xe8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xe9" (sym-class raw_xe9{
+user-declaration
+ public:
+ raw_xe9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xe9::raw_xe9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xe9",T_raw_xe9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xea" (sym-class raw_xea{
+user-declaration
+ public:
+ raw_xea(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xea::raw_xea(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xea",T_raw_xea_,false,false,Ext_file,Pos)}
+***
+})
+
+"xeb" (sym-class raw_xeb{
+user-declaration
+ public:
+ raw_xeb(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xeb::raw_xeb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xeb",T_raw_xeb_,false,false,Ext_file,Pos)}
+***
+})
+
+"xec" (sym-class raw_xec{
+user-declaration
+ public:
+ raw_xec(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xec::raw_xec(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xec",T_raw_xec_,false,false,Ext_file,Pos)}
+***
+})
+
+"xed" (sym-class raw_xed{
+user-declaration
+ public:
+ raw_xed(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xed::raw_xed(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xed",T_raw_xed_,false,false,Ext_file,Pos)}
+***
+})
+
+"xee" (sym-class raw_xee{
+user-declaration
+ public:
+ raw_xee(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xee::raw_xee(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xee",T_raw_xee_,false,false,Ext_file,Pos)}
+***
+})
+
+"xef" (sym-class raw_xef{
+user-declaration
+ public:
+ raw_xef(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xef::raw_xef(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xef",T_raw_xef_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf0" (sym-class raw_xf0{
+user-declaration
+ public:
+ raw_xf0(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf0::raw_xf0(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf0",T_raw_xf0_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf1" (sym-class raw_xf1{
+user-declaration
+ public:
+ raw_xf1(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf1::raw_xf1(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf1",T_raw_xf1_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf2" (sym-class raw_xf2{
+user-declaration
+ public:
+ raw_xf2(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf2::raw_xf2(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf2",T_raw_xf2_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf3" (sym-class raw_xf3{
+user-declaration
+ public:
+ raw_xf3(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf3::raw_xf3(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf3",T_raw_xf3_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf4" (sym-class raw_xf4{
+user-declaration
+ public:
+ raw_xf4(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf4::raw_xf4(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf4",T_raw_xf4_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf5" (sym-class raw_xf5{
+user-declaration
+ public:
+ raw_xf5(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf5::raw_xf5(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf5",T_raw_xf5_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf6" (sym-class raw_xf6{
+user-declaration
+ public:
+ raw_xf6(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf6::raw_xf6(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf6",T_raw_xf6_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf7" (sym-class raw_xf7{
+user-declaration
+ public:
+ raw_xf7(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf7::raw_xf7(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf7",T_raw_xf7_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf8" (sym-class raw_xf8{
+user-declaration
+ public:
+ raw_xf8(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf8::raw_xf8(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf8",T_raw_xf8_,false,false,Ext_file,Pos)}
+***
+})
+
+"xf9" (sym-class raw_xf9{
+user-declaration
+ public:
+ raw_xf9(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xf9::raw_xf9(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xf9",T_raw_xf9_,false,false,Ext_file,Pos)}
+***
+})
+
+"xfa" (sym-class raw_xfa{
+user-declaration
+ public:
+ raw_xfa(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xfa::raw_xfa(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xfa",T_raw_xfa_,false,false,Ext_file,Pos)}
+***
+})
+
+"xfb" (sym-class raw_xfb{
+user-declaration
+ public:
+ raw_xfb(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xfb::raw_xfb(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xfb",T_raw_xfb_,false,false,Ext_file,Pos)}
+***
+})
+
+"xfc" (sym-class raw_xfc{
+user-declaration
+ public:
+ raw_xfc(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xfc::raw_xfc(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xfc",T_raw_xfc_,false,false,Ext_file,Pos)}
+***
+})
+
+"xfd" (sym-class raw_xfd{
+user-declaration
+ public:
+ raw_xfd(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xfd::raw_xfd(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xfd",T_raw_xfd_,false,false,Ext_file,Pos)}
+***
+})
+
+"xfe" (sym-class raw_xfe{
+user-declaration
+ public:
+ raw_xfe(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xfe::raw_xfe(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xfe",T_raw_xfe_,false,false,Ext_file,Pos)}
+***
+})
+
+"xff" (sym-class raw_xff{
+user-declaration
+ public:
+ raw_xff(INT Ext_file,size_t Pos);
+***
+user-implementation
+ raw_xff::raw_xff(INT Ext_file,size_t Pos){
+ T_CTOR_RW("xff",T_raw_xff_,false,false,Ext_file,Pos)}
+***
+}
+)
+
+}
diff --git a/web/yacco2/library/grammars/yacco2_characters.cpp b/web/yacco2/library/grammars/yacco2_characters.cpp
new file mode 100644
index 0000000000..b787c15aa5
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_characters.cpp
@@ -0,0 +1,781 @@
+//
+// file: yacco2_characters.cpp
+// Gened Date and Time: Fri Aug 27 10:25:51 2004
+//
+/*
+ Copyright Dave Bone 1998 - 2010
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+*/
+#include "yacco2_characters.h"
+using namespace NS_yacco2_characters;
+using namespace NS_yacco2_T_enum;
+//#include <yacco2_errors.h>
+ raw_nul::raw_nul(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x00",T_Enum::T_raw_nul_,0,false,false,Ext_file,Pos){}
+
+ raw_soh::raw_soh(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x01",T_Enum::T_raw_soh_,0,false,false,Ext_file,Pos){}
+
+ raw_stx::raw_stx(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x02",T_Enum::T_raw_stx_,0,false,false,Ext_file,Pos){}
+
+ raw_etx::raw_etx(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x03",T_Enum::T_raw_etx_,0,false,false,Ext_file,Pos){}
+
+ raw_eot::raw_eot(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x04",T_Enum::T_raw_eot_,0,false,false,Ext_file,Pos){}
+
+ raw_enq::raw_enq(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x05",T_Enum::T_raw_enq_,0,false,false,Ext_file,Pos){}
+
+ raw_ack::raw_ack(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x06",T_Enum::T_raw_ack_,0,false,false,Ext_file,Pos){}
+
+ raw_bel::raw_bel(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x07",T_Enum::T_raw_bel_,0,false,false,Ext_file,Pos){}
+
+ raw_bs::raw_bs(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x08",T_Enum::T_raw_bs_,0,false,false,Ext_file,Pos){}
+
+ raw_ht::raw_ht(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x09",T_Enum::T_raw_ht_,0,false,false,Ext_file,Pos){}
+
+ raw_lf::raw_lf(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0a",T_Enum::T_raw_lf_,0,false,false,Ext_file,Pos){}
+
+ raw_vt::raw_vt(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0b",T_Enum::T_raw_vt_,0,false,false,Ext_file,Pos){}
+
+ raw_ff::raw_ff(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0c",T_Enum::T_raw_ff_,0,false,false,Ext_file,Pos){}
+
+ raw_cr::raw_cr(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0d",T_Enum::T_raw_cr_,0,false,false,Ext_file,Pos){}
+
+ raw_so::raw_so(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0e",T_Enum::T_raw_so_,0,false,false,Ext_file,Pos){}
+
+ raw_si::raw_si(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x0f",T_Enum::T_raw_si_,0,false,false,Ext_file,Pos){}
+
+ raw_dle::raw_dle(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x10",T_Enum::T_raw_dle_,0,false,false,Ext_file,Pos){}
+
+ raw_dc1::raw_dc1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x11",T_Enum::T_raw_dc1_,0,false,false,Ext_file,Pos){}
+
+ raw_dc2::raw_dc2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x12",T_Enum::T_raw_dc2_,0,false,false,Ext_file,Pos){}
+
+ raw_dc3::raw_dc3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x13",T_Enum::T_raw_dc3_,0,false,false,Ext_file,Pos){}
+
+ raw_dc4::raw_dc4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x14",T_Enum::T_raw_dc4_,0,false,false,Ext_file,Pos){}
+
+ raw_nak::raw_nak(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x15",T_Enum::T_raw_nak_,0,false,false,Ext_file,Pos){}
+
+ raw_syn::raw_syn(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x16",T_Enum::T_raw_syn_,0,false,false,Ext_file,Pos){}
+
+ raw_etb::raw_etb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x17",T_Enum::T_raw_etb_,0,false,false,Ext_file,Pos){}
+
+ raw_can::raw_can(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x18",T_Enum::T_raw_can_,0,false,false,Ext_file,Pos){}
+
+ raw_em::raw_em(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x19",T_Enum::T_raw_em_,0,false,false,Ext_file,Pos){}
+
+ raw_sub::raw_sub(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1a",T_Enum::T_raw_sub_,0,false,false,Ext_file,Pos){}
+
+ raw_esc::raw_esc(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1b",T_Enum::T_raw_esc_,0,false,false,Ext_file,Pos){}
+
+ raw_fs::raw_fs(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1c",T_Enum::T_raw_fs_,0,false,false,Ext_file,Pos){}
+
+ raw_gs::raw_gs(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1d",T_Enum::T_raw_gs_,0,false,false,Ext_file,Pos){}
+
+ raw_rs::raw_rs(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1e",T_Enum::T_raw_rs_,0,false,false,Ext_file,Pos){}
+
+ raw_us::raw_us(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x1f",T_Enum::T_raw_us_,0,false,false,Ext_file,Pos){}
+
+ raw_sp::raw_sp(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(" ",T_Enum::T_raw_sp_,0,false,false,Ext_file,Pos){}
+
+ raw_exclam::raw_exclam(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("!",T_Enum::T_raw_exclam_,0,false,false,Ext_file,Pos){}
+
+ raw_dbl_quote::raw_dbl_quote(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("\"",T_Enum::T_raw_dbl_quote_,0,false,false,Ext_file,Pos){}
+
+ raw_no_sign::raw_no_sign(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("#",T_Enum::T_raw_no_sign_,0,false,false,Ext_file,Pos){}
+
+ raw_dollar_sign::raw_dollar_sign(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("$",T_Enum::T_raw_dollar_sign_,0,false,false,Ext_file,Pos){}
+
+ raw_percent::raw_percent(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("%",T_Enum::T_raw_percent_,0,false,false,Ext_file,Pos){}
+
+ raw_ampersign::raw_ampersign(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("&",T_Enum::T_raw_ampersign_,0,false,false,Ext_file,Pos){}
+
+ raw_right_quote::raw_right_quote(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("'",T_Enum::T_raw_right_quote_,0,false,false,Ext_file,Pos){}
+
+ raw_open_bracket::raw_open_bracket(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("(",T_Enum::T_raw_open_bracket_,0,false,false,Ext_file,Pos){}
+
+ raw_close_bracket::raw_close_bracket(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(")",T_Enum::T_raw_close_bracket_,0,false,false,Ext_file,Pos){}
+
+ raw_asteric::raw_asteric(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("*",T_Enum::T_raw_asteric_,0,false,false,Ext_file,Pos){}
+
+ raw_plus::raw_plus(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("+",T_Enum::T_raw_plus_,0,false,false,Ext_file,Pos){}
+
+ raw_comma::raw_comma(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(",",T_Enum::T_raw_comma_,0,false,false,Ext_file,Pos){}
+
+ raw_minus::raw_minus(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("-",T_Enum::T_raw_minus_,0,false,false,Ext_file,Pos){}
+
+ raw_period::raw_period(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(".",T_Enum::T_raw_period_,0,false,false,Ext_file,Pos){}
+
+ raw_slash::raw_slash(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("/",T_Enum::T_raw_slash_,0,false,false,Ext_file,Pos){}
+
+ raw_0::raw_0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("0",T_Enum::T_raw_0_,0,false,false,Ext_file,Pos){}
+
+ raw_1::raw_1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("1",T_Enum::T_raw_1_,0,false,false,Ext_file,Pos){}
+
+ raw_2::raw_2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("2",T_Enum::T_raw_2_,0,false,false,Ext_file,Pos){}
+
+ raw_3::raw_3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("3",T_Enum::T_raw_3_,0,false,false,Ext_file,Pos){}
+
+ raw_4::raw_4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("4",T_Enum::T_raw_4_,0,false,false,Ext_file,Pos){}
+
+ raw_5::raw_5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("5",T_Enum::T_raw_5_,0,false,false,Ext_file,Pos){}
+
+ raw_6::raw_6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("6",T_Enum::T_raw_6_,0,false,false,Ext_file,Pos){}
+
+ raw_7::raw_7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("7",T_Enum::T_raw_7_,0,false,false,Ext_file,Pos){}
+
+ raw_8::raw_8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("8",T_Enum::T_raw_8_,0,false,false,Ext_file,Pos){}
+
+ raw_9::raw_9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("9",T_Enum::T_raw_9_,0,false,false,Ext_file,Pos){}
+
+ raw_colon::raw_colon(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(":",T_Enum::T_raw_colon_,0,false,false,Ext_file,Pos){}
+
+ raw_semi_colon::raw_semi_colon(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(";",T_Enum::T_raw_semi_colon_,0,false,false,Ext_file,Pos){}
+
+ raw_less_than::raw_less_than(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("<",T_Enum::T_raw_less_than_,0,false,false,Ext_file,Pos){}
+
+ raw_eq::raw_eq(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("=",T_Enum::T_raw_eq_,0,false,false,Ext_file,Pos){}
+
+ raw_gt_than::raw_gt_than(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW(">",T_Enum::T_raw_gt_than_,0,false,false,Ext_file,Pos){}
+
+ raw_question_mark::raw_question_mark(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("?",T_Enum::T_raw_question_mark_,0,false,false,Ext_file,Pos){}
+
+ raw_at_sign::raw_at_sign(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("@",T_Enum::T_raw_at_sign_,0,false,false,Ext_file,Pos){}
+
+ raw_A::raw_A(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("A",T_Enum::T_raw_A_,0,false,false,Ext_file,Pos){}
+
+ raw_B::raw_B(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("B",T_Enum::T_raw_B_,0,false,false,Ext_file,Pos){}
+
+ raw_C::raw_C(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("C",T_Enum::T_raw_C_,0,false,false,Ext_file,Pos){}
+
+ raw_D::raw_D(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("D",T_Enum::T_raw_D_,0,false,false,Ext_file,Pos){}
+
+ raw_E::raw_E(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("E",T_Enum::T_raw_E_,0,false,false,Ext_file,Pos){}
+
+ raw_F::raw_F(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("F",T_Enum::T_raw_F_,0,false,false,Ext_file,Pos){}
+
+ raw_G::raw_G(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("G",T_Enum::T_raw_G_,0,false,false,Ext_file,Pos){}
+
+ raw_H::raw_H(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("H",T_Enum::T_raw_H_,0,false,false,Ext_file,Pos){}
+
+ raw_I::raw_I(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("I",T_Enum::T_raw_I_,0,false,false,Ext_file,Pos){}
+
+ raw_J::raw_J(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("J",T_Enum::T_raw_J_,0,false,false,Ext_file,Pos){}
+
+ raw_K::raw_K(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("K",T_Enum::T_raw_K_,0,false,false,Ext_file,Pos){}
+
+ raw_L::raw_L(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("L",T_Enum::T_raw_L_,0,false,false,Ext_file,Pos){}
+
+ raw_M::raw_M(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("M",T_Enum::T_raw_M_,0,false,false,Ext_file,Pos){}
+
+ raw_N::raw_N(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("N",T_Enum::T_raw_N_,0,false,false,Ext_file,Pos){}
+
+ raw_O::raw_O(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("O",T_Enum::T_raw_O_,0,false,false,Ext_file,Pos){}
+
+ raw_P::raw_P(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("P",T_Enum::T_raw_P_,0,false,false,Ext_file,Pos){}
+
+ raw_Q::raw_Q(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("Q",T_Enum::T_raw_Q_,0,false,false,Ext_file,Pos){}
+
+ raw_R::raw_R(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("R",T_Enum::T_raw_R_,0,false,false,Ext_file,Pos){}
+
+ raw_S::raw_S(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("S",T_Enum::T_raw_S_,0,false,false,Ext_file,Pos){}
+
+ raw_T::raw_T(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("T",T_Enum::T_raw_T_,0,false,false,Ext_file,Pos){}
+
+ raw_U::raw_U(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("U",T_Enum::T_raw_U_,0,false,false,Ext_file,Pos){}
+
+ raw_V::raw_V(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("V",T_Enum::T_raw_V_,0,false,false,Ext_file,Pos){}
+
+ raw_W::raw_W(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("W",T_Enum::T_raw_W_,0,false,false,Ext_file,Pos){}
+
+ raw_X::raw_X(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("X",T_Enum::T_raw_X_,0,false,false,Ext_file,Pos){}
+
+ raw_Y::raw_Y(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("Y",T_Enum::T_raw_Y_,0,false,false,Ext_file,Pos){}
+
+ raw_Z::raw_Z(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("Z",T_Enum::T_raw_Z_,0,false,false,Ext_file,Pos){}
+
+ raw_open_sq_bracket::raw_open_sq_bracket(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("[",T_Enum::T_raw_open_sq_bracket_,0,false,false,Ext_file,Pos){}
+
+ raw_back_slash::raw_back_slash(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("\\",T_Enum::T_raw_back_slash_,0,false,false,Ext_file,Pos){}
+
+ raw_close_sq_bracket::raw_close_sq_bracket(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("]",T_Enum::T_raw_close_sq_bracket_,0,false,false,Ext_file,Pos){}
+
+ raw_up_arrow::raw_up_arrow(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("^",T_Enum::T_raw_up_arrow_,0,false,false,Ext_file,Pos){}
+
+ raw_under_score::raw_under_score(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("_",T_Enum::T_raw_under_score_,0,false,false,Ext_file,Pos){}
+
+ raw_left_quote::raw_left_quote(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("`",T_Enum::T_raw_left_quote_,0,false,false,Ext_file,Pos){}
+
+ raw_a::raw_a(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("a",T_Enum::T_raw_a_,0,false,false,Ext_file,Pos){}
+
+ raw_b::raw_b(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("b",T_Enum::T_raw_b_,0,false,false,Ext_file,Pos){}
+
+ raw_c::raw_c(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("c",T_Enum::T_raw_c_,0,false,false,Ext_file,Pos){}
+
+ raw_d::raw_d(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("d",T_Enum::T_raw_d_,0,false,false,Ext_file,Pos){}
+
+ raw_e::raw_e(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("e",T_Enum::T_raw_e_,0,false,false,Ext_file,Pos){}
+
+ raw_f::raw_f(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("f",T_Enum::T_raw_f_,0,false,false,Ext_file,Pos){}
+
+ raw_g::raw_g(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("g",T_Enum::T_raw_g_,0,false,false,Ext_file,Pos){}
+
+ raw_h::raw_h(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("h",T_Enum::T_raw_h_,0,false,false,Ext_file,Pos){}
+
+ raw_i::raw_i(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("i",T_Enum::T_raw_i_,0,false,false,Ext_file,Pos){}
+
+ raw_j::raw_j(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("j",T_Enum::T_raw_j_,0,false,false,Ext_file,Pos){}
+
+ raw_k::raw_k(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("k",T_Enum::T_raw_k_,0,false,false,Ext_file,Pos){}
+
+ raw_l::raw_l(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("l",T_Enum::T_raw_l_,0,false,false,Ext_file,Pos){}
+
+ raw_m::raw_m(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("m",T_Enum::T_raw_m_,0,false,false,Ext_file,Pos){}
+
+ raw_n::raw_n(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("n",T_Enum::T_raw_n_,0,false,false,Ext_file,Pos){}
+
+ raw_o::raw_o(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("o",T_Enum::T_raw_o_,0,false,false,Ext_file,Pos){}
+
+ raw_p::raw_p(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("p",T_Enum::T_raw_p_,0,false,false,Ext_file,Pos){}
+
+ raw_q::raw_q(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("q",T_Enum::T_raw_q_,0,false,false,Ext_file,Pos){}
+
+ raw_r::raw_r(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("r",T_Enum::T_raw_r_,0,false,false,Ext_file,Pos){}
+
+ raw_s::raw_s(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("s",T_Enum::T_raw_s_,0,false,false,Ext_file,Pos){}
+
+ raw_t::raw_t(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("t",T_Enum::T_raw_t_,0,false,false,Ext_file,Pos){}
+
+ raw_u::raw_u(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("u",T_Enum::T_raw_u_,0,false,false,Ext_file,Pos){}
+
+ raw_v::raw_v(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("v",T_Enum::T_raw_v_,0,false,false,Ext_file,Pos){}
+
+ raw_w::raw_w(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("w",T_Enum::T_raw_w_,0,false,false,Ext_file,Pos){}
+
+ raw_x::raw_x(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x",T_Enum::T_raw_x_,0,false,false,Ext_file,Pos){}
+
+ raw_y::raw_y(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("y",T_Enum::T_raw_y_,0,false,false,Ext_file,Pos){}
+
+ raw_z::raw_z(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("z",T_Enum::T_raw_z_,0,false,false,Ext_file,Pos){}
+
+ raw_open_brace::raw_open_brace(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("{",T_Enum::T_raw_open_brace_,0,false,false,Ext_file,Pos){}
+
+ raw_vertical_line::raw_vertical_line(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("|",T_Enum::T_raw_vertical_line_,0,false,false,Ext_file,Pos){}
+
+ raw_close_brace::raw_close_brace(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("}",T_Enum::T_raw_close_brace_,0,false,false,Ext_file,Pos){}
+
+ raw_tilde::raw_tilde(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("~",T_Enum::T_raw_tilde_,0,false,false,Ext_file,Pos){}
+
+ raw_del::raw_del(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x7f",T_Enum::T_raw_del_,0,false,false,Ext_file,Pos){}
+
+ raw_x80::raw_x80(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x80",T_Enum::T_raw_x80_,0,false,false,Ext_file,Pos){}
+
+ raw_x81::raw_x81(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x81",T_Enum::T_raw_x81_,0,false,false,Ext_file,Pos){}
+
+ raw_x82::raw_x82(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x82",T_Enum::T_raw_x82_,0,false,false,Ext_file,Pos){}
+
+ raw_x83::raw_x83(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x83",T_Enum::T_raw_x83_,0,false,false,Ext_file,Pos){}
+
+ raw_x84::raw_x84(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x84",T_Enum::T_raw_x84_,0,false,false,Ext_file,Pos){}
+
+ raw_x85::raw_x85(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x85",T_Enum::T_raw_x85_,0,false,false,Ext_file,Pos){}
+
+ raw_x86::raw_x86(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x86",T_Enum::T_raw_x86_,0,false,false,Ext_file,Pos){}
+
+ raw_x87::raw_x87(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x87",T_Enum::T_raw_x87_,0,false,false,Ext_file,Pos){}
+
+ raw_x88::raw_x88(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x88",T_Enum::T_raw_x88_,0,false,false,Ext_file,Pos){}
+
+ raw_x89::raw_x89(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x89",T_Enum::T_raw_x89_,0,false,false,Ext_file,Pos){}
+
+ raw_x8a::raw_x8a(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8a",T_Enum::T_raw_x8a_,0,false,false,Ext_file,Pos){}
+
+ raw_x8b::raw_x8b(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8b",T_Enum::T_raw_x8b_,0,false,false,Ext_file,Pos){}
+
+ raw_x8c::raw_x8c(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8c",T_Enum::T_raw_x8c_,0,false,false,Ext_file,Pos){}
+
+ raw_x8d::raw_x8d(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8d",T_Enum::T_raw_x8d_,0,false,false,Ext_file,Pos){}
+
+ raw_x8e::raw_x8e(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8e",T_Enum::T_raw_x8e_,0,false,false,Ext_file,Pos){}
+
+ raw_x8f::raw_x8f(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x8f",T_Enum::T_raw_x8f_,0,false,false,Ext_file,Pos){}
+
+ raw_x90::raw_x90(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x90",T_Enum::T_raw_x90_,0,false,false,Ext_file,Pos){}
+
+ raw_x91::raw_x91(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x91",T_Enum::T_raw_x91_,0,false,false,Ext_file,Pos){}
+
+ raw_x92::raw_x92(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x92",T_Enum::T_raw_x92_,0,false,false,Ext_file,Pos){}
+
+ raw_x93::raw_x93(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x93",T_Enum::T_raw_x93_,0,false,false,Ext_file,Pos){}
+
+ raw_x94::raw_x94(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x94",T_Enum::T_raw_x94_,0,false,false,Ext_file,Pos){}
+
+ raw_x95::raw_x95(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x95",T_Enum::T_raw_x95_,0,false,false,Ext_file,Pos){}
+
+ raw_x96::raw_x96(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x96",T_Enum::T_raw_x96_,0,false,false,Ext_file,Pos){}
+
+ raw_x97::raw_x97(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x97",T_Enum::T_raw_x97_,0,false,false,Ext_file,Pos){}
+
+ raw_x98::raw_x98(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x98",T_Enum::T_raw_x98_,0,false,false,Ext_file,Pos){}
+
+ raw_x99::raw_x99(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x99",T_Enum::T_raw_x99_,0,false,false,Ext_file,Pos){}
+
+ raw_x9a::raw_x9a(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9a",T_Enum::T_raw_x9a_,0,false,false,Ext_file,Pos){}
+
+ raw_x9b::raw_x9b(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9b",T_Enum::T_raw_x9b_,0,false,false,Ext_file,Pos){}
+
+ raw_x9c::raw_x9c(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9c",T_Enum::T_raw_x9c_,0,false,false,Ext_file,Pos){}
+
+ raw_x9d::raw_x9d(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9d",T_Enum::T_raw_x9d_,0,false,false,Ext_file,Pos){}
+
+ raw_x9e::raw_x9e(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9e",T_Enum::T_raw_x9e_,0,false,false,Ext_file,Pos){}
+
+ raw_x9f::raw_x9f(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("x9f",T_Enum::T_raw_x9f_,0,false,false,Ext_file,Pos){}
+
+ raw_xa0::raw_xa0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa0",T_Enum::T_raw_xa0_,0,false,false,Ext_file,Pos){}
+
+ raw_xa1::raw_xa1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa1",T_Enum::T_raw_xa1_,0,false,false,Ext_file,Pos){}
+
+ raw_xa2::raw_xa2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa2",T_Enum::T_raw_xa2_,0,false,false,Ext_file,Pos){}
+
+ raw_xa3::raw_xa3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa3",T_Enum::T_raw_xa3_,0,false,false,Ext_file,Pos){}
+
+ raw_xa4::raw_xa4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa4",T_Enum::T_raw_xa4_,0,false,false,Ext_file,Pos){}
+
+ raw_xa5::raw_xa5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa5",T_Enum::T_raw_xa5_,0,false,false,Ext_file,Pos){}
+
+ raw_xa6::raw_xa6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa6",T_Enum::T_raw_xa6_,0,false,false,Ext_file,Pos){}
+
+ raw_xa7::raw_xa7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa7",T_Enum::T_raw_xa7_,0,false,false,Ext_file,Pos){}
+
+ raw_xa8::raw_xa8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa8",T_Enum::T_raw_xa8_,0,false,false,Ext_file,Pos){}
+
+ raw_xa9::raw_xa9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xa9",T_Enum::T_raw_xa9_,0,false,false,Ext_file,Pos){}
+
+ raw_xaa::raw_xaa(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xaa",T_Enum::T_raw_xaa_,0,false,false,Ext_file,Pos){}
+
+ raw_xab::raw_xab(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xab",T_Enum::T_raw_xab_,0,false,false,Ext_file,Pos){}
+
+ raw_xac::raw_xac(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xac",T_Enum::T_raw_xac_,0,false,false,Ext_file,Pos){}
+
+ raw_xad::raw_xad(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xad",T_Enum::T_raw_xad_,0,false,false,Ext_file,Pos){}
+
+ raw_xae::raw_xae(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xae",T_Enum::T_raw_xae_,0,false,false,Ext_file,Pos){}
+
+ raw_xaf::raw_xaf(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xaf",T_Enum::T_raw_xaf_,0,false,false,Ext_file,Pos){}
+
+ raw_xb0::raw_xb0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb0",T_Enum::T_raw_xb0_,0,false,false,Ext_file,Pos){}
+
+ raw_xb1::raw_xb1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb1",T_Enum::T_raw_xb1_,0,false,false,Ext_file,Pos){}
+
+ raw_xb2::raw_xb2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb2",T_Enum::T_raw_xb2_,0,false,false,Ext_file,Pos){}
+
+ raw_xb3::raw_xb3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb3",T_Enum::T_raw_xb3_,0,false,false,Ext_file,Pos){}
+
+ raw_xb4::raw_xb4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb4",T_Enum::T_raw_xb4_,0,false,false,Ext_file,Pos){}
+
+ raw_xb5::raw_xb5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb5",T_Enum::T_raw_xb5_,0,false,false,Ext_file,Pos){}
+
+ raw_xb6::raw_xb6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb6",T_Enum::T_raw_xb6_,0,false,false,Ext_file,Pos){}
+
+ raw_xb7::raw_xb7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb7",T_Enum::T_raw_xb7_,0,false,false,Ext_file,Pos){}
+
+ raw_xb8::raw_xb8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb8",T_Enum::T_raw_xb8_,0,false,false,Ext_file,Pos){}
+
+ raw_xb9::raw_xb9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xb9",T_Enum::T_raw_xb9_,0,false,false,Ext_file,Pos){}
+
+ raw_xba::raw_xba(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xba",T_Enum::T_raw_xba_,0,false,false,Ext_file,Pos){}
+
+ raw_xbb::raw_xbb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xbb",T_Enum::T_raw_xbb_,0,false,false,Ext_file,Pos){}
+
+ raw_xbc::raw_xbc(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xbc",T_Enum::T_raw_xbc_,0,false,false,Ext_file,Pos){}
+
+ raw_xbd::raw_xbd(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xbd",T_Enum::T_raw_xbd_,0,false,false,Ext_file,Pos){}
+
+ raw_xbe::raw_xbe(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xbe",T_Enum::T_raw_xbe_,0,false,false,Ext_file,Pos){}
+
+ raw_xbf::raw_xbf(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xbf",T_Enum::T_raw_xbf_,0,false,false,Ext_file,Pos){}
+
+ raw_xc0::raw_xc0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc0",T_Enum::T_raw_xc0_,0,false,false,Ext_file,Pos){}
+
+ raw_xc1::raw_xc1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc1",T_Enum::T_raw_xc1_,0,false,false,Ext_file,Pos){}
+
+ raw_xc2::raw_xc2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc2",T_Enum::T_raw_xc2_,0,false,false,Ext_file,Pos){}
+
+ raw_xc3::raw_xc3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc3",T_Enum::T_raw_xc3_,0,false,false,Ext_file,Pos){}
+
+ raw_xc4::raw_xc4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc4",T_Enum::T_raw_xc4_,0,false,false,Ext_file,Pos){}
+
+ raw_xc5::raw_xc5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc5",T_Enum::T_raw_xc5_,0,false,false,Ext_file,Pos){}
+
+ raw_xc6::raw_xc6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc6",T_Enum::T_raw_xc6_,0,false,false,Ext_file,Pos){}
+
+ raw_xc7::raw_xc7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc7",T_Enum::T_raw_xc7_,0,false,false,Ext_file,Pos){}
+
+ raw_xc8::raw_xc8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc8",T_Enum::T_raw_xc8_,0,false,false,Ext_file,Pos){}
+
+ raw_xc9::raw_xc9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xc9",T_Enum::T_raw_xc9_,0,false,false,Ext_file,Pos){}
+
+ raw_xca::raw_xca(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xca",T_Enum::T_raw_xca_,0,false,false,Ext_file,Pos){}
+
+ raw_xcb::raw_xcb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xcb",T_Enum::T_raw_xcb_,0,false,false,Ext_file,Pos){}
+
+ raw_xcc::raw_xcc(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xcc",T_Enum::T_raw_xcc_,0,false,false,Ext_file,Pos){}
+
+ raw_xcd::raw_xcd(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xcd",T_Enum::T_raw_xcd_,0,false,false,Ext_file,Pos){}
+
+ raw_xce::raw_xce(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xce",T_Enum::T_raw_xce_,0,false,false,Ext_file,Pos){}
+
+ raw_xcf::raw_xcf(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xcf",T_Enum::T_raw_xcf_,0,false,false,Ext_file,Pos){}
+
+ raw_xd0::raw_xd0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd0",T_Enum::T_raw_xd0_,0,false,false,Ext_file,Pos){}
+
+ raw_xd1::raw_xd1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd1",T_Enum::T_raw_xd1_,0,false,false,Ext_file,Pos){}
+
+ raw_xd2::raw_xd2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd2",T_Enum::T_raw_xd2_,0,false,false,Ext_file,Pos){}
+
+ raw_xd3::raw_xd3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd3",T_Enum::T_raw_xd3_,0,false,false,Ext_file,Pos){}
+
+ raw_xd4::raw_xd4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd4",T_Enum::T_raw_xd4_,0,false,false,Ext_file,Pos){}
+
+ raw_xd5::raw_xd5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd5",T_Enum::T_raw_xd5_,0,false,false,Ext_file,Pos){}
+
+ raw_xd6::raw_xd6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd6",T_Enum::T_raw_xd6_,0,false,false,Ext_file,Pos){}
+
+ raw_xd7::raw_xd7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd7",T_Enum::T_raw_xd7_,0,false,false,Ext_file,Pos){}
+
+ raw_xd8::raw_xd8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd8",T_Enum::T_raw_xd8_,0,false,false,Ext_file,Pos){}
+
+ raw_xd9::raw_xd9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xd9",T_Enum::T_raw_xd9_,0,false,false,Ext_file,Pos){}
+
+ raw_xda::raw_xda(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xda",T_Enum::T_raw_xda_,0,false,false,Ext_file,Pos){}
+
+ raw_xdb::raw_xdb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xdb",T_Enum::T_raw_xdb_,0,false,false,Ext_file,Pos){}
+
+ raw_xdc::raw_xdc(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xdc",T_Enum::T_raw_xdc_,0,false,false,Ext_file,Pos){}
+
+ raw_xdd::raw_xdd(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xdd",T_Enum::T_raw_xdd_,0,false,false,Ext_file,Pos){}
+
+ raw_xde::raw_xde(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xde",T_Enum::T_raw_xde_,0,false,false,Ext_file,Pos){}
+
+ raw_xdf::raw_xdf(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xdf",T_Enum::T_raw_xdf_,0,false,false,Ext_file,Pos){}
+
+ raw_xe0::raw_xe0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe0",T_Enum::T_raw_xe0_,0,false,false,Ext_file,Pos){}
+
+ raw_xe1::raw_xe1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe1",T_Enum::T_raw_xe1_,0,false,false,Ext_file,Pos){}
+
+ raw_xe2::raw_xe2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe2",T_Enum::T_raw_xe2_,0,false,false,Ext_file,Pos){}
+
+ raw_xe3::raw_xe3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe3",T_Enum::T_raw_xe3_,0,false,false,Ext_file,Pos){}
+
+ raw_xe4::raw_xe4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe4",T_Enum::T_raw_xe4_,0,false,false,Ext_file,Pos){}
+
+ raw_xe5::raw_xe5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe5",T_Enum::T_raw_xe5_,0,false,false,Ext_file,Pos){}
+
+ raw_xe6::raw_xe6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe6",T_Enum::T_raw_xe6_,0,false,false,Ext_file,Pos){}
+
+ raw_xe7::raw_xe7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe7",T_Enum::T_raw_xe7_,0,false,false,Ext_file,Pos){}
+
+ raw_xe8::raw_xe8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe8",T_Enum::T_raw_xe8_,0,false,false,Ext_file,Pos){}
+
+ raw_xe9::raw_xe9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xe9",T_Enum::T_raw_xe9_,0,false,false,Ext_file,Pos){}
+
+ raw_xea::raw_xea(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xea",T_Enum::T_raw_xea_,0,false,false,Ext_file,Pos){}
+
+ raw_xeb::raw_xeb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xeb",T_Enum::T_raw_xeb_,0,false,false,Ext_file,Pos){}
+
+ raw_xec::raw_xec(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xec",T_Enum::T_raw_xec_,0,false,false,Ext_file,Pos){}
+
+ raw_xed::raw_xed(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xed",T_Enum::T_raw_xed_,0,false,false,Ext_file,Pos){}
+
+ raw_xee::raw_xee(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xee",T_Enum::T_raw_xee_,0,false,false,Ext_file,Pos){}
+
+ raw_xef::raw_xef(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xef",T_Enum::T_raw_xef_,0,false,false,Ext_file,Pos){}
+
+ raw_xf0::raw_xf0(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf0",T_Enum::T_raw_xf0_,0,false,false,Ext_file,Pos){}
+
+ raw_xf1::raw_xf1(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf1",T_Enum::T_raw_xf1_,0,false,false,Ext_file,Pos){}
+
+ raw_xf2::raw_xf2(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf2",T_Enum::T_raw_xf2_,0,false,false,Ext_file,Pos){}
+
+ raw_xf3::raw_xf3(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf3",T_Enum::T_raw_xf3_,0,false,false,Ext_file,Pos){}
+
+ raw_xf4::raw_xf4(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf4",T_Enum::T_raw_xf4_,0,false,false,Ext_file,Pos){}
+
+ raw_xf5::raw_xf5(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf5",T_Enum::T_raw_xf5_,0,false,false,Ext_file,Pos){}
+
+ raw_xf6::raw_xf6(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf6",T_Enum::T_raw_xf6_,0,false,false,Ext_file,Pos){}
+
+ raw_xf7::raw_xf7(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf7",T_Enum::T_raw_xf7_,0,false,false,Ext_file,Pos){}
+
+ raw_xf8::raw_xf8(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf8",T_Enum::T_raw_xf8_,0,false,false,Ext_file,Pos){}
+
+ raw_xf9::raw_xf9(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xf9",T_Enum::T_raw_xf9_,0,false,false,Ext_file,Pos){}
+
+ raw_xfa::raw_xfa(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xfa",T_Enum::T_raw_xfa_,0,false,false,Ext_file,Pos){}
+
+ raw_xfb::raw_xfb(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xfb",T_Enum::T_raw_xfb_,0,false,false,Ext_file,Pos){}
+
+ raw_xfc::raw_xfc(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xfc",T_Enum::T_raw_xfc_,0,false,false,Ext_file,Pos){}
+
+ raw_xfd::raw_xfd(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xfd",T_Enum::T_raw_xfd_,0,false,false,Ext_file,Pos){}
+
+ raw_xfe::raw_xfe(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xfe",T_Enum::T_raw_xfe_,0,false,false,Ext_file,Pos){}
+
+ raw_xff::raw_xff(yacco2::UINT Ext_file,size_t Pos)
+ T_CTOR_RW("xff",T_Enum::T_raw_xff_,0,false,false,Ext_file,Pos){}
+
diff --git a/web/yacco2/library/grammars/yacco2_characters.h b/web/yacco2/library/grammars/yacco2_characters.h
new file mode 100644
index 0000000000..bf9adfa096
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_characters.h
@@ -0,0 +1,1043 @@
+//
+// file: yacco2_characters.h
+// Gened Date and Time: Tue Oct 05 09:12:09 2004
+//
+/*
+ Copyright Dave Bone 1998 - 2010
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+*/
+#include <yacco2_T_enumeration.h>
+#include <yacco2_k_symbols.h>
+//#include <yacco2_err_symbols.h>
+#include <yacco2.h>
+#ifndef __yacco2_characters_h__
+#define __yacco2_characters_h__
+namespace NS_yacco2_characters{
+
+using namespace NS_yacco2_T_enum;
+struct raw_nul:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_nul(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_soh:public yacco2::CAbs_lr1_sym{
+ public: raw_soh(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_stx:public yacco2::CAbs_lr1_sym{
+ public: raw_stx(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_etx:public yacco2::CAbs_lr1_sym{
+ public: raw_etx(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_eot:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_eot(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_enq:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_enq(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_ack:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_ack(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_bel:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_bel(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_bs:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_bs(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_ht:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_ht(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_lf:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_lf(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_vt:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_vt(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_ff:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_ff(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_cr:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_cr(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_so:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_so(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_si:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_si(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dle:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dle(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dc1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dc1(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dc2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dc2(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dc3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dc3(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dc4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dc4(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_nak:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_nak(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_syn:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_syn(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_etb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_etb(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_can:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_can(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_em:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_em(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_sub:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_sub(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_esc:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_esc(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_fs:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_fs(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_gs:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_gs(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_rs:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_rs(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_us:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_us(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_sp:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_sp(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_exclam:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_exclam(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dbl_quote:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dbl_quote(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_no_sign:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_no_sign(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_dollar_sign:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_dollar_sign(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_percent:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_percent(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_ampersign:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_ampersign(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_right_quote:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_right_quote(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_open_bracket:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_open_bracket(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_close_bracket:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_close_bracket(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_asteric:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_asteric(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_plus:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_plus(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_comma:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_comma(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_minus:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_minus(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_period:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_period(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_slash:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_slash(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_0(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_1(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_2(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_3(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_4(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_5(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_6(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_7(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_8(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_9(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_colon:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_colon(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_semi_colon:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_semi_colon(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_less_than:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_less_than(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_eq:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_eq(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_gt_than:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_gt_than(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_question_mark:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_question_mark(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_at_sign:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_at_sign(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_A:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_A(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_B:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_B(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_C:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_C(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_D:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_D(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_E:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_E(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_F:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_F(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_G:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_G(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_H:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_H(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_I:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_I(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_J:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_J(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_K:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_K(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_L:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_L(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_M:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_M(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_N:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_N(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_O:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_O(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_P:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_P(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_Q:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_Q(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_R:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_R(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_S:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_S(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_T:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_T(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_U:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_U(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_V:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_V(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_W:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_W(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_X:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_X(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_Y:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_Y(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_Z:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_Z(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_open_sq_bracket:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_open_sq_bracket(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_back_slash:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_back_slash(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_close_sq_bracket:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_close_sq_bracket(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_up_arrow:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_up_arrow(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_under_score:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_under_score(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_left_quote:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_left_quote(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_a:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_a(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_b:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_b(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_c:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_c(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_d:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_d(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_e:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_e(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_f:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_f(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_g:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_g(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_h:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_h(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_i:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_i(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_j:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_j(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_k:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_k(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_l:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_l(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_m:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_m(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_n:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_n(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_o:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_o(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_p:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_p(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_q:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_q(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_r:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_r(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_s:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_s(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_t:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_t(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_u:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_u(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_v:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_v(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_w:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_w(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_x:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_y:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_y(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_z:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_z(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_open_brace:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_open_brace(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_vertical_line:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_vertical_line(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_close_brace:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_close_brace(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_tilde:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_tilde(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_del:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_del(yacco2::UINT Ext_file,size_t Pos);
+ };
+struct raw_x80:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x80(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x81:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x81(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x82:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x82(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x83:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x83(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x84:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x84(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x85:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x85(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x86:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x86(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x87:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x87(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x88:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x88(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x89:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x89(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8a:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8a(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8b:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8b(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8c:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8c(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8d:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8d(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8e:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8e(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x8f:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x8f(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x90:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x90(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x91:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x91(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x92:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x92(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x93:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x93(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x94:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x94(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x95:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x95(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x96:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x96(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x97:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x97(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x98:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x98(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x99:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x99(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9a:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9a(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9b:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9b(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9c:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9c(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9d:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9d(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9e:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9e(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_x9f:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_x9f(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xa9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xa9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xaa:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xaa(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xab:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xab(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xac:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xac(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xad:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xad(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xae:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xae(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xaf:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xaf(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xb9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xb9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xba:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xba(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xbb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xbb(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xbc:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xbc(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xbd:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xbd(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xbe:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xbe(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xbf:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xbf(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xc9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xc9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xca:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xca(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xcb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xcb(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xcc:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xcc(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xcd:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xcd(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xce:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xce(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xcf:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xcf(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xd9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xd9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xda:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xda(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xdb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xdb(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xdc:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xdc(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xdd:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xdd(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xde:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xde(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xdf:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xdf(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xe9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xe9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xea:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xea(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xeb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xeb(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xec:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xec(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xed:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xed(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xee:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xee(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xef:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xef(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf0:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf0(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf1:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf1(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf2:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf2(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf3:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf3(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf4:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf4(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf5:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf5(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf6:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf6(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf7:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf7(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf8:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf8(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xf9:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xf9(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xfa:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xfa(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xfb:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xfb(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xfc:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xfc(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xfd:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xfd(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xfe:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xfe(yacco2::UINT Ext_file,size_t Pos);
+};
+struct raw_xff:public yacco2::CAbs_lr1_sym{
+ public:
+ raw_xff(yacco2::UINT Ext_file,size_t Pos);
+};
+
+}//namespace
+#endif
+
diff --git a/web/yacco2/library/grammars/yacco2_k_symbols.T b/web/yacco2/library/grammars/yacco2_k_symbols.T
new file mode 100644
index 0000000000..1841fa12b7
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_k_symbols.T
@@ -0,0 +1,296 @@
+/*
+ Copyright Dave Bone 1998 - 2011
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+
+File: yacco2_k_symbols.lex
+Date: 15 Sept.99
+Author: Dave Bone
+*/
+/@
+@i "/yacco2/library/copyright.w"
+@** K symbols vocabulary.\fbreak
+Ahh the ``Constant grammar'' symbols used throughout all grammars.
+Depending on the command line options \O2 can generate the grammar
+and possibly the various flavours of the Terminal vocabulary.
+Under normal development, the grammar writer
+compiles and emits just the grammar.
+Flavours of the terminal vocabulary are not usually generated unless
+there have been changes
+to either {\bf error} or
+{\bf terminal} with accompaning command line option.
+At the
+initial ``big bang'' of bootstrapping \O2's library and compiler / compiler,
+both {\bf raw characters} and {\bf lr k} terminals were generated
+using their command line options
+{/rc} and {/lrk}. The command line option
+now uses an Unix style {-t, -err} and
+these 2 terminal types ``lrk'' and ``raw characters''
+are now cast in cement: u cannot regen them
+ from their ``*.T'' file definitions but
+u can change their ``big bang'' generated ``c++'' modules.
+These terminals are now read-only:
+they will never be changed by a user of \O2 and who'd want to anyway?.
+
+The hardwired ``k'' terminals are used by \O2's library
+ for internal parsing situations.
+Apart from {\bf eog} who represents
+the end-of-grammar and end-of-file conditions,
+all other definitions are not part of the token source
+ stream being parsed.
+I call them meta terminals
+as they are never in the token stream but
+represent internal parsing conditions within the emitted
+finite-state table that triggers the \O2's library routines.
+For example, the presence of \paralleloperator within
+a parse state
+indicates the potential ``to run'' threads.
+If u look carefully, their file definitions and
+implementations reside in \O2's ``../yacco2/library/grammars'' folder.
+Their definition files are ``yacco2\_k\_symbols.T'' and
+``yacco2\_characters.T'' with
+their ``c++'' variants having the ``.h'' and ''.cpp'' extensions.
+@/
+lr1-constant-symbols
+(file-name yacco2_k_symbols
+,name-space NS_yacco2_k_symbols){
+"|?|"
+ /@
+ Represents a questionable grammar situation.
+It pinpoints programmed error points within the grammar.
+The subrule using this symbol has a lr(0) reduction as
+the lookahead is not kosher and so would probably not reduce
+in the lr(1) context.
+It can be used both in the following grammar expressions:\fbreak
+\INDENT{1.5cm}{1) \subrule \QUEshift}
+\INDENT{1.5cm}{2) \subrule \PARshift \quad \QUEshift \quad NULL}
+Point 1 covers the state where the current token being parsed
+is improper. Point 2 is more interesting as it captures
+a returned terminal that the thread passes back as an error.
+
+The \QUEshift was not one of the original
+``k'' terminals. It replaced the ``eof'' terminal
+which was marginal in intent.
+I felt the \QUEshift symbol drew the reader's eye of the grammar where
+``faulty'' points where captured and to force lr(0) context processing
+to reduce its subrule.
+Why lr(0) context? Glad u asked, the lookahead terminal --- the current
+terminal being parsed, is in error and
+so ``how is the subrule with the \QUEshift to reduce after its shifted T?''.
+It must be divorced of any lookahead and just acted upon.
+
+Now another question arises: ``how is this condition detected in
+a parsing state of
+mixed conditions --- threading, shifting, reducing''?
+There is a pecking order on the conditions tried by the parser:\fbreak
+\INDENT{1.5cm}{$\circ$ threading}
+\INDENT{2.5cm}{if tried and unsuccessful the balance of conditions are attempted}
+\INDENT{1.5cm}{$\circ$ shifts pecking order by their presence in current parse state:}
+\INDENT{2.5cm}{can the current token be shifted?}
+\INDENT{2.5cm}{\QUEshift --- error condition}
+\INDENT{2.5cm}{\INVshift --- explicit \emptyrule}
+\INDENT{2.5cm}{\ALLshift --- any terminial}
+\INDENT{1.5cm}{$\circ$ reduce}
+\INDENT{2.5cm}{note shifting is favoured over reducing}
+ @/
+
+ (sym-class LR1_questionable_shift_operator{
+ user-declaration
+ LR1_questionable_shift_operator();
+ ***
+ user-implementation
+ LR1_questionable_shift_operator::LR1_questionable_shift_operator()
+ T_CTOR("|?|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_questionable_shift_operator LR1_questionable_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_questionable_shift_operator__
+= &LR1_questionable_shift_operator__;
+ ***
+ }
+)
+
+ eog
+ /@
+ Used to indicate an end-of-grammar or an end-of-file condition.
+ When the token container is reached, calls for another terminal
+ will always return the |eog|.
+ It's your door bouncer before hell.
+ @/
+(sym-class LR1_eog{
+ user-declaration
+ LR1_eog();
+ ***
+ user-implementation
+ LR1_eog::LR1_eog()
+ T_CTOR("eog",T_LR1_eog_,0,false,false)
+ {}
+ LR1_eog LR1_eog__;
+ yacco2::CAbs_lr1_sym* yacco2::PTR_LR1_eog__ = &LR1_eog__;
+ ***
+ }
+)
+
+ eolr
+ /@
+ Used to indicate all-terminals of the
+ terminal vocabulary including itself.
+ It saves finger blisters by not having
+ to be explicit in the thread's lookahead expression.
+ Dieting hasn't been this effective to code bloat.
+ @/
+
+ (sym-class LR1_eolr{
+ user-declaration
+ LR1_eolr();
+ ***
+ user-implementation
+ LR1_eolr::LR1_eolr()
+ T_CTOR("eolr",T_LR1_eolr_,0,false,false)
+ {}
+ LR1_eolr LR1_eolr__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_eolr__ = &LR1_eolr__;
+ ***
+ }
+)
+
+ "|||"
+ /@
+ Its presence within the individual state of
+ the ``fsm'' table dictates potential threads to run.
+ You see it sprinkled throughout my grammars
+ to call threads.
+ This is part of \O2's raison d'{\^e}tre.
+ @/
+
+ (sym-class LR1_parallel_operator{
+ user-declaration
+ LR1_parallel_operator();
+ ***
+ user-implementation
+ LR1_parallel_operator::LR1_parallel_operator()
+ T_CTOR("|||",T_LR1_parallel_operator_,0,false,false)
+ {}
+ LR1_parallel_operator LR1_parallel_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_parallel_operator__
+= &LR1_parallel_operator__;
+ ***
+ }
+)
+
+ "|r|" AD AB
+ /@
+ Its presence within the individual state of
+ the ``fsm'' table is to force a reduce operation.
+ Why? it's a back-to-back
+ situation within the state table whereby a thread should reduce
+ while its reducing lookahead is the \paralleloperator indicating to run a thread.
+ @/
+
+ (sym-class LR1_reduce_operator)
+
+
+ "|.|"
+ /@
+ It's a nice way to program
+ out of an ambiguous grammar.
+ It can also lower the code bloat
+ of a thread's first set.
+ @/
+ (sym-class LR1_invisible_shift_operator{
+ user-declaration
+ LR1_invisible_shift_operator();
+ ***
+ user-implementation
+ LR1_invisible_shift_operator::LR1_invisible_shift_operator()
+ T_CTOR("|.|",T_LR1_invisible_shift_operator_,0,false,false)
+ {}
+ LR1_invisible_shift_operator LR1_invisible_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__
+ = &LR1_invisible_shift_operator__;
+ ***
+ }
+)
+
+"|+|"
+ /@
+ Represents the wild token situation.
+ Lowers the specific shifts of the finite-state-table and
+ allows the grammar writer to field the unexpected from returned
+ threads. Good stuff.
+
+Caveat: One should use the \QUEshift to field unknow return Tes if
+they are to be interpreted as errors.
+ @/
+
+ (sym-class LR1_all_shift_operator{
+ user-declaration
+ LR1_all_shift_operator();
+ ***
+ user-implementation
+ LR1_all_shift_operator::LR1_all_shift_operator()
+ T_CTOR("|+|",T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_all_shift_operator LR1_all_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_all_shift_operator__
+= &LR1_all_shift_operator__;
+ ***
+ }
+)
+"|t|" AD AB
+ /@
+ \TRAshift has dual purposes: used in \O2linker to process the transient
+ first sets generated by threads, and used within a grammar's
+``chained call procedure'' expression to lower thread overhead by
+calling a procedure with explicit intent on double use of its
+``first set'' token.
+I'll give an example of a ``chained procedure call'' expression drawn from
+the ``pass3.lex'' grammar handling the grammar's file include expression:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rprefile\_inc\_dispatcher}
+\fbreak
+The ``Rprefile\_inc\_dispatcher'' grammar rule has the following subrule:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule \TRAshift "file-inclusion" NS\_prefile\_include::PROC\_TH\_prefile\_include}
+\fbreak
+The ``chained'' part is in the duplicating of ``\ATsign'';
+that is, the parsing mechanism does not get a new terminal when shifted but
+passes this T onto the called procedure.
+The called PROC\_TH\_prefile\_include procedure / thread has its
+start rule as:\fbreak
+\fbreak
+\INDENT{1cm}{\subrule "\ATsign" Rpossible\_ws Rfile\_string Reof}
+\fbreak
+The repeated use of ``\ATsign'' was to reenforce the idea
+that the procedure called cuz of ``\ATsign'': there's that ``first set'' again.
+Well time will pass its comments on this thought process.
+ @/
+ (sym-class LR1_fset_transience_operator{
+ user-declaration
+ LR1_fset_transience_operator();
+ ***
+ user-implementation
+ LR1_fset_transience_operator::LR1_fset_transience_operator()
+ T_CTOR("|t|",T_LR1_fset_transience_operator_,0,false,false)
+ {}
+ LR1_fset_transience_operator LR1_fset_transience_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__
+ = &LR1_fset_transience_operator__;
+ ***
+ }
+)
+
+/@
+As they are constants, they are defined globally
+to save space / overhead in the typical new create / delete
+cycle of terminals. Thar's recycling going on in this green space.
+@/
+lrk-sufx
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_fset_transience_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_invisible_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_questionable_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_all_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+***
+}
+
diff --git a/web/yacco2/library/grammars/yacco2_k_symbols.cpp b/web/yacco2/library/grammars/yacco2_k_symbols.cpp
new file mode 100644
index 0000000000..30d5bf17b0
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_k_symbols.cpp
@@ -0,0 +1,58 @@
+//
+// file: yacco2_k_symbols.cpp
+// Gened Date and Time: Mon Aug 30 09:49:20 2004
+//
+/*
+ Copyright Dave Bone 1998 - 2010
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+*/
+#include "yacco2_k_symbols.h"
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_T_enum;
+ LR1_eog::LR1_eog()
+ T_CTOR("eog",T_Enum::T_LR1_eog_,0,false,false)
+ {}
+ LR1_eog LR1_eog__;
+ yacco2::CAbs_lr1_sym* yacco2::PTR_LR1_eog__ = &LR1_eog__;
+
+ LR1_eolr::LR1_eolr()
+ T_CTOR("eolr",T_Enum::T_LR1_eolr_,0,false,false)
+ {}
+ LR1_eolr LR1_eolr__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_eolr__ = &LR1_eolr__;
+
+ LR1_parallel_operator::LR1_parallel_operator()
+ T_CTOR("|||",T_Enum::T_LR1_parallel_operator_,0,false,false)
+ {}
+ LR1_parallel_operator LR1_parallel_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_parallel_operator__ = &LR1_parallel_operator__;
+
+LR1_reduce_operator::
+LR1_reduce_operator()
+ T_CTOR("|r|",T_Enum::T_LR1_reduce_operator_,0,true,true)
+{}
+LR1_invisible_shift_operator::LR1_invisible_shift_operator()
+ T_CTOR("|.|",T_Enum::T_LR1_invisible_shift_operator_,0,false,false)
+ {}
+ LR1_invisible_shift_operator LR1_invisible_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__ = &LR1_invisible_shift_operator__;
+
+ LR1_all_shift_operator::LR1_all_shift_operator()
+ T_CTOR("|+|",T_Enum::T_LR1_all_shift_operator_,0,false,false)
+ {}
+ LR1_all_shift_operator LR1_all_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_all_shift_operator__ = &LR1_all_shift_operator__;
+
+LR1_fset_transience_operator::LR1_fset_transience_operator()
+ T_CTOR("|t|",T_Enum::T_LR1_fset_transience_operator_,0,false,false)
+ {}
+ LR1_fset_transience_operator LR1_fset_transience_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__
+ = &LR1_fset_transience_operator__;
+
+ LR1_questionable_shift_operator::LR1_questionable_shift_operator()
+ T_CTOR("|?|",T_Enum::T_LR1_questionable_shift_operator_,0,false,false)
+ {}
+ LR1_questionable_shift_operator LR1_questionable_shift_operator__;
+ yacco2::CAbs_lr1_sym* NS_yacco2_k_symbols::PTR_LR1_questionable_shift_operator__ = &LR1_questionable_shift_operator__;
diff --git a/web/yacco2/library/grammars/yacco2_k_symbols.h b/web/yacco2/library/grammars/yacco2_k_symbols.h
new file mode 100644
index 0000000000..4f9d3afcef
--- /dev/null
+++ b/web/yacco2/library/grammars/yacco2_k_symbols.h
@@ -0,0 +1,58 @@
+//
+// file: yacco2_k_symbols.h
+// Gened Date and Time: Tue Oct 05 09:12:09 2004
+//
+/*
+ Copyright Dave Bone 1998 - 2010
+ All Rights Reserved.
+ No part of this document may be reproduced without written consent from the author.
+*/
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#ifndef __yacco2_k_symbols_h__
+#define __yacco2_k_symbols_h__
+namespace NS_yacco2_k_symbols{
+
+using namespace NS_yacco2_T_enum;
+using namespace yacco2;
+struct LR1_questionable_shift_operator:public CAbs_lr1_sym{
+ LR1_questionable_shift_operator();
+};
+
+struct LR1_eog:public CAbs_lr1_sym{
+ LR1_eog();
+ };
+struct LR1_eolr:public CAbs_lr1_sym{
+ LR1_eolr();
+ };
+struct LR1_parallel_operator:public CAbs_lr1_sym{
+ LR1_parallel_operator();
+ };
+struct LR1_reduce_operator:public CAbs_lr1_sym{
+ LR1_reduce_operator();
+};
+
+/*
+struct LR1_procedure_call_operator:public CAbs_lr1_sym{
+ LR1_procedure_call_operator();
+};
+*/
+struct LR1_invisible_shift_operator:public CAbs_lr1_sym{
+ LR1_invisible_shift_operator();
+ };
+struct LR1_all_shift_operator:public CAbs_lr1_sym{
+ LR1_all_shift_operator();
+ };
+struct LR1_fset_transience_operator:public CAbs_lr1_sym{
+ LR1_fset_transience_operator();
+};
+
+extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_fset_transience_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_invisible_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_questionable_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_all_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+
+}//namespace
+#endif
diff --git a/web/yacco2/library/intro.w b/web/yacco2/library/intro.w
new file mode 100644
index 0000000000..d7a087ece0
--- /dev/null
+++ b/web/yacco2/library/intro.w
@@ -0,0 +1,482 @@
+@q file: intro.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Summary of Yacco2's user library.\fbreak
+These are the building blocks of various definitions
+ for all derived code emitted from Yacco2 with their runtime objects.
+All code blocks are genereted by
+|cweb|'s ctangle program drawn from their
+source file names having an extension of ``.w''.
+Points 8 and 9 are created from the |thread.w| source.
+The following are the outputted files:\fbreak
+\ptindent{1) |yacco2.h| --- common definitions for all implementations and use}
+\ptindent{2) |yacco2.cpp| --- common parts of yacco2's library created from this document}
+\ptindent{3) |wthread.cpp| --- thread components}
+\ptindent{4) |wrc.cpp| --- raw characters mapping into terminals}
+\ptindent{5) |wset.cpp| --- set routines for the finite automaton tables}
+\ptindent{6) |wpp_core.cpp| |wproc_pp_core.cpp| --- include code for generated pp threads}
+\ptindent{6.5) |wpp_core.cpp| thread, while |wproc_pp_core.cpp| procedure call version}
+\ptindent{7) |wtok_can.cpp| --- specialized token containers: reads chr from file and string}
+\ptindent{8) |war_begin_code.h| --- arbitrator's start code}
+\ptindent{9) |war_end_code.h| --- arbitrator's end code}
+\ptindent{10) |wtree.cpp| --- tree container, walkers, and functors}
+
+The 3 files generated outside this environment and referenced within Yacco2's library:\fbreak
+\ptindent{1) |yacco2_k_symbols.h| --- lr k terminal definitions}
+\ptindent{2) |yacco2_characters.h| --- raw character terminal definitions}
+\ptindent{3) |yacco2_T_enumeration.h| --- enumeration of symbols}
+
+Some Yacco2 memorabilia:\fbreak
+\ptindent{1) yacco2 --- library namespace}
+\ptindent{2) directory --- ``\Whereyacco2/library''}
+\ptindent{3) |wlibrary.w| --- yacco2's |cweb| document}
+\ptindent{4) Look at the |Global macro definitions| and |Typedef| for limitations}
+
+At the end of this document is a |Notes to myself| section that you should read.
+These are a quasi set of ramblings on old / new reasons for changes, whys of the
+current implementation, and items for future redress.
+Please have a browse during this document reading. The notes are in an order
+of my programming thought zones while being developed.
+
+@*2 Introduction to Yacco2's parse library.\fbreak
+Welcome to |Yacco2|'s library.
+This is the |oracle| of |typedefs|,
+|macros| of assorted functionality, and |constant| definitions.
+By having a common source code generator of definitions for the library,
+it should make this project easier to maintain and evolve.
+Instead of using the basic type definitions of the \CPLUSPLUS/ language,
+I felt the |typedef| facility will make it easier to port
+the project onto another platform of nbit evolution ---
+ahh the crazy world of bit envy 16...32...64 etc.
+Any inconsistency within the c language like |char| and
+its smorgasbord of
+flavors should be minimized by this approach to handling
+ the pain-no-gain syndrome of supported systems.
+
+Now I'm a fan of macros as it gives a nice way
+to dynamicly generate source code patterns. Unfortunately,
+the c language preprocessor was a hack that people are still living with
+while the PDP11 macro assembler facility of bygone years
+ from now defunct Digital Equipment Corporation
+had class.
+All this to say, I am still using macros but trying to
+restrict their use.
+Within this project, macros provide the tracing facilities
+for the emitted grammar code, and the library's debug version.
+From experience with this library first written in \CPLUSPLUS/, various refinements to the tracing
+output were needed.
+When one parses a large file
+having possibly hundreds of threaded grammars running dynamically
+within a session, if all tracing classifications are turned on, the traced session output
+can get rather large.
+Message tracing alone is
+very verbous but at least you have options to track down problems.
+This was very helpful when I relied on Microsoft's take on messaging.
+When threads become latent due to dropped messages
+(unexpressed limitation of the number of messages allowed in their Window queue),
+at least I could re-evaluate how I would roll my own. Well you'll see later how
+I re-implemented message queues with mutexes.
+
+Now |cweb| provides various flavors of macros. Some macros use parametric
+substitution per c source line. A great feature of |cweb| is its code
+snippet insertion facility. The description of the code section provides
+a better reading of the code. One is not caught up with the details but
+the intent.
+I consider it a version of pseudo-programming in the real or is it a real
+coding in the pseudo?
+So the following is an re-engineering of Yacco2's library from
+\CPLUSPLUS/ code to |cweb|.
+
+@*2 Using Yacco2.\fbreak
+ Where are those damn objects?
+Make sure your \CPLUSPLUS/ compiler and linker are given the directions to where the
+|#include "yacco2.h"| file resides and Yacco2's appropriate object library.
+For example, the Yacco2 environment to use and link to are as follows:\fbreak
+\ptindent{\Whereyacco2/library - where the include file resides}
+\ptindent{\Whereyacco2/library/xxxx - where xxxx is debug or release for the object library}
+Within the ``Visual studio \CPLUSPLUS/'' product, one can provide the appropriate
+directions within the project properties and preprocessor symbol definitions used
+to control code inclusion. One can also create an Environment variable in NT
+by going to the `System panel', choosing `System properties' followed by `Advanced properties'.
+You can possiblely use `Yacco2' and `Yacco2lib' as the variable names: it's to your taste.
+The HP \CPLUSPLUS/ product and linker can be expressed by command line parameters.
+
+@*2 Overview of Yacco2's components:.\fbreak
+Still under thought construction --- procastinating am i...?
+
+@*2 Rules of the name.\fbreak
+ There are not too many dictates. I try to give
+meaningful names to the components, be it methods, variables, or
+symbols.
+I lean a little too far in verbousity as in the Germanic description given to a symbol's name.
+Use of |cweb| will lower this trait.
+Cryptic names don't have a long life
+in their intent: future readings of the code usually requires
+ a rebuilding of code comprehension. Typical coding comments
+ are not enough. There are usually unspoken premises that trip up the
+ programmer.
+This is why, for me, `Literate programming' is the
+only way to go with its adjunct |mpost| diagrams (Meta Post).
+I say this in an asymtompic way as perfection is the carrot before the coder
+striving for a moment's perfection that is just a drop in the programming space.
+Too many programmers are stuck in the one dimension of code: `just get it done'
+that becomes a debugging issue of learning that does not get reframed into
+documentation. Judge accordingly my
+attempt at the how,why,when,where,what,and whom are expressed.
+This is a quasi diary of my internal debats, mistakes, and evolutionary
+corrections in comprehension to programming Yacco2.
+
+Rule number one: Use the imperative verb form to express a method name.
+For example to read or set a variable named xxx, the imperative actions can be
+|read_xxx| having no parameter, and |set_xxx| with it's appropriate parameter.
+From experience, overloading the method name by presence or absence of a
+parameter tempts error.
+I am more disciplined on the setting of variables due to past trapings.
+Regards to reading of a vaiable value, I'm more relaxed
+as you will see some variations.
+
+You'll find for efficiency reasons, I access the variables directly instead of thru
+the wrapper function:
+yes I know the arguments of ``OO'' but inlining in my opinion got fumbled.
+
+@ Legend of terms.\fbreak
+\ptindent{th - thread}
+\ptindent{pp - grammar requesting parallel parse}
+\ptindent{ar - arbitrator}
+
+@*2 The preprocessor coding game.\fbreak
+To cope with variations in
+source code, the
+\CPLUSPLUS/ preprocessor's \#if directives are used.
+The |#if|'s constant expression is used where
+ appropriate values are tested using the |#if| / \#elif preprocessor expressions.
+The |yacco2_compiler_symbols.h| file contains the 2 preprocessor symbols for compilation
+of \O2: |THREAD_LIBRARY_TO_USE__| --- Pthreads(0) or Microsoft(1) thread library,
+ and |THREAD_VS_PROC_CALL__| --- run by thread(0) or by a procedure call(1).
+|THREAD_VS_PROC_CALL__| is an optimization attempt or a bailout when the platform being
+ported to has threading problems. Please see ``Notes to myself'' as to why it's been removed.
+
+Initially the below symbols were
+used to control the inclusion of tracing code by the macro preprocessor.
+This really was a pain-in-the-???. As the number of options increased,
+how many \O2 library variations do u need? So now there are only 2
+\O2 library flavours: clean-no-chafe tracing code and all-u-can-trace.
+To achieve this binary approach to \O2 libraries, {\bf instead of conditionals},
+{\bf global tracing variables} are now used
+ that are checked at runtime
+to exercise their tracing behaviors.
+
+The run program that uses the \O2 library
+can use the |YACCO2_define_trace_variables| macro
+ to generate the tracing variable definitions.
+U can still do it the hard way by individually coding each definition but why
+not use this short cut?
+So far these tracing global definitions
+take a binary value of 0 indicating do-not-trace while 1 means use it.
+There is a very slight run speed bump having their runtime presence within
+\O2's library and whether it's
+nobler to trace or not...but
+their benefits outweight their hiccups.
+One can turn on or off there use anywhere through one's code.
+@^Directory of variable variables controlling various macros@>
+Directory of variables:\fbreak
+\ptindent{|YACCO2_T__| --- trace terminal when fetched}
+\ptindent{|YACCO2_TLEX__| --- trace macros of emitted grammar: rules and user emergency macros}
+\ptindent{|YACCO2_MSG__| --- trace thread messages}
+\ptindent{|YACCO2_MU_TRACING__| --- trace acquire / release of trace mutex}
+\ptindent{|YACCO2_MU_TH_TBL__| --- trace acquire / release mutex of thread table}
+\ptindent{|YACCO2_MU_GRAMMAR__| --- trace acquire / release each grammar's mutex}
+\ptindent{|YACCO2_TH__| --- trace the parse stack: fsa and syntax directed activities }
+\ptindent{|YACCO2_AR__| --- trace arbitrator procedure}
+\ptindent{|YACCO2_THP__| --- trace thread performance}
+\ptindent{|VMS__| --- Alpha VMS port to correct their Pthread limitations}
+\ptindent{|VMS_PTHREAD_STACK_SIZE__| see bug's talk and |yacco2_compile_symbols.h|}
+They are enrobed by namespace yacco2.
+To set the trace variable be sure the namespace is delared: either explicitly
+as in: \fbreak
+\ptindent{|yacco2::YACCO2_T__| = 1;}
+ or implicitly by a ``using namespace yacco2;'' statement
+somewhere preceding the assignment:\fbreak
+\ptindent{using namespace yacco2;}
+\ptindent{...}
+\ptindent{|YACCO2_T__| = 1;}
+
+@*2 Thread library use.\fbreak
+ |THREAD_LIBRARY_TO_USE__| indicates what thread
+library to gen up. {\bf It is a macro conditional symbol}.
+There are currently 2 libraries supported:
+Microsoft's thread support and the |Pthread| POSIX library.
+Both libraries have been used. The Pthread library of 32 and 64 bit flavours was tested on
+HP's VMS operating system --- Alpha hardware, Apple's OS X PowerPC laptop, and Sun's Solaris
+Ultra M20 AMD 64 bit dual core work station.
+As |THREAD_LIBRARY_TO_USE__| is binary valued for now,
+the value 1 selects the Microsoft thread library while
+the value 0 selects the |Pthread| library.
+
+@*2 Parsing trace variables.\fbreak
+ To help in debugging a grammar, the following
+variables symbols are defined:
+|YACCO2_T__|
+, |YACCO2_TH__|
+, |YACCO2_TLEX__|
+, |YACCO2_MSG__|
+, |YACCO2_MU_GRAMMAR__|
+, and |YACCO2_AR__|.
+So far the tracing facilities fall into 3 catagories:
+trace the token when fetched, trace the message correspondence between
+threads, and trace the parsing stack of the grammar per action taken.
+Each symbol name tries by use of a suffix to indicate
+its functionality.
+For example, |_MSG__| suffix controls tracing of
+the messages between all threads and process.
+Specific arbitrator functor uses the |_AR__| suffix.
+These are workers supporting
+parallel parsing per grammar that require arbitration and thread control.
+
+The symbols are all binary expressions where ``1'' (one) includes their functionality.
+As parallel parsing can use many threads, to refine the volume of traced output,
+macros that use these symbols |YACCO2_TLEX__|
+,|YACCO2_TH__|
+, and |YACCO2_AR__| also test whether
+their associated grammar has the fsm's debug parameter value of
+`true'.
+|YACCO2_TLEX__| symbol controls the specific tracings that are
+emitted by |Yacco2| in the \CPLUSPLUS/ code per rule.
+
+|YACCO2_MU_xxx__| helps to verify that mutexes are properly acquired and released.
+There are 2 contexts that mutexes are used:\fbreak
+\ptindent{1) global mutexes --- thread table and tracing}
+\ptindent{2) grammar mutex}
+To aid in identifying a grammar mutex, |(UN)LOCK_MUTEX_OF_CALLED_PARSER|
+ external routines were created so
+that the grammar's context could be
+passed as a parameter. This allowed
+one to trace the grammar's name and assigned thread no.
+Why are |LOCK_MUTEX| and |UNLOCK_MUTEX| routines not sufficient?
+There are contexts where the parse context is too far
+down the chain of calls to pass the parser context or there is no parser context
+availible: eg, handle tracing by the grammar writer outside the parser context.
+
+@*2 Thread performance.\fbreak
+ To get a feel of why threads are a tad sluglish,
+the |YACCO2_THP__| conditional was invented. It allows one to see the serpentine meanderings
+of how the thread library works: flow control dodos.
+
+When the environment is a single cpu, the flow control is how the cpu relinquishes
+control to the various threads. As cpus are added,
+this serpentine tracking becomes non-deterministic:
+That is, the traces are parallel or branched competing on the same race trace side-by-side
+where the number of lanes is the number of cpus actively running.
+
+
+@*2 Section organization.\fbreak
+To control the output of various |cweb| code sections,
+the section names and their order are as follows:
+
+|@<Include...@>|,|@<Type...@>|,|@<Struct...@>|, and |@<External rtns and variables@>|.
+As include statements can take on different definitions:
+type, constant, structures, sometimes the dependency of the include file order
+is important
+particularly when the files are outside one's developmental control
+or there are circular references.
+For structures not defined yet but referenced, at the point of use,
+the standard \CPLUSPLUS/ statement will be added infront of the to-be-defined structure.
+Maybe a bit imperfect but pratical.
+So this is my take...
+
+@*2 C macros.\fbreak
+ Conditionally defined macros for tracing.
+They are bracketed by the conditional preprocessor code
+controlling their inclusion.
+@<c macros@>= // c macros
+
+@*2 Include files.\fbreak
+To start things off, these are the Standard Template Library (STL)
+includes needed by Yacco2.
+@<Include files@>=
+@<iSTL@>;
+
+@i "/usr/local/yacco2/library/gbl_defs.w"
+@*2 Typedef definitions.\fbreak
+ These are the basic types to aid in
+porting or maintaining the code. Other sections
+will add to this section as they get developed.
+@<Type defs@>=
+typedef const char* KCHARP;
+typedef unsigned char UCHAR;
+typedef char CHAR;
+typedef UCHAR* UCHARP;
+typedef unsigned short int USINT;
+typedef short int SINT;
+typedef CHAR* CHARP;
+typedef const void* KVOIDP;
+typedef void* VOIDP;
+typedef int INT;
+typedef unsigned int UINT;
+typedef unsigned int ULINT;
+typedef void (*FN_DTOR)(VOIDP This,VOIDP Parser);
+typedef UCHARP LA_set_type;
+typedef LA_set_type LA_set_ptr;@/
+struct CAbs_lr1_sym;
+struct State;
+struct Parser;
+struct Shift_entry;
+struct Shift_tbl;
+struct Reduce_tbl;
+struct State_s_thread_tbl;
+struct Thread_entry;
+struct T_array_having_thd_ids;
+struct Set_entry;
+struct Recycled_rule_struct;
+struct Rule_s_reuse_entry;
+typedef Shift_entry Shift_entry_array_type [1024*100];
+typedef Set_entry Set_entry_array_type [1024*100];
+@*2 Recursion index for internal tracing of output.\fbreak
+Used to prefix spaces according to its count.
+Allows one to output messages to {\bf{lrclog}} where the prefix number of spaces
+is the recursive call level.
+@d Recursion_count()
+int RECURSION_INDEX__(0);
+
+@ Structure definitions.
+@<Structure defs@>+=
+// structures
+
+@*2 Global external variables from yacco2's linker.\fbreak
+
+Apart from |PTR_LR1_eog__| which is defined by the |yacco2_k_symbols.lex| grammar,
+yacco2's linker generates the balance of these symbol definitions.
+All these symbols are covered by namespace yacco2. They are dangling references within
+this library that get resolved by the regular language linker from other objects
+when the program is built.
+
+The first 5 symbols can only be defined by yacco2's linker due to the condition
+that all grammars and their threads
+must be known before these symbols can be defined specific to the developed language.
+Here we have a general piece of software that has dangling references of future knowns.
+
+@<Global external variables from yacco2's linker@>=
+ // Global externals from yacco2's linker and |yacco2_k_symbols.lex|
+extern void* THDS_STABLE__;
+extern void* T_ARRAY_HAVING_THD_IDS__;
+extern void* BIT_MAPS_FOR_SALE__;
+extern int TOTAL_NO_BIT_WORDS__;
+extern int BIT_MAP_IDX__;
+extern CAbs_lr1_sym* PTR_LR1_eog__;
+
+@*2 Global tracing variables.\fbreak
+See |The preprocessor coding game| for their meanings.
+@<Global externals for yacco2 tracing variables@>=
+extern int YACCO2_T__;
+extern int YACCO2_TLEX__;
+extern int YACCO2_MSG__;
+extern int YACCO2_TH__;
+extern int YACCO2_AR__;
+extern int YACCO2_THP__;
+extern int YACCO2_MU_TRACING__;
+extern int YACCO2_MU_TH_TBL__;
+extern int YACCO2_MU_GRAMMAR__;
+
+@*2 Global variables.\fbreak
+@<Global variables@>=
+ // gbl variables
+@*2 External rtns.
+@<External rtns and variables@>=
+ // extern rtns + gbl variables
+@ Using library's namespace yacco2.
+The acronyms should be obvious to the user within their context.
+@<uns@>=
+using namespace yacco2;
+
+@ Begin namespace yacco2.
+@<bns@>=
+namespace yacco2{
+
+@ End namespace yacco2.
+@<ens@>=
+}; // end namespace yacco2
+
+@ Include Yacco2 header.
+@<iyacco2@>=
+#include "yacco2.h"
+
+@ Include Yacco2's raw characters header.
+@<irc@>=
+#include "yacco2_characters.h"
+
+@ Include Yacco2's constants header.
+@<ilrk@>=
+#include "yacco2_k_symbols.h"
+
+@ Include Yacco2's conditional compile control symbols header.
+@<icompile???@>=
+#include "yacco2_compile_symbols.h"
+
+@ Include Yacco2's arbitrator's begin code.
+@<iar begin@>=
+#include "war_begin_code.h"
+
+@ Include Yacco2's arbitrator's end code.
+@<iar end@>=
+#include "war_end_code.h"
+
+@ A wrapper file that brings in the required Standard Template Library (STL) containers
+used by Yacco2.
+@<iSTL@>=
+#include <stdlib.h>
+#include <limits.h>
+#include <assert.h>
+#include "std_includes.h"
+#include <time.h>
+
+@ Accrue yacco2 code.
+@<accrue yacco2 code@>= // accrue yacco2 code
+
+@*2 |cweb| output of Yacco2's user library.\fbreak
+The implementation code is emitted by |cweb|'s @@c or @@( operators
+throughout this discourse.
+Definitions etc are outputted to the common include file |yacco2.h|.
+All implementations will include this file into their implementation.
+@ Create header file for Yacco2 library environment.
+Note, the ``include search'' directories for the \CPLUSPLUS/ compiler has to be supplied.
+@(yacco2.h@>=
+@<copyright notice@>;
+#ifndef yacco2_
+#define yacco2_ 1
+@<icompile???@>;
+@h
+@<Include files@>;
+
+@<bns@>;
+ @<Type...@>;
+@<Global variables@>;
+@<Global externals for yacco2 tracing variables@>;
+@<Global external variables from yacco2's linker@>;
+ @<Structure...@>;
+@<External rtns and variables@>;
+@<ens@>;
+namespace NS_yacco2_k_symbols {
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_questionable_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eog__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_eolr__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_parallel_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_fset_transience_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_invisible_shift_operator__;
+ extern yacco2::CAbs_lr1_sym* PTR_LR1_all_shift_operator__;
+};
+@<c macros@>;
+#endif
+
+
+@*2 Yacco2's library implementation.\fbreak
+ Start the code output to |yacco2.cpp|
+by appending its include file.
+@(yacco2.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<uns@>;
+@<accrue yacco2 code@>;
diff --git a/web/yacco2/library/lib/Debug/info.txt b/web/yacco2/library/lib/Debug/info.txt
new file mode 100644
index 0000000000..10a2c3be82
--- /dev/null
+++ b/web/yacco2/library/lib/Debug/info.txt
@@ -0,0 +1,14 @@
+0) Debug folder used to hold a debugging library of yacco2 API
+1) U can turn on dynamic tracing facilities of Yacco2 or add your own tracing stuff within yacco2's *w code
+2) Regen wlibrary.w code using as an example bld_bash_APPLE script. Other scripts GNU and Solaris hold.
+ Look at the comments within this script to see Debug comments
+3) Recompile yacco2 library and place it in this folder
+4) Make sure u link your program against this debug library
+
+You can also modify the *w source code per o2, o2linker, and rebuild the Yacco2 project to do dynamic tracing.
+
+If u suspect Yacco2's grammars are suspect, then put in your own tracing facilities and rebuild them.
+Have a read compiler/grammars/makefile_APPLE
+
+Please read o2book.pdf for more comments on tracing facilities.
+
diff --git a/web/yacco2/library/lib/Release/libyacco2.a b/web/yacco2/library/lib/Release/libyacco2.a
new file mode 100644
index 0000000000..5136f942b3
--- /dev/null
+++ b/web/yacco2/library/lib/Release/libyacco2.a
Binary files differ
diff --git a/web/yacco2/library/macros.w b/web/yacco2/library/macros.w
new file mode 100644
index 0000000000..4f81d59372
--- /dev/null
+++ b/web/yacco2/library/macros.w
@@ -0,0 +1,1636 @@
+@q file: macros.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Macro definitions.\fbreak
+I use macros of \CPLUSPLUS/ and |cweb| variety.
+Their use covers terminal constructor initialization, tracing of flow control events,
+parse stack configuration and syntax directed directives,
+utilities to deal with specific parse situations or results, and
+aid macros to debug grammars.
+
+As log trace files can be volumous, i placed within each
+logged message the macro variable's name that controls its output.
+For example, |YACCO2_MSG__| controls signalling between threads as in wait-for-wakeup message
+from one of the called threads etc.
+I'll see how refined this is by
+use of an UNIX shell's scripting language like ``bash'' with piping.
+I'll let u posted.
+
+@*2 Copyright.
+@<copyright notice@>=
+// copyright
+
+@*2 |EXTERNAL_GPSing| macro is used to print out T's external file.\fbreak
+The external file comes from |tok_can|
+ container use that registers the external files processed with |FILE_TBL__|.
+ A created T has a subscript reference into this stack.
+ Sanity check must exist against the |FILE_TBL__| registrar or a possible
+ out-of-subscript error could be thrown.
+
+ One misuse is to process the ``command line'' input
+ where the input is written to a holding file.
+ A hardwiring of 1 for the file is used as the ``holding file'' is the first file
+ inputted to |Yacco2|. But if the holding file name is illegal,
+ a T error of ``bad file inputted'' created with this file reference as crap.
+ The other potential error is the CLI inputted file is non existent and creating the
+ error T referenced to the holding file which has not been registered
+ with |FILE_TBL__| thru |tok_can<ifstream>| container create also becomes poop-poop.
+
+ Now u defined an Error\_handler grammar to trace out those errors expecting to see the
+ traced output with the external file name and its contents line references.
+ Say the ``holding file'' exists with the command line data placed there but
+ never registered the holding file with the |tok_can|.
+ Hence the {\bf non registering of the CLI holding file} will not be printed
+ by the parser / Error processing grammar.
+ See the ``./grammar-testsuite/testout.pdf'' program as an example of
+ ``command line processing'' to avoid the above errors.
+ @d EXTERNAL_GPSing(TOK__)
+ if(TOK__->tok_co_ords__.external_file_id__ < yacco2::FILE_TBL__.size()){
+ yacco2::lrclog << yacco2::FILE_TBL__[TOK__->tok_co_ords__.external_file_id__].c_str();
+ }else {
+ yacco2::lrclog << " EXTERNAL_GPSing - No external file registered to use"
+ << " stack subscript: "
+ << TOK__->tok_co_ords__.external_file_id__;
+ }
+@*2 |FILE_LINE| macro source file co-ordinates for tracing.\fbreak
+Add the file and line number to the dynamic tracing output.
+Allows one to go to the source code
+if things are askew.
+Gum stuck to your shoe but hey it's an indication.
+@d FILE_LINE ' ' << __FILE__ << ": " << __LINE__
+
+@*2 |T_CTOR| macro is used by the terminal defs supplied to the grammar.\fbreak
+When a terminal definition needs to be customized, the grammar writer
+can roll his own class definition. It just initializes the base
+variables within the class constructor's implementation.
+Its name is composed of |T| indicating for terminals, and the |CTOR|
+uses the \CPLUSPLUS/ naming convention to indicate that it belongs to the
+class constructor.
+Please have a look at Yacco2's |yacco2_k_symbols.lex| file
+that defines the lr constants definitions for a demonstration of use.
+For the moment there are 5 parameters: A..E.
+Originally there was more to handle the push-pop-lookahead functors.
+From Yacco2's use, these functors were never needed. It was only
+during my Master's thesis that they got their 15 minutes of fame.
+
+\ptindent{Parameter A: provides the terminal's literal name for tracing}
+\ptindent{Parameter B is the enumerated value}
+ It is symbolically gened
+by prefixing an |T_| to the `\CPLUSPLUS/' name of the terminal and ending it off with
+a |_| suffix. This is described in |Enumeration of Alphabets|.
+
+\ptindent{Parameter C is the address of the class destructor function or nil}
+ I know, this should be automatically
+detected by Yacco2's parse generator but for now this is reality: still outstanding.
+
+|parser__| is the associated parser for the grammar used by the grammar's rules.
+As the |CAbs_lr1_sym|
+is a base structure for both the terminals and rules of the grammar,
+it has no associated parser for the terminals as terminals are nomadic by nature.
+Normally |tok_co_ords__|'s attributes are overriden by a raw character co-ordinates.
+Terminals are composites of other basic entities like raw character terminals.
+
+\ptindent{Parameter D is auto delete boolean value of ON or OFF}
+\ptindent{Parameter E is auto abort boolean value of ON or OFF}
+
+An auto delete attribute indicates that the terminal is deleted when popped from the parse stack.
+When an abort of a parse occurs, this attribute when turned on indicates
+that the object should be deleted. It's a `clean up your own mess' attribute.
+Both paramaters relate to the terminal's `AD' and `AB' grammatical attributes.
+An example of |T_CTOR| use is:\fbreak
+\ptindent{|T_CTOR|("labeled-stmt",|T_T_labeled_stmt_|,|&dtor_T_labeled_stmt|,OFF,ON)}
+
+|T_CTOR_RW| macro handles the raw character terminals.
+The additional 2 parameters F, and G are the
+source file index and character position within the file.
+Please look at Yacco2's |yacco2_characters.lex| file
+to see an example of |T_CTOR_RW| use.
+The |Yacco2| runtime environment maintains an index of files included into the source grammar.
+|FILE_TBL__| is a vector of file index and the external filename literal.
+|FILE_CNT__| is the matching external variable used by the
+include file grammar that stacks them when nested include statements come into and out of scope.
+From the raw character classes, the GPS of the character is passed in as parameters.
+A specialized |tok_can| template for `file to raw character' object mapping handles this task.
+@*2 |T_CTOR|, |T_CTOR_RW| macros.
+@d T_CTOR(A,B,C,D,E)
+:CAbs_lr1_sym(A,C,B,D,E)
+@d T_CTOR_RW(A,B,C,D,E,F,G)
+:CAbs_lr1_sym(A,C,B,D,E,F,G)
+@*2 Define |YACCO2_define_trace_variables|.\fbreak
+See ``The \CPLUSPLUS/ preprocessor coding game'' regarding the individual tracing variable
+functionality.
+@d YACCO2_define_trace_variables()
+int yacco2::YACCO2_T__(OFF);
+int yacco2::YACCO2_TLEX__(OFF);
+int yacco2::YACCO2_MSG__(OFF);
+int yacco2::YACCO2_TH__(OFF);
+int yacco2::YACCO2_AR__(OFF);
+int yacco2::YACCO2_THP__(OFF);
+int yacco2::YACCO2_MU_TRACING__(OFF);
+int yacco2::YACCO2_MU_TH_TBL__(OFF);
+int yacco2::YACCO2_MU_GRAMMAR__(OFF);
+
+@*2 Token placement macros.\fbreak
+They are used by the grammar writer within
+syntax directed code sections of a grammar to place a token into appropriate queues:\fbreak
+\ptindent{recycle container --- used to delete or re-integrate tokens back into a parse stream}
+\ptindent{accept container --- tokens returned by launched threads for arbitration}
+\ptindent{producer container - tokens outputted for other parse stages}
+\ptindent{error container --- a container of accrued error tokens}
+\ptindent{supplier of tokens --- token stream that a grammar parses}
+@*3 |ADD_TOKEN_TO_RECYCLE_BIN|.\fbreak
+This is a holding pen for possibly re-use of the token
+that has been pulled out of the token stream.
+It is a minor facility but has poco merit.
+@d ADD_TOKEN_TO_RECYCLE_BIN(Token)
+ rule_info__.parser__->add_token_to_recycle_bin(Token)
+@*3 |DELETE_T_SYM| macro.\fbreak
+This macro deletes a T when passed by pointer.
+It only allows Tes that are from either Error or Meta-terminal classes.
+This guards against the erasing of preallocated Tes of LR k or RC (raw chacacter) classes.
+They are preallocated from the memory heap for speed.
+It checks whether the symbol's |dtor__| static method is present and calls it.
+This allows a delete chain calling of other dependents or other dependencies
+when the |destructor| directive is
+used within the T grammar definition.
+Why this route to T symbol deletes rather than c++'s dtor: |~T()|?
+Mixed into the fray is my |AB| abort parse stack cleanup.
+Whether its of any use this is my experiment.
+It required the stack frame pointer as the 2nd parameter.
+For the just plain way to deletes, this macro eases the complaints
+without the stack frame pointer.
+Depending on how your compiler/translator runs,
+deleting of Tes could be left to the process teardown.
+If your language recognizer is always on and being invoked like an Internet protocol,
+then T hygiene is required or those memory leaks will haunt u.
+@d DELETE_T_SYM(T)
+ if(T != 0){
+ if(T->enumerated_id__ > END_OF_RC_ENUMERATE){
+ if(T->dtor__ != 0){
+ (*T->dtor__)(T,0);// stack frame 0
+ }
+ delete T;
+ }
+ }
+@*3 Add token to an accept queue: |RSVP|, |RSVP_FSM|, |RSVP_WLA| macros.\fbreak
+|RSVP| places a token into the calling grammar's accept queue that requested this thread.
+It can be placed anywhere in the syntax directed code of the grammar except within
+the grammar's fsm context where you use the |RSVP_FSM| macro.
+The |RSVP_WLA| allows u to override the lookahead bounds instead
+of taking as default the current token.
+A quick review of messages, threads, and accept tokens:\fbreak
+\ptindent{the calling grammar: 1:m launching of threads}
+\ptindent{accept queue: 0:m potential tokens returned by launched threads}
+\ptindent{1 wakeup event to calling grammar by thread finished last in execution}
+
+Arbitration is used by the caller grammar
+ when it is re-activated by an event (message) from the thread
+ finishing last in execution order:
+ the status message ``accept parallel parse'' is posted to just
+ wake up the calling grammar regardless of the overall parse
+ success by the launched threads. It is the |th_accepting_cnt__|
+ that determines whether the threads were successful or not.
+It only occurs when there are items in the accept queue.
+If none of the launched threads are successful in their parsing, then the
+calling grammar will attempt to go through its conditional parsing (non-determinism).
+Arbitration is the associated code within the grammar's fsm state that launched the threads.
+It rules on possibly more than one accept token being returned.
+A little french spices up this ho-hum macro.
+
+Why is there an accepted token position?
+Remember the current token in the thread's parse stream
+ is now the future position in the token stream to continue parsing from
+for the calling grammar.
+In a long stream of characters that makes up the accept token,
+usually its the start token's
+position passed to the called thread that is used to GPS it's position within the token stream.
+The current token context ( I call the ``lookahead context'')
+is provided by the last 2 parameters for the |Caccept_parse|.
+It is this lookahead context of the accepted token that is used
+to continue parsing within the calling grammar.
+The arbitrated token is parallel shifted and its accompaning lookahead boundry
+is then used to reduce the parallel shift's subrule expression.
+All other potential accept tokens are flushed out of the accept queue.
+@d RSVP(Token)
+ rule_info__.parser__->pp_rsvp__.fill_it(*rule_info__.parser__
+ ,*Token,Token->tok_co_ords__.rc_pos__
+ ,*rule_info__.parser__->current_token__
+ ,rule_info__.parser__->current_token_pos__)
+
+@d RSVP_WLA(Token,LATOK,LAPOS)
+ rule_info__.parser__->pp_rsvp__.fill_it(*rule_info__.parser__
+ ,*Token,Token->tok_co_ords__.rc_pos__
+ ,*LATOK
+ ,LAPOS)
+
+@d RSVP_FSM(Token)
+ parser__->pp_rsvp__.fill_it(*parser__
+ ,*Token,Token->tok_co_ords__.rc_pos__
+ ,*parser__->current_token__,parser__->current_token_pos__)
+
+@*3 |ADD_TOKEN_TO_PRODUCER_QUEUE|.\fbreak
+ This allows one to output from a parse a terminal stream
+that becomes a supplier queue for another grammar to parse.
+@d ADD_TOKEN_TO_PRODUCER_QUEUE(TOKEN)
+ rule_info__.parser__->add_token_to_producer(TOKEN)
+@*3 |ADD_TOKEN_TO_ERROR_QUEUE| and |ADD_TOKEN_TO_ERROR_QUEUE_FSM|.\fbreak
+This becomes a holding queue
+that can be processed by a error grammar. It's a nice way
+to format parsing errors. It is the context that determines which macro to use.
+@d ADD_TOKEN_TO_ERROR_QUEUE(TOKEN) rule_info__.parser__->add_token_to_error_queue(TOKEN)
+@d ADD_TOKEN_TO_ERROR_QUEUE_FSM(TOKEN) parser__->add_token_to_error_queue(TOKEN)
+
+
+@*2 Generated finite state automaton macros.\fbreak
+ They are included in the \CPLUSPLUS/ code of each rule emitted by Yacco2.
+ Their names are sufficient to explain their intent.
+ Why the wrapping of the macros within the @@$=$ ... @@$>$ construct
+ instead of a plain macro ``|#define|'' definition?
+ Glad u asked. The |cweave| version ``7.5.5'' on a Mac emits code
+ that |pdftex| Version 3.141592-1.30.4-2.2 honks: too many {$``\}''$} or
+ {``\$''}. So this is my workaround until i have time to get a
+ higher version of cweave.
+
+ Note: the |cweb| Microsoft flavour works.
+ More rumblings from within my quest to port Yacco2.
+ Screw the port. i need to read it.\fbreak
+ Brought back |cweb| macros as they work on the Mac now.
+
+@d ssNEW_TRACEss(ssPss,ssQss)
+ yacco2::lrclog << "\t!!!!! new adr: " << (void*)ssPss
+ << " " << #ssQss << ' '<<__FILE__<<':'<<__LINE__<< std::endl;
+ yacco2::lrclog << "\tfile: " << __FILE__ << " line: " << __LINE__ << std::endl;
+
+@d ssP_TRACEss(ssPss,ssQss)
+ yacco2::lrclog
+ << '\t' << Parse_env->thread_no__
+ << "\t!!!!! new adr: " << (void*)ssPss
+ << " " << #ssQss <<FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\tfile: " << __FILE__ << " line: " << __LINE__ << std::endl;
+
+@d sstrace_terminalsss
+ if(yacco2::YACCO2_TLEX__){
+ bool to_trace_or_not_to = trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE);
+ if(to_trace_or_not_to == true){
+ yacco2::lrclog
+ << "\tYACCO2_TLEX__::" << rule_info__.parser__->thread_no__
+ << rule_info__.parser__->fsm_tbl__->id__ << "::" << id__ << "::op()\n";
+ }
+ }
+
+@d sstrace_rulesss
+ if(yacco2::YACCO2_TLEX__){
+ bool to_trace_or_not_to = trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE);
+ if(to_trace_or_not_to == true){
+ yacco2::lrclog << "\tYACCO2_TLEX__::" << rule_info__.parser__->thread_no__
+ << "::" << rule_info__.parser__->fsm_tbl__->id__ << "::" << id__ << "::op()\n";
+ }
+ }
+
+@d sstrace_sub_rulesss
+ if(yacco2::YACCO2_TLEX__){
+ bool to_trace_or_not_to = trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE);
+ if(to_trace_or_not_to == true){
+ yacco2::lrclog << "\tYACCO2_TLEX__::" << rule_info__.parser__->thread_no__
+ << "::" << rule_info__.parser__->fsm_tbl__->id__ << "::" << id__ << "::op()\n";
+ }
+ }
+
+@d sstrace_stack_rtnsss @/
+ if(yacco2::YACCO2_TLEX__){ @/
+ bool to_trace_or_not_to = trace_parser_env(Parse_env,FORCE_STK_TRACE));
+ if(to_trace_or_not_to == true){
+ yacco2::lrclog
+ << "\tYACCO2_TLEX__::" << Parse_env->thread_no__
+ << "::" << Parse_env->fsm_tbl__->id__ << "::op() sym: " << id__
+ << FILE_LINE<< std::endl;
+ }
+ }
+
+
+@*2 Pushdown automaton's flow control macros.\fbreak
+They are placed in stragetic places for operations accept, reduce, shift, and abort.
+As there are many points being traced, a little explanation is required to give
+some semblance of order.
+The messages outputted go to a log file named `tracings.log'.
+What type of name is this?
+The prefix 1 sorts the file to the top of a directory. The balance of the name
+was an attempt to say lr output of clog type. Ugh.
+This will be changed.
+
+Messages logged fall into the parsing configuration
+that tries to give a semblance of a stack.
+It prints the stack content in bottomup order.
+A sample of the trace is:\fbreak
+\ptindent{|..1500::rule_def_phrase.lex::1--identifier-> 3|}
+The dots indicate the number of items on the stack to be displayed,
+followed by the thread's identity --- a runtime thread number and
+the grammar's name being traced.
+Following this are the stacked items displayed in bottom-to-top order.
+Each item contains the finite state that it is in, a vector containing
+the stacked item and the finite state's shift into state no.
+
+Other traces will try to output regular sentences so that they can be parsed by a
+grammar or a scripting language. This will allow one to digest intelligently the interplay
+between the grammar, and the appropriate running threads.
+As there are many threads simultaneously running, this will help in consolidating
+the reported tracings.
+@^ To do canonize the traced output@>
+
+@*3 |T_0| trace remove items from the parse stack.
+@<Trace TH remove items from the parse stack configuration@>=
+if(YACCO2_TH__){
+ if(fsm_tbl__->debug__ == ON){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__ << ":: Popping items from stack # to pop: "
+ << No_to_remove
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+
+@*3 |T_0a| trace finished removing items from the parse stack.
+@<Trace TH finished removing items from the parse stack configuration@>=
+if(YACCO2_TH__){
+ if(fsm_tbl__->debug__ == ON){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__ << ":: Finished Popping items from stack"
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+
+
+@*3 |T_1| trace the parse stack if the grammar is requesting
+to be debugged. The returned debug switch's value is dropped.
+@<Trace TH the parse stack configuration@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+}
+
+@*3 |T_2| trace when an epsilon rule is being reduced.
+@<Trace TH when an epsilon rule is being reduced@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__ << "::epsilon"
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+
+@*3 |T_3| trace the state no when popped from the parse stack.
+@<Trace TH popped state no@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__;
+ yacco2::lrclog
+ << "::" << fsm_tbl__->id__ << "::popped state:: ";
+ yacco2::lrclog
+ << pr->state__->state_no__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+
+@*3 |T_4| trace when invisible shift symbol popped from stack.\fbreak
+Because this symbol is universal, ?? chk why zeroed instead of
+not having AD on?
+@<Trace TH zeroed out symbol situation when popped from parse stack@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__
+ << "::exposed rule/terminal:: NULL due to invisible shift"
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+
+@*3 |T_5| trace exposed symbol on parse stack.
+@<Trace TH exposed symbol on parse stack@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__
+ << "::exposed rule/terminal:: " << parse_stack__.top__->symbol__->id__
+ << ' ' << parse_stack__.top__->symbol__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+}
+
+@*3 |T_6| trace top item on the
+parse stack when auto-delete switch on.\fbreak
+This is the grammatical attribute AD requesting deletion when popped from the parse stack.
+@<Trace TH advise when symbol deleted due to AD switch@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ if(parse_stack__.top__->symbol__->auto_delete__ == YES){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__ << "::"
+ << fsm_tbl__->id__
+ << "::AD deleting exposed rule/terminal:: "
+ << parse_stack__.top__->symbol__->id__ << ' '
+ << parse_stack__.top__->symbol__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+ }
+}
+
+@*3 |T_6a| trace top item on the
+parse stack when auto-abort switch on.\fbreak
+This occurs usually at abort time of a threaded
+parse. It can occur when the grammar writer has not
+removed the appropriate objects from being checked
+by a destructor directive for deletion in a grammar rule.
+@<Trace TH advise when auto abort happening@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ if(parse_stack__.top__->symbol__->affected_by_abort__ == YES){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__ << "::"
+ << fsm_tbl__->id__
+ << "::AB deleting exposed rule/terminal:: "
+ << parse_stack__.top__->symbol__->id__ << ' '
+ << parse_stack__.top__->symbol__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+ }
+}
+
+@*3 |T_7| trace when threading failed: try straight parse.
+@<Trace TH failed parallel try straight parse@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::"
+ << fsm_tbl__->id__
+ << "::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+ << " reset token pos: " << current_token_pos__
+ << " reset token: "
+ << current_token__->id__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RESET FILE: ";
+ EXTERNAL_GPSing(current_token())
+ yacco2::lrclog
+ << " GPS RESET LINE: "
+ << current_token()->tok_co_ords__.line_no__
+ << " GPS RESET CHR POS: "
+ << current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+}
+@*3 |T_7| trace when proc call failed: try straight parse.
+@<Trace TH failed proc call try straight parse@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::"
+ << fsm_tbl__->id__
+ << "::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+ << " reset token pos: "
+ << current_token_pos__ << " reset token: "
+ << current_token__->id__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RESET FILE: ";
+ EXTERNAL_GPSing(current_token())
+ yacco2::lrclog
+ << " GPS RESET LINE: "
+ << current_token()->tok_co_ords__.line_no__
+ << " GPS RESET CHR POS: "
+ << current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+}
+
+@*3 |T_11| straight parse error.\fbreak
+How and why NIL pointer?
+protects when the
+@<Trace TH straight parse error@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::" << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << "#############straight parse-error current token "
+ << '"' << current_token()->id__
+ << '"' << " pos: " << current_token_pos__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RESET FILE: ";
+ EXTERNAL_GPSing(current_token())
+ yacco2::lrclog
+ << " GPS RESET LINE: "
+ << current_token()->tok_co_ords__.line_no__
+ << " GPS RESET CHR POS: "
+ << current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+}
+
+@*3 |T_14| trace parallel parse thread startup communication.
+@<Trace TH parallel parse thread start communication@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << "requestor of parallelism* : "
+ << " pp id: " << thread_no__ << "::"
+ << thread_name() << " parallel PP started: " << pe->thread_fnct_name__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+}
+
+@*3 |T_17| trace accepted token info.
+@<Trace TH accepted token info@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::||||||||||ACCEPTED token POS: "
+ << arbitrated_token__->accept_token_pos__
+ << " token*: " << arbitrated_token__->accept_token__ << " token: "
+ << arbitrated_token__->accept_token__->id__ << std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS FILE: ";
+ EXTERNAL_GPSing(arbitrated_token__->accept_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << arbitrated_token__->accept_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << arbitrated_token__->accept_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::||||||||||ACCEPTED la token POS: "
+ << arbitrated_token__->la_token_pos__ << " la token: "
+ << arbitrated_token__->la_token__->id__ << std::endl;
+ yacco2::lrclog << "\t" << thread_no__
+ << "::GPS LA FILE: ";
+ EXTERNAL_GPSing(arbitrated_token__->la_token__)
+ yacco2::lrclog
+ << " GPS LA LINE: "
+ << arbitrated_token__->la_token__->tok_co_ords__.line_no__
+ << " GPS LA CHR POS: "
+ << arbitrated_token__->la_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+}
+
+
+@*3 Trace re-aligned token stream la boundry info.
+@<Trace TH re-aligned token stream la boundry info@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::|||re-aligned token stream la boundry POS: "
+ << current_token_pos__ << " la token: "
+ << current_token__->id__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RE-ALIGN FILE: ";
+ EXTERNAL_GPSing(current_token__)
+ yacco2::lrclog
+ << " GPS RE-ALIGN LINE: "
+ << current_token__->tok_co_ords__.line_no__
+ << " GPS RE-ALIGN CHR POS: "
+ << current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+}
+
+@*3 |T_18| trace requesting grammar's received message from a thread.
+@<Trace TH request thread received message from parallel thread@>=
+if(YACCO2_TH__){
+if(no_requested_ths_to_run__ > 1){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::"
+ << fsm_tbl__->id__ << "::"
+ << "parallel parsing received message from id:"
+ << from_thread__->thread_no__ << "::"
+ << from_thread__->thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+}
+}
+
+@*3 |T_22| and |T_22a| trace returned thread accept info.
+@<Trace TH current token, and accepted terminal wrapper@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ if(current_token()!= 0){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::";
+ yacco2::lrclog << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << "accept-parallel-parse current token "
+ << '"' << current_token()->id__ << '"'
+ << " pos: " << current_token_pos__
+ << FILE_LINE<< std::endl;
+yacco2::lrclog << "YACCO2_TH__::" << " accept tok: "
+ << pp_rsvp__.accept_token__->id__ << " tok pos: "
+ << pp_rsvp__.accept_token_pos__
+ << " la tok: " << pp_rsvp__.la_token__->id__
+ << " la tok pos: "
+ << pp_rsvp__.la_token_pos__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << " thru fsm-> parser*: "
+ << fsm_tbl__->parser() << std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS ACCEPT FILE: ";
+ EXTERNAL_GPSing(pp_rsvp__.accept_token__)
+ yacco2::lrclog
+ << " GPS ACCEPT LINE: "
+ << pp_rsvp__.accept_token__->tok_co_ords__.line_no__
+ << " GPS ACCEPT CHR POS: "
+ << pp_rsvp__.accept_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS ACCEPT LA FILE: ";
+ EXTERNAL_GPSing(pp_rsvp__.la_token__)
+ yacco2::lrclog
+ << " GPS ACCEPT LA LINE: "
+ << pp_rsvp__.la_token__->tok_co_ords__.line_no__
+ << " GPS ACCEPT LA CHR POS: "
+ << pp_rsvp__.la_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+ }
+}
+
+@*3 |T_23| trace parallel parse current token when an error has occured.
+@<Trace TH parallel parse current token when an error has occured@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ if(current_token()){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::";
+ yacco2::lrclog << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << "YACCO2_TH__::"
+ << "#############parallel parse-error current token "
+ << current_token()->id__ << " pos: " << current_token_pos__
+ << " enum id: " << current_token()->enumerated_id__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RESET FILE: ";
+ EXTERNAL_GPSing(current_token())
+ yacco2::lrclog
+ << " GPS RESET LINE: "
+ << current_token()->tok_co_ords__.line_no__
+ << " GPS RESET CHR POS: "
+ << current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+}
+
+@*3 |T_23| trace proc call parse current token when an error has occured.
+@<Trace TH proc call parse current token when an error has occured@>=
+if(YACCO2_TH__){
+ bool to_trace_or_not_to = trace_parser_env(this,COND_STK_TRACE);
+ if(to_trace_or_not_to == YES){
+ if(current_token()){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_TH__::" << thread_no__ << "::";
+ yacco2::lrclog << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << "YACCO2_TH__::"
+ << "#############parallel parse-error current token "
+ << current_token()->id__ << " pos: " << current_token_pos__
+ << " enum id: " << current_token()->enumerated_id__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "\tYACCO2_TH__::" << thread_no__
+ << "::GPS RESET FILE: ";
+ EXTERNAL_GPSing(current_token())
+ yacco2::lrclog
+ << " GPS RESET LINE: "
+ << current_token()->tok_co_ords__.line_no__
+ << " GPS RESET CHR POS: "
+ << current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+ }
+}
+}
+
+@*3 |T_24| trace before parallel parse thread message count reduced.
+This allows one to see if threading mutexes etc are behaving.
+@<Trace TH before parallel parse thread message count reduced@>=
+if(YACCO2_MSG__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MSG__::" << thread_no__ << "::";
+ yacco2::lrclog << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << " called thread reducing thread active count of caller thread "
+ << pp_requesting_parallelism__->thread_no__ << "::"
+ << pp_requesting_parallelism__->fsm_tbl__->id__
+ << " active thread count::" << pp_requesting_parallelism__->th_active_cnt__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+@*3 |T_25| trace parallel parse current token when an error has occured.
+@<Trace TH after parallel parse thread message count reduced@>=
+if(YACCO2_MSG__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MSG__::" << thread_no__ << "::";
+ yacco2::lrclog << fsm_tbl__->id__ << "::";
+ yacco2::lrclog << " called thread after reducing thread active count of caller thread "
+ << pp_requesting_parallelism__->thread_no__ << "::"
+ << pp_requesting_parallelism__->fsm_tbl__->id__
+ << " active thread count::" << pp_requesting_parallelism__->th_active_cnt__
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+
+@*2 Message macros.\fbreak
+They trace the correspondence between various threads.
+Here are the thread relationships:\fbreak
+\ptindent{grammar calling its spawned threads}
+\ptindent{launched threads to the grammar requesting thread service}
+
+These macros are very verbous but it allows one to analyse
+whether messages have been dropped.
+Typically dropped messages come about when an event depends
+on a specific result and the order of execution within the threads
+can change the current terminal mapping such that executing produces possibly
+an aborted thread parse.
+For example when a terminal is fetched with dynamic symbol
+table evaluation taking place, depending on the sequence execution
+of the threads errant terminal delivery can occur.
+This is a critical region problem between the competing
+threads.
+To fix the problem, either eliminate the competition of threads between themselves
+by blending into one thread the competing grammatical sentences, or
+use a MUTEX to tame the eradic behavior.
+
+To control messaging back to the requesting grammar when all
+threads have finished processing,
+an activity thread count
+under the control of its MUTEX is referenced by each launched thread.
+The responsibility of who responds back to the grammar requesting parallelism
+when all threads are done be it success or failure, is left to the individual threads
+launched.
+When a thread finishes work, it goes into the
+critical region of the requesting grammar and decrements the active thread
+ count. It also
+checks if the activity count is zero indicating that it is the last thread in
+the house to lock up so wake up the requesting grammar.
+
+@*3 |TT_1| trace thread waiting for message.
+@<Trace MSG thread waiting for message@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name() << " -->WAIT_FOR_EVENT "
+ << " # threads to run:: " << no_requested_ths_to_run__
+ << " # active threads: " << th_active_cnt__
+ << " # competing threads: " << no_competing_pp_ths__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_2| trace message received.\fbreak
+Protect against procedure call that has wound down and destroyed itself before the calling
+grammar can trace it. Only trace returned call from threads.
+@<Trace MSG message received@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name() << " MESSAGE RECEIVED from "
+ << from_thread__->thread_no__
+ << "::" << from_thread__->thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_4| trace posting from - to thread info.
+@<Trace posting from - to thread info@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << From_thread.thread_no__ << "::"
+ << From_thread.thread_name()
+ << " -----> Posting message to: "
+ << To_thread.thread_no__ << "::" << To_thread.thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_4a| trace signaled grammar to wakeup.
+@<Trace signaled grammar to wakeup while releasing its mutex@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << From_thread.thread_no__ << "::"
+ << From_thread.thread_name()
+ << " -----> before SIGNAL_COND_VAR() to signal wakeup grammar for: "
+ << To_thread.thread_no__ << "::" << To_thread.thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_4b| trace wakened grammar with its acquired mutex.
+@<Trace wakened grammar with its acquired mutex@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << From_thread.thread_no__ << "::"
+ << From_thread.thread_name()
+ << " -----> after SIGNAL_COND_VAR() to waken grammar of "
+ << To_thread.thread_no__ << "::"
+ << To_thread.thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_4c| trace trying to acquire grammar's mutex.
+@<Trace trying to acquire grammar's mutex@>=
+if(yacco2::YACCO2_MU_GRAMMAR__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MU_GRAMMAR__::" << parser.thread_no__ << "::"
+ << parser.fsm_tbl__->id__ << "::" << " trying to acquire mutex" << Text
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+@*3 |TT_4d| trace acquired grammar's mutex.
+@<Trace acquired grammar's mutex@>=
+if(yacco2::YACCO2_MU_GRAMMAR__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MU_GRAMMAR__::" << parser.thread_no__ << "::"
+ << parser.fsm_tbl__->id__ << "::" << " acquired mutex" << Text
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+@*3 |TT_4e| trace trying to release grammar's mutex.
+@<Trace trying to release grammar's mutex@>=
+if(yacco2::YACCO2_MU_GRAMMAR__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MU_GRAMMAR__::" << parser.thread_no__ << "::"
+ << parser.fsm_tbl__->id__ << "::" << " trying to release mutex" << Text
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+@*3 |TT_4f| trace released grammar's mutex.
+@<Trace released grammar's mutex@>=
+if(yacco2::YACCO2_MU_GRAMMAR__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_MU_GRAMMAR__::" << parser.thread_no__ << "::"
+ << parser.fsm_tbl__->id__ << "::" << " released mutex" << Text
+ << FILE_LINE<< std::endl;
+ @<release trace mu@>;
+}
+
+@*3 |TT_5| trace start thread.
+@<Trace MSG start thread@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__ << "::" << fsm_tbl__->id__
+ << " --> start threads"
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_6| trace of found thread in thread pool waiting to be run.\fbreak
+The pool of threads is dynmically built by thread requests.
+When a thread finishes work, instead of stopping, it goes into
+hibernation with
+an appropriate status indicating its availability.
+This is an optimization to speed up parallel processing.
+There can be many threads of the same name waiting for work due
+to recursion.
+@<Trace MSG found thread in thread pool waiting to be run@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::--> parallel thread worker fnd in thread table CALL WORKER: "
+ << tb->grammar_s_parser__->thread_name()
+ << " thread obj*:" << tb->grammar_s_parser__
+ << " parm*: " << tb->grammar_s_parser__->pp_requesting_parallelism__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_7| due to recursion trace no thread available in thread pool.\fbreak
+This comes about when a thread calls a thread who calls a previous thread.
+I call this situation ``nested parallelism''.
+The grammar of Pascal's railroad diagrams is an example of such situations.
+It is detected due to the thread (thread id number) already has an entry in the
+thread pool but there are no available threads ready to run so... launch another
+thread.
+@<Trace MSG thread fnd but all busy, so launch another one @>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << pe->thread_fnct_name__
+ << " --> parallel thread fnd in thread table BUT ALL ARE BUSY "
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 |TT_8| trace thread not found in global thread pool.\fbreak
+@<Trace MSG thread not found in global thread pool@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << pe->thread_fnct_name__
+ << " --> parallel thread NOT fnd in thread table"
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace start thread by procedure call instead of threading.
+@<Trace MSG start by procedure call@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name() << " calling PROC::"
+ //|<< pe->thread_fnct_name__|
+<< " --> before procedure call"
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace return from procedure call instead of threading.
+@<Trace MSG return from by procedure call@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name()
+ << " returned from PROC::"
+//|<< pe->thread_fnct_name__|
+ << " result: " << rslt
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace thread idle before setting waiting for work.
+@<Trace MSG thread idle before setting waiting for work@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::"
+ << this->grammar_s_parser__->thread_no__
+ << "::" << this->grammar_s_parser__->thread_name()
+ << " th_blk*: " << this
+ << "this pp*: " << this->grammar_s_parser__
+ << "pp*: " << grammar_s_parser__
+ << "pp^th blk*: " << &grammar_s_parser__->th_blk__
+ << " #: " << thd_id__
+ << " st: " << status__
+ << " before setting waiting for work"
+ << ' '
+ << grammar_s_parser__->thread_no__
+ << "::" << grammar_s_parser__->fsm_tbl__->id__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace thread idle after setting waiting for work.
+@<Trace MSG thread idle after setting waiting for work@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::"
+ << this->grammar_s_parser__->thread_no__
+ << "::" << this->grammar_s_parser__->thread_name()
+ << " th_blk*: " << this
+ << "this pp*: " << this->grammar_s_parser__
+ << "pp*: " << grammar_s_parser__
+ << "pp^th blk*: " << &grammar_s_parser__->th_blk__
+ << " #: " << thd_id__
+ << " st: " << status__
+ << " after setting waiting for work "
+ << grammar_s_parser__->thread_no__
+ << "::" << grammar_s_parser__->fsm_tbl__->id__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace thread being created.
+@<Trace MSG thread being created@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::"
+ << this->grammar_s_parser__->thread_no__
+ << "::" << this->grammar_s_parser__->thread_name()
+ << " th_blk*: " << this
+ << " pp this: " << this->grammar_s_parser__
+ << " this^pp^th_blk: " << &this->grammar_s_parser__->th_blk__
+ << "pp*: " << grammar_s_parser__
+ << "pp^th blk*: " << &grammar_s_parser__->th_blk__
+ << " #: " << thd_id__
+ << " thread created "
+ << grammar_s_parser__->thread_no__
+ << "::" << grammar_s_parser__->thread_name()
+ << " of grammar: " << grammar_s_parser__->fsm_tbl__->id__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace threads in launched list.
+@<Trace threads in launched list@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::"
+ << tb->grammar_s_parser__->thread_no__
+ << "::" << tb->grammar_s_parser__->thread_name()
+ << " th_blk*: " << this
+ << " th_blk*: " << tb
+ << " grammar parser: " << tb->grammar_s_parser__
+ << " #: " << tb->thd_id__
+ << " st: " << tb->status__
+ << " thds in launched list "
+ << FILE_LINE<< std::endl;
+yacco2::lrclog
+ << "------->"
+ << tb->grammar_s_parser__->thread_no__
+ << "::" << tb->grammar_s_parser__->fsm_tbl__->id__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Trace thread to be launched.
+@<Trace thread to be launched@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::"
+ << "pe*: " << pe
+ << " thread name: " << pe->thread_fnct_name__
+ << " thread proc*: " << pe->thread_fnct_ptr__
+ << " thread id: " << pe->thd_id__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 All threads reported back.\fbreak
+@<Trace MSG all threads reported back@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name() << " all threads reported back "
+ << " Caller parser::" << pp_requesting_parallelism__->thread_no__
+ << "::" << pp_requesting_parallelism__->thread_name()
+ << " # competing thds: "
+ << pp_requesting_parallelism__->no_requested_ths_to_run__
+ << " # active thds: "
+ << pp_requesting_parallelism__->th_active_cnt__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 NOT all threads reported back.\fbreak
+@<Trace MSG not all threads reported back@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name() << " NOT all threads reported back "
+ << " Caller parser::" << pp_requesting_parallelism__->thread_no__
+ << "::" << pp_requesting_parallelism__->thread_name()
+ << " # competing thds: "
+ << pp_requesting_parallelism__->no_requested_ths_to_run__
+ << " # active thds: " << pp_requesting_parallelism__->th_active_cnt__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*3 Call procedure but in use.\fbreak
+@<Trace MSG proc call in use so call its thread@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << thread_no__
+ << "::" << thread_name()
+ << " PROC CALL ALREADY IN USE so call its thread "
+ << " Caller parser::" << pp_requesting_parallelism__->thread_no__
+ << "::" << pp_requesting_parallelism__->thread_name()
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@** Arbitrator macros.\fbreak
+These are the syntax directed code
+directives within a grammar's rules that arbitrate between
+the returned results of that finite state's configuration.
+They are gened as individual procedures per finite state configuration
+due to parallelism.
+To refine this family of message traces,
+they test whether their grammar has the debug switch turned on.
+@*2 |TAR_1| trace the starting of arbitration.
+@<Trace AR trace the starting of arbitration@>=
+@<pp accept queue AR@>;
+
+@
+@<pp accept queue AR@>=
+if(yacco2::YACCO2_AR__){
+ //|trace_parser_env(Caller_pp,FORCE_STK_TRACE);|
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_AR__::"
+ << Caller_pp->thread_no__ << "::" << ar_name
+ << " start arbitrating"
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "YACCO2_AR__::"
+ << "number of accept tokens: "
+ << Caller_pp->th_accepting_cnt__
+ << FILE_LINE<< std::endl;
+ int ii = 1;
+ for(;ii<=Caller_pp->th_accepting_cnt__;++ii){
+ yacco2::lrclog<< "YACCO2_AR__::"
+ <<"\t terminal in accept queue: "
+ <<Caller_pp->pp_accept_queue__[ii].accept_token__->id__
+ <<" token pos: "
+ <<Caller_pp->pp_accept_queue__[ii].accept_token_pos__
+ << FILE_LINE<<std::endl;
+ }
+ @<release trace mu@>;
+}
+
+@*2 |TAR_2| trace no arbitration required.\fbreak
+This occurs when only 1 accept terminal is in the accept queue
+@<Trace AR no arbitration required@>=
+ @<trace AR pp accept queue no arbitration required@>;
+
+@ @<trace AR pp accept queue no arbitration required@>=
+if(yacco2::YACCO2_AR__){
+ //|trace_parser_env(Caller_pp,FORCE_STK_TRACE);|
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_AR__::"
+ << Caller_pp->thread_no__ << "::" << ar_name
+ << " No Arbitration required"
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog << "YACCO2_AR__::"
+ << "number of accept tokens: "
+ << Caller_pp->th_accepting_cnt__
+ << FILE_LINE<< std::endl;
+ int ii = 1;
+ for(;ii <= Caller_pp->th_accepting_cnt__;++ii){
+ yacco2::lrclog<<"\t YACCO2_AR__:: terminal in accept queue: "
+ << Caller_pp->pp_accept_queue__[ii].accept_token__->id__
+ <<" token pos: "
+ <<Caller_pp->pp_accept_queue__[ii].accept_token_pos__
+ << FILE_LINE<<std::endl;
+ }
+ @<release trace mu@>;
+}
+
+
+@*2 |TAR_3| trace stopped arbitrating.\fbreak
+This occurs when only 1 accept terminal is in the accept queue
+@<Trace AR stopped arbitrating@>=
+if(yacco2::YACCO2_AR__){
+ //|bool to_trace_or_no_to = trace_parser_env(Caller_pp,FORCE_STK_TRACE);|
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_AR__::"
+ << Caller_pp->thread_no__ << "::" << ar_name
+ << " stop arbitrating"
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+ }
+
+@** TLEX macros --- roll-your-own tracing macros.\fbreak
+These are ``roll your own'' macros for when the going get rough and tough,
+and you don't have a bloody clue. At least you can leave some tracks
+of your own originality.
+Good luck and this is said with sincerity as I probably needed them once.
+
+The grammar writer can put them inside the grammar's syntax directed code directives.
+They basically give the parallel details on the thread, critical region etc.
+The passed in parameter is what the grammar writer wants to display.
+Basic, crude but may be helpful.
+Before going this route though, the other macro traces should be adequate.
+Other forms of tracings using |yacco2::lrclog| or |cout| are rudimentary but also effective.
+@<c macro...@>+=
+#define sstrace_parallel_supportss(ssPROC_NAME) \
+if(yacco2::YACCO2_TLEX__){\
+ Parser* _ap = parser_of_parallel_support(); \
+ yacco2::lrclog << "YACCO2_TLEX__::" << pthread_self() << "::" \
+ << _ap->fsm_tbl__->id__ << "::" \
+ << ' ' << #ssPROC_NAME << " this:: " << this << std::endl; \
+ yacco2::lrclog << "\tYACCO2_TLEX__:: parser_of_parallel_support:: " \
+ << _ap \
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog << "\tself thread id:: " << thread_no__\
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog \
+ << "\tYACCO2_TLEX__:: embedded thread id:: " \
+ << embedded_thread_no()\
+ << FILE_LINE<< std::endl;\
+ }
+
+@*2 Print interplay between requesting grammar and launched thread.
+A roll your own descriptor is passed to the macro.
+@<c macro...@>+=
+#define sstrace_parallel_support_envss(ssPROC_NAME) \
+if(yacco2::YACCO2_TLEX__){\
+ yacco2::lrclog << "YACCO2_TLEX__::" << GetCurrentThreadid__ << "::" \
+ << fsm_tbl__->id__ << "::" \
+ << ' ' << #ssPROC_NAME << " this:: " << this \
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog << "\tYACCO2_TLEX__:: self thread id:: "\
+ << thread_no__ \
+ << FILE_LINE<< std::endl;\
+ }
+
+@*2 |trace_parser_env| traces the parsing stack.\fbreak
+It check whether the thread has its debug switch on. If it does, it does its own thing.
+It returns the thread's debug grammar switch for other trace macros to test
+whether they should do their trace dance.
+@^ To do - parsing stack dump. canonize output trace!@>
+@<Extern...@>+=
+extern bool trace_parser_env(Parser* parser, bool Trace_type);
+@ Print parse stack prefix.
+@<Print parse stack prefix@>=
+@<acquire trace mu@>;
+ for(UINT x=1;x<=parser->parse_stack__.top_sub__;++x) yacco2::lrclog << ".";
+ yacco2::lrclog << parser->thread_no__;
+ yacco2::lrclog << "::";
+ yacco2::lrclog << parser->fsm_tbl__->id__ << "::";
+@<release trace mu@>;
+
+@*3 Print items on parse stack in FILO order.
+@<Print items on parse stack@>=
+@<acquire trace mu@>;
+Cparse_record* i = parser->parse_stack__.first_sf__;
+Cparse_record* ie = parser->parse_stack__.top__;
+for(int xxx(1);i != ie;i=parser->parse_stack__.sf_by_sub(++xxx)){
+yacco2::lrclog << i->state__->state_no__ << "--";
+CAbs_lr1_sym* sym = i->symbol__;
+if(sym) yacco2::lrclog << sym->id__ << "-> ";
+else yacco2::lrclog << "ZEROED OUT SYMBOL" << "-> ";
+}
+yacco2::lrclog << ie->state__->state_no__;
+
+yacco2::lrclog << FILE_LINE<< std::endl;
+@<release trace mu@>;
+
+@*3 Should grammar be traced?.\fbreak
+The debug switch supplied by the grammar is checked.
+If it's turned on then allow tracing.
+This check lowers the volume outputted.
+It's a spot check on `what the hell is going wrong' with my grammar.
+@<Should grammar be traced? no ta ta@>=
+ if(Trace_type == COND_STK_TRACE){
+ if (parser->fsm_tbl__->debug__ == OFF) return NO;
+ }
+
+@*2 |trace_parser_env| implementation.\fbreak
+There are 2 contexts that stack tracing can take place:\fbreak
+\ptindent{1) within the grammar controlled by YACCO2\_TH\_\_ trace variable}
+\ptindent{2) forced stack trace used by other trace variables}
+@<accrue yacco2 code@>=
+extern bool
+yacco2::trace_parser_env(Parser* parser,bool Trace_type){
+ @<Validate parser's finite state table@>;
+ @<Validate that parser stack is not empty@>;
+ @<Should grammar be traced?...@>;
+ @<Print parse stack prefix@>;
+ @<Print items on parse stack@>;
+return YES;
+}
+
+@*2 Trace pp start info.\fbreak
+This is the tabloid
+giving all the gory details about the parallel thread, its requesting grammar,
+and the starting token stream to-be-parsed.
+@<Trace pp start info@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+sprintf(ma,pp_start,pp_parser.thread_no__,pp_thread_entry.thread_fnct_name__);
+yacco2::lrclog << ma;
+Parser* pp_ = pp_parser.pp_requesting_parallelism__;
+yacco2::lrclog << "YACCO2_MSG__::"
+<< pp_parser.thread_no__
+<< "::"
+<< pp_parser.thread_name()
+<< " requesting parser*: " << pp_
+<< FILE_LINE<< std::endl;
+yacco2::lrclog << "\tYACCO2_MSG__::" << pp_parser.thread_no__ << "::"
+<< pp_parser.thread_name()
+ << " Caller's # threads to run:: " << pp_->no_requested_ths_to_run__
+ << " Caller's # active threads: " << pp_->th_active_cnt__
+ << " Self # competing threads: " << pp_parser.no_competing_pp_ths__
+ << FILE_LINE<< std::endl;
+yacco2::lrclog << "\tYACCO2_MSG__::"
+<< pp_parser.thread_no__ << "::"
+<< pp_parser.thread_name()
+<< " passed token*: " << pp_->current_token()
+<< '"' << pp_parser.current_token()->id__ << '"'
+<< " pos: " << pp_parser.current_token_pos__
+<< FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+ EXTERNAL_GPSing(pp_parser.current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << pp_parser.current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << pp_parser.current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+
+@<release trace mu@>;
+}
+if(yacco2::YACCO2_T__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< pp_parser.thread_no__
+<< "::"
+<< pp_parser.thread_name()
+<< " token*: " << pp_parser.current_token__
+<< " enum: " << pp_parser.current_token__->enumerated_id__
+<< " pos: " << pp_parser.current_token_pos__
+<< ' ' << '"' << pp_parser.current_token__->id__ << '"'
+<< FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+ EXTERNAL_GPSing(pp_parser.current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << pp_parser.current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << pp_parser.current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\tGPS LINE: "
+ << pp_parser.current_token()->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << pp_parser.current_token()->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+
+@<release trace mu@>;
+}
+
+@*2 Trace procedure pp start info.\fbreak
+This is the tabloid
+giving all the gory details about the parallel thread, its requesting grammar,
+and the starting token stream to-be-parsed.
+@<Trace procedure pp start info@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+sprintf(ma,pp_start,proc_parser->thread_no__,called_proc_name);
+yacco2::lrclog << ma;
+Parser* pp_ = proc_parser->pp_requesting_parallelism__;
+yacco2::lrclog << "YACCO2_MSG__::"
+<< proc_parser->thread_no__
+<< "::"
+<< proc_parser->thread_name()
+<< " requesting parser*: " << pp_
+<< FILE_LINE<< std::endl;
+yacco2::lrclog << "\tYACCO2_MSG__::PROC::" << proc_parser->thread_no__ << "::"
+<< proc_parser->thread_name()
+ << " Caller's # threads to run:: " << pp_->no_requested_ths_to_run__
+ << " Caller's # active threads: " << pp_->th_active_cnt__
+ << " Self # competing threads: " << proc_parser->no_competing_pp_ths__
+ << FILE_LINE<< std::endl;
+yacco2::lrclog << "\tYACCO2_MSG__::PROC::"
+<< proc_parser->thread_no__ << "::"
+<< proc_parser->thread_name()
+<< " passed token*: " << pp_->current_token()
+<< '"' << proc_parser->current_token()->id__ << '"'
+<< " pos: " << proc_parser->current_token_pos__
+<< FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+ EXTERNAL_GPSing(proc_parser->current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << proc_parser->current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << proc_parser->current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+if(yacco2::YACCO2_T__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< proc_parser->thread_no__
+<< "::"
+<< proc_parser->thread_name()
+<< " token*: " << proc_parser->current_token__
+<< " enum: " << proc_parser->current_token__->enumerated_id__
+<< " pos: " << proc_parser->current_token_pos__
+<< ' ' << '"' << proc_parser->current_token__->id__ << '"'
+<< FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+ EXTERNAL_GPSing(proc_parser->current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << proc_parser->current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << proc_parser->current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Trace stop of parallel parse message.
+@<Trace stop of parallel parse message@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+sprintf(ma,pp_stop,pp_parser.thread_no__,pp_thread_entry.thread_fnct_name__);
+yacco2::lrclog << ma;
+@<release trace mu@>;
+}
+
+@*2 Trace pp's last symbol on stack set as autodelete.
+@<Trace pp's last symbol on stack set as autodelete@>=
+if(yacco2::YACCO2_TH__){
+THREAD_NO tid = pp_parser.thread_no__;
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_TH__:: " << "sym to be deleted: "
+<< tid << "::"
+<< pp_parser.fsm_tbl__->id__ << "::"
+<< sym->id__
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+@*2 Trace procedure pp's last symbol on stack set as autodelete.
+@<Trace procedure pp's last symbol on stack set as autodelete@>=
+if(yacco2::YACCO2_TH__){
+THREAD_NO tid = proc_parser->thread_no__;
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_TH__:: " << "sym to be deleted: "
+<< tid << "::"
+<< proc_parser->fsm_tbl__->id__ << "::"
+<< sym->id__
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Trace parallel thread waiting-to-do-work.
+@<Trace parallel thread waiting-to-do-work@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << pp_parser.thread_no__
+<< "::" << pp_thread_entry.thread_fnct_name__
+<< " ==>PP waiting for work: "
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Trace pp received go start working message.
+@<Trace pp received go start working message@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << pp_parser.thread_no__
+<< "::" << pp_thread_entry.thread_fnct_name__
+<< " ==>PP go process work: "
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Trace pp finished working.
+@<Trace pp finished working@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::" << pp_parser.thread_no__
+<< "::" << pp_thread_entry.thread_fnct_name__
+<< " ==>PP finished working"
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+@*2 Trace procedure pp finished working.
+@<Trace procedure pp finished working@>=
+if(yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_MSG__::PROC::" << proc_parser->thread_no__
+<< "::" << called_proc_name
+<< " ==>procedure finished working"
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Trace raw characters.
+@<Trace raw characters@>=
+if(yacco2::YACCO2_TLEX__){
+@<acquire trace mu@>;
+yacco2::lrclog
+<< "YACCO2_TLEX__:: " << "chr: " << Char << " File: "
+<< File_no << " Pos: " << Pos
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@** Thread performance macros.\fbreak
+They allow one to see how the thread library stops and starts the threads
+by their output.
+@*2 Entered into waiting for an event.
+@<trace |COND_WAIT| entered@>=
+if(yacco2::YACCO2_THP__ || yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog
+<< "YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<< parser.thread_no__
+<< "::" << parser.thread_name()
+<< " COND_WAIT entered into Wait on event "
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Exit out of waiting for an event.
+@<trace |COND_WAIT| exit@>=
+if(yacco2::YACCO2_THP__ || yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+yacco2::lrclog
+<< "YACCO2_THP__ || yacco2::YACCO2_MSG__::" << parser.thread_no__
+<< "::" << parser.thread_name()
+<< " COND_WAIT exit on event "
+<<" cv_cond: "<< parser.cv_cond__
+<< " no competing thds: "
+<< parser.no_competing_pp_ths__
+<<" no active thds: "
+<< parser.from_thread__->th_active_cnt__
+<< " from: "
+<< parser.from_thread__->thread_no__ << "::"
+<< parser.from_thread__->thread_name()
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Before |SIGNAL_COND_VAR|.
+@<trace |SIGNAL_COND_VAR| before call@>=
+clock_t start_;
+if(yacco2::YACCO2_THP__ || yacco2::YACCO2_MSG__){
+start_ = clock();
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<< parser.thread_no__ << "::" << parser.thread_name()
+<< " to signal SIGNAL_COND_VAR: "
+<< To_thread.thread_no__ << "::" << To_thread.thread_name()
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 After |SIGNAL_COND_VAR|.
+@<trace |SIGNAL_COND_VAR| after call@>=
+if(yacco2::YACCO2_THP__ || yacco2::YACCO2_MSG__){
+@<acquire trace mu@>;
+clock_t stop_ = clock();
+yacco2::lrclog << "YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<< parser.thread_no__ << "::" << parser.thread_name()
+<< " after SIGNAL_COND_VAR : " << stop_ - start_
+<< " to: "<< To_thread.thread_no__ << "::"
+<< To_thread.thread_name()
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 Before |CREATE_THREAD|.
+@<trace |CREATE_THREAD| before call@>=
+clock_t start_ = clock();
+if(yacco2::YACCO2_THP__){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_THP__:: "
+<< Parser_requesting_parallelism.thread_no__ << "::"
+<< Parser_requesting_parallelism.thread_name()
+<< " before CREATE_THREAD"
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 After |CREATE_THREAD|.
+@<trace |CREATE_THREAD| after call@>=
+if(yacco2::YACCO2_THP__){
+@<acquire trace mu@>;
+clock_t stop_ = clock();
+yacco2::lrclog << "YACCO2_THP__:: "
+<< Parser_requesting_parallelism.thread_no__ << "::"
+<< Parser_requesting_parallelism.thread_name()
+<< " after CREATE_THREAD: " << stop_ - start_
+<< FILE_LINE<< std::endl;
+@<release trace mu@>;
+}
diff --git a/web/yacco2/library/makefile_APPLE b/web/yacco2/library/makefile_APPLE
new file mode 100644
index 0000000000..94232bfea2
--- /dev/null
+++ b/web/yacco2/library/makefile_APPLE
@@ -0,0 +1,85 @@
+# File: makefile_APPLE
+# Why: Creates the library of yacco2: libyacco2.a
+# or gens the code and pdf document
+# Library placement:
+# Rlse: /usr/local/yacco2/library/lib/Release
+# Dbg: /usr/local/yacco2/library/lib/Debug
+# `*.cpp' gen and pdf placement:
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files: yacco2/library
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, Genw
+# Rlse --- gen the fast version of library: libyacco2.a
+# Dbg --- gen the debug version of library: libyacco2.a
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library
+# cd /usr/local//yacco2/library
+# make Dbg -f makefile_APPLE
+#
+O2 := /usr/local/yacco2
+#CC := /opt/local/bin/c++-mp-4.9
+CC := clang++ #g++
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+Compile_opts := -c -pthread -arch x86_64
+else
+O2_target_dir := Debug
+Compile_opts := -g -c -pthread -arch x86_64
+endif
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_docs := $(Base_o2)/docs
+O2_library := $(Base_o2)/library
+O2_library_lib := $(O2_library)/lib
+O2_lib_grms := $(O2_library)/grammars
+O2_includes := -I'$(O2_library)' -I'$(O2_lib_grms)'
+
+###
+# Objects to compile
+##
+Objects_to_compile:= $(patsubst %.cpp,%.o,$(wildcard *.cpp))
+Objects_for_lib:= wrc.o wtok_can.o wtree.o wthread.o wset.o yacco2.o
+Objects_for_lib+= yacco2_characters.o yacco2_k_symbols.o
+
+###
+# Compile, link, and move yacco2 library
+###
+Rlse: Compile Move_lib
+Dbg: Compile Move_lib
+
+Move_lib:
+ rm -f $(O2_library_lib)/$(O2_target_dir)/libyacco2.a
+ libtool -static -arch_only x86_64 -o $(O2_library_lib)/$(O2_target_dir)/libyacco2.a $(Objects_for_lib)
+ rm -f $(Objects_for_lib)
+
+Compile:
+ $(CC) $(Compile_opts) $(O2_includes) wrc.cpp -o wrc.o
+ $(CC) $(Compile_opts) $(O2_includes) wtok_can.cpp -o wtok_can.o
+ $(CC) $(Compile_opts) $(O2_includes) wtree.cpp -o wtree.o
+ $(CC) $(Compile_opts) $(O2_includes) wthread.cpp -o wthread.o
+ $(CC) $(Compile_opts) $(O2_includes) wset.cpp -o wset.o
+ $(CC) $(Compile_opts) $(O2_includes) yacco2.cpp -o yacco2.o
+ $(CC) $(Compile_opts) $(O2_includes) $(O2_lib_grms)/yacco2_characters.cpp -o yacco2_characters.o
+ $(CC) $(Compile_opts) $(O2_includes) $(O2_lib_grms)/yacco2_k_symbols.cpp -o yacco2_k_symbols.o
+Genw:
+ cweave wlibrary
+ pdftex wlibrary
+ ctangle -l +e wlibrary
+ sh Makefile_Edit_cweb
+ mv wlibrary.pdf $(O2_docs)
+ rm wlibrary.idx
+ rm wlibrary.scn
+ rm wlibrary.toc
+ rm wlibrary.tex
+ rm wlibrary.log
+ rm wlibrary.c
diff --git a/web/yacco2/library/makefile_GNU b/web/yacco2/library/makefile_GNU
new file mode 100644
index 0000000000..93a8f896c7
--- /dev/null
+++ b/web/yacco2/library/makefile_GNU
@@ -0,0 +1,70 @@
+# File: makefile_GNU
+# Why: Creates the library of yacco2: libyacco2.a
+# or gens the code and pdf document
+# Library placement:
+# Rlse: yacco2/library/lib/Release
+# Dbg: yacco2/library/lib/Debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files: yacco2/library
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, Genw
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library
+# cd /yacco2/library
+# make Dbg -f GNU_makefile
+#
+CC := g++
+
+Rlse: Compile_opts := -c -o3 -pthread #-fno-rtti -frepo -fno-implicit-templates
+
+Dbg: BASICOPTS := -c -pthread -g
+
+Objects_for_lib:= wrc.o wtok_can.o wtree.o wthread.o wset.o yacco2.o
+Objects_for_lib+= yacco2_characters.o yacco2_k_symbols.o
+
+Yacco2_dir:= $(O2)/library/
+O2_docs:= $(O2)/docs/
+Yacco2_grms:= $(Yacco2_dir)grammars/
+O2_includes:= -I'$(Yacco2_dir)' -I'$(Yacco2_grms)'
+Rlse: Compile Move_rlse_lib
+Move_rlse_lib:
+ rm -f $(Yacco2_dir)lib/Release/libyacco2.a
+ $(AR) rv $(Yacco2_dir)lib/Release/libyacco2.a $(Objects_for_lib)
+ rm -f $(Objects_for_lib)
+Dbg: Compile Move_dbg_lib
+Move_dbg_lib:
+ rm -f $(o2_base_dir)lib/Debug/libyacco2.a
+ $(AR) rv $(o2_base_dir)lib/Debug/libyacco2.a $(Objects_for_lib)
+ $(RANLIB) $(o2_base_dir)lib/Debug/libyacco2.a
+ rm -f $(Objects_for_lib)
+Compile:
+ $(CC) $(Compile_opts) $(O2_includes) wrc.cpp -o wrc.o
+ $(CC) $(Compile_opts) $(O2_includes) wtok_can.cpp -o wtok_can.o
+ $(CC) $(Compile_opts) $(O2_includes) wtree.cpp -o wtree.o
+ $(CC) $(Compile_opts) $(O2_includes) wthread.cpp -o wthread.o
+ $(CC) $(Compile_opts) $(O2_includes) wset.cpp -o wset.o
+ $(CC) $(Compile_opts) $(O2_includes) yacco2.cpp -o yacco2.o
+ $(CC) $(Compile_opts) $(O2_includes) $(Yacco2_grms)yacco2_characters.cpp -o yacco2_characters.o
+ $(CC) $(Compile_opts) $(O2_includes) $(Yacco2_grms)yacco2_k_symbols.cpp -o yacco2_k_symbols.o
+Genw:
+ cweave wlibrary
+ pdftex wlibrary
+ pdftops wlibrary.pdf
+ mv wlibrary.pdf $(o2_docs)
+ mv wlibrary.ps $(o2_docs)
+ ctangle -l +e wlibrary
+ sh Makefile_Edit_cweb
+ rm wlibrary.idx
+ rm wlibrary.scn
+ rm wlibrary.toc
+ rm wlibrary.tex
+ rm wlibrary.log
+ rm wlibrary.c
diff --git a/web/yacco2/library/makefile_SOLARIS b/web/yacco2/library/makefile_SOLARIS
new file mode 100644
index 0000000000..62e926d7ff
--- /dev/null
+++ b/web/yacco2/library/makefile_SOLARIS
@@ -0,0 +1,100 @@
+# File: makefile_SOLARIS
+# Why: Creates the library of yacco2: libyacco2.a
+# or gens the code and pdf document
+# Library placement:
+# Rlse: /usr/local/yacco2/library/lib/Release
+# Dbg: /usr/local/yacco2/library/lib/Debug
+# `*.cpp' gen and pdf placement:
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files: yacco2/library
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, Genw
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+# Notice: Some possible construction to be done
+# 1) Adjust base_dir variable if the ``yacco2'' package is moved elsewhere.
+# For example, if u installed the ``yacco2'' package in /opt/yacco2
+# Set the base_dir variable in this file to: base_dir = /opt/
+# The trailing / must be there or ugly things will happen.
+#
+# 2) Make sure u know where the ``ranlib'' utility resides on your system
+# If it's already defined in your ``bash'' ``PATH'' varable then
+# just space out the below ``RANLIB'' variable
+# RANLIB =
+# or set it to point to its residence as what this file has done
+#
+# Example: gen the debug version of the library
+# cd /usr/local/yacco2/library
+# make Dbg -f Gnu_makefile
+#
+RANLIB:= /usr/ccs/bin/ranlib
+Rlse: BASICOPTS := -fast -c -m64 -lpthread
+Dbg: BASICOPTS := -c -m64 -lpthread -g
+
+
+o2_lib := $(O2)/library/
+o2_stbl := $(O2)/compiler/stbl/
+o2_docs := $(O2)/docs/
+o2_lib_grms := $(O2)/library/grammars/
+o2_grms := $(O2)/compiler/grammars/
+o2 := $(O2)/compiler/o2/
+
+
+grms:= $(o2_lib)grammars/
+O2_includes:= -I'$(grms)' -I'$(o2_lib)'
+files_to_cc:= $(o2_lib)wrc.cpp $(o2_lib)yacco2.cpp $(o2_lib)wtok_can.cpp \
+$(o2_lib)wtree.cpp $(o2_lib)wthread.cpp $(o2_lib)wset.cpp \
+$(grms)yacco2_characters.cpp $(grms)yacco2_k_symbols.cpp
+files_to_o:= $(files_to_cc:.cpp=.o)
+Rlse: Compile Rlse_lib
+Rlse_lib:
+ rm -f $(o2_base_dir)lib/Release/libyacco2.a
+ $(AR) rv $(o2_base_dir)lib/Release/libyacco2.a $(files_to_o)
+ $(RANLIB) $(o2_base_dir)lib/Release/libyacco2.a
+ rm -f $(files_to_o)
+
+Dbg: Compile Dbg_lib
+Dbg_lib:
+ rm -f $(o2_base_dir)lib/Debug/libyacco2.a
+ $(AR) rv $(o2_base_dir)lib/Debug/libyacco2.a $(files_to_o)
+ $(RANLIB) $(o2_base_dir)lib/Debug/libyacco2.a
+ rm -f $(files_to_o)
+
+Genw:
+ cweave wlibrary
+ ctangle -l +e wlibrary
+ sh Makefile_Edit_cweb
+ pdftex wlibrary
+ pdftops wlibrary.pdf
+ mv wlibrary.pdf $(o2_docs)
+ mv wlibrary.ps $(o2_docs)
+ rm wlibrary.idx
+ rm wlibrary.scn
+ rm wlibrary.toc
+ rm wlibrary.tex
+ rm wlibrary.log
+ rm wlibrary.c
+
+Compile: $(files_to_o)
+$(o2_base_dir)wrc.o: $(o2_base_dir)wrc.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)wrc.cpp -o $@
+$(o2_base_dir)yacco2.o: $(o2_base_dir)yacco2.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)yacco2.cpp -o $@
+$(o2_base_dir)wtok_can.o: $(o2_base_dir)wtok_can.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)wtok_can.cpp -o $@
+$(o2_base_dir)wtree.o: $(o2_base_dir)wtree.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)wtree.cpp -o $@
+$(o2_base_dir)wthread.o: $(o2_base_dir)wthread.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)wthread.cpp -o $@
+$(o2_base_dir)wset.o: $(o2_base_dir)wset.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2_base_dir)wset.cpp -o $@
+$(grms)yacco2_characters.o: $(grms)yacco2_characters.cpp
+ CC $(BASICOPTS) $(O2_includes) $(grms)yacco2_characters.cpp -o $@
+$(grms)yacco2_k_symbols.o: $(grms)yacco2_k_symbols.cpp
+ CC $(BASICOPTS) $(O2_includes) $(grms)yacco2_k_symbols.cpp -o $@
diff --git a/web/yacco2/library/notes.w b/web/yacco2/library/notes.w
new file mode 100644
index 0000000000..b059759302
--- /dev/null
+++ b/web/yacco2/library/notes.w
@@ -0,0 +1,1078 @@
+@q file: notes.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Notes to myself ... Decisions.\fbreak
+@*2 Evaluate if extern ``C'' should be used in |Set element compare functor|.\fbreak
+Cuz its a closed system, there is no need to make the C++ functor global
+for other languages. So remove "C".
+
+@*2 Cleanup from failed parallel parse.\fbreak
+As the local parallel parse does not affect the
+parser requesting parallelism, there is no save/reset action needed on its
+token stream variable |current_token__| and position.
+So remove the paranonia code.
+
+@*2 Verfiy if all successful threads consume a token even if its{...}.\fbreak
+just a remapper on the current token.
+For example in the Pascal translator, the lookahead token
+might need a re-verification by the symbol table across all scopes.
+So call the thread who tries the remapping and returns the result
+be it the same or remapped.
+
+Now what. Is result in terms of processing the token stream and the new lookahead?
+I got it from the grape vine that... yup. As per normal --- consumption takes place!
+
+@*2 Manual arbitrator how does it work?.\fbreak
+It's a proxy just returning the 1st token in the accept queue.
+|AR_for_manual_thread_spawning| is a canned proxy arbitrator for this purpose.
+There is no judging code. It's a teflon special --- nothing sticks to it; just
+pass back the first item in the queue.
+|spawn_thread_manually| function sets up this default.
+Corrected the |call_arbitrator| who originally jamed the first parm into the accept queue.
+Now, call the arbitrator given for both types normal and manual threads.
+
+Though arbitrator function is a single procedure
+for that state configuration, it must service all the nested threads
+with this configuration.
+I still use the msg as a parameter for calling the function.
+It makes things simpler and consistent: generic parameter passed that needs casting to its
+real self.
+Note: arbitrator is not multi-threaded as there is only 1 copy of itself
+but it is re-entrant. So when two or more competing nested threads
+require its services, I leave it up to the operating system
+to deal with parallelism. It probably throatles back to single process but
+how many situations are there that use nested competing parses of
+same grammatical expressions?
+
+@*2 |Ccm_to_ar| message needed?.\fbreak
+I ask the question in light that an arbitrator is a global procedure and not
+a thread. Yes it is needed as it containes the info to arbitrate.
+Like what? The cm providing the accept queue for review.
+Should the parm be a message type? No, but it keeps it simple Dave.
+
+@*2 Why (CHARP) instead of |Cparse_record| definition in{...}.\fbreak
+the |reduce_rhs_of_rule| function?
+Well back in time, u got it, Microsoft's compiler was a honking.
+So if you look at the generated code for a concrete |reduce_rhs_of_rule|,
+you'll see how it games itself down thru the stack equating the subrule's
+parameters in LIFO.
+Does it still hold this quirk? Don't know until I retry. At the moment,
+I have too many other things to complete.
+
+Well I'm bitting the ??? to make things faster.
+Rewrote the stack and corrected for speed the emitted code of
+the rhs subrules.
+eliminate (CHARP):\fbreak
+3 Oct. 2005\fbreak
+Added rule recycling to speed up parsing due to the rule's birth-run-delete cycle.\fbreak
+June 2007\fbreak
+
+@*2 Why nil ptr test in |T_11|?.\fbreak
+Originally some symbols pushed onto the stack were zeroed out
+to protect from abort cleanups etc.
+This situation does not exist anymore. So rid it ghost busters.
+
+@*2 Clean up parallel parse in control monitor instead of grammar{...}.\fbreak
+requesting parse.
+ It's just cleaner and closer to the action.
+Here are my original thoughts.
+Some house keeping is done.
+The cleanup is to pop the \PARshift{} symbol from
+the attempted parallel parses. It could have been done
+in the control monitor who was the creator of this but
+I felt that spreading this cleanup to the control monitor was potentially
+spreading the mess.\fbreak
+\fbreak
+Dictum: keep the effects' cleanup as close to the affect.
+Is this an Occam?
+
+@*2 Conversion of control monitor and parallel parse code.\fbreak
+This is the injection code included into the outputted grammar modules from Yacco2.
+Conversion cleaned up dregs from cm handling of a ${\vert?\vert}$ dynamic code request.
+A thought of minimal value where there are other means better to cope
+with this type of situation.
+Now what is this situation? How do you cope with a parsing situation like the
+syntax directed code that needs parsing? There is no assigned set of grammars to
+properly parse the \CPLUSPLUS/ code. So, do a dynamic parse looking for a dynamicly
+calculated lookahead token
+to stop the parse-by-character situation.
+
+Now the good stuff. The |cweb| worked first time both in the control monitors and parallel
+grammar threads. Let the applause begin.
+
+@*2 Why is there an abort attribute in the parse stack record?.\fbreak
+If there is a symbol on the parse stack with `affected by an abort parse' turned on,
+the cleanup of an aborted parse will delete the symbol like an ``auto delete'' when
+it pops the parse stack.
+
+@*2 Make all yacco2's types, structures etc housed within yacco2's namespace.\fbreak
+The `INT' type is also used by Microsoft. So, add `yacco2::' qualifier to all
+definitions and implementations. This way there is no conflict of interest when
+porting to other environments.
+
+Correct also the implementations to be qualified by namespace yacco2.
+There are 2 ways to do this.
+Firstly, be explicit per implementation. Secondly, enrobe the implementations
+with a namespace `${\{}$' ... `${\}}$' construct. To each their own ... you'll see both
+approaches depending on my mood.
+
+For the moment, files |wcm_core.h| and |wpp_core.h| are not explicitly qualified by yacco2::.
+This allows the old current code that uses this to be compiled until the |cweb|
+version is completely finished.
+The current system does not
+include everything within the yacco2 namespace.
+
+@*2 Make enclosure of namespace yacco2 explicit in implementation part of code.\fbreak
+Eliminates assumptions. |@<bns@>| and |@<ens@>| bracket the code to be housed
+within yacco2's namespace.
+All implementation code contains this start/stop definition.
+The code |wcm_code.h|, |wpp_core.h|, |war_begin_code.h|, and |war_end_code.h|
+are just that snippets and so are contained within another implementation.
+They still use |@<uns@>|.
+
+@*2 The old version of terminal enumeration:.\fbreak
+The terminal alphabet is represented by the whole numbers both positive and negative.
+Both errors and regular terminals are open ended in
+their expansion capabilities as they are the left and right end points
+in the terminal enumeration scheme.
+Error terminals grow towards minus infinity while the regular terminals expand positively.
+The balance or pivot point of the terminal alphabet is `eog' that starts the meta terminals.
+Meta terminals are indicators of parsing situations like end-of-token stream reached,
+parallel parsing to take place, to different wild type shifts.
+None of these meta-terminals are found within the input language being parsed.
+
+The |Base_enum_of_T| parameter of `fsm' is the starting point of the enumerated terminals.
+Due to the current enumeration scheme, its
+value is required to map a terminal's enumeration id into a set's co-ordinates.
+This is a bit of a hack as each grammar contains this starting point. The hack comes
+about from an out-of-sync condition when new errors
+affecting this start point has been defined and
+all grammars have not been recompiled and passed thru Yacco2's linker.
+The consequence is the parser when run will have strange things happen because
+of the wrong enumeration mapping to the terminals that are buried in the old
+finite automaton's tables.
+Trust me, I'm the guinea pig. Regenerate all the grammars.
+
+Raw characters represent the mapping from the 8 bit ASCII character into its
+raw character terminal.
+Error terminals are internally generated situations produced by the parsing grammars
+manufactured by the grammar writer. They indicate the appropriate faulty situation detected.
+Regular terminals are composites. They get created by the grammars from streams of other
+raw character terminals or composite terminals.
+They are evolutionary and come into existance from various passes made on
+the token streams: lexical to syntactic to semantic.
+
+Reason to change:\fbreak
+Why this type of mapping instead of the positive integers?
+Reality is there is no difference apart from using the range of numbers and how they expand.
+Both meta and raw character terminals are constant in size. It is the
+other two types that expand or evolve as one is developing the language recognizer.
+Either way of enumerating the terminals, when an error or a new regular terminal
+is created, all the grammars need to be regenerated due to the change in the lookahead sets.
+Hindsight critiques that a start seed buried in the grammar's finite state automaton definition
+is required.
+So get rid of it!
+The better design is to enumeration from 0.
+This eliminates the mapping from the negative space into the positive
+space of the set co-ordinates.
+
+Take 2: Here is the new mapping: meta-terminals, raw characters, errors, and finally
+the regular terminals.
+There is no need to map into the positive space
+before calculating a terminal's lookahead set co-ordinates.
+Just use the enumerate value to translate to the set's partition and element!
+
+@*2 Tree token template container.\fbreak
+Well let's try passing references instead of pointers. I hope
+that the compilers are kinder to me within the threaded environment.
+This certainly saves alot of constraint checking. 14 Oct. 2004.
+
+@*2 Add in Yacco2 arbitration requiring code on the possibility of{...}.\fbreak
+2 or more terminals in the accept queue with no arbitration taking place.
+That is, it defaults to the first terminal in the queue.
+The compilation check requires the checking of their first sets for the common prefix condition.
+At the moment, this does not take place due to the yacco2 / linker loop.
+Yacco2's linker generates the transitive first sets for the threads that call other threads.
+So this check is is a post condition beyond the compiler/compiler.
+At present, Yacco2 issues a warning and
+use at your own risk.
+
+At runtime, there still needs a look-over-your-shoulder throw condition.
+This will be implemented
+in the arbitration code. This is done --- 26 Oct. 2004 in Yacco2 generator.
+There is an optimization done before the throw code is appended
+to the arbitration thread:\fbreak
+\ptindent{1) more than 1 thread must be dispatched --- thread with a name: NULL name bypassed}
+\ptindent{2)no arbitration code supplied by the grammar writer}
+
+@*2 Rework of thread management.\fbreak
+At present it is spread between the global implementation of independent
+methods and the table of spawned threads,
+and the worker thread record structure.
+
+@*2 To check: does stop msg have wait/reply mechanism?.\fbreak
+In the shutdown? no.
+
+@*2 Change tree container to a specialized version of |tok_can<AST*>|.\fbreak
+This makes things more consistent. Now, all u see are specialization containers.
+So why did u not do it in the beginning?
+This container was an after thought.
+It was written to support a Pascal translator to re-target a preprocessed Pascal variant using
+Oregon Software's compiler to Dec aka Compac aka HP Pascal.
+As there were special extensions to the Oregon Pascal, a complete front end compiler
+was needed to build a source tree of the program so that the source code could be morphed.
+There were lots of sinning go on.
+Well the outcome was this family of tree walkers and container.
+So what! Why did u not write a template specialization? Probably too deep into
+getting it done without the thought to whether it has any generalization.
+The other containers using string and ifstream did specialize but...
+11 Nov. 2004. Now to correct the grammars that use the old container |tok_can_ast|.
+
+@*2 Eliminate the control monitor.\fbreak
+The middleman is too expensive as a thread due to
+the current threading model.
+This helps
+in optimizing the run performance of Yacco2. To do this meant moving all the responsiblities
+of the control monitor into the grammar requesting parallelism.
+This plumbing is within |Parser|. Part of the demolition meant throwing out the messages
+between the various components --- pp between cm between th.
+Now the message is the media or is it the |Parser|?
+The requesting |Parser| just passes itself to the grammar threads.
+It contains the pertinent token stream variable: token and position (current values)
+within the stream,
+and all the token containers --- supplier, producer, recycling bin, and the error
+container (refuge shelter).
+Also removed was the distinction between the containers --- parallel versus monolithic.
+As parallel grammars just graft onto the current token scene, there is no need to make
+the distinction except at their start up time that grabs
+their containers' addresses from the spawning
+parser.
+They are just readers of the tokens and not writers.
+Now what about error tokens?
+They should not be added to the error queue but should be passed back
+to the calling grammars within the |Caccept_parse| object.
+The arbitrator of the calling grammar determines what should be done.
+If u need to add to it then use the guard dog approach or is it the drake?
+``i get no respect'' so choose your mutex before doing your thing.\fbreak
+
+Done 23 Nov. 2004. Performance gain: 30 percent.
+
+@*2 Eliminate |pp_support__| as a thread optimization.\fbreak
+All info in now contained in |Parser|.
+Depending on how the thread is started --- monolithic or parallel,
+the appropriate parse containers are imported either thru the
+contructor or via the passed parameter.
+
+@*2 Another thread optimization.\fbreak
+If only 1 parallel thread asked to perform, one does not need
+to acquire / release the lock of the requesting grammar to report
+success or failure.
+
+Look I'm trying to make threading closer to recursive descent in performance.
+ Date: 3 Dec. 2004.
+Well I'm crawling out of the swamp... darwinism? If there is just one thread to be run,
+why not call it as a recursive descent procedure instead of the thread route.
+We'll see what the cost of thread modulation is against the procedure call
+approach and its object creation / destruction overhead.
+Take 200.1... 9 percent run improvement of procedure call over threads.
+
+@*2 a N * 2.\fbreak
+Eliminate the number of times that the token container is read does miracles.
+Now let's look at my myopia.
+There was a single pass, call it P1, to break up the character stream into line segments
+followed by the lexical segment called P3. Why? I was lazy and wanted all down stream
+tokens to be properly tagged in file no - line number pairings. Why lazy?
+The P1 pass ensured that the tokens where properly GPSed. I did not have to deal with
+the vagaries of ``how is a line delimited?''. It was handled in one place: the ``eol'' thread,
+ and could be retargeted to other dealings.
+Now the logic is hardwired for now to the ``line-feed'' definition
+based on Ascii encoding.
+By combining the 2 passes (P1 + P3), the number of reads on a N character stream is halved.
+
+Now lets look at the raw character to symbol translation.
+Again this is a 2 traverse mechanism that reads
+from a file its characters that are translated into symbols.
+It should have been a just-in-time read like the tree traversals.
+Each character request fetches the character from the file and then calls the character
+translator to do the cosmetic make over.
+This definitely improves the ``file include'' process.
+This is a reduction from 37 seconds to 15 seconds. Not bad: a 2.something zinger.
+
+Now for the overhead of raw caharcters to symbol objects. Judging from the cursor winking,
+this could be another 10 second improvement. Wait and see...
+Ladies and gentlemen and the winner is ... 37 seconds down to ???
+Maestro the envelope please. 15 seconds!
+A 22 percent improvement against the 100 second starting point but
+2.something faster against the 37 seconds. Slimefast ain't got nothing on us.
+As the song says --- looking for xxx in all the wrong places.
+
+Now what about the cost of symbol creates and std::map usuage in the thread library
+and the garbage collector?
+I'll see what I can do. I must approach the recursive descent speed zone or this
+thought experiment on parallel parsing is just that --- religated to the empirical
+sidelines. A second string something and excuse the pun.
+
+@*2 Remove |unique_id__| from |CAbs_lr1_sym|.\fbreak
+It's original purpose was a birthing number
+to give a count to the number of symbols produced and as a partial order.
+Never used so out damn
+thoughts! Dieting and speed is in.
+
+@*2 Okay guys Yacco2 is starting to smoke.\fbreak
+Here's another improvement. Firstly I was looking in the wrong places: String
+copy was thought to be a major cause but it turns out that its a minor
+overhead. Globalization of the character storage is good at the cost
+of saftey but not a really really big stopper.
+
+So here's the scoop: First set evaluation goes thru INDIVIDUALLY each potential thread
+contained in the state's configuration list.\fbreak
+If there are many potential threads to-be-run assessed on a per character basis
+--- ouch. All one has to do is gather the threads into a consolidation thread
+to have only attempted pass on the first set of the consolidation thread.
+Yacco2's linker consolidates this first set of referenced threads.
+ If the threads are orthogonal to one another
+ (there is no common prefix), then the single first test lowers the cholestoral levels.
+
+With this insight, now to modify the grammars like: pass3, lint, syntax directed
+code gatherer etc. Jan. 1/2005. Well this had limited improvement. Not what was expected so
+see |Global Parallel table entry| where it explains how Yacco2's linker became involved.
+Jan. 6/2005. Speed improvement --- ???.
+
+@*2 Slim down the |CAbs_lr1_sym| space.\fbreak
+This is the base component to all other symbols.
+Originally I had associated the parser across all symbols: Terminals and Rules.
+This fattened the space by 4 bytes. With a shrinking of some variables to short integer
+and unionizing the rule's variables, I brought down the space bloat from 36 bytes to...24 bytes.
+So what? Well, this allows more raw characters to be stored in a prefixed array
+rather than a template container.\fbreak
+3 Jan. 2005.
+
+@*2 Grammar as a logic sequencer: Allow no token containers.\fbreak
+What type of improvement is this? By passing in pointers to the parser,
+does this not open
+up more programming mistakes? Could but hear my reasons please.
+This lets the grammar writer program grammars as logic sequencers using
+epsilon rules and related syntax directed code.
+If the writer is very creative, behavioural terminals could be defined and
+put into a token container for parsing: each to their own.
+See |enumerate_T_alphabet.lex| as an example of this use.\fbreak
+15 Aug. 2005
+
+@*2 Logic bug: same accept token added to accept queue more than once.\fbreak
+Help the needy, the grammar has launched multiple threads and
+these threads have returned the same token.
+This condition is caught by the number of accept tokens in queue
+is not equal to the number of threads reporting success.
+The needy? well i was caught with this logic bug.
+See |Arbitrator code generator|
+where logic check resides.\fbreak
+13 Dec. 2005
+
+@*2 Porting of |cweb| code.\fbreak
+Make sure the the @@i include construct uses quoted file names.
+Without the quotes, the mac version of |cweave| has a slight
+stammer. The Microsoft flavour works.\fbreak
+
+See |Generated finite state automaton macros| for more
+stumblings from within. The c macro definition workaround works but
+the references to the macros are not placed into the
+Index.\fbreak
+16 Dec. 2005
+
+@*2 |cweave| \CPLUSPLUS/ code.\fbreak
+Removed ending semi-colon from
+|RSVP| macro to have |cweave| print out these type of token
+macros onto its own line.
+So make sure u add a ``;'' following their use.\fbreak
+8 Jan. 2006
+
+@*2 |failed| directive added in the |fsm| construct.\fbreak
+I felt the grammar writer
+should be given a last-chance
+to deal with failed parses.
+Why?
+For example, my |yacco2_lcl_option| needs to deal
+with options having multiple letters.
+Now how do u program these
+options whose via prefix is faulty?
+For example, option -err has -e and -er as the potential
+option but are in error.
+One could explode on the combinatorial code within a grammar
+to deal with each evolving prefixe or
+force the calling thread to
+handle the failed thread with some form of epsilon
+in the grammar code.
+This is crude so why not field a returned error terminal?
+To do this i needed a directive of last-chance to be
+tried in the |parallel_parse_unsuccessful| procedure.
+For the moment, it is only supported in a thread grammar.
+Possibly i'll look at the monolithic grammar
+and what it means
+in particular for error correction.\fbreak
+8 Mar. 2006\fbreak
+\fbreak
+Verified that |failed| directive works in a |monolithic|
+grammar. 2 thumbs up for consistency.
+Just make sure that a ``failed'' directive
+within a monolithic grammar
+places the Error T in the ``Error queue'' via the
+|ADD_TOKEN_TO_ERROR_QUEUE_FSM| macro and not |RSVP_FSM| macro:
+this places the error into the ``accept queue'' which is wrong.\fbreak
+15 Jun. 2014
+
+@*2 More token info for tracing.\fbreak
+Added to token trace macros the GPS of the source.
+This allows one to see where within the source things are occurring.
+\fbreak
+22 Mar. 2006
+
+
+@*2 Added to the |CAbs_lr1_sym| definition a ``who created'' GPS.\fbreak
+Comes in handy when errors are throw but from where?
+Errors are directed to the source file
+with no fingering as who the grammar was that generated it.
+So it's up to the grammar writer to tell it as it is.
+Now the |O2_err_hdlr| grammar can spread the word so to speak...
+if it is available.
+See |set_who_created|, |who_file|, and |who_line_no|.\fbreak
+22 Mar. 2006
+
+@*2 Rewrote |tok_can<AST*>| due to global functor firing.\fbreak
+Originally i had the filter mechanism within the
+|tok_can<AST*>| container. This lead to the functor
+being fired by the advance routine regardless
+of whether the tree node was rejected or not.
+Why the oversight?
+i did this to quickly knockoff the tree container.
+Now it's in the tree walker where it should be.
+This way the functor only gets fired if the tree node fetched is accepted
+by the filter or there is no filter.\fbreak
+17 Apr. 2006
+
+@*2 Adjusted array of ``[]'' declaration.\fbreak
+Originally i defined arrays of unknown size as type variable-name[].
+Porting to Sun did not like this.
+So my delimma was ``how to define a base table structure
+ for each table for threads, shifting, reducing etc?''.
+The emitted cpp tables were explicitly sized in their definitions
+ for the ``bsearch'' function to act on but my generic search code was open-ended
+ having no knowledge of each table's size.
+\fbreak
+Solution:\fbreak
+Create a base definition of only 1 entry:\fbreak
+\listing{"/usr/local/yacco2/diagrams/array_def.txt"}
+\fbreak
+22 Dec. 2006
+
+@*2 More porting issues dealing with threads and syncing signals.\fbreak
+When there was only 1 thread requested to run, i optimized out the mutex acquire / release cycle
+and left the Caller parser and the Called thread to complete their launch cycle
+by a) Caller parser goes into a wait state by |pthread_cond_wait| and
+b) the Called thread signaling the Caller parser by |pthread_cond_signal|.
+
+What happens when:\fbreak
+A calls only 1 thread B and B completes before A puts itself into a Wait stupor.
+IE, B will be signalling A to wake up. It depends on the Pthread implementation.
+Some will queue it up for the wait signal to happen and then pass it back immediately
+to the Caller
+while Sun
+drops the signal and so ..... hear the zzzzzs from the sleeping beast and
+the anxiety from the compiler writer while waiting and wait....\fbreak
+\fbreak
+Conclusion: Remove the optimization and just use proper acquire / release hygiene to
+deal with syncing between friends.
+As procedure calls are slower then thread calls due to ``oo'' variable initialization
+and destructor clean up , I'll just remove completely the conditional |THREAD_VS_PROC_CALL__|.
+My tracing works VERY WELL to diagnose this problem. Here here.
+\fbreak
+\fbreak
+Dregs of past thoughts:\fbreak
+|THREAD_VS_PROC_CALL__| thread versus procedure call performance.\fbreak
+{\bf It must be defined as it is a preprocessor conditional symbol}!
+There is a cost of calling a thread versus a procedure call.
+What is it is the reason for this symbol.
+When there is only
+one thread to be launched, this becomes a procedure call instead of a thread.
+Where I'm the doubting Thomas, is the cost of objects birthing and dying greater
+than having a thread startup
+and put on reserve for other calls?
+
+|THREAD_VS_PROC_CALL__| of 0 calls threads and 1 calls procedures.
+The winner is procedure-call by 9 percent. NOT ANY MORE! It's threads cuz of oo's
+overhead in those damn objects and their rights of passage.\fbreak
+\fbreak
+16 Jan. 2007
+
+@*2 Changed back to passing Parser as a pointer for tracing purposes.\fbreak
+When the going get debugged, it a hell-of-lot-better to see what the pointer is pointing to
+in the debug session rather than just an address. Maybe a weakness in the Sun Studio debugger
+but so what. This will allow me to see
+if i'm clobbering memory by the data per parser environment.\fbreak
+29 June 2007
+
+@*2 Some more optimizations.\fbreak
+The grammar suite takes 1:50 minutes. Now to improve.
+@*3 1) precalculates a compressed set key from a terminal's enumerate id.\fbreak
+This eliminates everytime a reduce takes place mapping the terminal's
+enumerate id into a compressed set key format
+so that the lookahead set can be searched. Its a tradeoff towards space
+for speed.
+Adjusted |CAbs_lr1_sym| to contain and manufacture the compressed set key.
+The performance improvement is approximately 20\% --- 35 seconds on grammar suite.
+@*3 2) eliminate passing shift's element enumerate value.\fbreak
+Split the |find_shift_entry| into 2 contexts:\fbreak
+\ptindent{1) current T context}
+\ptindent{2) Rule or returned T from parallelism context}
+\fbreak
+The 2 routines are |find_R_or_paralleled_T_shift_entry| and |find_cur_T_shift_entry|.
+5 seconds improvement on grammar suite.
+@*3 3) eliminating the |tok_can| reader mutex --- nope.\fbreak
+Well here's the scoop. The |tok_can| templates are ``just in time'' (jit) in
+accessing their contents. What does this mean?
+For example, |tok_can<ifstream>| container is a wrapper to access
+raw characters of a file returning the raw character
+transformed into raw character token
+placed into its secondary container for possible reuse.
+If the read request has the token in its internal container ---
+container inside a wrapper container, then it returns it via the
+inside template container's operator[xxx].
+Now for the ``jit'', if the [xxx] request is not inside its
+ internal container,
+|tok_can<ifstream>| calls the ifstream object to fetch the next character.
+For far so good but put this into a multithreaded context
+where there are 2 or more cpus running at-the-same-time.
+Now the |tok_can<ifstream>| ifstream object becomes a critical region.
+What is the critical region part?: its subscript.
+Even though my |get_next_token| request is reader only against the
+|tok_can<>| container, this container itself is a reader/writer depending on
+the context --- reader if it has the request squirelled
+away in its token container, but a writer when it does not
+contain the request and must access the ifstream object.
+An optimization test was
+conducted, no ``jit'' character accessing by the |tok_can<>|
+(all the characters were read at time of open before any read requests were done)
+versus the ''jit'' with guarded mutex.
+Though the winner was no ``jit'' by only 3 seconds over 80 compiles,
+it was not worth the gain over a slighlty unsafe attitude.
+ I would have
+needed to adjust all
+|tok_can<xxx>| variants to remove the ``jit'' unsafe condition. \fbreak
+August 2007
+@*4 Elimination of reader mutex for optimization reasons.\fbreak
+The Ides of nagging made me do it for speed. So mutex control has been
+eliminated from the ``jit'' containers that are now not ``jit''.
+These template containers now do a double read across their input
+as the cost of the read mutex is tooooo slow: 3/80\%.
+I'm putting into my subconsious the problem to find a better silicon / hardware solution to
+critical region control.
+I'll have a look at the overhead using Sun's ``dtrace'' facility not
+only for mutex overhead but also other optimizations that can be done to \O2
+to approach top-down parsing speeds --- ie \O2{}batch versus \O2: \O2 is approximately
+4 times slower. Don't know if this is an accumulation of
+c++ and templates etc against a bare bones
+\O2{}batch ``c'' language approach?
+\fbreak
+Sept. 2007
+@*4 Parallel thread reduction should be lr(0).\fbreak
+Here's the scoop: if a thread's lookahead boundry is a superset
+of what should follow, the returned lookahead token could be in error.
+As \O2's reduce operation looks to find its boundry dependent
+of the faulty lookahead, guess what it throwns an error due to the
+lookahead token not found in the reduce table of the calling grammar.
+So create a new |find_parallel_reduce| procedure that just returns the first |Reduce_entry|
+to complete the reduce. It effectively is lr(0): no concern for the following token context!
+
+Now the error can be dealt with by programming the shift operation within the grammar
+using either \ALLshift{} or \INVshift{} to capture the faulty parse point and to
+report a specific error against the GPS of the returned lookahead token.
+\fbreak
+Oct. 2007
+@*4 Make |accept_queue| more efficient.\fbreak
+Make it a fixed array of local |Caccept_parse| for 2 reasons:\fbreak
+\ptindent{1) eliminate the new / use / delete cycle: malloc is too slow}
+\ptindent{2) don't need a map but just a sequential queue}
+This gives a 13 percent inprovement.
+\fbreak
+Nov. 2007
+
+@*4 Use Procedure call when only 1 thread needs to be run.\fbreak
+The mutex / thread paraphrenalia is tooooo slow compared to a procedure call.
+This thought was nagging me since my
+1st \o2 compiler written by recursive descent.
+It became my bench mark that thread parsing was measured against.
+Yes i'm aware of the bottom-up optimization by Ullman but i'm
+not there yet in digesting the optimized requirements
+to lower the
+push / pop overhead by consolidation of subrules and their syntax directed code
+that need some form of sequential sequencer when the consolidation
+consequence must get exercised.
+
+Now why come back to this subject anyway?
+Those nagging optimization muses!
+I eliminated the mutex controlls due to threads and my critical regions;
+there is a 1:1 activity taking place whereby
+the calling of the procedure
+by the requesting grammar passes the right to the called
+procedure to enter its critical region when needed without
+the paranoia of duality destructive conditions.
+By
+making the |Parser| and its evil grammar fsm twin global and by mallocing them
+within the called procedure, the overhead should be lessened.
+Mastro the envelop please.
+And the winner is: 25\% faster.
+How was this measured? My Apple laptop where running times
+between threads only against the hybrid
+approach where taken using the |o2grammars.bat| script.
+\fbreak
+Dec. 28, 2007
+
+@*4 Thread's start-up attributes for stack size and system scope?.\fbreak
+I played with |pthread_attr_setstacksize| and |pthread_attr_setscope|
+attributes to improve possibly speed and fat deposits.
+Well the |pthread_attr_setscope|'s setting of |PTHREAD_SCOPE_SYSTEM|
+made things worse as this was an aggregate of all things considered.
+Procedure calls of threads by threads made the run environment
+too sensitive to this unknown size mix.
+The result can produce a |SIGSEGV|.
+Experimenting by increasing the |stack size| delayed the problem but bloated the run size.
+As always the cure was easy: just remove this fiddling and default to
+the runtime attributes of the local |pthread| implementation.
+On the Sun Solaris, the stack size for all threads is 1 megabyte --- more than enough.
+\fbreak
+Apr. 2008
+
+@*2 Error detection within a grammar: new \QUEshift{} symbol introduced.\fbreak
+\QUEshift{} was created to handle questionable situations like error
+detection points within a grammar. It can be expressed as a normal shift terminal
+or within the returned T of a \PARshift{} thread expression.
+As the lookahead symbol is questionable, using the \ALLshift{} or \INVshift{} symbol to handle
+error detection has one weakness: its subrule reduce operation depends on the lookahead set
+ which the current T could be not in this LA set. Consequently the reduction
+could possibly will not action.
+Introducting the new symbol draws the reader's eye to the error point with the grammar.
+The reduce is a lr(0) context which means no dependency on the current symbol and so
+the subrule always reduces!
+This allows the grammar writer to coerse the parser's
+behaviour by the subrule reducing syntax directed code.\fbreak
+Warning:\fbreak
+The current token is {\bf not advanced} so perpetual motion on the
+same token spot could occur if one is using the \QUEshift{} to act like a \ALLshift.
+|@<Invalid \QUEshift instead of \ALLshift use@>| has
+been created to detect and stop the parse process.
+So be warned.\fbreak
+June 2008
+
+@*2 Speed wonderful speed in ``Oliver Twist'' and not William Burroughs.\fbreak
+Well the rule recycling works now. No more new(s)... Just recycle them grammar
+rules.
+The envelope please ... 25\% speed improvement from 32 to 24 seconds against
+all them grammars. As time shrinks there seems to be an asymtotic return on
+performance improvements. But this one is good; no really very good.
+I'm only 4--5 seconds away from the recursive descent bench mark.
+It's malloc! and its mutual exclusion that is very very expensive by
+the following ``dtrace'' outpout.\fbreak
+\INDENT{.5in}{0 57766 lmutex\_lock:entry}
+\INDENT{.6in}{libc.so.1`lmutex\_lock}
+\INDENT{.6in}{libc.so.1`malloc$+$0x25}
+\INDENT{.6in}{libCrun.so.1`void*operator new(unsigned long)$+$0x2e}
+\INDENT{.6in}{o2`void NS\_o2\_sdc::Co2\_sdc::reduce\_rhs\_of\_rule(...*)$+$0x282}
+The above trace also brought out my sloppiness in proper code emmissions per
+grammar's |reduce_rhs_of_rule| routine. I never stored the
+newed rule so each time the grammar was run the used rules were recreated --- uck.
+\fbreak
+\fbreak
+Dec. 2008
+
+@*2 Improve dumped data when Shift T not found in parse table.\fbreak
+See |@.Err Can't find symbol to shift i...@>| where it is thrown.
+Though this is a grammar writer's lack of error catching in his grammar,
+ at least dump out the info on T: its enumerated id and literal.
+Now the info dump contains the grammar in question,
+its current parse state, and the T details.
+Why isn't it using a Error class T
+ and to use \O2's generic error queue dump facility?
+Cuz this is below the user's language: remember this is a generic interface
+without any knowledge of what's being built on top of it.
+ And I
+didn't want to force yet another canned set of T definitions like lr constant and rc.
+\fbreak
+\fbreak
+Feb. 2009
+
+@*2 VMS spits core dumps when its thread stack is exceeded.\fbreak
+Ahh recursion is sometimes devine but
+not when the stack limit is exceeded
+thinking its a runaway recursion call when A recurses on itself
+without any stop recursion detection.
+So U must increase the |VMS_PTHREAD_STACK_SIZE__|
+symbol in the |yacco2_compile_symbols.h|
+file and rebuild the \O2 library.
+The allocated thread stack size was 128k before the Pascal translator
+starting to choke due to better symbol table management
+that increased the |pas_variable| grammar run size
+when dynmically creating the statement variable's
+symbol table components.
+double ugh but this is reality.
+\fbreak
+\fbreak
+Feb. 2009
+
+@*2 Caught by your short and curly --- local variables in grammar rule.\fbreak
+The short of it is the recycling of rules to new once reuse forever.
+The consequence is the rule gets recycled and if u have
+not reinitialized the variable aka an array or table then
+ the past dregs of invocation will haunt u.
+Either crate the variable in the ``fsm'' grammar construct or
+reinitialize in the rule's construct directive.
+Better yet do it in the rule's ``op'' directive
+before the variable is being used.
+Do u really want the curly part?
+Of course not so where did it grab u Dave?
+Grammar |la_express| to calculate the lookahead expression.
+Rule reuse happens on ``+'', ``-'' expressions: eolr - ".".
+\fbreak
+\fbreak
+Feb. 2009
+
+
+@*2 Add a complete trace on fetching a T when symbol functor in use.\fbreak
+When the |tble_lkup_type| token fetching in its various forms
+ attempts to remap the
+raw T, i just traced the fetched T before the potential
+remapping took place.
+If the symbol table functor is in place and turned on then the after attempt is
+now also traced.
+This was highlighted when i wrote a Pascal translator with
+a syntax directed symbol table scope handling
+and my myopic test was the problem as i put an externally defined
+function within a local procedure.
+Boy my misfits never cease to entertain.
+This seems to be my problem where the original test item was faulty.
+I guess u could say my grammars should have caught this faux-pas but
+they were not written to catch all sins but to remap one correct
+Pascal program into another correct Pascal variant.
+Some error reporting is being done but the more
+others use it the more retrofitting of error reporting is taking place.
+More for the weary when problems prevail.
+\fbreak
+\fbreak
+Feb. 2009
+
+@*2 Add right recursion support for rule recycling.\fbreak
+Well how did i treat this?
+I detected full rule use consumption and outputted a message to the grammar writer
+that all the allocated rules were in use and exited with a message.
+Please see grammar |rules_use_cnt.lex| as to how it counts number of rules
+in a left recursion scenario.
+Well this was not good as right recursion has its place in parsing
+though it hits hard on the parse stack.
+How so?
+Before the rule can be reduced it keeps pushing aka shifting until
+its lookahead boundary is met.
+So if the parse exceeds the fixed stack size it will still honk
+with an abrupt message and quick stage exit.
+Staying within the stack allocation is fine.
+See |MAX_LR_STK_ITEMS| as to the parse stack allocation: adjust accordingly.
+\fbreak
+\fbreak
+Feb. 2009
+
+@*2 Changed input order of T Vocabulary --- exchanged T with Error T.\fbreak
+Why the change?
+This allows the grammar writer to
+write independent compiler/grammar combos --- Eg front end lexing of Unicode,
+so that the front-end creates the external token container for the other
+compiler/parser combo to digest.
+Currently all token containers are memory only template derived.
+With this change the parser/grammar(s) T Vocabulary now appends the Errors
+at the end of T Vocabulary enumeration scheme.
+The second parser/grammars combo must include the first T definitions
+in their own T Vocabulary in the exact order defined by the first parser.
+From there it can build its own T Vocabulary of additional Tes and Error symbols.
+Another way is to remap the enumerated ids of the first parser's tokens
+ into the
+ordering scheme of the second parser.
+Use of the token read functor associated with a read token container
+ to remap Tes at read time.
+It could just change the ``enumerate\_id'' value of the old token into the
+current parser's T Vocabulary mapping.
+It could also create a new token but this itself is overkill unless one is
+remapping the token into another different token type:
+for example remapping an ``identifier'' token
+into a keyword by use of a symbol table lookup.
+\fbreak
+Caveat.\fbreak
+Currently the \O2 library has globally defined symbols that
+get resolved at linker time.
+So one cannot run mutiply defined independent threads of
+parsers with having exclusive use of \O2.
+\O2's implementation
+contains multiple independent parsers sharing the same \O2 library
+and only 1 super set of Tes defined for all parse stages.
+For example, the command line to \O2 gets parsed by
+its own grammars and their outputted tokens become downstream fodder
+for the suite of grammars used to parse the inputted grammar file.
+\fbreak
+\fbreak
+There is still work to be done to consolidate
+\O2's external symbols into a structure containing indirect pointers
+to these symbols that are currently resolved by the linker (ld).
+1st thought:\fbreak
+1) have a local structure initialized to these pointers.\fbreak
+2) register this structure of pointers with the runtime
+library of \O2 before any parsing begins.
+\fbreak
+3) each independent parser can run in its own thread
+\fbreak
+2nd Thought:\fbreak
+1) use a fork process where the token containers are passed
+somehow as input to the subprocess that fills its booty.
+This thought is similar to the spawning of a
+grammar as a thread or its optimized procedure call.
+\fbreak
+\fbreak
+May. 2009
+
+@*2 Tree container is out-of-sorts from self modifying trees.\fbreak
+Well its back to just-in-time (JIT) reading of the tree |tok_can<AST*>|
+as the following example outlines why:\fbreak
+Given a grammar that reads a specific T type like ``call-stmt'' and u want to
+change its younger brother to a different T. What happens during the parse?
+The current T is shifted onto the parse stack
+and the lookahead T is fetched becoming the current token. This LA T will
+be a ``call-stmt'' possibly used to reduce the shifted T ``rhs'' subrule.
+The problem is the container has the unmodified reference
+of the lookahead T. Now within the grammar's syntax-directed-code u
+process the younger brother nodes to which u changed some of the
+tree's content. If u are unlucky, the LA T's id gets changed.
+Irrational behaviour could occur: the parser doesn't
+reduce properly or possiblely as the T type is different from the
+parse stack frame entry of ``call-stmt'', this acts like
+an uninitialized object having
+random behaviour.\fbreak
+\fbreak
+So what can one do? i corrected the |tok_can<AST*>| container to JIT
+ reading of its Tes and
+implemented the |remove| method that pops the last entry from the container.
+If u are modifying the T type of the tree: ie replacing the tree node's content
+with another T type, now the grammar writer
+must add syntax-directed-code to remove the LA T from the container,
+ re-align
+the current token position to the shifted T position,
+and do a ``get\_next\_token'' to fetch the proper LA T thus maintaining
+the integrity of the parser.
+All this sounds like a lot of work but here is an example of such coding:\fbreak
+An example:\fbreak
+\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/treemodify.txt"}
+\fbreak
+\fbreak
+The code above is taken from a grammar's ``rule'' syntax-directed-code.
+The rule has a reference to the parser environment and doesn't have to go
+thru the ``fsm'' route
+to get at the token supplier.
+lines 5--6 gets the tree token container from the parser and casts it
+to a tree container.
+Lines 7--8 removes the last T from the container and re-aligns the
+parser's current token position
+to the shifted T position.
+Note: All token containers have subscripted token access starting from 0.
+Line 9 fetches the new LA T for the parser to continue merrily along its way.
+There are other ways to re-align the LA T:
+Please see |@<Parser's token defs@>|.
+All this for dynamic modifying of trees: good stuff!
+\fbreak
+\fbreak
+May 2009\fbreak
+@*2 Multiple Reader/Writer improvement to supplier container.\fbreak
+Historics: JIT fetching of tokens from an ``ifstream'' container demanded
+locking when the request was not in the container.
+Consider 2 parallel threads A and B competing where their read requests to the
+container are simultaneous: A on cpu 1 and B on cpu 2 and their requests
+are not in the container.
+The critical region becomes the physical i/o to the ``ifstream'' object
+when the request was not within the container.
+So what did i do? experiment 1 was remove the JIT attitude and read
+all the ``ifstream'' characters into the container at file open time.
+Now the container becomes a read-only with no need to use locking.
+So ``ifstream'' issue is solved but what about a tree container with T filtering?
+It is a JIT container that requires locking protection as u do not
+want to walk the complete tree filling it up before the first read request.
+Also consider a self modifying tree.
+What? The Pascal translator required the following:\fbreak
+The HP ``delete'' call statement had to be removed and replaced
+with a raised signal variable
+ so that its future close statement could deal with
+it using a ``delete disposition'' clause within a modified close.
+This future close tree node was morphed into a conditional subtree
+dealing with ``to delete or not to delete'' issue.
+Without the JIT attitude the tree walker has remnants of the before
+tree surgery.
+The container could contain
+items that are no longer valid due to this modification.
+\fbreak
+\fbreak
+Back to the JIT and Quick overview of mutual exclusion.\fbreak
+When a writer in introduced, locking protection is required
+if there is more than one simultaneous accessor to the container.
+If there are only readers JIT still demands writing to the container before the
+read request can be satified.
+No lock protection is required when only one suitor is active.
+Within the parsing environment, all threads are co-operative and must house
+clean when completing their task even though they might abort.
+By keeping a reader/writer count against the container and per parser,
+the supplier container lock usage can be optimized according to the simultaneous
+number of accessors.
+\fbreak
+\fbreak
+What about the other containers: recycle-bin, error, and producer?
+Do they require lock protection?
+Yes they do when they are being filled
+ and yes when they are acting as a supplier container.
+As they are more infrequently used, i leave the locking
+mechanism with the ``add\_token\_to\_xxx'' procedures where
+xxx is one of ``error\_queue'', ``producer'', or ``recycle\_bin''.
+For occassional back door T adding to the supplier,
+the ``add\_token\_to\_supplier'' procedure is lock optimized
+on simulatneous accessors as the supplier container maintains its suitor count.
+\fbreak
+\fbreak
+June 2009\fbreak
+@*2 Removed |grammar_stk_state_no__| from the |CAbs_lr1_sym| definition.\fbreak
+The original thought was to capture the parse stack number at time of
+T creation for error tracing.
+The thought was half baked as what happens when a T is created
+outside of the parsing environment --- no parse stack?
+So out half-baked!
+If the grammar writer needs this information, it can be programmed explicitly
+by the grammar writer by adding the appropriate attributes
+ to the error T being logged.
+\fbreak
+\fbreak
+June 2009\fbreak
+@*2 Note on what's in the token container and its size.\fbreak
+The ``end-of-grammar'' condition signaled by the
+|PTR_LR1_eog__| T is not an element of the container.
+Why?
+It acts as a conditional being only-the-lonely as only
+the Tes in the token stream are contained.
+So u are warned.
+If u are testing the token container for size --- for example
+u walked a tree container with filtering and u are testing whether the
+2 Tes and the ``end-of-grammar'' condition are there, u should test the
+container's size for 2 elements
+and not 3.
+Why all this verbage? whispers to myself.
+\fbreak
+\fbreak
+June 2009\fbreak
+@*2 Sets: Sequential versus binary search optimization.\fbreak
+Well what is the break-over point when to use a sequential
+search on an ordered table versus a binary search?
+This question came up when i wanted to improve set handling: aka
+shift, reduce operations within the fsa state.
+Try to paper out the result! I finally wrote a simple
+program to gather stats on the break-out point.
+Surprizingly it was 72 elements.
+The test used a table of elements having a multiple of 3 as 1*3, 2*3, etc.
+The population went from 1 to 128 elements, and for each element in the table,
+a spanned search key of +,-, and = the element key was done.
+This was run against each search type to find out the break-over point
+on instruction costs.
+Now all state searches have a dual strategy tested against the
+|SEQ_SRCH_VS_BIN_SRCH_LIMIT| constant as to what search type to use.
+\fbreak
+\fbreak
+July 2009\fbreak
+
+@*2 Change T containers's subscripting to unsigned integer or my subtle stupidities.\fbreak
+Why the change from signed to unsigned integers for size, subscripting?
+Depending on the stl template library, there will be unresolved references to
+method like ``size'' that returns unsigned.\fbreak
+\fbreak
+Stupidity number 1: overloading the subscript range: subscript \LTsign{} 0 \derives{}
+have not accessed container
+for T, before first time access, etc. U get the notion.
+Due to this, ``first-time-accessed'', and ``end-of-container-reached'' attributes were needed.
+Tree walking with filtering needed special attention in
+ the ``do i already have a T in the container?'' and ``end-of-tree-reached''.
+That is, a request could be asked to fetch a specific T after the ``end-of-tree'' has already
+been reached.\fbreak
+\fbreak
+2nd stupidity: not commenting / documenting that a Parser expects that the T is already been
+fetched before it
+requests it. This showed up in my haha finetuning of my logic on tree containers and the
+discrete logic grammars
+getting nada input: dead end T.
+\fbreak
+\fbreak
+Cost to my overloading, about 8 hours of work to farret out these subtleties.
+I know its rather simple but this is my twilight zone of stupidity.
+\fbreak
+\fbreak
+Nov. 2009\fbreak
+
+@*2 Porting to Microsoft: Visual Studio 8.\fbreak
+Some not so happy comments on 32 bit console application:\fbreak
+1) They got it wrong when it comes to C runtime (CRT) and their
+different calling types: \_\_cdecl, \_\_stdcall and
+how their libraries static or dynamic were built.
+The threaded library needs \_\_stdcall, while the main program needs \_\_cdecl.
+Each library draws from its own memory pool depending on what library type u are using.
+So build everthing using \_\_cdecl and fine-tune the call to ``\_beginthredex'' with
+\_\_stdcall.\fbreak
+2) U better choose the right type of multi-threading ``/MT'' or ``/MD'' or Klack-klack-klack?
+Well trial-by-error discovered ``/MT'' is the right one and not their choosen default.\fbreak
+3) Forums are thin on quality but lots of verbage on
+multi-threading: Try looking up exit code (255).\fbreak
+4) U better use ``/force:multiple'' to allow all those common c++ rtns to coalesce.\fbreak
+5) Last, their Release libraries don't work! its blows up before
+the program ``main'' is entered into.
+So the port has the porky version but it works!\fbreak
+\fbreak
+Alas poor fool for thinking they improved on this from Visual Studio 5 to 8.
+It was trial-by-the-blind using the various combinations to get it going.
+Better cosmetic documents but of same software quality ilk. Well my tea
+reading is this: cica 2003
+was move to the CLR / C sharp development and leave as is the 32 bit console application code.
+Let the street hawkers spin their new tails of enchantment to follow them.
+Anyway the port is done but tooth mashing ain't fun.
+\fbreak
+\fbreak
+Nov. 2009\fbreak
+
+@*2 Mutexing the containers.\fbreak
+A review:\fbreak
+1) All containers start with one owner. Therefore the 1st fetch is safe.\fbreak
+2) All sequential reads from a container is safe.\fbreak
+3) After a T is delivered from its container, the container checks nto see if
+the request was for its last T inside it. If so
+the container will do a future request by itself and not by the consumer.
+That is it is pushing the race condition ahead to maintain saftey to the consumer.\fbreak
+4) This future read i call lookahead. It contains the mutex mechanism to protect from 2 or
+more suitors. So what happens when 2 consumers request the same last T?
+Well there could be 2 potential lookaheads attempted. Only 1 lookahead T added to the
+T pool.
+What happens if the lookahead request hits the end-of-T-stream?
+The mutex protect checks for this.
+\fbreak
+\fbreak
+Nov. 2009\fbreak
+
+@*2 Some refinements to source file/line tracings.\fbreak
+External file print sourcing improved, added source file/line to dynamic
+tracing.
+Cleaned up ``Generated finite state automaton macros'' from ``c type macros''
+back to cweb macro.\fbreak
+See |EXTERNAL_GPSing| and |FILE_LINE| macros with appropriate comments.
+\fbreak
+\fbreak
+Jun. 20014\fbreak
+
+
+
diff --git a/web/yacco2/library/parse_env.w b/web/yacco2/library/parse_env.w
new file mode 100644
index 0000000000..dfddde2f8e
--- /dev/null
+++ b/web/yacco2/library/parse_env.w
@@ -0,0 +1,312 @@
+@q file: parse_env.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Parse stack environment.\fbreak
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/parse_stk_env.1"}{1}{1}
+\fbreak
+\fbreak
+Some general comments on the parse stack environment:\fbreak
+Firstly it's just an array of |parse_record| whereby
+the determinist push-down automaton straddles 2 array records: the first record
+contains the state address and its stacked symbol and the second
+record contains the goto state that it vectors to.
+To improve parsing speed, the rule's ``birth-run-delete'' cyle
+has been replaced by recycling of the rule: ``birth once run forever''
+ until the parser is shutdown.
+To do this a |Rule_s_reuse_entry| is kept per required
+number of recurse / use count per rule.
+This is determined by analysing the grammar and counting
+the rhs of each rule for the rule's use patterns.
+See |structure.w| of \O2{}library explaining this.
+
+Each grammar locally contains its ``rules's reuse'' table.
+The |reduce_rhs_of_rule| procedure reads
+the recyled rules's table and returns the dupple containing
+the rule and the address within
+the recycle table containing the |Rule_s_reuse_entry|. Both components are pushed
+onto the parse stack frame.
+When the parse stack frame is popped due to a reduce of the rhs of a rule or due to an abort,
+each stack frame being popped is inspected for its symbol context:
+Rule or Terminal, or possibly nothing.
+If the symbol context is of Rule, the |Rule_s_reuse_entry|'s
+ ``in use'' indicator is reset for recycling.
+\fbreak
+\fbreak
+ Another subtlety is that of ``how to reset the rule's object''?.\fbreak
+In c++ terms, as the rule's class only has ctor and possibly
+a dtor that are implicitly called
+by the generated code,
+ ``how do u reset the object for reuse as this is not a copy situation?''.
+Not to blame c++, this situation was not thought of until now by me.
+ This requires an inspection of the grammar rule's definition for a grammar's
+ ``constructor'' directive that
+ usually does specific initializations at time of rule creation.
+ If it does not exist, then there is nothing to be done
+ unless the grammar writer has defaulted to the compiler's
+ initialization code for the class's
+ locally defined variables --- as they say in French d\'esol\'e.
+ For me this unspoken initialization is not good as it is implicit
+ and i prefer being forthright to my coding intentions.
+ Given this, a ``reuse type'' ctor must be defined within the rule's class containing
+ the constructor directive's
+ code if required and called
+ inside the preliminaries of |reduce_rhs_of_rule| procedure for the specific rule.
+
+
+
+@*2 Parse record.\fbreak
+|Cparse_record| defines the record of the parse stack.
+Due to my way of |cweb| source code ordering, type definitions come before
+structure definitions.
+In this case,the structure definition is outputted as a type definition
+ instead of as a structure.\fbreak
+\fbreak
+``abort\_\_'' adjusted to ``void*'' from ``bool'' as my optimization
+on stack frame of individual
+structures being multiples got slack bytes generated when porting to a HP Aplha.
+So make sure all are of same size.
+Put back to bool.
+@<Type...@>+=
+struct Cparse_record{
+ void set_aborted(bool X);
+ bool aborted()const;
+ yacco2::CAbs_lr1_sym* symbol();
+ void set_symbol(yacco2::CAbs_lr1_sym* Symbol);
+ yacco2::State* state();
+ void set_state(yacco2::State* State_no);
+ void set_rule_s_reuse_entry(yacco2::Rule_s_reuse_entry* Rule_s_reuse);
+ yacco2::Rule_s_reuse_entry* rule_s_reuse_entry();
+ yacco2::CAbs_lr1_sym* symbol__;
+ yacco2::State* state__;
+ bool aborted__;
+ yacco2::Rule_s_reuse_entry* rule_s_reuse_entry_ptr__;
+};
+
+@*2 Lr parse stack structure.\fbreak
+Why the home grown stack --- SPEED. Templates are toooo slow
+with to many generalities.
+@<Type...@>+=
+struct lr_stk{
+ lr_stk();
+ void lr_stk_init(yacco2::State& S1);
+ void push_state(yacco2::State& S1);
+ void push_symbol(yacco2::CAbs_lr1_sym& Sym);
+ bool empty();
+ void pop();
+ void clean_up();
+ Cparse_record* sf_by_sub(yacco2::UINT Sub);
+ Cparse_record* sf_by_top(yacco2::UINT No);
+ Cparse_record lr_stk__[C_MAX_LR_STK_ITEMS];
+ yacco2::UINT top_sub__;
+ Cparse_record* top__;
+ Cparse_record* first_sf__;
+ State* first_state__;
+};
+
+@*2 Parse stack implementation.
+@<accrue yacco2 code@>=
+lr_stk::lr_stk(){
+top_sub__ = 1;
+first_sf__ = &lr_stk__[1];
+top__ = first_sf__;
+first_state__ = 0;
+top__->state__ = 0;
+top__->symbol__ = 0;
+top__->aborted__ = 0;
+top__->rule_s_reuse_entry_ptr__ = 0;
+}
+
+void lr_stk::lr_stk_init(yacco2::State& S1){
+top_sub__ = 1;
+first_sf__ = &lr_stk__[1];
+top__ = first_sf__;
+first_state__ = &S1;
+top__->state__ = first_state__;
+top__->symbol__ = 0;
+top__->aborted__ = 0;
+top__->rule_s_reuse_entry_ptr__ = 0;
+}
+
+bool lr_stk::empty(){
+ if(top_sub__ < 1) return true;
+ return false;
+}
+
+void lr_stk::push_symbol(yacco2::CAbs_lr1_sym& Sym){
+ top__->symbol__ = &Sym;
+}
+
+void lr_stk::pop(){
+ --top_sub__;
+ --top__;
+}
+
+void lr_stk::clean_up(){
+ top_sub__ = 1;
+ first_sf__ = &lr_stk__[1];
+ top__ = first_sf__;
+ top__->symbol__ = 0;
+ top__->aborted__ = 0;
+ top__->state__ = first_state__;
+ top__->rule_s_reuse_entry_ptr__ = 0;
+}
+
+@ |lr_stk::clean_up()|. Speed demon.
+@<|lr_stk::clean_up()|@>=
+ top_sub__ = 1;
+ top__ = first_sf__;
+ top__->symbol__ = 0;
+ top__->aborted__ = 0;
+ top__->state__ = first_state__;
+ top__->rule_s_reuse_entry_ptr__ = 0;
+
+@ |lr_stk::empty()|. Speed demon.
+@<|lr_stk::lr_stk::empty()|@>=
+ if(top_sub__ < 1) return true;
+ return false;
+
+@ |lr_stk::pop()|. Speed demon.
+@<|lr_stk::pop()|@>=
+ --top_sub__;
+ --top__;
+
+
+@*2 Parse stack implementation.
+@<accrue yacco2 code@>=
+Cparse_record* lr_stk::sf_by_sub(yacco2::UINT Sub){
+ if((Sub < 1) || (Sub > MAX_LR_STK_ITEMS)){
+ char a[BUFFER_SIZE];
+@.Err lr\_stk - sf\_by\_sub invali...@>
+ yacco2::KCHARP msg = "lr_stk - sf_by_sub invalid sub: %i not in range 1..%i";
+ sprintf(a,msg,Sub,MAX_LR_STK_ITEMS);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ return &lr_stk__[Sub];
+}
+
+Cparse_record* lr_stk::sf_by_top(yacco2::UINT No){
+ int s = top_sub__ - No;
+ if(s < 1){
+@.Err lr\_stk - sf\_by\_top underf...@>
+ char a[BUFFER_SIZE];
+ yacco2::KCHARP msg = "lr_stk - sf_by_top underflow top sub: %i, requested sub: %i < 1";
+ sprintf(a,msg,top_sub__,No);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ return &lr_stk__[s];
+}
+
+@*2 Parse stack implementation.
+@<accrue yacco2 code@>=
+void lr_stk::push_state(yacco2::State& S1){
+ if(top_sub__ >= MAX_LR_STK_ITEMS){
+ char a[BUFFER_SIZE];
+@.Err lr\_stk - push overflow stac...@>
+ yacco2::KCHARP msg = "lr_stk - push overflow stack max: %i";
+ sprintf(a,msg,MAX_LR_STK_ITEMS);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ ++top__;
+ ++top_sub__;
+ top__->state__ = &S1;
+ top__->symbol__ = 0;
+ top__->aborted__ = 0;
+ top__->rule_s_reuse_entry_ptr__ = 0;
+}
+@ |lr_stk::push_state| --- Speed demon.
+@<|lr_stk::push_state|@>=
+ if(parse_stack__.top_sub__ >= MAX_LR_STK_ITEMS){
+ char a[BUFFER_SIZE];
+@.Err lr\_stk - push overflow stac...@>
+ yacco2::KCHARP msg = "lr_stk - push overflow stack max: %i";
+ sprintf(a,msg,MAX_LR_STK_ITEMS);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ ++parse_stack__.top__;
+ ++parse_stack__.top_sub__;
+ parse_stack__.top__->state__ = Goto_state;
+ parse_stack__.top__->symbol__ = 0;
+ parse_stack__.top__->aborted__ = 0;
+ parse_stack__.top__->rule_s_reuse_entry_ptr__ = 0;
+
+@*2 |set_aborted| and |aborted| implementation.\fbreak
+The |set_aborted| tags the parse stack record. It is used in conjunction with
+the symbol's |affected_by_abort| attribute. That is, the parallel parse aborted
+and it is cleaning up the partial effects of the parse:
+the symbol indirectly dictates the what's to be done.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Cparse_record::
+set_aborted(bool X){
+ aborted__ = X;
+}
+
+bool
+yacco2::
+Cparse_record::
+aborted()const{
+ if(aborted__ == 0) return false;
+ return true;
+}
+@*2 |set_rule_s_reuse_entr| and |rule_s_reuse_entry| implementation.\fbreak
+Used in the optimization of a rule's recycled symbol.
+It is the rule's subscript into the fsm's |rules_reuse_table|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Cparse_record::
+set_rule_s_reuse_entry(yacco2::Rule_s_reuse_entry* Rule_s_reuse){
+ rule_s_reuse_entry_ptr__ = Rule_s_reuse;
+}
+
+yacco2::Rule_s_reuse_entry*
+yacco2::
+Cparse_record::
+rule_s_reuse_entry(){
+ return rule_s_reuse_entry_ptr__;
+}
+
+
+@*2 |set_state| and |state| implementation.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Cparse_record::
+set_state(yacco2::State* State_ptr){
+ state__ = State_ptr;
+}
+
+yacco2::
+State*
+yacco2::
+Cparse_record::
+state(){
+ return state__;
+}
+
+@*2 |set_symbol| and |symbol| implementation.
+@<accrue yacco2 code@>=
+yacco2::CAbs_lr1_sym*
+yacco2::
+Cparse_record::
+symbol(){
+ return symbol__;
+}
+
+void
+yacco2::
+Cparse_record::
+set_symbol(yacco2::CAbs_lr1_sym* Symbol){
+ symbol__ = Symbol;
+}
diff --git a/web/yacco2/library/parser.w b/web/yacco2/library/parser.w
new file mode 100644
index 0000000000..4c3b032f38
--- /dev/null
+++ b/web/yacco2/library/parser.w
@@ -0,0 +1,3525 @@
+@q file: parser.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Parser Definitions --- Pushdown Automaton.
+Just what you've been taught at university with its associated components:\fbreak
+\ptindent{parse stack}
+\ptindent{finite automaton tables}
+It supports 2 parsing paradigms: hohum and parallel.
+
+The extras added to the pushdown automaton are the abort and stop parsing instructions,
+and the turning on and off of the wild shift facility.
+All 3 of these activities are controlled by the grammar writer's syntax directed code.
+They all get reset back to their initial settings when the thread
+completes parsing.
+
+The abort parse is an abrupt way of killing the parse.
+It justs stops it. No result returned to the calling grammar.
+The stop parse is more refined in that one normally adds a terminal to the accept queue
+of the calling grammar before shutting down.
+If used, the all shift facilty needs to be turned off within some running context
+or else the terminal stream being parsed will overrun. This is protected
+against in the PDA but...
+@*2 The parser structure.
+@<Struct...@>+=
+struct Parser{
+ enum parse_result{erred,accepted,reduced,paralleled,no_thds_to_run};
+ @<parser's internal variables@>
+ Parser(yacco2::CAbs_fsm& Fsm_tbl@/
+ ,yacco2::token_container_type* Token_supplier@/
+ ,yacco2::token_container_type* Token_producer@/
+ ,yacco2::UINT Token_supplier_key_pos = Token_start_pos@/
+ ,yacco2::token_container_type* Error_queue = 0@/
+ ,yacco2::token_container_type* Recycle_bin = 0@/
+ ,yacco2::tble_lkup_type* Sym_lookup_functor=0@/
+ ,bool Use_all_shift=ON);@/
+ Parser(yacco2::CAbs_fsm& Fsm_tbl
+ ,yacco2::Thread_entry& Thread_entry
+ ,yacco2::Parser* Calling_parser);// parallel parser
+ Parser(yacco2::CAbs_fsm& Fsm_tbl
+ ,yacco2::Parser* Calling_parser);// parallel parser: procedure called
+ ~Parser();
+@<PDA's defs@>
+@<Parser's containers defs@>
+@<Parser's token defs@>
+@<Parse's stack defs@>
+@<Parse's all shift, stop, and abort defs@>
+
+ yacco2::CAbs_fsm* fsm_tbl();
+ void fsm_tbl(yacco2::CAbs_fsm* Fsm_tbl);
+
+ yacco2::tble_lkup_type* sym_lookup_functor();
+ Parser::parse_result parallel_parse_successful();
+ Parser::parse_result parallel_parse_unsuccessful();
+ Parser::parse_result proc_call_parse_successful();
+ Parser::parse_result proc_call_parse_unsuccessful();
+ bool spawn_thread_manually(yacco2::USINT Thread_id);
+@<Parallel parsing support definitions@>
+};
+
+@*2 Parser's internal variables.
+@<parser's internal variables@>=
+ yacco2::CAbs_fsm* fsm_tbl__;
+ yacco2::KCHARP thread_name__;
+ yacco2::Thread_entry* thread_entry__;
+ yacco2::token_container_type* token_supplier__;
+ yacco2::token_container_type* token_producer__;
+ yacco2::token_container_type* recycle_bin__;
+ yacco2::token_container_type* error_queue__;
+ yacco2::lr_stk parse_stack__;
+ yacco2::CAbs_lr1_sym* current_token__;
+ yacco2::UINT current_token_pos__;
+ yacco2::CAbs_lr1_sym* start_token__;
+ yacco2::UINT start_token_pos__;
+ yacco2::tble_lkup_type* sym_lookup_functor__;
+ bool abort_parse__;
+ bool stop_parse__;
+ bool use_all_shift__;
+ bool has_questionable_shift_occured__;
+ yacco2::Parser* from_thread__;
+ yacco2::THREAD_NO thread_no__;
+ yacco2::COND_VAR cv__;
+ yacco2::MUTEX mu__;
+ int cv_cond__;
+ yacco2::worker_thread_blk th_blk__;
+
+ yacco2::pp_accept_queue_type pp_accept_queue__;
+ int pp_accept_queue_idx__;
+ yacco2::INT th_active_cnt__;
+ yacco2::INT th_accepting_cnt__;
+
+ yacco2::Parser* pp_requesting_parallelism__;
+ yacco2::INT msg_id__;
+ yacco2::Caccept_parse* arbitrated_token__;
+ yacco2::Caccept_parse pp_rsvp__;
+ int no_competing_pp_ths__;
+ int no_requested_ths_to_run__;
+ yacco2::yacco2_threads_to_run_type th_lst__;
+ bool launched_as_procedure__;
+ USINT supplier_r_w_cnt__;
+
+@*2 Parallel parsing support definitions.
+@<Parallel parsing support definitions@>=
+ yacco2::Parser* from_thread();
+ yacco2::KCHARP thread_name();
+ yacco2::Thread_entry* thread_entry();
+ void post_event_to_requesting_grammar@/
+ (yacco2::Parser& To_thread@/
+ ,yacco2::INT Message_id@/
+ ,yacco2::Parser& From_thread);@/
+ void wait_for_event();
+ bool start_threads();// how thread or procedure
+ THR_result start_procedure_call(yacco2::State& S);
+ void put_T_into_accept_queue(yacco2::Caccept_parse& Parm);
+ void clean_up();
+ void call_arbitrator(yacco2::Type_pp_fnct_ptr The_judge);
+ bool have_all_threads_reported_back();
+ void abort_accept_queue_irregularites(yacco2::Caccept_parse& Calling_parm);
+ void abort_no_selected_accept_parse_in_arbitrator();
+@*2 Parse's all shift, stop, and abort defs.
+@<Parse's all shift, stop, and abort defs@>=
+ void set_use_all_shift_on();
+ void set_use_all_shift_off();
+ bool use_all_shift();
+ bool abort_parse();
+ void set_abort_parse(bool Abort);
+ bool stop_parse();
+ void set_stop_parse(bool Stop);
+
+@*2 PDA's defs.
+@<PDA's defs@>=
+ parse_result parse();
+ void shift(yacco2::Shift_entry& SE);
+ void invisible_shift(yacco2::Shift_entry& SE);
+ void questionable_shift(yacco2::Shift_entry& SE);
+ void all_shift(yacco2::Shift_entry& SE);
+ void parallel_shift(yacco2::CAbs_lr1_sym& Accept_terminal);
+ void proc_call_shift(yacco2::CAbs_lr1_sym& Accept_terminal);
+ parse_result reduce(yacco2::Reduce_entry& RE);
+ parse_result parallel_parse();@/
+ parse_result proc_call_parse();@/
+ parse_result start_parallel_parsing(yacco2::State& S);
+ THR_result chained_proc_call_parsing(yacco2::State& S);
+ parse_result start_manually_parallel_parsing(yacco2::USINT Thread_id);@/
+ yacco2::Shift_entry* find_cur_T_shift_entry();
+ yacco2::Shift_entry* find_R_or_paralleled_T_shift_entry(yacco2::USINT Enum_id);
+ yacco2::Reduce_entry* find_questionable_sym_in_reduce_lookahead();
+ yacco2::Reduce_entry* find_reduce_entry();
+ yacco2::Reduce_entry* find_parallel_reduce_entry();
+ yacco2::Reduce_entry* find_proc_call_reduce_entry();
+
+@*2 Parser's containers defs.
+@<Parser's containers defs@>=
+ yacco2::token_container_type* token_supplier();
+ void set_token_supplier(yacco2::token_container_type& Token_supplier);
+ yacco2::token_container_type* token_producer();
+ void set_token_producer(yacco2::token_container_type& Token_producer);
+ yacco2::token_container_type* recycle_bin();
+ void set_recycle_bin(yacco2::token_container_type& Recycle_bin);
+ void set_error_queue(yacco2::token_container_type& Error_queue);
+ yacco2::token_container_type* error_queue();
+ void add_token_to_supplier(yacco2::CAbs_lr1_sym& Token);
+ void add_token_to_producer(yacco2::CAbs_lr1_sym& Token);
+ void add_token_to_recycle_bin(yacco2::CAbs_lr1_sym& Token);
+ void add_token_to_error_queue(yacco2::CAbs_lr1_sym& Token);
+
+@*2 Parse's stack defs.
+@<Parse's stack defs@>=
+ void cleanup_stack_due_to_abort();
+ yacco2::lr_stk* parse_stack();
+ yacco2::INT no_items_on_stack();
+ yacco2::Cparse_record* get_stack_record(yacco2::INT Pos);//rel 0
+ yacco2::Cparse_record* top_stack_record();
+ void remove_from_stack(yacco2::INT No_to_remove);
+ void add_to_stack(yacco2::State& State_no);
+ yacco2::INT current_stack_pos();
+ void clear_parse_stack();
+ yacco2::CAbs_lr1_sym* get_spec_stack_token(yacco2::UINT Pos);//rel 0
+
+@*2 Parser's token defs.
+@<Parser's token defs@>=
+ void get_shift_s_next_token();
+ yacco2::CAbs_lr1_sym* get_next_token();
+ yacco2::CAbs_lr1_sym* get_spec_token(yacco2::UINT Pos);
+ yacco2::CAbs_lr1_sym* current_token();
+ yacco2::CAbs_lr1_sym* start_token();
+ void set_start_token(yacco2::CAbs_lr1_sym& Start_tok);
+ yacco2::UINT start_token_pos();
+ void set_start_token_pos(yacco2::UINT Pos);
+ void reset_current_token(yacco2::UINT Pos);
+ void override_current_token(yacco2::CAbs_lr1_sym& Current_token,yacco2::UINT Pos);
+ void override_current_token_pos(yacco2::UINT Pos);
+ yacco2::UINT current_token_pos();
+
+@*2 |Parser| Regular parser.\fbreak
+ Runs a monolithic grammar: not a threaded grammar.
+i/o token containers are required whereas the threaded
+parser receives this information via a parameter at first thread startup
+or as a message within the calling parser.
+Not much is required in start up but to
+establish the runtime parse stack and fetch the first terminal for
+processing if it is available.
+How can it not be available? Well I support the empty language: moot but
+hugging theory.
+
+Notice that the items imported are references instead of pointers.
+I'm trying it again. I hope that it works within the threaded environment.
+It didn't with cica Microsoft Visual studio 6 \CPLUSPLUS/ compiler. Pointers were consistent.
+
+|cv__(0)| and |mu__(0)| are removed from the initializer list due to
+linux honking.
+
+@^ To think out - rel. 1 terminal not zero!@>
+@<accrue yacco2 code@>=
+yacco2::
+Parser::
+Parser@/
+ (yacco2::CAbs_fsm& Fsm_tbl@/
+ ,yacco2::token_container_type* Token_supplier@/
+ ,yacco2::token_container_type* Token_producer@/
+ ,yacco2::UINT Token_supplier_key_pos@/
+ ,yacco2::token_container_type* Error_queue@/
+ ,yacco2::token_container_type* Recycle_bin@/
+ ,yacco2::tble_lkup_type* Sym_lookup_functor@/
+ ,bool Use_all_shift)@/
+ :fsm_tbl__(&Fsm_tbl)@/
+ ,thread_name__(Fsm_tbl.id__)@/
+ ,thread_entry__(0)@/
+ ,token_supplier__(Token_supplier)@/
+ ,token_producer__(Token_producer)@/
+ ,error_queue__(Error_queue)@/
+ ,recycle_bin__(Recycle_bin)@/
+ ,current_token__(0)@/
+ ,current_token_pos__(Token_supplier_key_pos)@/
+ ,start_token__(0)@/
+ ,start_token_pos__(Token_supplier_key_pos)@/
+ ,sym_lookup_functor__(Sym_lookup_functor)@/
+ ,abort_parse__(OFF)@/
+ ,stop_parse__(OFF)@/
+ ,use_all_shift__(Use_all_shift)@/
+ ,has_questionable_shift_occured__(OFF)@/
+ ,from_thread__(0)@/
+ ,thread_no__(THREAD_SELF())@/
+ ,cv_cond__(WAIT_FOR_EVENT)@/
+ ,th_blk__()@/
+ ,pp_accept_queue_idx__(0)@/
+ ,pp_accept_queue__()@/
+ ,th_active_cnt__(0)@/
+ ,th_accepting_cnt__(0)@/
+ ,pp_requesting_parallelism__(0)@/
+ ,msg_id__(0)@/
+ ,arbitrated_token__(0)@/
+ ,no_competing_pp_ths__(0)@/
+ ,no_requested_ths_to_run__(0)@/
+ ,th_lst__()@/
+ ,launched_as_procedure__(false)@/
+ ,supplier_r_w_cnt__(1)@/
+ {@/
+ CREATE_COND_VAR(cv__);
+ CREATE_MUTEX(mu__);
+ LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+ parse_stack__.lr_stk_init(*Fsm_tbl.start_state__);
+ for(int x=0;x<pp_accept_queue_size;++x){
+ pp_accept_queue__[x].initialize_it();
+ }
+ if(token_supplier__!=0){
+ supplier_r_w_cnt__ = token_supplier__->r_w_cnt__;
+ }
+
+ fsm_tbl__->parser(*this);
+ Fsm_tbl.parser(*this);
+ if(Token_supplier != 0){
+ current_token__ = get_spec_token(current_token_pos__);
+ }else{
+ current_token__ = yacco2::PTR_LR1_eog__;
+ }
+ start_token__ = current_token__;
+ @<check for empty language. yes, just exit@>;
+ parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);
+if(YACCO2_T__ != 0){
+ if (current_token__ == 0) return;// no tokens
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " enum: " << current_token__->enumerated_id__
+<< ' ' << '"'<< current_token__->id__ << '"'
+<< " pos: " << current_token_pos__ << FILE_LINE << std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+
+
+EXTERNAL_GPSing(current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE
+ << std::endl;
+@<release trace mu@>;
+}
+}
+
+@ Check for empty language.
+@<check for empty language. yes, just exit@>=
+ if (current_token__ == 0) return;
+
+@*2 |Parser| Parallel parser.\fbreak
+ The parse containers are all global. One can set up some
+of these containers for local requirements within the threaded grammar.
+Threaded grammar use this constructor.
+Elsewhere the threaded code is developed exposing its deployment.
+The calling grammar's parse object provides
+all the gory details to parse with its current token, token position,
+and token dispensor.
+
+At initial startup, the token co-ordinates --- dispensor, token,
+and position set --- will be
+set within the |Parser|.
+The parse thread awakened by a message will have
+in its critical region the requestor's parallel parser address.
+Within the request for work loop, the messaged parser will extract
+from the calling parser its token assemble --- dispensor, token, and position set
+
+The error, recycle containers are optional.
+All these containers are taken from the monolithic parser that started the rave.
+Use of recursion to create a new i/o token containers is permissible. It's up
+to the designer.
+Lets hear it for openness! Don't be too cheery boy due to the following:
+|cv__(0)| and |mu__(0)| are removed from the initializer list due to
+linux honking.
+
+@<accrue yacco2 code@>=
+yacco2::
+Parser::
+Parser(yacco2::CAbs_fsm& Fsm_tbl@/
+ ,yacco2::Thread_entry& Thread_entry
+ ,yacco2::Parser* Calling_parser)@/
+ :fsm_tbl__(&Fsm_tbl)@/
+ ,thread_name__(Thread_entry.thread_fnct_name__)@/
+ ,thread_entry__(&Thread_entry)@/
+ ,token_supplier__(0)@/
+ ,token_producer__(0)@/
+ ,current_token__(0)@/
+ ,current_token_pos__(0)@/
+ ,start_token__(0)@/
+ ,start_token_pos__(0)@/
+ ,recycle_bin__(0)@/
+ ,sym_lookup_functor__(0)@/
+ ,abort_parse__(OFF)@/
+ ,stop_parse__(OFF)@/
+ ,use_all_shift__(YES)@/
+ ,has_questionable_shift_occured__(OFF)@/
+ ,from_thread__(0)@/
+ ,thread_no__(THREAD_SELF())@/
+ ,cv_cond__(EVENT_RECEIVED)@/
+ ,th_blk__(this,Calling_parser)@/
+ ,pp_accept_queue__()@/
+ ,pp_accept_queue_idx__(0)@/
+ ,th_active_cnt__(0)@/
+ ,th_accepting_cnt__(0)@/
+ ,pp_requesting_parallelism__(0)@/
+ ,msg_id__(0)@/
+ ,arbitrated_token__(0)@/
+ ,no_competing_pp_ths__(0)@/
+ ,no_requested_ths_to_run__(0)@/
+ ,th_lst__()@/
+ ,launched_as_procedure__(false)@/
+ ,supplier_r_w_cnt__(0)@/
+{@/
+ CREATE_COND_VAR(cv__);
+ CREATE_MUTEX(mu__);
+ LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+ fsm_tbl__->parser(*this);
+ Fsm_tbl.parser(*this);
+ parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);// no token yet
+ for(int x=0;x<pp_accept_queue_size;++x){
+ pp_accept_queue__[x].initialize_it();
+ }
+}
+@*2 |Parser| Procedure call: Parallel parser.\fbreak
+Same as the parallel thread parser except for the registry of the thread into the
+|Parallel_thread_table| and setting how its called.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::
+Parser(yacco2::CAbs_fsm& Fsm_tbl@/
+ ,yacco2::Parser* Calling_parser)@/
+ :fsm_tbl__(&Fsm_tbl)@/
+ ,thread_name__(Fsm_tbl.id__)@/
+ ,thread_entry__(0)@/
+ ,token_supplier__(0)@/
+ ,token_producer__(0)@/
+ ,current_token__(0)@/
+ ,current_token_pos__(0)@/
+ ,start_token__(0)@/
+ ,start_token_pos__(0)@/
+ ,recycle_bin__(0)@/
+ ,sym_lookup_functor__(0)@/
+ ,abort_parse__(OFF)@/
+ ,stop_parse__(OFF)@/
+ ,use_all_shift__(YES)@/
+ ,has_questionable_shift_occured__(OFF)@/
+ ,from_thread__(0)@/
+ ,thread_no__(THREAD_SELF())@/
+ ,cv_cond__(EVENT_RECEIVED)@/
+ ,th_blk__()@/
+ ,pp_accept_queue__()@/
+ ,pp_accept_queue_idx__(0)@/
+ ,th_active_cnt__(0)@/
+ ,th_accepting_cnt__(0)@/
+ ,pp_requesting_parallelism__(0)@/
+ ,msg_id__(0)@/
+ ,arbitrated_token__(0)@/
+ ,no_competing_pp_ths__(0)@/
+ ,no_requested_ths_to_run__(0)@/
+ ,th_lst__()@/
+ ,launched_as_procedure__(true)@/
+ ,supplier_r_w_cnt__(0)@/
+{@/
+ CREATE_COND_VAR(cv__);
+ CREATE_MUTEX(mu__);
+ LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+ fsm_tbl__->parser(*this);
+ Fsm_tbl.parser(*this);
+ parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);// no token yet
+ for(int x=0;x<pp_accept_queue_size;++x){
+ pp_accept_queue__[x].initialize_it();
+ }
+}
+
+@*2 |~Parser|.\fbreak
+ General house keeping by popping the stack.
+Popping allows the firing off of the start rule and automatic garbage collection.
+@<accrue yacco2 code@>=
+
+yacco2::
+Parser::
+~Parser(){
+ clear_parse_stack();
+ DESTROY_COND_VAR(cv__);
+ DESTROY_MUTEX(mu__);
+}
+
+@** Parser --- PDA's implementation.
+@*2 Shift.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+shift(yacco2::Shift_entry& SE){@/
+ @<Reserve and get current...@>;
+ @<set parse stack symbol to current...@>;
+ yacco2::State* Goto_state = SE.goto__;
+ @<|add_to_stack|@>;
+ @<Trace TH the parse stack configuration@>;
+ get_next_token();
+}
+
+@*2 Find shift entry.
+@<find shift entry@>=
+ yacco2::Shift_entry* se(0);
+ if(pr->state__->shift_tbl_ptr__ != 0)
+ se = find_cur_T_shift_entry();
+
+
+@*2 Invisible shift.
+Its symbol \INVshift.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+invisible_shift(yacco2::Shift_entry& SE){@/
+ @<Reserve and get current...@>;
+ @<set parse stack symbol to invisible shift operator@>;
+ yacco2::State* Goto_state = SE.goto__;
+ @<|add_to_stack|@>;
+ @<Trace TH the parse stack configuration@>;
+}
+@*3 Set parse stack symbol to invisible shift operator.
+@<set parse stack symbol to invisible shift operator@>=
+ pr->symbol__ = NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__;
+
+@*2 Questionable shift.
+Its symbol is \QUEshift.
+Note, as it is used for error situations
+though it acts like a wild token as in \ALLshift, it does
+not advance to the next token in the parse stream!
+It must be explicitly done by the grammar writer.
+I haven't head wrestled ``error processing / correction'' yet.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+questionable_shift(yacco2::Shift_entry& SE){@/
+ has_questionable_shift_occured__ = ON;
+ @<Reserve and get current...@>;
+ @<set parse stack symbol to current token@>;
+ yacco2::State* Goto_state = SE.goto__;
+ @<|add_to_stack|@>;
+ @<Trace TH the parse stack configuration@>;
+}
+
+@*2 All shift.\fbreak
+The current terminal and not \ALLshift{} is placed onto the parse stack.
+The fsm's `go to' state is the vectored \ALLshift{} symbol.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+all_shift(yacco2::Shift_entry& SE){@/
+ @<Reserve and get current...@>;
+ @<set parse stack symbol to current token@>;
+ yacco2::State* Goto_state = SE.goto__;
+ @<|add_to_stack|@>;
+ @<Trace TH the parse stack configuration@>;
+
+ get_next_token();
+}
+@ Set parse stack symbol to current token.
+@<set parse stack symbol to current token@>=
+ pr->symbol__ = current_token__;// state's shift symbol
+
+@*2 Reduce.
+The reduce.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+reduce(yacco2::Reduce_entry& RE){@/
+ @<execute subrule with it directives and create rule@>;
+ @<pop rule's rhs subrule from parse stack@>;
+ @<put rule onto parse stack@>;
+ @<find rule's shift entry in fsm@>;
+ @<Validate if rule shift symbol in fsm table@>;
+ @<put goto state onto parse stack, and return accepted or reduced result@>;
+}
+
+@*2 Execute the subrule, its directives, and create the rule.\fbreak
+Inside the rule's constructor is the |lhs-constructor| directive code.
+The top of the stack address is passed to |reduce_rhs_of_rule|
+to efficiently calculate the subrule's parameters as its just an array of
+|Cparse_record|.
+This is a tricky-dicky, now no politics, cuz
+I'm really fetching the first component of the stack record
+which is its grammatical symbol. See notes on the real story.
+Added a rule recycling program to speed up parser
+due to new hit on birth-run-delete cycle.
+See |Recycled_rule_struct| discussion.
+@<execute subrule with it directives and create rule@>=
+Rule_s_reuse_entry* rule_rec1(0);
+Rule_s_reuse_entry** rule_rec = &rule_rec1;
+fsm_tbl__->reduce_rhs_of_rule(RE.rhs_id__,rule_rec);
+
+@
+@<put goto state onto parse stack, and return accepted or reduced result@>=
+ yacco2::State* Goto_state = se->goto__;
+ @<|add_to_stack|@>;
+ @<Trace TH the parse stack configuration@>;
+ if(se->goto__->state_no__ == 1)@/
+ return Parser::accepted;
+ return Parser::reduced;
+
+@
+@<pop rule's rhs subrule from parse stack@>=
+ remove_from_stack((*rule_rec)->rule_->rule_info__.rhs_no_of_parms__);
+@
+@<put rule onto parse stack@>=
+ parse_stack__.top__->set_symbol((*rule_rec)->rule_);// stack state's rule shift symbol
+ parse_stack__.top__->set_rule_s_reuse_entry(*rule_rec);
+
+@
+@<find rule's shift entry in fsm@>=
+ Shift_entry* se(0);
+ if(parse_stack__.top__->state__->shift_tbl_ptr__ != 0)
+ se = find_R_or_paralleled_T_shift_entry((*rule_rec)->rule_->enumerated_id__);
+
+@*2 Regular parse.\fbreak
+This parse comes from a non-threaded grammar executed from a process.
+One can use recursion to start many parse streams. In fact,
+processing of include files is done this way with an appropriate
+nested file count limit to prevent overruns.
+
+Added |failed| call to monolithic grammar as
+it becomes a global way to handle an aborted parse.
+For example, a general error message could be put into the error queue
+by the monolithic grammar.
+This becomes a cheap way to deal with invalid token sequences.
+At least it pin points where it occured by a general error message.
+The proper refinement is to go to each
+grammar and program the catching of the error by use of the
+\INVshift{} terminal or the \ALLshift{} terminal within the subrule.
+How refined do u want to go or be or not to go? that is the ?
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parse(){@/
+ @<check for empty language. yes, exit as accepted@>;
+ @<fire off fsm's op directive@>;
+
+ parse_result result;
+ read_token_stream:@/
+ {
+ @<process tokens@>;
+ }
+ parse_successful:@/
+ return Parser::accepted;
+ parse_unsuccessful:@/
+ fsm_tbl__->failed(); // ?sdc from grammar writer for the error queue
+ @<Trace TH straight parse error@>;
+ cleanup_stack_due_to_abort();
+ return Parser::erred;
+}
+
+@ Check for empty language.
+@<check for empty language. yes, exit as accepted@>=
+ if (current_token__ == 0)
+ return Parser::accepted;
+
+@ Process tokens.
+@<process tokens@>=
+ @<Reserve and get current...@>;
+ if(stop_parse__ == ON){
+ cleanup_stack_due_to_abort();// quasi controlled abort
+ goto parse_successful;
+ }
+ if(abort_parse__ == ON) goto parse_unsuccessful;
+ State* cur_state = pr->state__;
+ @<dispatch to parallel, or proc call, or straight parsing@>;
+ parallel_parsing:@/
+ @<try parallel parse. no threads-to-run go straight@>;
+ @<is parallel parsing successful? ...@>;
+ @< parallel parsing unsuccessful. So, set up + go to straight parsing@>;
+ proc_call_parsing:@/
+{
+ @<try proc call parse. no threads-to-run go straight@>;
+ @<is proc call parsing successful? ...@>;
+ @<proc call parsing unsuccessful. So, set up + go to straight parsing@>;
+}
+ straight_parsing:@/
+ @<find shift entry@>;@/
+ @<try various shift types...@>;
+ @<find reduce entry@>;@/
+ @<try reduce@>;
+ goto parse_unsuccessful;@/
+
+@ Fire off fsm's op directive.\fbreak
+This is the fsm's directive that gets run when the parser starts up.
+As a parallel parser is within a run loop, each time it starts running this
+directive gets called.
+It is a directive that allows the grammar writer to preset or pre-evaluate
+approprite events. For example, it is used in the Pascal translator to
+pre-evaluate by symbol table lookup the passed identifier token.
+If it is morphed, the new token is then used in the parse. Good stuff.
+@<fire off fsm's op directive@>=
+ fsm_tbl__->op();
+
+@ Try various shift types.\fbreak
+The parser favours a shift before a reduce operation.
+There are 4 types of shifts. The regular shift found in the token stream
+and 3 meta terminal shifts --- \QUEshift{} questionable,
+\INVshift{} invisible, and \ALLshift{} all of which are
+not found in the token stream.
+The rank of shifts is conditionally checked for their presence within the
+current parse state with their test order being regular,
+ followed by questionable, invisible, and all shift.
+The all shift is controlled by the parser's `all shift' facility.
+If this facility was not present, the parse would always overrun the token stream.
+The turning on and off is controlled by the syntax directed code of the parsing grammar.\fbreak
+Comment:\fbreak
+See bug's comment.
+@<try various shift types. if executed go to process next token in token stream@>=
+ if(se != 0){
+ shift(*se);
+ goto read_token_stream;
+ }
+ if(cur_state->questionable_shift__ != 0){
+ // guard against perpetual machine using \QUEshift and last token ``eog''
+ if(has_questionable_shift_occured__ == ON){// previous state action
+ @<Invalid \QUEshift instead of \ALLshift use@>;
+ }
+ questionable_shift(*cur_state->questionable_shift__);
+ goto read_token_stream;
+ }
+ if(cur_state->inv_shift__){
+ invisible_shift(*cur_state->inv_shift__);
+ goto read_token_stream;
+ }
+ if(use_all_shift__ == ON){
+ if(cur_state->all_shift__ == 0){
+ }else{
+ // guard against overrun of token dispensor using \ALLshift
+ if(current_token__->enumerated_id__ == LR1_Eog)@/
+ {
+ use_all_shift__ = OFF;// turn off the all shift operator
+ all_shift(*cur_state->all_shift__);
+ }else{
+ all_shift(*cur_state->all_shift__);
+ goto read_token_stream;
+ }
+ }
+ }
+
+@ Dispatch to parallel, proc call, or straight parsing.
+@<dispatch to parallel, or proc call, or straight parsing@>=
+ @<Validate any token for parsing@>;
+ if(cur_state->parallel_shift__ != 0) goto parallel_parsing;
+ if(cur_state->proc_call_shift__ != 0) goto proc_call_parsing;
+ else goto straight_parsing;
+
+@ Try parallel parse.\fbreak
+ It checks whether there are threads to be run by their
+first set.
+If not, the |no_thds_to_run| result is returned so go do some straight parsing.
+@<try parallel parse. no threads-to-run go straight@>=
+ result = start_parallel_parsing(*cur_state);
+ if(result == no_thds_to_run) goto straight_parsing;
+
+
+@ Is parallel parsing successful?. If so reduce the \PARshift phrase.
+The wrinkle is whether a chained procedure call is present.
+This extends the subrule expression until after the
+chained procedure call and then it is reduced.
+@<is parallel parsing successful? If so reduce the \PARshift phrase@>=
+ if (result == paralleled){
+ if(parse_stack__.top__->state__->proc_call_shift__ != 0){
+ cur_state=parse_stack__.top__->state__;
+ goto proc_call_parsing;// chained proc call so reduce later
+ }
+ @<find parallel reduce entry@>;
+ @<Validate reduce entry@>;
+ @<Get current stack...@>;
+ @<try reduce@>;
+ }
+@ find parallel reduce entry.
+@<find parallel reduce entry@>=
+ Reduce_entry* re(0);
+ if(parse_stack__.top__->state__->reduce_tbl_ptr__ != 0)
+ re = find_parallel_reduce_entry();
+
+@ Parallel parsing unsuccessful.\fbreak
+ So, set up + go to straight parsing.
+ @< parallel parsing unsuccessful. So, set up + go to straight parsing@>=
+ @<Trace TH failed parallel try straight parse@>;
+ @<Get current stack...@>;
+ goto straight_parsing;
+
+@ Try proc call parse.\fbreak
+ It checks whether there is a proc call entry in state.
+If not, the |no_thds_to_run| result is returned so go do some straight parsing.
+@<try proc call parse. no threads-to-run go straight@>=
+ THR_result rslt = chained_proc_call_parsing(*cur_state);
+ //|result = rslt;|
+ switch(rslt){
+ case erred: goto straight_parsing;
+ case no_thds_to_run: goto straight_parsing;
+ default: {
+ result = paralleled;
+ break;
+ }
+}
+
+
+@ Is proc call parsing successful?. If so reduce the \TRAshift phrase.
+@<is proc call parsing successful? If so reduce the \TRAshift phrase@>=
+ if (result == paralleled){
+ @<find proc call reduce entry@>;
+ @<Validate reduce entry@>;
+ @<Get current stack...@>;
+ @<try reduce@>;
+ }
+@ find proc call reduce entry.
+@<find proc call reduce entry@>=
+ Reduce_entry* re(0);
+ if(parse_stack__.top__->state__->reduce_tbl_ptr__ != 0)
+ re = find_proc_call_reduce_entry();
+
+@ Proc call parsing unsuccessful.\fbreak
+ So, set up + go to straight parsing.
+@<proc call parsing unsuccessful. So, set up + go to straight parsing@>=
+ @<Trace TH failed proc call try straight parse@>;
+ @<Get current stack...@>;
+ goto straight_parsing;
+
+
+@ find reduce entry.
+@<find reduce entry@>=
+ Reduce_entry* re(0);
+ if(parse_stack__.top__->state__->reduce_tbl_ptr__ != 0)
+ re = find_reduce_entry();
+
+@ Try reduce.\fbreak
+The stop parse is checked after the reduce syntax directed code has been run.
+Provides a little more flexibility to the grammar writer's actions.
+@<try reduce@>=
+ if(re != 0){
+ result = reduce(*re);
+ if(stop_parse__ == ON){
+ cleanup_stack_due_to_abort();// quasi controlled abort
+ goto parse_successful;
+ }
+ if(abort_parse__ == ON) goto parse_unsuccessful;
+ if(result == Parser::reduced) goto read_token_stream;
+ if( result == Parser::accepted) goto parse_successful;
+ }
+
+@*2 Parallel shift.\fbreak
+A parallel shift has the following stack configuration:\fbreak
+\ptindent{ \PARshift, followed by \ALLshift, \QUEshift, or newly minted terminal}
+It places the parallel terminal onto the parse stack even though it is not
+part of the input token stream. I felt that it should faithfully
+follow the grammatical expression.
+
+This is the tailend of the parallel parse that shifts the arbitrated
+symbol onto the parse stack. Please note the conditional 2nd attempt
+on the \ALLshift. If it is present in the current state configuration,
+then the shift is successful. The only subtlety is in the arbitration code.
+What happens if there are many returned terminals?
+There has to be a choice made or the first item in the accept queue gets returned.
+Should this be a run-time-error if the arbitration code does not
+select the many to one situation?
+As parallelism is quasi-random in execution order so are the terminal placements
+ in the accept queue.
+Where a single processor seems to work, a multi-processor can lead to different results
+per execution.
+The grammar should honk with a mildly acidic warning.
+It does now --- see note.
+
+Note: Support for \QUEshift --- questionable shift operator.\fbreak
+This is like the meta \ALLshift terminal but it allows
+ the grammar write to state that
+the returned T is an error.
+In the pecking order of shift presence, the returned T is tested first
+for its presence within the state.
+If it is not found then the meta shift terminals are tested in
+the following order: \QUEshift, \ALLshift.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+parallel_shift(yacco2::CAbs_lr1_sym& Accept_terminal){
+ @<Reserve and get current...@>;
+ Shift_entry* se(0);
+ if(pr->state__->shift_tbl_ptr__ != 0)
+ se = find_R_or_paralleled_T_shift_entry(Accept_terminal.enumerated_id__);
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+ se = pr->state__->questionable_shift__;
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+ se = pr->state__->all_shift__;
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+
+ @<Error shift symbol not fnd in fsm table@>;
+set_stack_to_symbol_being_shifted:@/
+ @<shift parallel's returned symbol and goto state@>;
+}
+
+@ Shift parallel's returned symbol and goto state.
+ @<shift parallel's returned symbol and goto state@>=
+ pr->symbol__ = &Accept_terminal; // state's \PARshift shift symbol
+ yacco2::State* Goto_state = se->goto__;
+ @<|add_to_stack|@>;
+ //<Trace TH the parse stack configuration>;
+
+@*2 Proc call shift.\fbreak
+A proc call shift has the following stack configuration:\fbreak
+\ptindent{ \TRAshift, \ALLshift or \QUEshift or newly minted terminal}
+It places the proc call terminal onto the parse stack even though it is not
+part of the input token stream. I felt that it should faithfully
+follow the grammatical expression.
+
+This is the tailend of the proc call parse that shifts the arbitrated
+symbol onto the parse stack. Please note the conditional 2nd attempt
+on the \ALLshift or \QUEshift to catch the eye as an error.
+If it is present in the current state configuration,
+then the shift is successful. The only subtlety is in the arbitration code.
+What happens if there are many returned terminals?
+There has to be a choice made or the first item in the accept queue gets returned.
+Should this be a run-time-error if the arbitration code does not
+select the many to one situation?
+As parallelism is quasi-random in execution order so are the terminal placements
+ in the accept queue.
+Where a single processor seems to work, a multi-processor can lead to different results
+per execution.
+The grammar should honk with a mildly acidic warning.
+It does now --- see note.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+proc_call_shift(yacco2::CAbs_lr1_sym& Accept_terminal){
+ @<Reserve and get current...@>;
+ Shift_entry* se(0);
+ if(pr->state__->shift_tbl_ptr__ != 0)
+ se = find_R_or_paralleled_T_shift_entry(Accept_terminal.enumerated_id__);
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+ se = pr->state__->all_shift__;
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+ se = pr->state__->questionable_shift__;
+ if(se != 0) goto set_stack_to_symbol_being_shifted;
+ @<Error shift symbol not fnd in fsm table@>;
+set_stack_to_symbol_being_shifted:@/
+ @<shift proc call's returned symbol and goto state@>;
+}
+
+@ Shift proc call's returned symbol and goto state.
+ @<shift proc call's returned symbol and goto state@>=
+ pr->symbol__ = &Accept_terminal; // state's \TRAshift shift symbol
+ yacco2::State* Goto_state = se->goto__;
+ @<|add_to_stack|@>;
+ //<Trace TH the parse stack configuration>;
+
+
+@*2 Parallel parse.\fbreak
+The control loop consuming the parallel tokens.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse(){
+ @<fire off fsm's op directive@>;
+ parse_result result;
+ @<check for empty language. yes unsuccessful parallel parse@>;
+
+read_token_stream:{@/
+ @<process parallel tokens@>;
+ }
+parse_successful:@/
+ return parallel_parse_successful();
+parse_unsuccessful:@/
+ return parallel_parse_unsuccessful();
+}
+
+@ Check for empty language. yes unsuccessful parallel parse.
+@<check for empty language. yes unsuccessful parallel parse@>=
+ if (current_token__ == 0) goto parse_unsuccessful;
+ goto read_token_stream;
+
+@ Process parallel tokens.
+@<process parallel tokens@>=
+ @<Reserve and get current...@>;
+ if(stop_parse__ == ON){
+ cleanup_stack_due_to_abort();// quasi controlled abort
+ goto parse_successful;
+ }
+ if(abort_parse__ == ON) goto parse_unsuccessful;
+
+ State* cur_state = pr->state__;
+ @<dispatch to parallel, or proc call, or straight parsing@>;
+parallel_parsing:@/
+ @<try parallel parse. no threads-to-run go straight@>;
+ @<is parallel parsing success...@>;
+ @<parallel parsing unsuccess...@>;
+proc_call_parsing:@/
+{
+ @<try proc call parse. no threads-to-run go straight@>;
+ @<is proc call parsing success...@>;
+ @<proc call parsing unsuccess...@>;
+}
+
+straight_parsing:@/
+@<find shift entry@>;
+@<try various shift types...@>;
+@<find reduce entry@>;
+@<try reduce@>;
+ goto parse_unsuccessful;
+
+@*2 Parallel parse successful.\fbreak
+Put the accept message into the requesting grammar's accept queue.
+It checks whether it is the last active thread stopping. If so,
+it wakes up the requesting grammar by an event.
+
+Notice the |@<set thread status if launched as a thread@>| is
+placed in the following parallel parse procedures:
+|parallel_parse_successful|
+and |parallel_parse_unsuccessful|. This is done to optimize
+the number of threads run instead of after the thread has cleanised itself
+from parsing in the thread loop.
+See |Parallel thread code| loop. |@<set thread status if launched as a thread@>| was
+just after the |@<let's parallel parse...@>|.
+Here's the take, when a event is sent to the requesting grammar, the thread
+library can restart executing the calling grammar while in a single
+cpu environment the parallel thread is put on hold to complete its duties
+some time later.
+Now the grammar requesting parallelism can continue its parse
+that can again request parallelism that can contain the thread that is winding down.
+Due to the winding down thread's status being
+busy, another copy of the thread is created and run.
+A little softshoe please...
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse_successful(){
+ @<Trace TH current token, and accepted terminal wrapper@>;
+ if(launched_as_procedure__ == true){
+ @<reduce requesting grammar's active...@>;
+ @<insert token into requesting grammar's accept queue@>;
+ clean_up();
+ return Parser::accepted;
+ }
+ else{
+ @<set thread status if launched as a thread@>;
+ @<acquire parallelism requesting grammar's mutex if required@>;
+ @<reduce requesting grammar's active...@>;
+ @<insert token into requesting grammar's accept queue@>;
+ clean_up();
+ @<notify requesting grammar if launched as a thread@>;
+ @<release parallelism requesting grammar's mutex if required@>;
+ return Parser::accepted;
+ }
+}
+
+@ Set thread status if launched as a thread.
+@<set thread status if launched as a thread@>=
+ @<acquire global thread table critical region@>;
+ th_blk__.set_waiting_for_work();
+ @<release global thread table critical region@>;
+
+@ Notify requesting grammar if launched as a thread.
+ @<notify requesting grammar if launched as a thread@>=
+ @<notify parallelism requesting grammar if last thread to complete@>;
+
+
+@ Acquire parallelism requesting grammar's mutex if required.\fbreak
+If there is only 1 thread running, the critical region is down graded to just a local
+context. This is an optimization to minimize ``acquire-release'' of mutexes.
+@<acquire parallelism requesting grammar's mutex if required@>=
+ LOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+@ Release parallelism requesting grammar's mutex if required.
+This is an optimization to minimize ``acquire-release'' of mutexes.
+|no_competing_pp_ths__| is a read-only variable that gets set when
+the thread is called.
+It eliminates the called thread having to acquire the mutex of
+the calling grammar to determine whether only 1 thread launched.
+@<release parallelism requesting grammar's mutex if required@>=
+ UNLOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+@ Notify parallelism requesting grammar if last thread to complete.
+@<notify parallelism requesting grammar if last thread to complete@>=
+ if(have_all_threads_reported_back() == YES){
+ @<Trace MSG all threads reported back@>;
+ post_event_to_requesting_grammar(*pp_requesting_parallelism__,Accept_parallel_parse,*this);
+ }else{
+ @<Trace MSG not all threads reported back@>;
+ }
+
+@ Insert token into requesting grammar's accept queue.
+@<insert token into requesting grammar's accept queue@>=
+ pp_requesting_parallelism__->put_T_into_accept_queue(pp_rsvp__);
+
+@*2 Parallel parse unsuccessful.\fbreak
+If it is the last active thread, it wakes up the requesting grammar via a message.
+Otherwise, it just winds down without any message:
+a bit of an optimization to lowering messages between friends.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse_unsuccessful(){@/
+ @<check failed directive for possible acceptance@>;
+ @<Trace TH parallel parse current token when an error has occured@>;
+ if(launched_as_procedure__ == true){
+ @<reduce requesting grammar's active threads count@>;
+ goto fire_off_error_functor;
+}
+else{
+ @<set thread status if launched as a thread@>;
+ @<acquire parallelism requesting grammar's mutex if required@>;
+ @<reduce requesting grammar's active threads count@>;
+ @<notify requesting grammar if launched as a thread@>;
+ @<release parallelism requesting grammar's mutex if required@>;
+}
+fire_off_error_functor:@/
+ cleanup_stack_due_to_abort();
+ clean_up();
+ return Parser::erred;
+}
+@ Reduce requesting grammar's active threads count.
+@<reduce requesting grammar's active threads count@>=
+@<Trace TH before parallel parse thread message count reduced@>;
+ --pp_requesting_parallelism__->th_active_cnt__;
+ if(supplier_r_w_cnt__ > 1){
+ --pp_requesting_parallelism__->supplier_r_w_cnt__;
+ if(token_supplier__->r_w_cnt__ > 1){
+ @<acquire token mu@>;
+ --token_supplier__->r_w_cnt__;
+ @<release token mu@>;
+ }
+ }
+
+@<Trace TH after parallel parse thread message count reduced@>;
+
+@ Check failed directive for possible acceptance.\fbreak
+A fsm |failed| directive was added to allow for a last chance
+attempt at an aborted thread parse.
+One can return an error token to the calling grammar
+making its look like a successful parse
+via syntax directed code of the |failed| directive.
+It's not a panacea but hey it helps.
+@<check failed directive for possible acceptance@>=
+if(fsm_tbl__->failed() == true){
+ return parallel_parse_successful();
+}
+
+@*2 Proc call parse successful.\fbreak
+Put the accept message into the requesting grammar's accept queue.
+Just return back to callr.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+proc_call_parse_successful(){
+ @<Trace TH current token, and accepted terminal wrapper@>;
+ @<insert token into requesting grammar's accept queue@>;
+ clean_up();
+ return Parser::accepted;
+}
+
+@*2 Proc call parse unsuccessful.\fbreak
+If it is the last active thread, it wakes up the requesting grammar via a message.
+Otherwise, it just winds down without any message:
+a bit of an optimization to lowering messages between friends.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+proc_call_parse_unsuccessful(){@/
+ @<check failed directive for possible acceptance@>;
+ @<Trace TH proc call parse current token when an error has occured@>;
+ goto fire_off_error_functor;
+fire_off_error_functor:@/
+ cleanup_stack_due_to_abort();
+ clean_up();
+ return Parser::erred;
+}
+
+@*2 Find current T shift entry.\fbreak
+Algo. binary search 6.2.1 from Knuth Vol. 3.
+A little speed to eliminate the passing of the enumerate value.
+A quick test showed approximately the sequential search is
+faster than the binary search when the table population is less than 72.
+@<accrue yacco2 code@>=
+yacco2::Shift_entry*
+yacco2::
+Parser::
+find_cur_T_shift_entry(){@/
+ @< Reserve and get current stack record@>;
+ yacco2::USINT Enum_id = current_token__->enumerated_id__;
+ State* State_ptr = pr->state__;
+ Shift_tbl* st = State_ptr->shift_tbl_ptr__;
+ yacco2::USINT cnt = st->no_entries__;
+ Shift_entry_array_type* shft_entry_array = (Shift_entry_array_type*)&st->first_entry__;
+ yacco2::Shift_entry* k_entry;
+if(cnt > SEQ_SRCH_VS_BIN_SRCH_LIMIT) goto bin_srch;
+for(int x=0;x<cnt;++x){
+ k_entry = &(*shft_entry_array)[x];
+ if(Enum_id == k_entry->id__) return k_entry;
+ if(Enum_id < k_entry->id__) break;
+}
+eolr_seq:
+for(int x=0;x<cnt;++x){
+ k_entry = &(*shft_entry_array)[x];
+ if(LR1_Eolr == k_entry->id__) return k_entry;
+ if(LR1_Eolr < k_entry->id__) return 0;
+}
+return 0;
+bin_srch:
+int lower = 1;
+int upper = cnt;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+B2: // calc mid pt
+if(upper < lower) goto eolr_srch;
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*shft_entry_array)[mid_pt_rel0];
+B3: // compare
+if(Enum_id == k_entry->id__)return k_entry;
+if(Enum_id > k_entry->id__) goto B5;
+B4: // adjust upper
+upper = mid_pt - 1;
+goto B2;
+B5: // adjust lower
+lower = mid_pt + 1;
+goto B2;
+eolr_srch: // see if all T in set
+lower = 1;
+upper = st->no_entries__;
+B2_eolr: // calc mid pt
+if(upper < lower) return 0;
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*shft_entry_array)[mid_pt_rel0];
+if(LR1_Eolr == k_entry->id__) return k_entry;
+if(LR1_Eolr > k_entry->id__) goto B5_eolr;
+B4_eolr: // adjust upper
+upper= mid_pt - 1;
+goto B2_eolr;
+B5_eolr: // adjust lower
+lower = mid_pt + 1;
+goto B2_eolr;
+ return 0;
+}
+@*2 Find Rule or paralleled returned T shift entry.\fbreak
+Algo. binary search 6.2.1 from Knuth Vol. 3.
+@<accrue yacco2 code@>=
+yacco2::Shift_entry*
+yacco2::
+Parser::
+find_R_or_paralleled_T_shift_entry(yacco2::USINT Enum_id){@/
+ @< Reserve and get current stack record@>;
+ State* State_ptr = pr->state__;
+ Shift_tbl* st = State_ptr->shift_tbl_ptr__;
+ yacco2::USINT cnt = st->no_entries__;
+ Shift_entry_array_type* shft_entry_array = (Shift_entry_array_type*)&st->first_entry__;
+yacco2::Shift_entry* k_entry;
+if(cnt > SEQ_SRCH_VS_BIN_SRCH_LIMIT) goto bin_srch;
+for(int x=0;x<cnt;++x){
+ if(x>=cnt) break;
+ k_entry = &(*shft_entry_array)[x];
+ if(Enum_id == k_entry->id__) return k_entry;
+ if(Enum_id < k_entry->id__) break;
+}
+eolr_seq:
+for(int x=0;x<cnt;++x){
+ if(x>=cnt) break;
+ k_entry = &(*shft_entry_array)[x];
+ if(LR1_Eolr == k_entry->id__) return k_entry;
+ if(LR1_Eolr < k_entry->id__) return 0;
+}
+return 0;
+bin_srch:
+int lower = 1;
+int upper = cnt;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+B2: // calc mid pt
+if(upper < lower) goto eolr_srch;
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*shft_entry_array)[mid_pt_rel0];
+B3: // compare
+if(Enum_id == k_entry->id__) return k_entry;
+if(Enum_id > k_entry->id__) goto B5;
+B4: // adjust upper
+upper = mid_pt - 1;
+goto B2;
+B5: // adjust lower
+lower = mid_pt + 1;
+goto B2;
+eolr_srch: // see if all T in set
+lower = 1;
+upper = st->no_entries__;
+B2_eolr: // calc mid pt
+if(upper < lower) return 0;
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*shft_entry_array)[mid_pt_rel0];
+if(LR1_Eolr == k_entry->id__) return k_entry;
+if(LR1_Eolr > k_entry->id__) goto B5_eolr;
+B4_eolr: // adjust upper
+upper= mid_pt - 1;
+goto B2_eolr;
+B5_eolr: // adjust lower
+lower = mid_pt + 1;
+goto B2_eolr;
+ return 0;
+}
+
+@*2 |add_set_to_map|.
+@<accrue yacco2 code@>=
+void
+add_set_to_map(yacco2::yacco2_set_type& Map,int Partition,int Element){@/
+ yacco2::yacco2_set_iter_type e = Map.find(Partition);
+ if(e == Map.end()){
+ Map[Partition] = Element;
+ }else{
+ int se = e->second;
+ int v = se + Element;
+ e->second = v;
+ }
+}
+@*2 Reduce Attempts.\fbreak
+The following points detail the order of reduce attempts.
+Apart from point 1 which is the regular reduce attempt,
+points 2 and 3 use various meta terminals attempts
+ for different parsing contexts.\fbreak
+\INDENT{1.5cm}{1) current token --- standard lr(1) reduce}
+\INDENT{1.5cm}{2) meta Tes except \QUEshift, eog, and \PARshift}
+\INDENT{2cm}{in set --- eolr, \REDshift, \INVshift, \ALLshift, and \PROCshift}
+\INDENT{1.5cm}{3) Only \QUEshift for forced lr(0) reduction}
+Point 2 is sensitive to the next state's shift attempts ---
+be it wild or \emptyrule.
+Point 3 is a specific attempt at drawing the reader's eye
+to errors within the grammar.
+It is used in 2 situations:\fbreak
+\INDENT{1.5cm}{a) shift with its syntax directed code to deal with the error}
+\INDENT{1.5cm}{b) when in another rule's follow set enforce a reduction}
+Point b covers the situation whereby the subrule to be reduced
+will reduce and shift the rule into its next parse state
+which contains the \QUEshift where the error will be
+dealt with by its syntax directed code.
+It is a forcefull reduce instead of considering it an error which it is
+due to the bad lookahead T by prolonging the error
+situation to be dealt with by the next parse state environment.
+This allows the parsing to continue (shift favoured) and to
+catch the error in the \QUEshift ``shift operation''
+ of the new current parse state.
+@*3 Find \QUEshift in reduce lookahead to force a LR(0) reduction.\fbreak
+Algo. binary search 6.2.1 from Knuth Vol. 3.
+What do u do when the lookahead is faulty (current token) and u want
+ the state's subrule to reduce so as to force
+the parser into
+the rule's shift state which deals with the \QUEshift error?
+Remember the \QUEshift sym has been properly calculated in the lookahead
+set for the reduce to take place as it is part of the
+follow set symbol string in the grammar!
+This is my experiment.
+@<accrue yacco2 code@>=
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_questionable_sym_in_reduce_lookahead(){@/
+ @< Reserve and get current stack record@>;
+ State* State_ptr = pr->state__;
+ UCHAR partition;
+ UCHAR element;
+ int lower;
+ int upper;
+ int seg_ln;
+ int mid_pt;
+ int mid_pt_rel0;
+ yacco2::Set_entry* k_entry;
+
+ Reduce_tbl* rt = State_ptr->reduce_tbl_ptr__;
+ yacco2::USINT cnt_of_reducing_subrules = rt->no_entries__;
+ Reduce_entry* re = (Reduce_entry*)&rt->first_entry__;
+ yacco2::Set_tbl* pla_set;
+ yacco2::INT no_set_pairs;
+ for(yacco2::UINT x = 1;x <= cnt_of_reducing_subrules;++x,++re){
+ pla_set = re->la_set__;
+ no_set_pairs = pla_set->no_entries__;
+ Set_entry_array_type* set_entry_array = (Set_entry_array_type*)&(pla_set->first_entry__);
+ if(no_set_pairs > SEQ_SRCH_VS_BIN_SRCH_LIMIT) goto QUE_srch;
+ for(int x=0;x<no_set_pairs;++x){
+ k_entry = &(*set_entry_array)[x];
+ if(LRK_LA_QUE_SET.partition__ == k_entry->partition__){
+ if(LRK_LA_QUE_SET.elements__ & k_entry->elements__){
+ return re;
+ }else{
+ break; // next reducing rule; not in set
+ }
+ }
+ if(LRK_LA_QUE_SET.partition__ < k_entry->partition__) break;
+ }
+ continue;// next re
+QUE_srch: // see if meta \QUEshift in set
+lower = 1;
+upper = no_set_pairs;
+B2_que: // calc mid pt
+if(upper < lower) return 0;
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*set_entry_array)[mid_pt_rel0];
+
+if(LRK_LA_QUE_SET.partition__ == k_entry->partition__){
+ if(LRK_LA_QUE_SET.elements__ & k_entry->elements__){
+ return re;
+ }else{
+ continue; // this reducing rule not it so next reducing subrule
+ }
+}
+
+if(LRK_LA_QUE_SET.partition__ > k_entry->partition__) goto B5_que;
+B4_que: // adjust upper
+upper= mid_pt - 1;
+goto B2_que;
+B5_que: // adjust lower
+lower = mid_pt + 1;
+goto B2_que;
+ }
+ return 0;
+}
+
+@*3 |find_reduce_entry|.\fbreak
+Use own bsearch to speed things up --- too much overhead in generic bsearch.
+See Knuth algo. --- variant used shift entry lookup.
+The reduce table contains a sequential list of potential
+reducing subrules.
+Each lookahead set is composed of pairs of set partition with its elements.
+Each entry is a 2 byte of compressed format.
+The number of pairs in the table
+is the 1st byte in the reducing set structure.
+
+The algorithm is potentially a 2 pass over the number of
+potential reducing subrules in the state.
+The pecking order is find the current token within the reducing state
+followed by other attempts of meta symbols, and last the \QUEshift{} symbol.\fbreak
+Pass 1: Is current token in one of the subrule lookahead sets.\fbreak
+If yes then exit with the appropriate reduce entry for that found reducing subrule.\fbreak
+\fbreak
+Pass 2: Is the Meta set elements found within one of the reducing subrules?\fbreak
+The Meta symbol LA set elements are Eolr, \INVshift, \ALLshift, \PROCshift, and \INVshift.
+If yes then exit with the appropriate subrule's reduce entry having found a meta symbol.\fbreak
+\fbreak
+Last gasp: Is \QUEshift{} in the LA sets?.
+\fbreak
+\fbreak
+As an optimization i implicitly use the current token who
+already has with it the compressed set key
+to be searched against the lookahead set.
+
+A wrinkle is support of the \QUEshift --- questionable situations.
+|has_questionable_shift_occured__| flags its use and so
+ returns the 1st entry as it is a lr(0) context. It is
+not dependent on the lookahead symbol with its context search.
+@<accrue yacco2 code@>=
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_reduce_entry(){@/
+ @< Reserve and get current stack record@>;
+ State* State_ptr = pr->state__;
+ UCHAR partition = current_token__->tok_co_ords__.set_entry__.partition__;
+ UCHAR element = current_token__->tok_co_ords__.set_entry__.elements__;
+ int cp = partition;
+ int ce = element;
+ Reduce_tbl* rt = State_ptr->reduce_tbl_ptr__;
+ yacco2::USINT cnt_of_reducing_subrules = rt->no_entries__;
+ Reduce_entry* re = (Reduce_entry*)&rt->first_entry__;
+
+ yacco2::Set_tbl* pla_set;
+ yacco2::INT no_set_pairs;
+ int lower;
+ int upper;
+ int seg_ln;
+ int mid_pt;
+ int mid_pt_rel0;
+ yacco2::Set_entry* k_entry;
+ if(has_questionable_shift_occured__ == ON){
+ return re;
+ }
+ @<Pass1: find current tok in potential reducing subrules and exit if fnd@>;
+ @<Pass2: find meta symbols in potential reducing subrules and exit if fnd@>;
+ return find_questionable_sym_in_reduce_lookahead();
+}
+
+@ Create element's key set.
+@<create element's key set to be searched in reduce set@>=
+ Set_entry la_set;
+ @<|create_set_entry|@>;
+
+
+@ Pass1: find current tok in potential reducing subrules.\fbreak
+Rip thru the potential subrules list looking for mister current token.
+If found return its subrule's reduce entry.
+If not found against the subrules reducing LAs then it drops out of the loop
+and gives controll to Pass2.
+@<Pass1: find current tok in potential reducing subrules and exit if fnd@>=
+{
+Pass1_reduce:@/
+ re = (Reduce_entry*)&rt->first_entry__;
+ for(yacco2::UINT x = 1;x <= cnt_of_reducing_subrules;++x,++re){
+ pla_set = re->la_set__;
+ no_set_pairs = pla_set->no_entries__;
+ Set_entry_array_type* set_entry_array = (Set_entry_array_type*)&(pla_set->first_entry__);
+ if(no_set_pairs > SEQ_SRCH_VS_BIN_SRCH_LIMIT){
+ @<binary search for token in current subrule la@>;
+ }else{
+ @<sequential search for token in current subrule la@>;
+ }
+ }
+}
+@ Sequential search for token in current subrule la.
+@<sequential search for token in current subrule la@>=
+ for(int xx=0;xx<no_set_pairs;++xx){
+ k_entry = &(*set_entry_array)[xx];
+ if(partition == k_entry->partition__){
+ if(element & k_entry->elements__){
+ return re;
+ }else{
+ break; // next reducing rule; not in set
+ }
+ }
+ if(partition < k_entry->partition__) break;
+ }
+
+@ Binary search for token in current subrule la.
+@<binary search for token in current subrule la@>=
+{
+bin_srch_cur_tok:@/
+ lower = 1;
+ upper = no_set_pairs;
+ B2: // calc mid pt
+ if(upper < lower) goto srch_end_cur_tok;
+ seg_ln = upper + lower;
+ mid_pt = seg_ln >> 1;
+ mid_pt_rel0 = mid_pt - 1;
+ k_entry = &(*set_entry_array)[mid_pt_rel0];
+B3: // compare
+if(partition == k_entry->partition__){
+ if(element & k_entry->elements__){
+ return re;
+ }else{
+ goto srch_end_cur_tok; // T not in LA
+ }
+}
+if(partition > k_entry->partition__) goto B5;
+B4: // adjust upper
+upper = mid_pt - 1;
+goto B2;
+B5: // adjust lower
+lower = mid_pt + 1;
+goto B2;
+srch_end_cur_tok:;
+}
+
+@ Pass2: find meta symbols in potential reducing subrules.\fbreak
+Rip thru the potential subrules list looking for meta symbols.
+If found return its subrule's reduce entry.
+If not found against the subrules reducing LAs then it drops out of the loop
+and gives controll to the last Gasp.
+@<Pass2: find meta symbols in potential reducing subrules and exit if fnd@>=
+{
+ re = (Reduce_entry*)&rt->first_entry__;
+ for(yacco2::UINT x = 1;x <= cnt_of_reducing_subrules;++x,++re){
+ pla_set = re->la_set__;
+ no_set_pairs = pla_set->no_entries__;
+ Set_entry_array_type* set_entry_array = (Set_entry_array_type*)&(pla_set->first_entry__);
+
+ if(no_set_pairs > SEQ_SRCH_VS_BIN_SRCH_LIMIT){
+ @<binary search for meta symbol in current subrule la@>;
+ }else{
+ @<sequential search for meta symbol in current subrule la@>;
+ }
+ }
+}
+@ Sequential search for meta symbol in current subrule la.
+@<sequential search for meta symbol in current subrule la@>=
+{
+seq_meta:@/
+ for(int x=0;x<no_set_pairs;++x){
+ k_entry = &(*set_entry_array)[x];
+ if(LRK_LA_EOLR_SET.partition__ == k_entry->partition__){
+ if(LRK_LA_EOLR_SET.elements__ & k_entry->elements__){
+ return re;
+ }else{
+ break; // next reducing rule; not in set
+ }
+ }
+ if(LRK_LA_EOLR_SET.partition__ < k_entry->partition__) break;
+ }
+}
+
+@ Binary search for meta symbol in current subrule la.
+@<binary search for meta symbol in current subrule la@>=
+{
+bin_srch_meta:
+ lower = 1;
+ upper = no_set_pairs;
+Meta_srch: // see if meta Ts in set
+lower = 1;
+upper = no_set_pairs;
+B2_meta: // calc mid pt
+if(upper < lower){
+ continue; // next subrule return 0;
+ }
+seg_ln = upper + lower;
+mid_pt = seg_ln >> 1;
+mid_pt_rel0 = mid_pt - 1;
+k_entry = &(*set_entry_array)[mid_pt_rel0];
+
+if(LRK_LA_EOLR_SET.partition__ == k_entry->partition__){
+ if(LRK_LA_EOLR_SET.elements__ & k_entry->elements__){
+ return re;
+ }else{
+ continue; // this reducing rule no meta so next reducing subrule
+ }
+}
+if(LRK_LA_EOLR_SET.partition__ > k_entry->partition__) goto B5_meta;
+B4_meta: // adjust upper
+upper= mid_pt - 1;
+goto B2_meta;
+B5_meta: // adjust lower
+lower = mid_pt + 1;
+goto B2_meta;
+}
+
+@*2 |find_parallel_reduce_entry|.\fbreak
+See ``Notes to myself''.
+This is a lr(0) reduction. So pick up the first entry in the table.
+This forces a reduction to take place regardless of the ``lookahead''
+token. It allows the calling parser to complete the reduction
+and then use the ``shift'' mechanism of \INVshift, \ALLshift to catch errors.
+@<accrue yacco2 code@>=
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_parallel_reduce_entry(){@/
+ @< Reserve and get current stack record@>;
+ State* State_ptr = pr->state__;
+ Reduce_tbl* rt = State_ptr->reduce_tbl_ptr__;
+ Reduce_entry* re = (Reduce_entry*)&rt->first_entry__;
+ return re;
+}
+
+@*2 |find_proc_call_reduce_entry|.\fbreak
+See ``Notes to myself''.
+This is a lr(0) reduction. So pick up the first entry in the table.
+This forces a reduction to take place regardless of the ``lookahead''
+token. It allows the calling parser to complete the reduction
+and then use the ``shift'' mechanism of \INVshift, \ALLshift to catch errors.
+@<accrue yacco2 code@>=
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_proc_call_reduce_entry(){@/
+ @< Reserve and get current stack record@>;
+ State* State_ptr = pr->state__;
+ Reduce_tbl* rt = State_ptr->reduce_tbl_ptr__;
+ Reduce_entry* re = (Reduce_entry*)&rt->first_entry__;
+ return re;
+}
+
+@** Start token routines.
+@*2 |start_token|.
+@<accrue yacco2 code@>=
+yacco2::
+CAbs_lr1_sym*
+yacco2::
+Parser::
+start_token(){
+ return start_token__;
+}
+
+@*2 |set_start_token|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_start_token(CAbs_lr1_sym& Token){
+ start_token__ = &Token;
+}
+
+@*2 |start_token_pos|.
+@<accrue yacco2 code@>=
+yacco2::UINT
+yacco2::
+Parser::
+start_token_pos(){
+ return start_token_pos__;
+}
+
+@*2 |set_start_token_pos|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_start_token_pos(yacco2::UINT Pos){
+ start_token_pos__ = Pos;
+}
+
+@*2 All shift routines.\fbreak
+ These routines control how the parser
+reacts to the \ALLshift all shift terminal. As this
+terminal is never in the token stream, it is a condition
+that the parser checks within the current state's configuration.
+If the facility is on and the `all shift' terminal is present
+in the current PDA's state, then the parser shifts the terminal.
+Not on or present, the parser tries the next inline operation which is a reduce.
+The parser favors shifting over reducing.
+It is turned on both at initialization time and reset time after a parallel parse.
+
+It is up to the grammar writer to turn off this facility.
+To shutoff this facility, usually the syntax directed code tests
+for a specific terminal by its enumeration id
+ during the shift operation.
+Shuting off of the facility allows the grammar to complete instead of sitting in an open
+loop of consuming terminals until an overrun occurs against the token stream.
+@*2 |set_use_all_shift_on|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_use_all_shift_on(){
+ use_all_shift__ = ON;
+}
+
+@*2 |set_use_all_shift_off|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_use_all_shift_off(){
+ use_all_shift__ = OFF;
+}
+
+@*2 |use_all_shift|.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::
+use_all_shift(){
+ return use_all_shift__;
+}
+
+@** Parser symbol table functor and abort, stop routines.
+@*2 |sym_lookup_functor|.\fbreak
+ This is your imported functor used to do
+token remapping: another term for symbol table handling.
+The functor is specific to the language being parsed.
+It has been tested against the Pascal language and Yacco2's grammar.
+Of course |cweb| was used to develop these symbol tables.
+
+@<accrue yacco2 code@>=
+yacco2::tble_lkup_type*
+yacco2::
+Parser::
+sym_lookup_functor(){
+ return sym_lookup_functor__;
+}
+
+@*2 |abort_parse|.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::
+abort_parse(){
+ return abort_parse__;
+}
+@*2 |set_abort_parse|.\fbreak
+ Used to abort abruptly a parse.
+Not too subtle. Directs the parser to do its abort-winddown thing.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_abort_parse(bool Abort){
+ abort_parse__ = Abort;
+}
+@*2 |stop_parse|.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::
+stop_parse(){
+ return stop_parse__;
+}
+@*2 |set_stop_parse|.\fbreak
+ Used to stop a parse.
+This is much more refined as one can place an error token into
+the accept queue for grammatical error processing and come to a gentle stop.
+This is a refinement to an abort.
+It does the same thing as abort in its cleanup
+except that it is considered a successful parse.
+This process is a grammar writer's statement within syntax directed code whereas
+the abort comes from 2 sources: the grammar writer's syntax directed code or
+an invalid token stream causing
+the parse thread to abort.
+Cavate: You still must use the |RSVP| macro to place the token into the accept queue.
+If you don't, you'll get a runtime check
+due to the accepted token (current lookahead token)
+having the same lookahead token boundary.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_stop_parse(bool Stop){
+ stop_parse__ = Stop;
+}
+
+
+@** Parser's FSM support routines.
+@*2 |fsm_tbl|.\fbreak
+ Just the fsm automaton ensemble.
+@<accrue yacco2 code@>=
+yacco2::CAbs_fsm*
+yacco2::
+Parser::
+fsm_tbl(){
+ return fsm_tbl__;
+}
+
+@** Parse containers.
+The four containers are:\fbreak
+\ptindent{Token supplier --- input token stream to parser}
+\ptindent{Token producer --- receives output from the parser for next stage processing}
+\ptindent{Error --- container of error terminals}
+\ptindent{Recycle --- ecological bio-degradable }
+
+As containers are template driven due to the diversity of inputs,
+there are 2 typedefs describing containers.
+|token_container_type| is a |tok_can| based template that other containers
+inherit from.
+Used by the |error| queue is the |TOKEN_GAGGLE| container based on a vector template.
+
+The 2 variants of an input queue are the source file to raw character conversion, and the
+regular supplier queue that feeds the lexical and syntatic parse stages.
+These are specialized templates.
+
+Another container handles tree related structures with their
+associated walkers and terminal filter
+functors. This allows one to process a tree as a stream of tokens that get
+digested by a grammar. The filter has a complement indicator as to include or exclude
+the terminal types in the filter set.
+This eases the declaration task of the compiler writer.
+Given a large population of terminal types, the set of exclusion terminal enumerates minimizes
+the effort of unwanted terminals in the parse stream. The same holds
+for a small number of terminals for processing using inclusion.
+See |tree containers|.
+@<Type def...@>+=
+struct Caccept_parse;
+#define pp_accept_queue_size 8
+typedef yacco2::Caccept_parse pp_accept_queue_type[pp_accept_queue_size];@/
+
+
+@*2 Supplier container.\fbreak
+ This is your standard token dispensor that feeds a parser.
+Due to parallelism,
+there is only 1 supplier of tokens.
+Somewhere in the call chain of the threads there is a token dispensor.
+It is always supplied by the calling grammar to its threads.
+The container is a ``many reader'' to the called threads of parallelism.
+@*3 |token_supplier|.
+@<accrue yacco2 code@>=
+yacco2::token_container_type*
+yacco2::
+Parser::
+token_supplier(){
+ return token_supplier__;
+}
+
+@*3 |set_token_supplier|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_token_supplier(yacco2::token_container_type& Token_supplier){
+ token_supplier__ = &Token_supplier;
+}
+
+@*3 |add_token_to_supplier|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+add_token_to_supplier(yacco2::CAbs_lr1_sym& Token){
+if(token_supplier__->r_w_cnt__ > 1)
+ @<acquire token mu@>;
+ token_supplier__->push_back(Token);
+if(token_supplier__->r_w_cnt__ > 1)
+ @<release token mu@>;
+}
+
+
+@*2 Producer container.\fbreak
+ Receiver of outputted terminals from a parse stage.
+It normally becomes a supplier queue to a down stream parse stage.
+@*3 |token_producer|.
+@<accrue yacco2 code@>=
+yacco2::token_container_type*
+yacco2::
+Parser::
+token_producer(){
+ return token_producer__;
+}
+
+@*3 |set_token_producer|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_token_producer(yacco2::token_container_type& Token_producer){
+ token_producer__ = &Token_producer;
+}
+
+@*3 |add_token_to_producer|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+add_token_to_producer(yacco2::CAbs_lr1_sym& Token){
+ @<acquire token mu@>;
+ token_producer__->push_back(Token);
+ @<release token mu@>;
+}
+
+@*2 Recycle container.\fbreak
+A holder of tokens that need to be postprocessed.
+Typical use is to remove tokens out of a token stream
+but will be re-integrated later back into some other token stream. For example,
+a translator that retargets one language into another and the comments
+need re-integrating back into the targetted output.
+@*3 |recycle_bin|.
+@<accrue yacco2 code@>=
+yacco2::token_container_type*
+yacco2::
+Parser::
+recycle_bin(){
+ return recycle_bin__;
+}
+
+@*3 |set_recycle_bin|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_recycle_bin(yacco2::token_container_type& Recycle_bin){
+ recycle_bin__ = &Recycle_bin;
+}
+
+@*3 |add_token_to_recycle_bin|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+add_token_to_recycle_bin(yacco2::CAbs_lr1_sym& Token){
+ @<acquire token mu@>;
+ recycle_bin__->push_back(Token);
+ @<release token mu@>;
+}
+
+@*2 Error queue.\fbreak
+Just a holding container for error terminals.
+I use this container to express warnings and errors within Yacco2.
+If one is creative, error sentences can be outputted that will be
+later parsed by an error grammar. This is how
+Yacco2 handles its errors outputted to the grammar writer
+by matching the errors to the source file co-ordinates.
+The error queue is just another input queue to be parsed.
+Error sentences can be expressed be it of a
+single token to a complete language of various structures.
+To process the errors, it can be as simple as
+iterating through the container, to use a grammar having only the `all shift' facility,
+to grammars describing the error language.
+@*3 |set_error_queue|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+set_error_queue(yacco2::token_container_type& Error_queue){
+ error_queue__ = &Error_queue;
+}
+
+@*3 |error_queue|.
+@<accrue yacco2 code@>=
+yacco2::token_container_type*
+yacco2::
+Parser::
+error_queue(){return error_queue__;}
+
+@*3 |add_token_to_error_queue|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+add_token_to_error_queue(yacco2::CAbs_lr1_sym& Token){
+@<Validate error queue@>;
+ @<acquire token mu@>;
+ error_queue__->push_back(Token);
+ @<release token mu@>;
+}
+
+@*2 Accept queue |RSVP|, |RSVP_FSM|, |RSVP_WLA| macro use comments.\fbreak
+This is an array where the arbitrator's syntax directed code
+tests against it for the specific presence of an accepted token.
+For example, the terminals `identifier' and `keyword' are parallel competitors.
+The arbitrator needs to test if the keyword is present to throw away the identifier.
+
+The |RSVP| macro is used to added to the parser's accept queue
+from within the grammar's rule context.
+The |RSVP_WLA| macro is used to added to the parser's accept queue
+and to use its lookahead parameters instead of the defaults.
+The |RSVP_FSM| macro is used to added to the parser's accept queue
+from within the fsm's context.
+|put_T_into_accept_queue| is another way to do it.
+
+
+@*3 Put potential |Caccept_parse| into accept queue.\fbreak
+|Caccept_parse| is just a carrier of the real terminal contained inside it.
+The parallel thread submitting its result to the accept
+queue already has ownership of |pp_requesting_parallelism__|'s mutex.
+|pp_accept_queue__| is an array where the 0 subscript does nothing.
+
+The parameter is needed as this is the context of the called thread who is
+placing its contents into the calling thread's accept queue.
+@<accrue yacco2 code@>+=
+void
+yacco2::
+Parser::
+put_T_into_accept_queue(yacco2::Caccept_parse& Calling_parm){
+ ++th_accepting_cnt__;
+ if(th_accepting_cnt__ < pp_accept_queue_size){
+ pp_accept_queue__[th_accepting_cnt__].fill_it(Calling_parm);// copy its contents
+ }else{// throw error
+ abort_accept_queue_irregularites(Calling_parm);
+ }
+
+}
+
+
+@** Token Get routines: specific stack token, next token in stream.
+A word on the subscript used to access a container's content.
+I'm not a fan of relative-to-zero situations.
+I count by 1 and a 2 and a... Lawrence Welk anyone?
+Just because its more efficient to access an array by relative-to-zero
+subscripts doesn't mean that I must adhold to this.
+So what are the options.
+Sit quite and be efficient... ugh. Hear my teeth grinding?
+Subtract 1 from the subscript every time the container
+is being accessed: a bit too expensive --- what, can't u count this way?
+Put a boggus record at container creation time into the zero position of the container.
+Humm --- consider it a bs record: before start.
+Now what are the merits: no calculation required, Dave can count, and no off-by-one
+situations.
+Now the demerits: extra space, must watch to skip over the first item in the container
+if iterators are used. Oh well. Come on u old dog or is it Humpty Dumpty had a great...
+No, one is one and that's it.
+For now the relative-to-zero works.
+
+To integrate symbol table facilities into the Yacco2, a functor was created.
+Appropriate |cweb| macros were written to easy the pain.
+|Remap_token| retargets the token read from the input stream.
+It clones off the token having the same source co-ordinates.
+Its logic est tres simple:\fbreak
+\ptindent{1) is there a symbol table functor present: no return token fetched}
+\ptindent{2) is symbol table lookup turned off: yes return token fetched}
+\ptindent{3) try look up: if returned token is nil return the fetched token}
+\ptindent{4) return the looked up token}
+
+There are 2 companion |cweb| macros: |Remap_set_result_and_return| and |Remap_return_result|.
+The first macro takes the symbol table's returned token and sets
+it as the parser's current token and returns the new token.
+|Remap_return_result| just returns the retargeted token used by |get_spec_token|
+which is a random query of a token stream.
+Remapped tokens eventually get put into other token containers for down stream processing.
+
+@d Remap_token(Token)
+ if (sym_lookup_functor__ == 0) return Token;
+ if (sym_lookup_functor__->lkup__ == OFF){
+ return Token;
+ }
+ CAbs_lr1_sym* x = sym_lookup_functor__->operator()(Token);
+ if(x == 0) return Token;
+@d Remap_set_result_and_return(Token)
+ Token = x;
+ return Token;
+@d Remap_return_result return x;
+@*3 |get_spec_stack_token|.
+@<accrue yacco2 code@>=
+yacco2::CAbs_lr1_sym*
+yacco2::Parser::
+get_spec_stack_token(yacco2::UINT Pos){
+ if(Pos > MAX_LR_STK_ITEMS) return 0;// |is_pos_within_bnds|
+ Cparse_record* pr = parse_stack__.sf_by_sub(Pos);
+ return pr->symbol__;
+}
+
+@*3 |get_next_token|.
+@^ To do RETHINK parse stack macros rel 1 + 0@>
+Due to the ``jit'' accessing the mutex guarding the container read is NEEDED.
+Tests between not ``jit'' versus ``jit'' with mutex yielded just 3 seconds difference
+across 80 compiles.
+SO KEEP IT.
+\fbreak
+\fbreak
+Some subtle comments on overflow per token container.\fbreak
+The container template implements the access [] operator which guards against
+overflow. It returns the ``eog'' token to indicate end-of-token stream reached.
+In this context the end-of-token stream depends on the specific container.
+From a tree container's perspective, the container's size is open-ended and its
+internal tree walking stack determines whether it has been reached.
+It returns the maximum unsigned integer value within its size method
+which forces a call using the access operator [].
+So the size method is not quite accurate though the other containers are.
+
+But what is your problem Dave?
+When porting to VMS/Alpha, the implemented virtual method of the container template
+did not execute the |TOKEN_GAGGLE| container's virtual operator [] which
+tests its internal state before
+accessing its own internal stl array container's access operator.
+|TOKEN_GAGGLE| container is specificly declared for the ``Error queue'' while all the
+other containers used in parsing like Supplier and Producer are abstract |tok_base| type
+which forces the compiler to
+call the implemented virtual table of the container
+to deal with size, [] and other methods. |tok_base| enforces regularity.
+When parsing the ``Error queue'' aka |TOKEN_GAGGLE| using a grammar/Parser approach, the
+native container's [] operator and not the virtual
+method was called and so aborted on ``array bounds exceeded'' error.
+This is why the pre and post overflow evaluation before calling
+the container's access [] operator.
+The first check is ``has overflow already happened'' and so don't
+increment |current_token_pos__|, just
+reset the |current_token__| to ``eog'' and exit. This keeps the
+internal token subscript accurate.
+The post overflow evaluation is after the |current_token_pos__| increment
+to see if it just reached
+the end-of-token stream condition
+and so set |current_token__| to ``eog'' and exit.
+\fbreak
+\fbreak
+Extracting the token from the container:\fbreak
+So now the Parser's token container needs to be called to get its next token
+with the incremented subscript.
+It is up to the token container's implementation
+ to determine whether the token is within its internal stl's container's bounds.
+The subscript is checked against the stl container's size method for the overflow condition
+and to take appropriate action which is return the ``eog'' token back.
+Finally the internal stl's container
+is accessed by its [] operation to extract the called for token.
+@<accrue yacco2 code@>=
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+get_next_token(){
+ if (token_supplier__==0) return 0;//|is_there_a_token_supplier:|
+ if (token_supplier__->empty() == true){// out-of-bnds: protect current pos
+ current_token__ = yacco2::PTR_LR1_eog__;
+ return current_token__;
+ }
+ if (current_token_pos__ >= token_supplier__->size()){// out-of-bnds: protect current pos
+ current_token__ = yacco2::PTR_LR1_eog__;
+ return current_token__;
+ }
+ ++current_token_pos__;
+ if (current_token_pos__ >= token_supplier__->size()){// out-of-bnds: protect current pos
+ current_token__ = yacco2::PTR_LR1_eog__;
+ return current_token__;
+ }
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::"
+ << thread_no__ << "::" << thread_name()
+ << " get_next_token:: pos to fetch: " << current_token_pos__
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+
+ current_token__ = (*token_supplier__)[current_token_pos__];
+
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::"
+ << thread_no__ << "::" << thread_name()
+ << " get_next_token:: pos: " << current_token_pos__
+ << " enum: " << current_token__->enumerated_id__ << ' '
+ << '"' << current_token__->id__ << '"' << " token fetched*: "
+ << current_token__ << FILE_LINE << std::endl;
+ yacco2::lrclog << "\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<< FILE_LINE <<std::endl;
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<< FILE_LINE <<std::endl;
+}
+EXTERNAL_GPSing(current_token__)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+ Remap_token(current_token__)@/
+if((YACCO2_T__ != 0) && (sym_lookup_functor__ != 0)){
+ if(sym_lookup_functor__->lkup__ == ON != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::"
+ << thread_no__ << "::" << thread_name()
+ << " get_next_token:: pos: " << current_token_pos__
+ << " enum: " << current_token__->enumerated_id__ << ' '
+ << " after remap "
+ << '"' << current_token__->id__ << '"' << " token fetched*: "
+ << current_token__ << FILE_LINE << std::endl;
+ yacco2::lrclog << "\t\t::GPS FILE: ";
+EXTERNAL_GPSing(current_token__)
+
+ yacco2::lrclog
+ << " GPS LINE: "
+ << current_token__->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << current_token__->tok_co_ords__.pos_in_line__
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+}
+ Remap_set_result_and_return(current_token__)@/
+}
+
+@*3 |get_spec_token|.
+@<accrue yacco2 code@>=
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+get_spec_token(yacco2::UINT Pos){@/
+ @<Validate if parser's supplier...@>;
+ @<Validate if subscript within supplier...@>;
+ @<any tokens in container? no return nil ptr@>;
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " get_spec_token pos: "
+<< Pos << FILE_LINE << std::endl;
+@<release trace mu@>;
+}
+ CAbs_lr1_sym* token = (*token_supplier__)[Pos];
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " get_spec_token: returned token " << token->id__ << " pos: "
+<< Pos
+<< " enum: " << token->enumerated_id__
+<< '"' << token->id__ << '"'
+<< FILE_LINE << std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(token)
+yacco2::lrclog
+<<" GPS LINE: "
+<<token->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<token->tok_co_ords__.pos_in_line__
+<< FILE_LINE <<std::endl;
+@<release trace mu@>;
+}
+ Remap_token(token)@/
+if((YACCO2_T__ != 0) && (sym_lookup_functor__ != 0)){
+ if(sym_lookup_functor__->lkup__ == ON != 0){
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " get_spec_token: returned token " << token->id__ << " pos: "
+<< Pos
+<< " enum: " << token->enumerated_id__
+<< " after remap "
+<< '"' << token->id__ << '"'
+<< FILE_LINE<< std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+EXTERNAL_GPSing(token)
+yacco2::lrclog
+<<" GPS LINE: "
+<<token->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<token->tok_co_ords__.pos_in_line__
+<< FILE_LINE <<std::endl;
+ @<release trace mu@>;
+ }
+}
+ Remap_return_result@/
+}
+
+@ Any tokens in container?. no return nil ptr.
+ @<any tokens in container? no return nil ptr@>=
+ if(token_supplier__->empty() == YES) return 0;
+
+
+@** Parse stack routines.
+Currently the subscript to access the stack is relative to ONE.
+@^ To revisit - rel 0, 1 attitude on parse stack. currently rel. ZERO@>
+@ |cleanup_stack_due_to_abort|.
+The last item on the stack is left so that the thread can be re-used.
+This is why its one less for the popping.
+The thread sits idle, twirling its whatever until
+a requesting grammar asks to be serviced.
+
+@*2 |cleanup_stack_due_to_abort|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+cleanup_stack_due_to_abort(){
+ yacco2::INT stack_items_to_process = parse_stack__.top_sub__-1;
+ if(stack_items_to_process > 0){
+ remove_from_stack(stack_items_to_process);
+ }
+ set_abort_parse(OFF);
+ set_stop_parse(OFF);
+}
+
+@*2 |current_stack_pos|.
+@<accrue yacco2 code@>=
+yacco2::INT
+yacco2::
+Parser::
+current_stack_pos(){
+ return parse_stack__.top_sub__;
+}
+
+@*2 |parse_stack|.
+@<accrue yacco2 code@>=
+yacco2::lr_stk*
+yacco2::
+Parser::
+parse_stack(){
+ return &parse_stack__;
+}
+
+@*2 |top_stack_record|.
+@<accrue yacco2 code@>=
+yacco2::Cparse_record*
+yacco2::
+Parser::
+top_stack_record(){
+ if(parse_stack__.top_sub__ < 1) return 0;
+ //if(parse\_stack\_\_.empty() == YES) return 0;
+ @< Reserve and get current stack...@>;
+ return pr;@/
+}
+
+@*2 |get_stack_record|.\fbreak
+The subscript of stack is rel 1 not 0 while the request is rel to 0.
+In between counting strategies: Ugh!
+@<accrue yacco2 code@>=
+yacco2::Cparse_record*
+yacco2::
+Parser::
+get_stack_record(yacco2::INT Pos){
+ @<Validate subscript...@>;
+ if(Pos >= (parse_stack__.top_sub__)) return 0;
+ return parse_stack__.sf_by_sub(Pos+1);
+}
+
+@*2 |no_items_on_stack|. \fbreak
+Twist no oliver, it returns one less than whats on the stack. The reason is
+the first stack record, which is the |start state| of the finite automaton,
+ is always maintained for optimization reasons.
+This allows the parser to begin just start when its re-commissioned to work.
+Normally calling |no_items_on_stack| is a general way to winddown the parse be it
+successful or aborted.
+@<accrue yacco2 code@>=
+yacco2::INT
+yacco2::
+Parser::
+no_items_on_stack(){
+ return parse_stack__.top_sub__;
+}
+
+
+@*2 Add state to parse stack |add_to_stack|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+add_to_stack(yacco2::State& State){@/
+ parse_stack__.push_state(State);
+ @<Trace TH the parse stack configuration@>;
+}
+@ Add to parse stack --- Speed Demon.
+@<|add_to_stack|@>=
+ @<|lr_stk::push_state|@>;
+ //<Trace TH the parse stack configuration>;
+
+@*2 Remove items from the parse stack |remove_from_stack|.\fbreak
+Parse stack is a LIFO order of ${<state*:sym*>}$ configuration pairs.
+The parse stack configuration for S1 shifting `a' into S2 has 2 records.
+The first record contains as an example without the pointer ${1:`a'}$.
+Symbol `a' is the shift item that takes
+the finite state from state 1 into state 2.
+The second record contains the entered state ${2:nil}$. There is no symbol as the next
+parse action has not happened.
+
+This routine also cleans up aborted parses.
+It always leaves the first parse record on the stack as an optimization as
+the thread is snapping its fingers for the next message request to parse.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+remove_from_stack(yacco2::INT No_to_remove){
+ @<Validate parse stack number of removal items@>;
+ @< Validate parse stack removal for underflow@>;
+ @< Check parse stack for epsilon removal...@>;
+ @< Remove items from the parse stack@>;
+}
+
+@ Check parse stack for epsilon removal |remove_from_stack|.
+@< Check parse stack for epsilon removal. yes exit@>=
+ if (No_to_remove == 0){
+ @<Trace TH when an epsilon rule is being reduced@>;
+ return;
+}
+
+
+@ Reserve and get current stack record.
+@< Reserve and get current stack record@>=
+ Cparse_record* pr = parse_stack__.top__;
+
+@ Get current stack record.
+@< Get current stack record@>=
+ pr = parse_stack__.top__;
+
+@ Initialize stack record.
+@< Initialize stack record@>=
+ pr->symbol__ = 0;
+ pr->aborted__ = 0;
+ pr->rule_s_reuse_entry_ptr__ = 0;
+@ Pop parse stack.
+@< Pop parse stack@>=
+--parse_stack__.top_sub__;
+--parse_stack__.top__;
+ //parse\_stack\_\_.pop();
+
+@ Clean up parse stack record and pop from stack.\fbreak
+ When the state is popped,
+the exposed record is the
+state:symbol pair used by the finite automaton to map into the state just popped.
+@< Clean up parse stack record and pop state from stack exposing symbol record@>=
+ @< Initialize stack record@>;
+ @< Pop parse stack@>;
+ @< Get current stack record@>;// symbol record
+
+
+@ Check for zeroed out symbol on parse stack.\fbreak
+This situation can happen if the grammar user plays with the stack's symbols.
+Once apon a time, meta symbols were zeroed out to
+protect from deletion due to their re-cycled nature:
+for example the parallel and invisible shift symbols
+ are created once and recycled many times throughout
+the parse history.
+Now these symbols are protected by having their |auto_delete| attribute turned off.
+
+@< Check for zeroed out symbol on parse stack. If so goto next element to remove@>=
+ if(pr->symbol__ == 0){
+ @<Trace TH zeroed out symbol situation when popped from parse stack@>;
+ goto next_stack_element_to_remove;
+ }
+
+@ Is popping symbol auto deleted?.\fbreak
+ This deals with the grammar symbol's `AD' attribute.
+Due to MSN and their bug brigade, |@^MSN heap delete bug...@>|,
+ the delete arttribute is commented out.
+So the memory heap just grows but with no occasional aborts.
+When the parser stops, it's left to the operating system to reset the heap allocated
+to the program.
+@< Is popping symbol auto deleted? then deal with it and goto next element to remove @>=
+if(pr->rule_s_reuse_entry_ptr__ != 0){
+ fsm_tbl__->recycle_rule(pr->rule_s_reuse_entry_ptr__);
+ pr->rule_s_reuse_entry_ptr__ = 0;// wipe off the rule from the ``in use'' slate
+}
+else{
+ if (pr->symbol__->auto_delete__ == ON){
+ @<Trace TH advise when symbol deleted due to AD switch@>;
+ if(pr->symbol__->dtor__ != 0)
+ (*pr->symbol__->dtor__)(pr->symbol__,this);
+ delete pr->symbol__;
+ pr->symbol__ = 0;// keep that stack clean
+ goto next_stack_element_to_remove;
+ }
+}
+@ Check for aborted parse situation. \fbreak
+If the parse record is clean, then goto next element to remove.
+@<Check for aborted parse situation. If clean goto next element to remove@>=
+ if(pr->aborted__ == 0) goto next_stack_element_to_remove;
+
+@ Deal with auto abort.\fbreak
+This is the grammar symbol's `AB' attribute.
+It checks to see if there is a destructor function to run.
+@<Deal with auto abort@>=
+if(pr->rule_s_reuse_entry_ptr__ != 0){
+ fsm_tbl__->recycle_rule(pr->rule_s_reuse_entry_ptr__);
+ pr->rule_s_reuse_entry_ptr__ = 0;// wipe off the rule from the ``in use'' slate
+}else{
+ if(pr->symbol__->affected_by_abort__ == OFF) goto next_stack_element_to_remove;
+ if(pr->symbol__->dtor__ != 0)@/
+ (*pr->symbol__->dtor__)(pr->symbol__,this);
+ delete pr->symbol__;
+}
+
+@ Remove items from the parse stack. \fbreak
+The remove routine is a straddler.
+The number of records to pop is the appropriate
+grammar's subrule: all the king's men... The straddler part is how the PDA works:
+the top record is the state just entered.
+The symbol that vectored into it is one back. This is the straggler.
+So one is popping the vectored into state leaving the exposed symbol record.
+This holds for accepted and aborted parse situations.
+The Start state record is always on the stack:
+even at parse shutdown as there is nothing to clean up.
+@< Remove items from the parse stack@>=
+ Cparse_record* pr;
+ @< Get current stack record@>;
+ @<Trace TH remove items from the parse stack configuration@>;
+ while (No_to_remove > 0){
+ @<Trace TH popped state no@>;
+ @< Clean up parse stack record and pop...@>;
+ @< Check for zeroed out symbol...@>;
+ @< Trace TH exposed symbol on parse stack@>;
+ @< Is popping symbol auto deleted? ...@>;
+
+ @<Check for aborted parse situation. If clean goto next element to remove@>;
+
+ @<Trace TH advise when auto abort happening@>;
+ @<Deal with auto abort@>;
+ @< Initialize stack record@>;
+ next_stack_element_to_remove:@/
+ --No_to_remove;
+ }
+ @<Trace TH finished removing items from the parse stack configuration@>;
+
+@*2 |clear_parse_stack|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+clear_parse_stack(){
+ yacco2::INT s = parse_stack__.top_sub__-1;// always leave 1st parse record
+ if (s > 0) remove_from_stack(s);
+ if (s == 0){// cleanse possible acceptance start rule
+ @<Reserve and get current stack record@>;
+ if(pr->rule_s_reuse_entry_ptr__ != 0){//don't need hanging around like a dirty smell
+ pr->rule_s_reuse_entry_ptr__ = 0;// already recycled
+ }
+ }
+}
+
+@** Token Get, Reset, Override Flavours: |current_token|, |reset_current_token|, etc.\fbreak
+@*2 |current_token|.\fbreak
+It checks whether it has a symbol table lookup functor.
+If it does not exist or the facility is turned off, the current terminal is returned.
+The table lookup will try to remap a generic terminal. The terminal remapped can be
+anything. This is dependent on the functor written for the language being compiled.
+@<accrue yacco2 code@>=
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+current_token(){
+ Remap_token(current_token__)@/
+ Remap_set_result_and_return(current_token__)@/
+}
+
+@*2 Reset current token.\fbreak
+ |reset_current_token| 15 micro seconds of fame
+by re-aligning the calling parser's current token's co-ordinate within the
+token stream using the |Pos| parameter.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+reset_current_token(yacco2::UINT Pos){@/
+ @<Validate if parser's supplier exists@>;
+ @<Validate if subscript within supplier's bnds@>;
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " reset_current_token pos: "
+<< Pos << FILE_LINE << std::endl;
+@<release trace mu@>;
+}
+ current_token_pos__ = Pos;
+ current_token__ = (*token_supplier__)[Pos];
+if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::"
+<< thread_no__ << "::" << thread_name() << "::"
+<< " reset_current_token: token to: " << current_token__->id__ << " pos: "
+<< current_token_pos__
+<< " enum: " << current_token__->enumerated_id__
+<< '"' << current_token__->id__ << '"'
+<< FILE_LINE << std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<< FILE_LINE <<std::endl;
+@<release trace mu@>;
+}
+}
+
+@*2 |override_current_token|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+override_current_token
+ (yacco2::CAbs_lr1_sym& Token
+ ,yacco2::UINT Pos){
+ current_token_pos__ = Pos;
+ current_token__ = &Token;
+}
+
+@*2 |override_current_token_pos|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+override_current_token_pos(yacco2::UINT Pos){
+ current_token_pos__ = Pos;
+}
+
+@*2 |current_token_pos|.
+@<accrue yacco2 code@>=
+yacco2::UINT
+yacco2::
+Parser::
+current_token_pos(){
+ return current_token_pos__;
+}
+
+@*2 Get shift's next token |get_shift_s_next_token|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+get_shift_s_next_token(){
+ get_next_token();
+}
+
+@** Thread name of grammar that is a thread.
+Monolithic grammars use their ``fsm'' name.
+@*2 |thread_name|.
+@<accrue yacco2 code@>=
+yacco2::KCHARP
+yacco2::
+Parser::
+thread_name(){
+ return thread_name__;
+}
+
+@*2 Thread entry.\fbreak
+ Contains all the dirt about the thread.
+This entry is |nil| if its a monolithic grammar.
+This entry's thread id is used as the key into the parallel thread global table.
+@<accrue yacco2 code@>=
+yacco2::Thread_entry*
+yacco2::
+Parser::
+thread_entry(){
+ return thread_entry__;
+}
+
+@** Thread ``hows and whys'' on thread activation.\fbreak
+There are just 2 critical region classifications:\fbreak
+\ptindent{1) launched threads' table}
+\ptindent{2) each grammar's threading region}
+Each grammar's threading region supports the framework for
+inter-thread communications: messaging (re: events)
+and acceptance token queue --- tokens passed back as results from
+a thread's execution.\fbreak
+Messaging components:\fbreak
+The |th_active_cnt__| and |th_accepting_cnt__| are variables that are
+dynamicly set at each thread launch invocation
+within the launching grammar.
+The number of attempted parallel parses is
+indicated by the |th_active_cnt__| which is the launched number of threads.
+As each thread stops processing, it decrements the counter
+of the launching grammar.
+When the counter reaches 0, it is that thread's responsibility to notify
+the sleeping |pp| parser by event to wake up and assess the parallel parse results.
+|th_accepting_cnt__| is the number of accept messages placed into the
+message queue by successful parallel parses. This number can be 0 indicating
+that all the attempted parallel parses have failed.
+
+Originally the control monitor was the go between for the grammar requesting
+parallelism and the threads controlled by it.
+Now the requesting grammar launches the threads given
+by the its fa's configuration state.
+A little optimization is done by the requesting grammar:
+only launch threads whose first set contains the current token.
+The launching first checks if the thread is in the global thread table and that
+it is available for work.
+
+To further the pursuit of speed, variables |no_competing_pp_ths__|
+and |no_requested_ths_to_run__| determine how the threads should be executed
+within the local context of the launched grammar.
+If there is only 1 thread to launch, it is executed as a procedure call without
+the thread baggage and its critical region entourage
+(not any more: pure thrrreading in the scotish roll of ``r'').
+Why the 2 variables?
+|no_competing_pp_ths__| tells the current thread how many others are competing and
+have been launched by the requesting grammar. Without it being local
+the threaded grammar needs to acquire the mutex of its caller to determine
+the number of launched threads.
+It is a read-only variable that receives
+its value from the requesting grammar's |no_requested_ths_to_run__| variable at start up time.
+If this grammar requests parallelism, it sets its own |no_requested_ths_to_run__|
+variable and calls the appropriate threads who in term set their
+|no_competing_pp_ths__| variable at their invocation time.
+The nesting of threads requires this 2 variable approach: read-only, and read/write
+along with the optimization requirement.
+
+The last part to the flow of messages between threads and the launching grammar
+is the waking up of the calling grammar.
+The launching grammar waits on ``the wakeup'' event posted by
+the last completed execution of the launched threads
+Originally there were many posted messages
+due to the above middlemen but this was
+streamlined to just wake up the grammar requesting parallelism.
+It then checks the critical region variable |th_accepting_cnt__| as
+to whether any of the launched threads were successful.
+
+Why are there variants on ``Wait for an event with or no loop''?
+Cuz of ``pthread'' implementations. It depends on how the library deals with
+messages for an intended thread that has not gone into the waiting stupor.
+Some ``pthread'' implementation will queue up the potential message
+while others just drop it.
+It's a question of how to sync the wait.
+If the ``pthread'' supports a future thread eventually getting to
+wait on the message and the called thread has already
+fired off the message, this pooled ``to be awakened'' message will be
+be forwarded to the thread asking to be put on hold.
+Your choice.
+
+@*1 How to call a thread.
+@*2 Procedure call: |start_procedure_call|.
+@<accrue yacco2 code@>=
+yacco2::THR_result
+Parser::start_procedure_call(yacco2::State& S){
+ th_active_cnt__ = 1;
+ no_requested_ths_to_run__ = 1;
+ @<Trace MSG start by procedure call@>;
+ THR_result rslt = (*S.proc_call_addr__)(this);
+ @<Trace MSG return from by procedure call@>;
+ return rslt;
+}
+
+@*2 Manually: |spawn_thread_manually|.\fbreak
+There is no checking on the first set of the thread. It just runs it.
+Allows the grammar writer to explicitly run a thread.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::
+spawn_thread_manually(yacco2::USINT Thread_id){
+yacco2::thread_array_record* thd_stable = (yacco2::thread_array_record*)THDS_STABLE__;
+Thread_entry** thd_tbl = (Thread_entry**)&thd_stable->first_entry__;
+int no_thds = thd_stable->no_entries__ - 1;// rel to 0
+if((Thread_id > no_thds)){
+ char a[BUFFER_SIZE];
+@.Err spawn\_thread\_manually thre...@>
+ yacco2::KCHARP msg =
+ "spawn_thread_manually thread id: %i out of bounds 0 to %i: no thread available";
+ sprintf(a,msg,Thread_id,no_thds);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+th_lst__.clear();
+Thread_entry* pe = thd_tbl[Thread_id];
+th_lst__.push_back(pe);
+ return start_threads();
+}
+
+@*2 Start threads: |start_threads|.\fbreak
+The grammar has already determined what threads to launch before calling this routine.
+See |@<determine if there are...@>| for details.
+It supplies this threads thru its own private list.
+It searches through the global table for a thread tapping its toes to some
+ipod beat.
+If the thread is not in the table, the thread is created and passed back.
+If the thread is found and it's snapping its fingers for service--- gar\c con, then it
+is taken, marked in the table as working, and passed back.
+
+The last condition is the thread is found
+ but not available to work as it already is working.
+ This situation is nested parallelism
+ which is equivalent to recursion used by top down parses.
+So, create the thread and enter it in the global table list
+ of same thread, run it, and return.
+
+Question. Why do you use a global mutex to protect the global thread table?
+As I do not know how a template runtime library controls multi-access,
+this is an assurance that there is no destruction or strange behaviours
+caused by multiple cpu systems or hyper thread systems.
+This might be overkill but it can be fine tuned when ported to a specific platform
+having standard template library thread safety.
+Just comment out the contents of |@<acquire global thread table critical region@>| and
+ |@<release global thread table critical region@>|.\fbreak
+\fbreak
+Dance of the thread / procedure samba.\fbreak
+Sirens of speed are calling. The procedure call happenns when there is only 1 thread to call
+so its sidekick doubles for him.
+What happens when this sidekick is called recursively?
+For speed reasons, the called procedure's fsm table is static and global.
+Rephrased having the fsm table locally defined in the procedure
+takes on the ctor / use / dtor overhead.
+So?
+Well recursion becomes a destructive action on the singular fsm table.
+2 or more chefs adding salt to the same pot without their
+knowledge of the
+other.
+Now detect whether the procedure is in use so that
+its thread partner does the strutting.
+
+@^Porting - cr on global thread table@>
+@*4 Determine if there are threads to run by current token.
+@<determine if there are threads to run@>=
+th_lst__.clear();
+find_threads_by_first_set(id_of_T,th_lst__,*S.state_s_thread_tbl__);
+
+@*4 Are there threads to run?. no exit with no-thds-to-run result.
+@<are there threads to run?. no exit with no-thds-to-run result@>=
+if(th_lst__.empty() == YES) return Parser::no_thds_to_run;
+
+@*4 Acquire global thread table critical region.
+@<acquire global thread table critical region@>=
+if(yacco2::YACCO2_MU_TH_TBL__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << " --> Attempting to acquire thread table Mutex" << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << " --> Acquired thread table Mutex" << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+
+@*4 Release global thread table critical region.
+@<release global thread table critical region@>=
+if(yacco2::YACCO2_MU_TH_TBL__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << " --> Attempting to release thread table Mutex" << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << " --> Released thread table Mutex" << FILE_LINE << std::endl;
+ @<release trace mu@>;
+}
+
+@*4 Determine disposition of thread in global thread table.\fbreak
+There are 3 possibilities:\fbreak
+\ptindent{1) thread not in global table so needs to be created}
+\ptindent{2) all threads of same name busy so need to create another copy - nested situation}
+\ptindent{3) thread loitering around so put it to work}
+ @<determine disposition of thread@>=
+ int thread_disposition(0);
+ Parallel_thread_list_type& i = Parallel_thread_table[pe->thd_id__];
+ Parallel_thread_list_iterator_type j;
+ Parallel_thread_list_iterator_type je;
+ worker_thread_blk* tb ;
+ if(i.empty() == true){
+ thread_disposition = NO_THREAD_AT_ALL;
+ goto dispatch_disposition;
+ }
+ j = i.begin();
+ je = i.end();
+ for(;j != je;++j){
+ tb = *j;
+ @<Trace threads in launched list@>;
+ if(tb->status__ == THREAD_WAITING_FOR_WORK){
+ thread_disposition = THREAD_WAITING_FOR_WORK;
+ goto dispatch_disposition;
+ }
+ }
+ thread_disposition = ALL_THREADS_BUSY;
+ goto dispatch_disposition;
+
+@*4 Dispatch on thread availability.\fbreak
+Note at the time of thread creation,
+it will fill in its operating system's ``thread no'' returned from |THREAD_SELF| procedure.
+Also the thread's |pp_requesting_parallelism__|, |from_thread__|,
+ and |no_competing_pp_ths__| gets filled in by the canned |wpp_core.h| code.
+ So this is why u do not see these variables set in the code parts of
+ |NO_THREAD_AT_ALL| , and |ALL_THREADS_BUSY|.
+
+@<dispatch on thread availability: busy, available, and create one@>=
+switch (thread_disposition){
+ case THREAD_WAITING_FOR_WORK:{
+ LOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+ ,*tb->grammar_s_parser__," of self");
+ tb->status__ = THREAD_WORKING;
+ ++tb->run_cnt__;
+ tb->grammar_s_parser__->pp_requesting_parallelism__ = this;
+ tb->grammar_s_parser__->no_competing_pp_ths__ = this->no_requested_ths_to_run__;
+ tb->grammar_s_parser__->from_thread__ = this;
+ @<Trace MSG found thread in thread pool waiting to be run@>;
+ UNLOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+ ,*tb->grammar_s_parser__," of self");
+ SIGNAL_COND_VAR(*tb->grammar_s_parser__,*this);
+ break;
+ }
+ case NO_THREAD_AT_ALL:{
+ @<Trace MSG thread not found in global thread pool@>;
+ THR_result result = CREATE_THREAD(pe->thread_fnct_ptr__,*this);
+ break;
+ }
+ case ALL_THREADS_BUSY:{
+ @<Trace MSG thread fnd but all busy, so launch another one @>;
+ yacco2::THR_result result = CREATE_THREAD(pe->thread_fnct_ptr__,*this);
+ break;
+ }
+}
+
+
+@*4 Request threads to work.\fbreak
+It goes thru the thread list of the current fa's state configuration.
+If there is only 1 thread to be run, it calls it as a procedure rather than as a thread.
+The crowd is going mad... A little Fraggle Roc. I got to keep that white cane
+from removing me off the stage.
+
+Why the ``|VMS__|'' macro variable?
+Don't ask, HP fumbled the pthread library implementation
+and the
+procedure call interfers with their pananoia.
+Blow ups on what they think is recursion to same mutex
+whereby a called procedure can then down the grammar call
+chain call itself again but the thread
+is launched as a thread.
+There is no interference on mutex recursion: each
+instantiation of a thread / procedure call contains
+its own mutex / conditional variable.
+Oh well enough of the core dump reguritation.
+Also see their stutter on the |pthread_attr_t|
+variable that does not default properly on stack size.
+It really blows its brains out even with their debugger
+as the firing up of the threads can't even get the
+registers created and so nada on the debugger
+scene with bad exception thrown.
+@<request threads to work@>=
+ th_active_cnt__ = th_lst__.size();
+ no_requested_ths_to_run__ = th_active_cnt__;
+ yacco2_threads_to_run_iter_type i = th_lst__.begin();
+ yacco2_threads_to_run_iter_type ie = th_lst__.end();
+ USINT new_r_w_cnt = supplier_r_w_cnt__ + no_requested_ths_to_run__ - 1;
+ if(new_r_w_cnt > 1){
+ if(supplier_r_w_cnt__ == 1){
+ if(token_supplier__ != 0){ token_supplier__->r_w_cnt__ = new_r_w_cnt;}
+ }else{
+ if(token_supplier__ != 0){
+ @<acquire token mu@>;
+ token_supplier__->r_w_cnt__ = new_r_w_cnt;
+ @<release token mu@>;
+ }
+ }
+ }
+ Thread_entry* pe = *i;
+ @<acquire global thread table critical region@>;
+#ifndef VMS111__
+if(no_requested_ths_to_run__ > 1) goto thread_call;
+procedure_call:{
+ if(Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__ == true){
+ @<Trace MSG proc call in use so call its thread@>;
+ goto thread_call;
+ }
+ Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__ = true;
+ @<release global thread table critical region@>;
+ @<Trace MSG start by procedure call@>;
+ THR_result rslt = (*pe->proc_thread_fnct_ptr__)(this);
+ @<acquire global thread table critical region@>;
+ Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__ = false;
+ @<release global thread table critical region@>;
+ @<Trace MSG return from by procedure call@>;
+ return CALLED_AS_PROC;
+}
+#endif
+thread_call:{
+ for(;i != ie;++i){
+ pe = *i;
+ @<Trace thread to be launched@>;
+ @<determine disposition of thread@>;
+dispatch_disposition:@/
+ @<dispatch on thread availability: busy, available, and create one@>;
+ @<Trace TH parallel parse thread start communication@>;
+ }
+}
+ @<release global thread table critical region@>;
+ return CALLED_AS_THREAD;
+
+@*3 |start_threads|.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::start_threads(){
+ @<Trace MSG start thread@>;
+ @<request threads to work@>;
+}
+
+@*1 Call arbitrator: |call_arbitrator|.\fbreak
+No distinction made between automatically launched thread and its manual breathern.
+A pre-canned arbitrator |AR_for_manual_thread_spawning| is used
+that just returns the first item in the queue
+cuz there is no specialized selective code.
+There is a check as to more than one accept message within
+the queue that produces a thrown error.
+
+Note the optimization code: If there is only 1 parallel thread within the configuration
+and there is no arbritration code present, then no arbitrator code for that
+grammar's state configuration is emitted by Yacco2.
+Also if only 1 T accepting then don't call the arbitrator function.
+
+@<accrue yacco2 code@>+=
+void
+yacco2::
+Parser::
+call_arbitrator(yacco2::Type_pp_fnct_ptr The_judge){
+ if(th_accepting_cnt__ == 1){// optimize no arbitration needed
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+ return;
+ }
+ (*The_judge)(this);
+}
+@
+@<Optimized code call arbitrator@>=
+ if(The_judge == 0){// arbitrator not present in grammar
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+ }
+
+ if(The_judge != 0){// arbitrator present due to code in grammar
+ if(th_accepting_cnt__ == 1){// optimize no arbitration needed
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+ return;
+ }
+ (*The_judge)(this);
+ return;
+ }
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+
+@*1 Pedestrian routines for threading.
+@*2 Acquire trace mu.\fbreak
+Used to serialize trace output.
+Sometimes the traced output is skewed due to the threading.
+The output to a global container is not thread safe, so make it by use of a mutex.
+@<acquire trace mu@>=
+ LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+ yacco2::lrclog << "YACCO2_MU_TRACING__::Acquired trace mu" << FILE_LINE << std::endl;
+}
+
+@*2 Release trace mu.
+@<release trace mu@>=
+if(yacco2::YACCO2_MU_TRACING__){
+ yacco2::lrclog << "YACCO2_MU_TRACING__::Releasing trace mu" << FILE_LINE << std::endl;
+}
+ UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+@*2 Acquire token mu.\fbreak
+Used to serialize token reading.
+@<acquire token mu@>=
+ LOCK_MUTEX(yacco2::TOKEN_MU);
+
+@*2 Release token mu.
+@<release token mu@>=
+ UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+@*2 Wait for event: |wait_for_event|.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+wait_for_event(){
+@<Trace MSG thread waiting for message@>;
+#if THREAD_LIBRARY_TO_USE__ == 1
+ @<wait for event to arrive with no loop@>;
+#else
+ @<wait for event to arrive with no loop@>;
+#endif
+@<Trace MSG message received@>;
+}
+
+@*2 Wait for an event to arrive with no loop.\fbreak
+This is a free-for-all loop, in my case only 1:1. The conditional variable and its
+associated data value is protected by the mutex.
+The calling thread has possession of the called thread's mutex.
+It does its thing in the critical region of the called thread by
+depositing the message and
+setting the conditional variable's data indicator to |EVENT_RECEIVED|.
+It releases the called thread's critical region
+and signals the thread library to wake up the called thread thru a conditional variable.
+|SIGNAL_COND_VAR| is the wrapper function to do this with the passed in variable being the
+selected thread to wakeup.
+
+The wakened thread has now in its possession its critical region
+protecting the conditional variable and associated message indicator.
+@<wait for event to arrive with no loop@>=
+ COND_WAIT(cv__,mu__,*this);
+ cv_cond__ = WAIT_FOR_EVENT;
+
+@*2 Wait for an event to arrive with loop.\fbreak
+This is a free-for-all loop, in my case only 1:1. The conditional variable and its
+associated data value is protected by the mutex.
+The calling thread has possession of the called thread's mutex.
+It does its thing in the critical region of the called thread by
+depositing the message and
+setting the conditional variable's data indicator to |EVENT_RECEIVED|.
+It releases the called thread's critical region
+and signals the thread library to wake up the called thread thru a conditional variable.
+|SIGNAL_COND_VAR| is the wrapper function to do this with the passed in variable being the
+selected thread to wakeup.
+
+The wakened thread has now in its possession its critical region
+protecting the conditional variable and associated message indicator.
+But to be in good keeping, I used Pthread's recommendation to protect against spurious
+interrupts.
+This is why the wait loop tests the message indicator.
+If it was a spurious event, it quitely goes back to sleep
+waiting for that prince charming to...
+To protect against false messages received, the condition is set right after the loop.
+THIS DOES NOT WORK IN HP's Alpha.
+That is why |wait_for_event()| uses |@<wait for event to arrive with no loop@>|
+in its macro conditional.
+@<wait for event to arrive with loop@>=
+ while (cv_cond__ == WAIT_FOR_EVENT){
+ COND_WAIT(cv__,mu__,*this);
+ }
+ cv_cond__ = WAIT_FOR_EVENT;
+
+@*2 |post_event_to_requesting_grammar|.\fbreak
+The calling thread already has the write access to the called thread's critical region.
+Note: All messages are synchronous in nature\fbreak
+ \ptindent{1) A thread waits for an event. There is only one thread that will reply.}
+ \ptindent{2) The replying thread already has the caller's mutex in its posession.}
+Therefore, the called grammar's mutex only needs releasing before it gets wakened
+by the |SIGNAL_COND_VAR| routine. It interrupts the thread runtime library with
+the thread's conditional variable.
+
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+post_event_to_requesting_grammar@/
+ (yacco2::Parser& To_thread@/
+ ,yacco2::INT Message_id@/
+ ,yacco2::Parser& From_thread){
+ @<Trace posting from - to thread info@>;
+ @<deposit sender's co-ordinates...@>;
+ @<signal thread to wake up and work@>;
+}
+
+@*2 Signal thread to wake up and work.\fbreak
+This is the wake up event for the thread library to activate the thread from slumber.
+@<signal thread to wake up and work@>=
+ @<Trace signaled grammar to wakeup while releasing its mutex@>;
+ SIGNAL_COND_VAR(To_thread,*this);
+ @<Trace wakened grammar with its acquired mutex@>;
+
+@*2 Deposit sender's co-ordinates and event in called thread's critical region.
+@<deposit sender's co-ordinates and event in called thread's critical region@>=
+ To_thread.from_thread__ = &From_thread;
+ To_thread.msg_id__ = Message_id;
+
+
+@*2 |have_all_threads_reported_back|.\fbreak
+Each thread has the responsibility to check whether
+it is the last thread to finish processing launched by the requesting grammar.
+There is no
+distinction on success or failure.
+If it is the last thread to complete,
+it must report back via an event to the grammar requesting parallelism.
+If this is not done, well you've heard of Rip Van Winkle?
+The requestor grammar and its dwarfs will sleep forever but not
+the grammar writer.
+Trust me, `after you circles' of politness, or in computer terms
+the `5 dining philosophers' is down right hard to solve.
+@<accrue yacco2 code@>=
+bool
+yacco2::
+Parser::
+have_all_threads_reported_back(){
+ if (pp_requesting_parallelism__->th_active_cnt__ == 0) return YES;
+ return NO;
+}
+
+@*1 Paranoid routines --- Aborts.
+@*2 |abort_accept_queue_irregularites|.\fbreak
+Provide logic clues to grammar writer.
+At least give the writer the grammar's state, list of threads launched,
+and accept tokens to figure out logic bug.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+abort_accept_queue_irregularites
+(yacco2::Caccept_parse& Calling_parm){
+ @<acquire trace mu@>;
+ char a[BUFFER_SIZE];
+ int i = 1;
+ int ie = th_accepting_cnt__;
+ KCHARP grammar_having_logic_bug =
+ "abort_accept_queue_irregularites "
+ "- Overflow on accept queue Grammar name: %s in parse state: %i";
+ sprintf(a,grammar_having_logic_bug,fsm_tbl__->id__,top_stack_record()->state__->state_no__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+
+ yacco2::lrclog << " List of launched threads" << __FILE__ << __LINE__<< std::endl;
+ KCHARP thread_in_launched_list = " - %s";
+ yacco2_threads_to_run_iter_type ii = th_lst__.begin();
+ yacco2_threads_to_run_iter_type iie = th_lst__.end();
+ for(;ii != iie;++ii){
+ Thread_entry* pe = *ii;
+ sprintf(a,thread_in_launched_list,pe->thread_fnct_name__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+ }
+
+ yacco2::lrclog << " List of potential accept parse Tes" << __FILE__ << __LINE__<< std::endl;
+ KCHARP no_of_accept_tokens_in_queue = " no of accept tokens in queue: %i";
+ sprintf(a,no_of_accept_tokens_in_queue,th_accepting_cnt__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+
+ KCHARP accept_queue_tokens = " - id: %s, token position: %i";
+ for(;i<=ie;++i){
+ sprintf(a,accept_queue_tokens
+ ,pp_accept_queue__[i].accept_token__->id__
+ ,pp_accept_queue__[i].accept_token_pos__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+ }
+ @<release trace mu@>;
+@.Err Overflow on Accept queue no ...@>
+ KCHARP msg =
+ "Overflow on Accept queue no of items: %i not eq to thread accepting cnt: %i\n"
+ "This means more than 1 thread adding same accept token into queue?";
+ sprintf(a,msg,th_accepting_cnt__+1,th_accepting_cnt__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+@*2 |abort_no_selected_accept_parse_in_arbitrator|.\fbreak
+Provide logic clues to grammar writer.
+At least give the writer the grammar's state, list of threads launched,
+and accept tokens to figure out logic bug.
+@<accrue yacco2 code@>=
+void
+yacco2::
+Parser::
+abort_no_selected_accept_parse_in_arbitrator(){
+ @<acquire trace mu@>;
+ char a[BUFFER_SIZE];
+ int i = 1;
+ int ie = th_accepting_cnt__;
+ KCHARP grammar_having_logic_bug =
+ "abort_no_selected_accept_parse_in_arbitrator "
+ "- No selected accept T Grammar name: %s in parse state: %i";
+ sprintf(a,grammar_having_logic_bug,fsm_tbl__->id__,top_stack_record()->state__->state_no__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+
+ yacco2::lrclog << " List of launched threads" << __FILE__ << __LINE__<< std::endl;
+ KCHARP thread_in_launched_list = " - %s";
+ yacco2_threads_to_run_iter_type ii = th_lst__.begin();
+ yacco2_threads_to_run_iter_type iie = th_lst__.end();
+ for(;ii != iie;++ii){
+ Thread_entry* pe = *ii;
+ sprintf(a,thread_in_launched_list,pe->thread_fnct_name__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+ }
+
+ yacco2::lrclog << " List of potential accept parse Tes" << __FILE__ << __LINE__<< std::endl;
+ KCHARP no_of_accept_tokens_in_queue = " no of accept tokens in queue: %i";
+ sprintf(a,no_of_accept_tokens_in_queue,th_accepting_cnt__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+
+ KCHARP accept_queue_tokens = " - id: %s, token position: %i";
+ for(;i<=ie;++i){
+ sprintf(a,accept_queue_tokens
+ ,pp_accept_queue__[i].accept_token__->id__
+ ,pp_accept_queue__[i].accept_token_pos__);
+ yacco2::lrclog << a << FILE_LINE << std::endl;
+ }
+ @<release trace mu@>;
+@.Err No selected accept parse T n...@>
+ KCHARP msg =
+ "No selected accept parse T no of items: %i \n";
+ sprintf(a,msg,th_accepting_cnt__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+
+
+@*1 Lets parse do u?.
+@*2 Common parsing code.
+@*3 Clean up aborted parallel parse and exit erred.
+@<clean up aborted parallel parse and exit erred@>=
+ clean_up();
+ return Parser::erred;
+
+@*3 Exit as paralleled.\fbreak
+The passed back token co-ordinates are the token, position in the token stream,
+and the lookahead token and its position in the token stream.
+This is lodged in |arbitrated_token__| taken from the |accept_queue__|.
+The accepted token is determined by the arbitrator.
+Why the 2 token co-ordinates?
+The returned terminal is a digested statement of one or more consumed tokens
+in the token stream. Its token position is usually the first terminal passed for the
+parallel parsing: The position used
+the stamp the returned token can be anywhere within the position
+bounds of the just consummed tokens.
+The lookahead co-ordinates is the current token for future use.
+It has the same meaning as the lookahead set used by a reduce operation.
+@<clean up and exit as paralleled@>=
+ clean_up();
+ return Parser::paralleled;
+
+@*3 Wait for parallelism response if required.
+@<wait for parallelism response if required@>=
+ if(how_thread_called == CALLED_AS_THREAD){
+ wait_for_event();
+ }
+
+@*3 Extract accept parse's token |Caccept_parse|.\fbreak
+It extracts the arbitrated accept parse's token,
+and zeroes out its presence from the accept queue.
+This protects against the accept parse cleanup process deleting it
+as it dutifully erases all potential accept tokens in its queue.
+@<remove accepted token reference from |Caccept_parse| and delete |Caccept_parse|@>=
+ arbitrated_token__->accept_token__ = 0;
+
+@*3 Dispatch on parallel result.
+@<dispatch on parallel result@>=
+if(th_accepting_cnt__ != 0) goto parallelism_successful;
+else goto parallelism_unsuccessful;
+
+@*3 Re-align token stream to la boundry.
+@<re-align token stream to la boundry@>=
+ override_current_token(*arbitrated_token__->la_token__,arbitrated_token__->la_token_pos__);
+
+@*3 Re-align current token stream to accept token co-ordinates.
+@<re-align current token stream to accept token co-ordinates@>=
+ override_current_token(*arbitrated_token__->accept_token__
+ ,arbitrated_token__->accept_token_pos__);
+
+@*3 Allocate T id to search with.
+@<allocate T id to search with@>=
+yacco2::USINT id_of_T = current_token__->enumerated_id__;
+
+
+@*3 Startup those threads. On your mark, get set, ...
+@<startup those threads@>=
+ bool how_thread_called = start_threads();
+
+@*3 Clean up parallelism scribbles: |clean_up|.\fbreak
+Sanitize for another round of parallel parses.
+Its variables are re-initialized, and potential accept messages deleted from the queue.
+ It is rare that there is many accept messages in the queue.
+But when it happens, arbitration zeroed out the winner from the list leaving
+the balance of messages to be flushed out.
+The winning message is handed off to the requesting grammar to digest.
+|no_competing_pp_ths__| is not cleared as it's a
+ read-only variable set by the grammar requesting parallelism.
+@<accrue yacco2 code@>+=
+void
+yacco2::
+Parser::
+clean_up(){
+ if(th_accepting_cnt__ > 1){ // delete losers
+ for(int x=1;x<=th_accepting_cnt__;++x){
+ if(x == pp_accept_queue_idx__) continue;
+ if(pp_accept_queue__[x].accept_token__->auto_delete() == YES){
+ delete pp_accept_queue__[x].accept_token__;
+ }
+ pp_accept_queue__[x].initialize_it();
+ }
+ }
+ th_active_cnt__ = 0;
+ th_accepting_cnt__ = 0;
+ pp_accept_queue_idx__ = 0;
+}
+
+@*2 Chained procedure call parsing: |chained_proc_call_parsing|.\fbreak
+Procedure call parsing's logic:\fbreak
+\ptindent{1) if \TRAshift is present in the state.}
+This is a subrule expression that links the prefix symbol
+ to an explicit procedure call.
+Its a top-down attitude to parsing with the efficiency of a procedure call.
+Though thread calls are neat they have their runtime inefficiences
+caused by their launching requirements: registers setup, address paging domains etc.
+ Until
+thread calls become hardwire-support equivalent in procedure call speed
+this allows one to fiddle. See |pass3.lex| grammar
+dealing with \o2's include file expression.
+
+@*4 Dispatch on proc call result.
+@<dispatch on proc call result@>=
+if(result == th_accepting_cnt__ != 0) goto proc_call_successful;
+else goto proc_call_unsuccessful;
+
+@*4 Shift \TRAshift onto parse stack.
+@<shift proc call operator on to pp's parsing stack@>=
+ top_stack_record()->set_symbol(NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__);
+ State* Goto_state = S.proc_call_shift__->goto__;
+ @<|add_to_stack|@>;
+ //<Trace TH the parse stack configuration>;
+
+@*3 |chained_proc_call_parsing|.
+@<accrue yacco2 code@>=
+yacco2::
+THR_result
+yacco2::
+Parser::
+chained_proc_call_parsing(yacco2::State& S){
+ THR_result result = start_procedure_call(S);
+@<Trace TH request thread received message from parallel thread@>;
+@<dispatch on proc call result@>;
+ proc_call_successful:@/
+{
+ @<shift proc call operator on to pp's parsing stack@>;
+ @<re-align current token stream to accept token co-ordinates@>;
+ @<Trace TH accepted token info@>;
+ proc_call_shift(*arbitrated_token__->accept_token__);
+ @<re-align token stream to la boundry@>;
+ @<Trace TH re-aligned token stream la boundry info@>;
+ @<remove accepted token reference...@>;
+ clean_up();
+ return Parser::paralleled;
+}
+ proc_call_unsuccessful:@/
+ @<clean up aborted parallel parse and exit erred@>;
+}
+
+@*2 Start parallel parsing: |start_parallel_parsing|.\fbreak
+ start parallel parsing's logic:\fbreak
+ \ptindent{1) determine by first set evalution if there are threads. exit if none.}
+ \ptindent{2) parser spawns the parallel parser threads and waits for results}
+ \ptindent{3) dispatching of the Arbitrator. Arbitration is local per state}
+
+@*4 Shift $(\vert\vert\vert)$ onto parse stack.
+@<shift parallel operator on to pp's parsing stack@>=
+ top_stack_record()->set_symbol(NS_yacco2_k_symbols::PTR_LR1_parallel_operator__);
+ Goto_state = S.parallel_shift__->goto__;
+ @<|add_to_stack|@>;
+ //<Trace TH the parse stack configuration>;
+
+@*3 |start_parallel_parsing|.
+@<accrue yacco2 code@>=
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+start_parallel_parsing(yacco2::State& S){
+yacco2::State* Goto_state;
+@<allocate T id to search with@>;
+@<determine if there are threads to run@>;
+@<are there threads to run?. no exit with no-thds-to-run result@>;
+@<startup those threads@>;
+wait_for_response:@/
+@<wait for parallelism response if required@>;
+@<Trace TH request thread received message from parallel thread@>;
+@<dispatch on parallel result@>;
+ parallelism_successful:@/
+ @<shift parallel operator...@>;
+ if(S.state_s_thread_tbl__->ar_fnct_ptr__ == 0){
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+ }else{
+ call_arbitrator(S.state_s_thread_tbl__->ar_fnct_ptr__);
+ }
+ //Validate accept message;
+ @<re-align current token stream to accept token co-ordinates@>;
+ @<Trace TH accepted token info@>;
+ parallel_shift(*arbitrated_token__->accept_token__);
+ @<re-align token stream to la boundry@>;
+ @<Trace TH re-aligned token stream la boundry info@>;
+ @<remove accepted token reference...@>;
+ clean_up();
+ return Parser::paralleled;
+ parallelism_unsuccessful:@/
+ @<clean up aborted parallel parse and exit erred@>;
+}
+
+@*2 |start_manually_parallel_parsing|.\fbreak
+This facility allows one to do parallel parsing from
+syntax directed code within a grammar.
+For example, one might test a returned terminal whose
+lookahead expressions need parsing.
+This is a context sensitive way to process text dynamically.
+The Yacco2 compiler uses this approach to process its
+directives' syntax directed code.
+Here is a code sample using it.\fbreak
+\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/threadmanualcall.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+@<accrue yacco2 code@>=
+Parser::parse_result
+yacco2::
+Parser::
+start_manually_parallel_parsing@/
+(yacco2::USINT Thread_id){@/
+ bool how_thread_called = spawn_thread_manually(Thread_id);
+@<wait for parallelism response if required@>;
+
+ @<Trace TH request thread received message...@>;
+@<dispatch on parallel result@>;
+parallelism_successful:{@/
+ if(yacco2::PTR_AR_for_manual_thread_spawning == 0){
+ arbitrated_token__ = &pp_accept_queue__[1];
+ pp_accept_queue_idx__ = 1;
+ }else{
+ call_arbitrator(yacco2::PTR_AR_for_manual_thread_spawning);
+ }
+ //Validate accept message;
+ @<Trace TH accepted token info@>;
+ @<clean up and exit as paralleled@>;
+ }
+parallelism_unsuccessful:@/
+ @<clean up aborted parallel parse and exit erred@>;
+}
+
diff --git a/web/yacco2/library/pms.w b/web/yacco2/library/pms.w
new file mode 100644
index 0000000000..4c09f29d1f
--- /dev/null
+++ b/web/yacco2/library/pms.w
@@ -0,0 +1,38 @@
+@q file: pms.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** PMS --- Post meta syndrome.\fbreak
+Post thoughts of improvement before using Linker.
+
+@ What happens when there are no threads to produce?.\fbreak
+Deal with iT?
+Sorry for the yelling...haha
+This is a legitimate situation.\fbreak
+
+So |THDS_STABLE__| and |T_ARRAY_HAVING_THD_IDS__| have NULL pointers emitted.
+This situation does not have to be checked for in Yacco2 parse library
+as there are no threads in the local state configuration to be tried.
+Yacco2 parsing checks to see if the \PARshift{} symbol is present in the current
+state configuration before trying to parallel parse.\fbreak
+22 April 2005
+
+@ Passover on code.\fbreak
+Spring cleaning so put in those last gasp constraints. I know
+\CPLUSPLUS/'s containers could be used to generate bit maps but...
+Enough of my rantings and mistrust on others software.
+So there's a hardcoded number of threads supported.
+The number of threads supported is |SPECULATIVE_NO_BIT_WORDS| *
+|BITS_PER_WORD|. Under current definitions this works out to 20*32 threads
+that can be gened. A bit of overkill but u never know who's out there.
+Now u can rant at me if this limit is surpassed. I would really
+like to know what u're doing to exceed this speed bump:
+Could be an interesting conversation. \fbreak
+24 Apr. 2005
+
+@ Add test suites.\fbreak
+25 Apr. 2005
+
diff --git a/web/yacco2/library/rc.w b/web/yacco2/library/rc.w
new file mode 100644
index 0000000000..046bdc663d
--- /dev/null
+++ b/web/yacco2/library/rc.w
@@ -0,0 +1,133 @@
+@q file: rc.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q output wrc.cpp@>
+@** Raw character mapper.
+Maps an 8 bit character into the raw character object.
+This is the raw character part of a grammar's terminal alphabet.
+To provide some performance, a static pool of objects is used instead of trashing
+malloc memory manager.
+Though it's a fixed size defined by |SIZE_RC_MALLOC| an overflow test
+at runtime throws an error if the memory pool is exhausted.
+All the raw character objects are of same size.
+Their differences comes in their genes: blue eyes,
+|id__|, |enumerated_id__|, and delete attributes.
+It is the same dog with the same spots of color
+being called by a different nickname.
+To improve startup performance where the array was being
+initialized to the default ctor layout that actually was useless,
+|CAbs_lr1_sym|'s default ctor has been eliminated.
+Now a raw character pool is used with casting to the newly minted |CAbs_lr1_sym|.
+
+Output is directed to |wrc.cpp|.
+@<Struct...@>+=
+struct rc_map{
+ enum rc_size{rc_size_=ASCII_8_BIT+1};
+ yacco2::CAbs_lr1_sym*
+ map_char_to_raw_char_sym(yacco2::UINT Char,yacco2::UINT File,yacco2::UINT Pos
+ ,UINT* Line_no,UINT* Pos_in_line);
+static char array_chr_sym__[SIZE_RC_MALLOC];
+static INT current_rc_malloc_sub__;
+static yacco2::KCHARP chr_literal__[ASCII_8_BIT];
+};
+@*2 Set up Raw characters malloc variables.
+@<accrue rc code@>= // acrue rc code
+int yacco2::rc_map::current_rc_malloc_sub__(-1);
+char yacco2::rc_map::array_chr_sym__[SIZE_RC_MALLOC];
+yacco2::KCHARP yacco2::rc_map::chr_literal__[ASCII_8_BIT]=
+{"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x09","\x0a"
+,"\x0b","\x0c","\x0d","\x0e","\x0f"
+,"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1a"
+,"\x1b","\x1c","\x1d","\x1e","\x1f"
+,"\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27","\x28","\x29","\x2a"
+,"\x2b","\x2c","\x2d","\x2e","\x2f"
+,"\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37","\x38","\x39","\x3a"
+,"\x3b","\x3c","\x3d","\x3e","\x3f"
+,"\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47","\x48","\x49","\x4a"
+,"\x4b","\x4c","\x4d","\x4e","\x4f"
+,"\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57","\x58","\x59","\x5a"
+,"\x5b","\x5c","\x5d","\x5e","\x5f"
+,"\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67","\x68","\x69","\x6a"
+,"\x6b","\x6c","\x6d","\x6e","\x6f"
+,"\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77","\x78","\x79","\x7a"
+,"\x7b","\x7c","\x7d","\x7e","\x7f"
+,"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8a"
+,"\x8b","\x8c","\x8d","\x8e","\x8f"
+,"\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9a"
+,"\x9b","\x9c","\x9d","\x9e","\x9f"
+,"\xa0","\xa1","\xa2","\xa3","\xa4","\xa5","\xa6","\xa7","\xa8","\xa9","\xaa"
+,"\xab","\xac","\xad","\xae","\xaf"
+,"\xb0","\xb1","\xb2","\xb3","\xb4","\xb5","\xb6","\xb7","\xb8","\xb9","\xba"
+,"\xbb","\xbc","\xbd","\xbe","\xbf"
+,"\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca"
+,"\xcb","\xcc","\xcd","\xce","\xcf"
+,"\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6","\xd7","\xd8","\xd9","\xda"
+,"\xdb","\xdc","\xdd","\xde","\xdf"
+,"\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea"
+,"\xeb","\xec","\xed","\xee","\xef"
+,"\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf7","\xf8","\xf9","\xfa"
+,"\xfb","\xfc","\xfd","\xfe","\xff"
+};
+
+@*2 Output rc code.
+@(wrc.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<irc@>;
+@<ilrk@>;
+using namespace NS_yacco2_characters;
+@<accrue rc code@>;
+
+@*2 Map raw character to character symbol.\fbreak
+Place line detection by line feed.
+Call of this method requires the line number and character position.
+It determines the line boundary and augments their values.
+@<accrue rc code@>+=
+yacco2::CAbs_lr1_sym*
+yacco2::rc_map::
+map_char_to_raw_char_sym@/
+(yacco2::UINT Char,yacco2::UINT File_no,yacco2::UINT Pos,UINT* Line_no,UINT* Pos_in_line){
+map_char_to_symbol:@/
+@<Validate File no...@>;
+ if(Char >= rc_size_){
+ @<Error bad character mapping@>;
+ return 0;
+ }
+ @<Trace raw characters@>;
+ if(Char == EOF_CHAR_SUB){
+ yacco2::PTR_LR1_eog__->tok_co_ords__.external_file_id__= File_no;
+ yacco2::PTR_LR1_eog__->tok_co_ords__.rc_pos__= Pos;
+ yacco2::PTR_LR1_eog__->set_line_no_and_pos_in_line(*Line_no,1);
+ return yacco2::PTR_LR1_eog__;
+ }
+ @<malloc raw characters from static...@>;
+ ++(*Pos_in_line);
+ sym->set_line_no_and_pos_in_line(*Line_no,*Pos_in_line);
+ if(Char == LINE_FEED){// set for next char
+ ++(*Line_no);
+ *Pos_in_line = START_CHAR_POS;
+ }
+ return sym;
+}
+
+@*2 Malloc raw characters from static pool instead of newing of Malloc.\fbreak
+Note: the raw character pool used to eliminate the default
+|CAbs_lr1_sym| ctor initialization of the array at start up time.
+Now it's just a raw cess pool waiting to evolve.
+@<malloc raw characters from static pool instead of newing@>=
+++rc_map::current_rc_malloc_sub__;
+long rc_sub = current_rc_malloc_sub__*SIZE_CAbs_lr1_sym;
+if(rc_sub > SIZE_RC_MALLOC){
+ @<Error no more raw character storage@>;
+}
+CAbs_lr1_sym* sym = (CAbs_lr1_sym*)&rc_map::array_chr_sym__[rc_sub];
+sym->id__ = rc_map::chr_literal__[Char];
+sym->enumerated_id__ = Char + START_OF_RC_ENUM;
+sym->tok_co_ords__.external_file_id__ = File_no;
+sym->tok_co_ords__.rc_pos__ = Pos;
+
+@<|create_set_entry for Rc|@>; \ No newline at end of file
diff --git a/web/yacco2/library/runtime_env.w b/web/yacco2/library/runtime_env.w
new file mode 100644
index 0000000000..072fc6efea
--- /dev/null
+++ b/web/yacco2/library/runtime_env.w
@@ -0,0 +1,262 @@
+@q file: runtime_env.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Yacco2 global variables.\fbreak
+A hodge-podge of entities and procedures supporting tracing, files processed with
+ recursion support,
+threading tables and their first sets,
+ low-level character mapping, and low level mutual exclusion controlling
+ access to
+threads, tracing, and symbol table management.
+
+Access control: Bouncer / doorman.\fbreak
+By their name |TRACE_MU|, |MUTEX TH_TBL_MU|, and |MUTEX SYM_TBL_MU|
+are mutexes for crowd control for tracing, thread table management,
+and symbol table access.
+|THDS_STABLE__| and |THDS_FSET_BY_T__| are data structures generated by
+Yacco2's Linker that get resolved to the specific use of this library.
+They are dangling references.
+
+File management:\fbreak
+|FILE_TBL__| is a dictionary of file names that
+have been opened during the compile process.
+It's key is the file number component to the symbol's GPS in the source file.
+|FILE_CNT__| is the current file number being processed.
+It starts from 0 due to \CPLUSPLUS/'s vector requirement used by |FILE_TBL__|.
+The |tok_can| template containers use these variables: ie,
+raw character symbol processing.
+|STK_FILE_NOS__| is a stack of nested |FILE_CNT__| file numbers
+used to re-establish processing of the file following its include statement.
+
+@<Type...@>+=
+typedef std::vector<std::string> gbl_file_map_type;
+
+@*2 Global variables.
+@<Global variables@>+=
+extern std::list<std::string> O2_LOGICALS__;
+extern std::ofstream lrclog;
+extern std::ofstream lrerrors;
+extern yacco2::KCHARP Lr1_VERSION;
+extern yacco2::KCHARP O2linker_VERSION;
+extern yacco2::MUTEX TRACE_MU;
+extern yacco2::MUTEX TH_TBL_MU;
+extern yacco2::MUTEX SYM_TBL_MU;
+extern yacco2::MUTEX TOKEN_MU;
+extern yacco2::gbl_file_map_type FILE_TBL__;
+extern yacco2::UINT FILE_CNT__;
+extern std::vector<yacco2::UINT> STK_FILE_NOS__;
+struct rc_map;
+extern yacco2::rc_map RC__;
+
+
+@ |LRK_LA_EOLR_SET|. \fbreak
+Used by |find_reduce_entry| for meta termials lookahed set.
+Meta-terminals are 8 elements that start off the enumeration scheme.
+ Therefore they all fit within one partition.
+\QUEshift, eog, and \PARshift{} are left out of the lookahead set
+leaving eolr, \INVshift, \ALLshift,\PROCshift, and \REDshift.
+
+@<Global variables@>+=
+extern yacco2::Set_entry LRK_LA_EOLR_SET;
+
+@ |LRK_LA_QUE_SET| for error enforcement. \fbreak
+Used by |find_questionable_sym_in_reduce_lookahead|
+for forced reduce to handle error detection.
+It forces the reducing subrule to reduce cuz the
+\QUEshift{} symbol in in its follow set.
+That is the shifted into parse state for the recuded rule
+contains the \QUEshift{} symbol used for error catching.
+@<Global variables@>+=
+extern yacco2::Set_entry LRK_LA_QUE_SET;
+
+@*2 Global routines.
+@<External rtns and variables@>+=
+extern void Delete_tokens(yacco2::TOKEN_GAGGLE& Tks,bool Do_delete=OFF);
+extern void Clear_yacco2_opened_files_dictionary();
+
+
+@*2 Global variables implementations.
+@<accrue yacco2 code@>=
+std::list<std::string> yacco2::O2_LOGICALS__;
+yacco2::gbl_file_map_type yacco2::FILE_TBL__;
+std::vector<yacco2::UINT> yacco2::STK_FILE_NOS__;
+yacco2::UINT yacco2::FILE_CNT__(0);
+yacco2::rc_map yacco2::RC__;
+yacco2::Type_pp_fnct_ptr yacco2::PTR_AR_for_manual_thread_spawning(0);
+// split lines: cuz Apple's latest compiler bug
+// No matching literal operator for call to 'operator"' date macro
+// with arguments of types 'const char*' and 'unsigned long', and no matching literal operator template
+//
+yacco2::KCHARP
+yacco2::Lr1_VERSION = "O2 version: 1.0 Distribution Date: "@/
+ __DATE__ "\n";
+yacco2::KCHARP
+yacco2::O2linker_VERSION = "O2linker version: 1.0 Distribution Date: "@/
+__DATE__ "\n";
+
+yacco2::MUTEX yacco2::TOKEN_MU;
+yacco2::MUTEX yacco2::TRACE_MU;
+yacco2::MUTEX yacco2::TH_TBL_MU;
+yacco2::MUTEX yacco2::SYM_TBL_MU;
+std::ofstream yacco2::lrclog("1lrtracings.log");
+std::ofstream yacco2::lrerrors("1lrerrors.log");
+yacco2::Set_entry
+yacco2::LRK_LA_EOLR_SET
+ = {0,0xf4};// eolr, \REDshift, \INVshift, \ALLshift, and \PROCshift
+yacco2::Set_entry
+yacco2::LRK_LA_QUE_SET
+ = {0,0x01};// elem 1 is \QUEshift so |2^0|
+
+@*2 Runtime errors.\fbreak
+It supplies all the error objects that get thrown
+within yacco2's environment.
+Presently, my design is crude: no design but a list of error events.
+
+@<Struct...@>+=
+struct Source_info{
+ Source_info(yacco2::KCHARP File,yacco2::UINT Line);
+ void w_info();
+ yacco2::KCHARP file__;
+ yacco2::INT line__;
+};
+struct Yacco2_faulty_precondition:Source_info{
+ Yacco2_faulty_precondition(yacco2::KCHARP Message
+ ,yacco2::KCHARP File = __FILE__
+ ,yacco2::UINT Line = __LINE__);
+};
+
+struct Yacco2_faulty_postcondition:Source_info{
+ Yacco2_faulty_postcondition(yacco2::KCHARP Message
+ ,yacco2::KCHARP File = __FILE__
+ ,yacco2::UINT Line = __LINE__);
+};
+
+@*2 Runtime error messages implementations.
+@<accrue yacco2 code@>=
+ yacco2::
+ Source_info::@/
+ Source_info(yacco2::KCHARP File,yacco2::UINT Line)
+ :file__(File)
+ ,line__(Line){
+ w_info();
+ }
+
+ void
+ yacco2::
+ Source_info::@/
+ w_info(){
+ yacco2::lrclog
+ << " Version: " << yacco2::Lr1_VERSION
+ << " thrown from source file: " << file__
+ << " line: " << line__
+ << __FILE__ << __LINE__<< std::endl;
+ std::cout
+ << " Version: " << yacco2::Lr1_VERSION
+ << " thrown from source file: " << file__
+ << " line: " << line__
+ << __FILE__ << __LINE__<< std::endl;
+ }
+
+ yacco2::
+ Yacco2_faulty_precondition::@/
+ Yacco2_faulty_precondition(yacco2::KCHARP Message
+ ,yacco2::KCHARP File
+ ,yacco2::UINT Line)@/
+ :Source_info(File,Line){
+ yacco2::lrclog << "Yacco2_faulty_precondition: " << Message << ' ' << __FILE__ << ": " << __LINE__<< std::endl;
+ std::cout << "Yacco2_faulty_precondition: " << Message << std::endl;
+ }
+
+ yacco2::
+ Yacco2_faulty_postcondition::@/
+ Yacco2_faulty_postcondition(yacco2::KCHARP Message
+ ,yacco2::KCHARP File
+ ,yacco2::UINT Line)@/
+ :Source_info(File,Line){
+ yacco2::lrclog << "Yacco2_faulty_postcondition: " << Message << ' '<< __FILE__ << ": " << __LINE__<< std::endl;
+ std::cout << "Yacco2_faulty_postcondition: " << Message << std::endl;
+ }
+
+
+@*2 Global garbage sweeper.\fbreak
+Simple container whose contents are deleted.
+As one parses, somewhere the newly minted tokens needed to be deleted.
+The container maintains a one-to-one reference to the symbol which gets
+deleted by this routine.
+Due to the ``lr k symbols'' being globally defined in global space rather
+than being their creation by the new operator,
+there is protective code to prevent their deletion.
+
+Depending on how the ``Raw Characters'' are built, they could also be bypassed.
+For now, the ``global garbage'' sweeper is not very good: a map template just is down
+right slow. So I must revisit my thought and come up with a better data structure to
+use.
+
+I bypass this routine as the cost of building
+the thread index is TOOOOOooo slow and occassionally buggy from
+the template implementation.
+@^MSN bug pranks.@>
+@<Type...@>+=
+typedef std::set < yacco2::CAbs_lr1_sym* > set_of_objs_type;
+typedef set_of_objs_type::iterator set_of_objs_iter_type;
+
+@*2 |Delete_tokens|.
+@<accrue yacco2 code@>=
+extern
+void yacco2::Delete_tokens(yacco2::TOKEN_GAGGLE& Tks,bool Do_delete){@/
+return;
+using namespace NS_yacco2_k_symbols;
+static yacco2::set_of_objs_type deleted_syms;
+static yacco2::set_of_objs_type dont_delete_syms;
+static bool onetime(OFF);
+if(onetime == OFF){
+ onetime = ON;
+ dont_delete_syms.insert(PTR_LR1_eolr__);
+ dont_delete_syms.insert(PTR_LR1_questionable_shift_operator__);
+ dont_delete_syms.insert(PTR_LR1_eog__);
+ dont_delete_syms.insert(PTR_LR1_parallel_operator__);
+ dont_delete_syms.insert(PTR_LR1_invisible_shift_operator__);
+ dont_delete_syms.insert(PTR_LR1_all_shift_operator__);
+ dont_delete_syms.insert(PTR_LR1_fset_transience_operator__);
+}
+ if(Do_delete == ON){
+ set_of_objs_iter_type k = deleted_syms.begin();
+ set_of_objs_iter_type ke = deleted_syms.end();
+ for(;k!=ke;++k){
+ CAbs_lr1_sym* sym = *k;
+ ///|delete sym;|
+ }
+ return;
+ }
+ TOKEN_GAGGLE_ITER i = Tks.begin();
+ TOKEN_GAGGLE_ITER ie = Tks.end();
+ for(;i != ie;++i){
+ yacco2::CAbs_lr1_sym* sym = *i;
+ yacco2::set_of_objs_iter_type j;
+ j = deleted_syms.find(sym);
+ if(j != deleted_syms.end()) continue;//already deleted
+ j = dont_delete_syms.find(sym);
+ if(j != dont_delete_syms.end()) continue;
+ deleted_syms.insert(sym);
+ }
+}
+
+@*2 |Clear_yacco2_opened_files_dictionary|.\fbreak
+Allows one to have multiple parse sessions.
+This clears the previous parse attempt.
+Give me an example of why u need this?
+Consider a XML language recognizer that is continuously being called to process a
+say Soap session.
+Each session is a new parsing bout.
+@<accrue yacco2 code@>=
+extern
+void yacco2::Clear_yacco2_opened_files_dictionary(){@/
+ yacco2::FILE_TBL__.clear();
+ yacco2::STK_FILE_NOS__.clear();
+ yacco2::FILE_CNT__ = 0;
+
+}
diff --git a/web/yacco2/library/sampleoutput.w b/web/yacco2/library/sampleoutput.w
new file mode 100644
index 0000000000..f00df212ae
--- /dev/null
+++ b/web/yacco2/library/sampleoutput.w
@@ -0,0 +1,23 @@
+@q file: sampleoutput.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Sample output from Linker.\fbreak
+A sampling from Yacco2's grammars.
+Have a look in the source code below where the following
+external variables are defined at line references 41, 43, 44, 72, and 193:\fbreak
+\ptindent{|yacco2::TOTAL_NO_BIT_WORDS__| }
+\ptindent{|yacco2::BIT_MAPS_FOR_SALE__| }
+\ptindent{|yacco2::BIT_MAP_IDX__| }
+\ptindent{|yacco2::THDS_STABLE__| }
+\ptindent{|yacco2::T_ARRAY_HAVING_THD_IDS__| }
+
+Yacoo2's parse library references them and they get resolved by the language linker.
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/linker/sampleoutput.txt"}
+
+@*2 Sample 2: No threads outputted just a stand alone grammar.
+\listing{"/usr/local/yacco2/linker/sampleoutput2.txt"}
diff --git a/web/yacco2/library/set.w b/web/yacco2/library/set.w
new file mode 100644
index 0000000000..78f1a42d02
--- /dev/null
+++ b/web/yacco2/library/set.w
@@ -0,0 +1,123 @@
+@q file: set.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q output wset.cpp@>
+@** Set handling. This is an interesting section.\fbreak
+ The original
+Yacco2 generated code to create each thread's tables at startup time by \CPLUSPLUS/ templates.
+Well the 10 megabyte gorilla thumped its chest.
+By use of the marvelous book ``Efficient \CPLUSPLUS/'' by Bulka and Mayhew,
+Yacco2 became a diet marvel. Have you heard any testimonials?
+No, well I'm now one. Go groan and sweat, your software will thank you for it and so will its
+life span.
+
+As lookahead sets are rather sparse, to make set processing reasonably efficient,
+the following approach was implemented.
+The out-of-the-box binary search function is used to search a set.
+To minimize set size, the range of enumerated elements is divided up into
+8 elements per partition where the remainder is the specific element.
+
+Now why an 8 element partition?
+As Yacco2 currently uses 8 bit ASCII encoding and the density of the sets are sparse
+and my machine has 8 bits per byte, I
+felt that this was a reasonable compromise in the age of Aquarius.
+If the sets were more dense, then the
+number of elements per partition could be 16 or greater.
+As always, there is a compromise between space and speed.
+It's upto the person porting the software to decide.
+Hash tables were considered but I decided that space would be
+too wasteful.
+
+Thought: Is there a dynamic hash faclity that
+rivals the set space but beats it in accessing speed?
+Other thoughts: use of complement sets if set size too big.
+
+Elements are ordered in ascending sequence
+ such that the set becomes a binary array of partitions.
+The binary functor takes two set structures: one is the key that
+is being searched within the set table, and the set table.
+To shrink the set size, |LR1_Eolr| is a special element used to signify
+`use all terminals defined including self'. It's grammar tag is ``eolr''.
+
+Output is directed to |wset.cpp|.
+@d SET_ELEM_NO_BITS 8
+@(wset.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<accrue set code@>;
+
+@ Accrue set code.
+@<accrue set code@>= // acrue set code
+
+@ Some set types used in constructing search sets.
+@<Type def...@>=
+typedef std::map<yacco2::USINT,yacco2::USINT> yacco2_set_type;
+typedef yacco2_set_type::iterator yacco2_set_iter_type;
+
+@*2 Structure of a set.\fbreak
+ Current implementation uses 2 bytes of 8 bit size.
+The first byte is the partition number with a range of 0..255.
+The 2nd byte is the elements where x in ${2^x}$ indicates its position within
+the byte. An element's position within the byte is
+its remainder of modulo |SET_ELEM_NO_BITS|.
+This set structure supports 2048 elements --- 256 partitions by 8 elements.
+If there are more terminals to be supported, then there is
+2 ways to increase the supported number of terminals: increase
+the partition size from a byte to an integer
+or expand the size of the number of elements per partition.
+
+@<Structure...@>=
+struct Set_entry {// set structure: byte no of set pairs, |partition,set| pair(s)
+ yacco2::UCHAR partition__;// whole no
+ yacco2::UCHAR elements__;// 7..0 in bit order due to remainder: 0 = 1 while 7 = 128 value
+};
+struct Set_tbl {
+ yacco2::UCHAR no_entries__;
+ yacco2::Set_entry first_entry__[1];
+};@/
+
+@*2 Set element compare functor.\fbreak
+This is just your basic binary search functor whose address is passed
+to the binary search routine.
+The only interesting part is c's bitwise logical `and' to determine
+if the element is in the 2nd byte of the structure.
+If the element is not found, it forces the search to continue down a cul-du-sac
+by returning a false `less than' comparison.
+
+Now i roll my own bsearch to speed things up.
+The compare functor is just too expensive in run time so out damn spot.
+@<External rtns and variables@>+=
+extern void create_set_entry(yacco2::USINT Enum_id,yacco2::Set_entry& Set);
+
+@*2 From a terminal's enumeration create a set's key for searching.\fbreak
+This routine maps an enumeration into a set's co-ordinates.
+@<accrue set code@>+=
+extern void
+yacco2::create_set_entry(yacco2::USINT Enum_id,yacco2::Set_entry& Set){
+ INT R = Enum_id % SET_ELEM_NO_BITS;
+ Set.partition__ = Enum_id / SET_ELEM_NO_BITS;
+ Set.elements__ = 1 << R;
+}
+
+@ |create_set_entry|.
+@<|create_set_entry|@>=
+ INT R = Enum_id % SET_ELEM_NO_BITS;
+ la_set.partition__ = Enum_id / SET_ELEM_NO_BITS;
+ la_set.elements__ = 1 << R;
+
+@ |create_set_entry for RC|.
+@<|create_set_entry for Rc|@>=
+ INT R = sym->enumerated_id__ % SET_ELEM_NO_BITS;
+ sym->tok_co_ords__.set_entry__.partition__
+ = sym->enumerated_id__ / SET_ELEM_NO_BITS;
+ sym->tok_co_ords__.set_entry__.elements__ = 1 << R;
+
+@ |create_set_entry for CAbs_lr1_sym|.
+@<|create_set_entry for CAbs_lr1_sym|@>=
+ INT R = Enum_id % SET_ELEM_NO_BITS;
+ tok_co_ords__.set_entry__.partition__ = Enum_id / SET_ELEM_NO_BITS;
+ tok_co_ords__.set_entry__.elements__ = 1 << R;
diff --git a/web/yacco2/library/std_includes.h b/web/yacco2/library/std_includes.h
new file mode 100644
index 0000000000..5c41a5f291
--- /dev/null
+++ b/web/yacco2/library/std_includes.h
@@ -0,0 +1,27 @@
+//
+// file: std_includes.h
+//
+#ifndef __std_includes_h__
+#define __std_includes_h__
+// a HP hack: __USE_STD_IOSTREAM
+#ifndef __USE_STD_IOSTREAM
+#define __USE_STD_IOSTREAM
+#endif
+#include <unistd.h>
+#include <iosfwd>
+#include <new>
+#include <limits>
+#include <iomanip>
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include <algorithm>
+#include <functional>
+#include <iterator>
+#include <map>
+#include <set>
+#include <list>
+//#include <stack>
+#include <string>
+#include <vector>
+#endif
diff --git a/web/yacco2/library/structures.w b/web/yacco2/library/structures.w
new file mode 100644
index 0000000000..28241cb583
--- /dev/null
+++ b/web/yacco2/library/structures.w
@@ -0,0 +1,76 @@
+@q file: structures.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Structure and Rule Recycling Optimization.\fbreak
+To improve performance due to the birth-run-delete cyle of grammar rules
+on the parse stack,
+the following optimization is used:
+Stable of rule's symbol when created for recycling purposes.
+2 concerns must be attended to:\fbreak
+\ptindent{1) the parse stack needs the Rule\_s\_reuse\_entry ptr of the current rule}
+\ptindent{2) due to recursion, the recycle table per rule is sequentially searched}
+Please see {\bf |rules_use_cnt|} grammar for a thorough discussion on how the rulle count is
+calculated for recycling.
+\fbreak
+\fbreak
+Initially an array per specific grammar rule was generated.
+It had speed but would have been kludgey to handle overflow on the
+number of rules for reuse.
+Here is a note on the array [1] definition. The Sun compiler doesn't
+like the [] definition being open-ended.
+So I fake it.
+Each rule will be specifically defined within its namespace.
+But, \Yacco2{} is a general library of routines.
+So my search uses the entry count to protect against a table overrun situation.
+\fbreak
+\fbreak
+Take 2:\fbreak
+Though this approach is speedy when dealing with left recursion only,
+it did not have a saftey valve when the count was wrong: eg right recursion
+ or flawed algorithm on determining rule recursion count.
+So i changed it to a stack/double list combo.
+The ``in use'' list acts like a stack but its lhs/rhs reduction pair
+leaves the lhs as the top item placed in the ``in use'' queue
+before its rhs items are removed from the ``in use'' list.
+Why?
+The lhs rule comes from the reduction when the rhs's symbols are still
+sitting on the parse stack.
+That is, lhs rule is created first, placed in the ``in use'' list before
+the rhs's symbols are popped from the parse stack. If the
+popped symbol is a rule it gets recycled and placed back
+into the ``for use'' stack for another round of reuse.
+@<Structure defs@>+=
+struct Per_rule_s_reuse_table;
+struct reuse_rule_list;
+struct reuse_rule_list{
+ reuse_rule_list():younger_(0),older_(0),reuse_rule_entry_(0),per_rule_tbl_ptr_(0){};
+ reuse_rule_list* younger_;
+ reuse_rule_list* older_;
+ Rule_s_reuse_entry* reuse_rule_entry_;
+ Per_rule_s_reuse_table* per_rule_tbl_ptr_;
+};
+struct Rule_s_reuse_entry{
+ reuse_rule_list its_linked_list_;
+ CAbs_lr1_sym* rule_; // new rule symbol for recycling
+ Rule_s_reuse_entry():rule_(0){};
+ ~Rule_s_reuse_entry(){
+ if(rule_ == 0) return;
+ delete rule_;
+ };
+};
+
+struct Per_rule_s_reuse_table{
+ reuse_rule_list* in_use_list_;
+ reuse_rule_list* for_use_list_;
+ Per_rule_s_reuse_table():in_use_list_(0),for_use_list_(0){};
+};
+
+struct Fsm_rules_reuse_table{// grammar's stable of rules
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[1];
+};
+
diff --git a/web/yacco2/library/tblkup.w b/web/yacco2/library/tblkup.w
new file mode 100644
index 0000000000..989c8a47cd
--- /dev/null
+++ b/web/yacco2/library/tblkup.w
@@ -0,0 +1,36 @@
+@q file: tblkup.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Table lookup functor. Inheritance earns its keep.
+See ``Yacco2 - symbol table'' document as an example of use.
+@<Structure...@>+=
+template @=<typename Functor>@>
+struct functor2{
+ struct functor{};
+ void operator()(Functor* Func){Func->operator()();};
+};@/
+template @=<typename T>@>@/
+class tble_lkup : public std::unary_function@=<T,T>@>{
+public:@/
+ tble_lkup():lkup__(ON){};
+ ~tble_lkup(){};
+ virtual T operator()(T t)=0;
+ void turn_off_lkup(){
+ lkup__ = OFF;@/
+/// yacco2::lrclog << "TURN OFF TBLE LK" << std::endl;
+ };
+ void turn_on_lkup(){
+ lkup__ = ON;@/
+/// yacco2::lrclog << "TURN ON TBLE LK" << std::endl;
+ };
+ bool lkup(){return lkup__;};
+ bool lkup__;
+};
+
+@
+@<Structure...@>+=
+typedef tble_lkup<yacco2::CAbs_lr1_sym*> tble_lkup_type;@/
diff --git a/web/yacco2/library/testMakefile b/web/yacco2/library/testMakefile
new file mode 100644
index 0000000000..e5e3f2a32b
--- /dev/null
+++ b/web/yacco2/library/testMakefile
@@ -0,0 +1,28 @@
+# testMakefile
+O_dir = '/yacco2/library/'
+O_dir_grms = '/yacco2/library/grammars'
+CCC = CC
+CXX = CC
+O_libs = -I'/yacco2/library/grammars' -I'/yacco2/library'
+BASICOPTS = -fast -m64 -mt -lpthread #-fast -xtarget=opteron -xarch=amd64 -mt #-g0 #-xpg #-p #-a #-g
+#BASICOPTS = #-fast -m64 -m -lpthread #-fast -xtarget=opteron -xarch=amd64 -mt #-g0 #-xpg #-p #-a #-g
+CXXFLAGS = $(BASICOPTS) $(O2_libs)
+w_b1 = $(O2_dir)CAbs_lr1_sym.w $(O2_dir)bugs.w $(O2_dir)constants.w $(O2_dir)constraints.w $(O2_dir)enum.w $(O2_dir)fsm.w
+w_b2 = $(O2_dir)fsm_tbls.w $(O2_dir)gbl_defs.w $(O2_dir)intro.w $(O2_dir)macros.w $(O2_dir)notes.w $(O2_dir)parse_env.w $(O2_dir)parser.w
+w_b3 = $(O2_dir)pms.w $(O2_dir)rc.w $(O2_dir)runtime_env.w $(O2_dir)sampleoutput.w $(O2_dir)set.w $(O2_dir)structures.w
+w_b4 = $(O2_dir)tblkup.w $(O2_dir)testsuites.w $(O2_dir)thread.w $(O2_dir)tok_can.w $(O2_dir)tree.w $(O2_dir)wthread.w
+w_suffix_files = $(w_b1) $(w_b2) $(w_b3) $(w_b4)
+files_to_cc = wrc.cpp yacco2.cpp wtok_can.cpp wtree.cpp wthread.cpp wset.cpp
+all: wlibrary.w #$(files_to_cc)
+wlibrary.w:
+ cweave $(O2_dir)$@
+ ctangle -l +e $(O2_dir)$@
+ sh Makefile_Edit_cweb
+ pdftex wlibrary
+ rm wlibrary.idx
+ rm wlibrary.scn
+ rm wlibrary.toc
+ rm wlibrary.tex
+ rm wlibrary.log
+ rm texput.log
+ rm wlibrary.c
diff --git a/web/yacco2/library/testsuites.w b/web/yacco2/library/testsuites.w
new file mode 100644
index 0000000000..fb415e64e6
--- /dev/null
+++ b/web/yacco2/library/testsuites.w
@@ -0,0 +1,15 @@
+@q file: testsuites.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Test suites: Check out those flabby grammar muscles.\fbreak
+Exercise, exercise, excerise, perhaps to ... Linker's languages.
+Microsoft's batch facility is used to do the sweating.
+The test suites are inputted via the command line option on Linker.
+
+The batch file |linker_testsuite.bat| contains the all the test suites.
+Here are the test results with some editorial liberties:\fbreak
+\listing{"/usr/local/yacco2/linker/testsuiteoutput.txt"}
diff --git a/web/yacco2/library/thread.w b/web/yacco2/library/thread.w
new file mode 100644
index 0000000000..078430b91e
--- /dev/null
+++ b/web/yacco2/library/thread.w
@@ -0,0 +1,988 @@
+@q file: thread.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q yacco2's internal thread implementations@>
+@** Yacco2's internal thread implementation.
+@(wthread.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<accrue thread code@>;
+
+@*2 Thread control runtime environment.\fbreak
+Thread control record for the thread pool table.
+This is used by Yacco2's global runtime table of spawned threads.
+This is a one-to-many relationship as the same thread can be running
+within a nested call chain.
+Very basic in its thread |worker_status|: working, waiting for work, and
+I'm out of here.
+@<Type...@>+=
+struct worker_thread_blk; @/
+typedef std::list<yacco2::worker_thread_blk*> Parallel_thread_list_type;
+typedef Parallel_thread_list_type::iterator Parallel_thread_list_iterator_type;
+typedef std::vector<yacco2::Parallel_thread_list_type > Parallel_thread_tbl_type;
+typedef Parallel_thread_tbl_type::iterator Parallel_thread_tbl_iterator_type;
+struct called_proc_entry{
+ bool proc_call_in_use__;
+};
+typedef called_proc_entry Parallel_thread_proc_call_table_type;
+
+@*2 |worker_thread_blk| structure. \fbreak
+|grammar_s_parser__| is the grammar's parser.
+|status__| takes one of 3 states:\fbreak
+\ptindent{1) |THREAD_WAITING_FOR_WORK|}
+\ptindent{2) |THREAD_WORKING|}
+\ptindent{3) |THREAD_TO_EXIT|}
+
+Of import:\fbreak
+When the thread gets created,
+|worker_thread_blk| will enter the thread into the global
+thread table list. The table is a vector of precalculated thread numbers
+generated from Yacco2's linker.
+The launching grammar has mutual access to |Parallel_thread_table|.
+So the created thread can just deposit its |worker_thread_blk|
+address into the list.
+
+@<Struct...@>+=
+struct worker_thread_blk{
+ worker_thread_blk();// monolithic grammar
+ worker_thread_blk(yacco2::Parser* Grammar_s_parser,yacco2::Parser* Calling_parser);
+ yacco2::Parser* grammar_s_parser__;
+ int status__;
+ int run_cnt__;
+ int thd_id__;
+ void set_waiting_for_work();
+};
+@*2 Global |Parallel_thread_table| declaration of use.\fbreak
+Maintains a list of launched threads with their availability.
+For efficiency, it is an array subscripted
+by the thread's id number.
+Why the list?
+This is a 1:m situation. Due to nested thread calls, a thread could be
+busy so another copy
+of the threads needs creation.
+@<Global variables@>+=
+extern Parallel_thread_tbl_type Parallel_thread_table;
+extern Parallel_thread_proc_call_table_type Parallel_thread_proc_call_table[MAX_NO_THDS];
+@*2 Global routines declaration of use.
+@<External rtns and variables@>+=
+extern void Parallel_threads_shutdown(yacco2::Parser& PP);
+extern yacco2::THR
+_YACCO2_CALL_TYPE
+AR_for_manual_thread_spawning(yacco2::Parser*Caller_pp);
+extern yacco2::Type_pp_fnct_ptr PTR_AR_for_manual_thread_spawning;
+
+@*2 Global |Parallel_thread_table| definition.
+@<accrue thread code@>+=
+yacco2::Parallel_thread_tbl_type yacco2::Parallel_thread_table(MAX_NO_THDS);
+yacco2::Parallel_thread_proc_call_table_type yacco2::Parallel_thread_proc_call_table[MAX_NO_THDS];
+
+@*2 Global Proxy arbitrator.\fbreak
+Used for manual parallelism.
+This is manually launched by the grammar writer's code within a grammar.
+@<accrue thread code@>+=
+extern
+yacco2::THR
+_YACCO2_CALL_TYPE@/
+ yacco2::AR_for_manual_thread_spawning(yacco2::Parser* Caller_pp){
+ std::string ar_name("AR_yacco2");
+@<iar begin@>;
+@<No arbitration code present@>;
+@<iar end@>;
+}
+
+
+@*2 No arbitration code present.\fbreak
+This condition exists when the accept queue has more than 1 accept token in the queue.
+What token should be accepted while the others are quitely put to heaven?
+Within Yacco2, it checks when the configuration state has more than 1 thread being launched, and
+there is no grammar writer code to select the winning token, before the throw code is emitted.
+Determining how the select code is present is currently crude. It checks to see
+that the |pp_accept_queue__| variable is present in the
+syntax directed code string: not present
+then emit the conditional wrapping of the throw condition.
+@<No arbitration code present@>=
+if(Caller_pp->th_accepting_cnt__ > 1){
+ char a[BUFFER_SIZE];
+@.Err no arbitration code present ...@>
+ yacco2::KCHARP msg =
+ "no arbitration code present in %s - accept token queue has %i > 1 tokens to arbitrate on";
+ sprintf(a,msg,ar_name.c_str(),Caller_pp->th_accepting_cnt__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+
+@*2 |worker_thread_blk| initialization: monolithic grammar.\fbreak
+Part of its duties is to create the mutexs controling Yacco2's tables:
+symbol and thread list. To serialize traced output, a mutex is used to throatle back
+simultaneous multi-threads tracing into a single queue of buffer flush-out.
+ STL does not control this.
+It is at the mercy of how threads are executed
+ and how the operating system tic-tacs the
+clock and their output.
+Due to this whimsy of clock soundings, you can receive
+from different threads interspersed mixed snippets of
+ traced code on the same line outputted.
+This is why all atomic traces are bracketed by the acquire / release of the trace mutex.
+
+The mutex creation is done by the birth of a grammar object:
+each grammar contains a |Parser| component containing a |worker_thread_blk|.
+So there is no need for a special startup routine to use Yacco2's library.
+@<accrue thread code@>+=
+yacco2::worker_thread_blk::worker_thread_blk() // monolithic grammar
+:grammar_s_parser__(0)
+,status__(0),run_cnt__(1),thd_id__(0){
+ static bool init_gbl(OFF);
+ if(init_gbl == OFF){
+ init_gbl = ON;
+ CREATE_MUTEX(yacco2::TH_TBL_MU);
+ CREATE_MUTEX(yacco2::TRACE_MU);
+ CREATE_MUTEX(yacco2::TOKEN_MU);
+ CREATE_MUTEX(yacco2::SYM_TBL_MU);
+ }
+}
+
+@*2 |worker_thread_blk| initialization: threaded grammar.\fbreak
+See |HP Alpha \CPLUSPLUS/ ``this'' object mis-address| describing bug. It
+provides the reason for the change from
+|i.push_back(this)| to
+|i.push_back(&Grammar_s_parser->th_blk__)|.
+|@<acquire global thread table...@>| and |@<release global thread table...@>|
+are not used in this context as the grammar requesting the threads
+to run has already acquired it!
+@<accrue thread code@>+=
+yacco2::worker_thread_blk::worker_thread_blk(yacco2::Parser* Grammar_s_parser
+,yacco2::Parser* Calling_parser)// parallel grammar
+:grammar_s_parser__(Grammar_s_parser)
+,status__(THREAD_WAITING_FOR_WORK)
+,run_cnt__(1)
+,thd_id__(grammar_s_parser__->thread_entry__->thd_id__){
+ status__ = THREAD_WORKING;
+ Parallel_thread_list_type& i =
+Parallel_thread_table[grammar_s_parser__->thread_entry__->thd_id__];
+ i.push_back(this);
+ @<Trace MSG thread being created@>;
+}
+@*2 |set_waiting_for_work|.\fbreak
+It is the running thread who
+sets its own work status.
+Both |@<acquire global thread table...@>| and |@<release global thread table...@>|
+are used by the running thread in their local procedures |parallel_parse_successful|
+or |parallel_parse_unsuccessful|.
+@<accrue thread code@>+=
+void
+yacco2::worker_thread_blk::set_waiting_for_work(){
+@<Trace MSG thread idle before setting waiting for work@>;
+ status__ = THREAD_WAITING_FOR_WORK;
+@<Trace MSG thread idle after setting waiting for work@>;
+}
+
+@*2 Global shutdown of threads.\fbreak
+Goes through the list of threads.
+Before doing 2 passes on the table,
+the routine pauses for x seconds to let the swamp drain:
+due to a single processor environment, there could still
+be threads outstanding in their winddown to-wait-for-work sequence.
+It then goes thru the thread list for threads waiting-for-work, these threads
+are given their pink notice.
+
+The last pause is to allow the draining of the threads' output:
+flush those buffers.
+The 2nd pass thru the table is a sanity check.
+Any threads still outstanding are listed to Yacco2's output file |lrclog|.
+This notification allows the compiler writer to check out why.
+@<accrue thread code@>+=
+extern void yacco2::Parallel_threads_shutdown(yacco2::Parser& PP){@/
+@<acquire global thread table critical...@>;
+int no_thds_to_shutdown(0);
+int no_ths_exited(0);
+ @<pause for x seconds@>;// let the other threads go into a wait state
+ @<Threads in table to potentially shutdown@>;
+ @<look for threads to shutdown@>;
+ @<pause for x seconds@>;// allow the threads to close down
+@<release global thread table critical region@>;
+ DESTROY_MUTEX(yacco2::TH_TBL_MU);
+ DESTROY_MUTEX(yacco2::TRACE_MU);
+ DESTROY_MUTEX(yacco2::TOKEN_MU);
+ DESTROY_MUTEX(yacco2::SYM_TBL_MU);
+}
+
+@*3 Pause for x seconds.
+@<pause for x seconds@>=
+#if THREAD_LIBRARY_TO_USE__ == 1
+ Sleep(1000);
+#elif THREAD_LIBRARY_TO_USE__ == 0
+ sleep(1);// from guy steele c ref bk, in seconds.
+#endif
+
+@*3 Threads in table to potentially shutdown.\fbreak
+@<Threads in table to potentially shutdown@>=
+ Parallel_thread_tbl_iterator_type k = Parallel_thread_table.begin();
+ Parallel_thread_tbl_iterator_type ke = Parallel_thread_table.end();
+ for(;k!=ke;++k){
+ Parallel_thread_list_iterator_type m = k->begin();
+ Parallel_thread_list_iterator_type me = k->end();
+ for(;m != me;++m){
+ ++no_thds_to_shutdown;
+ }
+ }
+ yacco2::lrclog << "Number of threads in table to shutdown: " << no_thds_to_shutdown << __FILE__ << __LINE__<< std::endl;
+ k = Parallel_thread_table.begin();
+ for(;k!=ke;++k){
+ Parallel_thread_list_iterator_type m = k->begin();
+ Parallel_thread_list_iterator_type me = k->end();
+ for(;m != me;++m){
+ worker_thread_blk* tb = *m;
+@<acquire trace mu@>;
+ yacco2::lrclog << "worker task in table tb*: " << tb
+ << " thread id: "
+ << tb->grammar_s_parser__->thread_no__
+ << "::" << tb->grammar_s_parser__->thread_name()
+ << " run cnt: " << tb->run_cnt__;
+ switch (tb->status__){
+ case THREAD_WAITING_FOR_WORK:{
+ yacco2::lrclog << " waiting for work";
+ break;
+ }
+ case THREAD_WORKING:{
+ yacco2::lrclog << " working";
+ break;
+ }
+ case THREAD_TO_EXIT:{
+ yacco2::lrclog << " thread to exit";
+ break;
+ }
+ default:{
+ yacco2::lrclog << " ??? thread status: " << tb->status__;
+ break;
+ }
+ }
+ yacco2::lrclog << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ }
+ }
+
+
+@*3 Look for threads to shutdown.\fbreak
+@<look for threads to shutdown@>=
+ Parallel_thread_tbl_iterator_type i = Parallel_thread_table.begin();
+ Parallel_thread_tbl_iterator_type ie = Parallel_thread_table.end();
+ for(;i!=ie;++i){
+ Parallel_thread_list_iterator_type j = i->begin();
+ Parallel_thread_list_iterator_type je = i->end();
+ for(;j != je;++j){
+ worker_thread_blk* tb = *j;
+ if(tb->status__ == THREAD_WAITING_FOR_WORK){
+@<acquire trace mu@>;
+ ++no_ths_exited;
+ yacco2::lrclog << "worker task to exit: "
+ << tb->grammar_s_parser__->thread_no__
+ << "::" << tb->grammar_s_parser__->thread_name()
+ << " tb* " << tb
+ << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ LOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+,*tb->grammar_s_parser__," of called thread");
+ tb->status__ = THREAD_TO_EXIT;
+ PP.post_event_to_requesting_grammar(*tb->grammar_s_parser__,Shutdown,PP);
+ }
+ else{
+@<acquire trace mu@>;
+ yacco2::lrclog << "worker task not shutting down: "
+ << tb->grammar_s_parser__->thread_no__
+ << "::" << tb->grammar_s_parser__->thread_name()
+ << " tb* " << tb
+ << " status: " << tb->status__
+ << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ }
+ }
+ i->clear();
+ }
+ Parallel_thread_table.clear();
+ yacco2::lrclog << "Number of threads in table exiting: "
+ << no_ths_exited << " number of threads not shutting down: "
+ << no_thds_to_shutdown - no_ths_exited << __FILE__ << __LINE__<< std::endl;
+
+
+@*2 |Caccept_parse| Structure --- Accept result from threads.\fbreak
+Ahh, the smell of ??? Go tell it to cm.
+Jess the reality show syndrome. This message gets put into the accept queue
+of the requesting pp.
+This is a potential winner requiring the arbitrator to decide.
+Lets hope the judge is not of
+TVQ `star acadamie' tabloids variety.
+
+Changed the |accept_queue| from a mapped sturcture of keyed by
+the accept terminal's enumeration id
+to one of sequential list of local |Caccept_parse|.
+As non-determinism is small: potentially 2 or 3 occassionally Tes in
+the queue, i felt the sequential
+attitude appropriate instead of a mapped structure.
+The big improvement is to remove malloced |Caccept_parse| and use the copy into the
+local |Caccept_parse| of the accept queue.
+@<Struct...@>+=
+struct Caccept_parse{
+ Caccept_parse
+ (yacco2::Parser& Th_reporting_success@/
+ ,yacco2::CAbs_lr1_sym& Accept_token@/
+ ,yacco2::UINT Accept_token_pos@/
+ ,yacco2::CAbs_lr1_sym& La_token@/
+ ,yacco2::UINT La_token_pos);
+ Caccept_parse();
+ void initialize_it();
+ void fill_it(Caccept_parse& Accept_parse);
+ void fill_it(yacco2::Parser& Th_reporting_success@/
+ ,yacco2::CAbs_lr1_sym& Accept_token@/
+ ,yacco2::UINT Accept_token_pos@/
+ ,yacco2::CAbs_lr1_sym& La_token@/
+ ,yacco2::UINT La_token_pos);
+
+ ~Caccept_parse();
+ yacco2::Parser* th_reporting_success__;
+ yacco2::CAbs_lr1_sym* accept_token__;
+ yacco2::UINT accept_token_pos__;
+ yacco2::CAbs_lr1_sym* la_token__;
+ yacco2::UINT la_token_pos__;
+};
+
+@*2 |Caccept_parse| and |~Caccept_parse| implementation.\fbreak
+@<accrue thread code@>+=
+yacco2::Caccept_parse::@/
+Caccept_parse@/
+ (yacco2::Parser& Th_reporting_success@/
+ ,yacco2::CAbs_lr1_sym& Accept_token@/
+ ,yacco2::UINT Accept_token_pos@/
+ ,yacco2::CAbs_lr1_sym& La_token@/
+ ,yacco2::UINT La_token_pos){
+ th_reporting_success__ = &Th_reporting_success;
+ accept_token__ = &Accept_token;
+ accept_token_pos__ = Accept_token_pos;
+ la_token__ = &La_token;
+ la_token_pos__ = La_token_pos;
+}
+
+yacco2::Caccept_parse::@/
+Caccept_parse(){
+ th_reporting_success__ = 0;
+ accept_token__ = 0;
+ accept_token_pos__ = 0;
+ la_token__ = 0;
+ la_token_pos__ = 0;
+}
+void yacco2::Caccept_parse::initialize_it(){
+ th_reporting_success__ = 0;
+ accept_token__ = 0;
+ accept_token_pos__ = 0;
+ la_token__ = 0;
+ la_token_pos__ = 0;
+
+}
+
+void yacco2::Caccept_parse::fill_it(Caccept_parse& Accept_parse){
+ th_reporting_success__ = Accept_parse.th_reporting_success__;
+ accept_token__ = Accept_parse.accept_token__;
+ accept_token_pos__ = Accept_parse.accept_token_pos__;
+ la_token__ = Accept_parse.la_token__;
+ la_token_pos__ = Accept_parse.la_token_pos__;
+}
+
+void yacco2::Caccept_parse::fill_it@/
+ (yacco2::Parser& Th_reporting_success@/
+ ,yacco2::CAbs_lr1_sym& Accept_token@/
+ ,yacco2::UINT Accept_token_pos@/
+ ,yacco2::CAbs_lr1_sym& La_token@/
+ ,yacco2::UINT La_token_pos){
+ th_reporting_success__ = &Th_reporting_success;
+ accept_token__ = &Accept_token;
+ accept_token_pos__ = Accept_token_pos;
+ la_token__ = &La_token;
+ la_token_pos__ = La_token_pos;
+}
+
+yacco2::Caccept_parse::
+~Caccept_parse(){
+}
+
+@** Thread code for arbitrator, and parallel parse.\fbreak
+The emitted files become the include files for the emitted threads and each
+finite automton's arbitrator.
+For the parallel parse thead, this is the core code loops that make it tick.
+The arbitrator code is the two pieces of bread that sandwich the
+grammar writer's selection code supplied from the |arbitrator-code| construct.
+The produced files are:\fbreak
+\ptindent{1) |wpp_core.cpp| --- parallel parser include code for generated pp threads}
+\ptindent{2) |war_begin_code.h| --- arbitrator's start code}
+\ptindent{3) |war_end_code.h| --- arbitrator's end code}
+
+@*2 Arbitrator code generator --- begin and end files: |war_xxx_code.h|.\fbreak
+The emitted code is the |pp_accept_queue|'s iteration to walk thru the potential
+tokens for consideration produced by the parallel threads inserted
+into the requesting grammar's accept queue.
+It is structured into 2 parts:\fbreak
+\ptindent{1) the startup variables to iterate thru the accept queue}
+\ptindent{2) the ending code of the iteration}
+
+Sandwiched between these 2 pieces of code is the arbitration logic supplied
+by the grammar writer that gets emitted for that specific
+state's configuration.
+Normally there is no code as the parallel request is deterministic with
+ at most only one token returned by one of the launched threads.
+
+@*2 Arbitrator begin code.\fbreak
+This is injected into the emitted arbitrators produced by Yacco2.
+The grammar writer's code follows this code.
+It is the discrimatory code used to select the winning accept terminal
+within the accept queue.
+
+Arbitration is needed when there are competing parallel parses that
+return their accept terminals.
+A single entry only is checked first and returned before going into the
+arbitrated code selection.
+A sanity check is done on the accept queue whereby the accepted
+thread count {\bf must equal} the number
+of accepted tokens placed into the queue.
+
+The |Caller_pp| variable is the passed Parser pointer argument
+to the arbitration routine.
+It is the parser's context that includes the its critcal region
+supporting threading and the accept queue.
+Arbitration routine(s) generated out of the grammar
+have the following naming convention:\fbreak
+\ptindent{|AR_| concatenated with the rule name}
+An example of a routine is:\fbreak
+\ptindent{yacco2::THR |_YACCO2_CALL_TYPE| |NS_pass3::AR_Rtok|(yacco2::Parser* |Caller_pp|);}
+The |_YACCO2_CALL_TYPE| is an internal definition specific to Microsoft call
+types. It is defined as |__stdcall| whereas in the other supported platforms it's
+value is empty.
+@(war_begin_code.h@>=
+@<copyright notice@>;
+ @<pp accept queue |war_begin_code|@>;
+
+@ @<pp accept queue |war_begin_code|@>=
+ @<uns@>;
+ int i = 1;
+ int ie = Caller_pp->th_accepting_cnt__;
+ @<Trace AR trace the starting of arbitration@>;
+
+@*3 Example of arbitrated grammar code.\fbreak
+The accept queue is sequentially searched in arbitrating on the enumerated id
+ of the potential accepting Tes.
+The following example only gets executed when there are 2 or more
+accepting terminals in the queue.
+In this example, there are 2 independent parallelisms going on:\fbreak
+\ptindent{keyword versus identifier}
+\ptindent{floating point versus integer}
+They never intersect!
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/arbitrator.txt"}
+\fbreak
+Lines 11 and 12 above show 3 things:\fbreak
+\ptindent{1) |i| is the subscript to accept parse array's current contents}
+\ptindent{2) |Caller_pp| (Parser*) points to the critical region of the grammar}
+\ptindent{3) |pp_accept_queue__| contains the parallel results from the threads}
+The decision code only gets executed if there are 2 or more
+terminals placed into the accept queue for arbitration.
+This case is very rare but the above
+example illustrates dealing with non-determinism from 2 or more successful parallel
+parses. How can this come about?: Subset - superset --- common prefixes.
+The example gives 2 examples of this that are tested for.
+The integer recognizes the whole number while the floating point continues with the fraction.
+One can argue that the grammar strategy was not very refined as the lookahead
+on the integer should not accept ``.''.
+You're right but this example is instructive and it was drawn from a real
+translator that was put together quickly. The moral is: u can be inefficient but
+effective with
+non-determinism.
+
+Note, the items placed into the accept queue
+can contain error terminals forwarded to the calling grammar to do its own
+abort sequence.
+
+@*2 Arbitrator end code.\fbreak
+Closes the iteration thru the accept queue.
+Originally i optimized injection code in case the grammar writer missed selecting
+the accepted T. This code was dependent on whether the specific
+state had multiple threads to launch.
+Now for clarity i have included a stopper procedure before the |arbitrated_parameter|
+label
+whereby it spews the gory details for the grammar writer's logic correction:
+Competing threads within the grammar have their names displayed
+while a thread with a ``NULL'' name is not a competing thread
+but allows one to be specific to an accepting token
+returned by one of the named threads.
+
+Where is the accept queue drained of its contents?
+As potential terminals for arbitration are birthed from malloc (new),
+their sending to heaven should be epiphaned by ``delete''.
+This is done by the generic Parser code just after the call to the ``Arbitrator''.
+This is a code-bloat diet: Putting this in each generated arbitrator routine
+across all grammars would have been fat people community
+like the works of Spanish sculptor/painter Botero.
+
+@(war_end_code.h@>=
+@<copyright notice@>;
+ @<pp accept queue |war_end_code|@>;
+
+
+@ @<pp accept queue |war_end_code|@>=
+Caller_pp->abort_no_selected_accept_parse_in_arbitrator();
+arbitrated_parameter:@/
+ Caller_pp->arbitrated_token__ = &Caller_pp->pp_accept_queue__[i];
+ Caller_pp->pp_accept_queue_idx__ = i;
+ @<Trace AR stopped arbitrating@>;
+ return (THR)1;
+
+@*2 Parallel thread code: injection code for emitted pp |wpp_core.h|.\fbreak
+This is the injector code for the manufactured parallel thread.
+Drawn from the just created file |wpp_core.h|.
+If it has been launched as a thread, ``waiting-for-work'' has been
+removed from the run loop and placed in
+the responding |parallel_parse_successful| and |parallel_parse_unsuccessful| procedures.
+This is an optimization: Ahhh the dragon trace of threading...
+
+Even better is the check as to calling it as a thread or as a procedure.
+This depends on the number of threads to launch. If there is only one thread to run,
+this is called as a procedure instead of a thread. Do u see the friskiness in Yacco2?
+Well no, as threads now dominate.
+
+Please see ``Notes to myself'' on running diatribe regarding optimization.
+@(wpp_core.h@>=
+@<copyright notice@>;
+@<uns@>;
+ @<create communication variables@>;
+ @<create parser related variables and set them@>;
+ @<set parameter passed to pp as a message@>;
+do{
+ @<establish initial parser's token setting@>;
+ @<Trace pp start info@>;
+ @<let's parallel parse. do u?@>;
+ @<Trace stop of parallel parse message@>;
+ @<clean up parse stack but leave as ready to parse again@>;
+ @<house clean the parser and local communication variables@>;
+ @<Trace parallel thread waiting-to-do-work@>;
+ @<pp wait for work or shutdown message@>;
+ @<Trace pp received go start working message@>;
+ }while(pp_parser.th_blk__.status__ != THREAD_TO_EXIT);
+finished_working:@/
+@<winddown duties of pp@>;
+@<Trace pp finished working@>;
+ UNLOCK_MUTEX_OF_CALLED_PARSER(pp_parser.mu__,pp_parser," of called thread");
+ return (THR)1;
+
+@ Winddown duties of pp.
+@<winddown duties of pp@>=
+ pp_parser.clear_parse_stack();
+
+@ Pp wait for work or shutdown message.
+@<pp wait for work or shutdown message@>=
+ pp_parser.wait_for_event();
+
+@ House clean the parser and local communication variables.\fbreak
+Their procedure calls replaced for speed.
+@<house clean the parser and local communication variables@>=
+ pp_parser.use_all_shift__ = ON;
+ pp_parser.abort_parse__ = OFF;
+ pp_parser.stop_parse__ = OFF;
+ pp_parser.has_questionable_shift_occured__ = OFF;
+
+@ Clean up parse stack but leave as ready to parse again.
+The following points are done:\fbreak
+\ptindent{1) clean up trace activity: normally done when parse object destroyed}
+\ptindent{2) leave first record on stack for efficiency}
+\ptindent{3) make sure first stack symbol on stack checked for delete attribute}
+@<clean up parse stack but leave as ready to parse again@>=
+ pp_parser.remove_from_stack(pp_parser.parse_stack__.top_sub__ - 1);
+ CAbs_lr1_sym* sym = pp_parser.top_stack_record()->symbol__;
+ if (sym != 0){
+ if (sym->auto_delete__ == ON){
+ @<Trace pp's last symbol on stack set as autodelete@>;
+ delete sym;
+ }
+ pp_parser.top_stack_record()->set_symbol(0);// keeping a clean stack
+ }
+ pp_parser.parse_stack__.lr_stk_init(*pp_parser.fsm_tbl__->start_state__);
+
+@ Let's parallel parse. do u?.
+@<let's parallel parse. do u?@>=
+ pp_parser.parallel_parse();
+
+@ Establish initial parser's token setting.
+ When the thread is established
+ and waiting to be wakenned, the calling grammar sets the following variables within the
+ critical region of the called thread:
+ |from_thread__|, |pp_requesting_parallelism__|, and |no_competing_pp_ths__|.
+@<establish initial parser's token setting@>=
+ pp_parser.override_current_token(*pp_parser.pp_requesting_parallelism__->current_token()
+ ,pp_parser.pp_requesting_parallelism__->current_token_pos__);
+ pp_parser.set_start_token(*pp_parser.pp_requesting_parallelism__->current_token());
+ pp_parser.set_start_token_pos(pp_parser.pp_requesting_parallelism__->current_token_pos__);
+ pp_parser.top_stack_record()->set_symbol(pp_parser.current_token());
+ pp_parser.token_supplier__ = pp_parser.pp_requesting_parallelism__->token_supplier__;
+ pp_parser.token_producer__ = pp_parser.pp_requesting_parallelism__->token_producer__;
+ pp_parser.error_queue__ = pp_parser.pp_requesting_parallelism__->error_queue__;
+ pp_parser.recycle_bin__ = pp_parser.pp_requesting_parallelism__->recycle_bin__;
+ pp_parser.sym_lookup_functor__ = pp_parser.pp_requesting_parallelism__->sym_lookup_functor__;
+ pp_parser.supplier_r_w_cnt__ = pp_parser.pp_requesting_parallelism__->supplier_r_w_cnt__;
+
+if(pp_parser.th_blk__.grammar_s_parser__ != &pp_parser){
+ char a[BUFFER_SIZE];
+@.Err parser's thd blk's pp addr !...@>
+ yacco2::KCHARP msg = "parser's thd blk's pp addr != itself thd: %i::%s";
+ sprintf(a,msg,pp_parser.thread_no__,pp_parser.thread_name());
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+if(pp_parser.th_blk__.grammar_s_parser__->pp_requesting_parallelism__
+ != pp_parser.pp_requesting_parallelism__){
+ char a[BUFFER_SIZE];
+@.Err caller pp addr |!=| in calle...@>
+ yacco2::KCHARP msg =
+"caller's pp addr not = in called parser's thd blk ptr, and its parser thd: %i::%s";
+ sprintf(a,msg,pp_parser.thread_no__,pp_parser.thread_name());
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+}
+@ Create communication variables.
+@<create communication variables@>=
+ char ma[SMALL_BUFFER_4K];
+ const char* pp_start = "YACCO2_MSG__::%i::%s start parsing\n";
+ const char* pp_stop = "YACCO2_MSG__::%i::%s stop parsing\n";
+@<uns@>;
+
+@ Set parameter passed to pp as a message.
+@<set parameter passed to pp as a message@>=
+ pp_parser.pp_requesting_parallelism__ = Caller_pp;
+ pp_parser.from_thread__ = Caller_pp;
+ pp_parser.no_competing_pp_ths__ = Caller_pp->no_requested_ths_to_run__;
+
+@ Create parser related variables and set them.
+@<create parser related variables and set them@>=
+ Parser pp_parser(ssPARSE_TABLE,pp_thread_entry,Caller_pp);
+
+@*2 Procedure call: injection code for emitted pp |wproc_pp_core.h|.\fbreak
+This is the injector code for the manufactured called procedure instead of a thread.
+Even better is the check as to calling it as a thread or as a procedure.
+This depends on the number of threads to launch. If there is only one thread to run,
+this is called as a procedure instead of a thread. Do u see the friskiness in Yacco2?
+Well no, as threads now dominate.
+
+Added improvements:\fbreak
+A \TRAshift{} contruct has been added to do chained
+procedure calls: the 1st thread's returned T becomes the chained T
+for the next (chained) procedure call.
+ I overloaded this symbol to support 2 contexts: \Olinker and chained
+parsing calls. Why the overload? I only have 8 symbols reserved
+for the |LRk| symbol class and one context does not interfer with the other so
+i'm a bit lazy to possibly remove |eof| and double duty |eog| symbol where the
+file processing container templates us |eof|.
+Some parsing adjustments must be
+added to link the chained T with the chained procedure call
+as the the chained procedure must reference the shifted T
+of the calling parser as its start T and not the current T of the calling parser.
+|proc_call_funct__| has been added to the State's definition to support the chained call.
+@(wproc_pp_core.h@>=
+@<copyright notice@>;
+@<uns@>;
+ @<create procedure communication variables@>;
+ @<set procedure parameter passed to pp as a message@>;
+
+ @<establish procedure initial parser's token setting@>;
+ @<Trace procedure pp start info@>;
+ @<let's procedure parallel parse. do u?@>;
+ @<clean up procedure parse stack but leave as ready to parse again@>;
+ @<house clean procedure the parser and local communication variables@>;
+
+finished_working:@/
+@<winddown duties of procedure pp@>;
+@<Trace procedure pp finished working@>;
+ return rslt;
+
+@ Winddown duties of procedure pp.
+@<winddown duties of procedure pp@>=
+ proc_parser->clear_parse_stack();
+
+@ House clean procedure the parser and local communication variables.
+@<house clean procedure the parser and local communication variables@>=
+ proc_parser->set_use_all_shift_on();
+ proc_parser->set_abort_parse(OFF);
+ proc_parser->set_stop_parse(OFF);
+ proc_parser->has_questionable_shift_occured__ = OFF;
+
+@ Clean up procedure parse stack but leave as ready to parse again.
+The following points are done:\fbreak
+\ptindent{1) clean up trace activity: normally done when parse object destroyed}
+\ptindent{2) leave first record on stack for efficiency}
+\ptindent{3) make sure first stack symbol on stack checked for delete attribute}
+@<clean up procedure parse stack but leave as ready to parse again@>=
+ proc_parser->remove_from_stack(proc_parser->parse_stack__.top_sub__ - 1);
+ CAbs_lr1_sym* sym = proc_parser->top_stack_record()->symbol__;
+ if (sym != 0){
+ if (sym->auto_delete__ == ON){
+ @<Trace procedure pp's last symbol on stack set as autodelete@>;
+ delete sym;
+ }
+ proc_parser->top_stack_record()->set_symbol(0);// keeping a clean stack
+ }
+ proc_parser->parse_stack__.lr_stk_init(*proc_parser->fsm_tbl__->start_state__);
+@ Let's procedure parallel parse. do u?.
+@<let's procedure parallel parse. do u?@>=
+ THR_result rslt = proc_parser->parallel_parse();
+
+@ Establish procedure parser's initial token setting.
+ When the thread is established
+ and waiting to be wakenned, the calling grammar sets the following variables within the
+ critical region of the called thread:
+ |from_thread__|, |pp_requesting_parallelism__|, and |no_competing_pp_ths__|.
+
+Distinguish between chained procedure call and just a plain old thread call
+optimized by a procedure call. The chained T is the Caller parser's previous
+``go to'' state.
+Its current token position is the tail character of the stacked T
+as the caller parser's current token context is the lookahead token and
+ position returned from the called thread.
+@<establish procedure initial parser's token setting@>=
+ if(Caller_pp->top_stack_record()->state__->proc_call_addr__ == 0){// regular proc call
+ proc_parser->override_current_token(*Caller_pp->current_token()
+ ,Caller_pp->current_token_pos__);
+ proc_parser->set_start_token(*Caller_pp->current_token());
+ proc_parser->set_start_token_pos(Caller_pp->current_token_pos__);
+ proc_parser->top_stack_record()->set_symbol(proc_parser->current_token());
+ }else{//chained proc call
+ Cparse_record* pr = // curr stk pos is rel. 1 but access is rel to 0 UGH!
+ Caller_pp->get_stack_record(Caller_pp->current_stack_pos()-2);
+ int new_pos = Caller_pp->current_token_pos__-1;
+ proc_parser->override_current_token(*pr->symbol__,new_pos);
+ proc_parser->set_start_token(*pr->symbol__);// chained T
+ proc_parser->set_start_token_pos(new_pos);
+ }
+ proc_parser->token_supplier__ = Caller_pp->token_supplier__;
+ proc_parser->token_producer__ = Caller_pp->token_producer__;
+ proc_parser->error_queue__ = Caller_pp->error_queue__;
+ proc_parser->recycle_bin__ = Caller_pp->recycle_bin__;
+ proc_parser->sym_lookup_functor__ = Caller_pp->sym_lookup_functor__;
+@ Create procedure communication variables.
+@<create procedure communication variables@>=
+ char ma[SMALL_BUFFER_4K];
+ const char* pp_start = "YACCO2_MSG__::PROC::%i::%s start parsing\n";
+ const char* pp_stop = "YACCO2_MSG__::PROC::%i::%s stop parsing\n";
+@<uns@>;
+
+@ Set procedure parameter passed to pp as a message.
+@<set procedure parameter passed to pp as a message@>=
+ proc_parser->pp_requesting_parallelism__ = Caller_pp;
+ proc_parser->launched_as_procedure__= true;
+ proc_parser->from_thread__ = Caller_pp;
+ proc_parser->no_competing_pp_ths__ = Caller_pp->no_requested_ths_to_run__;
+
+
+@** Determine threads to launch by their first sets.\fbreak
+As an optimization before launching the thread,
+the thread's first set is checked to see if the start token, or the meta terminals
+\ALLshift{} and \INVshift{} are present.
+Why are the meta terminals checked?
+\ALLshift{} is the `all shift' terminal
+used as a wild terminal facilty; it handles all terminals so even though the
+start token is not found in the first set, the wild token faclity indicates its presence.
+I do not check to see if the finite state automaton's ``all shift'' facility is on.
+Its presence in the first set is sufficient: testing the
+grammar's finite automaton to see if this facility is turned off is enough paranoia.
+
+
+What about \INVshift{} the invisible shift meta terminal?
+In this case it denotes an epsilon rule within
+the start state configuration of the grammar so you better launch the thread as you
+do not know what's happening past that point when the token stream is being consumned.
+Yacco2's linker goes through this transient chain of first sets: internal
+discovery of what's after the \INVshift{} be it internal or
+external first sets from called threads.
+I should rely on the first set but as a precaution,
+I err to try it and if it doesn't work so what. It's a bit of overhead but at least it's
+better then not trying out the thread and
+having an irrate grammar writer to deal with.
+This type of grammatical situation is very rare but still needs checking.
+
+This is a major optimization! The ``pp'' grammar checks in its parallel
+table list for the eligible threads that have the current terminal in their |first set|.
+If found, the parallel entry for those threads are added to the
+potential thread list. Only then does the parallel parse
+launch the threads.
+By absorbing the optimization into the ``pp'' thread it eliminates
+false thread starts.
+Now it's zippy-do-da. Do u hear the sirens?
+Hey u putting jell in y're hair?: Not zippy or whatever adjective or adverb expressed.
+
+Take ...
+
+@<External rtns and variables@>+=
+extern void find_threads_by_first_set
+(yacco2::USINT Current_T_id
+,yacco2::yacco2_threads_to_run_type& Th_list
+,yacco2::State_s_thread_tbl& P_tbl);
+
+@*2 |find_threads_by_first_set|.\fbreak
+Work the global optimization of first sets and Terminals: See Yacco2's Linker.
+State's thread list against the T's thread list.
+@<accrue thread code@>+=
+extern void yacco2::find_threads_by_first_set
+(yacco2::USINT Current_T_id
+,yacco2::yacco2_threads_to_run_type& Th_list
+,yacco2::State_s_thread_tbl& P_tbl){
+ yacco2::thread_array_record* thds = (yacco2::thread_array_record*)yacco2::THDS_STABLE__;
+ @<determine if there is a bit map gened for state. no do it@>;
+ @<define and set work variables of Terminal having threads @>;
+ @<define and set state's dynamic work variables@>;
+ @<search T's thd ids against State's thd id list...@>;
+}
+
+@*2 Determine if there is a bit map gened for state. no do it.\fbreak
+As the grammar's state configuration is gened locally and has no knowledge
+about the global number of threads, its configuration has an indirection towards
+the thread entry having a pre-agreed to naming convention of
+the letter ``I'' concatenated with the thread name without its namespace.
+For example |ITH_eol| would be the global thread entry object for the ``eol'' grammar.
+
+To make the thread launching efficient, a thread id bit map is used and searched.
+Cuz the state has just a list of |Thread_entry| pointers, this must be converted into the
+global bit map configuration. This is done per parallelism request.
+To offset each hit, the state's configuration contains a pointer for this dynamicly composed
+environment.
+As threads are more efficient than procedure calls, this is a one time inefficiency per state
+being gened on the fly.
+Now why again are threads more efficient?
+Cuz of objects and their rights of passage: Too much start-run-cleanup.
+@<determine if there is a bit map gened for state. no do it@>=
+ static int no_of_gbl_thds(0);
+ static int no_bit_mapped_words(0);
+ static bool one_time(false);
+ if(one_time == false){
+ one_time = true;
+ no_of_gbl_thds = thds->no_entries__;
+ div_t x = div(no_of_gbl_thds,BITS_PER_WORD);
+ if(x.rem != 0) ++x.quot;
+ no_bit_mapped_words = x.quot;
+ }
+ if(P_tbl.thd_id_bit_map__ == 0){
+ @<define and set work variables of state threading table@>;
+ yacco2::ULINT (*maps) = (yacco2::ULINT (*))yacco2::BIT_MAPS_FOR_SALE__;
+ P_tbl.thd_id_bit_map__ = (yacco2::ULINT (*))&maps[yacco2::BIT_MAP_IDX__];
+ yacco2::BIT_MAP_IDX__+= no_bit_mapped_words;
+ if(yacco2::BIT_MAP_IDX__ > yacco2::TOTAL_NO_BIT_WORDS__){
+ char a[BUFFER_SIZE];
+@.Err no more bit maps: in Linker @>
+ yacco2::KCHARP msg = "Err no more bit maps: %i; adjust TOTAL_NO_BIT_WORDS in Linker";
+ sprintf(a,msg,yacco2::BIT_MAP_IDX__);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ div_t dd;
+ for(;S_no_thd_entries > 0;--S_no_thd_entries,++S_cur_thread_entry_ptr){
+ yacco2::USINT S_thd_id = (*S_cur_thread_entry_ptr)->thd_id__;
+ dd = div(S_thd_id,BITS_PER_WORD);
+ ULINT bit_pos_value = 1 << dd.rem;
+ P_tbl.thd_id_bit_map__[dd.quot] |= bit_pos_value;
+ }
+ }
+
+@ Define and set state's dynamic work variables.
+@<define and set state's dynamic work variables@>=
+ yacco2::ULINT S_cur_thd_id_map = P_tbl.thd_id_bit_map__[0];
+
+@ Define and set work variables of state threading table.
+@<define and set work variables of state threading table@>=
+ yacco2::Thread_entry** S_cur_thread_entry_ptr = (yacco2::Thread_entry**)&P_tbl.first_entry__;
+ yacco2::USINT S_no_thd_entries = P_tbl.no_entries__;
+
+@ Define and set work variables of Terminal having threads.
+@<define and set work variables of Terminal having threads @>=
+ yacco2::thd_ids_having_T* T_cur_thd_id_having_T_ptr;
+ yacco2::ULINT T_cur_thd_id_map;
+ T_array_having_thd_ids* t_array_having_thd_ids =
+ (T_array_having_thd_ids*)yacco2::T_ARRAY_HAVING_THD_IDS__;
+ T_cur_thd_id_having_T_ptr = t_array_having_thd_ids->first_entry__[Current_T_id];
+ T_cur_thd_id_map = T_cur_thd_id_having_T_ptr->first_thd_id__[0];
+
+@ Search T's thread ids against the State's thread entry list. fnd add to thread list.
+This is a linear search of segments.
+It is worked like a merge between two variable length
+lists of points. Its cost is linear bounded depending where the state's
+thread ids are relative to T's thread ids: before, within, or after.
+This linear bound can be 1 to the
+number of items in the largest list.
+
+Both meta terminals \ALLshift{} and \INVshift{} first sets get
+generated in Yacco2's linker.
+It is much more efficient to go thru a State and T list once.
+The expense is to explode the \ALLshift{} meta terminal into all the terminals.
+This should be a rare occurance to have a thread's first set contain this
+meta terminal.
+
+Bit maps are used: lets hear it for compression and possibly speed.
+To extract more speed, the inline assembler directive is used when developed on
+a Microsoft environment for the Intel 486 chipset.
+Without it, the bit map strategy is slower than the linear list.
+For the moment |@<extract thread ids from map and add their |thread_entry| to thread list@>|
+is the portable piece of code until I improve the runtime strategy.
+@<search T's thd ids against State's thd id list. fnd add to-run thread list@>=
+ int base_idx_for_thd_id_calc(0);
+ int cur_bit_word_idx(0);
+ do{
+ yacco2::ULINT bit_map = T_cur_thd_id_map & S_cur_thd_id_map;
+ if(bit_map != 0){
+ base_idx_for_thd_id_calc = cur_bit_word_idx*BITS_PER_WORD;
+ @<extract thread ids from map and add their |thread_entry| to thread list@>;
+ }
+ ++cur_bit_word_idx;
+ T_cur_thd_id_map = T_cur_thd_id_having_T_ptr->first_thd_id__[cur_bit_word_idx];
+ S_cur_thd_id_map = P_tbl.thd_id_bit_map__[cur_bit_word_idx];
+ } while (cur_bit_word_idx < no_bit_mapped_words);
+
+@ Extract thread ids from map and add their |thread_entry| to thread list.
+Now the fun begins. What threads are to be run. The bits must be tested individually
+and their bit position converted into the their bit map vector co-ordinates:
+quotient * 32 + bit position.
+
+For example, word 0, bit position 0 is thread id 0. Word 1 bit position 0 is thread id 32.
+@<extract thread ids from map and add their |thread_entry| to thread list@>=
+ yacco2::ULINT bit(1);
+ for(int bit_pos=0;bit_pos <= BITS_PER_WORD_REL_0;++bit_pos){
+ if(bit_map & bit){
+ @<add thread entry whose first set contains the current token@>;
+ }
+ bit <<= 1; // next bit: rt to left order; insignificant to significant order
+ }
+
+@ Add thread entry whose first set contains the current token.
+@<add thread entry whose first set contains the current token@>=
+ yacco2::USINT thd_id = base_idx_for_thd_id_calc + bit_pos;
+ Th_list.push_back(thds->first_entry__[thd_id]);
+
+@ Ms Intel 486 Assembler extract thread ids from map and add their |thread_entry| to thread list.
+@<Ms Intel 486 assembler extract ids from map and add their |thread_entry| to thread list@>=
+ yacco2::Thread_entry*(*pte)[]= &thds->first_entry__;
+ yacco2::Thread_entry* te;
+ __asm {@/
+ pushad@/
+ mov ebx,pte; // addr of thread stable[] of thread entries
+ mov esi,bit_map; // copy of bit map
+ mov edi,base_idx_for_thd_id_calc;@/
+scn_bits: bsf eax,esi; // aex: idx of bit, esi: copied map to search
+ jz end_of_scan; // map completely scanned
+ btr esi,eax; // clear the fnd bit in map esi: the bit map, eax: the fnd bit pos to turn off
+ add eax,edi; // calced thd id
+ mov edx,[ebx][eax*4];// fetch addr of thread entry
+ mov te,edx;// store the thread entry address
+}@/
+ Th_list.push_back(te);@/
+ __asm {@/
+ jmp scn_bits; // go scan more bits
+ }@/
+ end_of_scan:@/
+ __asm {@/
+ popad; // clean up the dodos
+ }
+
+
diff --git a/web/yacco2/library/tok_can.w b/web/yacco2/library/tok_can.w
new file mode 100644
index 0000000000..d7caeef3ff
--- /dev/null
+++ b/web/yacco2/library/tok_can.w
@@ -0,0 +1,1167 @@
+@q file: tok_can.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Token container structure, templates, and functions.\fbreak
+The 2 specialized containers |tok_can<AST*>| for tree walks and |tok_can<ifstream*>|
+for raw character fetching
+have been optimized to eliminate the ``jit'' fetching of token for speed reasons: elimination
+of read mutex.
+See ``Notes to myself'' on discussion.
+This leaves the |tok_can<string>| as unsafe.
+It is used internally by the library to GPS
+tokens against their opened files to line / character position.
+Sooooo, Be Ware the ....
+@(wtok_can.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<irc@>;
+@<ilrk@>;
+using namespace NS_yacco2_characters;
+@<uns@>;
+@<accrue |tok_can| code@>;
+
+@
+@<accrue |tok_can| code@>= // accrued |tok_can| code
+
+@*2 Sour Apple on template definition.\fbreak
+Circa December 2005, Apple \CPLUSPLUS/ gcc 4.0 compiler honks on
+preprocessing the |Tok_can| template definition.
+The template has not been instantiated but its
+prototype definition preprocessed into a holding source
+macro for future code substitution and compiling --- AKA instantiation.
+Unfortunately gcc 4.0 expects all prototype variables
+declared before
+preprocessing the template prototype takes place.
+For example variables |LOCK_MUTEX|, |UNLOCK_MUTEX|, |PTR_LR1_eog__|, and |YACCO2_T__|
+ in template |Tok_can| below aggravates the compiler and gave me a headache.
+All other \CPLUSPLUS/ compilers tried like
+ Intel \CPLUSPLUS/ 9.0, HP \CPLUSPLUS/ 6.x
+and 7.1 for VMS Alpha, and Microsoft's Visual Studio c++
+ 7.0 and 2005 all work.
+ Alas portability is extremely trying. Am i being bruised by
+ software savants? The work around is declare these items before the template definition.
+ See |Notes to myself| to their response and correct position to my perceived problem.
+@<Struct...@>+=
+extern void LOCK_MUTEX(yacco2::MUTEX& Mu);
+extern void UNLOCK_MUTEX(yacco2::MUTEX& Mu);
+extern
+void LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX& Mu,yacco2::Parser& parser,const char* Text);
+extern
+void UNLOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX& Mu,yacco2::Parser& parser,const char* Text);
+
+@*2 |Tok_can| template.\fbreak
+|tok_base| forces regularity across the |tok_can| containers.
+|wtok_can.cpp| for |tok_can| containers of ifstream, string, and tree.
+@<Struct...@>+=
+struct tok_base{
+ tok_base(USINT RW):r_w_cnt__(RW){};
+ virtual yacco2::UINT size()=0;
+ virtual yacco2::CAbs_lr1_sym* operator[](yacco2::UINT Pos)=0;
+ virtual void push_back(yacco2::CAbs_lr1_sym& Tok)=0;
+ virtual void clear()=0;
+ virtual bool empty()=0;
+ USINT r_w_cnt__;
+};@/
+
+template <typename Container>
+class tok_can:public tok_base{
+public:@/
+ typedef Container value_type;
+ typedef typename Container::size_type size_type;
+ typedef typename Container::difference_type difference_type;
+
+ typedef typename Container::iterator iterator;
+ typedef typename Container::const_iterator const_iterator;
+ typedef typename Container::reverse_iterator reverse_iterator;
+ typedef typename Container::const_reverse_iterator const_reverse_iterator;
+
+ typedef typename Container::pointer pointer;
+ typedef typename Container::const_pointer const_pointer;
+ typedef typename Container::reference reference;
+ typedef typename Container::const_reference const_reference;
+ tok_can():tok_base(1),pos__(0){};
+ ~tok_can(){};
+ yacco2::CAbs_lr1_sym* operator[](yacco2::UINT Pos){
+ if (Pos >= container__.size()){
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token eog: " @/
+ << PTR_LR1_eog__<< " pos: " << Pos << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+ return PTR_LR1_eog__;
+ }
+ CAbs_lr1_sym* tok_(0);
+ if(r_w_cnt__ > 1){
+ @<acquire token mu@>
+ tok_ = container__[Pos];
+ @<release token mu@>
+ }else{
+ tok_ = container__[Pos];
+ }
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token: " << tok_->id__ @/
+ << " *: " << tok_ << " pos: " << Pos@/
+ << " enum: " << tok_->enumerated_id__
+ << '"' << tok_->id__ << '"'
+ << FILE_LINE << std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(tok_)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << tok_->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << tok_->tok_co_ords__.pos_in_line__
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+ return tok_;
+};
+ yacco2::UINT pos(){return pos__;};
+ yacco2::UINT size(){return container__.size();};
+ bool empty(){return container__.empty();};
+ void push_back(yacco2::CAbs_lr1_sym& Tok){container__.push_back(&Tok);};
+ void remove(){};
+ void clear(){container__.clear();};
+ Container& container(){return container__;};
+ iterator begin(){return container__.begin();};
+ iterator end(){return container__.end();};
+ private:@/
+ yacco2::UINT pos__;
+ bool have_1st_rec__;
+ Container container__;
+};
+
+@*2 Specialized |tok_can| containers: ifstream and string. \fbreak
+They read character streams from external file or string contexts.
+The string container's contents can be added
+to dynamically (concatenated) using |set_string| procedure
+while parsing is taking place.
+The caveat is it must be before the end-of-string condition has been met.
+If a GPS token is passed to it at ctor creation time,
+the errors reported will be relative to the GPSed
+file. It tries hard to keep these co-ordinates relative to the spawning token
+who supplied the string: string new lines are not respected
+as this would throw off the error reporting relative the external file.
+|reuse_string| allows one to keep a global string token container and to reuse it.
+@<Struct...@>+=
+typedef tok_base token_container_type;@/
+
+typedef tok_can< std::vector <yacco2::CAbs_lr1_sym*> > GAGGLE;@/
+typedef GAGGLE::iterator GAGGLE_ITER;@/
+
+typedef GAGGLE TOKEN_GAGGLE;@/
+typedef GAGGLE_ITER TOKEN_GAGGLE_ITER;@/
+
+template<> class tok_can<std::ifstream>:public yacco2::tok_base{
+public:@/
+ tok_can();
+ tok_can(const char* File_name);
+ ~tok_can();
+ std::string& file_name();
+ void set_file_name(const char* File_name);
+ yacco2::CAbs_lr1_sym* operator[](yacco2::UINT Pos);
+ yacco2::UINT pos();
+ yacco2::UINT size();
+ bool empty();
+ void push_back(yacco2::CAbs_lr1_sym& Tok);
+ void remove();
+ void clear();
+ TOKEN_GAGGLE& container();
+ bool file_ok();
+ void open_file();
+ void close_file();
+ private:@/
+ std::ifstream file__;
+ yacco2::UINT pos_;
+ bool have_1st_rec__;
+ std::ios::int_type eof_pos_;
+ bool file_ok_;
+ UINT line_no__;
+ UINT pos_in_line__;
+ TOKEN_GAGGLE container__;
+ std::string file_name__;
+ yacco2::UINT file_no__;
+};
+
+template<> class tok_can<std::string>:public yacco2::tok_base{
+public:@/
+ tok_can();
+ tok_can(const char* String,CAbs_lr1_sym* GPS=0);
+ ~tok_can();
+ void set_string(const char* String);
+ void reuse_string(const char* String,CAbs_lr1_sym* GPS = 0);
+ yacco2::CAbs_lr1_sym* operator[](yacco2::UINT Pos);
+ yacco2::UINT pos();
+ yacco2::UINT size();
+ bool empty();
+ void push_back(yacco2::CAbs_lr1_sym& Tok);
+ void remove();
+ void clear();
+ TOKEN_GAGGLE& container();
+ std::string* string_used();
+ void set_gps(CAbs_lr1_sym* Gps);
+ yacco2::CAbs_lr1_sym* gps_used();
+ private:@/
+ std::string string__;
+ yacco2::UINT pos_;
+ bool have_1st_rec__;
+ std::ios::int_type eof_pos_;
+ UINT line_no__;
+ UINT pos_in_line__;
+ TOKEN_GAGGLE container__;
+ CAbs_lr1_sym* eof_sym_;
+ yacco2::UINT file_no__;
+ int real_start_pos_in_line_;
+ yacco2::CAbs_lr1_sym* gps__;
+};
+
+@*2 Tree container and its related paraphernalia.\fbreak
+There's the functor for the tree walker that includes the stack,
+a user functor that executes when the node is visited,
+a set filter mechanism to include or exclude node types, and the tree node itself.
+
+Filters are just sets of Tes enumerated ids of T vocabulary.
+All T types lr, rc, error, and T are allowed.
+A filter type of bypass or accept makes walking the trees easier in
+selecting T. A nil based filter implies all Tes are accepted.
+
+The tree walkers supported are pre and post fix, and various flavours of breadth walks.
+A forest walk refines the scope of the tree to be walked even though
+the forest node can be linked to the tree.
+
+Due to the nature of a binary tree, the infix tree walker is not supported.
+The tree structure is provided by the |AST| definition which is just a tree node
+wrapper for the grammar's vocabulary. Its content is abstracted to |CAbs_lr1_sym|
+as it has no psychic powers of the future grammar user.
+In tandom with the enumeration value of the abstracted symbol,
+the casting operator brings its out of the closet so-to-speak.
+Dominance is provided by the |lt_| link while |rt_| provides the
+equivalence link. To aid in walking the tree, the |pr_| link provides
+the backward link to its immediate caller.
+This link can be its older sibling, parent when its the first child, to nil when
+the node is the root of the tree.
+
+@<Struct...@>+=
+struct AST;
+struct ast_base_stack;@/
+typedef std::set<yacco2::INT> int_set_type;@/
+typedef int_set_type::iterator int_set_iter_type;@/
+typedef std::vector<yacco2::AST*> ast_vector_type;@/
+typedef std::vector<yacco2::INT> ast_accept_node_type;@/
+typedef enum{bypass_node,accept_node,stop_walking} functor_result_type;@/
+typedef ast_vector_type Type_AST_ancestor_list;
+template <class T> struct ast_functor{
+ virtual functor_result_type operator()(T Ast_env)=0;
+};@/
+
+typedef ast_functor<yacco2::ast_base_stack* > Type_AST_functor;@/
+struct ast_base_stack{
+ typedef enum n_action{init,left,visit,right,eoc} n_action_;
+ struct s_rec{
+ AST* node_;
+ n_action_ act_;
+ };
+ ast_base_stack();
+ ast_base_stack(Type_AST_functor* Action,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ s_rec* stk_rec(yacco2::INT I);
+ void pop();
+ void push(AST& Node,ast_base_stack::n_action Action);
+ yacco2::INT cur_stk_index();
+ s_rec* cur_stk_rec();
+ yacco2::INT idx_;// index
+ std::vector<s_rec> stk_;
+ Type_AST_functor* action_;
+ s_rec* cur_stk_rec_;
+ yacco2::int_set_type* filter_;
+ bool accept_opt_;
+};
+
+struct ast_stack{
+ ast_stack(Type_AST_functor* Action,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ ast_base_stack base_stk_;
+ virtual void exec()=0;
+ virtual void advance()=0;
+};
+
+@*2 Tree node definition |AST|.\fbreak
+Note on linkages:\fbreak
+\ptindent{1) lt parent to son relationship: dominant order}
+\ptindent{2) rt older to younger relationship: equivalence order}
+\ptindent{3) pr points to previous older brother or parent}
+The ``pr'' relationship provides a backward link in the tree.
+It's just a pointer to an older node in the tree:
+a younger brother linking to its older brother or
+the 1st son linking to its parent.
+A dink node (double income no kids) would have lt null: no kids.
+Within its surrounding, A dink node could still be a son or a forest.
+
+
+@<Struct...@>+=
+struct AST{
+ AST(yacco2::CAbs_lr1_sym& Obj);
+ AST();
+ ~AST();
+static AST* restructure_2trees_into_1tree(AST& S1,AST& S2);
+static void crt_tree_of_1son(AST& Parent,AST& S1);
+static void crt_tree_of_2sons(AST& Parent,AST& S1,AST& S2);
+static void crt_tree_of_3sons(AST& Parent,AST& S1,AST& S2,AST& S3);
+static void crt_tree_of_4sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4);
+static void crt_tree_of_5sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4,AST& S5);
+static void crt_tree_of_6sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4,AST& S5,AST& S6);
+static void crt_tree_of_7sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4,AST& S5,AST& S6
+,AST& S7);
+static void crt_tree_of_8sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4,AST& S5
+,AST& S6,AST& S7,AST& S8);
+static void crt_tree_of_9sons(AST& Parent,AST& S1,AST& S2,AST& S3,AST& S4,AST& S5
+,AST& S6,AST& S7,AST& S8,AST& S9);
+static void join_pts(AST& Parent,AST& Sibling);
+static void join_sts(AST& Elder_sibling,AST& Younger_sibling);
+static void ast_delete(AST& Node,bool Due_to_abort=false);
+static AST* find_depth(AST& Node,yacco2::INT Enum);
+static AST* find_breadth(AST& Node,yacco2::INT Enum);
+static yacco2::CAbs_lr1_sym* content(AST& Node);
+static AST* get_1st_son(AST& Node);
+static AST* get_2nd_son(AST& Node);
+static AST* get_3rd_son(AST& Node);
+static AST* get_4th_son(AST& Node);
+static AST* get_5th_son(AST& Node);
+static AST* get_6th_son(AST& Node);
+static AST* get_7th_son(AST& Node);
+static AST* get_8th_son(AST& Node);
+static AST* get_9th_son(AST& Node);
+static AST* get_spec_child(AST& Tree,yacco2::INT Cnt);
+static AST* get_child_at_end(AST& Tree);
+static AST* add_child_at_end(AST& Tree,AST& Child);
+static AST* get_younger_sibling(AST& Child,yacco2::INT Pos);
+static AST* get_older_sibling(AST& Child,yacco2::INT Pos);
+static AST* get_youngest_sibling(AST& Child);
+static AST* get_parent(AST& Child);
+static AST* common_ancestor@/
+ (Type_AST_ancestor_list& ListA,Type_AST_ancestor_list& ListB);
+
+static AST* brother(AST& Node);
+static AST* previous(AST& Node);
+static void zero_1st_son(AST& Node);
+static void zero_2nd_son(AST& Node);
+static void zero_brother(AST& Node);
+static void zero_previous(AST& Node);
+static void zero_content(AST& Node);
+static void set_content(AST& Node,yacco2::CAbs_lr1_sym& Sym);
+static void set_content_wdelete(AST& Node,yacco2::CAbs_lr1_sym& Sym);
+static void set_previous(AST& Node,AST& Previous_node);
+static void wdelete(AST& Node,bool Wdelete);
+static bool wdelete(AST& Node);
+static void replace_node(AST& Old_to,AST& New_to);
+static void relink(AST& Previous,AST& Old_to,AST& New_to);
+static void relink_between(AST& Previous,AST& Old_to,AST& New_to);
+static void relink_after(AST& Previous,AST& New_to);
+static void relink_before(AST& Previous,AST& New_to);
+static void add_son_to_tree(AST& Parent,AST& Son);
+static AST* divorce_node_from_tree(AST& Node);
+static AST* clone_tree(AST& Node_to_copy,AST* Calling_node
+,ast_base_stack::n_action Relation=ast_base_stack::init);
+ AST* lt_;
+ AST* rt_;
+ AST* pr_;// caller who links to it
+ yacco2::CAbs_lr1_sym* obj_;
+ bool wdelete_;
+};
+
+@*2 Tree |tok_can <AST*>| container with accept / bypass |filters|.\fbreak
+The interesting part is use of the |int_set_type| filter and its companion
+|Accept_opt| in the constructor of the |tree_walker|.
+The |int_set_type| filter just contains
+the Terminal enumerations to either accept or bypass.
+If these parameters are defaulted, there is no |int_set_type|
+filter present so the complete tree is handed off for consumption
+of each node's content.
+Having |Accept_opt| {\bf true} means accept only the items in the set
+while {\bf false} means bypass the items found in the filter
+set when the tree is walked.
+This is a very powerful way to flatten a branching structure.
+
+Please note |nodes_visited_| holds the terminals accepted by the filter in the
+traversal order.
+It is an array of |AST*|.
+To access a token's tree node, u need the container address.
+If a grammar is receiving its terminals by a walked tree,
+casting the container address to |tok_can<yacco2::AST*>*| allows one
+to access the container's tree node vector: |nodes_visited()|.
+The below code fetches the container's address from a piece of
+syntax~directed~code of a grammar's rule:\fbreak
+\ptindent{|tok_can<AST*>* can = (tok_can<AST*>*)parser()->token_supplier();|}
+To fetch a specific tree node of a token, u can use the container's ast function
+giving it the position within the container: Remember its relative to 0.
+For example u want to fetch the tree node associated with the 1st token
+using the above container:\fbreak
+\ptindent{|AST* first_tok_tree = can->ast(0);|}
+The other note is a shifted token on the parse stack is {\bf not the current token}.
+Why? The current token is the lookahead token and the one u want is on parse stack!
+Here is a sample code snippet to get the shifted token's tree address
+using the above container with another way to fetch its tree:\fbreak
+\ptindent{|AST* t = (*can->nodes_visited())[parser()->current_token_pos()-1];|}
+Why use parser's |current_token_pos()| instead of the container's |pos()|?
+Good question: they are equivalent except when one is reusing
+the container to deliver tokens to another grammar.
+The recycled container's pos
+{\bf contains the residue from the previous reads: its last token position}.
+Ugh but this is reality.
+The sundry tree routines can now be used to walk or
+fetch the contents of the local tree node.
+\fbreak
+\fbreak
+{\bf Caveat: EOG Handling.}\fbreak
+Make sure u add an |eog| node to the end of the tree so
+that proper end-of-tree handling is done.
+U do this by:\fbreak
+\ptindent{|AST* eog_t = new AST(*yacco2::PTR_LR1_eog__);|}
+\ptindent{then add the node to the end-of-the-tree using one of the tree linking routines}
+\fbreak
+If it is not added, an |eog| token is returned but there is no associated tree node.
+So the last token read is not the lookahead but the previous (shifted) token.
+If u are using an accept filter, make sure the |eog| is included in the accept set
+so that |eog| gets its associated end-of-tree node.
+Please see ``Tree containers, functors, and walkers''
+later in this document for their descriptions.
+\fbreak
+\fbreak
+{\bf Another way to access the container and its contents.}\fbreak
+Set up a filter and ``for loop'' the container to fill it up
+while the body of the for loop can done specific activity.
+This method can be done outside of the parsing activity
+or within ``syntax directed code'' of a grammar.
+Just give the tree and rip thru it using the filter.
+\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/tokcanaccess.txt"}
+\fbreak
+\let\setuplistinghook = \relax
+\fbreak
+@<Struct...@>+=
+template<> class tok_can<yacco2::AST*>:public yacco2::tok_base{
+public:@/
+ tok_can
+ (ast_stack& Walker);
+ ~tok_can();
+
+ yacco2::CAbs_lr1_sym* operator[](yacco2::UINT Pos);
+ yacco2::UINT pos();
+ yacco2::UINT size();
+ bool empty();
+ void push_back(yacco2::AST& Node);
+ void push_back(yacco2::CAbs_lr1_sym& Node);
+ void remove();
+ void clear();
+ yacco2::ast_stack& container();
+
+std::vector<yacco2::AST*>* nodes_visited();
+
+yacco2::AST* ast(yacco2::UINT Pos);
+
+yacco2::INT accept_node_level(yacco2::UINT Pos);
+
+private:@/
+ volatile yacco2::UINT pos_;
+ bool have_1st_rec__;
+ bool tree_end_reached__;
+ yacco2::ast_vector_type nodes_visited_;
+ yacco2::ast_accept_node_type accept_node_level_;
+ yacco2::ast_stack& traverse_;
+};
+
+@*2 String |tok_can<std::string>| implementation.
+@<accrue |tok_can| code@>+=
+yacco2::tok_can<std::string>::tok_can()
+ :tok_base(1)
+ ,pos_(0)
+ ,have_1st_rec__(false)
+ ,file_no__(MAX_USINT)
+ ,line_no__(START_LINE_NO)
+ ,pos_in_line__(START_CHAR_POS)
+ ,string__(std::string())
+ ,eof_sym_(0)
+ ,real_start_pos_in_line_(START_CHAR_POS)
+ ,eof_pos_(0)
+ ,gps__(0)
+{}
+
+yacco2::tok_can<std::string>::tok_can(const char* String,CAbs_lr1_sym* GPS)@/
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,file_no__(MAX_USINT)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,string__(String)
+,eof_sym_(0)
+,real_start_pos_in_line_(START_CHAR_POS)
+,eof_pos_(0)
+,gps__(GPS)
+{
+if(GPS == 0) return;
+line_no__ = GPS->tok_co_ords__.line_no__;
+pos_in_line__ = GPS->tok_co_ords__.pos_in_line__;
+file_no__ = GPS->tok_co_ords__.external_file_id__;
+real_start_pos_in_line_ = pos_in_line__;
+}
+
+void yacco2::tok_can<std::string>::set_gps(CAbs_lr1_sym* GPS){
+ gps__ = GPS;
+ if(GPS == 0) return;
+ line_no__ = GPS->tok_co_ords__.line_no__;
+ pos_in_line__ = GPS->tok_co_ords__.pos_in_line__;
+ file_no__ = GPS->tok_co_ords__.external_file_id__;
+ real_start_pos_in_line_ = pos_in_line__;
+}
+yacco2::CAbs_lr1_sym* yacco2::tok_can<std::string>::gps_used(){
+ return gps__;
+}
+
+yacco2::tok_can<std::string>::~tok_can(){}
+
+bool yacco2::tok_can<std::string>::empty(){
+if(string__.empty() == true) return YES;
+ return NO;
+}
+void yacco2::tok_can<std::string>::reuse_string(const char* Str,CAbs_lr1_sym* GPS){
+ string__.erase();
+ string__ += Str;
+ file_no__ = MAX_USINT;
+ line_no__ = START_LINE_NO;
+ pos_in_line__ = START_CHAR_POS;
+ eof_sym_ = 0;
+ real_start_pos_in_line_ = START_CHAR_POS;
+ eof_pos_ = 0;
+ if(GPS == 0) return;
+ set_gps(GPS);
+}
+
+@*2 |Tok_can<string,std::vector>operator[]|.\fbreak
+ This is the heart of the container.
+Three things are of interest: the just-in-time character access, the 2 ``eog''
+token symbols added to the end-of-file condition,
+and how to report errors inside the string relative to
+the file that provided the string:
+its contents cannot increment new line with character alignment.
+Why? When u report an error back to the original
+file containing the string, it is GPSed to it
+and not its contents.
+The string's line number stays the same while the
+line position increments towards the right without regard to the new line character.
+ This allows the container
+to be handled like its brethern within the grammar context.
+Note: |map_char_to_raw_char_sym| maintains the line:character segmentation
+as the string is being read and so must be re-aligned afterwards.
+The file no reference to the outside source is hardwired using the MAX\_USINT symbol
+when
+there is possibly no outside file referenced: eg, internal memory string for the parsing.
+ A bit of a kludge (ahum) as this condition
+goes against the 0..n declaration for external file numbers.
+This is watched for when the external file out-of-bounds occurs:
+reported is ``No external file''.
+@<accrue |tok_can| code@>+=
+yacco2::CAbs_lr1_sym* yacco2::tok_can<std::string>::operator[](yacco2::UINT Pos){
+ CAbs_lr1_sym* sym(0);
+ if(eof_pos_ == EOF) return eof_sym_;
+fetch_char:@/
+if(have_1st_rec__ == false){
+ have_1st_rec__ = true;
+ pos_ = 0;
+}else{
+ if(Pos <= pos_){
+ return container__[Pos];
+ }
+ ++pos_;
+}
+if(r_w_cnt__ > 1){
+ @<acquire token mu@>
+}
+for(;;){// fetch token somewhere in char stream
+ char c;
+ if(pos_ >= string__.size()){// eof: add two lrk eog
+ eof_pos_ = EOF;
+ ++pos_;// 2nd eog pos, same token used
+ sym = RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+ ,&line_no__,&pos_in_line__);
+ eof_sym_ = sym;
+ container__.push_back(*sym);
+ container__.push_back(*sym);
+ return sym;
+ }
+ c = string__[pos_];
+convert_char_to_unsigned_value:@/
+ unsigned char uc = c;
+ UINT slno = line_no__;
+ sym = RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+ if(gps__ != 0){// re-align against the proxy token
+ line_no__ = slno;
+ pos_in_line__=real_start_pos_in_line_+pos_;
+ }
+ container__.push_back(*sym);
+ if(Pos == pos_) break;
+ ++pos_;
+ continue;
+};
+if(r_w_cnt__ > 1){
+ @<release token mu@>
+}
+ return sym;
+}
+@*2 |Tok_can<string>|size.
+@<accrue |tok_can| code@>+=
+yacco2::UINT yacco2::tok_can<std::string>::size(){
+ return string__.size();
+}
+
+@*2 Balance of sundry routines.
+@<accrue |tok_can| code@>+=
+yacco2::UINT yacco2::tok_can<std::string>::pos(){return pos_;}
+
+void yacco2::tok_can<std::string>::push_back(yacco2::CAbs_lr1_sym& Tok){
+container__.push_back(Tok);
+}
+
+void yacco2::tok_can<std::string>::clear(){container__.clear();
+ pos_=0;
+ have_1st_rec__=false;
+ file_no__=MAX_USINT;
+ line_no__=START_LINE_NO;
+ pos_in_line__=START_CHAR_POS;
+ string__.clear();
+ eof_sym_=0;
+ real_start_pos_in_line_=START_CHAR_POS;
+ eof_pos_ = 0;
+ gps__ = 0;
+}
+
+TOKEN_GAGGLE& yacco2::tok_can<std::string>::container(){
+ return container__;
+}
+
+void tok_can<std::string>::remove(){}
+
+void yacco2::tok_can<std::string>::set_string(const char* String){
+ string__ += String;
+ }
+
+std::string* yacco2::tok_can<std::string>::string_used(){return &string__;};
+
+
+@*2 External file |tok_can<std::ifstream>| implementation.\fbreak
+Removed the ``jit'' approach and now at |open_file|
+time the complete input is placed into the container.
+See ``Notes to myself'' on its discussion.
+@<accrue |tok_can| code@>+=
+yacco2::tok_can<std::ifstream>::tok_can()
+ :tok_base(1)
+ ,pos_(0)
+ ,have_1st_rec__(false)
+ ,eof_pos_(EOF)
+ ,file_ok_(NO)
+ ,line_no__(START_LINE_NO)
+ ,pos_in_line__(START_CHAR_POS)
+ ,file_name__(std::string())
+{}
+
+yacco2::tok_can<std::ifstream>::tok_can(const char* File_name)@/
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,eof_pos_(EOF)
+,file_ok_(NO)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,file_name__(File_name)
+{
+ open_file();
+}
+
+yacco2::tok_can<std::ifstream>::~tok_can(){
+ if(file_ok_ == YES)
+ file__.close();
+}
+
+bool yacco2::tok_can<std::ifstream>::empty(){
+if(have_1st_rec__ == false) return YES;
+ return NO;
+}
+
+@*2 |File_ok|.\fbreak
+ By testing after the ctor has tried to open the file,
+one can do whatever is appropriate in a bad file situation. Originally a bad file
+condition was thrown. Now it's more gentle.
+@<accrue |tok_can| code@>+=
+bool yacco2::tok_can<std::ifstream>::file_ok(){
+ return file_ok_;
+}
+
+@*2 |Tok_can<ifstream,std::vector>operator[]|.\fbreak
+ This is the heart of the container.
+Two things are of interest: the just-in-time character access, and the 2 ``eog''
+token symbols added to the end-of-file condition. This allows the container
+to be handled like its brethern within the grammar context.
+Note: |map_char_to_raw_char_sym| maintains the line:character segmentation
+as the file is being read.
+@<accrue |tok_can| code@>+=
+yacco2::CAbs_lr1_sym* yacco2::tok_can<std::ifstream>::operator[](yacco2::UINT Pos){
+ if(file_ok_ == NO){
+ char a[BUFFER_SIZE];
+@.Err tok\_can<ifstream>operator[]...@>
+ yacco2::KCHARP msg =
+ "tok_can<ifstream>operator[] trying to access file that is bad: %s, position %i ";
+ sprintf(a,msg,file_name__.c_str(),Pos);
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+
+ CAbs_lr1_sym* sym(0);
+ if(eof_pos_ == EOF && Pos >= pos_){
+ return container__[pos_];
+ }
+fetch_char:@/
+if(have_1st_rec__ == false){
+ have_1st_rec__ = true;
+ pos_ = 0;
+}else{
+ if(Pos <= pos_){
+ return container__[Pos];
+ }
+ ++pos_;
+}
+if(r_w_cnt__ > 1){
+ @<acquire token mu@>
+}
+for(;;){// fetch token somewhere in char stream
+ char c;
+ file__ >> c;
+ if((file__.good() == false) or (file__.eof() == true)){// eof: add two lrk eog
+ eof_pos_ = EOF;
+ ++pos_;// 2nd eog pos, same token used
+ sym = RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+ ,&line_no__,&pos_in_line__);
+ container__.push_back(*sym);
+ container__.push_back(*sym);
+ return sym;
+ }
+convert_char_to_unsigned_value:@/
+ unsigned char uc = c;
+ sym = RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+ container__.push_back(*sym);
+ if(Pos == pos_) break;
+ ++pos_;
+ continue;
+};
+if(r_w_cnt__ > 1){
+ @<release token mu@>
+}
+ return sym;
+}
+@*2 |Tok_can<ifstream>|size.\fbreak
+ Due to the just-in-time attitude, the container's
+size has no meaning. Its size indicates the number of symbols currently in-process
+ and not the total number of characters in the file stream.
+I guess I could try to use the file system to figure out its
+size but I'm not sure if this is portable as
+in the case of line delimiters: DEC versus ASCII.
+So, just fake it and allow the end-of-file situation deal with it.
+Use of the ``maximum signed integer'' constant does the trick in faking it as
+a very big text file. Who in their mind would create 2 billion characters?:
+ahhh wait for the XML crowd.
+
+Now who in hell uses this test? My parser does in accessing
+the token containers by use of the constraint facility testing for
+possible subscript overflow.
+@<accrue |tok_can| code@>+=
+yacco2::UINT yacco2::tok_can<std::ifstream>::size(){
+ return INT_MAX;
+}
+
+@*2 |tok_can<std::ifstream>::open_file|.\fbreak
+This routine allows one to delay the use of an external file
+by declaring the container without the file name.
+Before its use, the file name is supplied by the |set_file_name| method and then
+the |open_file| method called. For example the container could be
+declared globally but one supplies the file to-be-read as in passing the file name thru
+the program's main parameter facility.
+Removed the ``jit'' attitude and now read all its input into the container for speeeeed
+reasons --- this is not a William Borough's novel.
+@<accrue |tok_can| code@>+=
+void yacco2::tok_can<std::ifstream>::open_file(){
+ CAbs_lr1_sym*sym(0);
+open_file:@/
+ file__.open(file_name__.c_str(),std::ios::in);
+ if(file__.is_open())goto filename_opened;
+ else goto filename_bad;
+
+filename_opened:{@/
+ file_ok_= YES;
+ ++yacco2::FILE_CNT__;
+ have_1st_rec__= true;
+ pos_= 0;
+ if(yacco2::FILE_CNT__==1){
+ std::string empty;
+ yacco2::FILE_TBL__.push_back(empty);
+ }
+ yacco2::STK_FILE_NOS__.push_back(yacco2::FILE_CNT__);
+ file_no__= yacco2::STK_FILE_NOS__.back();
+ yacco2::FILE_TBL__.push_back(file_name__);
+ eof_pos_= 0;
+set_dont_skip_any_chars:@/
+ file__>>std::noskipws;
+ for(;eof_pos_!=EOF;++pos_){
+ char c;
+ if (file__.good() == true){
+ file__>>c;
+ }
+ if (file__.eof()==true) goto eoroad;
+ if (file__.fail()==true) goto eoroad;
+ convert_char_to_unsigned_value:
+ unsigned char uc= c;
+ sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+ container__.push_back(*sym);
+ }
+}
+filename_bad:{@/
+ eof_pos_= EOF;
+ file_ok_= NO;
+ return;
+}
+eoroad:{@/
+ eof_pos_= EOF;
+ ++pos_;
+ sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+ ,&line_no__,&pos_in_line__);
+ container__.push_back(*sym);// 2 eof added really 2 eogs
+ container__.push_back(*sym);
+ return;
+}
+
+}
+@*2 |tok_can<std::ifstream>::close_file|.\fbreak
+This routine allows one close a file prematurely or to
+reuse the token container for another round of parsing.
+@<accrue |tok_can| code@>+=
+void yacco2::tok_can<std::ifstream>::close_file(){
+ if(file__.is_open()){
+ if(file_ok_ == YES){
+ file__.close();
+ }
+ }
+ file_ok_ = false;
+}
+
+@*2 Balance of sundry routines.
+@<accrue |tok_can| code@>+=
+yacco2::UINT yacco2::tok_can<std::ifstream>::pos(){return pos_;}
+
+void yacco2::tok_can<std::ifstream>::push_back(yacco2::CAbs_lr1_sym& Tok){
+container__.push_back(Tok);
+}
+
+void yacco2::tok_can<std::ifstream>::clear(){
+ container__.clear();
+ pos_=0;
+ have_1st_rec__=false;
+ eof_pos_=EOF;
+ file_ok_=NO;
+ line_no__=START_LINE_NO;
+ pos_in_line__=START_CHAR_POS;
+ file_name__.clear();
+}
+
+TOKEN_GAGGLE& yacco2::tok_can<std::ifstream>::container(){
+ return container__;
+}
+
+void yacco2::tok_can<std::ifstream>::remove(){}
+
+std::string& yacco2::tok_can<std::ifstream>::file_name(){return file_name__;}
+
+void yacco2::tok_can<std::ifstream>::set_file_name(const char* File_name){
+ file_name__ += File_name;
+ }
+
+@*2 Tree token container implementation |tok_can<AST*>|.\fbreak
+This is your tree container of tokens.
+A filter mechanism is passed to the template.
+It is just a set of terminal enumerates with it companion indicator
+of include or exclude the terminals in the tree traversal within the tree walker.
+
+The traversal operator also keeps a subscript marker as to where its traversed.
+This allows one to interrogate the container
+for a token without having to re-traverse the tree.
+Excuse the acronym but it is a just-in-time delivery mechanism.
+If the subscript is within bounds of the container,
+it delivers the already traversed tree's token.
+Out-of-bounds will continue the tree traversal looking for the requested token-by-number.
+If the token number is not continuous, the container gets filled up with the inbetween
+tokens found in the traversal before returning the requested terminal.
+When the end-of-tree has been met, the |PTR_LR1_eog__|
+terminal is returned. This is in keeping with the other containers.
+\fbreak
+\fbreak
+Optimization: remove jit for all input filled in at ctor.\fbreak
+This jit optimization is removed due to self modifying of tree nodes.
+Without this the old container that called the self modifying of a tree node contains
+the old T in its container.
+So in with the reader mutex and its slow down and out with the speed for self modifying tree nodes.
+Please read ``Notes to myself'' of item ''Tree Modifying while walking them...''
+discussing the ``how tos'' of dealing with dynamic self-modifying tree setting.
+@<accrue |tok_can| code@>+=
+yacco2::tok_can<yacco2::AST*>::
+tok_can
+ (yacco2::ast_stack& Walker)@/
+ :tok_base(1)@/
+ ,pos_(0)@/
+ ,have_1st_rec__(false)@/
+ ,tree_end_reached__(false)@/
+ ,nodes_visited_()@/
+ ,accept_node_level_()@/
+ ,traverse_(Walker){
+operator[](0);// needed: ensures container has tried to get first T before its use
+}
+
+yacco2::tok_can<yacco2::AST*>::
+ ~tok_can(){}
+
+bool yacco2::tok_can<yacco2::AST*>::
+empty(){
+ return nodes_visited_.empty();
+ }
+
+void yacco2::tok_can<yacco2::AST*>::
+clear(){nodes_visited_.clear();}
+
+@*2 Tree container dispensor.\fbreak
+It delivers tokens by the numbers. At present, this number is relative to 0. Ugh!\fbreak
+\fbreak
+If the tree node number is within the token container then return it.
+For token numbers outside the current container, the tree is traversed putting
+the accepted tokens into the container until either the end-of-tree is reached or the
+token requested is found.
+The container of tokens allows one to re-iterate many times over the token stream. It
+also optimizes the token stream by one-pass-only on the tree.
+An end-of-tree condition returns the |PTR_LR1_eog__| token back to the user.
+This is in the same spirit of the other token containers.
+It allows grammars to be written without any knowledge as to its input token stream.
+@<accrue |tok_can| code@>+=
+yacco2::CAbs_lr1_sym*
+yacco2::tok_can<yacco2::AST*>::
+operator[](yacco2::UINT Pos){
+ AST* t;
+ CAbs_lr1_sym* tsym;
+ AST* vnode;
+ CAbs_lr1_sym* sym;
+ ast_base_stack::s_rec* srec;
+ if(tree_end_reached__ == true){
+ if(Pos < pos_) goto in_bnds;
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token eog: " @/
+ << PTR_LR1_eog__<< " pos: " << Pos << __FILE__ << __LINE__<< std::endl;
+ @<release trace mu@>;
+ }
+ sym = PTR_LR1_eog__;
+ goto rtn_fnd_T;
+ }
+first_time_accessed:@/
+ if(have_1st_rec__ == false){
+ have_1st_rec__ = true;
+ goto out_bnds;
+ }
+determine_where_t_is:
+ if(Pos <= pos_){// already in container
+ goto in_bnds;
+ }
+ ++pos_;// next node
+ goto out_bnds;
+in_bnds:@/
+ @<fetch and return token from container instead of tree@>;
+out_bnds:@/
+ if(r_w_cnt__ > 1){
+ @<acquire token mu@>
+ }
+get_tree_rec:{
+ @<traverse tree@>;
+ @<end of traverse reached? yes rtn@>;
+ @<put node in container@>;
+ if(Pos == pos_) goto rtn_fnd_T;
+ ++pos_;
+ goto get_tree_rec;// keep filling container until Pos met
+}
+rtn_fnd_T:@/
+ if(r_w_cnt__ > 1){
+ @<release token mu@>;
+ }
+ return sym;
+}
+
+@ Fetch and return token from container instead of tree.\fbreak
+Prefetch next T and place in container
+when the current request is on its boundry and parallel readers are occuring.\fbreak
+Ip constraint: The sequential request always has the T inside its container.\fbreak
+Random request: Who'll need it?
+If it happens, the container's suitor count is checked and protected
+with a mutex.
+@<fetch and return token from container instead of tree@>=
+ t = nodes_visited_[Pos];
+ tsym = AST::content(*t);
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can in-bnds already in container token: " << tsym->id__ @/
+ << " *: " << tsym << " pos: " << Pos << " id: " << tsym->id__<< " enum: "
+ << tsym->enumerated_id__
+ << FILE_LINE << std::endl;
+ yacco2::lrclog
+ << "\t\t::GPS FILE: ";
+EXTERNAL_GPSing(tsym)
+ yacco2::lrclog
+ << " GPS LINE: "
+ << tsym->tok_co_ords__.line_no__
+ << " GPS CHR POS: "
+ << tsym->tok_co_ords__.pos_in_line__
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+@<lookahead T needed? no rtn fnd t@>;
+
+@ Lookahead T needed? no rtn fnd t.\fbreak
+Lookahead is only needed when parallel reads are happening.
+If there is only one reader, it is always safe and can default to ``jit'' access.
+@<lookahead T needed? no rtn fnd t@>=
+ if(r_w_cnt__ == 1) return tsym;// no parallel suitors
+ if(Pos < pos_) return tsym;// not on the edge
+ @<acquire token mu@>
+ if(tree_end_reached__ == true){// ure parallel phatom got here before u
+ }else{
+ if(Pos == pos_){// still needed as the other suitor could have looked ahead
+ ++pos_;
+ @<traverse tree@>;
+ @<end of traverse reached for lookahead? no put T in container@>;
+ }
+ }
+ @<release token mu@>
+ return tsym;
+
+@ End of traverse reached for lookahead?.
+@<end of traverse reached for lookahead? no put T in container@>=
+ if(tree_end_reached__ != true){// test for other consumer's action
+ srec = traverse_.base_stk_.cur_stk_rec_;
+ if(srec == 0){
+ tree_end_reached__ = true;
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token eog: " @/
+ << PTR_LR1_eog__<< " pos: " << pos_ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+ }else{
+ @<put node in container@>;
+ }
+ }
+
+@ Traverse tree.
+@<traverse tree@>=
+ traverse_.exec();
+
+@ End of traverse reached?.
+@<end of traverse reached? yes rtn@>=
+ srec = traverse_.base_stk_.cur_stk_rec_;
+ if(srec == 0){
+ tree_end_reached__ = true;
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token eog: " @/
+ << PTR_LR1_eog__<< " pos: " << pos_ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+ sym = PTR_LR1_eog__;// end-of-tree
+ goto rtn_fnd_T;
+ }
+
+@ Put node in container.
+@<put node in container@>=
+ vnode = traverse_.base_stk_.cur_stk_rec_->node_;
+ sym = AST::content(*vnode);
+ accept_node_level_.push_back(traverse_.base_stk_.idx_);
+ nodes_visited_.push_back(vnode);
+ if(YACCO2_T__ != 0){
+ @<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::tok_can token: " << sym->id__ @/
+ << " *: " << sym << " pos: " << pos_
+ << " requested pos: " << Pos
+ << " node*: " << vnode
+ << " node content*: " << AST::content(*vnode)
+ << FILE_LINE << std::endl;
+ @<release trace mu@>;
+ }
+
+@*2 Balance of tree container routines.
+@<accrue |tok_can| code@>+=
+yacco2::UINT
+yacco2::tok_can<yacco2::AST*>::
+pos(){return pos_;}
+
+yacco2::UINT
+yacco2::tok_can<yacco2::AST*>::
+size(){
+ if(tree_end_reached__ == true){
+ return nodes_visited_.size();
+ }
+ return MAX_UINT;
+ }
+
+void
+yacco2::tok_can<yacco2::AST*>::
+push_back(AST& Tok_ast){
+ nodes_visited_.push_back(&Tok_ast);
+ ++pos_;
+ }
+void
+yacco2::tok_can<yacco2::AST*>::// defed due to template
+push_back(yacco2::CAbs_lr1_sym& Node){} // but not meaningful in tree context
+
+yacco2::ast_stack&
+yacco2::tok_can<yacco2::AST*>::
+container(){
+ return traverse_;
+ }
+
+std::vector<AST*>*
+yacco2::tok_can<yacco2::AST*>::
+ nodes_visited(){
+ return &nodes_visited_;
+ }
+
+void
+yacco2::tok_can<yacco2::AST*>::
+remove(){
+ nodes_visited_.pop_back();
+ --pos_;
+}
+
+yacco2::AST*
+yacco2::tok_can<yacco2::AST*>::
+ast(yacco2::UINT Pos){
+ if(Pos > pos_) return 0;
+ return nodes_visited_.operator[](Pos);
+ }
+
+yacco2::INT
+yacco2::tok_can<yacco2::AST*>::
+accept_node_level(yacco2::UINT Pos){
+ if((accept_node_level_.size() - 1) < Pos) return No_Token_start_pos;
+ return accept_node_level_.operator[](Pos);
+ }
+
+
diff --git a/web/yacco2/library/tree.w b/web/yacco2/library/tree.w
new file mode 100644
index 0000000000..60e726506b
--- /dev/null
+++ b/web/yacco2/library/tree.w
@@ -0,0 +1,2071 @@
+@q file: tree.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+@** Tree containers, functors, and walkers.\fbreak
+The |AST| structure allows one to build tree structures where each node
+enrobes a terminal symbol's address.
+Each node contains a left link representing dominance: parent to child relation, a right link
+representing equivalence: siblings or brothers --- your preference of terminology,
+and a previous link representing
+an older node; this can be nil as the node is the root, an older brother,
+or a parent as the node is the oldest child. The previous link depends on
+where within the tree the node sits.
+The left and right links can be nil indicating no children, or no younger brothers.
+
+To support the creation and walking of the trees,
+various static procedures are available.
+There are 2 tree walkers: prefix and postfix.
+The way the tree is built, there is no infix walker!
+The balance of the walkers are variants on these 2
+that have restrictions on how much of the tree is to be read.
+Restriction 1: the node is a forest where pre and post fix walks
+are done --- though the node can be
+linked with brothers, as a forest it stays within its bounds.
+Restriction 2: breadth only walk --- walk self and younger brothers.
+Restriction 3: prefix with breadth only ---
+the node is considered a parent; walk itself and its immediate children.
+
+The container has 3 parts: the container of tokens that match
+the filtering mechanism, the parts
+needed to walk the tree, and a token access mechanism. As an optimization, the
+token access determines whether the requested token-by-number is in the container.
+This allows one to iterate randomly a tree structure. The tree walker linearizes
+the token stream. It uses a finite automaton with 5 elements
+in its alphabet: init, left, right, visit, eoc.
+These represent how the node has been processed.
+The left and right elements indicate that
+the dominance or equivalence link is being followed.
+The init, visit, and eoc are states on how the node was processed.
+Originally, the initial access of the node represented by `init',
+and the end of the node access before it is popped from the stack
+ represented by `eoc' allowed the user to fine tune the walker's behavior but this was
+overkill.
+The `visit' state breaks out of the tree traversal and allows one to deal with the situation.
+Each tree walker implements these states in their `exec' and `advance' methods.
+To control the tree traversal, a stack is used due to the type of control needed to
+break out of the traversal.
+Recursion does not allow one to do this due to its implicit call stack and continuous
+behavior as opposed to discrete stepwise logic.
+The only difference to iterating the tree container versus the other token containers is
+a tree container can only be accessed by token-number. There is no STL type iterator.
+One accesses the container by its `operator[]' method iterating by the numbers
+started by 0. Ugh. To break out of the iteration, the returned terminal is tested against
+the |LR1_eog| terminal indicating end-of-tree met.
+
+A functor mechanism is available to capture info at time of the visited node.
+It can be a stand alone behaviour or
+it could be used in conjunction with
+a grammar. For example if a tree's node is being printed
+by use of a grammar, the recursion level count must be maintained by
+the functor and used by the grammar's subrule. Why not process the
+recursion count at the time of the grammar's subrule reduction?
+Remember: the lookahead terminal to reduce the subrule is the current
+stack configuration that is one ahead of what's needed.
+Hence the need for the functor and its registering of recursion level.
+
+As a tree structure is very large and diverse, to deal with specific
+node types, a set mechanism of inclusion or exclussion of symbols is supported.
+With these walkers and companions --- filters and functor, a tree is
+walked in linear fashion just like a normal token stream.
+This allows one to
+write grammars to consume tree structures in the same spirit as
+a to-be-parsed language. Typically these phases are the down stream stages of
+the semantic side to compilation. Really good stuff!
+@*2 Tree walker's traversal with filter mechanism.
+@<tree walker's traversal with filter mechanism@>=
+ advance();// status advance
+ int_set_iter_type i;
+ CAbs_lr1_sym* sym;
+tree_traverse: {
+ if(base_stk_.cur_stk_rec_ == 0) return;
+ if(base_stk_.cur_stk_rec_->act_ != ast_base_stack::visit){
+ @<Go to next t@>;
+ }
+ sym = AST::content(*base_stk_.cur_stk_rec_->node_);
+ if(base_stk_.filter_ == 0) @<Go to accept t@>;
+filter_node:@/
+ @<see if just read node's content is in filter set@>;
+ @<dispatch on filter type: accept or reject filter@>;
+ reject_filter:@/
+ @<is node's content found in bypass filter?...@>;
+ accept_filter:@/
+ @<is node's content in accept filter?...@>;
+ next_t:@/
+ advance();// go fetch next node as current
+ goto tree_traverse;
+ }
+ accept_t:
+ @<fire off visit functor@>;
+ return;
+
+@ Dispatch on filter type: accept or reject filter.
+@<dispatch on filter type: accept or reject filter@>=
+if(base_stk_.accept_opt_ == true)
+ goto accept_filter;
+else goto reject_filter;
+
+@ Go to next t.
+@<Go to next t@>=
+ goto next_t;
+@ Go to accept t.
+@<Go to accept t@>=
+ goto accept_t;
+@ Fire off visit functor.
+@<fire off visit functor@>=
+ yacco2::functor_result_type rr = base_stk_.action_->operator()(&base_stk_);
+ switch (rr){
+ case yacco2::bypass_node: goto next_t;
+ case yacco2::accept_node: return;
+ case yacco2::stop_walking:{
+ base_stk_.cur_stk_rec_ = 0;
+ return;
+ }
+ }
+
+@ Is node's content found in accept filter? no next t, yes accept t.
+@<is node's content in accept filter? no next t, yes accept t@>=
+ if(i == base_stk_.filter_->end()) @<Go to next t@>;
+ @<Go to accept t@>;
+
+
+@ Is node's content found in bypass filter? yes next t, no accept t.
+@<is node's content found in bypass filter? yes next t, no accept t@>=
+ if(i != base_stk_.filter_->end()) @<Go to next t@>;
+ @<Go to accept t@>;
+
+
+@ See if just read node's content is in filter set.
+@<see if just read node's content is in filter set@>=
+ i = base_stk_.filter_->find(sym->enumerated_id__);
+
+@*2 |ast_postfix| tree walker.
+@<Structure...@>+=
+struct ast_postfix:public ast_stack{
+ ast_postfix(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Prefix tree walker.
+@<Structure...@>+=
+struct ast_prefix:public ast_stack{
+ ast_prefix(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Postfix tree walker of self only.\fbreak
+ The forest in its name indicates that
+it is considered a stand alone tree. It will not follow it's brother links.
+@<Structure...@>+=
+struct ast_postfix_1forest:public ast_stack{
+ ast_postfix_1forest(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Prefix tree walker of a forest.\fbreak
+This only walks itself and its underlings. It does not follow its brother link.
+@<Structure...@>+=
+struct ast_prefix_1forest:public ast_stack{
+ ast_prefix_1forest(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Breadth only tree walker.\fbreak
+ Deal with self and younger siblings.
+@<Structure...@>+=
+struct ast_breadth_only:public ast_stack{
+ ast_breadth_only(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Prefix with breadth only tree walker.\fbreak
+ Parental walk with immediate children.
+@<Structure...@>+=
+struct ast_prefix_wbreadth_only:public ast_stack{
+ ast_prefix_wbreadth_only(AST& Forest,Type_AST_functor* Action
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void exec();
+ void advance();
+};
+
+@*2 Moon walking --- get ancestry for a specific node.\fbreak
+This walk goes up a tree looking for its ancestral goal node.
+It fills the list in youngest to oldest order where
+the last node being the goal node.
+The goal node allows u to stop partway thru the global tree:
+ie somewhere within a context.
+If no filter set is passed it defaults to all Tes accepted.
+The resultant list of ancestral nodes can be empty.
+
+If a functor is provided, it allow one to fine-tune the acceptance
+of an ancester or to recurse on its own tree walking: no inter-family feuds allowed?!
+@<Structure...@>+=
+struct ast_moonwalk_looking_for_ancestors{
+ ast_moonwalk_looking_for_ancestors
+ (AST& Moonchild,USINT Goal,Type_AST_ancestor_list& Ancestors,Type_AST_functor* Functor
+ ,yacco2::int_set_type* Filter=0,bool Accept_opt=true);
+ void let_s_moonwalk();
+ bool deal_with_parent(AST* Parent);
+ functor_result_type let_s_functor(AST* Parent);
+ bool deal_with_functor(AST* Parent);
+ AST* moonchild_;
+ USINT goal_;
+ Type_AST_ancestor_list* ancestor_list_;
+ Type_AST_functor* functor_;
+ yacco2::int_set_type* filter_;
+ bool filter_type_;
+ bool filter_provided_;
+};
+
+@*2 Tree implementations.
+@(wtree.cpp@>=
+@<copyright notice@>;
+@<iyacco2@>;
+@<accrue tree code@>;
+
+@ Accrue tree code.
+@<accrue tree code@>=
+// accrue tree code
+@* |ast_base_stack| implementation.
+@<accrue tree code@>=
+yacco2::ast_base_stack::
+ast_base_stack(Type_AST_functor* Action,yacco2::int_set_type* Filter,bool Accept_opt)
+ :idx_(No_Token_start_pos)
+ ,stk_(std::vector<s_rec>())
+ ,action_(Action)
+ ,cur_stk_rec_(0)
+ ,filter_(Filter)
+ ,accept_opt_(Accept_opt){}
+
+yacco2::ast_base_stack::
+ast_base_stack()
+ :idx_(No_Token_start_pos)
+ ,stk_(std::vector<s_rec>())
+ ,action_(0)
+ ,cur_stk_rec_(0)
+ ,filter_(0)
+ ,accept_opt_(YES){}
+
+yacco2::ast_stack::
+ast_stack(Type_AST_functor* Action,yacco2::int_set_type* Filter,bool Accept_opt)
+ :base_stk_(Action,Filter,Accept_opt){}
+
+void
+yacco2::ast_base_stack::
+pop(){
+ if(stk_.empty() == YES) return;
+ --idx_;
+ stk_.pop_back();
+ if (stk_.empty() == YES){
+ idx_ = No_Token_start_pos;
+ cur_stk_rec_ = 0;
+ return;
+ }
+ cur_stk_rec_ = &stk_[idx_];
+}
+
+void
+yacco2::ast_base_stack::
+push(AST& Node,ast_base_stack::n_action Action){
+ ++idx_;
+ stk_.push_back(yacco2::ast_base_stack::s_rec());
+ cur_stk_rec_ = &stk_[idx_];
+ cur_stk_rec_->node_ = &Node;
+ cur_stk_rec_->act_ = Action;
+}
+
+yacco2::INT
+yacco2::ast_base_stack::
+cur_stk_index(){
+ return idx_;
+}
+
+yacco2::ast_base_stack::s_rec*
+yacco2::ast_base_stack::
+cur_stk_rec(){
+ return cur_stk_rec_;
+}
+
+yacco2::ast_base_stack::s_rec*
+yacco2::ast_base_stack::
+stk_rec(yacco2::INT I){
+ if(I > idx_) return 0;
+ return &stk_[I];
+}
+
+@* Tree walker implementations.
+@*2 |ast_postfix|.\fbreak
+This is your regular postfix tree walker of a complete tree.
+@<accrue tree code@>+=
+yacco2::ast_postfix::
+ast_postfix(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@*2 |ast_postfix| exec.\fbreak
+Originally this was a switch statement handling the 5 states.
+As this is a 80/20 situation, the if statement is more efficient: no need
+for the specifics.
+@<accrue tree code@>+=
+void
+yacco2::ast_postfix::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+
+@*2 |ast_postfix| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_postfix::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ AST* down = AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+ if (down == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;//bypass left
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::left;
+ base_stk_.push(*down,ast_base_stack::init);
+ return;
+ }
+ case ast_base_stack::left: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::visit: {
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;//bypass
+ return;
+ }
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+
+@*2 |ast_prefix|.\fbreak
+ Prefix walk of complete tree.
+@<accrue tree code@>+=
+yacco2::ast_prefix::
+ast_prefix(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@*2 |ast_prefix| exec.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+@*2 |ast_prefix| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::left: {
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::visit: {
+ AST* lt = AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+ if(lt != 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::left;
+ base_stk_.push(*lt,ast_base_stack::init);
+ return;
+ }
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if(rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+
+@*2 |ast_postfix_1forest|.\fbreak
+ Forest postfix walk. Do not go outside its bounds.
+@<accrue tree code@>+=
+yacco2::ast_postfix_1forest::
+ast_postfix_1forest(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@ |ast_postfix_1forest| exec.
+@<accrue tree code@>+=
+void
+yacco2::ast_postfix_1forest::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+@*2 |ast_postfix_1forest| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_postfix_1forest::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ AST* down = AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+ if (down == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;//bypass left
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::left;
+ base_stk_.push(*down,ast_base_stack::init);
+ return;
+ }
+ case ast_base_stack::left: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::visit: {
+ AST* rt(0);
+ if(base_stk_.idx_ != 0) // only traverse the forest
+ rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;//bypass
+ return;
+ }
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+
+@*2 |ast_prefix_1forest|.\fbreak
+ Forest prefix walk. Do not go outside its bounds.
+@<accrue tree code@>+=
+yacco2::ast_prefix_1forest::
+ast_prefix_1forest(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@ |ast_prefix_1forest| exec.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix_1forest::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+@*2 |ast_prefix_1forest| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix_1forest::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::left: {
+ AST* rt(0);
+ if(base_stk_.idx_ != 0) // only traverse the forest
+ rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::visit: {
+ AST* lt = AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+ if(lt != 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::left;
+ base_stk_.push(*lt,ast_base_stack::init);
+ return;
+ }
+ AST* rt(0);
+ if(base_stk_.idx_ != 0) // only traverse the forest
+ rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if(rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+
+@*2 |ast_breadth_only|.\fbreak
+ Walk self and its younger brothers.
+@<accrue tree code@>+=
+yacco2::ast_breadth_only::
+ast_breadth_only(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@ |ast_breadth_only| exec.
+@<accrue tree code@>+=
+void
+yacco2::ast_breadth_only::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+@*2 |ast_breadth_only| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_breadth_only::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::left: {
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::visit: {
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if(rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+
+@*2 |ast_prefix_wbreadth_only|.\fbreak
+ Walk self who is a parent and its immediate children.
+@<accrue tree code@>+=
+yacco2::ast_prefix_wbreadth_only::
+ast_prefix_wbreadth_only(AST& Forest,Type_AST_functor* Action
+,yacco2::int_set_type* Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+ base_stk_.push(Forest,ast_base_stack::init);
+}
+
+@ |ast_prefix_wbreadth_only| exec.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix_wbreadth_only::
+exec(){
+ @<tree walker's traversal with filter mechanism@>;
+}
+
+@*2 |ast_prefix_wbreadth_only| advance.
+@<accrue tree code@>+=
+void
+yacco2::ast_prefix_wbreadth_only::
+advance(){
+ if (base_stk_.cur_stk_rec_ == 0) return;
+ switch (base_stk_.cur_stk_rec_->act_) {
+ case ast_base_stack::init: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::visit;
+ return;
+ }
+ case ast_base_stack::left: {
+ if(base_stk_.idx_ == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if (rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::visit: {
+ if(base_stk_.idx_ == 0){
+ AST* lt = AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+ if(lt == 0){
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::left;
+ base_stk_.push(*lt,ast_base_stack::init);
+ return;
+ }
+ AST* rt = AST::brother(*base_stk_.cur_stk_rec_->node_);
+ if(rt != 0){
+ base_stk_.pop();
+ base_stk_.push(*rt,ast_base_stack::init);
+ return;
+ }
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::right: {
+ base_stk_.cur_stk_rec_->act_ = ast_base_stack::eoc;
+ return;
+ }
+ case ast_base_stack::eoc: {
+ base_stk_.pop();
+ return;
+ }
+ }
+}
+@*2 |ast_moonwalk_looking_for_ancestors|.\fbreak
+@<accrue tree code@>+=
+yacco2::ast_moonwalk_looking_for_ancestors::ast_moonwalk_looking_for_ancestors
+ (AST& Moonchild,USINT Goal, Type_AST_ancestor_list& Ancestors_list,Type_AST_functor* Functor
+ ,yacco2::int_set_type* Filter,bool Accept_opt)
+ :moonchild_(&Moonchild)
+ ,goal_(Goal)
+ ,ancestor_list_(&Ancestors_list)
+ ,functor_(Functor)
+ ,filter_(Filter)
+ ,filter_type_(Accept_opt)
+ ,filter_provided_(NO)
+{
+ if(Filter != 0) filter_provided_ = YES;
+}
+@*3 |let_s_functor|.\fbreak
+It's returned value indicates either stop the tree walk, or continue the walk
+and what to do with the visited node --- accept it or bypass.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::ast_moonwalk_looking_for_ancestors::let_s_functor(AST* Parent)
+{
+ functor_result_type functor_result;
+ yacco2::ast_base_stack abs;
+ abs.push(*Parent,ast_base_stack::init);
+ return functor_->operator()(&abs);
+}
+
+@*3 |deal_with_functor|.\fbreak
+If the Parent passes the grade it's added to the ancestry list.
+Returning a ``NO'' indicates to terminate the tree walking
+while a ``YES'' is keep-it-going thriller.
+@<accrue tree code@>+=
+bool
+yacco2::ast_moonwalk_looking_for_ancestors::deal_with_functor(AST* Parent)
+{
+ if(functor_ != 0){
+ functor_result_type functor_result = let_s_functor(Parent);
+ switch(functor_result){
+ case accept_node:{
+ ancestor_list_->push_back(Parent);
+ return YES;
+ }
+ case bypass_node:{
+ return YES;
+ }
+ case stop_walking:{
+ return NO;
+ }
+ }
+ }else{
+ ancestor_list_->push_back(Parent);
+ return YES;
+ }
+ return YES;
+}
+
+@*3 |let_s_moonwalk|.\fbreak
+Do those backward moves on the tree like MJ.
+@<accrue tree code@>+=
+void
+yacco2::ast_moonwalk_looking_for_ancestors::let_s_moonwalk()
+{
+ functor_result_type functor_result;
+ AST* cnode = moonchild_;
+ AST* parent(0);
+ while (cnode!=0){
+ parent = AST::get_parent(*cnode);
+ bool continue_waldo = deal_with_parent(parent);
+ if(continue_waldo == NO) return;
+ cnode = parent;
+ }
+}
+
+@*3 |deal_with_parent|.\fbreak
+Returning a ``NO'' indicates to terminate the tree walking.
+@<accrue tree code@>+=
+bool
+yacco2::ast_moonwalk_looking_for_ancestors::deal_with_parent(AST* Parent)
+{
+ if(Parent == 0){// orphan?
+ return NO;
+ }
+ CAbs_lr1_sym* tsym = AST::content(*Parent);
+ USINT id = tsym->enumerated_id();
+ if(id == goal_){
+ ancestor_list_->push_back(Parent);
+ return NO;// finished going thru tree as goal found
+ }
+ @<Dispatch on use-of-filter@>;
+ no_filter_so_accept_all_Tes:{
+ return deal_with_functor(Parent);
+ }
+ filtered_Tes:{
+ int_set_iter_type i = filter_->find(id);
+ if(i == filter_->end()){
+ if(filter_type_== ACCEPT_FILTER) return YES;
+ return deal_with_functor(Parent);
+ }
+ // found T in filter
+ if(filter_type_== BYPASS_FILTER) return YES;
+ return deal_with_functor(Parent);
+ }
+}
+
+@ Dispatch on use-of-filter.
+@<Dispatch on use-of-filter@>+=
+ if(filter_provided_ == NO) goto no_filter_so_accept_all_Tes;
+ else goto filtered_Tes;
+
+
+@** Build and restructure trees.
+@*2 |restructure_2trees_into_1tree|..
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+restructure_2trees_into_1tree(AST& S1,AST& S2){
+ AST* s2lt = AST::get_1st_son(S2);
+ AST::zero_1st_son(S2);
+ AST::crt_tree_of_2sons(S2,S1,*s2lt);
+ return &S2;
+}
+@*2 Create trees |crt_tree_of_1son|---|crt_tree_of_9sons|.
+@<accrue tree code@>+=
+void yacco2::AST::
+crt_tree_of_1son(yacco2::AST& Parent,yacco2::AST& S1){
+ yacco2::AST::join_pts(Parent,S1);
+}
+
+void yacco2::AST::
+crt_tree_of_2sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+}
+
+void yacco2::AST::
+crt_tree_of_3sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+}
+
+void yacco2::AST::
+crt_tree_of_4sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3
+,yacco2::AST& S4){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+ yacco2::AST::join_sts(S3,S4);
+}
+
+void yacco2::AST::
+crt_tree_of_5sons(yacco2::AST& Parent,AST& S1,yacco2::AST& S2,yacco2::AST& S3,
+yacco2::AST& S4,yacco2::AST& S5){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+ yacco2::AST::join_sts(S3,S4);
+ yacco2::AST::join_sts(S4,S5);
+}
+
+void yacco2::AST::
+crt_tree_of_6sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3
+,yacco2::AST& S4,yacco2::AST& S5,yacco2::AST& S6){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+ yacco2::AST::join_sts(S3,S4);
+ yacco2::AST::join_sts(S4,S5);
+ yacco2::AST::join_sts(S5,S6);
+}
+void yacco2::AST::
+crt_tree_of_7sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3
+,yacco2::AST& S4,yacco2::AST& S5,yacco2::AST& S6,yacco2::AST& S7){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+ yacco2::AST::join_sts(S3,S4);
+ yacco2::AST::join_sts(S4,S5);
+ yacco2::AST::join_sts(S5,S6);
+ yacco2::AST::join_sts(S6,S7);
+}
+void yacco2::AST::
+crt_tree_of_8sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3
+,yacco2::AST& S4,yacco2::AST& S5,yacco2::AST& S6,yacco2::AST& S7,yacco2::AST& S8){
+ yacco2::AST::join_pts(Parent,S1);
+ yacco2::AST::join_sts(S1,S2);
+ yacco2::AST::join_sts(S2,S3);
+ yacco2::AST::join_sts(S3,S4);
+ yacco2::AST::join_sts(S4,S5);
+ yacco2::AST::join_sts(S5,S6);
+ yacco2::AST::join_sts(S6,S7);
+ yacco2::AST::join_sts(S7,S8);
+}
+void yacco2::AST::
+crt_tree_of_9sons(yacco2::AST& Parent,yacco2::AST& S1,yacco2::AST& S2,yacco2::AST& S3
+,yacco2::AST& S4,yacco2::AST& S5,yacco2::AST& S6
+,yacco2::AST& S7,yacco2::AST& S8,yacco2::AST& S9){
+ AST::join_pts(Parent,S1);
+ AST::join_sts(S1,S2);
+ AST::join_sts(S2,S3);
+ AST::join_sts(S3,S4);
+ AST::join_sts(S4,S5);
+ AST::join_sts(S5,S6);
+ AST::join_sts(S6,S7);
+ AST::join_sts(S7,S8);
+ AST::join_sts(S8,S9);
+}
+
+@*2 |content| of node.
+@<accrue tree code@>+=
+yacco2::CAbs_lr1_sym* yacco2::AST::
+content(yacco2::AST& Node){
+ return Node.obj_;
+}
+
+@*2 |zero_1st_son| link.
+@<accrue tree code@>+=
+void yacco2::AST::
+zero_1st_son(yacco2::AST& Node){
+ Node.lt_ = 0;
+}
+
+@*2 |zero_2nd_son| link.
+@<accrue tree code@>+=
+void yacco2::AST::
+zero_2nd_son(yacco2::AST& Node){
+ yacco2::AST* lt = Node.lt_;
+ if(lt == 0) {
+@.Err zero\_2nd\_son 2nd son's 1st...@>
+ yacco2::KCHARP msg =
+ "zero_2nd_son 2nd son's 1st son Node ptr is zero";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ lt->rt_ = 0;
+}
+@*2 |zero_brother| link.
+@<accrue tree code@>+=
+void yacco2::AST::
+zero_brother(yacco2::AST& Node){
+ Node.rt_ = 0;
+}
+@*2 |zero_content|.
+@<accrue tree code@>+=
+void yacco2::AST::
+zero_content(yacco2::AST& Node){
+ Node.obj_ = 0;
+}
+@*2 |set_content| of node.
+@<accrue tree code@>+=
+void yacco2::AST::
+set_content(yacco2::AST& Node,yacco2::CAbs_lr1_sym& Sym){
+ Node.obj_ = &Sym;
+}
+@*2 |zero_previous| link.
+@<accrue tree code@>+=
+void yacco2::AST::
+zero_previous(yacco2::AST& Node){
+ Node.pr_ = 0;
+}
+@*2 |set_content_wdelete|: mark node's content to be deleted when node deleted.
+@<accrue tree code@>+=
+void yacco2::AST::
+set_content_wdelete(yacco2::AST& Node,yacco2::CAbs_lr1_sym& Sym){
+ Node.obj_ = &Sym;
+ Node.wdelete_ = true;
+}
+@*2 |set_previous| link.
+@<accrue tree code@>+=
+void yacco2::AST::
+set_previous(yacco2::AST& Node,yacco2::AST& Previous_node){
+ Node.pr_ = &Previous_node;
+}
+@*2 |wdelete| is node's contents marked as to-be-deleted?.
+@<accrue tree code@>+=
+bool yacco2::AST::
+wdelete(yacco2::AST& Node){
+ return Node.wdelete_;
+}
+@*2 |wdelete| set delete attribute: true or false.
+@<accrue tree code@>+=
+void yacco2::AST::
+wdelete(yacco2::AST& Node,bool Wdelete){
+ Node.wdelete_ = Wdelete;
+}
+
+@*2 Fetch various tree nodes: |brother|.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+brother(yacco2::AST& Node){
+ return Node.rt_;
+}
+@*2 |previous| node: returns its heritage parent or older brother.\fbreak
+Returns either the older brother or parent if the brother is first in the chain.
+A root node returns NIL.
+The difference between |previous| and |get_older_sibling| is in how it treats the
+oldest brother node.
+|get_older_sibling| does not return its parent node but returns NIL.
+
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+previous(yacco2::AST& Node){
+ return Node.pr_;
+}
+
+@*2 Birth, pruning, and death of a tree node: |AST|.
+@<accrue tree code@>+=
+yacco2::AST::
+AST():lt_(0),rt_(0),pr_(0),obj_(0),wdelete_(false){
+}
+
+yacco2::AST::
+AST(yacco2::CAbs_lr1_sym& Obj):lt_(0),rt_(0),pr_(0),obj_(&Obj),wdelete_(false){
+}
+
+yacco2::AST::~AST(){
+ if(wdelete_ == true) {
+ delete obj_;
+ }
+}
+@*2 |join_pts|: parent to son bonding.
+@<accrue tree code@>+=
+void
+yacco2::AST::
+join_pts(yacco2::AST& Parent,yacco2::AST& Child){
+ if (Parent.lt_ != 0) {
+@.Err join\_pts Parent lt ptr not ...@>
+ yacco2::KCHARP msg =
+ "join_pts Parent lt ptr not zero";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Parent == &Child) {
+@.Err join\_pts Parent and child n...@>
+ yacco2::KCHARP msg =
+ "join_pts Parent and child nodes are the same";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ Parent.lt_ = &Child;
+ Child.pr_ = &Parent;
+}
+@*2 |join_sts|: brother to brother bonding.
+@<accrue tree code@>+=
+void
+yacco2::AST::
+join_sts(yacco2::AST& Elder_sibling,yacco2::AST& Younger_sibling){
+ if (Elder_sibling.rt_ != 0){
+@.Err join\_sts Elder\_sibling rt ...@>
+ yacco2::KCHARP msg =
+ "join_sts Elder_sibling rt ptr not zero";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Elder_sibling == &Younger_sibling){
+@.Err join\_sts Left and Right nod...@>
+ yacco2::KCHARP msg =
+ "join_sts Left and Right nodes are the same";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ Elder_sibling.rt_ = &Younger_sibling;
+ Younger_sibling.pr_ = &Elder_sibling;
+}
+
+@*2 |ast_delete|: delete the tree node.
+@<accrue tree code@>+=
+void
+yacco2::AST::
+ast_delete(yacco2::AST& Node,bool Due_to_abort){
+if(YACCO2_T__ != 0){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::ast_DELETE Node to be deleted*: " << &Node
+<< " Abort switch: " << Due_to_abort << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+}
+ if (&Node == Node.lt_){
+@.Err ast\_delete recursion to sel...@>
+ yacco2::KCHARP msg =
+ "ast_delete recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Node == Node.rt_) {
+@.Err ast\_delete Right recursion ...@>
+ yacco2::KCHARP msg =
+ "ast_delete Right recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ yacco2::CAbs_lr1_sym* sym = Node.obj_;
+if(YACCO2_T__ != 0){
+if(sym != 0){
+@<acquire trace mu@>;
+ yacco2::lrclog << "YACCO2_T__::ast_DELETE Node to be deleted*: " << &Node
+ << " sym*: " << sym << " id: " << sym->id__ << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ }
+}
+if(YACCO2_T__ != 0){
+ if(Node.lt_){
+@<acquire trace mu@>;
+yacco2::lrclog << "YACCO2_T__::call ast_DELETE Node by LEFT node to be deleted*: " << Node.lt_
+ << " by node*: " << &Node << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ AST::ast_delete(*Node.lt_,Due_to_abort);
+ }
+ if(Node.rt_){
+@<acquire trace mu@>;
+yacco2::lrclog << "call ast_DELETE Node by RIGHT node to be deleted*: " << Node.rt_
+ << " by node*: " << &Node << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+ AST::ast_delete(*Node.rt_,Due_to_abort);
+ }
+}
+ if(sym != 0){// is there a sym to work on. if the delete process
+ // was originally started by delete sym is 0
+ if(Due_to_abort == true){
+ if(sym->affected_by_abort() == true){
+if(YACCO2_T__ != 0){
+@<acquire trace mu@>;
+yacco2::lrclog
+<< "YACCO2_T__::ast_DELETE node's object deleted due to ABORT: "
+<< sym->id__ << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+}
+ delete sym; // protects against recycled bin deleting its items
+ Node.obj_ = 0;
+ };
+ }else{// normal throes of death
+ delete sym;
+ Node.obj_ = 0;
+ }
+ }
+ delete &Node;
+@<acquire trace mu@>;
+lrclog << "ast_DELETE Node deleted*: " << &Node << __FILE__ << __LINE__<< std::endl;
+@<release trace mu@>;
+}
+
+@*2 |find_depth|.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+find_depth(AST& Node,yacco2::INT Enum){
+ if (&Node == Node.lt_){
+@.Err find\_depth Left recursion t...@>
+ yacco2::KCHARP msg =
+ "find_depth Left recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Node == Node.rt_){
+@.Err find\_depth Right recursion ...@>
+ yacco2::KCHARP msg =
+ "find_depth Right recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (Node.obj_ == 0){
+@.Err find\_depth Tree's oject is ...@>
+ yacco2::KCHARP msg =
+ "find_depth Tree's oject is zero";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ yacco2::CAbs_lr1_sym* sym = Node.obj_;
+ if (sym->enumerated_id__ == Enum) return &Node;
+ if (Node.lt_ != 0) {
+ yacco2::AST* rtn = find_depth(*Node.lt_,Enum);
+ if (rtn != 0) return rtn;
+ }
+ if (Node.rt_ != 0) {
+ yacco2::AST* rtn = find_depth(*Node.rt_,Enum);
+ if (rtn!=0) return rtn;
+ }
+ return 0;
+}
+
+@*2 |find_breadth|.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+find_breadth(yacco2::AST& Node,yacco2::INT Enum){
+ if (&Node == Node.lt_){
+@.Err find\_breadth Left recursion...@>
+ yacco2::KCHARP msg =
+ "find_breadth Left recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Node == Node.rt_){
+@.Err find\_breadth Right recursio...@>
+ yacco2::KCHARP msg =
+ "find_breadth Right recursion to self Node";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (Node.obj_ == 0){
+@.Err find\_breadth Tree's object ...@>
+ yacco2::KCHARP msg =
+ "find_breadth Tree's object is zero";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ yacco2::CAbs_lr1_sym* sym = Node.obj_;
+ if (sym->enumerated_id__ == Enum) return &Node;
+ if (Node.rt_ != 0) {
+ yacco2::AST* rtn = find_breadth(*Node.rt_,Enum);
+ if (rtn!=0) return rtn;
+ }
+ return 0;
+}
+
+@** Tree relinking routines: before, between, after and other sundries.
+@*2 |relink|.\fbreak
+ This drops the old link and re-welds the previous node to the new node.
+The relationships between the previous and old node are erased. No memory meltdown but pure
+lobotomy with 2 scoops.
+@<accrue tree code@>+=
+void yacco2::AST::
+relink(yacco2::AST& Previous,yacco2::AST& Old_to,yacco2::AST& New_to){
+ if (&Previous == &Old_to){
+@.Err relink Previous ptr == Old p...@>
+ yacco2::KCHARP msg =
+ "relink Previous ptr == Old ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Previous == &New_to){
+@.Err relink Previous ptr == New p...@>
+ yacco2::KCHARP msg =
+ "relink Previous ptr == New ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Old_to == &New_to){
+@.Err relink Old ptr == New ptr@>
+ yacco2::KCHARP msg =
+ "relink Old ptr == New ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if(Previous.rt_ == &Old_to){
+ Old_to.pr_ = 0;
+ Previous.rt_ = &New_to;
+ New_to.pr_ = &Previous;
+ return;
+ }
+ Old_to.pr_ = 0;
+ Previous.lt_ = &New_to;
+ New_to.pr_ = &Previous;
+}
+
+@*2 |relink_between|.\fbreak
+This wedges the new node inbetween the previous and old node.
+Depending on the relationship between the previous and old node, the same relationship
+is maintained; this can be parental or brotherly love.
+The new node becomes the older brother to the old node.
+@<accrue tree code@>+=
+void yacco2::AST::
+relink_between(yacco2::AST& Previous,yacco2::AST& Old_to,yacco2::AST& New_to){
+ if (&Previous == &Old_to){
+@.Err relink\_between Previous ptr...@>
+ yacco2::KCHARP msg =
+ "relink_between Previous ptr == Old ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Previous == &New_to){
+@.Err relink\_between Previous ptr...@>
+ yacco2::KCHARP msg =
+ "relink_between Previous ptr == New ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if (&Old_to == &New_to){
+@.Err relink\_between Old ptr == N...@>
+ yacco2::KCHARP msg =
+ "relink_between Old ptr == New ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if(Previous.rt_ == &Old_to){
+ Old_to.pr_ = &New_to;
+ Previous.rt_ = &New_to;
+ New_to.pr_ = &Previous;
+ New_to.rt_ = &Old_to;
+ return;
+ }
+ if(Previous.lt_ == &Old_to){
+ Old_to.pr_ = &New_to;
+ Previous.lt_ = &New_to;
+ New_to.pr_ = &Previous;
+ New_to.rt_ = &Old_to;
+ return;
+ }
+@.Err relink\_between Previous nod...@>
+ yacco2::KCHARP msg =
+ "ast_relink_between Previous node does not have lt or rt of Old";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+}
+@*2 |relink_after|.\fbreak
+This adds the new node as the previous node's immediate younger brother.
+If there was a younger brother already established, it re-aligns these relations.
+There is no politeness; just raw butting in.
+@<accrue tree code@>+=
+void yacco2::AST::
+relink_after(yacco2::AST& Previous,yacco2::AST& To){
+ if (&Previous == &To){
+@.Err relink\_after Previous ptr==...@>
+ yacco2::KCHARP msg = "relink_after Previous ptr == To ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if(Previous.rt_ == 0){// eoc
+ Previous.rt_ = &To;
+ To.pr_ = &Previous;
+ return;
+ }
+ AST* rt = Previous.rt_;
+ if(rt->pr_ == &Previous){
+ rt->pr_ = &To;
+ Previous.rt_ = &To;
+ To.pr_ = &Previous;
+ To.rt_ = rt;
+ return;
+ }
+@.Err relink\_after Previous Node ...@>
+ yacco2::KCHARP msg = "relink_after Previous Node does not have lt or rt of Old";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+}
+
+@*2 |relink_before|.\fbreak
+The new node is added before the `Before' node.
+Depending on the Before's node relationship as either the oldest child or a younger sibling,
+|relink_before| maintains this relationship with the |New_to| node while the
+`Before' node becomes |New_to|'s younger brother.
+@<accrue tree code@>+=
+void yacco2::AST::
+relink_before(yacco2::AST& Before,yacco2::AST& New_to){
+ if (&Before == &New_to){
+@.Err relink\_before Before ptr ==...@>
+ yacco2::KCHARP msg =
+ "relink_before Before ptr == New ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ if(Before.pr_ == 0){//eoc
+ Before.pr_ = &New_to;
+ New_to.rt_ = &Before;
+ return;
+ }
+ yacco2::AST* pr = Before.pr_;
+ if(pr->lt_ == &Before){
+ pr->lt_ = &New_to;
+ New_to.pr_ = pr;
+ New_to.rt_ = &Before;
+ Before.pr_ = &New_to;
+ return;
+ }
+ if(pr->rt_ == &Before){
+ pr->rt_ = &New_to;
+ New_to.pr_ = pr;
+ New_to.rt_ = &Before;
+ Before.pr_ = &New_to;
+ return;
+ }
+@.Err relink\_before Before node d...@>
+ yacco2::KCHARP msg =
+ "relink_before Before node does not have lt or rt of Old";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+}
+
+@*2 |replace_node|.\fbreak
+Substitute the Old node with the By node. Remap all the relations to the By node
+and wipe out relationships in Old node leaving it as an orphan.
+@<accrue tree code@>+=
+void yacco2::AST::
+replace_node(yacco2::AST& Old,yacco2::AST& By){
+ if (&Old == &By){
+@.Err replace\_node Old ptr == By ...@>
+ yacco2::KCHARP msg =
+ "replace_node Old ptr == By ptr";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ yacco2::AST* prev = Old.pr_;
+ yacco2::AST* rt = Old.rt_;
+ if(prev->rt_ == &Old){
+ prev->rt_ = &By;
+ By.pr_ = prev;
+ By.rt_ = rt;
+ if(rt != 0) rt->pr_ = &By;
+ Old.rt_ = 0;
+ Old.pr_ = 0;
+ return;
+ }
+ if(prev->lt_ == &Old){
+ prev->lt_ = &By;
+ By.pr_ = prev;
+ By.rt_ = rt;
+ if(rt != 0) rt->pr_ = &By;
+ Old.rt_ = 0;
+ Old.pr_ = 0;
+ return;
+ }
+ By.rt_ = Old.rt_;
+ Old.rt_ = 0;
+}
+
+
+@** Various tree node routines.
+@*2 |add_son_to_tree|.\fbreak
+Just wedge the new kid as an oldest child with the Parent node.
+If the Parent node is childless... well congratulations. If there are already children,
+well let the probate officer deal with the squawkes.
+@<accrue tree code@>+=
+void yacco2::AST::
+add_son_to_tree(yacco2::AST& Parent,yacco2::AST& Son){
+ AST* p_lt = Parent.lt_;
+ if(p_lt == 0){
+ Parent.lt_ = &Son;
+ Son.pr_ = &Parent;
+ return;
+ }
+ Parent.lt_ = &Son;
+ Son.pr_ = &Parent;
+ Son.rt_ = p_lt;
+ p_lt->pr_ = &Son;
+}
+
+@*2 |add_child_at_end|.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::add_child_at_end(yacco2::AST& Tree,yacco2::AST& Child){
+ yacco2::AST* cur_youngest_child = AST::get_child_at_end(Tree);
+ if(cur_youngest_child == 0){
+ AST::join_pts(Tree,Child);
+ }else{
+ AST::join_sts(*cur_youngest_child,Child);
+ }
+ return &Child;
+}
+
+@*2 |get_spec_child|.
+@<accrue tree code@>+=
+yacco2::AST*
+yacco2::AST::get_spec_child(yacco2::AST& Tree,yacco2::INT Cnt){
+ if(Cnt <= 0) {
+@.Err get\_spec\_child Node Cnt is...@>
+ yacco2::KCHARP msg =
+ "get_spec_child Node Cnt is <= 0";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ yacco2::INT pos(0);
+ yacco2::AST* ct = Tree.lt_;
+ for(;ct != 0;ct=ct->rt_){
+ ++pos;
+ if(pos == Cnt) return ct;
+ }
+ return 0;
+}
+
+@*2 Get specific son node by number.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::
+get_1st_son(yacco2::AST& Node){
+ return get_spec_child(Node,1);
+}
+
+yacco2::AST* yacco2::AST::
+get_2nd_son(yacco2::AST& Node){
+ return get_spec_child(Node,2);
+}
+yacco2::AST* yacco2::AST::
+get_3rd_son(yacco2::AST& Node){
+ return get_spec_child(Node,3);
+}
+yacco2::AST* yacco2::AST::
+get_4th_son(yacco2::AST& Node){
+ return get_spec_child(Node,4);
+}
+yacco2::AST* yacco2::AST::
+get_5th_son(yacco2::AST& Node){
+ return get_spec_child(Node,5);
+}
+
+yacco2::AST* yacco2::AST::get_6th_son(yacco2::AST& Node){
+ return get_spec_child(Node,6);
+}
+
+yacco2::AST* yacco2::AST::get_7th_son(yacco2::AST& Node){
+ return get_spec_child(Node,7);
+}
+
+yacco2::AST* yacco2::AST::get_8th_son(yacco2::AST& Node){
+ return get_spec_child(Node,8);
+}
+
+yacco2::AST* yacco2::AST::get_9th_son(yacco2::AST& Node){
+ return get_spec_child(Node,9);
+}
+
+
+@*2 |get_child_at_end|.
+Go thru the parent's children looking for the youngest.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::get_child_at_end(yacco2::AST& Tree){
+ yacco2::AST* ct = Tree.lt_;
+ yacco2::AST* pct(0);
+ for(;ct != 0;ct=ct->rt_){
+ pct = ct;
+ }
+ return pct;
+}
+
+@*2 |get_youngest_sibling|.\fbreak
+If there is no younger brother then a |NIL| pointer is returned indicating such
+condition. It is up to the user to check the validity.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::get_youngest_sibling(yacco2::AST& Tree){
+ yacco2::AST* start = &Tree;
+ yacco2::AST* younger_sibling = start;
+ for(;younger_sibling != 0;){
+ if(younger_sibling->rt_ == 0) break;
+ younger_sibling = younger_sibling->rt_;
+ }
+ if(start == younger_sibling) return 0;
+ return younger_sibling;
+}
+
+@*2 |get_younger_sibling|.\fbreak
+It goes right along the brother chain looking for the brother x youngest to him.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::get_younger_sibling(yacco2::AST& Child,yacco2::INT Pos){
+ if(Pos <= 0) {
+@.Err get\_younger\_sibling Pos <=...@>
+ yacco2::KCHARP msg =
+ "get_younger_sibling Pos <= 0";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ int cnt(0);
+ yacco2::AST* younger_sibling = Child.rt_;
+ for(;younger_sibling != 0;younger_sibling=younger_sibling->rt_){
+ ++cnt;
+ if(cnt == Pos) return younger_sibling;
+ }
+ return 0;
+}
+
+@*2 |get_older_sibling|: returns only older brother.\fbreak
+It goes to its left along the brother chain in older order.
+If it is the first in the breadth chain, well, it's the end and returns a nil ptr.
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::get_older_sibling(yacco2::AST& Child,yacco2::INT Pos){
+ if(Pos >= 0) {
+@.Err get\_older\_sibling Pos >= 0@>
+ yacco2::KCHARP msg =
+ "get_older_sibling Pos >= 0";
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+ }
+ int cnt(0);
+ AST* older_sibling = Child.pr_;
+ for(;older_sibling != 0;older_sibling=older_sibling->pr_){
+ --cnt;
+ if(cnt == Pos) return older_sibling;
+ }
+ return 0;
+}
+@*2 |get_parent|: child guidance required.\fbreak
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::get_parent(yacco2::AST& Tree){
+ yacco2::AST* cnode = &Tree;
+ yacco2::AST* older_sibling = cnode->pr_;
+ for(;older_sibling != 0;cnode = older_sibling,older_sibling=cnode->pr_){
+ if(older_sibling->rt_ != cnode) return older_sibling;//
+ }
+ return 0;
+}
+
+@*2 |common_ancestor|: Are we distant ?.\fbreak
+@<accrue tree code@>+=
+yacco2::AST* yacco2::AST::common_ancestor
+(yacco2::Type_AST_ancestor_list& ListA,yacco2::Type_AST_ancestor_list& ListB){
+ Type_AST_ancestor_list* a;
+ Type_AST_ancestor_list* b;
+ if(ListA.size() < ListB.size()){
+ a = &ListA;
+ b = &ListB;
+ }else{
+ b = &ListA;
+ a = &ListB;
+ }
+ Type_AST_ancestor_list::iterator ai = a->begin();
+ Type_AST_ancestor_list::iterator aie = a->end();
+ Type_AST_ancestor_list::iterator bi;
+ Type_AST_ancestor_list::iterator bie;
+ for(;ai!=aie;++ai){
+ bi = b->begin();
+ bie = b->end();
+ for(;bi!=bie;++bi){
+ AST* A = *ai;
+ AST* B = *bi;
+ if(A == B)
+ return A;
+ }
+ }
+ return 0;
+}
+
+@*2 |divorce_node_from_tree|.\fbreak
+Never pretty but civil in its settlement.
+@<accrue tree code@>+=
+yacco2::AST*
+yacco2::AST::divorce_node_from_tree(yacco2::AST& Node){
+ yacco2::AST* bpr = Node.pr_;
+ yacco2::AST* brt = Node.rt_;
+ @<remove node's association from tree@>;
+ @<dispatch to node association: forest, among brothers, or parental@>;
+
+forest:@/
+ @<handle a forest situation, with or without a younger brother@>;
+amongst_brothers:@/
+ @<handle sibling relationship@>;
+parental_guidance:@/
+ @<handle parent / sibling relationship@>;
+ }
+
+@ Dispatch to node association.\fbreak
+ The following points
+are the sequences checked on the removed node's relationship within the tree structure.\fbreak
+\ptindent{1) forest --- only node or oldest node in the forest}
+\ptindent{2) middle or youngest node in the forest}
+\ptindent{3) parent with one or more children}
+@<dispatch to node association: forest, among brothers, or parental@>=
+ if(bpr == 0) goto forest;
+ if(bpr->rt_ == &Node) goto amongst_brothers;
+ if(bpr->lt_ == &Node) goto parental_guidance;
+
+@ Handle parent / sibling relationship.
+ Is it an only child? If so, then remove the parent relationship.
+
+ If there are brothers, then re-align the relationships in both the parent and
+ the younger child.
+ @<handle parent / sibling relationship@>=
+ @<only child? ...@>;
+ @<re-bond younger ...@>;
+
+ @ Only child? yes make parent childless and exit.
+ @<only child? yes make parent childless and exit@>=
+ if(brt == 0){
+ bpr->lt_ = 0;
+ return 0;
+ }
+
+@*2 Re-bond younger child with parent.
+@<re-bond younger child with parent and exit with child@>=
+ bpr->lt_ = brt;
+ brt->pr_ = bpr;
+ return brt;
+
+@ Handle a forest situation, with or without a younger brother.\fbreak
+It is considered a forest if there is no older brother attached to it.
+If it has a brother, disconnect the younger brother's association
+from he removed node, and back back the younger brother.
+@<handle a forest situation, with or without a younger brother@>=
+ if(brt == 0) return 0; // onlynode;
+ brt->pr_ = 0;
+ return brt;
+
+@ Handle sibling relationship.
+This situation is:\fbreak
+a ${\rightarrow b \rightarrow ?}$ where ? is either nil or a node.
+So, relink node a with its younger brother c.
+@<handle sibling relationship@>=
+ bpr->rt_ = brt;
+ if(brt != 0) brt->pr_ = bpr;
+ return brt;
+
+@ Remove node's association from tree.
+@<remove node's association from tree@>=
+ Node.pr_ = 0;
+ Node.rt_ = 0;
+
+@*2 |clone_tree|.\fbreak
+ logic: walk the tree in prefix\fbreak
+ Ip:\fbreak
+ \ptindent{1) To - node to copy}
+ \ptindent{2) Calling - predecessor: if 0, no predecesor. it's the root}
+ \ptindent{3) Relation - join options: init,left,right}
+ Op:\fbreak
+ \ptindent{new tree with each new node's content being a duplicate}
+The new tree is a complete copy. The tree nodes are fresh from the malloc bakery with
+their contents being the same.
+
+@<accrue tree code@>+=
+yacco2::AST*
+yacco2::AST::clone_tree
+ (yacco2::AST& Node_to_copy,yacco2::AST* Calling_node
+,yacco2::ast_base_stack::n_action Relation){
+ yacco2::AST* new_t = new yacco2::AST(*yacco2::AST::content(Node_to_copy));// copy node
+ switch(Relation){// how to join
+ case ast_base_stack::init: break;// root
+ case ast_base_stack::left:{
+ if(Calling_node != 0){
+ AST::join_pts(*Calling_node,*new_t);
+ }
+ break;
+ }
+ case ast_base_stack::right:{
+ if(Calling_node != 0){
+ AST::join_sts(*Calling_node,*new_t);
+ }
+ break;
+ }
+ }
+ if(Node_to_copy.lt_ != 0)
+ AST::clone_tree(*Node_to_copy.lt_,new_t,ast_base_stack::left);
+ if(Node_to_copy.rt_ != 0)
+ AST::clone_tree(*Node_to_copy.rt_,new_t,ast_base_stack::right);
+ return new_t;
+}
+
+@** Some tree functors: remove, insert back, print a tree, etc.\fbreak
+These functors are examples of how to create your own functor.
+|prt_ast_functor| prints out a tree in indented format.
+|fire_a_func_functor| just calls a procedure passing it the current tree node.
+|str_ast_functor| claim to fame is in its use of the |BYPASS_FILTER|
+given the many abstract meta-terminal that parent each subtree:
+for example the Pascal railroad diagrams
+with expression, simple expression, term, factor, etc.
+Depending on how abstract u make the
+tree, there are still parent nodes that u might not want to see.
+|str_ast_functor| builds a source string from an tree used
+in a Pascal translator from Oregon to HP Pascal source code
+retargeting.\fbreak
+\fbreak
+An improvement: the address of the functor is passed to the call-back
+function so that is can also act as a container.
+The reason behind this is the |str_ast_functor|.
+It orginally had a global string for the function to fill.
+As the functor is the driver of the call-back, it is the one that
+knows when the source string should be cleared for reuse.
+@<Structure...@>+=
+struct insert_back_recycled_items_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ void insert_node(yacco2::AST& Inode);
+ yacco2::AST* new_root();
+ void insert_before();
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+ yacco2::AST* insert_node_;
+ yacco2::AST* new_root_;
+};
+
+@*2 |tok_can_ast_functor|.
+@<Structure...@>+=
+struct tok_can_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+};
+@*2 |tok_can_ast_no_stop_functor|.
+@<Structure...@>+=
+struct tok_can_ast_no_stop_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+};
+@*2 |tok_can_ast_bypass_functor|.
+@<Structure...@>+=
+struct tok_can_ast_bypass_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+};
+@*2 |prt_ast_functor|.
+@<Structure...@>+=
+struct prt_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ typedef void (*PF)(AST*);
+ prt_ast_functor(PF Func,std::ofstream* Ofile=0);
+ void reset_cnt();
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+ PF prt_funct_;
+ yacco2::INT cnt_;
+ char how_[3];
+ std::ofstream* ofile_;
+};
+@*2 |fire_a_func_ast_functor|.
+@<Structure...@>+=
+struct fire_a_func_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ typedef void (*PF)(AST*);
+ fire_a_func_ast_functor(PF Func);
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+ PF a_funct_;
+};
+@*2 |str_ast_functor| --- build up source string.
+@<Structure...@>+=
+struct str_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ typedef void (*PF)(AST*,Type_AST_functor*);
+ str_ast_functor(PF Func);
+ std::string source_str_;
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+ PF prt_funct_;
+ char how_[3];
+};
+@*2 |remove_unwanted_ast_functor|.
+@<Structure...@>+=
+struct remove_unwanted_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ void possible_delete();
+ ~remove_unwanted_ast_functor();
+
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+};
+
+@*2 Implementation of some functors.
+|remove_unwanted_ast_functor|.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::remove_unwanted_ast_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ cnode_ = srec_->node_;
+
+ yacco2::CAbs_lr1_sym* sobj = AST::content(*cnode_);
+ if (sobj == 0) return accept_node;
+ if (sobj->tok_co_ords__.external_file_id__ <= 1) return accept_node;
+
+ idx_ = stk_env_->idx_;
+ if (stk_env_->idx_ == 0){// 1st entry of complete tree
+ return accept_node;
+ }
+ return bypass_node;// cuz: apple's symantic error
+ }
+
+ void yacco2::remove_unwanted_ast_functor::possible_delete(){
+ yacco2::INT pidx = idx_ - 1;
+ if(pidx < 0) return;
+ ast_base_stack::s_rec* psrec = stk_env_->stk_rec(pidx);
+ yacco2::AST* psnode = psrec->node_;
+ yacco2::AST* srt = AST::brother(*cnode_);
+ switch (psrec->act_){
+ case ast_base_stack::left:{
+ if(srt != 0){// replace current record with rt node: shift left tree
+ yacco2::AST::relink(*psnode,*cnode_,*srt);
+ srec_->node_ = srt;
+ srec_->act_ = ast_base_stack::init;
+ return;
+ }
+ yacco2::AST::zero_1st_son(*psnode);
+ srec_->act_ = ast_base_stack::eoc;// deleted node: complete its seq
+ return;
+ }
+ case ast_base_stack::right:{
+ if(srt != 0){
+ yacco2::AST::relink(*psnode,*cnode_,*srt);
+ srec_->node_ = srt;
+ srec_->act_ = ast_base_stack::init;
+ return;
+ }
+ yacco2::AST::zero_brother(*psnode);
+ srec_->act_ = ast_base_stack::eoc;// deleted node: complete its seq
+ return;
+ }
+ default:{
+ return;
+ }
+ }
+ }
+
+ yacco2::remove_unwanted_ast_functor::~remove_unwanted_ast_functor(){
+ }
+
+
+@*2 Insert items back into a tree.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::insert_back_recycled_items_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ cnode_ = srec_->node_;
+
+ yacco2::CAbs_lr1_sym* top_node_sym = AST::content(*cnode_);
+ yacco2::CAbs_lr1_sym* node_sym = AST::content(*insert_node_);
+ if(node_sym->tok_co_ords__.rc_pos__ <= top_node_sym->tok_co_ords__.rc_pos__)
+ return accept_node;
+ return bypass_node;// cuz: apple's symantic error
+ }
+
+ void yacco2::insert_back_recycled_items_functor::insert_node
+ (yacco2::AST& Inode){insert_node_ = &Inode;}
+ yacco2::AST* yacco2::insert_back_recycled_items_functor::new_root(){return new_root_;}
+
+ void yacco2::insert_back_recycled_items_functor::insert_before(){
+ if(stk_env_->idx_ > 0) goto overlay;
+ root_change:@/
+ new_root_ = insert_node_;
+
+ overlay:@/
+ // overlay cur node with new node to insert
+ srec_->node_ = insert_node_;
+ srec_->act_ = ast_base_stack::right;
+ AST::join_sts(*insert_node_,*cnode_);
+ // adj visited node: default to visit cuz next ast could be < than it
+ stk_env_->push(*cnode_,ast_base_stack::visit);
+ adj_prev_caller:@/
+ if(stk_env_->idx_ == 0) return;// only root
+ yacco2::INT pi = idx_ - 1;
+ yacco2::ast_base_stack::s_rec* pcur_rec = stk_env_->stk_rec(pi);
+ yacco2::AST* pnode = pcur_rec->node_;
+ switch (pcur_rec->act_){
+ case yacco2::ast_base_stack::left:{
+ yacco2::AST::zero_1st_son(*pnode);
+ yacco2::AST::join_pts(*pnode,*insert_node_);
+ return;
+ }
+ case yacco2::ast_base_stack::right:{
+ yacco2::AST::zero_brother(*pnode);
+ yacco2::AST::join_sts(*pnode,*insert_node_);
+ return;
+ }
+ }
+ return;
+ }
+
+
+@*2 |tok_can_ast_functor| continue looping thru the tree.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::tok_can_ast_functor::operator()(ast_base_stack* Stk_env){
+ return accept_node;// stop looping thru ast
+ }
+
+@ |tok_can_ast_no_stop_functor| stop looping thru the tree.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+ yacco2::tok_can_ast_no_stop_functor::operator()(ast_base_stack* Stk_env){
+ return stop_walking;//continue looping thru ast
+ }
+
+@*2 |tok_can_ast_bypass_functor|.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::tok_can_ast_bypass_functor::operator()(ast_base_stack* Stk_env){
+ yacco2::ast_base_stack::s_rec* srec = Stk_env->cur_stk_rec_;
+ yacco2::AST* cnode = srec->node_;
+ yacco2::CAbs_lr1_sym* sym = AST::content(*cnode);
+ if(sym->tok_co_ords__.external_file_id__ > 1)
+ return bypass_node;//contine the walk, not wanted
+ return bypass_node;
+ }
+
+@*2 |prt_ast_functor|.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::prt_ast_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ yacco2::INT pidx = idx_ - 1;
+ cnode_ = srec_->node_;
+ //std::string how;
+ if(pidx <= 0) goto prt_prefix;
+ {
+ ast_base_stack::s_rec* psrec = stk_env_->stk_rec(pidx);
+ if(psrec->act_ == ast_base_stack::left){
+ how_[0]='l';
+ }else{
+ how_[0]='r';
+ }
+ how_[1] = 't';
+ how_[2] = (char)0;
+ }
+prt_prefix:@/
+@<acquire trace mu@>;
+ yacco2::INT no_lt(0);
+ for (yacco2::INT x = 0; x <= idx_; ++x)
+ if(stk_env_->stk_rec(x)->act_ == ast_base_stack::left) ++no_lt;
+ for (yacco2::INT x = 0; x <= no_lt; ++x) (*ofile_) << " ";
+ (*ofile_) << ++cnt_ << "::" << ' ';
+@<release trace mu@>;
+call_prt_func:@/
+ (*prt_funct_)(cnode_);
+ return accept_node;//continue looping thru ast
+ }
+
+ yacco2::prt_ast_functor::prt_ast_functor(PF Func,std::ofstream* Ofile):prt_funct_(Func),cnt_(0){
+ if(Ofile == 0){
+ ofile_ = &yacco2::lrclog;
+ }else{
+ ofile_ = Ofile;
+ }
+ }
+
+ void yacco2::prt_ast_functor::reset_cnt(){
+ cnt_ = 0;
+ }
+
+@*2 |fire_a_func_ast_functor|.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::fire_a_func_ast_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ yacco2::INT pidx = idx_ - 1;
+ cnode_ = srec_->node_;
+call_prt_func:@/
+ (*a_funct_)(cnode_);
+ return accept_node;//continue looping thru ast
+ }
+
+ yacco2::fire_a_func_ast_functor::fire_a_func_ast_functor(PF Func):a_funct_(Func){}
+
+@*2 |str_ast_functor|.
+@<accrue tree code@>+=
+yacco2::functor_result_type
+yacco2::str_ast_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ yacco2::INT pidx = idx_ - 1;
+ cnode_ = srec_->node_;
+ //std::string how;
+ if(pidx <= 0) goto prt_prefix;
+ {
+ ast_base_stack::s_rec* psrec = stk_env_->stk_rec(pidx);
+ if(psrec->act_ == ast_base_stack::left){
+ how_[0]='l';
+ }else{
+ how_[0]='r';
+ }
+ how_[1] = 't';
+ how_[2] = (char)0;
+ }
+prt_prefix:@/
+call_prt_func:@/
+ (*prt_funct_)(cnode_,this);
+ return accept_node;//continue looping thru ast
+ }
+
+ yacco2::str_ast_functor::str_ast_functor(PF Func):prt_funct_(Func){source_str_.clear();}
+
diff --git a/web/yacco2/library/war_begin_code.h b/web/yacco2/library/war_begin_code.h
new file mode 100644
index 0000000000..6dc5d984e7
--- /dev/null
+++ b/web/yacco2/library/war_begin_code.h
@@ -0,0 +1,86 @@
+/*188:*/
+//#line 461 "/usr/local/yacco2/library/thread.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 462 "/usr/local/yacco2/library/thread.w"
+
+/*189:*/
+//#line 465 "/usr/local/yacco2/library/thread.w"
+
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 466 "/usr/local/yacco2/library/thread.w"
+
+int i= 1;
+int ie= Caller_pp->th_accepting_cnt__;
+/*625:*/
+//#line 1155 "/usr/local/yacco2/library/macros.w"
+
+/*626:*/
+//#line 1159 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_AR__){
+
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1162 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_AR__::"
+<<Caller_pp->thread_no__<<"::"<<ar_name
+<<" start arbitrating"
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"YACCO2_AR__::"
+<<"number of accept tokens: "
+<<Caller_pp->th_accepting_cnt__
+<<FILE_LINE<<std::endl;
+int ii= 1;
+for(;ii<=Caller_pp->th_accepting_cnt__;++ii){
+yacco2::lrclog<<"YACCO2_AR__::"
+<<"\t terminal in accept queue: "
+<<Caller_pp->pp_accept_queue__[ii].accept_token__->id__
+<<" token pos: "
+<<Caller_pp->pp_accept_queue__[ii].accept_token_pos__
+<<FILE_LINE<<std::endl;
+}
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1180 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:626*/
+//#line 1156 "/usr/local/yacco2/library/macros.w"
+
+
+/*:625*/
+//#line 469 "/usr/local/yacco2/library/thread.w"
+
+
+/*:189*/
+//#line 463 "/usr/local/yacco2/library/thread.w"
+
+
+/*:188*/
diff --git a/web/yacco2/library/war_end_code.h b/web/yacco2/library/war_end_code.h
new file mode 100644
index 0000000000..058699fb7f
--- /dev/null
+++ b/web/yacco2/library/war_end_code.h
@@ -0,0 +1,62 @@
+/*191:*/
+//#line 526 "/usr/local/yacco2/library/thread.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 527 "/usr/local/yacco2/library/thread.w"
+
+/*192:*/
+//#line 531 "/usr/local/yacco2/library/thread.w"
+
+Caller_pp->abort_no_selected_accept_parse_in_arbitrator();
+arbitrated_parameter:
+Caller_pp->arbitrated_token__= &Caller_pp->pp_accept_queue__[i];
+Caller_pp->pp_accept_queue_idx__= i;
+/*629:*/
+//#line 1214 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_AR__){
+
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1217 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_AR__::"
+<<Caller_pp->thread_no__<<"::"<<ar_name
+<<" stop arbitrating"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1222 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:629*/
+//#line 536 "/usr/local/yacco2/library/thread.w"
+
+return(THR)1;
+
+/*:192*/
+//#line 528 "/usr/local/yacco2/library/thread.w"
+
+
+
+/*:191*/
diff --git a/web/yacco2/library/wlibrary.w b/web/yacco2/library/wlibrary.w
new file mode 100644
index 0000000000..562be70c6a
--- /dev/null
+++ b/web/yacco2/library/wlibrary.w
@@ -0,0 +1,36 @@
+@q file: wlibrary.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% This file is part of YACC02 compiler/compiler project.@>
+
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+@i "/usr/local/yacco2/license.w" @>
+@i "/usr/local/yacco2/library/intro.w"
+@i "/usr/local/yacco2/library/constants.w"
+@i "/usr/local/yacco2/library/enum.w"
+@i "/usr/local/yacco2/library/set.w"
+@i "/usr/local/yacco2/library/tblkup.w"
+@i "/usr/local/yacco2/library/rc.w"
+@i "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+@i "/usr/local/yacco2/library/tok_can.w"
+@i "/usr/local/yacco2/library/structures.w"
+@i "/usr/local/yacco2/library/fsm_tbls.w"
+@i "/usr/local/yacco2/library/fsm.w"
+@i "/usr/local/yacco2/library/parse_env.w"
+@i "/usr/local/yacco2/library/wthread.w"
+@i "/usr/local/yacco2/library/thread.w"
+@i "/usr/local/yacco2/library/parser.w"
+@i "/usr/local/yacco2/library/runtime_env.w"
+@i "/usr/local/yacco2/library/tree.w"
+@i "/usr/local/yacco2/library/constraints.w"
+@i "/usr/local/yacco2/library/macros.w"
+@i "/usr/local/yacco2/library/notes.w"
+@i "/usr/local/yacco2/library/bugs.w"
+@i "/usr/local/yacco2/library/errhdling.w"
+@** Index.
diff --git a/web/yacco2/library/wpp_core.h b/web/yacco2/library/wpp_core.h
new file mode 100644
index 0000000000..e45e0740b2
--- /dev/null
+++ b/web/yacco2/library/wpp_core.h
@@ -0,0 +1,434 @@
+/*193:*/
+//#line 553 "/usr/local/yacco2/library/thread.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 554 "/usr/local/yacco2/library/thread.w"
+
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 555 "/usr/local/yacco2/library/thread.w"
+
+/*200:*/
+//#line 650 "/usr/local/yacco2/library/thread.w"
+
+char ma[SMALL_BUFFER_4K];
+const char*pp_start= "YACCO2_MSG__::%i::%s start parsing\n";
+const char*pp_stop= "YACCO2_MSG__::%i::%s stop parsing\n";
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 654 "/usr/local/yacco2/library/thread.w"
+
+
+/*:200*/
+//#line 556 "/usr/local/yacco2/library/thread.w"
+
+/*202:*/
+//#line 663 "/usr/local/yacco2/library/thread.w"
+
+Parser pp_parser(ssPARSE_TABLE,pp_thread_entry,Caller_pp);
+
+/*:202*/
+//#line 557 "/usr/local/yacco2/library/thread.w"
+
+/*201:*/
+//#line 657 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.pp_requesting_parallelism__= Caller_pp;
+pp_parser.from_thread__= Caller_pp;
+pp_parser.no_competing_pp_ths__= Caller_pp->no_requested_ths_to_run__;
+
+/*:201*/
+//#line 558 "/usr/local/yacco2/library/thread.w"
+
+do{
+/*199:*/
+//#line 618 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.override_current_token(*pp_parser.pp_requesting_parallelism__->current_token()
+,pp_parser.pp_requesting_parallelism__->current_token_pos__);
+pp_parser.set_start_token(*pp_parser.pp_requesting_parallelism__->current_token());
+pp_parser.set_start_token_pos(pp_parser.pp_requesting_parallelism__->current_token_pos__);
+pp_parser.top_stack_record()->set_symbol(pp_parser.current_token());
+pp_parser.token_supplier__= pp_parser.pp_requesting_parallelism__->token_supplier__;
+pp_parser.token_producer__= pp_parser.pp_requesting_parallelism__->token_producer__;
+pp_parser.error_queue__= pp_parser.pp_requesting_parallelism__->error_queue__;
+pp_parser.recycle_bin__= pp_parser.pp_requesting_parallelism__->recycle_bin__;
+pp_parser.sym_lookup_functor__= pp_parser.pp_requesting_parallelism__->sym_lookup_functor__;
+pp_parser.supplier_r_w_cnt__= pp_parser.pp_requesting_parallelism__->supplier_r_w_cnt__;
+
+if(pp_parser.th_blk__.grammar_s_parser__!=&pp_parser){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "parser's thd blk's pp addr != itself thd: %i::%s";
+sprintf(a,msg,pp_parser.thread_no__,pp_parser.thread_name());
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+if(pp_parser.th_blk__.grammar_s_parser__->pp_requesting_parallelism__
+!=pp_parser.pp_requesting_parallelism__){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"caller's pp addr not = in called parser's thd blk ptr, and its parser thd: %i::%s";
+sprintf(a,msg,pp_parser.thread_no__,pp_parser.thread_name());
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:199*/
+//#line 560 "/usr/local/yacco2/library/thread.w"
+
+/*637:*/
+//#line 1330 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1332 "/usr/local/yacco2/library/macros.w"
+
+sprintf(ma,pp_start,pp_parser.thread_no__,pp_thread_entry.thread_fnct_name__);
+yacco2::lrclog<<ma;
+Parser*pp_= pp_parser.pp_requesting_parallelism__;
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<pp_parser.thread_no__
+<<"::"
+<<pp_parser.thread_name()
+<<" requesting parser*: "<<pp_
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_MSG__::"<<pp_parser.thread_no__<<"::"
+<<pp_parser.thread_name()
+<<" Caller's # threads to run:: "<<pp_->no_requested_ths_to_run__
+<<" Caller's # active threads: "<<pp_->th_active_cnt__
+<<" Self # competing threads: "<<pp_parser.no_competing_pp_ths__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_MSG__::"
+<<pp_parser.thread_no__<<"::"
+<<pp_parser.thread_name()
+<<" passed token*: "<<pp_->current_token()
+<<'"'<<pp_parser.current_token()->id__<<'"'
+<<" pos: "<<pp_parser.current_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(pp_parser.current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<pp_parser.current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<pp_parser.current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1365 "/usr/local/yacco2/library/macros.w"
+
+}
+if(yacco2::YACCO2_T__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1368 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<pp_parser.thread_no__
+<<"::"
+<<pp_parser.thread_name()
+<<" token*: "<<pp_parser.current_token__
+<<" enum: "<<pp_parser.current_token__->enumerated_id__
+<<" pos: "<<pp_parser.current_token_pos__
+<<' '<<'"'<<pp_parser.current_token__->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(pp_parser.current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<pp_parser.current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<pp_parser.current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\tGPS LINE: "
+<<pp_parser.current_token()->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<pp_parser.current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1394 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:637*/
+//#line 561 "/usr/local/yacco2/library/thread.w"
+
+/*198:*/
+//#line 610 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.parallel_parse();
+
+/*:198*/
+//#line 562 "/usr/local/yacco2/library/thread.w"
+
+/*639:*/
+//#line 1461 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1463 "/usr/local/yacco2/library/macros.w"
+
+sprintf(ma,pp_stop,pp_parser.thread_no__,pp_thread_entry.thread_fnct_name__);
+yacco2::lrclog<<ma;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1466 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:639*/
+//#line 563 "/usr/local/yacco2/library/thread.w"
+
+/*197:*/
+//#line 597 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.remove_from_stack(pp_parser.parse_stack__.top_sub__-1);
+CAbs_lr1_sym*sym= pp_parser.top_stack_record()->symbol__;
+if(sym!=0){
+if(sym->auto_delete__==ON){
+/*640:*/
+//#line 1470 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_TH__){
+THREAD_NO tid= pp_parser.thread_no__;
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1473 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__:: "<<"sym to be deleted: "
+<<tid<<"::"
+<<pp_parser.fsm_tbl__->id__<<"::"
+<<sym->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1479 "/usr/local/yacco2/library/macros.w"
+
+}
+/*:640*/
+//#line 602 "/usr/local/yacco2/library/thread.w"
+
+delete sym;
+}
+pp_parser.top_stack_record()->set_symbol(0);
+}
+pp_parser.parse_stack__.lr_stk_init(*pp_parser.fsm_tbl__->start_state__);
+
+/*:197*/
+//#line 564 "/usr/local/yacco2/library/thread.w"
+
+/*196:*/
+//#line 586 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.use_all_shift__= ON;
+pp_parser.abort_parse__= OFF;
+pp_parser.stop_parse__= OFF;
+pp_parser.has_questionable_shift_occured__= OFF;
+
+/*:196*/
+//#line 565 "/usr/local/yacco2/library/thread.w"
+
+/*642:*/
+//#line 1495 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1497 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<pp_parser.thread_no__
+<<"::"<<pp_thread_entry.thread_fnct_name__
+<<" ==>PP waiting for work: "
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1502 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:642*/
+//#line 566 "/usr/local/yacco2/library/thread.w"
+
+/*195:*/
+//#line 581 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.wait_for_event();
+
+/*:195*/
+//#line 567 "/usr/local/yacco2/library/thread.w"
+
+/*643:*/
+//#line 1506 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1508 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<pp_parser.thread_no__
+<<"::"<<pp_thread_entry.thread_fnct_name__
+<<" ==>PP go process work: "
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1513 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:643*/
+//#line 568 "/usr/local/yacco2/library/thread.w"
+
+}while(pp_parser.th_blk__.status__!=THREAD_TO_EXIT);
+finished_working:
+/*194:*/
+//#line 577 "/usr/local/yacco2/library/thread.w"
+
+pp_parser.clear_parse_stack();
+
+/*:194*/
+//#line 571 "/usr/local/yacco2/library/thread.w"
+
+/*644:*/
+//#line 1517 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1519 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<pp_parser.thread_no__
+<<"::"<<pp_thread_entry.thread_fnct_name__
+<<" ==>PP finished working"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1524 "/usr/local/yacco2/library/macros.w"
+
+}
+/*:644*/
+//#line 572 "/usr/local/yacco2/library/thread.w"
+
+UNLOCK_MUTEX_OF_CALLED_PARSER(pp_parser.mu__,pp_parser," of called thread");
+return(THR)1;
+
+/*:193*/
diff --git a/web/yacco2/library/wproc_pp_core.h b/web/yacco2/library/wproc_pp_core.h
new file mode 100644
index 0000000000..d400f42f02
--- /dev/null
+++ b/web/yacco2/library/wproc_pp_core.h
@@ -0,0 +1,298 @@
+/*203:*/
+//#line 687 "/usr/local/yacco2/library/thread.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 688 "/usr/local/yacco2/library/thread.w"
+
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 689 "/usr/local/yacco2/library/thread.w"
+
+/*209:*/
+//#line 768 "/usr/local/yacco2/library/thread.w"
+
+char ma[SMALL_BUFFER_4K];
+const char*pp_start= "YACCO2_MSG__::PROC::%i::%s start parsing\n";
+const char*pp_stop= "YACCO2_MSG__::PROC::%i::%s stop parsing\n";
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 772 "/usr/local/yacco2/library/thread.w"
+
+
+/*:209*/
+//#line 690 "/usr/local/yacco2/library/thread.w"
+
+/*210:*/
+//#line 775 "/usr/local/yacco2/library/thread.w"
+
+proc_parser->pp_requesting_parallelism__= Caller_pp;
+proc_parser->launched_as_procedure__= true;
+proc_parser->from_thread__= Caller_pp;
+proc_parser->no_competing_pp_ths__= Caller_pp->no_requested_ths_to_run__;
+
+
+/*:210*/
+//#line 691 "/usr/local/yacco2/library/thread.w"
+
+
+/*208:*/
+//#line 747 "/usr/local/yacco2/library/thread.w"
+
+if(Caller_pp->top_stack_record()->state__->proc_call_addr__==0){
+proc_parser->override_current_token(*Caller_pp->current_token()
+,Caller_pp->current_token_pos__);
+proc_parser->set_start_token(*Caller_pp->current_token());
+proc_parser->set_start_token_pos(Caller_pp->current_token_pos__);
+proc_parser->top_stack_record()->set_symbol(proc_parser->current_token());
+}else{
+Cparse_record*pr=
+Caller_pp->get_stack_record(Caller_pp->current_stack_pos()-2);
+int new_pos= Caller_pp->current_token_pos__-1;
+proc_parser->override_current_token(*pr->symbol__,new_pos);
+proc_parser->set_start_token(*pr->symbol__);
+proc_parser->set_start_token_pos(new_pos);
+}
+proc_parser->token_supplier__= Caller_pp->token_supplier__;
+proc_parser->token_producer__= Caller_pp->token_producer__;
+proc_parser->error_queue__= Caller_pp->error_queue__;
+proc_parser->recycle_bin__= Caller_pp->recycle_bin__;
+proc_parser->sym_lookup_functor__= Caller_pp->sym_lookup_functor__;
+/*:208*/
+//#line 693 "/usr/local/yacco2/library/thread.w"
+
+/*638:*/
+//#line 1401 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1403 "/usr/local/yacco2/library/macros.w"
+
+sprintf(ma,pp_start,proc_parser->thread_no__,called_proc_name);
+yacco2::lrclog<<ma;
+Parser*pp_= proc_parser->pp_requesting_parallelism__;
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<proc_parser->thread_no__
+<<"::"
+<<proc_parser->thread_name()
+<<" requesting parser*: "<<pp_
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_MSG__::PROC::"<<proc_parser->thread_no__<<"::"
+<<proc_parser->thread_name()
+<<" Caller's # threads to run:: "<<pp_->no_requested_ths_to_run__
+<<" Caller's # active threads: "<<pp_->th_active_cnt__
+<<" Self # competing threads: "<<proc_parser->no_competing_pp_ths__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_MSG__::PROC::"
+<<proc_parser->thread_no__<<"::"
+<<proc_parser->thread_name()
+<<" passed token*: "<<pp_->current_token()
+<<'"'<<proc_parser->current_token()->id__<<'"'
+<<" pos: "<<proc_parser->current_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(proc_parser->current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<proc_parser->current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<proc_parser->current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1435 "/usr/local/yacco2/library/macros.w"
+
+}
+if(yacco2::YACCO2_T__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1438 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<proc_parser->thread_no__
+<<"::"
+<<proc_parser->thread_name()
+<<" token*: "<<proc_parser->current_token__
+<<" enum: "<<proc_parser->current_token__->enumerated_id__
+<<" pos: "<<proc_parser->current_token_pos__
+<<' '<<'"'<<proc_parser->current_token__->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(proc_parser->current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<proc_parser->current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<proc_parser->current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1457 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:638*/
+//#line 694 "/usr/local/yacco2/library/thread.w"
+
+/*207:*/
+//#line 732 "/usr/local/yacco2/library/thread.w"
+
+THR_result rslt= proc_parser->parallel_parse();
+
+/*:207*/
+//#line 695 "/usr/local/yacco2/library/thread.w"
+
+/*206:*/
+//#line 720 "/usr/local/yacco2/library/thread.w"
+
+proc_parser->remove_from_stack(proc_parser->parse_stack__.top_sub__-1);
+CAbs_lr1_sym*sym= proc_parser->top_stack_record()->symbol__;
+if(sym!=0){
+if(sym->auto_delete__==ON){
+/*641:*/
+//#line 1482 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_TH__){
+THREAD_NO tid= proc_parser->thread_no__;
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1485 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__:: "<<"sym to be deleted: "
+<<tid<<"::"
+<<proc_parser->fsm_tbl__->id__<<"::"
+<<sym->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1491 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:641*/
+//#line 725 "/usr/local/yacco2/library/thread.w"
+
+delete sym;
+}
+proc_parser->top_stack_record()->set_symbol(0);
+}
+proc_parser->parse_stack__.lr_stk_init(*proc_parser->fsm_tbl__->start_state__);
+/*:206*/
+//#line 696 "/usr/local/yacco2/library/thread.w"
+
+/*205:*/
+//#line 709 "/usr/local/yacco2/library/thread.w"
+
+proc_parser->set_use_all_shift_on();
+proc_parser->set_abort_parse(OFF);
+proc_parser->set_stop_parse(OFF);
+proc_parser->has_questionable_shift_occured__= OFF;
+
+/*:205*/
+//#line 697 "/usr/local/yacco2/library/thread.w"
+
+
+finished_working:
+/*204:*/
+//#line 705 "/usr/local/yacco2/library/thread.w"
+
+proc_parser->clear_parse_stack();
+
+/*:204*/
+//#line 700 "/usr/local/yacco2/library/thread.w"
+
+/*645:*/
+//#line 1527 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1529 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::PROC::"<<proc_parser->thread_no__
+<<"::"<<called_proc_name
+<<" ==>procedure finished working"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1534 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:645*/
+//#line 701 "/usr/local/yacco2/library/thread.w"
+
+return rslt;
+
+/*:203*/
diff --git a/web/yacco2/library/wrc.cpp b/web/yacco2/library/wrc.cpp
new file mode 100644
index 0000000000..28ef79713e
--- /dev/null
+++ b/web/yacco2/library/wrc.cpp
@@ -0,0 +1,225 @@
+/*55:*/
+//#line 77 "/usr/local/yacco2/library/rc.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 78 "/usr/local/yacco2/library/rc.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 79 "/usr/local/yacco2/library/rc.w"
+
+/*27:*/
+//#line 408 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2_characters.h"
+
+/*:27*/
+//#line 80 "/usr/local/yacco2/library/rc.w"
+
+/*28:*/
+//#line 412 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2_k_symbols.h"
+
+/*:28*/
+//#line 81 "/usr/local/yacco2/library/rc.w"
+
+using namespace NS_yacco2_characters;
+/*54:*/
+//#line 38 "/usr/local/yacco2/library/rc.w"
+
+int yacco2::rc_map::current_rc_malloc_sub__(-1);
+char yacco2::rc_map::array_chr_sym__[SIZE_RC_MALLOC];
+yacco2::KCHARP yacco2::rc_map::chr_literal__[ASCII_8_BIT]=
+{"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08","\x09","\x0a"
+,"\x0b","\x0c","\x0d","\x0e","\x0f"
+,"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17","\x18","\x19","\x1a"
+,"\x1b","\x1c","\x1d","\x1e","\x1f"
+,"\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27","\x28","\x29","\x2a"
+,"\x2b","\x2c","\x2d","\x2e","\x2f"
+,"\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37","\x38","\x39","\x3a"
+,"\x3b","\x3c","\x3d","\x3e","\x3f"
+,"\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47","\x48","\x49","\x4a"
+,"\x4b","\x4c","\x4d","\x4e","\x4f"
+,"\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57","\x58","\x59","\x5a"
+,"\x5b","\x5c","\x5d","\x5e","\x5f"
+,"\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67","\x68","\x69","\x6a"
+,"\x6b","\x6c","\x6d","\x6e","\x6f"
+,"\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77","\x78","\x79","\x7a"
+,"\x7b","\x7c","\x7d","\x7e","\x7f"
+,"\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87","\x88","\x89","\x8a"
+,"\x8b","\x8c","\x8d","\x8e","\x8f"
+,"\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97","\x98","\x99","\x9a"
+,"\x9b","\x9c","\x9d","\x9e","\x9f"
+,"\xa0","\xa1","\xa2","\xa3","\xa4","\xa5","\xa6","\xa7","\xa8","\xa9","\xaa"
+,"\xab","\xac","\xad","\xae","\xaf"
+,"\xb0","\xb1","\xb2","\xb3","\xb4","\xb5","\xb6","\xb7","\xb8","\xb9","\xba"
+,"\xbb","\xbc","\xbd","\xbe","\xbf"
+,"\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\xc6","\xc7","\xc8","\xc9","\xca"
+,"\xcb","\xcc","\xcd","\xce","\xcf"
+,"\xd0","\xd1","\xd2","\xd3","\xd4","\xd5","\xd6","\xd7","\xd8","\xd9","\xda"
+,"\xdb","\xdc","\xdd","\xde","\xdf"
+,"\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\xe6","\xe7","\xe8","\xe9","\xea"
+,"\xeb","\xec","\xed","\xee","\xef"
+,"\xf0","\xf1","\xf2","\xf3","\xf4","\xf5","\xf6","\xf7","\xf8","\xf9","\xfa"
+,"\xfb","\xfc","\xfd","\xfe","\xff"
+};
+
+/*:54*//*56:*/
+//#line 89 "/usr/local/yacco2/library/rc.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::rc_map::
+map_char_to_raw_char_sym
+(yacco2::UINT Char,yacco2::UINT File_no,yacco2::UINT Pos,UINT*Line_no,UINT*Pos_in_line){
+map_char_to_symbol:
+/*548:*/
+//#line 65 "/usr/local/yacco2/library/constraints.w"
+
+if(File_no<1){
+
+yacco2::KCHARP msg= "Error - File_no not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:548*/
+//#line 95 "/usr/local/yacco2/library/rc.w"
+
+if(Char>=rc_size_){
+/*562:*/
+//#line 241 "/usr/local/yacco2/library/constraints.w"
+
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Bad char mapping chr value: %i";
+sprintf(a,msg,Char);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+
+/*:562*/
+//#line 97 "/usr/local/yacco2/library/rc.w"
+
+return 0;
+}
+/*646:*/
+//#line 1538 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_TLEX__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1540 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog
+<<"YACCO2_TLEX__:: "<<"chr: "<<Char<<" File: "
+<<File_no<<" Pos: "<<Pos
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1545 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:646*/
+//#line 100 "/usr/local/yacco2/library/rc.w"
+
+if(Char==EOF_CHAR_SUB){
+yacco2::PTR_LR1_eog__->tok_co_ords__.external_file_id__= File_no;
+yacco2::PTR_LR1_eog__->tok_co_ords__.rc_pos__= Pos;
+yacco2::PTR_LR1_eog__->set_line_no_and_pos_in_line(*Line_no,1);
+return yacco2::PTR_LR1_eog__;
+}
+/*57:*/
+//#line 121 "/usr/local/yacco2/library/rc.w"
+
+++rc_map::current_rc_malloc_sub__;
+long rc_sub= current_rc_malloc_sub__*SIZE_CAbs_lr1_sym;
+if(rc_sub> SIZE_RC_MALLOC){
+/*563:*/
+//#line 251 "/usr/local/yacco2/library/constraints.w"
+
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Sorry run out of raw character storage: need to regen Yacco2: %i";
+sprintf(a,msg,SIZE_RC_MALLOC);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+//#line 1 "/usr/local/yacco2/library/macros.w"
+
+
+
+
+
+
+
+/*:563*/
+//#line 125 "/usr/local/yacco2/library/rc.w"
+
+}
+CAbs_lr1_sym*sym= (CAbs_lr1_sym*)&rc_map::array_chr_sym__[rc_sub];
+sym->id__= rc_map::chr_literal__[Char];
+sym->enumerated_id__= Char+START_OF_RC_ENUM;
+sym->tok_co_ords__.external_file_id__= File_no;
+sym->tok_co_ords__.rc_pos__= Pos;
+
+/*49:*/
+//#line 113 "/usr/local/yacco2/library/set.w"
+
+INT R= sym->enumerated_id__%SET_ELEM_NO_BITS;
+sym->tok_co_ords__.set_entry__.partition__
+= sym->enumerated_id__/SET_ELEM_NO_BITS;
+sym->tok_co_ords__.set_entry__.elements__= 1<<R;
+
+/*:49*/
+//#line 133 "/usr/local/yacco2/library/rc.w"
+
+//#line 1 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+
+
+
+
+
+
+/*:57*/
+//#line 107 "/usr/local/yacco2/library/rc.w"
+
+++(*Pos_in_line);
+sym->set_line_no_and_pos_in_line(*Line_no,*Pos_in_line);
+if(Char==LINE_FEED){
+++(*Line_no);
+*Pos_in_line= START_CHAR_POS;
+}
+return sym;
+}
+
+/*:56*/
+//#line 83 "/usr/local/yacco2/library/rc.w"
+
+
+/*:55*/
diff --git a/web/yacco2/library/wset.cpp b/web/yacco2/library/wset.cpp
new file mode 100644
index 0000000000..3fee31bf9d
--- /dev/null
+++ b/web/yacco2/library/wset.cpp
@@ -0,0 +1,38 @@
+/*42:*/
+//#line 48 "/usr/local/yacco2/library/set.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 49 "/usr/local/yacco2/library/set.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 50 "/usr/local/yacco2/library/set.w"
+
+/*43:*/
+//#line 54 "/usr/local/yacco2/library/set.w"
+
+
+/*:43*//*47:*/
+//#line 98 "/usr/local/yacco2/library/set.w"
+
+extern void
+yacco2::create_set_entry(yacco2::USINT Enum_id,yacco2::Set_entry&Set){
+INT R= Enum_id%SET_ELEM_NO_BITS;
+Set.partition__= Enum_id/SET_ELEM_NO_BITS;
+Set.elements__= 1<<R;
+}
+
+/*:47*/
+//#line 51 "/usr/local/yacco2/library/set.w"
+
+
+/*:42*/
diff --git a/web/yacco2/library/wthread.cpp b/web/yacco2/library/wthread.cpp
new file mode 100644
index 0000000000..bc0944a828
--- /dev/null
+++ b/web/yacco2/library/wthread.cpp
@@ -0,0 +1,1728 @@
+/*169:*/
+//#line 10 "/usr/local/yacco2/library/thread.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 11 "/usr/local/yacco2/library/thread.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 12 "/usr/local/yacco2/library/thread.w"
+
+/*142:*/
+//#line 137 "/usr/local/yacco2/library/wthread.w"
+
+#if THREAD_LIBRARY_TO_USE__ == 1
+/*:142*//*143:*/
+//#line 144 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::CREATE_MUTEX(yacco2::MUTEX&Mu){
+Mu= CreateMutex(0,OFF,0);
+}
+/*:143*//*144:*/
+//#line 150 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::LOCK_MUTEX(yacco2::MUTEX&Mu){
+WaitForSingleObject(Mu,INFINITE);
+}
+/*:144*//*145:*/
+//#line 156 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text){
+/*606:*/
+//#line 883 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 885 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" trying to acquire mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 889 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:606*/
+//#line 160 "/usr/local/yacco2/library/wthread.w"
+
+WaitForSingleObject(Mu,INFINITE);
+/*607:*/
+//#line 893 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 895 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" acquired mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 899 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:607*/
+//#line 162 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:145*//*146:*/
+//#line 165 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::UNLOCK_MUTEX(yacco2::MUTEX&Mu){
+ReleaseMutex(Mu);
+}
+/*:146*//*147:*/
+//#line 171 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::UNLOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text){
+/*608:*/
+//#line 903 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 905 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" trying to release mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 909 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:608*/
+//#line 175 "/usr/local/yacco2/library/wthread.w"
+
+ReleaseMutex(Mu);
+/*609:*/
+//#line 913 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 915 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" released mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 919 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:609*/
+//#line 177 "/usr/local/yacco2/library/wthread.w"
+
+}
+
+/*:147*//*148:*/
+//#line 181 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::DESTROY_MUTEX(yacco2::MUTEX&Mu){
+CloseHandle(Mu);
+}
+/*:148*//*149:*/
+//#line 192 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::CREATE_COND_VAR(yacco2::COND_VAR&Cv){
+COND_VAR xx= CreateSemaphore(0,0,1,0);
+Cv= xx;
+}
+/*:149*//*150:*/
+//#line 203 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::COND_WAIT(yacco2::COND_VAR&Cv,yacco2::MUTEX&Mu
+,yacco2::Parser&parser){
+/*648:*/
+//#line 1552 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1554 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog
+<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__
+<<"::"<<parser.thread_name()
+<<" COND_WAIT entered into Wait on event "
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1561 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:648*/
+//#line 207 "/usr/local/yacco2/library/wthread.w"
+
+UNLOCK_MUTEX_OF_CALLED_PARSER(Mu,parser," of self by COND_WAIT()");
+WaitForSingleObject(Cv,INFINITE);
+LOCK_MUTEX_OF_CALLED_PARSER(Mu,parser," of self from wakened COND_WAIT()");
+/*649:*/
+//#line 1565 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1567 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog
+<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"<<parser.thread_no__
+<<"::"<<parser.thread_name()
+<<" COND_WAIT exit on event "
+<<" cv_cond: "<<parser.cv_cond__
+<<" no competing thds: "
+<<parser.no_competing_pp_ths__
+<<" no active thds: "
+<<parser.from_thread__->th_active_cnt__
+<<" from: "
+<<parser.from_thread__->thread_no__<<"::"
+<<parser.from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1581 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:649*/
+//#line 211 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:150*//*151:*/
+//#line 218 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::SIGNAL_COND_VAR(yacco2::Parser&To_thread,yacco2::Parser&parser){
+/*650:*/
+//#line 1585 "/usr/local/yacco2/library/macros.w"
+
+clock_t start_;
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+start_= clock();
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1589 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__<<"::"<<parser.thread_name()
+<<" to signal SIGNAL_COND_VAR: "
+<<To_thread.thread_no__<<"::"<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1595 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:650*/
+//#line 221 "/usr/local/yacco2/library/wthread.w"
+
+ReleaseSemaphore(To_thread.cv__,1,0);
+/*651:*/
+//#line 1599 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1601 "/usr/local/yacco2/library/macros.w"
+
+clock_t stop_= clock();
+yacco2::lrclog<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__<<"::"<<parser.thread_name()
+<<" after SIGNAL_COND_VAR : "<<stop_-start_
+<<" to: "<<To_thread.thread_no__<<"::"
+<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1609 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:651*/
+//#line 223 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:151*//*152:*/
+//#line 226 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::DESTROY_COND_VAR(yacco2::COND_VAR&Cv){
+CloseHandle(Cv);
+}
+/*:152*//*153:*/
+//#line 250 "/usr/local/yacco2/library/wthread.w"
+
+extern
+yacco2::THR_result
+yacco2::CREATE_THREAD(yacco2::Type_pp_fnct_ptr Thread
+,yacco2::Parser&Parser_requesting_parallelism){
+yacco2::THREAD_NO thread_no;
+/*652:*/
+//#line 1613 "/usr/local/yacco2/library/macros.w"
+
+clock_t start_= clock();
+if(yacco2::YACCO2_THP__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1616 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_THP__:: "
+<<Parser_requesting_parallelism.thread_no__<<"::"
+<<Parser_requesting_parallelism.thread_name()
+<<" before CREATE_THREAD"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1622 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:652*/
+//#line 256 "/usr/local/yacco2/library/wthread.w"
+
+THR result= _beginthreadex(0,0,(Type_pp_fnct_ptr_voidp)Thread
+,&Parser_requesting_parallelism,0,&thread_no);
+/*653:*/
+//#line 1626 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1628 "/usr/local/yacco2/library/macros.w"
+
+clock_t stop_= clock();
+yacco2::lrclog<<"YACCO2_THP__:: "
+<<Parser_requesting_parallelism.thread_no__<<"::"
+<<Parser_requesting_parallelism.thread_name()
+<<" after CREATE_THREAD: "<<stop_-start_
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1635 "/usr/local/yacco2/library/macros.w"
+
+}
+//#line 1 "/usr/local/yacco2/library/notes.w"
+
+
+
+
+
+
+
+/*:653*/
+//#line 259 "/usr/local/yacco2/library/wthread.w"
+
+return result;
+}
+/*:153*//*154:*/
+//#line 263 "/usr/local/yacco2/library/wthread.w"
+
+extern
+yacco2::THREAD_NO yacco2::THREAD_SELF(){
+return GetCurrentThreadId();
+}
+
+/*:154*//*155:*/
+//#line 270 "/usr/local/yacco2/library/wthread.w"
+
+#elif THREAD_LIBRARY_TO_USE__ == 0
+/*:155*//*156:*/
+//#line 285 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::CREATE_MUTEX(yacco2::MUTEX&Mu){
+int result= pthread_mutex_init(&Mu,0);
+}
+
+/*:156*//*157:*/
+//#line 292 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::LOCK_MUTEX(yacco2::MUTEX&Mu){
+int result= pthread_mutex_lock(&Mu);
+}
+
+/*:157*//*158:*/
+//#line 299 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text){
+/*606:*/
+//#line 883 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 885 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" trying to acquire mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 889 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:606*/
+//#line 303 "/usr/local/yacco2/library/wthread.w"
+
+int result= pthread_mutex_lock(&Mu);
+/*607:*/
+//#line 893 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 895 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" acquired mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 899 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:607*/
+//#line 305 "/usr/local/yacco2/library/wthread.w"
+
+}
+
+/*:158*//*159:*/
+//#line 309 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::UNLOCK_MUTEX(yacco2::MUTEX&Mu){
+int result= pthread_mutex_unlock(&Mu);
+}
+
+/*:159*//*160:*/
+//#line 316 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void
+yacco2::UNLOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX&Mu
+,yacco2::Parser&parser,const char*Text){
+/*608:*/
+//#line 903 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 905 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" trying to release mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 909 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:608*/
+//#line 321 "/usr/local/yacco2/library/wthread.w"
+
+int result= pthread_mutex_unlock(&Mu);
+/*609:*/
+//#line 913 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 915 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MU_GRAMMAR__::"<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" released mutex"<<Text
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 919 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:609*/
+//#line 323 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:160*//*161:*/
+//#line 326 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::DESTROY_MUTEX(yacco2::MUTEX&Mu){
+int result= pthread_mutex_destroy(&Mu);
+}
+/*:161*//*162:*/
+//#line 332 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::CREATE_COND_VAR(yacco2::COND_VAR&Cv){
+pthread_cond_init(&Cv,0);
+}
+/*:162*//*163:*/
+//#line 338 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::COND_WAIT(yacco2::COND_VAR&Cv,yacco2::MUTEX&Mu
+,yacco2::Parser&parser){
+/*648:*/
+//#line 1552 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1554 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog
+<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__
+<<"::"<<parser.thread_name()
+<<" COND_WAIT entered into Wait on event "
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1561 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:648*/
+//#line 342 "/usr/local/yacco2/library/wthread.w"
+
+if(yacco2::YACCO2_MU_GRAMMAR__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 344 "/usr/local/yacco2/library/wthread.w"
+
+yacco2::lrclog<<parser.thread_no__<<"::"
+<<parser.fsm_tbl__->id__<<"::"<<" before release mutex by pthread_cond_wait()"<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 347 "/usr/local/yacco2/library/wthread.w"
+
+}
+pthread_cond_wait(&Cv,&Mu);
+/*649:*/
+//#line 1565 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1567 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog
+<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"<<parser.thread_no__
+<<"::"<<parser.thread_name()
+<<" COND_WAIT exit on event "
+<<" cv_cond: "<<parser.cv_cond__
+<<" no competing thds: "
+<<parser.no_competing_pp_ths__
+<<" no active thds: "
+<<parser.from_thread__->th_active_cnt__
+<<" from: "
+<<parser.from_thread__->thread_no__<<"::"
+<<parser.from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1581 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:649*/
+//#line 350 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:163*//*164:*/
+//#line 353 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::SIGNAL_COND_VAR(yacco2::Parser&To_thread,yacco2::Parser&parser){
+/*650:*/
+//#line 1585 "/usr/local/yacco2/library/macros.w"
+
+clock_t start_;
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+start_= clock();
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1589 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__<<"::"<<parser.thread_name()
+<<" to signal SIGNAL_COND_VAR: "
+<<To_thread.thread_no__<<"::"<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1595 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:650*/
+//#line 356 "/usr/local/yacco2/library/wthread.w"
+
+pthread_cond_signal(&To_thread.cv__);
+/*651:*/
+//#line 1599 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__||yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1601 "/usr/local/yacco2/library/macros.w"
+
+clock_t stop_= clock();
+yacco2::lrclog<<"YACCO2_THP__ || yacco2::YACCO2_MSG__::"
+<<parser.thread_no__<<"::"<<parser.thread_name()
+<<" after SIGNAL_COND_VAR : "<<stop_-start_
+<<" to: "<<To_thread.thread_no__<<"::"
+<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1609 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:651*/
+//#line 358 "/usr/local/yacco2/library/wthread.w"
+
+}
+/*:164*//*165:*/
+//#line 361 "/usr/local/yacco2/library/wthread.w"
+
+extern
+void yacco2::DESTROY_COND_VAR(yacco2::COND_VAR&Cv){
+pthread_cond_destroy(&Cv);
+}
+/*:165*//*166:*/
+//#line 373 "/usr/local/yacco2/library/wthread.w"
+
+extern
+yacco2::THR_result
+yacco2::CREATE_THREAD
+(yacco2::Type_pp_fnct_ptr Thread,yacco2::Parser&Parser_requesting_parallelism){
+/*652:*/
+//#line 1613 "/usr/local/yacco2/library/macros.w"
+
+clock_t start_= clock();
+if(yacco2::YACCO2_THP__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1616 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_THP__:: "
+<<Parser_requesting_parallelism.thread_no__<<"::"
+<<Parser_requesting_parallelism.thread_name()
+<<" before CREATE_THREAD"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1622 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:652*/
+//#line 378 "/usr/local/yacco2/library/wthread.w"
+
+yacco2::THREAD_NO thread_no;
+pthread_attr_t alpha_attr;
+pthread_attr_init(&alpha_attr);
+#ifdef VMS__
+pthread_attr_setstacksize(&alpha_attr,VMS_PTHREAD_STACK_SIZE__);
+#endif
+THR_result result= pthread_create(&thread_no,&alpha_attr
+,(Type_pp_fnct_ptr_voidp)Thread,&Parser_requesting_parallelism);
+pthread_detach(thread_no);
+/*653:*/
+//#line 1626 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_THP__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1628 "/usr/local/yacco2/library/macros.w"
+
+clock_t stop_= clock();
+yacco2::lrclog<<"YACCO2_THP__:: "
+<<Parser_requesting_parallelism.thread_no__<<"::"
+<<Parser_requesting_parallelism.thread_name()
+<<" after CREATE_THREAD: "<<stop_-start_
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1635 "/usr/local/yacco2/library/macros.w"
+
+}
+//#line 1 "/usr/local/yacco2/library/notes.w"
+
+
+
+
+
+
+
+/*:653*/
+//#line 388 "/usr/local/yacco2/library/wthread.w"
+
+return result;
+}
+
+/*:166*//*167:*/
+//#line 393 "/usr/local/yacco2/library/wthread.w"
+
+extern
+yacco2::THREAD_NO yacco2::THREAD_SELF(){
+return pthread_self();
+}
+
+/*:167*//*168:*/
+//#line 400 "/usr/local/yacco2/library/wthread.w"
+
+#endif
+//#line 1 "/usr/local/yacco2/library/thread.w"
+
+
+
+
+
+
+
+
+/*:168*//*174:*/
+//#line 79 "/usr/local/yacco2/library/thread.w"
+
+yacco2::Parallel_thread_tbl_type yacco2::Parallel_thread_table(MAX_NO_THDS);
+yacco2::Parallel_thread_proc_call_table_type yacco2::Parallel_thread_proc_call_table[MAX_NO_THDS];
+
+/*:174*//*175:*/
+//#line 86 "/usr/local/yacco2/library/thread.w"
+
+extern
+yacco2::THR
+_YACCO2_CALL_TYPE
+yacco2::AR_for_manual_thread_spawning(yacco2::Parser*Caller_pp){
+std::string ar_name("AR_yacco2");
+/*30:*/
+//#line 420 "/usr/local/yacco2/library/intro.w"
+
+#include "war_begin_code.h"
+
+/*:30*/
+//#line 92 "/usr/local/yacco2/library/thread.w"
+
+/*176:*/
+//#line 107 "/usr/local/yacco2/library/thread.w"
+
+if(Caller_pp->th_accepting_cnt__> 1){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"no arbitration code present in %s - accept token queue has %i > 1 tokens to arbitrate on";
+sprintf(a,msg,ar_name.c_str(),Caller_pp->th_accepting_cnt__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:176*/
+//#line 93 "/usr/local/yacco2/library/thread.w"
+
+/*31:*/
+//#line 424 "/usr/local/yacco2/library/intro.w"
+
+#include "war_end_code.h"
+
+/*:31*/
+//#line 94 "/usr/local/yacco2/library/thread.w"
+
+}
+
+
+/*:175*//*177:*/
+//#line 134 "/usr/local/yacco2/library/thread.w"
+
+yacco2::worker_thread_blk::worker_thread_blk()
+:grammar_s_parser__(0)
+,status__(0),run_cnt__(1),thd_id__(0){
+static bool init_gbl(OFF);
+if(init_gbl==OFF){
+init_gbl= ON;
+CREATE_MUTEX(yacco2::TH_TBL_MU);
+CREATE_MUTEX(yacco2::TRACE_MU);
+CREATE_MUTEX(yacco2::TOKEN_MU);
+CREATE_MUTEX(yacco2::SYM_TBL_MU);
+}
+}
+
+/*:177*//*178:*/
+//#line 156 "/usr/local/yacco2/library/thread.w"
+
+yacco2::worker_thread_blk::worker_thread_blk(yacco2::Parser*Grammar_s_parser
+,yacco2::Parser*Calling_parser)
+:grammar_s_parser__(Grammar_s_parser)
+,status__(THREAD_WAITING_FOR_WORK)
+,run_cnt__(1)
+,thd_id__(grammar_s_parser__->thread_entry__->thd_id__){
+status__= THREAD_WORKING;
+Parallel_thread_list_type&i=
+Parallel_thread_table[grammar_s_parser__->thread_entry__->thd_id__];
+i.push_back(this);
+/*618:*/
+//#line 1047 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1049 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<this->grammar_s_parser__->thread_no__
+<<"::"<<this->grammar_s_parser__->thread_name()
+<<" th_blk*: "<<this
+<<" pp this: "<<this->grammar_s_parser__
+<<" this^pp^th_blk: "<<&this->grammar_s_parser__->th_blk__
+<<"pp*: "<<grammar_s_parser__
+<<"pp^th blk*: "<<&grammar_s_parser__->th_blk__
+<<" #: "<<thd_id__
+<<" thread created "
+<<grammar_s_parser__->thread_no__
+<<"::"<<grammar_s_parser__->thread_name()
+<<" of grammar: "<<grammar_s_parser__->fsm_tbl__->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1064 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:618*/
+//#line 167 "/usr/local/yacco2/library/thread.w"
+
+}
+/*:178*//*179:*/
+//#line 175 "/usr/local/yacco2/library/thread.w"
+
+void
+yacco2::worker_thread_blk::set_waiting_for_work(){
+/*616:*/
+//#line 1006 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1008 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<this->grammar_s_parser__->thread_no__
+<<"::"<<this->grammar_s_parser__->thread_name()
+<<" th_blk*: "<<this
+<<"this pp*: "<<this->grammar_s_parser__
+<<"pp*: "<<grammar_s_parser__
+<<"pp^th blk*: "<<&grammar_s_parser__->th_blk__
+<<" #: "<<thd_id__
+<<" st: "<<status__
+<<" before setting waiting for work"
+<<' '
+<<grammar_s_parser__->thread_no__
+<<"::"<<grammar_s_parser__->fsm_tbl__->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1023 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:616*/
+//#line 178 "/usr/local/yacco2/library/thread.w"
+
+status__= THREAD_WAITING_FOR_WORK;
+/*617:*/
+//#line 1027 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1029 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<this->grammar_s_parser__->thread_no__
+<<"::"<<this->grammar_s_parser__->thread_name()
+<<" th_blk*: "<<this
+<<"this pp*: "<<this->grammar_s_parser__
+<<"pp*: "<<grammar_s_parser__
+<<"pp^th blk*: "<<&grammar_s_parser__->th_blk__
+<<" #: "<<thd_id__
+<<" st: "<<status__
+<<" after setting waiting for work "
+<<grammar_s_parser__->thread_no__
+<<"::"<<grammar_s_parser__->fsm_tbl__->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1043 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:617*/
+//#line 180 "/usr/local/yacco2/library/thread.w"
+
+}
+
+/*:179*//*180:*/
+//#line 197 "/usr/local/yacco2/library/thread.w"
+
+extern void yacco2::Parallel_threads_shutdown(yacco2::Parser&PP){
+/*380:*/
+//#line 2829 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2831 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to acquire thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2833 "/usr/local/yacco2/library/parser.w"
+
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2837 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Acquired thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2839 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:380*/
+//#line 199 "/usr/local/yacco2/library/thread.w"
+
+int no_thds_to_shutdown(0);
+int no_ths_exited(0);
+/*181:*/
+//#line 214 "/usr/local/yacco2/library/thread.w"
+
+#if THREAD_LIBRARY_TO_USE__ == 1
+Sleep(1000);
+#elif THREAD_LIBRARY_TO_USE__ == 0
+sleep(1);
+#endif
+
+/*:181*/
+//#line 202 "/usr/local/yacco2/library/thread.w"
+
+/*182:*/
+//#line 222 "/usr/local/yacco2/library/thread.w"
+
+Parallel_thread_tbl_iterator_type k= Parallel_thread_table.begin();
+Parallel_thread_tbl_iterator_type ke= Parallel_thread_table.end();
+for(;k!=ke;++k){
+Parallel_thread_list_iterator_type m= k->begin();
+Parallel_thread_list_iterator_type me= k->end();
+for(;m!=me;++m){
+++no_thds_to_shutdown;
+}
+}
+yacco2::lrclog<<"Number of threads in table to shutdown: "<<no_thds_to_shutdown<<__FILE__<<__LINE__<<std::endl;
+k= Parallel_thread_table.begin();
+for(;k!=ke;++k){
+Parallel_thread_list_iterator_type m= k->begin();
+Parallel_thread_list_iterator_type me= k->end();
+for(;m!=me;++m){
+worker_thread_blk*tb= *m;
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 239 "/usr/local/yacco2/library/thread.w"
+
+yacco2::lrclog<<"worker task in table tb*: "<<tb
+<<" thread id: "
+<<tb->grammar_s_parser__->thread_no__
+<<"::"<<tb->grammar_s_parser__->thread_name()
+<<" run cnt: "<<tb->run_cnt__;
+switch(tb->status__){
+case THREAD_WAITING_FOR_WORK:{
+yacco2::lrclog<<" waiting for work";
+break;
+}
+case THREAD_WORKING:{
+yacco2::lrclog<<" working";
+break;
+}
+case THREAD_TO_EXIT:{
+yacco2::lrclog<<" thread to exit";
+break;
+}
+default:{
+yacco2::lrclog<<" ??? thread status: "<<tb->status__;
+break;
+}
+}
+yacco2::lrclog<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 264 "/usr/local/yacco2/library/thread.w"
+
+}
+}
+
+
+/*:182*/
+//#line 203 "/usr/local/yacco2/library/thread.w"
+
+/*183:*/
+//#line 270 "/usr/local/yacco2/library/thread.w"
+
+Parallel_thread_tbl_iterator_type i= Parallel_thread_table.begin();
+Parallel_thread_tbl_iterator_type ie= Parallel_thread_table.end();
+for(;i!=ie;++i){
+Parallel_thread_list_iterator_type j= i->begin();
+Parallel_thread_list_iterator_type je= i->end();
+for(;j!=je;++j){
+worker_thread_blk*tb= *j;
+if(tb->status__==THREAD_WAITING_FOR_WORK){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 279 "/usr/local/yacco2/library/thread.w"
+
+++no_ths_exited;
+yacco2::lrclog<<"worker task to exit: "
+<<tb->grammar_s_parser__->thread_no__
+<<"::"<<tb->grammar_s_parser__->thread_name()
+<<" tb* "<<tb
+<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 286 "/usr/local/yacco2/library/thread.w"
+
+LOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+,*tb->grammar_s_parser__," of called thread");
+tb->status__= THREAD_TO_EXIT;
+PP.post_event_to_requesting_grammar(*tb->grammar_s_parser__,Shutdown,PP);
+}
+else{
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 293 "/usr/local/yacco2/library/thread.w"
+
+yacco2::lrclog<<"worker task not shutting down: "
+<<tb->grammar_s_parser__->thread_no__
+<<"::"<<tb->grammar_s_parser__->thread_name()
+<<" tb* "<<tb
+<<" status: "<<tb->status__
+<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 300 "/usr/local/yacco2/library/thread.w"
+
+}
+}
+i->clear();
+}
+Parallel_thread_table.clear();
+yacco2::lrclog<<"Number of threads in table exiting: "
+<<no_ths_exited<<" number of threads not shutting down: "
+<<no_thds_to_shutdown-no_ths_exited<<__FILE__<<__LINE__<<std::endl;
+
+
+/*:183*/
+//#line 204 "/usr/local/yacco2/library/thread.w"
+
+/*181:*/
+//#line 214 "/usr/local/yacco2/library/thread.w"
+
+#if THREAD_LIBRARY_TO_USE__ == 1
+Sleep(1000);
+#elif THREAD_LIBRARY_TO_USE__ == 0
+sleep(1);
+#endif
+
+/*:181*/
+//#line 205 "/usr/local/yacco2/library/thread.w"
+
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 206 "/usr/local/yacco2/library/thread.w"
+
+DESTROY_MUTEX(yacco2::TH_TBL_MU);
+DESTROY_MUTEX(yacco2::TRACE_MU);
+DESTROY_MUTEX(yacco2::TOKEN_MU);
+DESTROY_MUTEX(yacco2::SYM_TBL_MU);
+}
+
+/*:180*//*185:*/
+//#line 353 "/usr/local/yacco2/library/thread.w"
+
+yacco2::Caccept_parse::
+Caccept_parse
+(yacco2::Parser&Th_reporting_success
+,yacco2::CAbs_lr1_sym&Accept_token
+,yacco2::UINT Accept_token_pos
+,yacco2::CAbs_lr1_sym&La_token
+,yacco2::UINT La_token_pos){
+th_reporting_success__= &Th_reporting_success;
+accept_token__= &Accept_token;
+accept_token_pos__= Accept_token_pos;
+la_token__= &La_token;
+la_token_pos__= La_token_pos;
+}
+
+yacco2::Caccept_parse::
+Caccept_parse(){
+th_reporting_success__= 0;
+accept_token__= 0;
+accept_token_pos__= 0;
+la_token__= 0;
+la_token_pos__= 0;
+}
+void yacco2::Caccept_parse::initialize_it(){
+th_reporting_success__= 0;
+accept_token__= 0;
+accept_token_pos__= 0;
+la_token__= 0;
+la_token_pos__= 0;
+
+}
+
+void yacco2::Caccept_parse::fill_it(Caccept_parse&Accept_parse){
+th_reporting_success__= Accept_parse.th_reporting_success__;
+accept_token__= Accept_parse.accept_token__;
+accept_token_pos__= Accept_parse.accept_token_pos__;
+la_token__= Accept_parse.la_token__;
+la_token_pos__= Accept_parse.la_token_pos__;
+}
+
+void yacco2::Caccept_parse::fill_it
+(yacco2::Parser&Th_reporting_success
+,yacco2::CAbs_lr1_sym&Accept_token
+,yacco2::UINT Accept_token_pos
+,yacco2::CAbs_lr1_sym&La_token
+,yacco2::UINT La_token_pos){
+th_reporting_success__= &Th_reporting_success;
+accept_token__= &Accept_token;
+accept_token_pos__= Accept_token_pos;
+la_token__= &La_token;
+la_token_pos__= La_token_pos;
+}
+
+yacco2::Caccept_parse::
+~Caccept_parse(){
+}
+
+/*:185*//*212:*/
+//#line 829 "/usr/local/yacco2/library/thread.w"
+
+extern void yacco2::find_threads_by_first_set
+(yacco2::USINT Current_T_id
+,yacco2::yacco2_threads_to_run_type&Th_list
+,yacco2::State_s_thread_tbl&P_tbl){
+yacco2::thread_array_record*thds= (yacco2::thread_array_record*)yacco2::THDS_STABLE__;
+/*213:*/
+//#line 857 "/usr/local/yacco2/library/thread.w"
+
+static int no_of_gbl_thds(0);
+static int no_bit_mapped_words(0);
+static bool one_time(false);
+if(one_time==false){
+one_time= true;
+no_of_gbl_thds= thds->no_entries__;
+div_t x= div(no_of_gbl_thds,BITS_PER_WORD);
+if(x.rem!=0)++x.quot;
+no_bit_mapped_words= x.quot;
+}
+if(P_tbl.thd_id_bit_map__==0){
+/*215:*/
+//#line 895 "/usr/local/yacco2/library/thread.w"
+
+yacco2::Thread_entry**S_cur_thread_entry_ptr= (yacco2::Thread_entry**)&P_tbl.first_entry__;
+yacco2::USINT S_no_thd_entries= P_tbl.no_entries__;
+
+/*:215*/
+//#line 869 "/usr/local/yacco2/library/thread.w"
+
+yacco2::ULINT(*maps)= (yacco2::ULINT(*))yacco2::BIT_MAPS_FOR_SALE__;
+P_tbl.thd_id_bit_map__= (yacco2::ULINT(*))&maps[yacco2::BIT_MAP_IDX__];
+yacco2::BIT_MAP_IDX__+= no_bit_mapped_words;
+if(yacco2::BIT_MAP_IDX__> yacco2::TOTAL_NO_BIT_WORDS__){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "Err no more bit maps: %i; adjust TOTAL_NO_BIT_WORDS in Linker";
+sprintf(a,msg,yacco2::BIT_MAP_IDX__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+div_t dd;
+for(;S_no_thd_entries> 0;--S_no_thd_entries,++S_cur_thread_entry_ptr){
+yacco2::USINT S_thd_id= (*S_cur_thread_entry_ptr)->thd_id__;
+dd= div(S_thd_id,BITS_PER_WORD);
+ULINT bit_pos_value= 1<<dd.rem;
+P_tbl.thd_id_bit_map__[dd.quot]|= bit_pos_value;
+}
+}
+
+/*:213*/
+//#line 835 "/usr/local/yacco2/library/thread.w"
+
+/*216:*/
+//#line 900 "/usr/local/yacco2/library/thread.w"
+
+yacco2::thd_ids_having_T*T_cur_thd_id_having_T_ptr;
+yacco2::ULINT T_cur_thd_id_map;
+T_array_having_thd_ids*t_array_having_thd_ids=
+(T_array_having_thd_ids*)yacco2::T_ARRAY_HAVING_THD_IDS__;
+T_cur_thd_id_having_T_ptr= t_array_having_thd_ids->first_entry__[Current_T_id];
+T_cur_thd_id_map= T_cur_thd_id_having_T_ptr->first_thd_id__[0];
+
+/*:216*/
+//#line 836 "/usr/local/yacco2/library/thread.w"
+
+/*214:*/
+//#line 891 "/usr/local/yacco2/library/thread.w"
+
+yacco2::ULINT S_cur_thd_id_map= P_tbl.thd_id_bit_map__[0];
+
+/*:214*/
+//#line 837 "/usr/local/yacco2/library/thread.w"
+
+/*217:*/
+//#line 929 "/usr/local/yacco2/library/thread.w"
+
+int base_idx_for_thd_id_calc(0);
+int cur_bit_word_idx(0);
+do{
+yacco2::ULINT bit_map= T_cur_thd_id_map&S_cur_thd_id_map;
+if(bit_map!=0){
+base_idx_for_thd_id_calc= cur_bit_word_idx*BITS_PER_WORD;
+/*218:*/
+//#line 949 "/usr/local/yacco2/library/thread.w"
+
+yacco2::ULINT bit(1);
+for(int bit_pos= 0;bit_pos<=BITS_PER_WORD_REL_0;++bit_pos){
+if(bit_map&bit){
+/*219:*/
+//#line 959 "/usr/local/yacco2/library/thread.w"
+
+yacco2::USINT thd_id= base_idx_for_thd_id_calc+bit_pos;
+Th_list.push_back(thds->first_entry__[thd_id]);
+
+/*:219*/
+//#line 953 "/usr/local/yacco2/library/thread.w"
+
+}
+bit<<= 1;
+}
+
+/*:218*/
+//#line 936 "/usr/local/yacco2/library/thread.w"
+
+}
+++cur_bit_word_idx;
+T_cur_thd_id_map= T_cur_thd_id_having_T_ptr->first_thd_id__[cur_bit_word_idx];
+S_cur_thd_id_map= P_tbl.thd_id_bit_map__[cur_bit_word_idx];
+}while(cur_bit_word_idx<no_bit_mapped_words);
+
+/*:217*/
+//#line 838 "/usr/local/yacco2/library/thread.w"
+
+}
+
+/*:212*/
+//#line 13 "/usr/local/yacco2/library/thread.w"
+
+
+/*:169*/
diff --git a/web/yacco2/library/wthread.w b/web/yacco2/library/wthread.w
new file mode 100644
index 0000000000..3f2c5fb379
--- /dev/null
+++ b/web/yacco2/library/wthread.w
@@ -0,0 +1,401 @@
+@q file: wthread.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+
+
+@** Thread support library: native thread wrapper functions.\fbreak
+Supports both Microsoft's NT platform thread implementation and Pthreads.
+Pthreads has been tested on HP's VMS operating system,
+ Apple's OS X platform, Ubuntu, and Sun Solaris 10 AMD
+workstation.
+See ``Pthreads Programming'' by Bradford Nichols, Dick Buttlar and Jacqueline Proulx Farrel.
+Easy read and well presented 2nd edition 1998.
+
+There is only one thread type: grammar requesting parallelism ---
+`pp' is its acromyn for parallel parse.
+From a parallel parsing perspective,
+the parsing pushdown automaton detects parallelism by the presence
+of the thread list within the current parse state's configuration.
+It now handles the all the details from launching of the threads
+instead of the old way that used a middleman called the control monitor ``cm''
+who attended to all details related to parallel parsing and waited for the
+completion of the threads,
+and passed the results to the arbitrator functor for its ruling,
+and then cleaned up the accept queue.>
+
+To communicate between threads, a message protocol was developed in tandem
+with critical regions: I now call it an event protocol.
+Per thread, possession of its critical region is controlled by a mutex --- mu for short.
+To implement messaging a conditional variable (cv) is used having a companion
+ variable indicating whether a event is received or not that is under mu control.
+
+
+The event (message) protocol was developed to remove any reliance on the operating system.
+I was caught by Microsoft's message queue system with
+its quirks, limitations, and down right tantrums. These comments are circa 1997 and
+probably don't hold today... but the system dependency still does so here's my take
+on parsing events. Simple and not too challenging intellectually.
+
+To reduce the size of the emitted cpp file, the
+thread implementation is outputted to |wthread.cpp| file.
+It's definitions etc are concatenated to the |yacco2.h| file which
+is used by every implementation.
+
+The following diagrams illustrates the critical region structure per
+thread, and the message flows acting as events between the threads.
+
+Critical regions:\fbreak
+
+Message flow:\fbreak
+@^ To do writeup overview of cr and msg events@>
+
+@*2 Set up the required include files.
+@<Include files@>+=
+#if THREAD_LIBRARY_TO_USE__ == 1
+#include <windows.h>
+#include <process.h>
+#elif THREAD_LIBRARY_TO_USE__ == 0
+#include <pthread.h>
+#endif
+@ Basic types supporting thread development.
+@<Type def...@>+=
+typedef void* LPVOID;@/
+#if THREAD_LIBRARY_TO_USE__ == 1
+#define _YACCO2_CALL_TYPE //\_\_stdcall
+ typedef HANDLE MUTEX;
+ typedef unsigned int THREAD_NO;
+ typedef HANDLE THREAD;
+ typedef HANDLE COND_VAR;
+ typedef uintptr_t THR;
+ typedef int THR_result;
+ typedef THR (
+_YACCO2_CALL_TYPE
+* Type_pp_fnct_ptr) (yacco2::Parser* PP_requestor);
+ typedef THR_result (
+_YACCO2_CALL_TYPE
+* Type_pc_fnct_ptr)(yacco2::Parser* PP_requestor);
+ typedef THR (
+--stdcall//\_YACCO2\_CALL\_TYPE
+* Type_pp_fnct_ptr_voidp) (yacco2::LPVOID PP_requestor);
+#elif THREAD_LIBRARY_TO_USE__ == 0
+#define _YACCO2_CALL_TYPE
+ typedef pthread_mutex_t MUTEX;
+ typedef pthread_t THREAD_NO;
+ typedef pthread_cond_t COND_VAR;
+ typedef void* LPVOID;
+ typedef LPVOID THR;
+ typedef int THR_result;
+ typedef pthread_t THREAD;
+ typedef THR (* Type_pp_fnct_ptr) (yacco2::Parser* PP_requestor);
+ typedef THR (* Type_pp_fnct_ptr_voidp) (yacco2::LPVOID PP_requestor);
+ typedef THR_result (* Type_pc_fnct_ptr)(yacco2::Parser* PP_requestor);
+#endif
+typedef std::vector<yacco2::Thread_entry*> yacco2_threads_to_run_type;
+typedef yacco2_threads_to_run_type::iterator yacco2_threads_to_run_iter_type;
+
+@ Thread's External wrapper routines.\fbreak
+Access to the real thread control runtime library
+uses wrapper routines to aid in porting to
+another thread library.
+@<External rtns and variables@>=
+extern void CREATE_MUTEX(yacco2::MUTEX& Mu);
+extern void LOCK_MUTEX(yacco2::MUTEX& Mu);
+extern void UNLOCK_MUTEX(yacco2::MUTEX& Mu);
+extern
+void LOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX& Mu,yacco2::Parser& parser,const char* Text);
+extern
+void UNLOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX& Mu,yacco2::Parser& parser,const char* Text);
+extern void DESTROY_MUTEX(yacco2::MUTEX& Mu);
+extern void CREATE_COND_VAR(yacco2::COND_VAR& Cv);
+extern void COND_WAIT(yacco2::COND_VAR& Cv,yacco2::MUTEX& Mu,yacco2::Parser& parser);
+extern void SIGNAL_COND_VAR(yacco2::Parser& To_thread,yacco2::Parser& parser);
+extern void DESTROY_COND_VAR(yacco2::COND_VAR& Cv);
+extern yacco2::THR_result@/
+ CREATE_THREAD(yacco2::Type_pp_fnct_ptr Thread,yacco2::Parser& Parser_requesting_parallelism);
+extern THREAD_NO THREAD_SELF();
+
+
+@*2 Thread library implementation.\fbreak
+The wrapper functions shields the native library routines from Yacco2's callings.
+I call this a little middling sir...
+
+Please note, there is no exit or destroy thread wrapper routines.
+This is done automaticly when the thread returns to the operating system.
+For the duration of the parse, the thread stays within a work loop until it
+receives an ``exit'' message and its work status has been changed to |THREAD_TO_EXIT| by
+the requesting shutdown process. See |Parallel_threads_shutdown| routine.
+The exit message just interrupts the thread to start executing
+whose work loop condition has been broken.
+Basic hygiene takes place by the exiting thread and then it exits
+to the operating system with an appropriate
+return code.
+@*3 Microsoft's NT thread implementation.
+@<accrue thread code@>=
+#if THREAD_LIBRARY_TO_USE__ == 1
+@*4 Create mutex --- |CREATE_MUTEX|.\fbreak
+Appropriate defaults:\fbreak
+ \ptindent{1) security: default}
+ \ptindent{2) initial owner: OFF = no, ON = yes}
+ \ptindent{3) named mutex: default 0 is no}
+@<accrue thread code@>+=
+extern
+void yacco2::CREATE_MUTEX(yacco2::MUTEX& Mu){
+ Mu = CreateMutex(0,OFF,0);
+ }
+@*4 Lock mutex --- |LOCK_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::LOCK_MUTEX(yacco2::MUTEX& Mu){
+ WaitForSingleObject(Mu,INFINITE);
+ }
+@*4 Lock mutex --- |LOCK_MUTEX_OF_CALLED_PARSER|.
+@<accrue thread code@>+=
+extern
+void yacco2::LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX& Mu,yacco2::Parser&parser,const char* Text){
+ @<Trace trying to acquire grammar's mutex@>;
+ WaitForSingleObject(Mu,INFINITE);
+ @<Trace acquired grammar's mutex@>;
+ }
+@*4 Unlock mutex --- |UNLOCK_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::UNLOCK_MUTEX(yacco2::MUTEX& Mu){
+ ReleaseMutex(Mu);
+ }
+@*4 Unlock mutex --- |UNLOCK_MUTEX_OF_CALLED_PARSER|.
+@<accrue thread code@>+=
+extern
+void yacco2::UNLOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX& Mu,yacco2::Parser& parser,const char* Text){
+ @<Trace trying to release grammar's mutex@>;
+ ReleaseMutex(Mu);
+ @<Trace released grammar's mutex@>;
+ }
+
+@*4 Destroy mutex --- |DESTROY_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::DESTROY_MUTEX(yacco2::MUTEX& Mu){
+ CloseHandle(Mu);
+ }
+@*4 Create conditional variable --- |CREATE_COND_VAR|.\fbreak
+Default settings:\fbreak
+ \ptindent{1) security: default 0}
+ \ptindent{2) initial cnt: 0 so that it can wait for a signal}
+ \ptindent{3) max cnt: 1 so that it's 1:1}
+ \ptindent{4) make unnamed variable: 0}
+@<accrue thread code@>+=
+extern
+void yacco2::CREATE_COND_VAR(yacco2::COND_VAR& Cv){
+ COND_VAR xx = CreateSemaphore(0,0,1,0);// 0: wait state
+ Cv = xx;
+ }
+@*4 Conditional wait --- |COND_WAIT|.\fbreak
+Default settings:\fbreak
+ \ptindent{unlock mutex}
+ \ptindent{wait on cv}
+ \ptindent{lock mu}
+@<accrue thread code@>+=
+extern
+void yacco2::COND_WAIT(yacco2::COND_VAR& Cv,yacco2::MUTEX& Mu
+,yacco2::Parser& parser){
+@<trace |COND_WAIT| entered@>;
+ UNLOCK_MUTEX_OF_CALLED_PARSER(Mu,parser," of self by COND_WAIT()");
+ WaitForSingleObject(Cv,INFINITE);
+ LOCK_MUTEX_OF_CALLED_PARSER(Mu,parser," of self from wakened COND_WAIT()");
+@<trace |COND_WAIT| exit@>;
+ }
+@*4 Signal conditional variable --- |SIGNAL_COND_VAR|.\fbreak
+Default settings:\fbreak
+ \ptindent{1) cond. var ptr}
+ \ptindent{2) release count: make 1}
+ \ptindent{3) previous cnt: 0 means don't use previous cnt: so make 1:1}
+@<accrue thread code@>+=
+ extern
+void yacco2::SIGNAL_COND_VAR(yacco2::Parser& To_thread,yacco2::Parser& parser){
+@<trace |SIGNAL_COND_VAR| before call@>;
+ ReleaseSemaphore(To_thread.cv__,1,0);
+@<trace |SIGNAL_COND_VAR| after call@>;
+ }
+@*4 Destroy conditional variable --- |DESTROY_COND_VAR|.
+@<accrue thread code@>+=
+extern
+ void yacco2::DESTROY_COND_VAR(yacco2::COND_VAR& Cv){
+ CloseHandle(Cv);
+ }
+@*4 Create thread --- |CREATE_THREAD|.\fbreak
+Default settings:\fbreak
+ \ptindent{1) security: default 0}
+ \ptindent{2) stack size: default 0}
+ \ptindent{3) function addr}
+ \ptindent{4) Parm list addr}
+ \ptindent{5) initflag default 0: start executing right away}
+ \ptindent{6) thread id addr}
+ \fbreak
+When the thread is created, within the defining code body of the thread
+is a canned include file|wpp_core.h|.
+Its code sets all the variables related to
+thread activation: caller's parse context and launched number of threads.
+|pp_requesting_parallelism__| is the calling parser and so is |from_thread__|.
+The |no_competing_pp_ths__| is set from the calling parser's
+|no_requested_ths_to_run__|.
+|no_requested_ths_to_run__| is a readonly variable
+used to optimize mutex access / release of the calling parser's critical region.
+If the value is 1, there is no need to use the mutex.
+@<accrue thread code@>+=
+extern
+yacco2::THR_result
+ yacco2::CREATE_THREAD(yacco2::Type_pp_fnct_ptr Thread
+ ,yacco2::Parser& Parser_requesting_parallelism){@/
+ yacco2::THREAD_NO thread_no;
+@<trace |CREATE_THREAD| before call@>;
+ THR result = _beginthreadex(0,0,(Type_pp_fnct_ptr_voidp)Thread
+ ,&Parser_requesting_parallelism,0,&thread_no);
+@<trace |CREATE_THREAD| after call@>;
+ return result;
+}
+@*4 Thread id --- |THREAD_SELF|.
+@<accrue thread code@>+=
+extern
+yacco2::THREAD_NO yacco2::THREAD_SELF(){
+ return GetCurrentThreadId();
+ }
+
+@*3 Pthreads implementation.
+@<accrue thread code@>+=
+#elif THREAD_LIBRARY_TO_USE__ == 0
+@*4 Create Mutex --- |CREATE_MUTEX|.\fbreak
+\fbreak
+When the thread is created, within the defining code body of the thread
+is a canned include file |wpp_core.h|.
+Its code sets all the variables related to
+thread activation: caller's parse context and launched number of threads.
+|pp_requesting_parallelism__| is the calling parser and so is |from_thread__|.
+The |no_competing_pp_ths__| is set from the calling parser's
+|no_requested_ths_to_run__|.
+|no_requested_ths_to_run__| is a
+readonly variable used to optimize mutex access / release of the calling parser's critical region.
+If the value is 1, there is no need to use the mutex.
+
+@<accrue thread code@>+=
+extern
+void yacco2::CREATE_MUTEX(yacco2::MUTEX& Mu){
+ int result = pthread_mutex_init(&Mu,0);
+ }
+
+@*4 Lock mutex --- |LOCK_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::LOCK_MUTEX(yacco2::MUTEX& Mu){
+ int result = pthread_mutex_lock(&Mu);
+ }
+
+@*4 Lock mutex --- |LOCK_MUTEX_OF_CALLED_PARSER|.
+@<accrue thread code@>+=
+extern
+void yacco2::LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX& Mu,yacco2::Parser&parser,const char* Text){
+ @<Trace trying to acquire grammar's mutex@>;
+ int result = pthread_mutex_lock(&Mu);
+ @<Trace acquired grammar's mutex@>;
+ }
+
+@*4 Unlock mutex --- |UNLOCK_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::UNLOCK_MUTEX(yacco2::MUTEX& Mu){
+ int result = pthread_mutex_unlock(&Mu);
+ }
+
+@*4 Unlock mutex --- |UNLOCK_MUTEX_OF_CALLED_PARSER|.
+@<accrue thread code@>+=
+extern
+void
+yacco2::UNLOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX& Mu
+,yacco2::Parser& parser,const char* Text){
+ @<Trace trying to release grammar's mutex@>;
+ int result = pthread_mutex_unlock(&Mu);
+ @<Trace released grammar's mutex@>;
+ }
+@*4 Destroy mutex --- |DESTROY_MUTEX|.
+@<accrue thread code@>+=
+extern
+void yacco2::DESTROY_MUTEX(yacco2::MUTEX& Mu){
+ int result = pthread_mutex_destroy(&Mu);
+ }
+@*4 Create conditional variable --- |CREATE_COND_VAR|.
+@<accrue thread code@>+=
+extern
+void yacco2::CREATE_COND_VAR(yacco2::COND_VAR& Cv){
+ pthread_cond_init(&Cv,0);
+ }
+@*4 Conditional wait --- |COND_WAIT|.
+@<accrue thread code@>+=
+extern
+void yacco2::COND_WAIT(yacco2::COND_VAR& Cv,yacco2::MUTEX& Mu
+,yacco2::Parser& parser){
+@<trace |COND_WAIT| entered@>;
+if(yacco2::YACCO2_MU_GRAMMAR__){
+ @<acquire trace mu@>;
+ yacco2::lrclog << parser.thread_no__ << "::"
+ << parser.fsm_tbl__->id__ << "::" << " before release mutex by pthread_cond_wait()" << __FILE__ << __LINE__<< std::endl;
+ @<release trace mu@>;
+}
+ pthread_cond_wait(&Cv,&Mu);
+@<trace |COND_WAIT| exit@>;
+ }
+@*4 Signal conditional variable --- |SIGNAL_COND_VAR|.
+@<accrue thread code@>+=
+extern
+void yacco2::SIGNAL_COND_VAR(yacco2::Parser& To_thread,yacco2::Parser& parser){
+@<trace |SIGNAL_COND_VAR| before call@>;
+ pthread_cond_signal(&To_thread.cv__);
+@<trace |SIGNAL_COND_VAR| after call@>;
+ }
+@*4 Destroy conditional variable --- |DESTROY_COND_VAR|.
+@<accrue thread code@>+=
+extern
+void yacco2::DESTROY_COND_VAR(yacco2::COND_VAR& Cv){
+ pthread_cond_destroy(&Cv);
+ }
+@*4 Create thread --- |CREATE_THREAD|.
+Experimenting with thread attributes by use of |pthread_attr_t|
+object and its methods: |pthread_attr_setstacksize|.
+If u want the default, pass |null| in the 2nd argument in |pthread_create|.
+This experiment is caused by VMS's tantrums when porting
+|pasxlator| translator to the Alpha platform.
+Circa 2002 -- 2003, this worked under VMS 7.2 and their older \CPLUSPLUS/ compiler 6.5.
+@<accrue thread code@>+=
+extern
+yacco2::THR_result@/
+yacco2::CREATE_THREAD@/
+(yacco2::Type_pp_fnct_ptr Thread,yacco2::Parser& Parser_requesting_parallelism){@/
+@<trace |CREATE_THREAD| before call@>;
+ yacco2::THREAD_NO thread_no;
+ pthread_attr_t alpha_attr;
+ pthread_attr_init(&alpha_attr);
+#ifdef VMS__
+ pthread_attr_setstacksize(&alpha_attr,VMS_PTHREAD_STACK_SIZE__);
+#endif
+ THR_result result = pthread_create(&thread_no,&alpha_attr
+ ,(Type_pp_fnct_ptr_voidp)Thread,&Parser_requesting_parallelism);
+ pthread_detach(thread_no);
+@<trace |CREATE_THREAD| after call@>;
+ return result;
+ }
+
+@*4 Thread id --- |THREAD_SELF|.
+@<accrue thread code@>+=
+extern
+yacco2::THREAD_NO yacco2::THREAD_SELF(){
+ return pthread_self();
+ }
+
+@*2 Close off the wrapper conditional code.
+@<accrue thread code@>+=
+#endif \ No newline at end of file
diff --git a/web/yacco2/library/wtok_can.cpp b/web/yacco2/library/wtok_can.cpp
new file mode 100644
index 0000000000..ba92cd5859
--- /dev/null
+++ b/web/yacco2/library/wtok_can.cpp
@@ -0,0 +1,880 @@
+/*76:*/
+//#line 18 "/usr/local/yacco2/library/tok_can.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 19 "/usr/local/yacco2/library/tok_can.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 20 "/usr/local/yacco2/library/tok_can.w"
+
+/*27:*/
+//#line 408 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2_characters.h"
+
+/*:27*/
+//#line 21 "/usr/local/yacco2/library/tok_can.w"
+
+/*28:*/
+//#line 412 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2_k_symbols.h"
+
+/*:28*/
+//#line 22 "/usr/local/yacco2/library/tok_can.w"
+
+using namespace NS_yacco2_characters;
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 24 "/usr/local/yacco2/library/tok_can.w"
+
+/*77:*/
+//#line 28 "/usr/local/yacco2/library/tok_can.w"
+
+
+/*:77*//*84:*/
+//#line 483 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::tok_can<std::string> ::tok_can()
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,file_no__(MAX_USINT)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,string__(std::string())
+,eof_sym_(0)
+,real_start_pos_in_line_(START_CHAR_POS)
+,eof_pos_(0)
+,gps__(0)
+{}
+
+yacco2::tok_can<std::string> ::tok_can(const char*String,CAbs_lr1_sym*GPS)
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,file_no__(MAX_USINT)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,string__(String)
+,eof_sym_(0)
+,real_start_pos_in_line_(START_CHAR_POS)
+,eof_pos_(0)
+,gps__(GPS)
+{
+if(GPS==0)return;
+line_no__= GPS->tok_co_ords__.line_no__;
+pos_in_line__= GPS->tok_co_ords__.pos_in_line__;
+file_no__= GPS->tok_co_ords__.external_file_id__;
+real_start_pos_in_line_= pos_in_line__;
+}
+
+void yacco2::tok_can<std::string> ::set_gps(CAbs_lr1_sym*GPS){
+gps__= GPS;
+if(GPS==0)return;
+line_no__= GPS->tok_co_ords__.line_no__;
+pos_in_line__= GPS->tok_co_ords__.pos_in_line__;
+file_no__= GPS->tok_co_ords__.external_file_id__;
+real_start_pos_in_line_= pos_in_line__;
+}
+yacco2::CAbs_lr1_sym*yacco2::tok_can<std::string> ::gps_used(){
+return gps__;
+}
+
+yacco2::tok_can<std::string> ::~tok_can(){}
+
+bool yacco2::tok_can<std::string> ::empty(){
+if(string__.empty()==true)return YES;
+return NO;
+}
+void yacco2::tok_can<std::string> ::reuse_string(const char*Str,CAbs_lr1_sym*GPS){
+string__.erase();
+string__+= Str;
+file_no__= MAX_USINT;
+line_no__= START_LINE_NO;
+pos_in_line__= START_CHAR_POS;
+eof_sym_= 0;
+real_start_pos_in_line_= START_CHAR_POS;
+eof_pos_= 0;
+if(GPS==0)return;
+set_gps(GPS);
+}
+
+/*:84*//*85:*/
+//#line 572 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::CAbs_lr1_sym*yacco2::tok_can<std::string> ::operator[](yacco2::UINT Pos){
+CAbs_lr1_sym*sym(0);
+if(eof_pos_==EOF)return eof_sym_;
+fetch_char:
+if(have_1st_rec__==false){
+have_1st_rec__= true;
+pos_= 0;
+}else{
+if(Pos<=pos_){
+return container__[Pos];
+}
+++pos_;
+}
+if(r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 587 "/usr/local/yacco2/library/tok_can.w"
+
+}
+for(;;){
+char c;
+if(pos_>=string__.size()){
+eof_pos_= EOF;
+++pos_;
+sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+,&line_no__,&pos_in_line__);
+eof_sym_= sym;
+container__.push_back(*sym);
+container__.push_back(*sym);
+return sym;
+}
+c= string__[pos_];
+convert_char_to_unsigned_value:
+unsigned char uc= c;
+UINT slno= line_no__;
+sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+if(gps__!=0){
+line_no__= slno;
+pos_in_line__= real_start_pos_in_line_+pos_;
+}
+container__.push_back(*sym);
+if(Pos==pos_)break;
+++pos_;
+continue;
+};
+if(r_w_cnt__> 1){
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 616 "/usr/local/yacco2/library/tok_can.w"
+
+}
+return sym;
+}
+/*:85*//*86:*/
+//#line 621 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::UINT yacco2::tok_can<std::string> ::size(){
+return string__.size();
+}
+
+/*:86*//*87:*/
+//#line 627 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::UINT yacco2::tok_can<std::string> ::pos(){return pos_;}
+
+void yacco2::tok_can<std::string> ::push_back(yacco2::CAbs_lr1_sym&Tok){
+container__.push_back(Tok);
+}
+
+void yacco2::tok_can<std::string> ::clear(){container__.clear();
+pos_= 0;
+have_1st_rec__= false;
+file_no__= MAX_USINT;
+line_no__= START_LINE_NO;
+pos_in_line__= START_CHAR_POS;
+string__.clear();
+eof_sym_= 0;
+real_start_pos_in_line_= START_CHAR_POS;
+eof_pos_= 0;
+gps__= 0;
+}
+
+TOKEN_GAGGLE&yacco2::tok_can<std::string> ::container(){
+return container__;
+}
+
+void tok_can<std::string> ::remove(){}
+
+void yacco2::tok_can<std::string> ::set_string(const char*String){
+string__+= String;
+}
+
+std::string*yacco2::tok_can<std::string> ::string_used(){return&string__;};
+
+
+/*:87*//*88:*/
+//#line 664 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::tok_can<std::ifstream> ::tok_can()
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,eof_pos_(EOF)
+,file_ok_(NO)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,file_name__(std::string())
+{}
+
+yacco2::tok_can<std::ifstream> ::tok_can(const char*File_name)
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,eof_pos_(EOF)
+,file_ok_(NO)
+,line_no__(START_LINE_NO)
+,pos_in_line__(START_CHAR_POS)
+,file_name__(File_name)
+{
+open_file();
+}
+
+yacco2::tok_can<std::ifstream> ::~tok_can(){
+if(file_ok_==YES)
+file__.close();
+}
+
+bool yacco2::tok_can<std::ifstream> ::empty(){
+if(have_1st_rec__==false)return YES;
+return NO;
+}
+
+/*:88*//*89:*/
+//#line 703 "/usr/local/yacco2/library/tok_can.w"
+
+bool yacco2::tok_can<std::ifstream> ::file_ok(){
+return file_ok_;
+}
+
+/*:89*//*90:*/
+//#line 715 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::CAbs_lr1_sym*yacco2::tok_can<std::ifstream> ::operator[](yacco2::UINT Pos){
+if(file_ok_==NO){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"tok_can<ifstream>operator[] trying to access file that is bad: %s, position %i ";
+sprintf(a,msg,file_name__.c_str(),Pos);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+CAbs_lr1_sym*sym(0);
+if(eof_pos_==EOF&&Pos>=pos_){
+return container__[pos_];
+}
+fetch_char:
+if(have_1st_rec__==false){
+have_1st_rec__= true;
+pos_= 0;
+}else{
+if(Pos<=pos_){
+return container__[Pos];
+}
+++pos_;
+}
+if(r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 742 "/usr/local/yacco2/library/tok_can.w"
+
+}
+for(;;){
+char c;
+file__>>c;
+if((file__.good()==false)or(file__.eof()==true)){
+eof_pos_= EOF;
+++pos_;
+sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+,&line_no__,&pos_in_line__);
+container__.push_back(*sym);
+container__.push_back(*sym);
+return sym;
+}
+convert_char_to_unsigned_value:
+unsigned char uc= c;
+sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+container__.push_back(*sym);
+if(Pos==pos_)break;
+++pos_;
+continue;
+};
+if(r_w_cnt__> 1){
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 765 "/usr/local/yacco2/library/tok_can.w"
+
+}
+return sym;
+}
+/*:90*//*91:*/
+//#line 784 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::UINT yacco2::tok_can<std::ifstream> ::size(){
+return INT_MAX;
+}
+
+/*:91*//*92:*/
+//#line 798 "/usr/local/yacco2/library/tok_can.w"
+
+void yacco2::tok_can<std::ifstream> ::open_file(){
+CAbs_lr1_sym*sym(0);
+open_file:
+file__.open(file_name__.c_str(),std::ios::in);
+if(file__.is_open())goto filename_opened;
+else goto filename_bad;
+
+filename_opened:{
+file_ok_= YES;
+++yacco2::FILE_CNT__;
+have_1st_rec__= true;
+pos_= 0;
+if(yacco2::FILE_CNT__==1){
+std::string empty;
+yacco2::FILE_TBL__.push_back(empty);
+}
+yacco2::STK_FILE_NOS__.push_back(yacco2::FILE_CNT__);
+file_no__= yacco2::STK_FILE_NOS__.back();
+yacco2::FILE_TBL__.push_back(file_name__);
+eof_pos_= 0;
+set_dont_skip_any_chars:
+file__>>std::noskipws;
+for(;eof_pos_!=EOF;++pos_){
+char c;
+if(file__.good()==true){
+file__>>c;
+}
+if(file__.eof()==true)goto eoroad;
+if(file__.fail()==true)goto eoroad;
+convert_char_to_unsigned_value:
+unsigned char uc= c;
+sym= RC__.map_char_to_raw_char_sym(uc,file_no__,pos_,&line_no__,&pos_in_line__);
+container__.push_back(*sym);
+}
+}
+filename_bad:{
+eof_pos_= EOF;
+file_ok_= NO;
+return;
+}
+eoroad:{
+eof_pos_= EOF;
+++pos_;
+sym= RC__.map_char_to_raw_char_sym(EOF_CHAR_SUB,file_no__,pos_
+,&line_no__,&pos_in_line__);
+container__.push_back(*sym);
+container__.push_back(*sym);
+return;
+}
+
+}
+/*:92*//*93:*/
+//#line 853 "/usr/local/yacco2/library/tok_can.w"
+
+void yacco2::tok_can<std::ifstream> ::close_file(){
+if(file__.is_open()){
+if(file_ok_==YES){
+file__.close();
+}
+}
+file_ok_= false;
+}
+
+/*:93*//*94:*/
+//#line 864 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::UINT yacco2::tok_can<std::ifstream> ::pos(){return pos_;}
+
+void yacco2::tok_can<std::ifstream> ::push_back(yacco2::CAbs_lr1_sym&Tok){
+container__.push_back(Tok);
+}
+
+void yacco2::tok_can<std::ifstream> ::clear(){
+container__.clear();
+pos_= 0;
+have_1st_rec__= false;
+eof_pos_= EOF;
+file_ok_= NO;
+line_no__= START_LINE_NO;
+pos_in_line__= START_CHAR_POS;
+file_name__.clear();
+}
+
+TOKEN_GAGGLE&yacco2::tok_can<std::ifstream> ::container(){
+return container__;
+}
+
+void yacco2::tok_can<std::ifstream> ::remove(){}
+
+std::string&yacco2::tok_can<std::ifstream> ::file_name(){return file_name__;}
+
+void yacco2::tok_can<std::ifstream> ::set_file_name(const char*File_name){
+file_name__+= File_name;
+}
+
+/*:94*//*95:*/
+//#line 920 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::tok_can<yacco2::AST*> ::
+tok_can
+(yacco2::ast_stack&Walker)
+:tok_base(1)
+,pos_(0)
+,have_1st_rec__(false)
+,tree_end_reached__(false)
+,nodes_visited_()
+,accept_node_level_()
+,traverse_(Walker){
+operator[](0);
+}
+
+yacco2::tok_can<yacco2::AST*> ::
+~tok_can(){}
+
+bool yacco2::tok_can<yacco2::AST*> ::
+empty(){
+return nodes_visited_.empty();
+}
+
+void yacco2::tok_can<yacco2::AST*> ::
+clear(){nodes_visited_.clear();}
+
+/*:95*//*96:*/
+//#line 957 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::tok_can<yacco2::AST*> ::
+operator[](yacco2::UINT Pos){
+AST*t;
+CAbs_lr1_sym*tsym;
+AST*vnode;
+CAbs_lr1_sym*sym;
+ast_base_stack::s_rec*srec;
+if(tree_end_reached__==true){
+if(Pos<pos_)goto in_bnds;
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 969 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token eog: "
+<<PTR_LR1_eog__<<" pos: "<<Pos<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 972 "/usr/local/yacco2/library/tok_can.w"
+
+}
+sym= PTR_LR1_eog__;
+goto rtn_fnd_T;
+}
+first_time_accessed:
+if(have_1st_rec__==false){
+have_1st_rec__= true;
+goto out_bnds;
+}
+determine_where_t_is:
+if(Pos<=pos_){
+goto in_bnds;
+}
+++pos_;
+goto out_bnds;
+in_bnds:
+/*97:*/
+//#line 1016 "/usr/local/yacco2/library/tok_can.w"
+
+t= nodes_visited_[Pos];
+tsym= AST::content(*t);
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1020 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can in-bnds already in container token: "<<tsym->id__
+<<" *: "<<tsym<<" pos: "<<Pos<<" id: "<<tsym->id__<<" enum: "
+<<tsym->enumerated_id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(tsym)
+yacco2::lrclog
+<<" GPS LINE: "
+<<tsym->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<tsym->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1034 "/usr/local/yacco2/library/tok_can.w"
+
+}
+/*98:*/
+//#line 1041 "/usr/local/yacco2/library/tok_can.w"
+
+if(r_w_cnt__==1)return tsym;
+if(Pos<pos_)return tsym;
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1044 "/usr/local/yacco2/library/tok_can.w"
+
+if(tree_end_reached__==true){
+}else{
+if(Pos==pos_){
+++pos_;
+/*100:*/
+//#line 1074 "/usr/local/yacco2/library/tok_can.w"
+
+traverse_.exec();
+
+/*:100*/
+//#line 1049 "/usr/local/yacco2/library/tok_can.w"
+
+/*99:*/
+//#line 1057 "/usr/local/yacco2/library/tok_can.w"
+
+if(tree_end_reached__!=true){
+srec= traverse_.base_stk_.cur_stk_rec_;
+if(srec==0){
+tree_end_reached__= true;
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1063 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token eog: "
+<<PTR_LR1_eog__<<" pos: "<<pos_<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1066 "/usr/local/yacco2/library/tok_can.w"
+
+}
+}else{
+/*102:*/
+//#line 1093 "/usr/local/yacco2/library/tok_can.w"
+
+vnode= traverse_.base_stk_.cur_stk_rec_->node_;
+sym= AST::content(*vnode);
+accept_node_level_.push_back(traverse_.base_stk_.idx_);
+nodes_visited_.push_back(vnode);
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1099 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token: "<<sym->id__
+<<" *: "<<sym<<" pos: "<<pos_
+<<" requested pos: "<<Pos
+<<" node*: "<<vnode
+<<" node content*: "<<AST::content(*vnode)
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1106 "/usr/local/yacco2/library/tok_can.w"
+
+}
+
+/*:102*/
+//#line 1069 "/usr/local/yacco2/library/tok_can.w"
+
+}
+}
+
+/*:99*/
+//#line 1050 "/usr/local/yacco2/library/tok_can.w"
+
+}
+}
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1053 "/usr/local/yacco2/library/tok_can.w"
+
+return tsym;
+
+/*:98*/
+//#line 1036 "/usr/local/yacco2/library/tok_can.w"
+
+
+/*:97*/
+//#line 989 "/usr/local/yacco2/library/tok_can.w"
+
+out_bnds:
+if(r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 992 "/usr/local/yacco2/library/tok_can.w"
+
+}
+get_tree_rec:{
+/*100:*/
+//#line 1074 "/usr/local/yacco2/library/tok_can.w"
+
+traverse_.exec();
+
+/*:100*/
+//#line 995 "/usr/local/yacco2/library/tok_can.w"
+
+/*101:*/
+//#line 1078 "/usr/local/yacco2/library/tok_can.w"
+
+srec= traverse_.base_stk_.cur_stk_rec_;
+if(srec==0){
+tree_end_reached__= true;
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1083 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token eog: "
+<<PTR_LR1_eog__<<" pos: "<<pos_<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1086 "/usr/local/yacco2/library/tok_can.w"
+
+}
+sym= PTR_LR1_eog__;
+goto rtn_fnd_T;
+}
+
+/*:101*/
+//#line 996 "/usr/local/yacco2/library/tok_can.w"
+
+/*102:*/
+//#line 1093 "/usr/local/yacco2/library/tok_can.w"
+
+vnode= traverse_.base_stk_.cur_stk_rec_->node_;
+sym= AST::content(*vnode);
+accept_node_level_.push_back(traverse_.base_stk_.idx_);
+nodes_visited_.push_back(vnode);
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1099 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token: "<<sym->id__
+<<" *: "<<sym<<" pos: "<<pos_
+<<" requested pos: "<<Pos
+<<" node*: "<<vnode
+<<" node content*: "<<AST::content(*vnode)
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1106 "/usr/local/yacco2/library/tok_can.w"
+
+}
+
+/*:102*/
+//#line 997 "/usr/local/yacco2/library/tok_can.w"
+
+if(Pos==pos_)goto rtn_fnd_T;
+++pos_;
+goto get_tree_rec;
+}
+rtn_fnd_T:
+if(r_w_cnt__> 1){
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1004 "/usr/local/yacco2/library/tok_can.w"
+
+}
+return sym;
+}
+
+/*:96*//*103:*/
+//#line 1110 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::UINT
+yacco2::tok_can<yacco2::AST*> ::
+pos(){return pos_;}
+
+yacco2::UINT
+yacco2::tok_can<yacco2::AST*> ::
+size(){
+if(tree_end_reached__==true){
+return nodes_visited_.size();
+}
+return MAX_UINT;
+}
+
+void
+yacco2::tok_can<yacco2::AST*> ::
+push_back(AST&Tok_ast){
+nodes_visited_.push_back(&Tok_ast);
+++pos_;
+}
+void
+yacco2::tok_can<yacco2::AST*> ::
+push_back(yacco2::CAbs_lr1_sym&Node){}
+
+yacco2::ast_stack&
+yacco2::tok_can<yacco2::AST*> ::
+container(){
+return traverse_;
+}
+
+std::vector<AST*> *
+yacco2::tok_can<yacco2::AST*> ::
+nodes_visited(){
+return&nodes_visited_;
+}
+
+void
+yacco2::tok_can<yacco2::AST*> ::
+remove(){
+nodes_visited_.pop_back();
+--pos_;
+}
+
+yacco2::AST*
+yacco2::tok_can<yacco2::AST*> ::
+ast(yacco2::UINT Pos){
+if(Pos> pos_)return 0;
+return nodes_visited_.operator[](Pos);
+}
+
+yacco2::INT
+yacco2::tok_can<yacco2::AST*> ::
+accept_node_level(yacco2::UINT Pos){
+if((accept_node_level_.size()-1)<Pos)return No_Token_start_pos;
+return accept_node_level_.operator[](Pos);
+}
+
+
+//#line 1 "/usr/local/yacco2/library/structures.w"
+
+
+
+
+
+
+
+/*:103*/
+//#line 25 "/usr/local/yacco2/library/tok_can.w"
+
+
+/*:76*/
diff --git a/web/yacco2/library/wtree.cpp b/web/yacco2/library/wtree.cpp
new file mode 100644
index 0000000000..10e5bf3653
--- /dev/null
+++ b/web/yacco2/library/wtree.cpp
@@ -0,0 +1,2602 @@
+/*450:*/
+//#line 235 "/usr/local/yacco2/library/tree.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 236 "/usr/local/yacco2/library/tree.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 237 "/usr/local/yacco2/library/tree.w"
+
+/*451:*/
+//#line 241 "/usr/local/yacco2/library/tree.w"
+
+
+/*:451*//*452:*/
+//#line 244 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_base_stack::
+ast_base_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter,bool Accept_opt)
+:idx_(No_Token_start_pos)
+,stk_(std::vector<s_rec> ())
+,action_(Action)
+,cur_stk_rec_(0)
+,filter_(Filter)
+,accept_opt_(Accept_opt){}
+
+yacco2::ast_base_stack::
+ast_base_stack()
+:idx_(No_Token_start_pos)
+,stk_(std::vector<s_rec> ())
+,action_(0)
+,cur_stk_rec_(0)
+,filter_(0)
+,accept_opt_(YES){}
+
+yacco2::ast_stack::
+ast_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter,bool Accept_opt)
+:base_stk_(Action,Filter,Accept_opt){}
+
+void
+yacco2::ast_base_stack::
+pop(){
+if(stk_.empty()==YES)return;
+--idx_;
+stk_.pop_back();
+if(stk_.empty()==YES){
+idx_= No_Token_start_pos;
+cur_stk_rec_= 0;
+return;
+}
+cur_stk_rec_= &stk_[idx_];
+}
+
+void
+yacco2::ast_base_stack::
+push(AST&Node,ast_base_stack::n_action Action){
+++idx_;
+stk_.push_back(yacco2::ast_base_stack::s_rec());
+cur_stk_rec_= &stk_[idx_];
+cur_stk_rec_->node_= &Node;
+cur_stk_rec_->act_= Action;
+}
+
+yacco2::INT
+yacco2::ast_base_stack::
+cur_stk_index(){
+return idx_;
+}
+
+yacco2::ast_base_stack::s_rec*
+yacco2::ast_base_stack::
+cur_stk_rec(){
+return cur_stk_rec_;
+}
+
+yacco2::ast_base_stack::s_rec*
+yacco2::ast_base_stack::
+stk_rec(yacco2::INT I){
+if(I> idx_)return 0;
+return&stk_[I];
+}
+
+/*:452*//*454:*/
+//#line 313 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_postfix::
+ast_postfix(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:454*//*455:*/
+//#line 325 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_postfix::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 329 "/usr/local/yacco2/library/tree.w"
+
+}
+
+
+/*:455*//*456:*/
+//#line 334 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_postfix::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+AST*down= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+if(down==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::left;
+base_stk_.push(*down,ast_base_stack::init);
+return;
+}
+case ast_base_stack::left:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::visit:{
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+
+/*:456*//*457:*/
+//#line 377 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_prefix::
+ast_prefix(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:457*//*458:*/
+//#line 386 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 390 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:458*//*459:*/
+//#line 394 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::left:{
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::visit:{
+AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+if(lt!=0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::left;
+base_stk_.push(*lt,ast_base_stack::init);
+return;
+}
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+
+/*:459*//*460:*/
+//#line 443 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_postfix_1forest::
+ast_postfix_1forest(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:460*//*461:*/
+//#line 452 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_postfix_1forest::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 456 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:461*//*462:*/
+//#line 460 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_postfix_1forest::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+AST*down= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+if(down==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::left;
+base_stk_.push(*down,ast_base_stack::init);
+return;
+}
+case ast_base_stack::left:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::visit:{
+AST*rt(0);
+if(base_stk_.idx_!=0)
+rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+
+/*:462*//*463:*/
+//#line 505 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_prefix_1forest::
+ast_prefix_1forest(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:463*//*464:*/
+//#line 514 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix_1forest::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 518 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:464*//*465:*/
+//#line 522 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix_1forest::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::left:{
+AST*rt(0);
+if(base_stk_.idx_!=0)
+rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::visit:{
+AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+if(lt!=0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::left;
+base_stk_.push(*lt,ast_base_stack::init);
+return;
+}
+AST*rt(0);
+if(base_stk_.idx_!=0)
+rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+
+/*:465*//*466:*/
+//#line 575 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_breadth_only::
+ast_breadth_only(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:466*//*467:*/
+//#line 584 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_breadth_only::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 588 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:467*//*468:*/
+//#line 592 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_breadth_only::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::left:{
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::visit:{
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+
+/*:468*//*469:*/
+//#line 635 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_prefix_wbreadth_only::
+ast_prefix_wbreadth_only(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:yacco2::ast_stack(Action,Filter,Accept_opt){
+base_stk_.push(Forest,ast_base_stack::init);
+}
+
+/*:469*//*470:*/
+//#line 644 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix_wbreadth_only::
+exec(){
+/*435:*/
+//#line 80 "/usr/local/yacco2/library/tree.w"
+
+advance();
+int_set_iter_type i;
+CAbs_lr1_sym*sym;
+tree_traverse:{
+if(base_stk_.cur_stk_rec_==0)return;
+if(base_stk_.cur_stk_rec_->act_!=ast_base_stack::visit){
+/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 87 "/usr/local/yacco2/library/tree.w"
+
+}
+sym= AST::content(*base_stk_.cur_stk_rec_->node_);
+if(base_stk_.filter_==0)/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 90 "/usr/local/yacco2/library/tree.w"
+
+filter_node:
+/*442:*/
+//#line 143 "/usr/local/yacco2/library/tree.w"
+
+i= base_stk_.filter_->find(sym->enumerated_id__);
+
+/*:442*/
+//#line 92 "/usr/local/yacco2/library/tree.w"
+
+/*436:*/
+//#line 107 "/usr/local/yacco2/library/tree.w"
+
+if(base_stk_.accept_opt_==true)
+goto accept_filter;
+else goto reject_filter;
+
+/*:436*/
+//#line 93 "/usr/local/yacco2/library/tree.w"
+
+reject_filter:
+/*441:*/
+//#line 137 "/usr/local/yacco2/library/tree.w"
+
+if(i!=base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 138 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 139 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:441*/
+//#line 95 "/usr/local/yacco2/library/tree.w"
+
+accept_filter:
+/*440:*/
+//#line 131 "/usr/local/yacco2/library/tree.w"
+
+if(i==base_stk_.filter_->end())/*437:*/
+//#line 113 "/usr/local/yacco2/library/tree.w"
+
+goto next_t;
+/*:437*/
+//#line 132 "/usr/local/yacco2/library/tree.w"
+
+/*438:*/
+//#line 116 "/usr/local/yacco2/library/tree.w"
+
+goto accept_t;
+/*:438*/
+//#line 133 "/usr/local/yacco2/library/tree.w"
+
+
+
+/*:440*/
+//#line 97 "/usr/local/yacco2/library/tree.w"
+
+next_t:
+advance();
+goto tree_traverse;
+}
+accept_t:
+/*439:*/
+//#line 119 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type rr= base_stk_.action_->operator()(&base_stk_);
+switch(rr){
+case yacco2::bypass_node:goto next_t;
+case yacco2::accept_node:return;
+case yacco2::stop_walking:{
+base_stk_.cur_stk_rec_= 0;
+return;
+}
+}
+
+/*:439*/
+//#line 103 "/usr/local/yacco2/library/tree.w"
+
+return;
+
+/*:435*/
+//#line 648 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:470*//*471:*/
+//#line 652 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_prefix_wbreadth_only::
+advance(){
+if(base_stk_.cur_stk_rec_==0)return;
+switch(base_stk_.cur_stk_rec_->act_){
+case ast_base_stack::init:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::visit;
+return;
+}
+case ast_base_stack::left:{
+if(base_stk_.idx_==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::visit:{
+if(base_stk_.idx_==0){
+AST*lt= AST::get_1st_son(*base_stk_.cur_stk_rec_->node_);
+if(lt==0){
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::left;
+base_stk_.push(*lt,ast_base_stack::init);
+return;
+}
+AST*rt= AST::brother(*base_stk_.cur_stk_rec_->node_);
+if(rt!=0){
+base_stk_.pop();
+base_stk_.push(*rt,ast_base_stack::init);
+return;
+}
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::right:{
+base_stk_.cur_stk_rec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::eoc:{
+base_stk_.pop();
+return;
+}
+}
+}
+/*:471*//*472:*/
+//#line 707 "/usr/local/yacco2/library/tree.w"
+
+yacco2::ast_moonwalk_looking_for_ancestors::ast_moonwalk_looking_for_ancestors
+(AST&Moonchild,USINT Goal,Type_AST_ancestor_list&Ancestors_list,Type_AST_functor*Functor
+,yacco2::int_set_type*Filter,bool Accept_opt)
+:moonchild_(&Moonchild)
+,goal_(Goal)
+,ancestor_list_(&Ancestors_list)
+,functor_(Functor)
+,filter_(Filter)
+,filter_type_(Accept_opt)
+,filter_provided_(NO)
+{
+if(Filter!=0)filter_provided_= YES;
+}
+/*:472*//*473:*/
+//#line 724 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::ast_moonwalk_looking_for_ancestors::let_s_functor(AST*Parent)
+{
+functor_result_type functor_result;
+yacco2::ast_base_stack abs;
+abs.push(*Parent,ast_base_stack::init);
+return functor_->operator()(&abs);
+}
+
+/*:473*//*474:*/
+//#line 738 "/usr/local/yacco2/library/tree.w"
+
+bool
+yacco2::ast_moonwalk_looking_for_ancestors::deal_with_functor(AST*Parent)
+{
+if(functor_!=0){
+functor_result_type functor_result= let_s_functor(Parent);
+switch(functor_result){
+case accept_node:{
+ancestor_list_->push_back(Parent);
+return YES;
+}
+case bypass_node:{
+return YES;
+}
+case stop_walking:{
+return NO;
+}
+}
+}else{
+ancestor_list_->push_back(Parent);
+return YES;
+}
+return YES;
+}
+
+/*:474*//*475:*/
+//#line 765 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::ast_moonwalk_looking_for_ancestors::let_s_moonwalk()
+{
+functor_result_type functor_result;
+AST*cnode= moonchild_;
+AST*parent(0);
+while(cnode!=0){
+parent= AST::get_parent(*cnode);
+bool continue_waldo= deal_with_parent(parent);
+if(continue_waldo==NO)return;
+cnode= parent;
+}
+}
+
+/*:475*//*476:*/
+//#line 782 "/usr/local/yacco2/library/tree.w"
+
+bool
+yacco2::ast_moonwalk_looking_for_ancestors::deal_with_parent(AST*Parent)
+{
+if(Parent==0){
+return NO;
+}
+CAbs_lr1_sym*tsym= AST::content(*Parent);
+USINT id= tsym->enumerated_id();
+if(id==goal_){
+ancestor_list_->push_back(Parent);
+return NO;
+}
+/*477:*/
+//#line 812 "/usr/local/yacco2/library/tree.w"
+
+if(filter_provided_==NO)goto no_filter_so_accept_all_Tes;
+else goto filtered_Tes;
+
+
+/*:477*/
+//#line 795 "/usr/local/yacco2/library/tree.w"
+
+no_filter_so_accept_all_Tes:{
+return deal_with_functor(Parent);
+}
+filtered_Tes:{
+int_set_iter_type i= filter_->find(id);
+if(i==filter_->end()){
+if(filter_type_==ACCEPT_FILTER)return YES;
+return deal_with_functor(Parent);
+}
+
+if(filter_type_==BYPASS_FILTER)return YES;
+return deal_with_functor(Parent);
+}
+}
+
+/*:476*//*479:*/
+//#line 819 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+restructure_2trees_into_1tree(AST&S1,AST&S2){
+AST*s2lt= AST::get_1st_son(S2);
+AST::zero_1st_son(S2);
+AST::crt_tree_of_2sons(S2,S1,*s2lt);
+return&S2;
+}
+/*:479*//*480:*/
+//#line 828 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+crt_tree_of_1son(yacco2::AST&Parent,yacco2::AST&S1){
+yacco2::AST::join_pts(Parent,S1);
+}
+
+void yacco2::AST::
+crt_tree_of_2sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+}
+
+void yacco2::AST::
+crt_tree_of_3sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+}
+
+void yacco2::AST::
+crt_tree_of_4sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3
+,yacco2::AST&S4){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+yacco2::AST::join_sts(S3,S4);
+}
+
+void yacco2::AST::
+crt_tree_of_5sons(yacco2::AST&Parent,AST&S1,yacco2::AST&S2,yacco2::AST&S3,
+yacco2::AST&S4,yacco2::AST&S5){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+yacco2::AST::join_sts(S3,S4);
+yacco2::AST::join_sts(S4,S5);
+}
+
+void yacco2::AST::
+crt_tree_of_6sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3
+,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+yacco2::AST::join_sts(S3,S4);
+yacco2::AST::join_sts(S4,S5);
+yacco2::AST::join_sts(S5,S6);
+}
+void yacco2::AST::
+crt_tree_of_7sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3
+,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6,yacco2::AST&S7){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+yacco2::AST::join_sts(S3,S4);
+yacco2::AST::join_sts(S4,S5);
+yacco2::AST::join_sts(S5,S6);
+yacco2::AST::join_sts(S6,S7);
+}
+void yacco2::AST::
+crt_tree_of_8sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3
+,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6,yacco2::AST&S7,yacco2::AST&S8){
+yacco2::AST::join_pts(Parent,S1);
+yacco2::AST::join_sts(S1,S2);
+yacco2::AST::join_sts(S2,S3);
+yacco2::AST::join_sts(S3,S4);
+yacco2::AST::join_sts(S4,S5);
+yacco2::AST::join_sts(S5,S6);
+yacco2::AST::join_sts(S6,S7);
+yacco2::AST::join_sts(S7,S8);
+}
+void yacco2::AST::
+crt_tree_of_9sons(yacco2::AST&Parent,yacco2::AST&S1,yacco2::AST&S2,yacco2::AST&S3
+,yacco2::AST&S4,yacco2::AST&S5,yacco2::AST&S6
+,yacco2::AST&S7,yacco2::AST&S8,yacco2::AST&S9){
+AST::join_pts(Parent,S1);
+AST::join_sts(S1,S2);
+AST::join_sts(S2,S3);
+AST::join_sts(S3,S4);
+AST::join_sts(S4,S5);
+AST::join_sts(S5,S6);
+AST::join_sts(S6,S7);
+AST::join_sts(S7,S8);
+AST::join_sts(S8,S9);
+}
+
+/*:480*//*481:*/
+//#line 915 "/usr/local/yacco2/library/tree.w"
+
+yacco2::CAbs_lr1_sym*yacco2::AST::
+content(yacco2::AST&Node){
+return Node.obj_;
+}
+
+/*:481*//*482:*/
+//#line 922 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+zero_1st_son(yacco2::AST&Node){
+Node.lt_= 0;
+}
+
+/*:482*//*483:*/
+//#line 929 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+zero_2nd_son(yacco2::AST&Node){
+yacco2::AST*lt= Node.lt_;
+if(lt==0){
+
+yacco2::KCHARP msg=
+"zero_2nd_son 2nd son's 1st son Node ptr is zero";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+lt->rt_= 0;
+}
+/*:483*//*484:*/
+//#line 943 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+zero_brother(yacco2::AST&Node){
+Node.rt_= 0;
+}
+/*:484*//*485:*/
+//#line 949 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+zero_content(yacco2::AST&Node){
+Node.obj_= 0;
+}
+/*:485*//*486:*/
+//#line 955 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+set_content(yacco2::AST&Node,yacco2::CAbs_lr1_sym&Sym){
+Node.obj_= &Sym;
+}
+/*:486*//*487:*/
+//#line 961 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+zero_previous(yacco2::AST&Node){
+Node.pr_= 0;
+}
+/*:487*//*488:*/
+//#line 967 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+set_content_wdelete(yacco2::AST&Node,yacco2::CAbs_lr1_sym&Sym){
+Node.obj_= &Sym;
+Node.wdelete_= true;
+}
+/*:488*//*489:*/
+//#line 974 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+set_previous(yacco2::AST&Node,yacco2::AST&Previous_node){
+Node.pr_= &Previous_node;
+}
+/*:489*//*490:*/
+//#line 980 "/usr/local/yacco2/library/tree.w"
+
+bool yacco2::AST::
+wdelete(yacco2::AST&Node){
+return Node.wdelete_;
+}
+/*:490*//*491:*/
+//#line 986 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+wdelete(yacco2::AST&Node,bool Wdelete){
+Node.wdelete_= Wdelete;
+}
+
+/*:491*//*492:*/
+//#line 993 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+brother(yacco2::AST&Node){
+return Node.rt_;
+}
+/*:492*//*493:*/
+//#line 1005 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+previous(yacco2::AST&Node){
+return Node.pr_;
+}
+
+/*:493*//*494:*/
+//#line 1012 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST::
+AST():lt_(0),rt_(0),pr_(0),obj_(0),wdelete_(false){
+}
+
+yacco2::AST::
+AST(yacco2::CAbs_lr1_sym&Obj):lt_(0),rt_(0),pr_(0),obj_(&Obj),wdelete_(false){
+}
+
+yacco2::AST::~AST(){
+if(wdelete_==true){
+delete obj_;
+}
+}
+/*:494*//*495:*/
+//#line 1027 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::AST::
+join_pts(yacco2::AST&Parent,yacco2::AST&Child){
+if(Parent.lt_!=0){
+
+yacco2::KCHARP msg=
+"join_pts Parent lt ptr not zero";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Parent==&Child){
+
+yacco2::KCHARP msg=
+"join_pts Parent and child nodes are the same";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+Parent.lt_= &Child;
+Child.pr_= &Parent;
+}
+/*:495*//*496:*/
+//#line 1049 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::AST::
+join_sts(yacco2::AST&Elder_sibling,yacco2::AST&Younger_sibling){
+if(Elder_sibling.rt_!=0){
+
+yacco2::KCHARP msg=
+"join_sts Elder_sibling rt ptr not zero";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Elder_sibling==&Younger_sibling){
+
+yacco2::KCHARP msg=
+"join_sts Left and Right nodes are the same";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+Elder_sibling.rt_= &Younger_sibling;
+Younger_sibling.pr_= &Elder_sibling;
+}
+
+/*:496*//*497:*/
+//#line 1072 "/usr/local/yacco2/library/tree.w"
+
+void
+yacco2::AST::
+ast_delete(yacco2::AST&Node,bool Due_to_abort){
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1077 "/usr/local/yacco2/library/tree.w"
+
+yacco2::lrclog<<"YACCO2_T__::ast_DELETE Node to be deleted*: "<<&Node
+<<" Abort switch: "<<Due_to_abort<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1080 "/usr/local/yacco2/library/tree.w"
+
+}
+if(&Node==Node.lt_){
+
+yacco2::KCHARP msg=
+"ast_delete recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Node==Node.rt_){
+
+yacco2::KCHARP msg=
+"ast_delete Right recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+yacco2::CAbs_lr1_sym*sym= Node.obj_;
+if(YACCO2_T__!=0){
+if(sym!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1099 "/usr/local/yacco2/library/tree.w"
+
+yacco2::lrclog<<"YACCO2_T__::ast_DELETE Node to be deleted*: "<<&Node
+<<" sym*: "<<sym<<" id: "<<sym->id__<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1102 "/usr/local/yacco2/library/tree.w"
+
+}
+}
+if(YACCO2_T__!=0){
+if(Node.lt_){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1107 "/usr/local/yacco2/library/tree.w"
+
+yacco2::lrclog<<"YACCO2_T__::call ast_DELETE Node by LEFT node to be deleted*: "<<Node.lt_
+<<" by node*: "<<&Node<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1110 "/usr/local/yacco2/library/tree.w"
+
+AST::ast_delete(*Node.lt_,Due_to_abort);
+}
+if(Node.rt_){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1114 "/usr/local/yacco2/library/tree.w"
+
+yacco2::lrclog<<"call ast_DELETE Node by RIGHT node to be deleted*: "<<Node.rt_
+<<" by node*: "<<&Node<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1117 "/usr/local/yacco2/library/tree.w"
+
+AST::ast_delete(*Node.rt_,Due_to_abort);
+}
+}
+if(sym!=0){
+
+if(Due_to_abort==true){
+if(sym->affected_by_abort()==true){
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1126 "/usr/local/yacco2/library/tree.w"
+
+yacco2::lrclog
+<<"YACCO2_T__::ast_DELETE node's object deleted due to ABORT: "
+<<sym->id__<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1130 "/usr/local/yacco2/library/tree.w"
+
+}
+delete sym;
+Node.obj_= 0;
+};
+}else{
+delete sym;
+Node.obj_= 0;
+}
+}
+delete&Node;
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1141 "/usr/local/yacco2/library/tree.w"
+
+lrclog<<"ast_DELETE Node deleted*: "<<&Node<<__FILE__<<__LINE__<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1143 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:497*//*498:*/
+//#line 1147 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+find_depth(AST&Node,yacco2::INT Enum){
+if(&Node==Node.lt_){
+
+yacco2::KCHARP msg=
+"find_depth Left recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Node==Node.rt_){
+
+yacco2::KCHARP msg=
+"find_depth Right recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Node.obj_==0){
+
+yacco2::KCHARP msg=
+"find_depth Tree's oject is zero";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+yacco2::CAbs_lr1_sym*sym= Node.obj_;
+if(sym->enumerated_id__==Enum)return&Node;
+if(Node.lt_!=0){
+yacco2::AST*rtn= find_depth(*Node.lt_,Enum);
+if(rtn!=0)return rtn;
+}
+if(Node.rt_!=0){
+yacco2::AST*rtn= find_depth(*Node.rt_,Enum);
+if(rtn!=0)return rtn;
+}
+return 0;
+}
+
+/*:498*//*499:*/
+//#line 1185 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+find_breadth(yacco2::AST&Node,yacco2::INT Enum){
+if(&Node==Node.lt_){
+
+yacco2::KCHARP msg=
+"find_breadth Left recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Node==Node.rt_){
+
+yacco2::KCHARP msg=
+"find_breadth Right recursion to self Node";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Node.obj_==0){
+
+yacco2::KCHARP msg=
+"find_breadth Tree's object is zero";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+yacco2::CAbs_lr1_sym*sym= Node.obj_;
+if(sym->enumerated_id__==Enum)return&Node;
+if(Node.rt_!=0){
+yacco2::AST*rtn= find_breadth(*Node.rt_,Enum);
+if(rtn!=0)return rtn;
+}
+return 0;
+}
+
+/*:499*//*501:*/
+//#line 1223 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+relink(yacco2::AST&Previous,yacco2::AST&Old_to,yacco2::AST&New_to){
+if(&Previous==&Old_to){
+
+yacco2::KCHARP msg=
+"relink Previous ptr == Old ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Previous==&New_to){
+
+yacco2::KCHARP msg=
+"relink Previous ptr == New ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Old_to==&New_to){
+
+yacco2::KCHARP msg=
+"relink Old ptr == New ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Previous.rt_==&Old_to){
+Old_to.pr_= 0;
+Previous.rt_= &New_to;
+New_to.pr_= &Previous;
+return;
+}
+Old_to.pr_= 0;
+Previous.lt_= &New_to;
+New_to.pr_= &Previous;
+}
+
+/*:501*//*502:*/
+//#line 1263 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+relink_between(yacco2::AST&Previous,yacco2::AST&Old_to,yacco2::AST&New_to){
+if(&Previous==&Old_to){
+
+yacco2::KCHARP msg=
+"relink_between Previous ptr == Old ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Previous==&New_to){
+
+yacco2::KCHARP msg=
+"relink_between Previous ptr == New ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(&Old_to==&New_to){
+
+yacco2::KCHARP msg=
+"relink_between Old ptr == New ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Previous.rt_==&Old_to){
+Old_to.pr_= &New_to;
+Previous.rt_= &New_to;
+New_to.pr_= &Previous;
+New_to.rt_= &Old_to;
+return;
+}
+if(Previous.lt_==&Old_to){
+Old_to.pr_= &New_to;
+Previous.lt_= &New_to;
+New_to.pr_= &Previous;
+New_to.rt_= &Old_to;
+return;
+}
+
+yacco2::KCHARP msg=
+"ast_relink_between Previous node does not have lt or rt of Old";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:502*//*503:*/
+//#line 1311 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+relink_after(yacco2::AST&Previous,yacco2::AST&To){
+if(&Previous==&To){
+
+yacco2::KCHARP msg= "relink_after Previous ptr == To ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Previous.rt_==0){
+Previous.rt_= &To;
+To.pr_= &Previous;
+return;
+}
+AST*rt= Previous.rt_;
+if(rt->pr_==&Previous){
+rt->pr_= &To;
+Previous.rt_= &To;
+To.pr_= &Previous;
+To.rt_= rt;
+return;
+}
+
+yacco2::KCHARP msg= "relink_after Previous Node does not have lt or rt of Old";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:503*//*504:*/
+//#line 1344 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+relink_before(yacco2::AST&Before,yacco2::AST&New_to){
+if(&Before==&New_to){
+
+yacco2::KCHARP msg=
+"relink_before Before ptr == New ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+if(Before.pr_==0){
+Before.pr_= &New_to;
+New_to.rt_= &Before;
+return;
+}
+yacco2::AST*pr= Before.pr_;
+if(pr->lt_==&Before){
+pr->lt_= &New_to;
+New_to.pr_= pr;
+New_to.rt_= &Before;
+Before.pr_= &New_to;
+return;
+}
+if(pr->rt_==&Before){
+pr->rt_= &New_to;
+New_to.pr_= pr;
+New_to.rt_= &Before;
+Before.pr_= &New_to;
+return;
+}
+
+yacco2::KCHARP msg=
+"relink_before Before node does not have lt or rt of Old";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:504*//*505:*/
+//#line 1384 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+replace_node(yacco2::AST&Old,yacco2::AST&By){
+if(&Old==&By){
+
+yacco2::KCHARP msg=
+"replace_node Old ptr == By ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+yacco2::AST*prev= Old.pr_;
+yacco2::AST*rt= Old.rt_;
+if(prev->rt_==&Old){
+prev->rt_= &By;
+By.pr_= prev;
+By.rt_= rt;
+if(rt!=0)rt->pr_= &By;
+Old.rt_= 0;
+Old.pr_= 0;
+return;
+}
+if(prev->lt_==&Old){
+prev->lt_= &By;
+By.pr_= prev;
+By.rt_= rt;
+if(rt!=0)rt->pr_= &By;
+Old.rt_= 0;
+Old.pr_= 0;
+return;
+}
+By.rt_= Old.rt_;
+Old.rt_= 0;
+}
+
+
+/*:505*//*507:*/
+//#line 1424 "/usr/local/yacco2/library/tree.w"
+
+void yacco2::AST::
+add_son_to_tree(yacco2::AST&Parent,yacco2::AST&Son){
+AST*p_lt= Parent.lt_;
+if(p_lt==0){
+Parent.lt_= &Son;
+Son.pr_= &Parent;
+return;
+}
+Parent.lt_= &Son;
+Son.pr_= &Parent;
+Son.rt_= p_lt;
+p_lt->pr_= &Son;
+}
+
+/*:507*//*508:*/
+//#line 1440 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::add_child_at_end(yacco2::AST&Tree,yacco2::AST&Child){
+yacco2::AST*cur_youngest_child= AST::get_child_at_end(Tree);
+if(cur_youngest_child==0){
+AST::join_pts(Tree,Child);
+}else{
+AST::join_sts(*cur_youngest_child,Child);
+}
+return&Child;
+}
+
+/*:508*//*509:*/
+//#line 1452 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*
+yacco2::AST::get_spec_child(yacco2::AST&Tree,yacco2::INT Cnt){
+if(Cnt<=0){
+
+yacco2::KCHARP msg=
+"get_spec_child Node Cnt is <= 0";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+yacco2::INT pos(0);
+yacco2::AST*ct= Tree.lt_;
+for(;ct!=0;ct= ct->rt_){
+++pos;
+if(pos==Cnt)return ct;
+}
+return 0;
+}
+
+/*:509*//*510:*/
+//#line 1472 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::
+get_1st_son(yacco2::AST&Node){
+return get_spec_child(Node,1);
+}
+
+yacco2::AST*yacco2::AST::
+get_2nd_son(yacco2::AST&Node){
+return get_spec_child(Node,2);
+}
+yacco2::AST*yacco2::AST::
+get_3rd_son(yacco2::AST&Node){
+return get_spec_child(Node,3);
+}
+yacco2::AST*yacco2::AST::
+get_4th_son(yacco2::AST&Node){
+return get_spec_child(Node,4);
+}
+yacco2::AST*yacco2::AST::
+get_5th_son(yacco2::AST&Node){
+return get_spec_child(Node,5);
+}
+
+yacco2::AST*yacco2::AST::get_6th_son(yacco2::AST&Node){
+return get_spec_child(Node,6);
+}
+
+yacco2::AST*yacco2::AST::get_7th_son(yacco2::AST&Node){
+return get_spec_child(Node,7);
+}
+
+yacco2::AST*yacco2::AST::get_8th_son(yacco2::AST&Node){
+return get_spec_child(Node,8);
+}
+
+yacco2::AST*yacco2::AST::get_9th_son(yacco2::AST&Node){
+return get_spec_child(Node,9);
+}
+
+
+/*:510*//*511:*/
+//#line 1514 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::get_child_at_end(yacco2::AST&Tree){
+yacco2::AST*ct= Tree.lt_;
+yacco2::AST*pct(0);
+for(;ct!=0;ct= ct->rt_){
+pct= ct;
+}
+return pct;
+}
+
+/*:511*//*512:*/
+//#line 1527 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::get_youngest_sibling(yacco2::AST&Tree){
+yacco2::AST*start= &Tree;
+yacco2::AST*younger_sibling= start;
+for(;younger_sibling!=0;){
+if(younger_sibling->rt_==0)break;
+younger_sibling= younger_sibling->rt_;
+}
+if(start==younger_sibling)return 0;
+return younger_sibling;
+}
+
+/*:512*//*513:*/
+//#line 1541 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::get_younger_sibling(yacco2::AST&Child,yacco2::INT Pos){
+if(Pos<=0){
+
+yacco2::KCHARP msg=
+"get_younger_sibling Pos <= 0";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+int cnt(0);
+yacco2::AST*younger_sibling= Child.rt_;
+for(;younger_sibling!=0;younger_sibling= younger_sibling->rt_){
+++cnt;
+if(cnt==Pos)return younger_sibling;
+}
+return 0;
+}
+
+/*:513*//*514:*/
+//#line 1562 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::get_older_sibling(yacco2::AST&Child,yacco2::INT Pos){
+if(Pos>=0){
+
+yacco2::KCHARP msg=
+"get_older_sibling Pos >= 0";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+int cnt(0);
+AST*older_sibling= Child.pr_;
+for(;older_sibling!=0;older_sibling= older_sibling->pr_){
+--cnt;
+if(cnt==Pos)return older_sibling;
+}
+return 0;
+}
+/*:514*//*515:*/
+//#line 1580 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::get_parent(yacco2::AST&Tree){
+yacco2::AST*cnode= &Tree;
+yacco2::AST*older_sibling= cnode->pr_;
+for(;older_sibling!=0;cnode= older_sibling,older_sibling= cnode->pr_){
+if(older_sibling->rt_!=cnode)return older_sibling;
+}
+return 0;
+}
+
+/*:515*//*516:*/
+//#line 1591 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*yacco2::AST::common_ancestor
+(yacco2::Type_AST_ancestor_list&ListA,yacco2::Type_AST_ancestor_list&ListB){
+Type_AST_ancestor_list*a;
+Type_AST_ancestor_list*b;
+if(ListA.size()<ListB.size()){
+a= &ListA;
+b= &ListB;
+}else{
+b= &ListA;
+a= &ListB;
+}
+Type_AST_ancestor_list::iterator ai= a->begin();
+Type_AST_ancestor_list::iterator aie= a->end();
+Type_AST_ancestor_list::iterator bi;
+Type_AST_ancestor_list::iterator bie;
+for(;ai!=aie;++ai){
+bi= b->begin();
+bie= b->end();
+for(;bi!=bie;++bi){
+AST*A= *ai;
+AST*B= *bi;
+if(A==B)
+return A;
+}
+}
+return 0;
+}
+
+/*:516*//*517:*/
+//#line 1622 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*
+yacco2::AST::divorce_node_from_tree(yacco2::AST&Node){
+yacco2::AST*bpr= Node.pr_;
+yacco2::AST*brt= Node.rt_;
+/*524:*/
+//#line 1690 "/usr/local/yacco2/library/tree.w"
+
+Node.pr_= 0;
+Node.rt_= 0;
+
+/*:524*/
+//#line 1627 "/usr/local/yacco2/library/tree.w"
+
+/*518:*/
+//#line 1644 "/usr/local/yacco2/library/tree.w"
+
+if(bpr==0)goto forest;
+if(bpr->rt_==&Node)goto amongst_brothers;
+if(bpr->lt_==&Node)goto parental_guidance;
+
+/*:518*/
+//#line 1628 "/usr/local/yacco2/library/tree.w"
+
+
+forest:
+/*522:*/
+//#line 1675 "/usr/local/yacco2/library/tree.w"
+
+if(brt==0)return 0;
+brt->pr_= 0;
+return brt;
+
+/*:522*/
+//#line 1631 "/usr/local/yacco2/library/tree.w"
+
+amongst_brothers:
+/*523:*/
+//#line 1684 "/usr/local/yacco2/library/tree.w"
+
+bpr->rt_= brt;
+if(brt!=0)brt->pr_= bpr;
+return brt;
+
+/*:523*/
+//#line 1633 "/usr/local/yacco2/library/tree.w"
+
+parental_guidance:
+/*519:*/
+//#line 1654 "/usr/local/yacco2/library/tree.w"
+
+/*520:*/
+//#line 1659 "/usr/local/yacco2/library/tree.w"
+
+if(brt==0){
+bpr->lt_= 0;
+return 0;
+}
+
+/*:520*/
+//#line 1655 "/usr/local/yacco2/library/tree.w"
+
+/*521:*/
+//#line 1666 "/usr/local/yacco2/library/tree.w"
+
+bpr->lt_= brt;
+brt->pr_= bpr;
+return brt;
+
+/*:521*/
+//#line 1656 "/usr/local/yacco2/library/tree.w"
+
+
+/*:519*/
+//#line 1635 "/usr/local/yacco2/library/tree.w"
+
+}
+
+/*:517*//*525:*/
+//#line 1705 "/usr/local/yacco2/library/tree.w"
+
+yacco2::AST*
+yacco2::AST::clone_tree
+(yacco2::AST&Node_to_copy,yacco2::AST*Calling_node
+,yacco2::ast_base_stack::n_action Relation){
+yacco2::AST*new_t= new yacco2::AST(*yacco2::AST::content(Node_to_copy));
+switch(Relation){
+case ast_base_stack::init:break;
+case ast_base_stack::left:{
+if(Calling_node!=0){
+AST::join_pts(*Calling_node,*new_t);
+}
+break;
+}
+case ast_base_stack::right:{
+if(Calling_node!=0){
+AST::join_sts(*Calling_node,*new_t);
+}
+break;
+}
+}
+if(Node_to_copy.lt_!=0)
+AST::clone_tree(*Node_to_copy.lt_,new_t,ast_base_stack::left);
+if(Node_to_copy.rt_!=0)
+AST::clone_tree(*Node_to_copy.rt_,new_t,ast_base_stack::right);
+return new_t;
+}
+
+/*:525*//*534:*/
+//#line 1844 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::remove_unwanted_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+cnode_= srec_->node_;
+
+yacco2::CAbs_lr1_sym*sobj= AST::content(*cnode_);
+if(sobj==0)return accept_node;
+if(sobj->tok_co_ords__.external_file_id__<=1)return accept_node;
+
+idx_= stk_env_->idx_;
+if(stk_env_->idx_==0){
+return accept_node;
+}
+return bypass_node;
+}
+
+void yacco2::remove_unwanted_ast_functor::possible_delete(){
+yacco2::INT pidx= idx_-1;
+if(pidx<0)return;
+ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx);
+yacco2::AST*psnode= psrec->node_;
+yacco2::AST*srt= AST::brother(*cnode_);
+switch(psrec->act_){
+case ast_base_stack::left:{
+if(srt!=0){
+yacco2::AST::relink(*psnode,*cnode_,*srt);
+srec_->node_= srt;
+srec_->act_= ast_base_stack::init;
+return;
+}
+yacco2::AST::zero_1st_son(*psnode);
+srec_->act_= ast_base_stack::eoc;
+return;
+}
+case ast_base_stack::right:{
+if(srt!=0){
+yacco2::AST::relink(*psnode,*cnode_,*srt);
+srec_->node_= srt;
+srec_->act_= ast_base_stack::init;
+return;
+}
+yacco2::AST::zero_brother(*psnode);
+srec_->act_= ast_base_stack::eoc;
+return;
+}
+default:{
+return;
+}
+}
+}
+
+yacco2::remove_unwanted_ast_functor::~remove_unwanted_ast_functor(){
+}
+
+
+/*:534*//*535:*/
+//#line 1903 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::insert_back_recycled_items_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+cnode_= srec_->node_;
+
+yacco2::CAbs_lr1_sym*top_node_sym= AST::content(*cnode_);
+yacco2::CAbs_lr1_sym*node_sym= AST::content(*insert_node_);
+if(node_sym->tok_co_ords__.rc_pos__<=top_node_sym->tok_co_ords__.rc_pos__)
+return accept_node;
+return bypass_node;
+}
+
+void yacco2::insert_back_recycled_items_functor::insert_node
+(yacco2::AST&Inode){insert_node_= &Inode;}
+yacco2::AST*yacco2::insert_back_recycled_items_functor::new_root(){return new_root_;}
+
+void yacco2::insert_back_recycled_items_functor::insert_before(){
+if(stk_env_->idx_> 0)goto overlay;
+root_change:
+new_root_= insert_node_;
+
+overlay:
+
+srec_->node_= insert_node_;
+srec_->act_= ast_base_stack::right;
+AST::join_sts(*insert_node_,*cnode_);
+
+stk_env_->push(*cnode_,ast_base_stack::visit);
+adj_prev_caller:
+if(stk_env_->idx_==0)return;
+yacco2::INT pi= idx_-1;
+yacco2::ast_base_stack::s_rec*pcur_rec= stk_env_->stk_rec(pi);
+yacco2::AST*pnode= pcur_rec->node_;
+switch(pcur_rec->act_){
+case yacco2::ast_base_stack::left:{
+yacco2::AST::zero_1st_son(*pnode);
+yacco2::AST::join_pts(*pnode,*insert_node_);
+return;
+}
+case yacco2::ast_base_stack::right:{
+yacco2::AST::zero_brother(*pnode);
+yacco2::AST::join_sts(*pnode,*insert_node_);
+return;
+}
+}
+return;
+}
+
+
+/*:535*//*536:*/
+//#line 1956 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::tok_can_ast_functor::operator()(ast_base_stack*Stk_env){
+return accept_node;
+}
+
+/*:536*//*537:*/
+//#line 1963 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::tok_can_ast_no_stop_functor::operator()(ast_base_stack*Stk_env){
+return stop_walking;
+}
+
+/*:537*//*538:*/
+//#line 1970 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::tok_can_ast_bypass_functor::operator()(ast_base_stack*Stk_env){
+yacco2::ast_base_stack::s_rec*srec= Stk_env->cur_stk_rec_;
+yacco2::AST*cnode= srec->node_;
+yacco2::CAbs_lr1_sym*sym= AST::content(*cnode);
+if(sym->tok_co_ords__.external_file_id__> 1)
+return bypass_node;
+return bypass_node;
+}
+
+/*:538*//*539:*/
+//#line 1982 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::prt_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+yacco2::INT pidx= idx_-1;
+cnode_= srec_->node_;
+
+if(pidx<=0)goto prt_prefix;
+{
+ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx);
+if(psrec->act_==ast_base_stack::left){
+how_[0]= 'l';
+}else{
+how_[0]= 'r';
+}
+how_[1]= 't';
+how_[2]= (char)0;
+}
+prt_prefix:
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2003 "/usr/local/yacco2/library/tree.w"
+
+yacco2::INT no_lt(0);
+for(yacco2::INT x= 0;x<=idx_;++x)
+if(stk_env_->stk_rec(x)->act_==ast_base_stack::left)++no_lt;
+for(yacco2::INT x= 0;x<=no_lt;++x)(*ofile_)<<" ";
+(*ofile_)<<++cnt_<<"::"<<' ';
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2009 "/usr/local/yacco2/library/tree.w"
+
+call_prt_func:
+(*prt_funct_)(cnode_);
+return accept_node;
+}
+
+yacco2::prt_ast_functor::prt_ast_functor(PF Func,std::ofstream*Ofile):prt_funct_(Func),cnt_(0){
+if(Ofile==0){
+ofile_= &yacco2::lrclog;
+}else{
+ofile_= Ofile;
+}
+}
+
+void yacco2::prt_ast_functor::reset_cnt(){
+cnt_= 0;
+}
+
+/*:539*//*540:*/
+//#line 2028 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::fire_a_func_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+yacco2::INT pidx= idx_-1;
+cnode_= srec_->node_;
+call_prt_func:
+(*a_funct_)(cnode_);
+return accept_node;
+}
+
+yacco2::fire_a_func_ast_functor::fire_a_func_ast_functor(PF Func):a_funct_(Func){}
+
+/*:540*//*541:*/
+//#line 2044 "/usr/local/yacco2/library/tree.w"
+
+yacco2::functor_result_type
+yacco2::str_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+yacco2::INT pidx= idx_-1;
+cnode_= srec_->node_;
+
+if(pidx<=0)goto prt_prefix;
+{
+ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx);
+if(psrec->act_==ast_base_stack::left){
+how_[0]= 'l';
+}else{
+how_[0]= 'r';
+}
+how_[1]= 't';
+how_[2]= (char)0;
+}
+prt_prefix:
+call_prt_func:
+(*prt_funct_)(cnode_,this);
+return accept_node;
+}
+
+yacco2::str_ast_functor::str_ast_functor(PF Func):prt_funct_(Func){source_str_.clear();}
+
+//#line 1 "/usr/local/yacco2/library/constraints.w"
+
+
+
+
+
+
+
+/*:541*/
+//#line 238 "/usr/local/yacco2/library/tree.w"
+
+
+/*:450*/
diff --git a/web/yacco2/library/yacco2.cpp b/web/yacco2/library/yacco2.cpp
new file mode 100644
index 0000000000..203402d286
--- /dev/null
+++ b/web/yacco2/library/yacco2.cpp
@@ -0,0 +1,8056 @@
+/*36:*/
+//#line 478 "/usr/local/yacco2/library/intro.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 479 "/usr/local/yacco2/library/intro.w"
+
+/*26:*/
+//#line 404 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2.h"
+
+/*:26*/
+//#line 480 "/usr/local/yacco2/library/intro.w"
+
+/*23:*/
+//#line 392 "/usr/local/yacco2/library/intro.w"
+
+using namespace yacco2;
+
+/*:23*/
+//#line 481 "/usr/local/yacco2/library/intro.w"
+
+/*33:*/
+//#line 437 "/usr/local/yacco2/library/intro.w"
+
+
+/*:33*//*60:*/
+//#line 137 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::
+CAbs_lr1_sym::
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,yacco2::Parser*P
+,bool Auto_delete
+,bool Affected_by_abort
+)
+:id__(Id)
+,dtor__(Dtor)
+,enumerated_id__(Enum_id)
+,auto_delete__(Auto_delete)
+,affected_by_abort__(Affected_by_abort)
+{rule_info__.parser__= P;
+/*50:*/
+//#line 120 "/usr/local/yacco2/library/set.w"
+
+INT R= Enum_id%SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.partition__= Enum_id/SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.elements__= 1<<R;
+//#line 1 "/usr/local/yacco2/library/tblkup.w"
+
+
+
+
+
+
+
+/*:50*/
+//#line 154 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+}
+
+yacco2::
+CAbs_lr1_sym::
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,bool Auto_delete
+,bool Affected_by_abort)
+:id__(Id)
+,dtor__(Dtor)
+,enumerated_id__(Enum_id)
+,auto_delete__(Auto_delete)
+,affected_by_abort__(Affected_by_abort)
+{
+tok_co_ords__.rc_pos__= 0;
+tok_co_ords__.line_no__= 0;
+tok_co_ords__.external_file_id__= 0;
+tok_co_ords__.pos_in_line__= 0;
+tok_co_ords__.who_file__= 0;
+tok_co_ords__.who_line_no__= 0;
+/*50:*/
+//#line 120 "/usr/local/yacco2/library/set.w"
+
+INT R= Enum_id%SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.partition__= Enum_id/SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.elements__= 1<<R;
+//#line 1 "/usr/local/yacco2/library/tblkup.w"
+
+
+
+
+
+
+
+/*:50*/
+//#line 177 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+}
+
+yacco2::
+CAbs_lr1_sym::
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,bool Auto_delete
+,bool Affected_by_abort
+,yacco2::USINT Ext_file_no
+,yacco2::UINT Rc_pos)
+:id__(Id)
+,dtor__(Dtor)
+,enumerated_id__(Enum_id)
+,auto_delete__(Auto_delete)
+,affected_by_abort__(Affected_by_abort)
+{
+tok_co_ords__.rc_pos__= Rc_pos;
+tok_co_ords__.line_no__= 0;
+tok_co_ords__.external_file_id__= Ext_file_no;
+tok_co_ords__.pos_in_line__= 0;
+tok_co_ords__.who_file__= 0;
+tok_co_ords__.who_line_no__= 0;
+/*50:*/
+//#line 120 "/usr/local/yacco2/library/set.w"
+
+INT R= Enum_id%SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.partition__= Enum_id/SET_ELEM_NO_BITS;
+tok_co_ords__.set_entry__.elements__= 1<<R;
+//#line 1 "/usr/local/yacco2/library/tblkup.w"
+
+
+
+
+
+
+
+/*:50*/
+//#line 202 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+}
+
+/*:60*//*61:*/
+//#line 207 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::UCHAR yacco2::CAbs_lr1_sym::enum_id_set_partition_no()const{
+return tok_co_ords__.set_entry__.partition__;
+}
+
+yacco2::UCHAR yacco2::CAbs_lr1_sym::enum_id_set_member()const{
+return tok_co_ords__.set_entry__.elements__;
+}
+
+/*:61*//*62:*/
+//#line 217 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::USINT
+yacco2::
+CAbs_lr1_sym::
+rhs_no_of_parms(){
+return rule_info__.rhs_no_of_parms__;
+}
+
+/*:62*//*63:*/
+//#line 229 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::
+Parser*
+yacco2::
+CAbs_lr1_sym::
+parser(){
+return rule_info__.parser__;
+}
+
+/*:63*//*64:*/
+//#line 242 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::KCHARP
+yacco2::
+CAbs_lr1_sym::
+id()const{
+return id__;
+}
+
+/*:64*//*65:*/
+//#line 256 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::USINT
+yacco2::
+CAbs_lr1_sym::
+enumerated_id()const{
+return enumerated_id__;
+}
+
+/*:65*//*66:*/
+//#line 265 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void yacco2::
+CAbs_lr1_sym::
+set_enumerated_id(yacco2::USINT Id){
+enumerated_id__= Id;
+}
+/*:66*//*67:*/
+//#line 274 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_affected_by_abort(bool X){
+affected_by_abort__= X;
+}
+
+bool
+yacco2::
+CAbs_lr1_sym::
+affected_by_abort()const{
+return affected_by_abort__;
+}
+/*:67*//*68:*/
+//#line 291 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_auto_delete(bool X){
+auto_delete__= X;
+}
+
+bool
+yacco2::
+CAbs_lr1_sym::
+auto_delete()const{
+return auto_delete__;
+}
+/*:68*//*69:*/
+//#line 313 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+yacco2::FN_DTOR
+yacco2::
+CAbs_lr1_sym::
+dtor(){
+return dtor__;
+}
+
+/*:69*//*70:*/
+//#line 352 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_rc(yacco2::CAbs_lr1_sym&Rc,yacco2::KCHARP GPS_FILE,yacco2::UINT GPS_LINE){
+if(GPS_FILE!=0){
+tok_co_ords__.who_file__= GPS_FILE;
+tok_co_ords__.who_line_no__= GPS_LINE;
+}
+if(Rc.tok_co_ords__.external_file_id__> 0){
+tok_co_ords__.external_file_id__= Rc.tok_co_ords__.external_file_id__;
+tok_co_ords__.rc_pos__= Rc.tok_co_ords__.rc_pos__;
+tok_co_ords__.line_no__= Rc.tok_co_ords__.line_no__;
+tok_co_ords__.pos_in_line__= Rc.tok_co_ords__.pos_in_line__;
+return;
+}
+return;
+}
+
+/*:70*//*72:*/
+//#line 383 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_rc_pos(yacco2::UINT Pos){
+/*546:*/
+//#line 49 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos<1){
+
+yacco2::KCHARP msg= "Error - Pos not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:546*/
+//#line 388 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+tok_co_ords__.rc_pos__= Pos;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+rc_pos(){
+return tok_co_ords__.rc_pos__;
+}
+
+/*:72*//*73:*/
+//#line 402 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_external_file_id(yacco2::UINT File_no){
+/*548:*/
+//#line 65 "/usr/local/yacco2/library/constraints.w"
+
+if(File_no<1){
+
+yacco2::KCHARP msg= "Error - File_no not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:548*/
+//#line 407 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+tok_co_ords__.external_file_id__= File_no;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+external_file_id(){
+return tok_co_ords__.external_file_id__;
+}
+
+/*:73*//*74:*/
+//#line 420 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no(yacco2::UINT Line_no){
+/*545:*/
+//#line 41 "/usr/local/yacco2/library/constraints.w"
+
+if(Line_no<1){
+
+yacco2::KCHARP msg= "Error - Line_no not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:545*/
+//#line 425 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+tok_co_ords__.line_no__= Line_no;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+line_no(){
+return tok_co_ords__.line_no__;
+}
+
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+pos_in_line(){
+return tok_co_ords__.pos_in_line__;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_pos_in_line(yacco2::UINT Pos_in_line){
+/*547:*/
+//#line 57 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos_in_line<1){
+
+yacco2::KCHARP msg= "Error - Pos_in_line not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:547*/
+//#line 447 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+tok_co_ords__.pos_in_line__= Pos_in_line;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no_and_pos_in_line(yacco2::UINT Line_no,yacco2::UINT Pos_in_line){
+/*545:*/
+//#line 41 "/usr/local/yacco2/library/constraints.w"
+
+if(Line_no<1){
+
+yacco2::KCHARP msg= "Error - Line_no not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:545*/
+//#line 455 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+/*547:*/
+//#line 57 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos_in_line<1){
+
+yacco2::KCHARP msg= "Error - Pos_in_line not 1 or greater";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+/*:547*/
+//#line 456 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+tok_co_ords__.line_no__= Line_no;
+tok_co_ords__.pos_in_line__= Pos_in_line;
+}
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_line_no_and_pos_in_line(yacco2::CAbs_lr1_sym&Rc){
+tok_co_ords__.line_no__= Rc.tok_co_ords__.line_no__;
+tok_co_ords__.pos_in_line__= Rc.tok_co_ords__.pos_in_line__;
+}
+
+
+/*:74*//*75:*/
+//#line 473 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+void
+yacco2::
+CAbs_lr1_sym::
+set_who_created(yacco2::KCHARP File,yacco2::UINT Line_no){
+tok_co_ords__.who_file__= File;
+tok_co_ords__.who_line_no__= Line_no;
+}
+yacco2::UINT
+yacco2::
+CAbs_lr1_sym::
+who_line_no(){
+return tok_co_ords__.who_line_no__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_lr1_sym::
+who_file(){
+return tok_co_ords__.who_file__;
+}
+//#line 1 "/usr/local/yacco2/library/tok_can.w"
+
+
+
+
+
+
+
+/*:75*//*120:*/
+//#line 81 "/usr/local/yacco2/library/fsm.w"
+
+yacco2::
+CAbs_fsm::
+CAbs_fsm
+(yacco2::KCHARP Id
+,yacco2::KCHARP Version
+,yacco2::KCHARP Date
+,bool Debug
+,yacco2::KCHARP Comments
+,yacco2::KCHARP Gened_date
+,yacco2::State&Start_state)
+:id__(Id)
+,version__(Version)
+,date__(Date)
+,gened_date__(Gened_date)
+,debug__(Debug)
+,comments__(Comments)
+,start_state__(&Start_state)
+,parser__(0)
+{}
+
+yacco2::
+CAbs_fsm::
+~CAbs_fsm(){}
+
+/*:120*//*121:*/
+//#line 107 "/usr/local/yacco2/library/fsm.w"
+
+
+yacco2::State*
+yacco2::
+CAbs_fsm::
+start_state(){
+return start_state__;
+}
+
+yacco2::Parser*
+yacco2::
+CAbs_fsm::
+parser(){
+return parser__;
+}
+
+void
+yacco2::
+CAbs_fsm::
+parser(yacco2::Parser&A){
+parser__= &A;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+gened_date(){
+return gened_date__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+id(){
+return id__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+version(){
+return version__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+date(){
+return date__;
+}
+
+bool
+yacco2::
+CAbs_fsm::
+debug(){
+return debug__;
+}
+
+yacco2::KCHARP
+yacco2::
+CAbs_fsm::
+comments(){
+return comments__;
+}
+
+/*:121*//*122:*/
+//#line 180 "/usr/local/yacco2/library/fsm.w"
+
+void
+CAbs_fsm::find_a_recycled_rule
+(Per_rule_s_reuse_table*Reuse_rule_table
+,Rule_s_reuse_entry**Reuse_rule_entry){
+reuse_rule_list*rrl(0);
+if(Reuse_rule_table->for_use_list_!=0){
+rrl= Reuse_rule_table->for_use_list_;
+(*Reuse_rule_entry)= rrl->reuse_rule_entry_;
+Reuse_rule_table->for_use_list_= rrl->older_;
+}else{
+(*Reuse_rule_entry)= new Rule_s_reuse_entry();
+rrl= &(*Reuse_rule_entry)->its_linked_list_;
+rrl->reuse_rule_entry_= (*Reuse_rule_entry);
+rrl->per_rule_tbl_ptr_= Reuse_rule_table;
+}
+fnd_rrl:
+rrl->older_= 0;
+rrl->younger_= 0;
+if(Reuse_rule_table->in_use_list_!=0){
+Reuse_rule_table->in_use_list_->younger_= rrl;
+rrl->older_= Reuse_rule_table->in_use_list_;
+Reuse_rule_table->in_use_list_= rrl;
+}else{
+Reuse_rule_table->in_use_list_= rrl;
+}
+}
+void
+CAbs_fsm::recycle_rule(Rule_s_reuse_entry*Rule_to_recycle){
+Per_rule_s_reuse_table*reuse_tbl= Rule_to_recycle->its_linked_list_.per_rule_tbl_ptr_;
+reuse_rule_list*iul= reuse_tbl->in_use_list_;
+reuse_rule_list*ful= reuse_tbl->for_use_list_;
+reuse_rule_list*rrl= &Rule_to_recycle->its_linked_list_;
+reuse_rule_list*older_rrl= rrl->older_;
+reuse_rule_list*younger_rrl= rrl->younger_;
+
+rrl->younger_= 0;
+rrl->older_= reuse_tbl->for_use_list_;
+reuse_tbl->for_use_list_= rrl;
+
+if(rrl==iul){
+reuse_tbl->in_use_list_= older_rrl;
+if(older_rrl!=0){
+older_rrl->younger_= 0;
+}
+return;
+}
+if(older_rrl==0){
+younger_rrl->older_= 0;
+return;
+}
+younger_rrl->older_= older_rrl;
+older_rrl->younger_= younger_rrl;
+}
+//#line 1 "/usr/local/yacco2/library/parse_env.w"
+
+
+
+
+
+
+
+/*:122*//*126:*/
+//#line 113 "/usr/local/yacco2/library/parse_env.w"
+
+lr_stk::lr_stk(){
+top_sub__= 1;
+first_sf__= &lr_stk__[1];
+top__= first_sf__;
+first_state__= 0;
+top__->state__= 0;
+top__->symbol__= 0;
+top__->aborted__= 0;
+top__->rule_s_reuse_entry_ptr__= 0;
+}
+
+void lr_stk::lr_stk_init(yacco2::State&S1){
+top_sub__= 1;
+first_sf__= &lr_stk__[1];
+top__= first_sf__;
+first_state__= &S1;
+top__->state__= first_state__;
+top__->symbol__= 0;
+top__->aborted__= 0;
+top__->rule_s_reuse_entry_ptr__= 0;
+}
+
+bool lr_stk::empty(){
+if(top_sub__<1)return true;
+return false;
+}
+
+void lr_stk::push_symbol(yacco2::CAbs_lr1_sym&Sym){
+top__->symbol__= &Sym;
+}
+
+void lr_stk::pop(){
+--top_sub__;
+--top__;
+}
+
+void lr_stk::clean_up(){
+top_sub__= 1;
+first_sf__= &lr_stk__[1];
+top__= first_sf__;
+top__->symbol__= 0;
+top__->aborted__= 0;
+top__->state__= first_state__;
+top__->rule_s_reuse_entry_ptr__= 0;
+}
+
+/*:126*//*130:*/
+//#line 181 "/usr/local/yacco2/library/parse_env.w"
+
+Cparse_record*lr_stk::sf_by_sub(yacco2::UINT Sub){
+if((Sub<1)||(Sub> MAX_LR_STK_ITEMS)){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - sf_by_sub invalid sub: %i not in range 1..%i";
+sprintf(a,msg,Sub,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+return&lr_stk__[Sub];
+}
+
+Cparse_record*lr_stk::sf_by_top(yacco2::UINT No){
+int s= top_sub__-No;
+if(s<1){
+
+char a[BUFFER_SIZE];
+yacco2::KCHARP msg= "lr_stk - sf_by_top underflow top sub: %i, requested sub: %i < 1";
+sprintf(a,msg,top_sub__,No);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+return&lr_stk__[s];
+}
+
+/*:130*//*131:*/
+//#line 208 "/usr/local/yacco2/library/parse_env.w"
+
+void lr_stk::push_state(yacco2::State&S1){
+if(top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++top__;
+++top_sub__;
+top__->state__= &S1;
+top__->symbol__= 0;
+top__->aborted__= 0;
+top__->rule_s_reuse_entry_ptr__= 0;
+}
+/*:131*//*133:*/
+//#line 247 "/usr/local/yacco2/library/parse_env.w"
+
+void
+yacco2::
+Cparse_record::
+set_aborted(bool X){
+aborted__= X;
+}
+
+bool
+yacco2::
+Cparse_record::
+aborted()const{
+if(aborted__==0)return false;
+return true;
+}
+/*:133*//*134:*/
+//#line 265 "/usr/local/yacco2/library/parse_env.w"
+
+void
+yacco2::
+Cparse_record::
+set_rule_s_reuse_entry(yacco2::Rule_s_reuse_entry*Rule_s_reuse){
+rule_s_reuse_entry_ptr__= Rule_s_reuse;
+}
+
+yacco2::Rule_s_reuse_entry*
+yacco2::
+Cparse_record::
+rule_s_reuse_entry(){
+return rule_s_reuse_entry_ptr__;
+}
+
+
+/*:134*//*135:*/
+//#line 282 "/usr/local/yacco2/library/parse_env.w"
+
+void
+yacco2::
+Cparse_record::
+set_state(yacco2::State*State_ptr){
+state__= State_ptr;
+}
+
+yacco2::
+State*
+yacco2::
+Cparse_record::
+state(){
+return state__;
+}
+
+/*:135*//*136:*/
+//#line 299 "/usr/local/yacco2/library/parse_env.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::
+Cparse_record::
+symbol(){
+return symbol__;
+}
+
+void
+yacco2::
+Cparse_record::
+set_symbol(yacco2::CAbs_lr1_sym*Symbol){
+symbol__= Symbol;
+}
+//#line 1 "/usr/local/yacco2/library/wthread.w"
+
+
+
+
+
+
+
+
+
+/*:136*//*230:*/
+//#line 217 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::
+Parser
+(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::token_container_type*Token_supplier
+,yacco2::token_container_type*Token_producer
+,yacco2::UINT Token_supplier_key_pos
+,yacco2::token_container_type*Error_queue
+,yacco2::token_container_type*Recycle_bin
+,yacco2::tble_lkup_type*Sym_lookup_functor
+,bool Use_all_shift)
+:fsm_tbl__(&Fsm_tbl)
+,thread_name__(Fsm_tbl.id__)
+,thread_entry__(0)
+,token_supplier__(Token_supplier)
+,token_producer__(Token_producer)
+,error_queue__(Error_queue)
+,recycle_bin__(Recycle_bin)
+,current_token__(0)
+,current_token_pos__(Token_supplier_key_pos)
+,start_token__(0)
+,start_token_pos__(Token_supplier_key_pos)
+,sym_lookup_functor__(Sym_lookup_functor)
+,abort_parse__(OFF)
+,stop_parse__(OFF)
+,use_all_shift__(Use_all_shift)
+,has_questionable_shift_occured__(OFF)
+,from_thread__(0)
+,thread_no__(THREAD_SELF())
+,cv_cond__(WAIT_FOR_EVENT)
+,th_blk__()
+,pp_accept_queue_idx__(0)
+,pp_accept_queue__()
+,th_active_cnt__(0)
+,th_accepting_cnt__(0)
+,pp_requesting_parallelism__(0)
+,msg_id__(0)
+,arbitrated_token__(0)
+,no_competing_pp_ths__(0)
+,no_requested_ths_to_run__(0)
+,th_lst__()
+,launched_as_procedure__(false)
+,supplier_r_w_cnt__(1)
+{
+CREATE_COND_VAR(cv__);
+CREATE_MUTEX(mu__);
+LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+parse_stack__.lr_stk_init(*Fsm_tbl.start_state__);
+for(int x= 0;x<pp_accept_queue_size;++x){
+pp_accept_queue__[x].initialize_it();
+}
+if(token_supplier__!=0){
+supplier_r_w_cnt__= token_supplier__->r_w_cnt__;
+}
+
+fsm_tbl__->parser(*this);
+Fsm_tbl.parser(*this);
+if(Token_supplier!=0){
+current_token__= get_spec_token(current_token_pos__);
+}else{
+current_token__= yacco2::PTR_LR1_eog__;
+}
+start_token__= current_token__;
+/*231:*/
+//#line 308 "/usr/local/yacco2/library/parser.w"
+
+if(current_token__==0)return;
+
+/*:231*/
+//#line 281 "/usr/local/yacco2/library/parser.w"
+
+parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);
+if(YACCO2_T__!=0){
+if(current_token__==0)return;
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 285 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" enum: "<<current_token__->enumerated_id__
+<<' '<<'"'<<current_token__->id__<<'"'
+<<" pos: "<<current_token_pos__<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+
+
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE
+<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 303 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*:230*//*232:*/
+//#line 336 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::
+Parser(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::Thread_entry&Thread_entry
+,yacco2::Parser*Calling_parser)
+:fsm_tbl__(&Fsm_tbl)
+,thread_name__(Thread_entry.thread_fnct_name__)
+,thread_entry__(&Thread_entry)
+,token_supplier__(0)
+,token_producer__(0)
+,current_token__(0)
+,current_token_pos__(0)
+,start_token__(0)
+,start_token_pos__(0)
+,recycle_bin__(0)
+,sym_lookup_functor__(0)
+,abort_parse__(OFF)
+,stop_parse__(OFF)
+,use_all_shift__(YES)
+,has_questionable_shift_occured__(OFF)
+,from_thread__(0)
+,thread_no__(THREAD_SELF())
+,cv_cond__(EVENT_RECEIVED)
+,th_blk__(this,Calling_parser)
+,pp_accept_queue__()
+,pp_accept_queue_idx__(0)
+,th_active_cnt__(0)
+,th_accepting_cnt__(0)
+,pp_requesting_parallelism__(0)
+,msg_id__(0)
+,arbitrated_token__(0)
+,no_competing_pp_ths__(0)
+,no_requested_ths_to_run__(0)
+,th_lst__()
+,launched_as_procedure__(false)
+,supplier_r_w_cnt__(0)
+{
+CREATE_COND_VAR(cv__);
+CREATE_MUTEX(mu__);
+LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+fsm_tbl__->parser(*this);
+Fsm_tbl.parser(*this);
+parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);
+for(int x= 0;x<pp_accept_queue_size;++x){
+pp_accept_queue__[x].initialize_it();
+}
+}
+/*:232*//*233:*/
+//#line 387 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::
+Parser(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::Parser*Calling_parser)
+:fsm_tbl__(&Fsm_tbl)
+,thread_name__(Fsm_tbl.id__)
+,thread_entry__(0)
+,token_supplier__(0)
+,token_producer__(0)
+,current_token__(0)
+,current_token_pos__(0)
+,start_token__(0)
+,start_token_pos__(0)
+,recycle_bin__(0)
+,sym_lookup_functor__(0)
+,abort_parse__(OFF)
+,stop_parse__(OFF)
+,use_all_shift__(YES)
+,has_questionable_shift_occured__(OFF)
+,from_thread__(0)
+,thread_no__(THREAD_SELF())
+,cv_cond__(EVENT_RECEIVED)
+,th_blk__()
+,pp_accept_queue__()
+,pp_accept_queue_idx__(0)
+,th_active_cnt__(0)
+,th_accepting_cnt__(0)
+,pp_requesting_parallelism__(0)
+,msg_id__(0)
+,arbitrated_token__(0)
+,no_competing_pp_ths__(0)
+,no_requested_ths_to_run__(0)
+,th_lst__()
+,launched_as_procedure__(true)
+,supplier_r_w_cnt__(0)
+{
+CREATE_COND_VAR(cv__);
+CREATE_MUTEX(mu__);
+LOCK_MUTEX_OF_CALLED_PARSER(mu__,*this," of self");
+fsm_tbl__->parser(*this);
+Fsm_tbl.parser(*this);
+parse_stack__.lr_stk_init(*fsm_tbl__->start_state__);
+for(int x= 0;x<pp_accept_queue_size;++x){
+pp_accept_queue__[x].initialize_it();
+}
+}
+
+/*:233*//*234:*/
+//#line 438 "/usr/local/yacco2/library/parser.w"
+
+
+yacco2::
+Parser::
+~Parser(){
+clear_parse_stack();
+DESTROY_COND_VAR(cv__);
+DESTROY_MUTEX(mu__);
+}
+
+/*:234*//*236:*/
+//#line 450 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+shift(yacco2::Shift_entry&SE){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 455 "/usr/local/yacco2/library/parser.w"
+
+/*242:*/
+//#line 524 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= current_token__;
+
+/*:242*/
+//#line 456 "/usr/local/yacco2/library/parser.w"
+
+yacco2::State*Goto_state= SE.goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 458 "/usr/local/yacco2/library/parser.w"
+
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 459 "/usr/local/yacco2/library/parser.w"
+
+get_next_token();
+}
+
+/*:236*//*238:*/
+//#line 472 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+invisible_shift(yacco2::Shift_entry&SE){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 477 "/usr/local/yacco2/library/parser.w"
+
+/*239:*/
+//#line 484 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= NS_yacco2_k_symbols::PTR_LR1_invisible_shift_operator__;
+
+/*:239*/
+//#line 478 "/usr/local/yacco2/library/parser.w"
+
+yacco2::State*Goto_state= SE.goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 480 "/usr/local/yacco2/library/parser.w"
+
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 481 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:238*//*240:*/
+//#line 494 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+questionable_shift(yacco2::Shift_entry&SE){
+has_questionable_shift_occured__= ON;
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 500 "/usr/local/yacco2/library/parser.w"
+
+/*242:*/
+//#line 524 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= current_token__;
+
+/*:242*/
+//#line 501 "/usr/local/yacco2/library/parser.w"
+
+yacco2::State*Goto_state= SE.goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 503 "/usr/local/yacco2/library/parser.w"
+
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 504 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:240*//*241:*/
+//#line 510 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+all_shift(yacco2::Shift_entry&SE){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 515 "/usr/local/yacco2/library/parser.w"
+
+/*242:*/
+//#line 524 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= current_token__;
+
+/*:242*/
+//#line 516 "/usr/local/yacco2/library/parser.w"
+
+yacco2::State*Goto_state= SE.goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 518 "/usr/local/yacco2/library/parser.w"
+
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 519 "/usr/local/yacco2/library/parser.w"
+
+
+get_next_token();
+}
+/*:241*//*243:*/
+//#line 529 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+reduce(yacco2::Reduce_entry&RE){
+/*244:*/
+//#line 554 "/usr/local/yacco2/library/parser.w"
+
+Rule_s_reuse_entry*rule_rec1(0);
+Rule_s_reuse_entry**rule_rec= &rule_rec1;
+fsm_tbl__->reduce_rhs_of_rule(RE.rhs_id__,rule_rec);
+
+/*:244*/
+//#line 535 "/usr/local/yacco2/library/parser.w"
+
+/*246:*/
+//#line 569 "/usr/local/yacco2/library/parser.w"
+
+remove_from_stack((*rule_rec)->rule_->rule_info__.rhs_no_of_parms__);
+/*:246*/
+//#line 536 "/usr/local/yacco2/library/parser.w"
+
+/*247:*/
+//#line 572 "/usr/local/yacco2/library/parser.w"
+
+parse_stack__.top__->set_symbol((*rule_rec)->rule_);
+parse_stack__.top__->set_rule_s_reuse_entry(*rule_rec);
+
+/*:247*/
+//#line 537 "/usr/local/yacco2/library/parser.w"
+
+/*248:*/
+//#line 577 "/usr/local/yacco2/library/parser.w"
+
+Shift_entry*se(0);
+if(parse_stack__.top__->state__->shift_tbl_ptr__!=0)
+se= find_R_or_paralleled_T_shift_entry((*rule_rec)->rule_->enumerated_id__);
+
+/*:248*/
+//#line 538 "/usr/local/yacco2/library/parser.w"
+
+/*559:*/
+//#line 206 "/usr/local/yacco2/library/constraints.w"
+
+if(se==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Cant find rule shift in state FSM id: %s state: %i rule id: %i ";
+sprintf(a,msg,fsm_tbl__->id__,parse_stack__.top__->state__->state_no__
+,(*rule_rec)->rule_->enumerated_id__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:559*/
+//#line 539 "/usr/local/yacco2/library/parser.w"
+
+/*245:*/
+//#line 560 "/usr/local/yacco2/library/parser.w"
+
+yacco2::State*Goto_state= se->goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 562 "/usr/local/yacco2/library/parser.w"
+
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 563 "/usr/local/yacco2/library/parser.w"
+
+if(se->goto__->state_no__==1)
+return Parser::accepted;
+return Parser::reduced;
+
+/*:245*/
+//#line 540 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:243*//*249:*/
+//#line 598 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parse(){
+/*250:*/
+//#line 622 "/usr/local/yacco2/library/parser.w"
+
+if(current_token__==0)
+return Parser::accepted;
+
+/*:250*/
+//#line 604 "/usr/local/yacco2/library/parser.w"
+
+/*252:*/
+//#line 661 "/usr/local/yacco2/library/parser.w"
+
+fsm_tbl__->op();
+
+/*:252*/
+//#line 605 "/usr/local/yacco2/library/parser.w"
+
+
+parse_result result;
+read_token_stream:
+{
+/*251:*/
+//#line 627 "/usr/local/yacco2/library/parser.w"
+
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 628 "/usr/local/yacco2/library/parser.w"
+
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+State*cur_state= pr->state__;
+/*254:*/
+//#line 711 "/usr/local/yacco2/library/parser.w"
+
+/*544:*/
+//#line 32 "/usr/local/yacco2/library/constraints.w"
+
+if(current_token__==0){
+
+yacco2::KCHARP msg= "Error - current token ptr zero. Cannot continue parsing.";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:544*/
+//#line 712 "/usr/local/yacco2/library/parser.w"
+
+if(cur_state->parallel_shift__!=0)goto parallel_parsing;
+if(cur_state->proc_call_shift__!=0)goto proc_call_parsing;
+else goto straight_parsing;
+
+/*:254*/
+//#line 635 "/usr/local/yacco2/library/parser.w"
+
+parallel_parsing:
+/*255:*/
+//#line 721 "/usr/local/yacco2/library/parser.w"
+
+result= start_parallel_parsing(*cur_state);
+if(result==no_thds_to_run)goto straight_parsing;
+
+
+/*:255*/
+//#line 637 "/usr/local/yacco2/library/parser.w"
+
+/*256:*/
+//#line 730 "/usr/local/yacco2/library/parser.w"
+
+if(result==paralleled){
+if(parse_stack__.top__->state__->proc_call_shift__!=0){
+cur_state= parse_stack__.top__->state__;
+goto proc_call_parsing;
+}
+/*257:*/
+//#line 742 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_parallel_reduce_entry();
+
+/*:257*/
+//#line 736 "/usr/local/yacco2/library/parser.w"
+
+/*560:*/
+//#line 219 "/usr/local/yacco2/library/constraints.w"
+
+if(re==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Cant find parallel sym reduce in FSM id: %s state: %i token: %s subs: %i ";
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__
+,current_token__->id__,current_token_pos__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:560*/
+//#line 737 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 738 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 739 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:256*/
+//#line 638 "/usr/local/yacco2/library/parser.w"
+
+/*258:*/
+//#line 749 "/usr/local/yacco2/library/parser.w"
+
+/*588:*/
+//#line 482 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 486 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+<<" reset token pos: "<<current_token_pos__
+<<" reset token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 503 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+/*:588*/
+//#line 750 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 751 "/usr/local/yacco2/library/parser.w"
+
+goto straight_parsing;
+
+/*:258*/
+//#line 639 "/usr/local/yacco2/library/parser.w"
+
+proc_call_parsing:
+{
+/*259:*/
+//#line 757 "/usr/local/yacco2/library/parser.w"
+
+THR_result rslt= chained_proc_call_parsing(*cur_state);
+
+switch(rslt){
+case erred:goto straight_parsing;
+case no_thds_to_run:goto straight_parsing;
+default:{
+result= paralleled;
+break;
+}
+}
+
+
+/*:259*/
+//#line 642 "/usr/local/yacco2/library/parser.w"
+
+/*260:*/
+//#line 771 "/usr/local/yacco2/library/parser.w"
+
+if(result==paralleled){
+/*261:*/
+//#line 779 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_proc_call_reduce_entry();
+
+/*:261*/
+//#line 773 "/usr/local/yacco2/library/parser.w"
+
+/*560:*/
+//#line 219 "/usr/local/yacco2/library/constraints.w"
+
+if(re==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Cant find parallel sym reduce in FSM id: %s state: %i token: %s subs: %i ";
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__
+,current_token__->id__,current_token_pos__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:560*/
+//#line 774 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 775 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 776 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:260*/
+//#line 643 "/usr/local/yacco2/library/parser.w"
+
+/*262:*/
+//#line 786 "/usr/local/yacco2/library/parser.w"
+
+/*589:*/
+//#line 507 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 511 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+<<" reset token pos: "
+<<current_token_pos__<<" reset token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 528 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:589*/
+//#line 787 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 788 "/usr/local/yacco2/library/parser.w"
+
+goto straight_parsing;
+
+
+/*:262*/
+//#line 644 "/usr/local/yacco2/library/parser.w"
+
+}
+straight_parsing:
+/*237:*/
+//#line 464 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Shift_entry*se(0);
+if(pr->state__->shift_tbl_ptr__!=0)
+se= find_cur_T_shift_entry();
+
+
+/*:237*/
+//#line 647 "/usr/local/yacco2/library/parser.w"
+
+/*253:*/
+//#line 678 "/usr/local/yacco2/library/parser.w"
+
+if(se!=0){
+shift(*se);
+goto read_token_stream;
+}
+if(cur_state->questionable_shift__!=0){
+
+if(has_questionable_shift_occured__==ON){
+/*543:*/
+//#line 21 "/usr/local/yacco2/library/constraints.w"
+
+
+char a[BUFFER_SIZE];
+yacco2::KCHARP msg=
+"Error - Bad use of |?| instead of |+| symbol or epsilon subrule. "
+"Correct %s grammar, parse state: %i. Cannot continue parsing.";
+sprintf(a,msg,fsm_tbl__->id__,parse_stack__.top__->state__->state_no__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+
+/*:543*/
+//#line 686 "/usr/local/yacco2/library/parser.w"
+
+}
+questionable_shift(*cur_state->questionable_shift__);
+goto read_token_stream;
+}
+if(cur_state->inv_shift__){
+invisible_shift(*cur_state->inv_shift__);
+goto read_token_stream;
+}
+if(use_all_shift__==ON){
+if(cur_state->all_shift__==0){
+}else{
+
+if(current_token__->enumerated_id__==LR1_Eog)
+{
+use_all_shift__= OFF;
+all_shift(*cur_state->all_shift__);
+}else{
+all_shift(*cur_state->all_shift__);
+goto read_token_stream;
+}
+}
+}
+
+/*:253*/
+//#line 648 "/usr/local/yacco2/library/parser.w"
+
+/*263:*/
+//#line 793 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_reduce_entry();
+
+/*:263*/
+//#line 649 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 650 "/usr/local/yacco2/library/parser.w"
+
+goto parse_unsuccessful;
+
+/*:251*/
+//#line 610 "/usr/local/yacco2/library/parser.w"
+
+}
+parse_successful:
+return Parser::accepted;
+parse_unsuccessful:
+fsm_tbl__->failed();
+/*590:*/
+//#line 535 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 539 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<"#############straight parse-error current token "
+<<'"'<<current_token()->id__
+<<'"'<<" pos: "<<current_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 555 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:590*/
+//#line 616 "/usr/local/yacco2/library/parser.w"
+
+cleanup_stack_due_to_abort();
+return Parser::erred;
+}
+
+/*:249*//*265:*/
+//#line 843 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+parallel_shift(yacco2::CAbs_lr1_sym&Accept_terminal){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 848 "/usr/local/yacco2/library/parser.w"
+
+Shift_entry*se(0);
+if(pr->state__->shift_tbl_ptr__!=0)
+se= find_R_or_paralleled_T_shift_entry(Accept_terminal.enumerated_id__);
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+se= pr->state__->questionable_shift__;
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+se= pr->state__->all_shift__;
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+
+/*558:*/
+//#line 184 "/usr/local/yacco2/library/constraints.w"
+
+if(se==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Can't find symbol to shift in FSM id: %s state: %i sym-id: %i literal: %s";
+CAbs_lr1_sym*xxx= current_token();
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__,xxx->enumerated_id(),xxx->id());
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+yacco2::KCHARP msg2=
+"T co-ordinates: file: %s GPS LINE: %i GPS CHR POS: %i";
+sprintf(a,msg2
+,xxx->tok_co_ords__.external_file_id__!=MAX_USINT?
+yacco2::FILE_TBL__[xxx->tok_co_ords__.external_file_id__].c_str()
+:" No external file"
+,xxx->tok_co_ords__.line_no__
+,xxx->tok_co_ords__.pos_in_line__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:558*/
+//#line 858 "/usr/local/yacco2/library/parser.w"
+
+set_stack_to_symbol_being_shifted:
+/*266:*/
+//#line 864 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= &Accept_terminal;
+yacco2::State*Goto_state= se->goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 867 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:266*/
+//#line 860 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:265*//*267:*/
+//#line 892 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+proc_call_shift(yacco2::CAbs_lr1_sym&Accept_terminal){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 897 "/usr/local/yacco2/library/parser.w"
+
+Shift_entry*se(0);
+if(pr->state__->shift_tbl_ptr__!=0)
+se= find_R_or_paralleled_T_shift_entry(Accept_terminal.enumerated_id__);
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+se= pr->state__->all_shift__;
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+se= pr->state__->questionable_shift__;
+if(se!=0)goto set_stack_to_symbol_being_shifted;
+/*558:*/
+//#line 184 "/usr/local/yacco2/library/constraints.w"
+
+if(se==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Can't find symbol to shift in FSM id: %s state: %i sym-id: %i literal: %s";
+CAbs_lr1_sym*xxx= current_token();
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__,xxx->enumerated_id(),xxx->id());
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+yacco2::KCHARP msg2=
+"T co-ordinates: file: %s GPS LINE: %i GPS CHR POS: %i";
+sprintf(a,msg2
+,xxx->tok_co_ords__.external_file_id__!=MAX_USINT?
+yacco2::FILE_TBL__[xxx->tok_co_ords__.external_file_id__].c_str()
+:" No external file"
+,xxx->tok_co_ords__.line_no__
+,xxx->tok_co_ords__.pos_in_line__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:558*/
+//#line 906 "/usr/local/yacco2/library/parser.w"
+
+set_stack_to_symbol_being_shifted:
+/*268:*/
+//#line 912 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= &Accept_terminal;
+yacco2::State*Goto_state= se->goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 915 "/usr/local/yacco2/library/parser.w"
+
+
+
+
+/*:268*/
+//#line 908 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:267*//*269:*/
+//#line 921 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse(){
+/*252:*/
+//#line 661 "/usr/local/yacco2/library/parser.w"
+
+fsm_tbl__->op();
+
+/*:252*/
+//#line 927 "/usr/local/yacco2/library/parser.w"
+
+parse_result result;
+/*270:*/
+//#line 941 "/usr/local/yacco2/library/parser.w"
+
+if(current_token__==0)goto parse_unsuccessful;
+goto read_token_stream;
+
+/*:270*/
+//#line 929 "/usr/local/yacco2/library/parser.w"
+
+
+read_token_stream:{
+/*271:*/
+//#line 946 "/usr/local/yacco2/library/parser.w"
+
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 947 "/usr/local/yacco2/library/parser.w"
+
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+
+State*cur_state= pr->state__;
+/*254:*/
+//#line 711 "/usr/local/yacco2/library/parser.w"
+
+/*544:*/
+//#line 32 "/usr/local/yacco2/library/constraints.w"
+
+if(current_token__==0){
+
+yacco2::KCHARP msg= "Error - current token ptr zero. Cannot continue parsing.";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:544*/
+//#line 712 "/usr/local/yacco2/library/parser.w"
+
+if(cur_state->parallel_shift__!=0)goto parallel_parsing;
+if(cur_state->proc_call_shift__!=0)goto proc_call_parsing;
+else goto straight_parsing;
+
+/*:254*/
+//#line 955 "/usr/local/yacco2/library/parser.w"
+
+parallel_parsing:
+/*255:*/
+//#line 721 "/usr/local/yacco2/library/parser.w"
+
+result= start_parallel_parsing(*cur_state);
+if(result==no_thds_to_run)goto straight_parsing;
+
+
+/*:255*/
+//#line 957 "/usr/local/yacco2/library/parser.w"
+
+/*256:*/
+//#line 730 "/usr/local/yacco2/library/parser.w"
+
+if(result==paralleled){
+if(parse_stack__.top__->state__->proc_call_shift__!=0){
+cur_state= parse_stack__.top__->state__;
+goto proc_call_parsing;
+}
+/*257:*/
+//#line 742 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_parallel_reduce_entry();
+
+/*:257*/
+//#line 736 "/usr/local/yacco2/library/parser.w"
+
+/*560:*/
+//#line 219 "/usr/local/yacco2/library/constraints.w"
+
+if(re==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Cant find parallel sym reduce in FSM id: %s state: %i token: %s subs: %i ";
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__
+,current_token__->id__,current_token_pos__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:560*/
+//#line 737 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 738 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 739 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:256*/
+//#line 958 "/usr/local/yacco2/library/parser.w"
+
+/*258:*/
+//#line 749 "/usr/local/yacco2/library/parser.w"
+
+/*588:*/
+//#line 482 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 486 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+<<" reset token pos: "<<current_token_pos__
+<<" reset token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 503 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+/*:588*/
+//#line 750 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 751 "/usr/local/yacco2/library/parser.w"
+
+goto straight_parsing;
+
+/*:258*/
+//#line 959 "/usr/local/yacco2/library/parser.w"
+
+proc_call_parsing:
+{
+/*259:*/
+//#line 757 "/usr/local/yacco2/library/parser.w"
+
+THR_result rslt= chained_proc_call_parsing(*cur_state);
+
+switch(rslt){
+case erred:goto straight_parsing;
+case no_thds_to_run:goto straight_parsing;
+default:{
+result= paralleled;
+break;
+}
+}
+
+
+/*:259*/
+//#line 962 "/usr/local/yacco2/library/parser.w"
+
+/*260:*/
+//#line 771 "/usr/local/yacco2/library/parser.w"
+
+if(result==paralleled){
+/*261:*/
+//#line 779 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_proc_call_reduce_entry();
+
+/*:261*/
+//#line 773 "/usr/local/yacco2/library/parser.w"
+
+/*560:*/
+//#line 219 "/usr/local/yacco2/library/constraints.w"
+
+if(re==0){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Cant find parallel sym reduce in FSM id: %s state: %i token: %s subs: %i ";
+sprintf(a,msg,fsm_tbl__->id__,pr->state__->state_no__
+,current_token__->id__,current_token_pos__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:560*/
+//#line 774 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 775 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 776 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:260*/
+//#line 963 "/usr/local/yacco2/library/parser.w"
+
+/*262:*/
+//#line 786 "/usr/local/yacco2/library/parser.w"
+
+/*589:*/
+//#line 507 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 511 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::############# TRY STRAIGHT try_straight_due_to_aborted_parallel"
+<<" reset token pos: "
+<<current_token_pos__<<" reset token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 528 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:589*/
+//#line 787 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 788 "/usr/local/yacco2/library/parser.w"
+
+goto straight_parsing;
+
+
+/*:262*/
+//#line 964 "/usr/local/yacco2/library/parser.w"
+
+}
+
+straight_parsing:
+/*237:*/
+//#line 464 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Shift_entry*se(0);
+if(pr->state__->shift_tbl_ptr__!=0)
+se= find_cur_T_shift_entry();
+
+
+/*:237*/
+//#line 968 "/usr/local/yacco2/library/parser.w"
+
+/*253:*/
+//#line 678 "/usr/local/yacco2/library/parser.w"
+
+if(se!=0){
+shift(*se);
+goto read_token_stream;
+}
+if(cur_state->questionable_shift__!=0){
+
+if(has_questionable_shift_occured__==ON){
+/*543:*/
+//#line 21 "/usr/local/yacco2/library/constraints.w"
+
+
+char a[BUFFER_SIZE];
+yacco2::KCHARP msg=
+"Error - Bad use of |?| instead of |+| symbol or epsilon subrule. "
+"Correct %s grammar, parse state: %i. Cannot continue parsing.";
+sprintf(a,msg,fsm_tbl__->id__,parse_stack__.top__->state__->state_no__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+
+/*:543*/
+//#line 686 "/usr/local/yacco2/library/parser.w"
+
+}
+questionable_shift(*cur_state->questionable_shift__);
+goto read_token_stream;
+}
+if(cur_state->inv_shift__){
+invisible_shift(*cur_state->inv_shift__);
+goto read_token_stream;
+}
+if(use_all_shift__==ON){
+if(cur_state->all_shift__==0){
+}else{
+
+if(current_token__->enumerated_id__==LR1_Eog)
+{
+use_all_shift__= OFF;
+all_shift(*cur_state->all_shift__);
+}else{
+all_shift(*cur_state->all_shift__);
+goto read_token_stream;
+}
+}
+}
+
+/*:253*/
+//#line 969 "/usr/local/yacco2/library/parser.w"
+
+/*263:*/
+//#line 793 "/usr/local/yacco2/library/parser.w"
+
+Reduce_entry*re(0);
+if(parse_stack__.top__->state__->reduce_tbl_ptr__!=0)
+re= find_reduce_entry();
+
+/*:263*/
+//#line 970 "/usr/local/yacco2/library/parser.w"
+
+/*264:*/
+//#line 801 "/usr/local/yacco2/library/parser.w"
+
+if(re!=0){
+result= reduce(*re);
+if(stop_parse__==ON){
+cleanup_stack_due_to_abort();
+goto parse_successful;
+}
+if(abort_parse__==ON)goto parse_unsuccessful;
+if(result==Parser::reduced)goto read_token_stream;
+if(result==Parser::accepted)goto parse_successful;
+}
+
+/*:264*/
+//#line 971 "/usr/local/yacco2/library/parser.w"
+
+goto parse_unsuccessful;
+
+/*:271*/
+//#line 932 "/usr/local/yacco2/library/parser.w"
+
+}
+parse_successful:
+return parallel_parse_successful();
+parse_unsuccessful:
+return parallel_parse_unsuccessful();
+}
+
+/*:269*//*272:*/
+//#line 996 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse_successful(){
+/*595:*/
+//#line 654 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(current_token()!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 659 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<"accept-parallel-parse current token "
+<<'"'<<current_token()->id__<<'"'
+<<" pos: "<<current_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"YACCO2_TH__::"<<" accept tok: "
+<<pp_rsvp__.accept_token__->id__<<" tok pos: "
+<<pp_rsvp__.accept_token_pos__
+<<" la tok: "<<pp_rsvp__.la_token__->id__
+<<" la tok pos: "
+<<pp_rsvp__.la_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<" thru fsm-> parser*: "
+<<fsm_tbl__->parser()<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS ACCEPT FILE: ";
+EXTERNAL_GPSing(pp_rsvp__.accept_token__)
+yacco2::lrclog
+<<" GPS ACCEPT LINE: "
+<<pp_rsvp__.accept_token__->tok_co_ords__.line_no__
+<<" GPS ACCEPT CHR POS: "
+<<pp_rsvp__.accept_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS ACCEPT LA FILE: ";
+EXTERNAL_GPSing(pp_rsvp__.la_token__)
+yacco2::lrclog
+<<" GPS ACCEPT LA LINE: "
+<<pp_rsvp__.la_token__->tok_co_ords__.line_no__
+<<" GPS ACCEPT LA CHR POS: "
+<<pp_rsvp__.la_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 693 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:595*/
+//#line 1002 "/usr/local/yacco2/library/parser.w"
+
+if(launched_as_procedure__==true){
+/*280:*/
+//#line 1089 "/usr/local/yacco2/library/parser.w"
+
+/*598:*/
+//#line 756 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 758 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 766 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:598*/
+//#line 1090 "/usr/local/yacco2/library/parser.w"
+
+--pp_requesting_parallelism__->th_active_cnt__;
+if(supplier_r_w_cnt__> 1){
+--pp_requesting_parallelism__->supplier_r_w_cnt__;
+if(token_supplier__->r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1095 "/usr/local/yacco2/library/parser.w"
+
+--token_supplier__->r_w_cnt__;
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1097 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*599:*/
+//#line 770 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 772 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread after reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 780 "/usr/local/yacco2/library/macros.w"
+
+}
+
+
+/*:599*/
+//#line 1101 "/usr/local/yacco2/library/parser.w"
+
+
+/*:280*/
+//#line 1004 "/usr/local/yacco2/library/parser.w"
+
+/*278:*/
+//#line 1057 "/usr/local/yacco2/library/parser.w"
+
+pp_requesting_parallelism__->put_T_into_accept_queue(pp_rsvp__);
+
+/*:278*/
+//#line 1005 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::accepted;
+}
+else{
+/*273:*/
+//#line 1022 "/usr/local/yacco2/library/parser.w"
+
+/*380:*/
+//#line 2829 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2831 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to acquire thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2833 "/usr/local/yacco2/library/parser.w"
+
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2837 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Acquired thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2839 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:380*/
+//#line 1023 "/usr/local/yacco2/library/parser.w"
+
+th_blk__.set_waiting_for_work();
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 1025 "/usr/local/yacco2/library/parser.w"
+
+
+/*:273*/
+//#line 1010 "/usr/local/yacco2/library/parser.w"
+
+/*275:*/
+//#line 1035 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+/*:275*/
+//#line 1011 "/usr/local/yacco2/library/parser.w"
+
+/*280:*/
+//#line 1089 "/usr/local/yacco2/library/parser.w"
+
+/*598:*/
+//#line 756 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 758 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 766 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:598*/
+//#line 1090 "/usr/local/yacco2/library/parser.w"
+
+--pp_requesting_parallelism__->th_active_cnt__;
+if(supplier_r_w_cnt__> 1){
+--pp_requesting_parallelism__->supplier_r_w_cnt__;
+if(token_supplier__->r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1095 "/usr/local/yacco2/library/parser.w"
+
+--token_supplier__->r_w_cnt__;
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1097 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*599:*/
+//#line 770 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 772 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread after reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 780 "/usr/local/yacco2/library/macros.w"
+
+}
+
+
+/*:599*/
+//#line 1101 "/usr/local/yacco2/library/parser.w"
+
+
+/*:280*/
+//#line 1012 "/usr/local/yacco2/library/parser.w"
+
+/*278:*/
+//#line 1057 "/usr/local/yacco2/library/parser.w"
+
+pp_requesting_parallelism__->put_T_into_accept_queue(pp_rsvp__);
+
+/*:278*/
+//#line 1013 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+/*274:*/
+//#line 1028 "/usr/local/yacco2/library/parser.w"
+
+/*277:*/
+//#line 1048 "/usr/local/yacco2/library/parser.w"
+
+if(have_all_threads_reported_back()==YES){
+/*621:*/
+//#line 1103 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1105 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" all threads reported back "
+<<" Caller parser::"<<pp_requesting_parallelism__->thread_no__
+<<"::"<<pp_requesting_parallelism__->thread_name()
+<<" # competing thds: "
+<<pp_requesting_parallelism__->no_requested_ths_to_run__
+<<" # active thds: "
+<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1115 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:621*/
+//#line 1050 "/usr/local/yacco2/library/parser.w"
+
+post_event_to_requesting_grammar(*pp_requesting_parallelism__,Accept_parallel_parse,*this);
+}else{
+/*622:*/
+//#line 1119 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1121 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" NOT all threads reported back "
+<<" Caller parser::"<<pp_requesting_parallelism__->thread_no__
+<<"::"<<pp_requesting_parallelism__->thread_name()
+<<" # competing thds: "
+<<pp_requesting_parallelism__->no_requested_ths_to_run__
+<<" # active thds: "<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1130 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:622*/
+//#line 1053 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:277*/
+//#line 1029 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:274*/
+//#line 1015 "/usr/local/yacco2/library/parser.w"
+
+/*276:*/
+//#line 1044 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+/*:276*/
+//#line 1016 "/usr/local/yacco2/library/parser.w"
+
+return Parser::accepted;
+}
+}
+
+/*:272*//*279:*/
+//#line 1064 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+parallel_parse_unsuccessful(){
+/*281:*/
+//#line 1110 "/usr/local/yacco2/library/parser.w"
+
+if(fsm_tbl__->failed()==true){
+return parallel_parse_successful();
+}
+
+/*:281*/
+//#line 1070 "/usr/local/yacco2/library/parser.w"
+
+/*596:*/
+//#line 699 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(current_token()){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 704 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<"YACCO2_TH__::"
+<<"#############parallel parse-error current token "
+<<current_token()->id__<<" pos: "<<current_token_pos__
+<<" enum id: "<<current_token()->enumerated_id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 721 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:596*/
+//#line 1071 "/usr/local/yacco2/library/parser.w"
+
+if(launched_as_procedure__==true){
+/*280:*/
+//#line 1089 "/usr/local/yacco2/library/parser.w"
+
+/*598:*/
+//#line 756 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 758 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 766 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:598*/
+//#line 1090 "/usr/local/yacco2/library/parser.w"
+
+--pp_requesting_parallelism__->th_active_cnt__;
+if(supplier_r_w_cnt__> 1){
+--pp_requesting_parallelism__->supplier_r_w_cnt__;
+if(token_supplier__->r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1095 "/usr/local/yacco2/library/parser.w"
+
+--token_supplier__->r_w_cnt__;
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1097 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*599:*/
+//#line 770 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 772 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread after reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 780 "/usr/local/yacco2/library/macros.w"
+
+}
+
+
+/*:599*/
+//#line 1101 "/usr/local/yacco2/library/parser.w"
+
+
+/*:280*/
+//#line 1073 "/usr/local/yacco2/library/parser.w"
+
+goto fire_off_error_functor;
+}
+else{
+/*273:*/
+//#line 1022 "/usr/local/yacco2/library/parser.w"
+
+/*380:*/
+//#line 2829 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2831 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to acquire thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2833 "/usr/local/yacco2/library/parser.w"
+
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2837 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Acquired thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2839 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:380*/
+//#line 1023 "/usr/local/yacco2/library/parser.w"
+
+th_blk__.set_waiting_for_work();
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 1025 "/usr/local/yacco2/library/parser.w"
+
+
+/*:273*/
+//#line 1077 "/usr/local/yacco2/library/parser.w"
+
+/*275:*/
+//#line 1035 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+/*:275*/
+//#line 1078 "/usr/local/yacco2/library/parser.w"
+
+/*280:*/
+//#line 1089 "/usr/local/yacco2/library/parser.w"
+
+/*598:*/
+//#line 756 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 758 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 766 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:598*/
+//#line 1090 "/usr/local/yacco2/library/parser.w"
+
+--pp_requesting_parallelism__->th_active_cnt__;
+if(supplier_r_w_cnt__> 1){
+--pp_requesting_parallelism__->supplier_r_w_cnt__;
+if(token_supplier__->r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1095 "/usr/local/yacco2/library/parser.w"
+
+--token_supplier__->r_w_cnt__;
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1097 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*599:*/
+//#line 770 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 772 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<" called thread after reducing thread active count of caller thread "
+<<pp_requesting_parallelism__->thread_no__<<"::"
+<<pp_requesting_parallelism__->fsm_tbl__->id__
+<<" active thread count::"<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 780 "/usr/local/yacco2/library/macros.w"
+
+}
+
+
+/*:599*/
+//#line 1101 "/usr/local/yacco2/library/parser.w"
+
+
+/*:280*/
+//#line 1079 "/usr/local/yacco2/library/parser.w"
+
+/*274:*/
+//#line 1028 "/usr/local/yacco2/library/parser.w"
+
+/*277:*/
+//#line 1048 "/usr/local/yacco2/library/parser.w"
+
+if(have_all_threads_reported_back()==YES){
+/*621:*/
+//#line 1103 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1105 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" all threads reported back "
+<<" Caller parser::"<<pp_requesting_parallelism__->thread_no__
+<<"::"<<pp_requesting_parallelism__->thread_name()
+<<" # competing thds: "
+<<pp_requesting_parallelism__->no_requested_ths_to_run__
+<<" # active thds: "
+<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1115 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:621*/
+//#line 1050 "/usr/local/yacco2/library/parser.w"
+
+post_event_to_requesting_grammar(*pp_requesting_parallelism__,Accept_parallel_parse,*this);
+}else{
+/*622:*/
+//#line 1119 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1121 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" NOT all threads reported back "
+<<" Caller parser::"<<pp_requesting_parallelism__->thread_no__
+<<"::"<<pp_requesting_parallelism__->thread_name()
+<<" # competing thds: "
+<<pp_requesting_parallelism__->no_requested_ths_to_run__
+<<" # active thds: "<<pp_requesting_parallelism__->th_active_cnt__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1130 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:622*/
+//#line 1053 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:277*/
+//#line 1029 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:274*/
+//#line 1080 "/usr/local/yacco2/library/parser.w"
+
+/*276:*/
+//#line 1044 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX_OF_CALLED_PARSER(pp_requesting_parallelism__->mu__,*this," of calling grammar");
+
+/*:276*/
+//#line 1081 "/usr/local/yacco2/library/parser.w"
+
+}
+fire_off_error_functor:
+cleanup_stack_due_to_abort();
+clean_up();
+return Parser::erred;
+}
+/*:279*//*282:*/
+//#line 1118 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+proc_call_parse_successful(){
+/*595:*/
+//#line 654 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(current_token()!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 659 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<"accept-parallel-parse current token "
+<<'"'<<current_token()->id__<<'"'
+<<" pos: "<<current_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"YACCO2_TH__::"<<" accept tok: "
+<<pp_rsvp__.accept_token__->id__<<" tok pos: "
+<<pp_rsvp__.accept_token_pos__
+<<" la tok: "<<pp_rsvp__.la_token__->id__
+<<" la tok pos: "
+<<pp_rsvp__.la_token_pos__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<" thru fsm-> parser*: "
+<<fsm_tbl__->parser()<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS ACCEPT FILE: ";
+EXTERNAL_GPSing(pp_rsvp__.accept_token__)
+yacco2::lrclog
+<<" GPS ACCEPT LINE: "
+<<pp_rsvp__.accept_token__->tok_co_ords__.line_no__
+<<" GPS ACCEPT CHR POS: "
+<<pp_rsvp__.accept_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS ACCEPT LA FILE: ";
+EXTERNAL_GPSing(pp_rsvp__.la_token__)
+yacco2::lrclog
+<<" GPS ACCEPT LA LINE: "
+<<pp_rsvp__.la_token__->tok_co_ords__.line_no__
+<<" GPS ACCEPT LA CHR POS: "
+<<pp_rsvp__.la_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 693 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:595*/
+//#line 1124 "/usr/local/yacco2/library/parser.w"
+
+/*278:*/
+//#line 1057 "/usr/local/yacco2/library/parser.w"
+
+pp_requesting_parallelism__->put_T_into_accept_queue(pp_rsvp__);
+
+/*:278*/
+//#line 1125 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::accepted;
+}
+
+/*:282*//*283:*/
+//#line 1134 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+proc_call_parse_unsuccessful(){
+/*281:*/
+//#line 1110 "/usr/local/yacco2/library/parser.w"
+
+if(fsm_tbl__->failed()==true){
+return parallel_parse_successful();
+}
+
+/*:281*/
+//#line 1140 "/usr/local/yacco2/library/parser.w"
+
+/*597:*/
+//#line 727 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(current_token()){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 732 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::";
+yacco2::lrclog<<fsm_tbl__->id__<<"::";
+yacco2::lrclog<<"YACCO2_TH__::"
+<<"#############parallel parse-error current token "
+<<current_token()->id__<<" pos: "<<current_token_pos__
+<<" enum id: "<<current_token()->enumerated_id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RESET FILE: ";
+EXTERNAL_GPSing(current_token())
+yacco2::lrclog
+<<" GPS RESET LINE: "
+<<current_token()->tok_co_ords__.line_no__
+<<" GPS RESET CHR POS: "
+<<current_token()->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 749 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:597*/
+//#line 1141 "/usr/local/yacco2/library/parser.w"
+
+goto fire_off_error_functor;
+fire_off_error_functor:
+cleanup_stack_due_to_abort();
+clean_up();
+return Parser::erred;
+}
+
+/*:283*//*284:*/
+//#line 1154 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Shift_entry*
+yacco2::
+Parser::
+find_cur_T_shift_entry(){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1159 "/usr/local/yacco2/library/parser.w"
+
+yacco2::USINT Enum_id= current_token__->enumerated_id__;
+State*State_ptr= pr->state__;
+Shift_tbl*st= State_ptr->shift_tbl_ptr__;
+yacco2::USINT cnt= st->no_entries__;
+Shift_entry_array_type*shft_entry_array= (Shift_entry_array_type*)&st->first_entry__;
+yacco2::Shift_entry*k_entry;
+if(cnt> SEQ_SRCH_VS_BIN_SRCH_LIMIT)goto bin_srch;
+for(int x= 0;x<cnt;++x){
+k_entry= &(*shft_entry_array)[x];
+if(Enum_id==k_entry->id__)return k_entry;
+if(Enum_id<k_entry->id__)break;
+}
+eolr_seq:
+for(int x= 0;x<cnt;++x){
+k_entry= &(*shft_entry_array)[x];
+if(LR1_Eolr==k_entry->id__)return k_entry;
+if(LR1_Eolr<k_entry->id__)return 0;
+}
+return 0;
+bin_srch:
+int lower= 1;
+int upper= cnt;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+B2:
+if(upper<lower)goto eolr_srch;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*shft_entry_array)[mid_pt_rel0];
+B3:
+if(Enum_id==k_entry->id__)return k_entry;
+if(Enum_id> k_entry->id__)goto B5;
+B4:
+upper= mid_pt-1;
+goto B2;
+B5:
+lower= mid_pt+1;
+goto B2;
+eolr_srch:
+lower= 1;
+upper= st->no_entries__;
+B2_eolr:
+if(upper<lower)return 0;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*shft_entry_array)[mid_pt_rel0];
+if(LR1_Eolr==k_entry->id__)return k_entry;
+if(LR1_Eolr> k_entry->id__)goto B5_eolr;
+B4_eolr:
+upper= mid_pt-1;
+goto B2_eolr;
+B5_eolr:
+lower= mid_pt+1;
+goto B2_eolr;
+return 0;
+}
+/*:284*//*285:*/
+//#line 1221 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Shift_entry*
+yacco2::
+Parser::
+find_R_or_paralleled_T_shift_entry(yacco2::USINT Enum_id){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1226 "/usr/local/yacco2/library/parser.w"
+
+State*State_ptr= pr->state__;
+Shift_tbl*st= State_ptr->shift_tbl_ptr__;
+yacco2::USINT cnt= st->no_entries__;
+Shift_entry_array_type*shft_entry_array= (Shift_entry_array_type*)&st->first_entry__;
+yacco2::Shift_entry*k_entry;
+if(cnt> SEQ_SRCH_VS_BIN_SRCH_LIMIT)goto bin_srch;
+for(int x= 0;x<cnt;++x){
+if(x>=cnt)break;
+k_entry= &(*shft_entry_array)[x];
+if(Enum_id==k_entry->id__)return k_entry;
+if(Enum_id<k_entry->id__)break;
+}
+eolr_seq:
+for(int x= 0;x<cnt;++x){
+if(x>=cnt)break;
+k_entry= &(*shft_entry_array)[x];
+if(LR1_Eolr==k_entry->id__)return k_entry;
+if(LR1_Eolr<k_entry->id__)return 0;
+}
+return 0;
+bin_srch:
+int lower= 1;
+int upper= cnt;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+B2:
+if(upper<lower)goto eolr_srch;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*shft_entry_array)[mid_pt_rel0];
+B3:
+if(Enum_id==k_entry->id__)return k_entry;
+if(Enum_id> k_entry->id__)goto B5;
+B4:
+upper= mid_pt-1;
+goto B2;
+B5:
+lower= mid_pt+1;
+goto B2;
+eolr_srch:
+lower= 1;
+upper= st->no_entries__;
+B2_eolr:
+if(upper<lower)return 0;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*shft_entry_array)[mid_pt_rel0];
+if(LR1_Eolr==k_entry->id__)return k_entry;
+if(LR1_Eolr> k_entry->id__)goto B5_eolr;
+B4_eolr:
+upper= mid_pt-1;
+goto B2_eolr;
+B5_eolr:
+lower= mid_pt+1;
+goto B2_eolr;
+return 0;
+}
+
+/*:285*//*286:*/
+//#line 1289 "/usr/local/yacco2/library/parser.w"
+
+void
+add_set_to_map(yacco2::yacco2_set_type&Map,int Partition,int Element){
+yacco2::yacco2_set_iter_type e= Map.find(Partition);
+if(e==Map.end()){
+Map[Partition]= Element;
+}else{
+int se= e->second;
+int v= se+Element;
+e->second= v;
+}
+}
+/*:286*//*288:*/
+//#line 1337 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_questionable_sym_in_reduce_lookahead(){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1342 "/usr/local/yacco2/library/parser.w"
+
+State*State_ptr= pr->state__;
+UCHAR partition;
+UCHAR element;
+int lower;
+int upper;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+yacco2::Set_entry*k_entry;
+
+Reduce_tbl*rt= State_ptr->reduce_tbl_ptr__;
+yacco2::USINT cnt_of_reducing_subrules= rt->no_entries__;
+Reduce_entry*re= (Reduce_entry*)&rt->first_entry__;
+yacco2::Set_tbl*pla_set;
+yacco2::INT no_set_pairs;
+for(yacco2::UINT x= 1;x<=cnt_of_reducing_subrules;++x,++re){
+pla_set= re->la_set__;
+no_set_pairs= pla_set->no_entries__;
+Set_entry_array_type*set_entry_array= (Set_entry_array_type*)&(pla_set->first_entry__);
+if(no_set_pairs> SEQ_SRCH_VS_BIN_SRCH_LIMIT)goto QUE_srch;
+for(int x= 0;x<no_set_pairs;++x){
+k_entry= &(*set_entry_array)[x];
+if(LRK_LA_QUE_SET.partition__==k_entry->partition__){
+if(LRK_LA_QUE_SET.elements__&k_entry->elements__){
+return re;
+}else{
+break;
+}
+}
+if(LRK_LA_QUE_SET.partition__<k_entry->partition__)break;
+}
+continue;
+QUE_srch:
+lower= 1;
+upper= no_set_pairs;
+B2_que:
+if(upper<lower)return 0;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*set_entry_array)[mid_pt_rel0];
+
+if(LRK_LA_QUE_SET.partition__==k_entry->partition__){
+if(LRK_LA_QUE_SET.elements__&k_entry->elements__){
+return re;
+}else{
+continue;
+}
+}
+
+if(LRK_LA_QUE_SET.partition__> k_entry->partition__)goto B5_que;
+B4_que:
+upper= mid_pt-1;
+goto B2_que;
+B5_que:
+lower= mid_pt+1;
+goto B2_que;
+}
+return 0;
+}
+
+/*:288*//*289:*/
+//#line 1436 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_reduce_entry(){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1441 "/usr/local/yacco2/library/parser.w"
+
+State*State_ptr= pr->state__;
+UCHAR partition= current_token__->tok_co_ords__.set_entry__.partition__;
+UCHAR element= current_token__->tok_co_ords__.set_entry__.elements__;
+int cp= partition;
+int ce= element;
+Reduce_tbl*rt= State_ptr->reduce_tbl_ptr__;
+yacco2::USINT cnt_of_reducing_subrules= rt->no_entries__;
+Reduce_entry*re= (Reduce_entry*)&rt->first_entry__;
+
+yacco2::Set_tbl*pla_set;
+yacco2::INT no_set_pairs;
+int lower;
+int upper;
+int seg_ln;
+int mid_pt;
+int mid_pt_rel0;
+yacco2::Set_entry*k_entry;
+if(has_questionable_shift_occured__==ON){
+return re;
+}
+/*291:*/
+//#line 1478 "/usr/local/yacco2/library/parser.w"
+
+{
+Pass1_reduce:
+re= (Reduce_entry*)&rt->first_entry__;
+for(yacco2::UINT x= 1;x<=cnt_of_reducing_subrules;++x,++re){
+pla_set= re->la_set__;
+no_set_pairs= pla_set->no_entries__;
+Set_entry_array_type*set_entry_array= (Set_entry_array_type*)&(pla_set->first_entry__);
+if(no_set_pairs> SEQ_SRCH_VS_BIN_SRCH_LIMIT){
+/*293:*/
+//#line 1508 "/usr/local/yacco2/library/parser.w"
+
+{
+bin_srch_cur_tok:
+lower= 1;
+upper= no_set_pairs;
+B2:
+if(upper<lower)goto srch_end_cur_tok;
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*set_entry_array)[mid_pt_rel0];
+B3:
+if(partition==k_entry->partition__){
+if(element&k_entry->elements__){
+return re;
+}else{
+goto srch_end_cur_tok;
+}
+}
+if(partition> k_entry->partition__)goto B5;
+B4:
+upper= mid_pt-1;
+goto B2;
+B5:
+lower= mid_pt+1;
+goto B2;
+srch_end_cur_tok:;
+}
+
+/*:293*/
+//#line 1487 "/usr/local/yacco2/library/parser.w"
+
+}else{
+/*292:*/
+//#line 1494 "/usr/local/yacco2/library/parser.w"
+
+for(int xx= 0;xx<no_set_pairs;++xx){
+k_entry= &(*set_entry_array)[xx];
+if(partition==k_entry->partition__){
+if(element&k_entry->elements__){
+return re;
+}else{
+break;
+}
+}
+if(partition<k_entry->partition__)break;
+}
+
+/*:292*/
+//#line 1489 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+}
+/*:291*/
+//#line 1462 "/usr/local/yacco2/library/parser.w"
+
+/*294:*/
+//#line 1542 "/usr/local/yacco2/library/parser.w"
+
+{
+re= (Reduce_entry*)&rt->first_entry__;
+for(yacco2::UINT x= 1;x<=cnt_of_reducing_subrules;++x,++re){
+pla_set= re->la_set__;
+no_set_pairs= pla_set->no_entries__;
+Set_entry_array_type*set_entry_array= (Set_entry_array_type*)&(pla_set->first_entry__);
+
+if(no_set_pairs> SEQ_SRCH_VS_BIN_SRCH_LIMIT){
+/*296:*/
+//#line 1575 "/usr/local/yacco2/library/parser.w"
+
+{
+bin_srch_meta:
+lower= 1;
+upper= no_set_pairs;
+Meta_srch:
+lower= 1;
+upper= no_set_pairs;
+B2_meta:
+if(upper<lower){
+continue;
+}
+seg_ln= upper+lower;
+mid_pt= seg_ln>>1;
+mid_pt_rel0= mid_pt-1;
+k_entry= &(*set_entry_array)[mid_pt_rel0];
+
+if(LRK_LA_EOLR_SET.partition__==k_entry->partition__){
+if(LRK_LA_EOLR_SET.elements__&k_entry->elements__){
+return re;
+}else{
+continue;
+}
+}
+if(LRK_LA_EOLR_SET.partition__> k_entry->partition__)goto B5_meta;
+B4_meta:
+upper= mid_pt-1;
+goto B2_meta;
+B5_meta:
+lower= mid_pt+1;
+goto B2_meta;
+}
+
+/*:296*/
+//#line 1551 "/usr/local/yacco2/library/parser.w"
+
+}else{
+/*295:*/
+//#line 1558 "/usr/local/yacco2/library/parser.w"
+
+{
+seq_meta:
+for(int x= 0;x<no_set_pairs;++x){
+k_entry= &(*set_entry_array)[x];
+if(LRK_LA_EOLR_SET.partition__==k_entry->partition__){
+if(LRK_LA_EOLR_SET.elements__&k_entry->elements__){
+return re;
+}else{
+break;
+}
+}
+if(LRK_LA_EOLR_SET.partition__<k_entry->partition__)break;
+}
+}
+
+/*:295*/
+//#line 1553 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+}
+/*:294*/
+//#line 1463 "/usr/local/yacco2/library/parser.w"
+
+return find_questionable_sym_in_reduce_lookahead();
+}
+
+/*:289*//*297:*/
+//#line 1614 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_parallel_reduce_entry(){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1619 "/usr/local/yacco2/library/parser.w"
+
+State*State_ptr= pr->state__;
+Reduce_tbl*rt= State_ptr->reduce_tbl_ptr__;
+Reduce_entry*re= (Reduce_entry*)&rt->first_entry__;
+return re;
+}
+
+/*:297*//*298:*/
+//#line 1632 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Reduce_entry*
+yacco2::
+Parser::
+find_proc_call_reduce_entry(){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 1637 "/usr/local/yacco2/library/parser.w"
+
+State*State_ptr= pr->state__;
+Reduce_tbl*rt= State_ptr->reduce_tbl_ptr__;
+Reduce_entry*re= (Reduce_entry*)&rt->first_entry__;
+return re;
+}
+
+/*:298*//*300:*/
+//#line 1646 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+CAbs_lr1_sym*
+yacco2::
+Parser::
+start_token(){
+return start_token__;
+}
+
+/*:300*//*301:*/
+//#line 1656 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_start_token(CAbs_lr1_sym&Token){
+start_token__= &Token;
+}
+
+/*:301*//*302:*/
+//#line 1665 "/usr/local/yacco2/library/parser.w"
+
+yacco2::UINT
+yacco2::
+Parser::
+start_token_pos(){
+return start_token_pos__;
+}
+
+/*:302*//*303:*/
+//#line 1674 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_start_token_pos(yacco2::UINT Pos){
+start_token_pos__= Pos;
+}
+
+/*:303*//*305:*/
+//#line 1700 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_use_all_shift_on(){
+use_all_shift__= ON;
+}
+
+/*:305*//*306:*/
+//#line 1709 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_use_all_shift_off(){
+use_all_shift__= OFF;
+}
+
+/*:306*//*307:*/
+//#line 1718 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::
+use_all_shift(){
+return use_all_shift__;
+}
+
+/*:307*//*309:*/
+//#line 1734 "/usr/local/yacco2/library/parser.w"
+
+yacco2::tble_lkup_type*
+yacco2::
+Parser::
+sym_lookup_functor(){
+return sym_lookup_functor__;
+}
+
+/*:309*//*310:*/
+//#line 1743 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::
+abort_parse(){
+return abort_parse__;
+}
+/*:310*//*311:*/
+//#line 1753 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_abort_parse(bool Abort){
+abort_parse__= Abort;
+}
+/*:311*//*312:*/
+//#line 1761 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::
+stop_parse(){
+return stop_parse__;
+}
+/*:312*//*313:*/
+//#line 1783 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_stop_parse(bool Stop){
+stop_parse__= Stop;
+}
+
+
+/*:313*//*315:*/
+//#line 1795 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_fsm*
+yacco2::
+Parser::
+fsm_tbl(){
+return fsm_tbl__;
+}
+
+/*:315*//*318:*/
+//#line 1844 "/usr/local/yacco2/library/parser.w"
+
+yacco2::token_container_type*
+yacco2::
+Parser::
+token_supplier(){
+return token_supplier__;
+}
+
+/*:318*//*319:*/
+//#line 1853 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_token_supplier(yacco2::token_container_type&Token_supplier){
+token_supplier__= &Token_supplier;
+}
+
+/*:319*//*320:*/
+//#line 1862 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+add_token_to_supplier(yacco2::CAbs_lr1_sym&Token){
+if(token_supplier__->r_w_cnt__> 1)
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1868 "/usr/local/yacco2/library/parser.w"
+
+token_supplier__->push_back(Token);
+if(token_supplier__->r_w_cnt__> 1)
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1871 "/usr/local/yacco2/library/parser.w"
+
+}
+
+
+/*:320*//*322:*/
+//#line 1879 "/usr/local/yacco2/library/parser.w"
+
+yacco2::token_container_type*
+yacco2::
+Parser::
+token_producer(){
+return token_producer__;
+}
+
+/*:322*//*323:*/
+//#line 1888 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_token_producer(yacco2::token_container_type&Token_producer){
+token_producer__= &Token_producer;
+}
+
+/*:323*//*324:*/
+//#line 1897 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+add_token_to_producer(yacco2::CAbs_lr1_sym&Token){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1902 "/usr/local/yacco2/library/parser.w"
+
+token_producer__->push_back(Token);
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1904 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:324*//*326:*/
+//#line 1914 "/usr/local/yacco2/library/parser.w"
+
+yacco2::token_container_type*
+yacco2::
+Parser::
+recycle_bin(){
+return recycle_bin__;
+}
+
+/*:326*//*327:*/
+//#line 1923 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_recycle_bin(yacco2::token_container_type&Recycle_bin){
+recycle_bin__= &Recycle_bin;
+}
+
+/*:327*//*328:*/
+//#line 1932 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+add_token_to_recycle_bin(yacco2::CAbs_lr1_sym&Token){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1937 "/usr/local/yacco2/library/parser.w"
+
+recycle_bin__->push_back(Token);
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1939 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:328*//*330:*/
+//#line 1956 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+set_error_queue(yacco2::token_container_type&Error_queue){
+error_queue__= &Error_queue;
+}
+
+/*:330*//*331:*/
+//#line 1965 "/usr/local/yacco2/library/parser.w"
+
+yacco2::token_container_type*
+yacco2::
+Parser::
+error_queue(){return error_queue__;}
+
+/*:331*//*332:*/
+//#line 1972 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+add_token_to_error_queue(yacco2::CAbs_lr1_sym&Token){
+/*557:*/
+//#line 167 "/usr/local/yacco2/library/constraints.w"
+
+if(error_queue__==0){
+
+yacco2::KCHARP msg=
+"Error - Trying to add to Parser error_queue__ which is zero ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:557*/
+//#line 1977 "/usr/local/yacco2/library/parser.w"
+
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 1978 "/usr/local/yacco2/library/parser.w"
+
+error_queue__->push_back(Token);
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 1980 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:332*//*334:*/
+//#line 2006 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+put_T_into_accept_queue(yacco2::Caccept_parse&Calling_parm){
+++th_accepting_cnt__;
+if(th_accepting_cnt__<pp_accept_queue_size){
+pp_accept_queue__[th_accepting_cnt__].fill_it(Calling_parm);
+}else{
+abort_accept_queue_irregularites(Calling_parm);
+}
+
+}
+
+
+/*:334*//*336:*/
+//#line 2069 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::Parser::
+get_spec_stack_token(yacco2::UINT Pos){
+if(Pos> MAX_LR_STK_ITEMS)return 0;
+Cparse_record*pr= parse_stack__.sf_by_sub(Pos);
+return pr->symbol__;
+}
+
+/*:336*//*337:*/
+//#line 2130 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+get_next_token(){
+if(token_supplier__==0)return 0;
+if(token_supplier__->empty()==true){
+current_token__= yacco2::PTR_LR1_eog__;
+return current_token__;
+}
+if(current_token_pos__>=token_supplier__->size()){
+current_token__= yacco2::PTR_LR1_eog__;
+return current_token__;
+}
+++current_token_pos__;
+if(current_token_pos__>=token_supplier__->size()){
+current_token__= yacco2::PTR_LR1_eog__;
+return current_token__;
+}
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2150 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()
+<<" get_next_token:: pos to fetch: "<<current_token_pos__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2155 "/usr/local/yacco2/library/parser.w"
+
+}
+
+current_token__= (*token_supplier__)[current_token_pos__];
+
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2161 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()
+<<" get_next_token:: pos: "<<current_token_pos__
+<<" enum: "<<current_token__->enumerated_id__<<' '
+<<'"'<<current_token__->id__<<'"'<<" token fetched*: "
+<<current_token__<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2188 "/usr/local/yacco2/library/parser.w"
+
+}
+Remap_token(current_token__)
+if((YACCO2_T__!=0)&&(sym_lookup_functor__!=0)){
+if(sym_lookup_functor__->lkup__==ON!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2193 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()
+<<" get_next_token:: pos: "<<current_token_pos__
+<<" enum: "<<current_token__->enumerated_id__<<' '
+<<" after remap "
+<<'"'<<current_token__->id__<<'"'<<" token fetched*: "
+<<current_token__<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(current_token__)
+
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2210 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+Remap_set_result_and_return(current_token__)
+}
+
+/*:337*//*338:*/
+//#line 2217 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+get_spec_token(yacco2::UINT Pos){
+/*552:*/
+//#line 101 "/usr/local/yacco2/library/constraints.w"
+
+if(token_supplier__==0){
+
+yacco2::KCHARP msg= "Error - parser's supplier is zero ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:552*/
+//#line 2222 "/usr/local/yacco2/library/parser.w"
+
+/*553:*/
+//#line 110 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos> token_supplier__->size()){
+
+yacco2::KCHARP msg= "Error - Pos out of bounds against supplier";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+
+/*:553*/
+//#line 2223 "/usr/local/yacco2/library/parser.w"
+
+/*339:*/
+//#line 2283 "/usr/local/yacco2/library/parser.w"
+
+if(token_supplier__->empty()==YES)return 0;
+
+
+/*:339*/
+//#line 2224 "/usr/local/yacco2/library/parser.w"
+
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2226 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" get_spec_token pos: "
+<<Pos<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2231 "/usr/local/yacco2/library/parser.w"
+
+}
+CAbs_lr1_sym*token= (*token_supplier__)[Pos];
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2235 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" get_spec_token: returned token "<<token->id__<<" pos: "
+<<Pos
+<<" enum: "<<token->enumerated_id__
+<<'"'<<token->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(token)
+yacco2::lrclog
+<<" GPS LINE: "
+<<token->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<token->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2253 "/usr/local/yacco2/library/parser.w"
+
+}
+Remap_token(token)
+if((YACCO2_T__!=0)&&(sym_lookup_functor__!=0)){
+if(sym_lookup_functor__->lkup__==ON!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2258 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" get_spec_token: returned token "<<token->id__<<" pos: "
+<<Pos
+<<" enum: "<<token->enumerated_id__
+<<" after remap "
+<<'"'<<token->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(token)
+yacco2::lrclog
+<<" GPS LINE: "
+<<token->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<token->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2276 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+Remap_return_result
+}
+
+/*:338*//*342:*/
+//#line 2297 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+cleanup_stack_due_to_abort(){
+yacco2::INT stack_items_to_process= parse_stack__.top_sub__-1;
+if(stack_items_to_process> 0){
+remove_from_stack(stack_items_to_process);
+}
+set_abort_parse(OFF);
+set_stop_parse(OFF);
+}
+
+/*:342*//*343:*/
+//#line 2311 "/usr/local/yacco2/library/parser.w"
+
+yacco2::INT
+yacco2::
+Parser::
+current_stack_pos(){
+return parse_stack__.top_sub__;
+}
+
+/*:343*//*344:*/
+//#line 2320 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lr_stk*
+yacco2::
+Parser::
+parse_stack(){
+return&parse_stack__;
+}
+
+/*:344*//*345:*/
+//#line 2329 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Cparse_record*
+yacco2::
+Parser::
+top_stack_record(){
+if(parse_stack__.top_sub__<1)return 0;
+
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 2336 "/usr/local/yacco2/library/parser.w"
+
+return pr;
+}
+
+/*:345*//*346:*/
+//#line 2343 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Cparse_record*
+yacco2::
+Parser::
+get_stack_record(yacco2::INT Pos){
+/*554:*/
+//#line 125 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos<Token_start_pos){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "Error - Subcript Pos value < %i --- out of bounds";
+sprintf(a,msg,Token_start_pos);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+
+/*:554*/
+//#line 2348 "/usr/local/yacco2/library/parser.w"
+
+if(Pos>=(parse_stack__.top_sub__))return 0;
+return parse_stack__.sf_by_sub(Pos+1);
+}
+
+/*:346*//*347:*/
+//#line 2360 "/usr/local/yacco2/library/parser.w"
+
+yacco2::INT
+yacco2::
+Parser::
+no_items_on_stack(){
+return parse_stack__.top_sub__;
+}
+
+
+/*:347*//*348:*/
+//#line 2370 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+add_to_stack(yacco2::State&State){
+parse_stack__.push_state(State);
+/*581:*/
+//#line 373 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+}
+
+/*:581*/
+//#line 2376 "/usr/local/yacco2/library/parser.w"
+
+}
+/*:348*//*350:*/
+//#line 2395 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+remove_from_stack(yacco2::INT No_to_remove){
+/*555:*/
+//#line 137 "/usr/local/yacco2/library/constraints.w"
+
+if(No_to_remove<0){
+
+yacco2::KCHARP msg= "Error - parse stack number of removal items < 0";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:555*/
+//#line 2400 "/usr/local/yacco2/library/parser.w"
+
+/*556:*/
+//#line 146 "/usr/local/yacco2/library/constraints.w"
+
+if(parse_stack__.top_sub__<1){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"FSM id: %s parse stack empty!";
+sprintf(a,msg,fsm_tbl__->id__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+if(No_to_remove> MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"Error - Underflow FSM id: %s on parse stack size:%i removal request: %i ";
+sprintf(a,msg,fsm_tbl__->id__,MAX_LR_STK_ITEMS,No_to_remove);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:556*/
+//#line 2401 "/usr/local/yacco2/library/parser.w"
+
+/*351:*/
+//#line 2407 "/usr/local/yacco2/library/parser.w"
+
+if(No_to_remove==0){
+/*582:*/
+//#line 379 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 383 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__<<"::epsilon"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 387 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:582*/
+//#line 2409 "/usr/local/yacco2/library/parser.w"
+
+return;
+}
+
+
+/*:351*/
+//#line 2402 "/usr/local/yacco2/library/parser.w"
+
+/*361:*/
+//#line 2509 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr;
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 2511 "/usr/local/yacco2/library/parser.w"
+
+/*579:*/
+//#line 346 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+if(fsm_tbl__->debug__==ON){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 349 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__<<":: Popping items from stack # to pop: "
+<<No_to_remove
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 354 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:579*/
+//#line 2512 "/usr/local/yacco2/library/parser.w"
+
+while(No_to_remove> 0){
+/*583:*/
+//#line 392 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 396 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__;
+yacco2::lrclog
+<<"::"<<fsm_tbl__->id__<<"::popped state:: ";
+yacco2::lrclog
+<<pr->state__->state_no__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 403 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:583*/
+//#line 2514 "/usr/local/yacco2/library/parser.w"
+
+/*356:*/
+//#line 2437 "/usr/local/yacco2/library/parser.w"
+
+/*354:*/
+//#line 2423 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= 0;
+pr->aborted__= 0;
+pr->rule_s_reuse_entry_ptr__= 0;
+/*:354*/
+//#line 2438 "/usr/local/yacco2/library/parser.w"
+
+/*355:*/
+//#line 2428 "/usr/local/yacco2/library/parser.w"
+
+--parse_stack__.top_sub__;
+--parse_stack__.top__;
+
+
+/*:355*/
+//#line 2439 "/usr/local/yacco2/library/parser.w"
+
+/*353:*/
+//#line 2419 "/usr/local/yacco2/library/parser.w"
+
+pr= parse_stack__.top__;
+
+/*:353*/
+//#line 2440 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:356*/
+//#line 2515 "/usr/local/yacco2/library/parser.w"
+
+/*357:*/
+//#line 2452 "/usr/local/yacco2/library/parser.w"
+
+if(pr->symbol__==0){
+/*584:*/
+//#line 410 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 414 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__
+<<"::exposed rule/terminal:: NULL due to invisible shift"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 419 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:584*/
+//#line 2454 "/usr/local/yacco2/library/parser.w"
+
+goto next_stack_element_to_remove;
+}
+
+/*:357*/
+//#line 2516 "/usr/local/yacco2/library/parser.w"
+
+/*585:*/
+//#line 424 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 428 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__
+<<"::exposed rule/terminal:: "<<parse_stack__.top__->symbol__->id__
+<<' '<<parse_stack__.top__->symbol__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 434 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:585*/
+//#line 2517 "/usr/local/yacco2/library/parser.w"
+
+/*358:*/
+//#line 2465 "/usr/local/yacco2/library/parser.w"
+
+if(pr->rule_s_reuse_entry_ptr__!=0){
+fsm_tbl__->recycle_rule(pr->rule_s_reuse_entry_ptr__);
+pr->rule_s_reuse_entry_ptr__= 0;
+}
+else{
+if(pr->symbol__->auto_delete__==ON){
+/*586:*/
+//#line 441 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(parse_stack__.top__->symbol__->auto_delete__==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 446 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::AD deleting exposed rule/terminal:: "
+<<parse_stack__.top__->symbol__->id__<<' '
+<<parse_stack__.top__->symbol__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 453 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:586*/
+//#line 2472 "/usr/local/yacco2/library/parser.w"
+
+if(pr->symbol__->dtor__!=0)
+(*pr->symbol__->dtor__)(pr->symbol__,this);
+delete pr->symbol__;
+pr->symbol__= 0;
+goto next_stack_element_to_remove;
+}
+}
+/*:358*/
+//#line 2518 "/usr/local/yacco2/library/parser.w"
+
+
+/*359:*/
+//#line 2482 "/usr/local/yacco2/library/parser.w"
+
+if(pr->aborted__==0)goto next_stack_element_to_remove;
+
+/*:359*/
+//#line 2520 "/usr/local/yacco2/library/parser.w"
+
+
+/*587:*/
+//#line 464 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+if(parse_stack__.top__->symbol__->affected_by_abort__==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 469 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__
+<<"::AB deleting exposed rule/terminal:: "
+<<parse_stack__.top__->symbol__->id__<<' '
+<<parse_stack__.top__->symbol__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 476 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:587*/
+//#line 2522 "/usr/local/yacco2/library/parser.w"
+
+/*360:*/
+//#line 2488 "/usr/local/yacco2/library/parser.w"
+
+if(pr->rule_s_reuse_entry_ptr__!=0){
+fsm_tbl__->recycle_rule(pr->rule_s_reuse_entry_ptr__);
+pr->rule_s_reuse_entry_ptr__= 0;
+}else{
+if(pr->symbol__->affected_by_abort__==OFF)goto next_stack_element_to_remove;
+if(pr->symbol__->dtor__!=0)
+(*pr->symbol__->dtor__)(pr->symbol__,this);
+delete pr->symbol__;
+}
+
+/*:360*/
+//#line 2523 "/usr/local/yacco2/library/parser.w"
+
+/*354:*/
+//#line 2423 "/usr/local/yacco2/library/parser.w"
+
+pr->symbol__= 0;
+pr->aborted__= 0;
+pr->rule_s_reuse_entry_ptr__= 0;
+/*:354*/
+//#line 2524 "/usr/local/yacco2/library/parser.w"
+
+next_stack_element_to_remove:
+--No_to_remove;
+}
+/*580:*/
+//#line 359 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+if(fsm_tbl__->debug__==ON){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 362 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__
+<<"::"<<fsm_tbl__->id__<<":: Finished Popping items from stack"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 366 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+
+/*:580*/
+//#line 2528 "/usr/local/yacco2/library/parser.w"
+
+
+/*:361*/
+//#line 2403 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:350*//*362:*/
+//#line 2531 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+clear_parse_stack(){
+yacco2::INT s= parse_stack__.top_sub__-1;
+if(s> 0)remove_from_stack(s);
+if(s==0){
+/*352:*/
+//#line 2415 "/usr/local/yacco2/library/parser.w"
+
+Cparse_record*pr= parse_stack__.top__;
+
+/*:352*/
+//#line 2539 "/usr/local/yacco2/library/parser.w"
+
+if(pr->rule_s_reuse_entry_ptr__!=0){
+pr->rule_s_reuse_entry_ptr__= 0;
+}
+}
+}
+
+/*:362*//*364:*/
+//#line 2552 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_lr1_sym*
+yacco2::
+Parser::
+current_token(){
+Remap_token(current_token__)
+Remap_set_result_and_return(current_token__)
+}
+
+/*:364*//*365:*/
+//#line 2565 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+reset_current_token(yacco2::UINT Pos){
+/*552:*/
+//#line 101 "/usr/local/yacco2/library/constraints.w"
+
+if(token_supplier__==0){
+
+yacco2::KCHARP msg= "Error - parser's supplier is zero ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:552*/
+//#line 2570 "/usr/local/yacco2/library/parser.w"
+
+/*553:*/
+//#line 110 "/usr/local/yacco2/library/constraints.w"
+
+if(Pos> token_supplier__->size()){
+
+yacco2::KCHARP msg= "Error - Pos out of bounds against supplier";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+
+/*:553*/
+//#line 2571 "/usr/local/yacco2/library/parser.w"
+
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2573 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" reset_current_token pos: "
+<<Pos<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2578 "/usr/local/yacco2/library/parser.w"
+
+}
+current_token_pos__= Pos;
+current_token__= (*token_supplier__)[Pos];
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2583 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<"YACCO2_T__::"
+<<thread_no__<<"::"<<thread_name()<<"::"
+<<" reset_current_token: token to: "<<current_token__->id__<<" pos: "
+<<current_token_pos__
+<<" enum: "<<current_token__->enumerated_id__
+<<'"'<<current_token__->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2600 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+
+/*:365*//*366:*/
+//#line 2605 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+override_current_token
+(yacco2::CAbs_lr1_sym&Token
+,yacco2::UINT Pos){
+current_token_pos__= Pos;
+current_token__= &Token;
+}
+
+/*:366*//*367:*/
+//#line 2617 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+override_current_token_pos(yacco2::UINT Pos){
+current_token_pos__= Pos;
+}
+
+/*:367*//*368:*/
+//#line 2626 "/usr/local/yacco2/library/parser.w"
+
+yacco2::UINT
+yacco2::
+Parser::
+current_token_pos(){
+return current_token_pos__;
+}
+
+/*:368*//*369:*/
+//#line 2635 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+get_shift_s_next_token(){
+get_next_token();
+}
+
+/*:369*//*371:*/
+//#line 2646 "/usr/local/yacco2/library/parser.w"
+
+yacco2::KCHARP
+yacco2::
+Parser::
+thread_name(){
+return thread_name__;
+}
+
+/*:371*//*372:*/
+//#line 2658 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Thread_entry*
+yacco2::
+Parser::
+thread_entry(){
+return thread_entry__;
+}
+
+/*:372*//*375:*/
+//#line 2740 "/usr/local/yacco2/library/parser.w"
+
+yacco2::THR_result
+Parser::start_procedure_call(yacco2::State&S){
+th_active_cnt__= 1;
+no_requested_ths_to_run__= 1;
+/*614:*/
+//#line 981 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 983 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" calling PROC::"
+
+<<" --> before procedure call"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 989 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:614*/
+//#line 2745 "/usr/local/yacco2/library/parser.w"
+
+THR_result rslt= (*S.proc_call_addr__)(this);
+/*615:*/
+//#line 993 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 995 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()
+<<" returned from PROC::"
+
+<<" result: "<<rslt
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1002 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:615*/
+//#line 2747 "/usr/local/yacco2/library/parser.w"
+
+return rslt;
+}
+
+/*:375*//*376:*/
+//#line 2754 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::
+spawn_thread_manually(yacco2::USINT Thread_id){
+yacco2::thread_array_record*thd_stable= (yacco2::thread_array_record*)THDS_STABLE__;
+Thread_entry**thd_tbl= (Thread_entry**)&thd_stable->first_entry__;
+int no_thds= thd_stable->no_entries__-1;
+if((Thread_id> no_thds)){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg=
+"spawn_thread_manually thread id: %i out of bounds 0 to %i: no thread available";
+sprintf(a,msg,Thread_id,no_thds);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+th_lst__.clear();
+Thread_entry*pe= thd_tbl[Thread_id];
+th_lst__.push_back(pe);
+return start_threads();
+}
+
+/*:376*//*385:*/
+//#line 2996 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::start_threads(){
+/*610:*/
+//#line 923 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 925 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__<<"::"<<fsm_tbl__->id__
+<<" --> start threads"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 929 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:610*/
+//#line 3000 "/usr/local/yacco2/library/parser.w"
+
+/*384:*/
+//#line 2945 "/usr/local/yacco2/library/parser.w"
+
+th_active_cnt__= th_lst__.size();
+no_requested_ths_to_run__= th_active_cnt__;
+yacco2_threads_to_run_iter_type i= th_lst__.begin();
+yacco2_threads_to_run_iter_type ie= th_lst__.end();
+USINT new_r_w_cnt= supplier_r_w_cnt__+no_requested_ths_to_run__-1;
+if(new_r_w_cnt> 1){
+if(supplier_r_w_cnt__==1){
+if(token_supplier__!=0){token_supplier__->r_w_cnt__= new_r_w_cnt;}
+}else{
+if(token_supplier__!=0){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 2956 "/usr/local/yacco2/library/parser.w"
+
+token_supplier__->r_w_cnt__= new_r_w_cnt;
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 2958 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+}
+Thread_entry*pe= *i;
+/*380:*/
+//#line 2829 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2831 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to acquire thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2833 "/usr/local/yacco2/library/parser.w"
+
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2837 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Acquired thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2839 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:380*/
+//#line 2963 "/usr/local/yacco2/library/parser.w"
+
+#ifndef VMS111__
+if(no_requested_ths_to_run__> 1)goto thread_call;
+procedure_call:{
+if(Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__==true){
+/*623:*/
+//#line 1134 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1136 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()
+<<" PROC CALL ALREADY IN USE so call its thread "
+<<" Caller parser::"<<pp_requesting_parallelism__->thread_no__
+<<"::"<<pp_requesting_parallelism__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1143 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:623*/
+//#line 2968 "/usr/local/yacco2/library/parser.w"
+
+goto thread_call;
+}
+Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__= true;
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 2972 "/usr/local/yacco2/library/parser.w"
+
+/*614:*/
+//#line 981 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 983 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" calling PROC::"
+
+<<" --> before procedure call"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 989 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:614*/
+//#line 2973 "/usr/local/yacco2/library/parser.w"
+
+THR_result rslt= (*pe->proc_thread_fnct_ptr__)(this);
+/*380:*/
+//#line 2829 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2831 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to acquire thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2833 "/usr/local/yacco2/library/parser.w"
+
+}
+LOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2837 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Acquired thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2839 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:380*/
+//#line 2975 "/usr/local/yacco2/library/parser.w"
+
+Parallel_thread_proc_call_table[pe->thd_id__].proc_call_in_use__= false;
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 2977 "/usr/local/yacco2/library/parser.w"
+
+/*615:*/
+//#line 993 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 995 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()
+<<" returned from PROC::"
+
+<<" result: "<<rslt
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1002 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:615*/
+//#line 2978 "/usr/local/yacco2/library/parser.w"
+
+return CALLED_AS_PROC;
+}
+#endif
+thread_call:{
+for(;i!=ie;++i){
+pe= *i;
+/*620:*/
+//#line 1090 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1092 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<"pe*: "<<pe
+<<" thread name: "<<pe->thread_fnct_name__
+<<" thread proc*: "<<pe->thread_fnct_ptr__
+<<" thread id: "<<pe->thd_id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1099 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:620*/
+//#line 2985 "/usr/local/yacco2/library/parser.w"
+
+/*382:*/
+//#line 2861 "/usr/local/yacco2/library/parser.w"
+
+int thread_disposition(0);
+Parallel_thread_list_type&i= Parallel_thread_table[pe->thd_id__];
+Parallel_thread_list_iterator_type j;
+Parallel_thread_list_iterator_type je;
+worker_thread_blk*tb;
+if(i.empty()==true){
+thread_disposition= NO_THREAD_AT_ALL;
+goto dispatch_disposition;
+}
+j= i.begin();
+je= i.end();
+for(;j!=je;++j){
+tb= *j;
+/*619:*/
+//#line 1068 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1070 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"
+<<tb->grammar_s_parser__->thread_no__
+<<"::"<<tb->grammar_s_parser__->thread_name()
+<<" th_blk*: "<<this
+<<" th_blk*: "<<tb
+<<" grammar parser: "<<tb->grammar_s_parser__
+<<" #: "<<tb->thd_id__
+<<" st: "<<tb->status__
+<<" thds in launched list "
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"------->"
+<<tb->grammar_s_parser__->thread_no__
+<<"::"<<tb->grammar_s_parser__->fsm_tbl__->id__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1086 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:619*/
+//#line 2875 "/usr/local/yacco2/library/parser.w"
+
+if(tb->status__==THREAD_WAITING_FOR_WORK){
+thread_disposition= THREAD_WAITING_FOR_WORK;
+goto dispatch_disposition;
+}
+}
+thread_disposition= ALL_THREADS_BUSY;
+goto dispatch_disposition;
+
+/*:382*/
+//#line 2986 "/usr/local/yacco2/library/parser.w"
+
+dispatch_disposition:
+/*383:*/
+//#line 2892 "/usr/local/yacco2/library/parser.w"
+
+switch(thread_disposition){
+case THREAD_WAITING_FOR_WORK:{
+LOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+,*tb->grammar_s_parser__," of self");
+tb->status__= THREAD_WORKING;
+++tb->run_cnt__;
+tb->grammar_s_parser__->pp_requesting_parallelism__= this;
+tb->grammar_s_parser__->no_competing_pp_ths__= this->no_requested_ths_to_run__;
+tb->grammar_s_parser__->from_thread__= this;
+/*611:*/
+//#line 940 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 942 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::--> parallel thread worker fnd in thread table CALL WORKER: "
+<<tb->grammar_s_parser__->thread_name()
+<<" thread obj*:"<<tb->grammar_s_parser__
+<<" parm*: "<<tb->grammar_s_parser__->pp_requesting_parallelism__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 949 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:611*/
+//#line 2902 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX_OF_CALLED_PARSER(tb->grammar_s_parser__->mu__
+,*tb->grammar_s_parser__," of self");
+SIGNAL_COND_VAR(*tb->grammar_s_parser__,*this);
+break;
+}
+case NO_THREAD_AT_ALL:{
+/*613:*/
+//#line 970 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 972 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<pe->thread_fnct_name__
+<<" --> parallel thread NOT fnd in thread table"
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 977 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:613*/
+//#line 2909 "/usr/local/yacco2/library/parser.w"
+
+THR_result result= CREATE_THREAD(pe->thread_fnct_ptr__,*this);
+break;
+}
+case ALL_THREADS_BUSY:{
+/*612:*/
+//#line 959 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 961 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<pe->thread_fnct_name__
+<<" --> parallel thread fnd in thread table BUT ALL ARE BUSY "
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 966 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:612*/
+//#line 2914 "/usr/local/yacco2/library/parser.w"
+
+yacco2::THR_result result= CREATE_THREAD(pe->thread_fnct_ptr__,*this);
+break;
+}
+}
+
+
+/*:383*/
+//#line 2988 "/usr/local/yacco2/library/parser.w"
+
+/*591:*/
+//#line 560 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 564 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<"requestor of parallelism* : "
+<<" pp id: "<<thread_no__<<"::"
+<<thread_name()<<" parallel PP started: "<<pe->thread_fnct_name__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 569 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:591*/
+//#line 2989 "/usr/local/yacco2/library/parser.w"
+
+}
+}
+/*381:*/
+//#line 2843 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2845 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Attempting to release thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2847 "/usr/local/yacco2/library/parser.w"
+
+}
+UNLOCK_MUTEX(yacco2::TH_TBL_MU);
+if(yacco2::YACCO2_MU_TH_TBL__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 2851 "/usr/local/yacco2/library/parser.w"
+
+yacco2::lrclog<<" --> Released thread table Mutex"<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 2853 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:381*/
+//#line 2992 "/usr/local/yacco2/library/parser.w"
+
+return CALLED_AS_THREAD;
+
+/*:384*/
+//#line 3001 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:385*//*386:*/
+//#line 3017 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+call_arbitrator(yacco2::Type_pp_fnct_ptr The_judge){
+if(th_accepting_cnt__==1){
+arbitrated_token__= &pp_accept_queue__[1];
+pp_accept_queue_idx__= 1;
+return;
+}
+(*The_judge)(this);
+}
+/*:386*//*393:*/
+//#line 3076 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+wait_for_event(){
+/*601:*/
+//#line 819 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 821 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" -->WAIT_FOR_EVENT "
+<<" # threads to run:: "<<no_requested_ths_to_run__
+<<" # active threads: "<<th_active_cnt__
+<<" # competing threads: "<<no_competing_pp_ths__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 828 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:601*/
+//#line 3081 "/usr/local/yacco2/library/parser.w"
+
+#if THREAD_LIBRARY_TO_USE__ == 1
+/*394:*/
+//#line 3104 "/usr/local/yacco2/library/parser.w"
+
+COND_WAIT(cv__,mu__,*this);
+cv_cond__= WAIT_FOR_EVENT;
+
+/*:394*/
+//#line 3083 "/usr/local/yacco2/library/parser.w"
+
+#else
+/*394:*/
+//#line 3104 "/usr/local/yacco2/library/parser.w"
+
+COND_WAIT(cv__,mu__,*this);
+cv_cond__= WAIT_FOR_EVENT;
+
+/*:394*/
+//#line 3085 "/usr/local/yacco2/library/parser.w"
+
+#endif
+/*602:*/
+//#line 834 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 836 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<thread_no__
+<<"::"<<thread_name()<<" MESSAGE RECEIVED from "
+<<from_thread__->thread_no__
+<<"::"<<from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 842 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:602*/
+//#line 3087 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:393*//*396:*/
+//#line 3146 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+post_event_to_requesting_grammar
+(yacco2::Parser&To_thread
+,yacco2::INT Message_id
+,yacco2::Parser&From_thread){
+/*603:*/
+//#line 846 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 848 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<From_thread.thread_no__<<"::"
+<<From_thread.thread_name()
+<<" -----> Posting message to: "
+<<To_thread.thread_no__<<"::"<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 854 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:603*/
+//#line 3154 "/usr/local/yacco2/library/parser.w"
+
+/*398:*/
+//#line 3167 "/usr/local/yacco2/library/parser.w"
+
+To_thread.from_thread__= &From_thread;
+To_thread.msg_id__= Message_id;
+
+
+/*:398*/
+//#line 3155 "/usr/local/yacco2/library/parser.w"
+
+/*397:*/
+//#line 3161 "/usr/local/yacco2/library/parser.w"
+
+/*604:*/
+//#line 858 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 860 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<From_thread.thread_no__<<"::"
+<<From_thread.thread_name()
+<<" -----> before SIGNAL_COND_VAR() to signal wakeup grammar for: "
+<<To_thread.thread_no__<<"::"<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 866 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:604*/
+//#line 3162 "/usr/local/yacco2/library/parser.w"
+
+SIGNAL_COND_VAR(To_thread,*this);
+/*605:*/
+//#line 870 "/usr/local/yacco2/library/macros.w"
+
+if(yacco2::YACCO2_MSG__){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 872 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_MSG__::"<<From_thread.thread_no__<<"::"
+<<From_thread.thread_name()
+<<" -----> after SIGNAL_COND_VAR() to waken grammar of "
+<<To_thread.thread_no__<<"::"
+<<To_thread.thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 879 "/usr/local/yacco2/library/macros.w"
+
+}
+
+/*:605*/
+//#line 3164 "/usr/local/yacco2/library/parser.w"
+
+
+/*:397*/
+//#line 3156 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:396*//*399:*/
+//#line 3184 "/usr/local/yacco2/library/parser.w"
+
+bool
+yacco2::
+Parser::
+have_all_threads_reported_back(){
+if(pp_requesting_parallelism__->th_active_cnt__==0)return YES;
+return NO;
+}
+
+/*:399*//*401:*/
+//#line 3198 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+abort_accept_queue_irregularites
+(yacco2::Caccept_parse&Calling_parm){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 3204 "/usr/local/yacco2/library/parser.w"
+
+char a[BUFFER_SIZE];
+int i= 1;
+int ie= th_accepting_cnt__;
+KCHARP grammar_having_logic_bug=
+"abort_accept_queue_irregularites "
+"- Overflow on accept queue Grammar name: %s in parse state: %i";
+sprintf(a,grammar_having_logic_bug,fsm_tbl__->id__,top_stack_record()->state__->state_no__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+
+yacco2::lrclog<<" List of launched threads"<<__FILE__<<__LINE__<<std::endl;
+KCHARP thread_in_launched_list= " - %s";
+yacco2_threads_to_run_iter_type ii= th_lst__.begin();
+yacco2_threads_to_run_iter_type iie= th_lst__.end();
+for(;ii!=iie;++ii){
+Thread_entry*pe= *ii;
+sprintf(a,thread_in_launched_list,pe->thread_fnct_name__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+}
+
+yacco2::lrclog<<" List of potential accept parse Tes"<<__FILE__<<__LINE__<<std::endl;
+KCHARP no_of_accept_tokens_in_queue= " no of accept tokens in queue: %i";
+sprintf(a,no_of_accept_tokens_in_queue,th_accepting_cnt__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+
+KCHARP accept_queue_tokens= " - id: %s, token position: %i";
+for(;i<=ie;++i){
+sprintf(a,accept_queue_tokens
+,pp_accept_queue__[i].accept_token__->id__
+,pp_accept_queue__[i].accept_token_pos__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+}
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 3236 "/usr/local/yacco2/library/parser.w"
+
+
+KCHARP msg=
+"Overflow on Accept queue no of items: %i not eq to thread accepting cnt: %i\n"
+"This means more than 1 thread adding same accept token into queue?";
+sprintf(a,msg,th_accepting_cnt__+1,th_accepting_cnt__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+/*:401*//*402:*/
+//#line 3249 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+abort_no_selected_accept_parse_in_arbitrator(){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 3254 "/usr/local/yacco2/library/parser.w"
+
+char a[BUFFER_SIZE];
+int i= 1;
+int ie= th_accepting_cnt__;
+KCHARP grammar_having_logic_bug=
+"abort_no_selected_accept_parse_in_arbitrator "
+"- No selected accept T Grammar name: %s in parse state: %i";
+sprintf(a,grammar_having_logic_bug,fsm_tbl__->id__,top_stack_record()->state__->state_no__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+
+yacco2::lrclog<<" List of launched threads"<<__FILE__<<__LINE__<<std::endl;
+KCHARP thread_in_launched_list= " - %s";
+yacco2_threads_to_run_iter_type ii= th_lst__.begin();
+yacco2_threads_to_run_iter_type iie= th_lst__.end();
+for(;ii!=iie;++ii){
+Thread_entry*pe= *ii;
+sprintf(a,thread_in_launched_list,pe->thread_fnct_name__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+}
+
+yacco2::lrclog<<" List of potential accept parse Tes"<<__FILE__<<__LINE__<<std::endl;
+KCHARP no_of_accept_tokens_in_queue= " no of accept tokens in queue: %i";
+sprintf(a,no_of_accept_tokens_in_queue,th_accepting_cnt__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+
+KCHARP accept_queue_tokens= " - id: %s, token position: %i";
+for(;i<=ie;++i){
+sprintf(a,accept_queue_tokens
+,pp_accept_queue__[i].accept_token__->id__
+,pp_accept_queue__[i].accept_token_pos__);
+yacco2::lrclog<<a<<FILE_LINE<<std::endl;
+}
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 3286 "/usr/local/yacco2/library/parser.w"
+
+
+KCHARP msg=
+"No selected accept parse T no of items: %i \n";
+sprintf(a,msg,th_accepting_cnt__);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+
+
+/*:402*//*414:*/
+//#line 3366 "/usr/local/yacco2/library/parser.w"
+
+void
+yacco2::
+Parser::
+clean_up(){
+if(th_accepting_cnt__> 1){
+for(int x= 1;x<=th_accepting_cnt__;++x){
+if(x==pp_accept_queue_idx__)continue;
+if(pp_accept_queue__[x].accept_token__->auto_delete()==YES){
+delete pp_accept_queue__[x].accept_token__;
+}
+pp_accept_queue__[x].initialize_it();
+}
+}
+th_active_cnt__= 0;
+th_accepting_cnt__= 0;
+pp_accept_queue_idx__= 0;
+}
+
+/*:414*//*418:*/
+//#line 3411 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+THR_result
+yacco2::
+Parser::
+chained_proc_call_parsing(yacco2::State&S){
+THR_result result= start_procedure_call(S);
+/*594:*/
+//#line 636 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+if(no_requested_ths_to_run__> 1){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 641 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__<<"::"
+<<"parallel parsing received message from id:"
+<<from_thread__->thread_no__<<"::"
+<<from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 648 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:594*/
+//#line 3418 "/usr/local/yacco2/library/parser.w"
+
+/*416:*/
+//#line 3399 "/usr/local/yacco2/library/parser.w"
+
+if(result==th_accepting_cnt__!=0)goto proc_call_successful;
+else goto proc_call_unsuccessful;
+
+/*:416*/
+//#line 3419 "/usr/local/yacco2/library/parser.w"
+
+proc_call_successful:
+{
+/*417:*/
+//#line 3404 "/usr/local/yacco2/library/parser.w"
+
+top_stack_record()->set_symbol(NS_yacco2_k_symbols::PTR_LR1_fset_transience_operator__);
+State*Goto_state= S.proc_call_shift__->goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 3407 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:417*/
+//#line 3422 "/usr/local/yacco2/library/parser.w"
+
+/*411:*/
+//#line 3344 "/usr/local/yacco2/library/parser.w"
+
+override_current_token(*arbitrated_token__->accept_token__
+,arbitrated_token__->accept_token_pos__);
+
+/*:411*/
+//#line 3423 "/usr/local/yacco2/library/parser.w"
+
+/*592:*/
+//#line 574 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 578 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED token POS: "
+<<arbitrated_token__->accept_token_pos__
+<<" token*: "<<arbitrated_token__->accept_token__<<" token: "
+<<arbitrated_token__->accept_token__->id__<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->accept_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED la token POS: "
+<<arbitrated_token__->la_token_pos__<<" la token: "
+<<arbitrated_token__->la_token__->id__<<std::endl;
+yacco2::lrclog<<"\t"<<thread_no__
+<<"::GPS LA FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->la_token__)
+yacco2::lrclog
+<<" GPS LA LINE: "
+<<arbitrated_token__->la_token__->tok_co_ords__.line_no__
+<<" GPS LA CHR POS: "
+<<arbitrated_token__->la_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 606 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+
+/*:592*/
+//#line 3424 "/usr/local/yacco2/library/parser.w"
+
+proc_call_shift(*arbitrated_token__->accept_token__);
+/*410:*/
+//#line 3340 "/usr/local/yacco2/library/parser.w"
+
+override_current_token(*arbitrated_token__->la_token__,arbitrated_token__->la_token_pos__);
+
+/*:410*/
+//#line 3426 "/usr/local/yacco2/library/parser.w"
+
+/*593:*/
+//#line 612 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 616 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::|||re-aligned token stream la boundry POS: "
+<<current_token_pos__<<" la token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RE-ALIGN FILE: ";
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS RE-ALIGN LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS RE-ALIGN CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 631 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:593*/
+//#line 3427 "/usr/local/yacco2/library/parser.w"
+
+/*408:*/
+//#line 3331 "/usr/local/yacco2/library/parser.w"
+
+arbitrated_token__->accept_token__= 0;
+
+/*:408*/
+//#line 3428 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::paralleled;
+}
+proc_call_unsuccessful:
+/*405:*/
+//#line 3299 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::erred;
+
+/*:405*/
+//#line 3433 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:418*//*421:*/
+//#line 3450 "/usr/local/yacco2/library/parser.w"
+
+yacco2::
+Parser::parse_result
+yacco2::
+Parser::
+start_parallel_parsing(yacco2::State&S){
+yacco2::State*Goto_state;
+/*412:*/
+//#line 3349 "/usr/local/yacco2/library/parser.w"
+
+yacco2::USINT id_of_T= current_token__->enumerated_id__;
+
+
+/*:412*/
+//#line 3457 "/usr/local/yacco2/library/parser.w"
+
+/*378:*/
+//#line 2820 "/usr/local/yacco2/library/parser.w"
+
+th_lst__.clear();
+find_threads_by_first_set(id_of_T,th_lst__,*S.state_s_thread_tbl__);
+
+/*:378*/
+//#line 3458 "/usr/local/yacco2/library/parser.w"
+
+/*379:*/
+//#line 2825 "/usr/local/yacco2/library/parser.w"
+
+if(th_lst__.empty()==YES)return Parser::no_thds_to_run;
+
+/*:379*/
+//#line 3459 "/usr/local/yacco2/library/parser.w"
+
+/*413:*/
+//#line 3354 "/usr/local/yacco2/library/parser.w"
+
+bool how_thread_called= start_threads();
+
+/*:413*/
+//#line 3460 "/usr/local/yacco2/library/parser.w"
+
+wait_for_response:
+/*407:*/
+//#line 3321 "/usr/local/yacco2/library/parser.w"
+
+if(how_thread_called==CALLED_AS_THREAD){
+wait_for_event();
+}
+
+/*:407*/
+//#line 3462 "/usr/local/yacco2/library/parser.w"
+
+/*594:*/
+//#line 636 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+if(no_requested_ths_to_run__> 1){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 641 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__<<"::"
+<<"parallel parsing received message from id:"
+<<from_thread__->thread_no__<<"::"
+<<from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 648 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:594*/
+//#line 3463 "/usr/local/yacco2/library/parser.w"
+
+/*409:*/
+//#line 3335 "/usr/local/yacco2/library/parser.w"
+
+if(th_accepting_cnt__!=0)goto parallelism_successful;
+else goto parallelism_unsuccessful;
+
+/*:409*/
+//#line 3464 "/usr/local/yacco2/library/parser.w"
+
+parallelism_successful:
+/*420:*/
+//#line 3443 "/usr/local/yacco2/library/parser.w"
+
+top_stack_record()->set_symbol(NS_yacco2_k_symbols::PTR_LR1_parallel_operator__);
+Goto_state= S.parallel_shift__->goto__;
+/*349:*/
+//#line 2379 "/usr/local/yacco2/library/parser.w"
+
+/*132:*/
+//#line 226 "/usr/local/yacco2/library/parse_env.w"
+
+if(parse_stack__.top_sub__>=MAX_LR_STK_ITEMS){
+char a[BUFFER_SIZE];
+
+yacco2::KCHARP msg= "lr_stk - push overflow stack max: %i";
+sprintf(a,msg,MAX_LR_STK_ITEMS);
+Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+exit(1);
+}
+++parse_stack__.top__;
+++parse_stack__.top_sub__;
+parse_stack__.top__->state__= Goto_state;
+parse_stack__.top__->symbol__= 0;
+parse_stack__.top__->aborted__= 0;
+parse_stack__.top__->rule_s_reuse_entry_ptr__= 0;
+
+/*:132*/
+//#line 2380 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:349*/
+//#line 3446 "/usr/local/yacco2/library/parser.w"
+
+
+
+/*:420*/
+//#line 3466 "/usr/local/yacco2/library/parser.w"
+
+if(S.state_s_thread_tbl__->ar_fnct_ptr__==0){
+arbitrated_token__= &pp_accept_queue__[1];
+pp_accept_queue_idx__= 1;
+}else{
+call_arbitrator(S.state_s_thread_tbl__->ar_fnct_ptr__);
+}
+
+/*411:*/
+//#line 3344 "/usr/local/yacco2/library/parser.w"
+
+override_current_token(*arbitrated_token__->accept_token__
+,arbitrated_token__->accept_token_pos__);
+
+/*:411*/
+//#line 3474 "/usr/local/yacco2/library/parser.w"
+
+/*592:*/
+//#line 574 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 578 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED token POS: "
+<<arbitrated_token__->accept_token_pos__
+<<" token*: "<<arbitrated_token__->accept_token__<<" token: "
+<<arbitrated_token__->accept_token__->id__<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->accept_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED la token POS: "
+<<arbitrated_token__->la_token_pos__<<" la token: "
+<<arbitrated_token__->la_token__->id__<<std::endl;
+yacco2::lrclog<<"\t"<<thread_no__
+<<"::GPS LA FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->la_token__)
+yacco2::lrclog
+<<" GPS LA LINE: "
+<<arbitrated_token__->la_token__->tok_co_ords__.line_no__
+<<" GPS LA CHR POS: "
+<<arbitrated_token__->la_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 606 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+
+/*:592*/
+//#line 3475 "/usr/local/yacco2/library/parser.w"
+
+parallel_shift(*arbitrated_token__->accept_token__);
+/*410:*/
+//#line 3340 "/usr/local/yacco2/library/parser.w"
+
+override_current_token(*arbitrated_token__->la_token__,arbitrated_token__->la_token_pos__);
+
+/*:410*/
+//#line 3477 "/usr/local/yacco2/library/parser.w"
+
+/*593:*/
+//#line 612 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 616 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::|||re-aligned token stream la boundry POS: "
+<<current_token_pos__<<" la token: "
+<<current_token__->id__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS RE-ALIGN FILE: ";
+EXTERNAL_GPSing(current_token__)
+yacco2::lrclog
+<<" GPS RE-ALIGN LINE: "
+<<current_token__->tok_co_ords__.line_no__
+<<" GPS RE-ALIGN CHR POS: "
+<<current_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 631 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+/*:593*/
+//#line 3478 "/usr/local/yacco2/library/parser.w"
+
+/*408:*/
+//#line 3331 "/usr/local/yacco2/library/parser.w"
+
+arbitrated_token__->accept_token__= 0;
+
+/*:408*/
+//#line 3479 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::paralleled;
+parallelism_unsuccessful:
+/*405:*/
+//#line 3299 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::erred;
+
+/*:405*/
+//#line 3483 "/usr/local/yacco2/library/parser.w"
+
+}
+
+/*:421*//*422:*/
+//#line 3500 "/usr/local/yacco2/library/parser.w"
+
+Parser::parse_result
+yacco2::
+Parser::
+start_manually_parallel_parsing
+(yacco2::USINT Thread_id){
+bool how_thread_called= spawn_thread_manually(Thread_id);
+/*407:*/
+//#line 3321 "/usr/local/yacco2/library/parser.w"
+
+if(how_thread_called==CALLED_AS_THREAD){
+wait_for_event();
+}
+
+/*:407*/
+//#line 3507 "/usr/local/yacco2/library/parser.w"
+
+
+/*594:*/
+//#line 636 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+if(no_requested_ths_to_run__> 1){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 641 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"YACCO2_TH__::"<<thread_no__<<"::"
+<<fsm_tbl__->id__<<"::"
+<<"parallel parsing received message from id:"
+<<from_thread__->thread_no__<<"::"
+<<from_thread__->thread_name()
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 648 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+}
+
+/*:594*/
+//#line 3509 "/usr/local/yacco2/library/parser.w"
+
+/*409:*/
+//#line 3335 "/usr/local/yacco2/library/parser.w"
+
+if(th_accepting_cnt__!=0)goto parallelism_successful;
+else goto parallelism_unsuccessful;
+
+/*:409*/
+//#line 3510 "/usr/local/yacco2/library/parser.w"
+
+parallelism_successful:{
+if(yacco2::PTR_AR_for_manual_thread_spawning==0){
+arbitrated_token__= &pp_accept_queue__[1];
+pp_accept_queue_idx__= 1;
+}else{
+call_arbitrator(yacco2::PTR_AR_for_manual_thread_spawning);
+}
+
+/*592:*/
+//#line 574 "/usr/local/yacco2/library/macros.w"
+
+if(YACCO2_TH__){
+bool to_trace_or_not_to= trace_parser_env(this,COND_STK_TRACE);
+if(to_trace_or_not_to==YES){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 578 "/usr/local/yacco2/library/macros.w"
+
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED token POS: "
+<<arbitrated_token__->accept_token_pos__
+<<" token*: "<<arbitrated_token__->accept_token__<<" token: "
+<<arbitrated_token__->accept_token__->id__<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::GPS FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->accept_token__)
+yacco2::lrclog
+<<" GPS LINE: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<arbitrated_token__->accept_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+yacco2::lrclog<<"\tYACCO2_TH__::"<<thread_no__
+<<"::||||||||||ACCEPTED la token POS: "
+<<arbitrated_token__->la_token_pos__<<" la token: "
+<<arbitrated_token__->la_token__->id__<<std::endl;
+yacco2::lrclog<<"\t"<<thread_no__
+<<"::GPS LA FILE: ";
+EXTERNAL_GPSing(arbitrated_token__->la_token__)
+yacco2::lrclog
+<<" GPS LA LINE: "
+<<arbitrated_token__->la_token__->tok_co_ords__.line_no__
+<<" GPS LA CHR POS: "
+<<arbitrated_token__->la_token__->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 606 "/usr/local/yacco2/library/macros.w"
+
+}
+}
+
+
+/*:592*/
+//#line 3519 "/usr/local/yacco2/library/parser.w"
+
+/*406:*/
+//#line 3316 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::paralleled;
+
+/*:406*/
+//#line 3520 "/usr/local/yacco2/library/parser.w"
+
+}
+parallelism_unsuccessful:
+/*405:*/
+//#line 3299 "/usr/local/yacco2/library/parser.w"
+
+clean_up();
+return Parser::erred;
+
+/*:405*/
+//#line 3523 "/usr/local/yacco2/library/parser.w"
+
+}
+
+//#line 1 "/usr/local/yacco2/library/runtime_env.w"
+
+
+
+
+
+
+
+/*:422*//*428:*/
+//#line 83 "/usr/local/yacco2/library/runtime_env.w"
+
+std::list<std::string> yacco2::O2_LOGICALS__;
+yacco2::gbl_file_map_type yacco2::FILE_TBL__;
+std::vector<yacco2::UINT> yacco2::STK_FILE_NOS__;
+yacco2::UINT yacco2::FILE_CNT__(0);
+yacco2::rc_map yacco2::RC__;
+yacco2::Type_pp_fnct_ptr yacco2::PTR_AR_for_manual_thread_spawning(0);
+
+
+
+
+yacco2::KCHARP
+yacco2::Lr1_VERSION= "O2 version: 1.0 Distribution Date: "
+__DATE__"\n";
+yacco2::KCHARP
+yacco2::O2linker_VERSION= "O2linker version: 1.0 Distribution Date: "
+__DATE__"\n";
+
+yacco2::MUTEX yacco2::TOKEN_MU;
+yacco2::MUTEX yacco2::TRACE_MU;
+yacco2::MUTEX yacco2::TH_TBL_MU;
+yacco2::MUTEX yacco2::SYM_TBL_MU;
+std::ofstream yacco2::lrclog("1lrtracings.log");
+std::ofstream yacco2::lrerrors("1lrerrors.log");
+yacco2::Set_entry
+yacco2::LRK_LA_EOLR_SET
+= {0,0xf4};
+yacco2::Set_entry
+yacco2::LRK_LA_QUE_SET
+= {0,0x01};
+
+/*:428*//*430:*/
+//#line 139 "/usr/local/yacco2/library/runtime_env.w"
+
+yacco2::
+Source_info::
+Source_info(yacco2::KCHARP File,yacco2::UINT Line)
+:file__(File)
+,line__(Line){
+w_info();
+}
+
+void
+yacco2::
+Source_info::
+w_info(){
+yacco2::lrclog
+<<" Version: "<<yacco2::Lr1_VERSION
+<<" thrown from source file: "<<file__
+<<" line: "<<line__
+<<__FILE__<<__LINE__<<std::endl;
+std::cout
+<<" Version: "<<yacco2::Lr1_VERSION
+<<" thrown from source file: "<<file__
+<<" line: "<<line__
+<<__FILE__<<__LINE__<<std::endl;
+}
+
+yacco2::
+Yacco2_faulty_precondition::
+Yacco2_faulty_precondition(yacco2::KCHARP Message
+,yacco2::KCHARP File
+,yacco2::UINT Line)
+:Source_info(File,Line){
+yacco2::lrclog<<"Yacco2_faulty_precondition: "<<Message<<' '<<__FILE__<<": "<<__LINE__<<std::endl;
+std::cout<<"Yacco2_faulty_precondition: "<<Message<<std::endl;
+}
+
+yacco2::
+Yacco2_faulty_postcondition::
+Yacco2_faulty_postcondition(yacco2::KCHARP Message
+,yacco2::KCHARP File
+,yacco2::UINT Line)
+:Source_info(File,Line){
+yacco2::lrclog<<"Yacco2_faulty_postcondition: "<<Message<<' '<<__FILE__<<": "<<__LINE__<<std::endl;
+std::cout<<"Yacco2_faulty_postcondition: "<<Message<<std::endl;
+}
+
+
+/*:430*//*432:*/
+//#line 208 "/usr/local/yacco2/library/runtime_env.w"
+
+extern
+void yacco2::Delete_tokens(yacco2::TOKEN_GAGGLE&Tks,bool Do_delete){
+return;
+using namespace NS_yacco2_k_symbols;
+static yacco2::set_of_objs_type deleted_syms;
+static yacco2::set_of_objs_type dont_delete_syms;
+static bool onetime(OFF);
+if(onetime==OFF){
+onetime= ON;
+dont_delete_syms.insert(PTR_LR1_eolr__);
+dont_delete_syms.insert(PTR_LR1_questionable_shift_operator__);
+dont_delete_syms.insert(PTR_LR1_eog__);
+dont_delete_syms.insert(PTR_LR1_parallel_operator__);
+dont_delete_syms.insert(PTR_LR1_invisible_shift_operator__);
+dont_delete_syms.insert(PTR_LR1_all_shift_operator__);
+dont_delete_syms.insert(PTR_LR1_fset_transience_operator__);
+}
+if(Do_delete==ON){
+set_of_objs_iter_type k= deleted_syms.begin();
+set_of_objs_iter_type ke= deleted_syms.end();
+for(;k!=ke;++k){
+CAbs_lr1_sym*sym= *k;
+
+}
+return;
+}
+TOKEN_GAGGLE_ITER i= Tks.begin();
+TOKEN_GAGGLE_ITER ie= Tks.end();
+for(;i!=ie;++i){
+yacco2::CAbs_lr1_sym*sym= *i;
+yacco2::set_of_objs_iter_type j;
+j= deleted_syms.find(sym);
+if(j!=deleted_syms.end())continue;
+j= dont_delete_syms.find(sym);
+if(j!=dont_delete_syms.end())continue;
+deleted_syms.insert(sym);
+}
+}
+
+/*:432*//*433:*/
+//#line 255 "/usr/local/yacco2/library/runtime_env.w"
+
+extern
+void yacco2::Clear_yacco2_opened_files_dictionary(){
+yacco2::FILE_TBL__.clear();
+yacco2::STK_FILE_NOS__.clear();
+yacco2::FILE_CNT__= 0;
+
+}
+//#line 1 "/usr/local/yacco2/library/tree.w"
+
+
+
+
+
+
+
+
+/*:433*//*636:*/
+//#line 1315 "/usr/local/yacco2/library/macros.w"
+
+extern bool
+yacco2::trace_parser_env(Parser*parser,bool Trace_type){
+/*550:*/
+//#line 83 "/usr/local/yacco2/library/constraints.w"
+
+if(parser->fsm_tbl__==0){
+
+yacco2::KCHARP msg= "Error - parser's finite state table is zero ptr";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:550*/
+//#line 1318 "/usr/local/yacco2/library/macros.w"
+
+/*551:*/
+//#line 92 "/usr/local/yacco2/library/constraints.w"
+
+if(parser->parse_stack__.top_sub__<1){
+
+yacco2::KCHARP msg= "Error - parser's stack is empty";
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:551*/
+//#line 1319 "/usr/local/yacco2/library/macros.w"
+
+/*635:*/
+//#line 1306 "/usr/local/yacco2/library/macros.w"
+
+if(Trace_type==COND_STK_TRACE){
+if(parser->fsm_tbl__->debug__==OFF)return NO;
+}
+
+/*:635*/
+//#line 1320 "/usr/local/yacco2/library/macros.w"
+
+/*633:*/
+//#line 1277 "/usr/local/yacco2/library/macros.w"
+
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1278 "/usr/local/yacco2/library/macros.w"
+
+for(UINT x= 1;x<=parser->parse_stack__.top_sub__;++x)yacco2::lrclog<<".";
+yacco2::lrclog<<parser->thread_no__;
+yacco2::lrclog<<"::";
+yacco2::lrclog<<parser->fsm_tbl__->id__<<"::";
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1283 "/usr/local/yacco2/library/macros.w"
+
+
+/*:633*/
+//#line 1321 "/usr/local/yacco2/library/macros.w"
+
+/*634:*/
+//#line 1286 "/usr/local/yacco2/library/macros.w"
+
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 1287 "/usr/local/yacco2/library/macros.w"
+
+Cparse_record*i= parser->parse_stack__.first_sf__;
+Cparse_record*ie= parser->parse_stack__.top__;
+for(int xxx(1);i!=ie;i= parser->parse_stack__.sf_by_sub(++xxx)){
+yacco2::lrclog<<i->state__->state_no__<<"--";
+CAbs_lr1_sym*sym= i->symbol__;
+if(sym)yacco2::lrclog<<sym->id__<<"-> ";
+else yacco2::lrclog<<"ZEROED OUT SYMBOL"<<"-> ";
+}
+yacco2::lrclog<<ie->state__->state_no__;
+
+yacco2::lrclog<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 1299 "/usr/local/yacco2/library/macros.w"
+
+
+/*:634*/
+//#line 1322 "/usr/local/yacco2/library/macros.w"
+
+return YES;
+}
+
+/*:636*/
+//#line 482 "/usr/local/yacco2/library/intro.w"
+
+//#line 1 "/usr/local/yacco2/library/constants.w"
+
+
+
+
+
+
+
+/*:36*/
diff --git a/web/yacco2/library/yacco2.h b/web/yacco2/library/yacco2.h
new file mode 100644
index 0000000000..a8b90b85dc
--- /dev/null
+++ b/web/yacco2/library/yacco2.h
@@ -0,0 +1,1721 @@
+/*35:*/
+//#line 446 "/usr/local/yacco2/library/intro.w"
+
+/*565:*/
+//#line 24 "/usr/local/yacco2/library/macros.w"
+
+
+
+/*:565*/
+//#line 447 "/usr/local/yacco2/library/intro.w"
+
+#ifndef yacco2_
+#define yacco2_ 1
+/*29:*/
+//#line 416 "/usr/local/yacco2/library/intro.w"
+
+#include "yacco2_compile_symbols.h"
+
+/*:29*/
+//#line 450 "/usr/local/yacco2/library/intro.w"
+
+#define START_OF_LRK_ENUMERATE 0
+#define END_OF_LRK_ENUMERATE 7
+#define START_OF_RC_ENUMERATE END_OF_LRK_ENUMERATE+1
+#define END_OF_RC_ENUMERATE START_OF_RC_ENUMERATE+256-1
+#define START_OF_ERROR_ENUMERATE END_OF_RC_ENUMERATE+1
+#define SEQ_SRCH_VS_BIN_SRCH_LIMIT 71
+#define MAX_UINT (0xffffffff)
+#define MAX_USINT 256*256-1
+#define MAX_LR_STK_ITEMS 256
+#define C_MAX_LR_STK_ITEMS MAX_LR_STK_ITEMS+1
+#define BITS_PER_WORD 32
+#define BITS_PER_WORD_REL_0 BITS_PER_WORD-1
+#define MAX_NO_THDS 1024
+#define START_OF_RC_ENUM 8
+#define SIZE_CAbs_lr1_sym 56
+#define NO_CAbs_lr1_sym_ENTRIES 1024*1024
+#define SIZE_RC_MALLOC NO_CAbs_lr1_sym_ENTRIES*SIZE_CAbs_lr1_sym
+#define ASCII_8_BIT 256
+#define START_LINE_NO 1
+#define START_CHAR_POS 0
+#define LINE_FEED 10
+#define EOF_CHAR_SUB 256
+#define YES true
+#define NO false
+#define ON true
+#define OFF false
+#define BUFFER_SIZE 1024*4
+#define BIG_BUFFER_32K 1024*32
+#define SMALL_BUFFER_4K 1024*4
+#define THREAD_WORKING 0
+#define THREAD_WAITING_FOR_WORK 1
+#define ALL_THREADS_BUSY 2
+#define NO_THREAD_AT_ALL 3
+#define THREAD_TO_EXIT 4
+#define EVENT_RECEIVED 0
+#define WAIT_FOR_EVENT 1
+#define Token_start_pos 0
+#define No_Token_start_pos Token_start_pos-1
+#define CALLED_AS_THREAD true
+#define CALLED_AS_PROC false
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Recursion_count() \
+int RECURSION_INDEX__(0) ; \
+
+#define FORCE_STK_TRACE 0
+#define COND_STK_TRACE 1
+#define Accept_parallel_parse 1
+#define Shutdown 2
+#define LR1_Questionable_operator 0
+#define LR1_Eog 1
+#define LR1_Eolr 2
+#define LR1_Parallel_operator 3
+#define LR1_Reduce_operator 4
+#define LR1_Invisible_shift_operator 5
+#define LR1_All_shift_operator 6
+#define LR1_FSET_transience_operator 7
+#define LR1_Procedure_call_operator 7 \
+
+#define SET_ELEM_NO_BITS 8
+#define Remap_token(Token) \
+if(sym_lookup_functor__==0) return Token; \
+if(sym_lookup_functor__->lkup__==OFF) { \
+return Token; \
+} \
+CAbs_lr1_sym*x= sym_lookup_functor__->operator() (Token) ; \
+if(x==0) return Token;
+#define Remap_set_result_and_return(Token) \
+Token= x; \
+return Token;
+#define Remap_return_result return x;
+#define EXTERNAL_GPSing(TOK__) \
+if(TOK__->tok_co_ords__.external_file_id__<yacco2::FILE_TBL__.size() ) { \
+yacco2::lrclog<<yacco2::FILE_TBL__[TOK__->tok_co_ords__.external_file_id__].c_str() ; \
+}else{ \
+yacco2::lrclog<<" EXTERNAL_GPSing - No external file registered to use" \
+<<" stack subscript: " \
+<<TOK__->tok_co_ords__.external_file_id__; \
+}
+#define FILE_LINE ' '<<__FILE__<<": "<<__LINE__ \
+
+#define T_CTOR(A,B,C,D,E) \
+:CAbs_lr1_sym(A,C,B,D,E)
+#define T_CTOR_RW(A,B,C,D,E,F,G) \
+:CAbs_lr1_sym(A,C,B,D,E,F,G)
+#define YACCO2_define_trace_variables() \
+int yacco2::YACCO2_T__(OFF) ; \
+int yacco2::YACCO2_TLEX__(OFF) ; \
+int yacco2::YACCO2_MSG__(OFF) ; \
+int yacco2::YACCO2_TH__(OFF) ; \
+int yacco2::YACCO2_AR__(OFF) ; \
+int yacco2::YACCO2_THP__(OFF) ; \
+int yacco2::YACCO2_MU_TRACING__(OFF) ; \
+int yacco2::YACCO2_MU_TH_TBL__(OFF) ; \
+int yacco2::YACCO2_MU_GRAMMAR__(OFF) ; \
+
+#define ADD_TOKEN_TO_RECYCLE_BIN(Token) \
+rule_info__.parser__->add_token_to_recycle_bin(Token)
+#define DELETE_T_SYM(T) \
+if(T!=0) { \
+if(T->enumerated_id__> END_OF_RC_ENUMERATE) { \
+if(T->dtor__!=0) { \
+(*T->dtor__) (T,0) ; \
+} \
+delete T; \
+} \
+}
+#define RSVP(Token) \
+rule_info__.parser__->pp_rsvp__.fill_it(*rule_info__.parser__ \
+,*Token,Token->tok_co_ords__.rc_pos__ \
+,*rule_info__.parser__->current_token__ \
+,rule_info__.parser__->current_token_pos__) \
+
+#define RSVP_WLA(Token,LATOK,LAPOS) \
+rule_info__.parser__->pp_rsvp__.fill_it(*rule_info__.parser__ \
+,*Token,Token->tok_co_ords__.rc_pos__ \
+,*LATOK \
+,LAPOS) \
+
+#define RSVP_FSM(Token) \
+parser__->pp_rsvp__.fill_it(*parser__ \
+,*Token,Token->tok_co_ords__.rc_pos__ \
+,*parser__->current_token__,parser__->current_token_pos__) \
+
+#define ADD_TOKEN_TO_PRODUCER_QUEUE(TOKEN) \
+rule_info__.parser__->add_token_to_producer(TOKEN)
+#define ADD_TOKEN_TO_ERROR_QUEUE(TOKEN) rule_info__.parser__->add_token_to_error_queue(TOKEN)
+#define ADD_TOKEN_TO_ERROR_QUEUE_FSM(TOKEN) parser__->add_token_to_error_queue(TOKEN) \
+ \
+
+#define ssNEW_TRACEss(ssPss,ssQss) \
+yacco2::lrclog<<"\t!!!!! new adr: "<<(void*) ssPss \
+<<" "<<#ssQss<<' '<<__FILE__<<':'<<__LINE__<<std::endl; \
+yacco2::lrclog<<"\tfile: "<<__FILE__<<" line: "<<__LINE__<<std::endl; \
+
+#define ssP_TRACEss(ssPss,ssQss) \
+yacco2::lrclog \
+<<'\t'<<Parse_env->thread_no__ \
+<<"\t!!!!! new adr: "<<(void*) ssPss \
+<<" "<<#ssQss<<FILE_LINE<<std::endl; \
+yacco2::lrclog \
+<<"\tfile: "<<__FILE__<<" line: "<<__LINE__<<std::endl; \
+
+#define sstrace_terminalsss \
+if(yacco2::YACCO2_TLEX__) { \
+bool to_trace_or_not_to= trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE) ; \
+if(to_trace_or_not_to==true) { \
+yacco2::lrclog \
+<<"\tYACCO2_TLEX__::"<<rule_info__.parser__->thread_no__ \
+<<rule_info__.parser__->fsm_tbl__->id__<<"::"<<id__<<"::op()\n"; \
+} \
+} \
+
+#define sstrace_rulesss \
+if(yacco2::YACCO2_TLEX__) { \
+bool to_trace_or_not_to= trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE) ; \
+if(to_trace_or_not_to==true) { \
+yacco2::lrclog<<"\tYACCO2_TLEX__::"<<rule_info__.parser__->thread_no__ \
+<<"::"<<rule_info__.parser__->fsm_tbl__->id__<<"::"<<id__<<"::op()\n"; \
+} \
+} \
+
+#define sstrace_sub_rulesss \
+if(yacco2::YACCO2_TLEX__) { \
+bool to_trace_or_not_to= trace_parser_env(rule_info__.parser__,FORCE_STK_TRACE) ; \
+if(to_trace_or_not_to==true) { \
+yacco2::lrclog<<"\tYACCO2_TLEX__::"<<rule_info__.parser__->thread_no__ \
+<<"::"<<rule_info__.parser__->fsm_tbl__->id__<<"::"<<id__<<"::op()\n"; \
+} \
+} \
+
+#define sstrace_stack_rtnsss \
+if(yacco2::YACCO2_TLEX__) { \
+bool to_trace_or_not_to= trace_parser_env(Parse_env,FORCE_STK_TRACE) ) ; \
+if(to_trace_or_not_to==true) { \
+yacco2::lrclog \
+<<"\tYACCO2_TLEX__::"<<Parse_env->thread_no__ \
+<<"::"<<Parse_env->fsm_tbl__->id__<<"::op() sym: "<<id__ \
+<<FILE_LINE<<std::endl; \
+} \
+} \
+ \
+
+
+//#line 451 "/usr/local/yacco2/library/intro.w"
+
+/*14:*/
+//#line 300 "/usr/local/yacco2/library/intro.w"
+
+/*32:*/
+//#line 429 "/usr/local/yacco2/library/intro.w"
+
+#include <stdlib.h>
+#include <limits.h>
+#include <assert.h>
+#include "std_includes.h"
+#include <time.h>
+
+/*:32*/
+//#line 301 "/usr/local/yacco2/library/intro.w"
+
+
+//#line 1 "/usr/local/yacco2/library/gbl_defs.w"
+
+
+
+
+
+
+
+/*:14*//*138:*/
+//#line 57 "/usr/local/yacco2/library/wthread.w"
+
+#if THREAD_LIBRARY_TO_USE__ == 1
+#include <windows.h>
+#include <process.h>
+#elif THREAD_LIBRARY_TO_USE__ == 0
+#include <pthread.h>
+#endif
+/*:138*/
+//#line 452 "/usr/local/yacco2/library/intro.w"
+
+
+/*24:*/
+//#line 396 "/usr/local/yacco2/library/intro.w"
+
+namespace yacco2{
+
+/*:24*/
+//#line 454 "/usr/local/yacco2/library/intro.w"
+
+/*16:*/
+//#line 308 "/usr/local/yacco2/library/intro.w"
+
+typedef const char*KCHARP;
+typedef unsigned char UCHAR;
+typedef char CHAR;
+typedef UCHAR*UCHARP;
+typedef unsigned short int USINT;
+typedef short int SINT;
+typedef CHAR*CHARP;
+typedef const void*KVOIDP;
+typedef void*VOIDP;
+typedef int INT;
+typedef unsigned int UINT;
+typedef unsigned int ULINT;
+typedef void(*FN_DTOR)(VOIDP This,VOIDP Parser);
+typedef UCHARP LA_set_type;
+typedef LA_set_type LA_set_ptr;
+struct CAbs_lr1_sym;
+struct State;
+struct Parser;
+struct Shift_entry;
+struct Shift_tbl;
+struct Reduce_tbl;
+struct State_s_thread_tbl;
+struct Thread_entry;
+struct T_array_having_thd_ids;
+struct Set_entry;
+struct Recycled_rule_struct;
+struct Rule_s_reuse_entry;
+typedef Shift_entry Shift_entry_array_type[1024*100];
+typedef Set_entry Set_entry_array_type[1024*100];
+/*:16*//*44:*/
+//#line 57 "/usr/local/yacco2/library/set.w"
+
+typedef std::map<yacco2::USINT,yacco2::USINT> yacco2_set_type;
+typedef yacco2_set_type::iterator yacco2_set_iter_type;
+
+/*:44*//*124:*/
+//#line 75 "/usr/local/yacco2/library/parse_env.w"
+
+struct Cparse_record{
+void set_aborted(bool X);
+bool aborted()const;
+yacco2::CAbs_lr1_sym*symbol();
+void set_symbol(yacco2::CAbs_lr1_sym*Symbol);
+yacco2::State*state();
+void set_state(yacco2::State*State_no);
+void set_rule_s_reuse_entry(yacco2::Rule_s_reuse_entry*Rule_s_reuse);
+yacco2::Rule_s_reuse_entry*rule_s_reuse_entry();
+yacco2::CAbs_lr1_sym*symbol__;
+yacco2::State*state__;
+bool aborted__;
+yacco2::Rule_s_reuse_entry*rule_s_reuse_entry_ptr__;
+};
+
+/*:124*//*125:*/
+//#line 94 "/usr/local/yacco2/library/parse_env.w"
+
+struct lr_stk{
+lr_stk();
+void lr_stk_init(yacco2::State&S1);
+void push_state(yacco2::State&S1);
+void push_symbol(yacco2::CAbs_lr1_sym&Sym);
+bool empty();
+void pop();
+void clean_up();
+Cparse_record*sf_by_sub(yacco2::UINT Sub);
+Cparse_record*sf_by_top(yacco2::UINT No);
+Cparse_record lr_stk__[C_MAX_LR_STK_ITEMS];
+yacco2::UINT top_sub__;
+Cparse_record*top__;
+Cparse_record*first_sf__;
+State*first_state__;
+};
+
+/*:125*//*139:*/
+//#line 65 "/usr/local/yacco2/library/wthread.w"
+
+typedef void*LPVOID;
+#if THREAD_LIBRARY_TO_USE__ == 1
+#define _YACCO2_CALL_TYPE
+typedef HANDLE MUTEX;
+typedef unsigned int THREAD_NO;
+typedef HANDLE THREAD;
+typedef HANDLE COND_VAR;
+typedef uintptr_t THR;
+typedef int THR_result;
+typedef THR(
+_YACCO2_CALL_TYPE
+*Type_pp_fnct_ptr)(yacco2::Parser*PP_requestor);
+typedef THR_result(
+_YACCO2_CALL_TYPE
+*Type_pc_fnct_ptr)(yacco2::Parser*PP_requestor);
+typedef THR(
+--stdcall
+*Type_pp_fnct_ptr_voidp)(yacco2::LPVOID PP_requestor);
+#elif THREAD_LIBRARY_TO_USE__ == 0
+#define _YACCO2_CALL_TYPE
+typedef pthread_mutex_t MUTEX;
+typedef pthread_t THREAD_NO;
+typedef pthread_cond_t COND_VAR;
+typedef void*LPVOID;
+typedef LPVOID THR;
+typedef int THR_result;
+typedef pthread_t THREAD;
+typedef THR(*Type_pp_fnct_ptr)(yacco2::Parser*PP_requestor);
+typedef THR(*Type_pp_fnct_ptr_voidp)(yacco2::LPVOID PP_requestor);
+typedef THR_result(*Type_pc_fnct_ptr)(yacco2::Parser*PP_requestor);
+#endif
+typedef std::vector<yacco2::Thread_entry*> yacco2_threads_to_run_type;
+typedef yacco2_threads_to_run_type::iterator yacco2_threads_to_run_iter_type;
+
+/*:139*//*170:*/
+//#line 22 "/usr/local/yacco2/library/thread.w"
+
+struct worker_thread_blk;
+typedef std::list<yacco2::worker_thread_blk*> Parallel_thread_list_type;
+typedef Parallel_thread_list_type::iterator Parallel_thread_list_iterator_type;
+typedef std::vector<yacco2::Parallel_thread_list_type> Parallel_thread_tbl_type;
+typedef Parallel_thread_tbl_type::iterator Parallel_thread_tbl_iterator_type;
+struct called_proc_entry{
+bool proc_call_in_use__;
+};
+typedef called_proc_entry Parallel_thread_proc_call_table_type;
+
+/*:170*//*316:*/
+//#line 1830 "/usr/local/yacco2/library/parser.w"
+
+struct Caccept_parse;
+#define pp_accept_queue_size 8
+typedef yacco2::Caccept_parse pp_accept_queue_type[pp_accept_queue_size];
+
+
+/*:316*//*423:*/
+//#line 35 "/usr/local/yacco2/library/runtime_env.w"
+
+typedef std::vector<std::string> gbl_file_map_type;
+
+/*:423*//*431:*/
+//#line 203 "/usr/local/yacco2/library/runtime_env.w"
+
+typedef std::set<yacco2::CAbs_lr1_sym*> set_of_objs_type;
+typedef set_of_objs_type::iterator set_of_objs_iter_type;
+
+/*:431*/
+//#line 455 "/usr/local/yacco2/library/intro.w"
+
+/*21:*/
+//#line 385 "/usr/local/yacco2/library/intro.w"
+
+
+/*:21*//*172:*/
+//#line 67 "/usr/local/yacco2/library/thread.w"
+
+extern Parallel_thread_tbl_type Parallel_thread_table;
+extern Parallel_thread_proc_call_table_type Parallel_thread_proc_call_table[MAX_NO_THDS];
+/*:172*//*424:*/
+//#line 39 "/usr/local/yacco2/library/runtime_env.w"
+
+extern std::list<std::string> O2_LOGICALS__;
+extern std::ofstream lrclog;
+extern std::ofstream lrerrors;
+extern yacco2::KCHARP Lr1_VERSION;
+extern yacco2::KCHARP O2linker_VERSION;
+extern yacco2::MUTEX TRACE_MU;
+extern yacco2::MUTEX TH_TBL_MU;
+extern yacco2::MUTEX SYM_TBL_MU;
+extern yacco2::MUTEX TOKEN_MU;
+extern yacco2::gbl_file_map_type FILE_TBL__;
+extern yacco2::UINT FILE_CNT__;
+extern std::vector<yacco2::UINT> STK_FILE_NOS__;
+struct rc_map;
+extern yacco2::rc_map RC__;
+
+
+/*:424*//*425:*/
+//#line 63 "/usr/local/yacco2/library/runtime_env.w"
+
+extern yacco2::Set_entry LRK_LA_EOLR_SET;
+
+/*:425*//*426:*/
+//#line 73 "/usr/local/yacco2/library/runtime_env.w"
+
+extern yacco2::Set_entry LRK_LA_QUE_SET;
+
+/*:426*/
+//#line 456 "/usr/local/yacco2/library/intro.w"
+
+/*20:*/
+//#line 373 "/usr/local/yacco2/library/intro.w"
+
+extern int YACCO2_T__;
+extern int YACCO2_TLEX__;
+extern int YACCO2_MSG__;
+extern int YACCO2_TH__;
+extern int YACCO2_AR__;
+extern int YACCO2_THP__;
+extern int YACCO2_MU_TRACING__;
+extern int YACCO2_MU_TH_TBL__;
+extern int YACCO2_MU_GRAMMAR__;
+
+/*:20*/
+//#line 457 "/usr/local/yacco2/library/intro.w"
+
+/*19:*/
+//#line 362 "/usr/local/yacco2/library/intro.w"
+
+
+extern void*THDS_STABLE__;
+extern void*T_ARRAY_HAVING_THD_IDS__;
+extern void*BIT_MAPS_FOR_SALE__;
+extern int TOTAL_NO_BIT_WORDS__;
+extern int BIT_MAP_IDX__;
+extern CAbs_lr1_sym*PTR_LR1_eog__;
+
+/*:19*/
+//#line 458 "/usr/local/yacco2/library/intro.w"
+
+/*18:*/
+//#line 346 "/usr/local/yacco2/library/intro.w"
+
+
+
+/*:18*//*45:*/
+//#line 73 "/usr/local/yacco2/library/set.w"
+
+struct Set_entry{
+yacco2::UCHAR partition__;
+yacco2::UCHAR elements__;
+};
+struct Set_tbl{
+yacco2::UCHAR no_entries__;
+yacco2::Set_entry first_entry__[1];
+};
+
+/*:45*//*51:*/
+//#line 10 "/usr/local/yacco2/library/tblkup.w"
+
+template<typename Functor>
+struct functor2{
+struct functor{};
+void operator()(Functor*Func){Func->operator()();};
+};
+template<typename T>
+class tble_lkup:public std::unary_function<T,T>{
+public:
+tble_lkup():lkup__(ON){};
+~tble_lkup(){};
+virtual T operator()(T t)= 0;
+void turn_off_lkup(){
+lkup__= OFF;
+
+};
+void turn_on_lkup(){
+lkup__= ON;
+
+};
+bool lkup(){return lkup__;};
+bool lkup__;
+};
+
+/*:51*//*52:*/
+//#line 35 "/usr/local/yacco2/library/tblkup.w"
+
+typedef tble_lkup<yacco2::CAbs_lr1_sym*> tble_lkup_type;
+//#line 1 "/usr/local/yacco2/library/rc.w"
+
+
+
+
+
+
+
+
+/*:52*//*53:*/
+//#line 27 "/usr/local/yacco2/library/rc.w"
+
+struct rc_map{
+enum rc_size{rc_size_= ASCII_8_BIT+1};
+yacco2::CAbs_lr1_sym*
+map_char_to_raw_char_sym(yacco2::UINT Char,yacco2::UINT File,yacco2::UINT Pos
+,UINT*Line_no,UINT*Pos_in_line);
+static char array_chr_sym__[SIZE_RC_MALLOC];
+static INT current_rc_malloc_sub__;
+static yacco2::KCHARP chr_literal__[ASCII_8_BIT];
+};
+/*:53*//*58:*/
+//#line 52 "/usr/local/yacco2/library/CAbs_lr1_sym.w"
+
+struct CAbs_lr1_sym{
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,bool Auto_delete
+,bool Affected_by_abort);
+
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,bool Auto_delete
+,bool Affected_by_abort
+,yacco2::USINT Ext_file_no
+,yacco2::UINT Rc_pos);
+
+CAbs_lr1_sym(
+yacco2::KCHARP Id
+,yacco2::FN_DTOR Dtor
+,yacco2::USINT Enum_id
+,yacco2::Parser*P
+,bool Auto_delete= false
+,bool Affected_by_abort= false);
+
+yacco2::KCHARP id()const;
+yacco2::USINT enumerated_id()const;
+void set_enumerated_id(yacco2::USINT Id);
+void set_auto_delete(bool X);
+bool auto_delete()const;
+void set_affected_by_abort(bool X);
+bool affected_by_abort()const;
+yacco2::UINT rc_pos();
+void set_rc_pos(yacco2::UINT Pos);
+yacco2::UINT external_file_id();
+void set_external_file_id(yacco2::UINT File);
+void set_rc(yacco2::CAbs_lr1_sym&Rc
+,yacco2::KCHARP GPS_FILE= __FILE__,yacco2::UINT GPS_LINE= __LINE__);
+yacco2::UINT line_no();
+void set_line_no(yacco2::UINT Line_no);
+yacco2::UINT pos_in_line();
+void set_pos_in_line(yacco2::UINT Pos_in_line);
+void set_line_no_and_pos_in_line(yacco2::CAbs_lr1_sym&Rc);
+void set_line_no_and_pos_in_line(yacco2::UINT Line_no,yacco2::UINT Pos_in_line);
+void set_who_created(yacco2::KCHARP File,yacco2::UINT Line_no);
+yacco2::UINT who_line_no();
+yacco2::KCHARP who_file();
+yacco2::Parser*parser();
+yacco2::FN_DTOR dtor();
+yacco2::USINT rhs_no_of_parms();
+yacco2::KCHARP id__;
+yacco2::FN_DTOR dtor__;
+yacco2::USINT enumerated_id__;
+bool auto_delete__;
+bool affected_by_abort__;
+UCHAR enum_id_set_partition_no()const;
+UCHAR enum_id_set_member()const;
+
+struct tok_co_ordinates{
+yacco2::KCHARP who_file__;
+yacco2::UINT who_line_no__;
+yacco2::UINT rc_pos__;
+yacco2::UINT line_no__;
+yacco2::USINT external_file_id__;
+yacco2::USINT pos_in_line__;
+Set_entry set_entry__;
+};
+struct rule_info{
+yacco2::Parser*parser__;
+yacco2::USINT rhs_no_of_parms__;
+};
+union{
+tok_co_ordinates tok_co_ords__;
+rule_info rule_info__;
+};
+};
+
+/*:58*//*78:*/
+//#line 48 "/usr/local/yacco2/library/tok_can.w"
+
+extern void LOCK_MUTEX(yacco2::MUTEX&Mu);
+extern void UNLOCK_MUTEX(yacco2::MUTEX&Mu);
+extern
+void LOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text);
+extern
+void UNLOCK_MUTEX_OF_CALLED_PARSER
+(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text);
+
+/*:78*//*79:*/
+//#line 61 "/usr/local/yacco2/library/tok_can.w"
+
+struct tok_base{
+tok_base(USINT RW):r_w_cnt__(RW){};
+virtual yacco2::UINT size()= 0;
+virtual yacco2::CAbs_lr1_sym*operator[](yacco2::UINT Pos)= 0;
+virtual void push_back(yacco2::CAbs_lr1_sym&Tok)= 0;
+virtual void clear()= 0;
+virtual bool empty()= 0;
+USINT r_w_cnt__;
+};
+
+template<typename Container>
+class tok_can:public tok_base{
+public:
+typedef Container value_type;
+typedef typename Container::size_type size_type;
+typedef typename Container::difference_type difference_type;
+
+typedef typename Container::iterator iterator;
+typedef typename Container::const_iterator const_iterator;
+typedef typename Container::reverse_iterator reverse_iterator;
+typedef typename Container::const_reverse_iterator const_reverse_iterator;
+
+typedef typename Container::pointer pointer;
+typedef typename Container::const_pointer const_pointer;
+typedef typename Container::reference reference;
+typedef typename Container::const_reference const_reference;
+tok_can():tok_base(1),pos__(0){};
+~tok_can(){};
+yacco2::CAbs_lr1_sym*operator[](yacco2::UINT Pos){
+if(Pos>=container__.size()){
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 93 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token eog: "
+<<PTR_LR1_eog__<<" pos: "<<Pos<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 96 "/usr/local/yacco2/library/tok_can.w"
+
+}
+return PTR_LR1_eog__;
+}
+CAbs_lr1_sym*tok_(0);
+if(r_w_cnt__> 1){
+/*391:*/
+//#line 3068 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:391*/
+//#line 102 "/usr/local/yacco2/library/tok_can.w"
+
+tok_= container__[Pos];
+/*392:*/
+//#line 3072 "/usr/local/yacco2/library/parser.w"
+
+UNLOCK_MUTEX(yacco2::TOKEN_MU);
+
+/*:392*/
+//#line 104 "/usr/local/yacco2/library/tok_can.w"
+
+}else{
+tok_= container__[Pos];
+}
+if(YACCO2_T__!=0){
+/*389:*/
+//#line 3053 "/usr/local/yacco2/library/parser.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<FILE_LINE<<std::endl;
+}
+
+/*:389*/
+//#line 109 "/usr/local/yacco2/library/tok_can.w"
+
+yacco2::lrclog<<"YACCO2_T__::tok_can token: "<<tok_->id__
+<<" *: "<<tok_<<" pos: "<<Pos
+<<" enum: "<<tok_->enumerated_id__
+<<'"'<<tok_->id__<<'"'
+<<FILE_LINE<<std::endl;
+yacco2::lrclog
+<<"\t\t::GPS FILE: ";
+
+EXTERNAL_GPSing(tok_)
+yacco2::lrclog
+<<" GPS LINE: "
+<<tok_->tok_co_ords__.line_no__
+<<" GPS CHR POS: "
+<<tok_->tok_co_ords__.pos_in_line__
+<<FILE_LINE<<std::endl;
+/*390:*/
+//#line 3060 "/usr/local/yacco2/library/parser.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<FILE_LINE<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:390*/
+//#line 125 "/usr/local/yacco2/library/tok_can.w"
+
+}
+return tok_;
+};
+yacco2::UINT pos(){return pos__;};
+yacco2::UINT size(){return container__.size();};
+bool empty(){return container__.empty();};
+void push_back(yacco2::CAbs_lr1_sym&Tok){container__.push_back(&Tok);};
+void remove(){};
+void clear(){container__.clear();};
+Container&container(){return container__;};
+iterator begin(){return container__.begin();};
+iterator end(){return container__.end();};
+private:
+yacco2::UINT pos__;
+bool have_1st_rec__;
+Container container__;
+};
+
+/*:79*//*80:*/
+//#line 156 "/usr/local/yacco2/library/tok_can.w"
+
+typedef tok_base token_container_type;
+
+typedef tok_can<std::vector<yacco2::CAbs_lr1_sym*> > GAGGLE;
+typedef GAGGLE::iterator GAGGLE_ITER;
+
+typedef GAGGLE TOKEN_GAGGLE;
+typedef GAGGLE_ITER TOKEN_GAGGLE_ITER;
+
+template<> class tok_can<std::ifstream> :public yacco2::tok_base{
+public:
+tok_can();
+tok_can(const char*File_name);
+~tok_can();
+std::string&file_name();
+void set_file_name(const char*File_name);
+yacco2::CAbs_lr1_sym*operator[](yacco2::UINT Pos);
+yacco2::UINT pos();
+yacco2::UINT size();
+bool empty();
+void push_back(yacco2::CAbs_lr1_sym&Tok);
+void remove();
+void clear();
+TOKEN_GAGGLE&container();
+bool file_ok();
+void open_file();
+void close_file();
+private:
+std::ifstream file__;
+yacco2::UINT pos_;
+bool have_1st_rec__;
+std::ios::int_type eof_pos_;
+bool file_ok_;
+UINT line_no__;
+UINT pos_in_line__;
+TOKEN_GAGGLE container__;
+std::string file_name__;
+yacco2::UINT file_no__;
+};
+
+template<> class tok_can<std::string> :public yacco2::tok_base{
+public:
+tok_can();
+tok_can(const char*String,CAbs_lr1_sym*GPS= 0);
+~tok_can();
+void set_string(const char*String);
+void reuse_string(const char*String,CAbs_lr1_sym*GPS= 0);
+yacco2::CAbs_lr1_sym*operator[](yacco2::UINT Pos);
+yacco2::UINT pos();
+yacco2::UINT size();
+bool empty();
+void push_back(yacco2::CAbs_lr1_sym&Tok);
+void remove();
+void clear();
+TOKEN_GAGGLE&container();
+std::string*string_used();
+void set_gps(CAbs_lr1_sym*Gps);
+yacco2::CAbs_lr1_sym*gps_used();
+private:
+std::string string__;
+yacco2::UINT pos_;
+bool have_1st_rec__;
+std::ios::int_type eof_pos_;
+UINT line_no__;
+UINT pos_in_line__;
+TOKEN_GAGGLE container__;
+CAbs_lr1_sym*eof_sym_;
+yacco2::UINT file_no__;
+int real_start_pos_in_line_;
+yacco2::CAbs_lr1_sym*gps__;
+};
+
+/*:80*//*81:*/
+//#line 254 "/usr/local/yacco2/library/tok_can.w"
+
+struct AST;
+struct ast_base_stack;
+typedef std::set<yacco2::INT> int_set_type;
+typedef int_set_type::iterator int_set_iter_type;
+typedef std::vector<yacco2::AST*> ast_vector_type;
+typedef std::vector<yacco2::INT> ast_accept_node_type;
+typedef enum{bypass_node,accept_node,stop_walking}functor_result_type;
+typedef ast_vector_type Type_AST_ancestor_list;
+template<class T> struct ast_functor{
+virtual functor_result_type operator()(T Ast_env)= 0;
+};
+
+typedef ast_functor<yacco2::ast_base_stack*> Type_AST_functor;
+struct ast_base_stack{
+typedef enum n_action{init,left,visit,right,eoc}n_action_;
+struct s_rec{
+AST*node_;
+n_action_ act_;
+};
+ast_base_stack();
+ast_base_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+s_rec*stk_rec(yacco2::INT I);
+void pop();
+void push(AST&Node,ast_base_stack::n_action Action);
+yacco2::INT cur_stk_index();
+s_rec*cur_stk_rec();
+yacco2::INT idx_;
+std::vector<s_rec> stk_;
+Type_AST_functor*action_;
+s_rec*cur_stk_rec_;
+yacco2::int_set_type*filter_;
+bool accept_opt_;
+};
+
+struct ast_stack{
+ast_stack(Type_AST_functor*Action,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+ast_base_stack base_stk_;
+virtual void exec()= 0;
+virtual void advance()= 0;
+};
+
+/*:81*//*82:*/
+//#line 309 "/usr/local/yacco2/library/tok_can.w"
+
+struct AST{
+AST(yacco2::CAbs_lr1_sym&Obj);
+AST();
+~AST();
+static AST*restructure_2trees_into_1tree(AST&S1,AST&S2);
+static void crt_tree_of_1son(AST&Parent,AST&S1);
+static void crt_tree_of_2sons(AST&Parent,AST&S1,AST&S2);
+static void crt_tree_of_3sons(AST&Parent,AST&S1,AST&S2,AST&S3);
+static void crt_tree_of_4sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4);
+static void crt_tree_of_5sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4,AST&S5);
+static void crt_tree_of_6sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4,AST&S5,AST&S6);
+static void crt_tree_of_7sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4,AST&S5,AST&S6
+,AST&S7);
+static void crt_tree_of_8sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4,AST&S5
+,AST&S6,AST&S7,AST&S8);
+static void crt_tree_of_9sons(AST&Parent,AST&S1,AST&S2,AST&S3,AST&S4,AST&S5
+,AST&S6,AST&S7,AST&S8,AST&S9);
+static void join_pts(AST&Parent,AST&Sibling);
+static void join_sts(AST&Elder_sibling,AST&Younger_sibling);
+static void ast_delete(AST&Node,bool Due_to_abort= false);
+static AST*find_depth(AST&Node,yacco2::INT Enum);
+static AST*find_breadth(AST&Node,yacco2::INT Enum);
+static yacco2::CAbs_lr1_sym*content(AST&Node);
+static AST*get_1st_son(AST&Node);
+static AST*get_2nd_son(AST&Node);
+static AST*get_3rd_son(AST&Node);
+static AST*get_4th_son(AST&Node);
+static AST*get_5th_son(AST&Node);
+static AST*get_6th_son(AST&Node);
+static AST*get_7th_son(AST&Node);
+static AST*get_8th_son(AST&Node);
+static AST*get_9th_son(AST&Node);
+static AST*get_spec_child(AST&Tree,yacco2::INT Cnt);
+static AST*get_child_at_end(AST&Tree);
+static AST*add_child_at_end(AST&Tree,AST&Child);
+static AST*get_younger_sibling(AST&Child,yacco2::INT Pos);
+static AST*get_older_sibling(AST&Child,yacco2::INT Pos);
+static AST*get_youngest_sibling(AST&Child);
+static AST*get_parent(AST&Child);
+static AST*common_ancestor
+(Type_AST_ancestor_list&ListA,Type_AST_ancestor_list&ListB);
+
+static AST*brother(AST&Node);
+static AST*previous(AST&Node);
+static void zero_1st_son(AST&Node);
+static void zero_2nd_son(AST&Node);
+static void zero_brother(AST&Node);
+static void zero_previous(AST&Node);
+static void zero_content(AST&Node);
+static void set_content(AST&Node,yacco2::CAbs_lr1_sym&Sym);
+static void set_content_wdelete(AST&Node,yacco2::CAbs_lr1_sym&Sym);
+static void set_previous(AST&Node,AST&Previous_node);
+static void wdelete(AST&Node,bool Wdelete);
+static bool wdelete(AST&Node);
+static void replace_node(AST&Old_to,AST&New_to);
+static void relink(AST&Previous,AST&Old_to,AST&New_to);
+static void relink_between(AST&Previous,AST&Old_to,AST&New_to);
+static void relink_after(AST&Previous,AST&New_to);
+static void relink_before(AST&Previous,AST&New_to);
+static void add_son_to_tree(AST&Parent,AST&Son);
+static AST*divorce_node_from_tree(AST&Node);
+static AST*clone_tree(AST&Node_to_copy,AST*Calling_node
+,ast_base_stack::n_action Relation= ast_base_stack::init);
+AST*lt_;
+AST*rt_;
+AST*pr_;
+yacco2::CAbs_lr1_sym*obj_;
+bool wdelete_;
+};
+
+/*:82*//*83:*/
+//#line 450 "/usr/local/yacco2/library/tok_can.w"
+
+template<> class tok_can<yacco2::AST*> :public yacco2::tok_base{
+public:
+tok_can
+(ast_stack&Walker);
+~tok_can();
+
+yacco2::CAbs_lr1_sym*operator[](yacco2::UINT Pos);
+yacco2::UINT pos();
+yacco2::UINT size();
+bool empty();
+void push_back(yacco2::AST&Node);
+void push_back(yacco2::CAbs_lr1_sym&Node);
+void remove();
+void clear();
+yacco2::ast_stack&container();
+
+std::vector<yacco2::AST*> *nodes_visited();
+
+yacco2::AST*ast(yacco2::UINT Pos);
+
+yacco2::INT accept_node_level(yacco2::UINT Pos);
+
+private:
+volatile yacco2::UINT pos_;
+bool have_1st_rec__;
+bool tree_end_reached__;
+yacco2::ast_vector_type nodes_visited_;
+yacco2::ast_accept_node_type accept_node_level_;
+yacco2::ast_stack&traverse_;
+};
+
+/*:83*//*104:*/
+//#line 46 "/usr/local/yacco2/library/structures.w"
+
+struct Per_rule_s_reuse_table;
+struct reuse_rule_list;
+struct reuse_rule_list{
+reuse_rule_list():younger_(0),older_(0),reuse_rule_entry_(0),per_rule_tbl_ptr_(0){};
+reuse_rule_list*younger_;
+reuse_rule_list*older_;
+Rule_s_reuse_entry*reuse_rule_entry_;
+Per_rule_s_reuse_table*per_rule_tbl_ptr_;
+};
+struct Rule_s_reuse_entry{
+reuse_rule_list its_linked_list_;
+CAbs_lr1_sym*rule_;
+Rule_s_reuse_entry():rule_(0){};
+~Rule_s_reuse_entry(){
+if(rule_==0)return;
+delete rule_;
+};
+};
+
+struct Per_rule_s_reuse_table{
+reuse_rule_list*in_use_list_;
+reuse_rule_list*for_use_list_;
+Per_rule_s_reuse_table():in_use_list_(0),for_use_list_(0){};
+};
+
+struct Fsm_rules_reuse_table{
+int no_rules_entries_;
+Per_rule_s_reuse_table*per_rule_s_table_[1];
+};
+
+//#line 1 "/usr/local/yacco2/library/fsm_tbls.w"
+
+
+
+
+
+
+
+/*:104*//*106:*/
+//#line 63 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct State{
+yacco2::UINT state_no__;
+yacco2::Shift_entry*parallel_shift__;
+yacco2::Shift_entry*all_shift__;
+yacco2::Shift_entry*inv_shift__;
+yacco2::Shift_entry*proc_call_shift__;
+yacco2::Shift_tbl*shift_tbl_ptr__;
+yacco2::Reduce_tbl*reduce_tbl_ptr__;
+yacco2::State_s_thread_tbl*state_s_thread_tbl__;
+yacco2::Type_pc_fnct_ptr proc_call_addr__;
+yacco2::Shift_entry*questionable_shift__;
+};
+
+/*:106*//*107:*/
+//#line 102 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct Shift_entry{
+yacco2::USINT id__;
+yacco2::State*goto__;
+};
+struct Shift_tbl{
+yacco2::USINT no_entries__;
+yacco2::Shift_entry first_entry__[1];
+};
+
+/*:107*//*108:*/
+//#line 118 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct Reduce_entry{
+yacco2::Set_tbl*la_set__;
+yacco2::USINT rhs_id__;
+};
+struct Reduce_tbl{
+yacco2::USINT no_entries__;
+yacco2::Reduce_entry first_entry__[1];
+};
+
+
+/*:108*//*112:*/
+//#line 484 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct Thread_entry{
+yacco2::KCHARP thread_fnct_name__;
+yacco2::Type_pp_fnct_ptr thread_fnct_ptr__;
+yacco2::USINT thd_id__;
+yacco2::Type_pc_fnct_ptr proc_thread_fnct_ptr__;
+};
+
+/*:112*//*113:*/
+//#line 493 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct thread_array_record{
+yacco2::USINT no_entries__;
+yacco2::Thread_entry*first_entry__[1];
+};
+/*:113*//*114:*/
+//#line 507 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct State_s_thread_tbl{
+yacco2::USINT no_entries__;
+yacco2::Type_pp_fnct_ptr ar_fnct_ptr__;
+yacco2::ULINT(*thd_id_bit_map__);
+yacco2::Thread_entry*first_entry__[1];
+};
+
+/*:114*//*115:*/
+//#line 528 "/usr/local/yacco2/library/fsm_tbls.w"
+
+struct thd_ids_having_T{
+yacco2::ULINT first_thd_id__[1];
+};
+struct T_array_having_thd_ids{
+yacco2::USINT no_of_T__;
+yacco2::thd_ids_having_T*first_entry__[1];
+};
+
+//#line 1 "/usr/local/yacco2/library/fsm.w"
+
+
+
+
+
+
+
+/*:115*//*117:*/
+//#line 21 "/usr/local/yacco2/library/fsm.w"
+
+class CAbs_fsm{
+public:
+virtual void op()= 0;
+virtual bool failed()= 0;
+yacco2::KCHARP id();
+yacco2::KCHARP version();
+yacco2::KCHARP date();
+bool debug();
+yacco2::KCHARP comments();
+yacco2::KCHARP gened_date();
+yacco2::State*start_state();
+virtual~CAbs_fsm();
+virtual void reduce_rhs_of_rule
+(yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry**Recycled_rule)= 0;
+yacco2::Parser*parser();
+void parser(yacco2::Parser&A);
+void find_a_recycled_rule
+(Per_rule_s_reuse_table*Reuse_rule_table
+,Rule_s_reuse_entry**Reuse_rule_entry);
+void recycle_rule(Rule_s_reuse_entry*Rule_to_recycle);
+protected:
+CAbs_fsm(yacco2::KCHARP Id
+,yacco2::KCHARP Version
+,yacco2::KCHARP Date
+,bool Debug
+,yacco2::KCHARP Comments
+,yacco2::KCHARP Gened_date
+,yacco2::State&Start_state
+);
+public:
+yacco2::KCHARP id__;
+yacco2::KCHARP version__;
+yacco2::KCHARP date__;
+bool debug__;
+yacco2::KCHARP comments__;
+yacco2::KCHARP gened_date__;
+yacco2::State*start_state__;
+yacco2::Parser*parser__;
+};
+/*:117*//*171:*/
+//#line 49 "/usr/local/yacco2/library/thread.w"
+
+struct worker_thread_blk{
+worker_thread_blk();
+worker_thread_blk(yacco2::Parser*Grammar_s_parser,yacco2::Parser*Calling_parser);
+yacco2::Parser*grammar_s_parser__;
+int status__;
+int run_cnt__;
+int thd_id__;
+void set_waiting_for_work();
+};
+/*:171*//*184:*/
+//#line 327 "/usr/local/yacco2/library/thread.w"
+
+struct Caccept_parse{
+Caccept_parse
+(yacco2::Parser&Th_reporting_success
+,yacco2::CAbs_lr1_sym&Accept_token
+,yacco2::UINT Accept_token_pos
+,yacco2::CAbs_lr1_sym&La_token
+,yacco2::UINT La_token_pos);
+Caccept_parse();
+void initialize_it();
+void fill_it(Caccept_parse&Accept_parse);
+void fill_it(yacco2::Parser&Th_reporting_success
+,yacco2::CAbs_lr1_sym&Accept_token
+,yacco2::UINT Accept_token_pos
+,yacco2::CAbs_lr1_sym&La_token
+,yacco2::UINT La_token_pos);
+
+~Caccept_parse();
+yacco2::Parser*th_reporting_success__;
+yacco2::CAbs_lr1_sym*accept_token__;
+yacco2::UINT accept_token_pos__;
+yacco2::CAbs_lr1_sym*la_token__;
+yacco2::UINT la_token_pos__;
+};
+
+/*:184*//*222:*/
+//#line 28 "/usr/local/yacco2/library/parser.w"
+
+struct Parser{
+enum parse_result{erred,accepted,reduced,paralleled,no_thds_to_run};
+/*223:*/
+//#line 65 "/usr/local/yacco2/library/parser.w"
+
+yacco2::CAbs_fsm*fsm_tbl__;
+yacco2::KCHARP thread_name__;
+yacco2::Thread_entry*thread_entry__;
+yacco2::token_container_type*token_supplier__;
+yacco2::token_container_type*token_producer__;
+yacco2::token_container_type*recycle_bin__;
+yacco2::token_container_type*error_queue__;
+yacco2::lr_stk parse_stack__;
+yacco2::CAbs_lr1_sym*current_token__;
+yacco2::UINT current_token_pos__;
+yacco2::CAbs_lr1_sym*start_token__;
+yacco2::UINT start_token_pos__;
+yacco2::tble_lkup_type*sym_lookup_functor__;
+bool abort_parse__;
+bool stop_parse__;
+bool use_all_shift__;
+bool has_questionable_shift_occured__;
+yacco2::Parser*from_thread__;
+yacco2::THREAD_NO thread_no__;
+yacco2::COND_VAR cv__;
+yacco2::MUTEX mu__;
+int cv_cond__;
+yacco2::worker_thread_blk th_blk__;
+
+yacco2::pp_accept_queue_type pp_accept_queue__;
+int pp_accept_queue_idx__;
+yacco2::INT th_active_cnt__;
+yacco2::INT th_accepting_cnt__;
+
+yacco2::Parser*pp_requesting_parallelism__;
+yacco2::INT msg_id__;
+yacco2::Caccept_parse*arbitrated_token__;
+yacco2::Caccept_parse pp_rsvp__;
+int no_competing_pp_ths__;
+int no_requested_ths_to_run__;
+yacco2::yacco2_threads_to_run_type th_lst__;
+bool launched_as_procedure__;
+USINT supplier_r_w_cnt__;
+
+/*:223*/
+//#line 31 "/usr/local/yacco2/library/parser.w"
+
+Parser(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::token_container_type*Token_supplier
+,yacco2::token_container_type*Token_producer
+,yacco2::UINT Token_supplier_key_pos= Token_start_pos
+,yacco2::token_container_type*Error_queue= 0
+,yacco2::token_container_type*Recycle_bin= 0
+,yacco2::tble_lkup_type*Sym_lookup_functor= 0
+,bool Use_all_shift= ON);
+Parser(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::Thread_entry&Thread_entry
+,yacco2::Parser*Calling_parser);
+Parser(yacco2::CAbs_fsm&Fsm_tbl
+,yacco2::Parser*Calling_parser);
+~Parser();
+/*226:*/
+//#line 134 "/usr/local/yacco2/library/parser.w"
+
+parse_result parse();
+void shift(yacco2::Shift_entry&SE);
+void invisible_shift(yacco2::Shift_entry&SE);
+void questionable_shift(yacco2::Shift_entry&SE);
+void all_shift(yacco2::Shift_entry&SE);
+void parallel_shift(yacco2::CAbs_lr1_sym&Accept_terminal);
+void proc_call_shift(yacco2::CAbs_lr1_sym&Accept_terminal);
+parse_result reduce(yacco2::Reduce_entry&RE);
+parse_result parallel_parse();
+parse_result proc_call_parse();
+parse_result start_parallel_parsing(yacco2::State&S);
+THR_result chained_proc_call_parsing(yacco2::State&S);
+parse_result start_manually_parallel_parsing(yacco2::USINT Thread_id);
+yacco2::Shift_entry*find_cur_T_shift_entry();
+yacco2::Shift_entry*find_R_or_paralleled_T_shift_entry(yacco2::USINT Enum_id);
+yacco2::Reduce_entry*find_questionable_sym_in_reduce_lookahead();
+yacco2::Reduce_entry*find_reduce_entry();
+yacco2::Reduce_entry*find_parallel_reduce_entry();
+yacco2::Reduce_entry*find_proc_call_reduce_entry();
+
+/*:226*/
+//#line 46 "/usr/local/yacco2/library/parser.w"
+
+/*227:*/
+//#line 156 "/usr/local/yacco2/library/parser.w"
+
+yacco2::token_container_type*token_supplier();
+void set_token_supplier(yacco2::token_container_type&Token_supplier);
+yacco2::token_container_type*token_producer();
+void set_token_producer(yacco2::token_container_type&Token_producer);
+yacco2::token_container_type*recycle_bin();
+void set_recycle_bin(yacco2::token_container_type&Recycle_bin);
+void set_error_queue(yacco2::token_container_type&Error_queue);
+yacco2::token_container_type*error_queue();
+void add_token_to_supplier(yacco2::CAbs_lr1_sym&Token);
+void add_token_to_producer(yacco2::CAbs_lr1_sym&Token);
+void add_token_to_recycle_bin(yacco2::CAbs_lr1_sym&Token);
+void add_token_to_error_queue(yacco2::CAbs_lr1_sym&Token);
+
+/*:227*/
+//#line 47 "/usr/local/yacco2/library/parser.w"
+
+/*229:*/
+//#line 184 "/usr/local/yacco2/library/parser.w"
+
+void get_shift_s_next_token();
+yacco2::CAbs_lr1_sym*get_next_token();
+yacco2::CAbs_lr1_sym*get_spec_token(yacco2::UINT Pos);
+yacco2::CAbs_lr1_sym*current_token();
+yacco2::CAbs_lr1_sym*start_token();
+void set_start_token(yacco2::CAbs_lr1_sym&Start_tok);
+yacco2::UINT start_token_pos();
+void set_start_token_pos(yacco2::UINT Pos);
+void reset_current_token(yacco2::UINT Pos);
+void override_current_token(yacco2::CAbs_lr1_sym&Current_token,yacco2::UINT Pos);
+void override_current_token_pos(yacco2::UINT Pos);
+yacco2::UINT current_token_pos();
+
+/*:229*/
+//#line 48 "/usr/local/yacco2/library/parser.w"
+
+/*228:*/
+//#line 171 "/usr/local/yacco2/library/parser.w"
+
+void cleanup_stack_due_to_abort();
+yacco2::lr_stk*parse_stack();
+yacco2::INT no_items_on_stack();
+yacco2::Cparse_record*get_stack_record(yacco2::INT Pos);
+yacco2::Cparse_record*top_stack_record();
+void remove_from_stack(yacco2::INT No_to_remove);
+void add_to_stack(yacco2::State&State_no);
+yacco2::INT current_stack_pos();
+void clear_parse_stack();
+yacco2::CAbs_lr1_sym*get_spec_stack_token(yacco2::UINT Pos);
+
+/*:228*/
+//#line 49 "/usr/local/yacco2/library/parser.w"
+
+/*225:*/
+//#line 124 "/usr/local/yacco2/library/parser.w"
+
+void set_use_all_shift_on();
+void set_use_all_shift_off();
+bool use_all_shift();
+bool abort_parse();
+void set_abort_parse(bool Abort);
+bool stop_parse();
+void set_stop_parse(bool Stop);
+
+/*:225*/
+//#line 50 "/usr/local/yacco2/library/parser.w"
+
+
+yacco2::CAbs_fsm*fsm_tbl();
+void fsm_tbl(yacco2::CAbs_fsm*Fsm_tbl);
+
+yacco2::tble_lkup_type*sym_lookup_functor();
+Parser::parse_result parallel_parse_successful();
+Parser::parse_result parallel_parse_unsuccessful();
+Parser::parse_result proc_call_parse_successful();
+Parser::parse_result proc_call_parse_unsuccessful();
+bool spawn_thread_manually(yacco2::USINT Thread_id);
+/*224:*/
+//#line 106 "/usr/local/yacco2/library/parser.w"
+
+yacco2::Parser*from_thread();
+yacco2::KCHARP thread_name();
+yacco2::Thread_entry*thread_entry();
+void post_event_to_requesting_grammar
+(yacco2::Parser&To_thread
+,yacco2::INT Message_id
+,yacco2::Parser&From_thread);
+void wait_for_event();
+bool start_threads();
+THR_result start_procedure_call(yacco2::State&S);
+void put_T_into_accept_queue(yacco2::Caccept_parse&Parm);
+void clean_up();
+void call_arbitrator(yacco2::Type_pp_fnct_ptr The_judge);
+bool have_all_threads_reported_back();
+void abort_accept_queue_irregularites(yacco2::Caccept_parse&Calling_parm);
+void abort_no_selected_accept_parse_in_arbitrator();
+/*:224*/
+//#line 61 "/usr/local/yacco2/library/parser.w"
+
+};
+
+/*:222*//*429:*/
+//#line 119 "/usr/local/yacco2/library/runtime_env.w"
+
+struct Source_info{
+Source_info(yacco2::KCHARP File,yacco2::UINT Line);
+void w_info();
+yacco2::KCHARP file__;
+yacco2::INT line__;
+};
+struct Yacco2_faulty_precondition:Source_info{
+Yacco2_faulty_precondition(yacco2::KCHARP Message
+,yacco2::KCHARP File= __FILE__
+,yacco2::UINT Line= __LINE__);
+};
+
+struct Yacco2_faulty_postcondition:Source_info{
+Yacco2_faulty_postcondition(yacco2::KCHARP Message
+,yacco2::KCHARP File= __FILE__
+,yacco2::UINT Line= __LINE__);
+};
+
+/*:429*//*443:*/
+//#line 147 "/usr/local/yacco2/library/tree.w"
+
+struct ast_postfix:public ast_stack{
+ast_postfix(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:443*//*444:*/
+//#line 156 "/usr/local/yacco2/library/tree.w"
+
+struct ast_prefix:public ast_stack{
+ast_prefix(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:444*//*445:*/
+//#line 167 "/usr/local/yacco2/library/tree.w"
+
+struct ast_postfix_1forest:public ast_stack{
+ast_postfix_1forest(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:445*//*446:*/
+//#line 177 "/usr/local/yacco2/library/tree.w"
+
+struct ast_prefix_1forest:public ast_stack{
+ast_prefix_1forest(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:446*//*447:*/
+//#line 187 "/usr/local/yacco2/library/tree.w"
+
+struct ast_breadth_only:public ast_stack{
+ast_breadth_only(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:447*//*448:*/
+//#line 197 "/usr/local/yacco2/library/tree.w"
+
+struct ast_prefix_wbreadth_only:public ast_stack{
+ast_prefix_wbreadth_only(AST&Forest,Type_AST_functor*Action
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void exec();
+void advance();
+};
+
+/*:448*//*449:*/
+//#line 216 "/usr/local/yacco2/library/tree.w"
+
+struct ast_moonwalk_looking_for_ancestors{
+ast_moonwalk_looking_for_ancestors
+(AST&Moonchild,USINT Goal,Type_AST_ancestor_list&Ancestors,Type_AST_functor*Functor
+,yacco2::int_set_type*Filter= 0,bool Accept_opt= true);
+void let_s_moonwalk();
+bool deal_with_parent(AST*Parent);
+functor_result_type let_s_functor(AST*Parent);
+bool deal_with_functor(AST*Parent);
+AST*moonchild_;
+USINT goal_;
+Type_AST_ancestor_list*ancestor_list_;
+Type_AST_functor*functor_;
+yacco2::int_set_type*filter_;
+bool filter_type_;
+bool filter_provided_;
+};
+
+/*:449*//*526:*/
+//#line 1753 "/usr/local/yacco2/library/tree.w"
+
+struct insert_back_recycled_items_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+void insert_node(yacco2::AST&Inode);
+yacco2::AST*new_root();
+void insert_before();
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+yacco2::AST*insert_node_;
+yacco2::AST*new_root_;
+};
+
+/*:526*//*527:*/
+//#line 1769 "/usr/local/yacco2/library/tree.w"
+
+struct tok_can_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+};
+/*:527*//*528:*/
+//#line 1774 "/usr/local/yacco2/library/tree.w"
+
+struct tok_can_ast_no_stop_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+};
+/*:528*//*529:*/
+//#line 1779 "/usr/local/yacco2/library/tree.w"
+
+struct tok_can_ast_bypass_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+};
+/*:529*//*530:*/
+//#line 1784 "/usr/local/yacco2/library/tree.w"
+
+struct prt_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+typedef void(*PF)(AST*);
+prt_ast_functor(PF Func,std::ofstream*Ofile= 0);
+void reset_cnt();
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+PF prt_funct_;
+yacco2::INT cnt_;
+char how_[3];
+std::ofstream*ofile_;
+};
+/*:530*//*531:*/
+//#line 1801 "/usr/local/yacco2/library/tree.w"
+
+struct fire_a_func_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+typedef void(*PF)(AST*);
+fire_a_func_ast_functor(PF Func);
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+PF a_funct_;
+};
+/*:531*//*532:*/
+//#line 1814 "/usr/local/yacco2/library/tree.w"
+
+struct str_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+typedef void(*PF)(AST*,Type_AST_functor*);
+str_ast_functor(PF Func);
+std::string source_str_;
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+PF prt_funct_;
+char how_[3];
+};
+/*:532*//*533:*/
+//#line 1829 "/usr/local/yacco2/library/tree.w"
+
+struct remove_unwanted_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+void possible_delete();
+~remove_unwanted_ast_functor();
+
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+};
+
+/*:533*/
+//#line 459 "/usr/local/yacco2/library/intro.w"
+
+/*22:*/
+//#line 388 "/usr/local/yacco2/library/intro.w"
+
+
+/*:22*//*46:*/
+//#line 93 "/usr/local/yacco2/library/set.w"
+
+extern void create_set_entry(yacco2::USINT Enum_id,yacco2::Set_entry&Set);
+
+/*:46*//*140:*/
+//#line 104 "/usr/local/yacco2/library/wthread.w"
+
+extern void CREATE_MUTEX(yacco2::MUTEX&Mu);
+extern void LOCK_MUTEX(yacco2::MUTEX&Mu);
+extern void UNLOCK_MUTEX(yacco2::MUTEX&Mu);
+extern
+void LOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text);
+extern
+void UNLOCK_MUTEX_OF_CALLED_PARSER(yacco2::MUTEX&Mu,yacco2::Parser&parser,const char*Text);
+extern void DESTROY_MUTEX(yacco2::MUTEX&Mu);
+extern void CREATE_COND_VAR(yacco2::COND_VAR&Cv);
+extern void COND_WAIT(yacco2::COND_VAR&Cv,yacco2::MUTEX&Mu,yacco2::Parser&parser);
+extern void SIGNAL_COND_VAR(yacco2::Parser&To_thread,yacco2::Parser&parser);
+extern void DESTROY_COND_VAR(yacco2::COND_VAR&Cv);
+extern yacco2::THR_result
+CREATE_THREAD(yacco2::Type_pp_fnct_ptr Thread,yacco2::Parser&Parser_requesting_parallelism);
+extern THREAD_NO THREAD_SELF();
+
+
+/*:140*//*173:*/
+//#line 71 "/usr/local/yacco2/library/thread.w"
+
+extern void Parallel_threads_shutdown(yacco2::Parser&PP);
+extern yacco2::THR
+_YACCO2_CALL_TYPE
+AR_for_manual_thread_spawning(yacco2::Parser*Caller_pp);
+extern yacco2::Type_pp_fnct_ptr PTR_AR_for_manual_thread_spawning;
+
+/*:173*//*211:*/
+//#line 820 "/usr/local/yacco2/library/thread.w"
+
+extern void find_threads_by_first_set
+(yacco2::USINT Current_T_id
+,yacco2::yacco2_threads_to_run_type&Th_list
+,yacco2::State_s_thread_tbl&P_tbl);
+
+/*:211*//*427:*/
+//#line 77 "/usr/local/yacco2/library/runtime_env.w"
+
+extern void Delete_tokens(yacco2::TOKEN_GAGGLE&Tks,bool Do_delete= OFF);
+extern void Clear_yacco2_opened_files_dictionary();
+
+
+/*:427*//*632:*/
+//#line 1274 "/usr/local/yacco2/library/macros.w"
+
+extern bool trace_parser_env(Parser*parser,bool Trace_type);
+/*:632*/
+//#line 460 "/usr/local/yacco2/library/intro.w"
+
+/*25:*/
+//#line 400 "/usr/local/yacco2/library/intro.w"
+
+};
+
+/*:25*/
+//#line 461 "/usr/local/yacco2/library/intro.w"
+
+namespace NS_yacco2_k_symbols{
+extern yacco2::CAbs_lr1_sym*PTR_LR1_questionable_shift_operator__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_eog__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_eolr__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_parallel_operator__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_fset_transience_operator__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_invisible_shift_operator__;
+extern yacco2::CAbs_lr1_sym*PTR_LR1_all_shift_operator__;
+};
+/*13:*/
+//#line 295 "/usr/local/yacco2/library/intro.w"
+
+
+/*:13*//*630:*/
+//#line 1237 "/usr/local/yacco2/library/macros.w"
+
+#define sstrace_parallel_supportss(ssPROC_NAME) \
+if(yacco2::YACCO2_TLEX__){\
+ Parser* _ap = parser_of_parallel_support(); \
+ yacco2::lrclog << "YACCO2_TLEX__::" << pthread_self() << "::" \
+ << _ap->fsm_tbl__->id__ << "::" \
+ << ' ' << #ssPROC_NAME << " this:: " << this << std::endl; \
+ yacco2::lrclog << "\tYACCO2_TLEX__:: parser_of_parallel_support:: " \
+ << _ap \
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog << "\tself thread id:: " << thread_no__\
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog \
+ << "\tYACCO2_TLEX__:: embedded thread id:: " \
+ << embedded_thread_no()\
+ << FILE_LINE<< std::endl;\
+ }
+
+/*:630*//*631:*/
+//#line 1257 "/usr/local/yacco2/library/macros.w"
+
+#define sstrace_parallel_support_envss(ssPROC_NAME) \
+if(yacco2::YACCO2_TLEX__){\
+ yacco2::lrclog << "YACCO2_TLEX__::" << GetCurrentThreadid__ << "::" \
+ << fsm_tbl__->id__ << "::" \
+ << ' ' << #ssPROC_NAME << " this:: " << this \
+ << FILE_LINE<< std::endl; \
+ yacco2::lrclog << "\tYACCO2_TLEX__:: self thread id:: "\
+ << thread_no__ \
+ << FILE_LINE<< std::endl;\
+ }
+
+/*:631*/
+//#line 471 "/usr/local/yacco2/library/intro.w"
+
+#endif
+
+
+/*:35*/
diff --git a/web/yacco2/library/yacco2_compile_symbols.h b/web/yacco2/library/yacco2_compile_symbols.h
new file mode 100644
index 0000000000..6077461eab
--- /dev/null
+++ b/web/yacco2/library/yacco2_compile_symbols.h
@@ -0,0 +1,39 @@
+/*
+ file: yacco2_compile_symbols.h
+ The symbols below may also be imported into your compiler
+ using switches
+ THREAD_LIBRARY_TO_USE__ values
+ 1 - Microsoft NT windows thread library
+ 0 - Pthread POSIX thread library
+ TRACE__ define if u want to trace
+ *
+ * make visible if porting to HP's VMS
+ *
+ VMS__ if defined corrects the pthread library weaknesses
+ VMS_PTHREAD_STACK_SIZE__ 1024*128
+*/
+#ifndef __yacco2_compile_symbols_h__
+#define __yacco2_compile_symbols_h__ 0
+//#define VMS__ 1
+//#define VMS_PTHREAD_STACK_SIZE__ 1024*4*256// multiple of k per thread : proc calls need larger stack or crash
+#define THREAD_LIBRARY_TO_USE__ 0 // MUST BE DEFINED:
+/*
+Debug switches: they are now global variables --- not compile time macro symbols!
+U can define them yourself or use the YACCO2_define_trace_variables macro
+Eg. put below macro in prefix of your program to define variables:
+YACCO2_define_trace_variables()
+The trace variables are housed within yacco2 namespace.
+Don't trace has a 0 value while trace is set to 1 as illustrated below.
+Examples of setting variables
+yacco2::YACCO2_AR__ = 1; // trace arbitrator(s) when debug = "true" in grammar
+using namespace yacco2;
+YACCO2_TLEX__ = 1; // trace grammar macros of emitted rules etc
+YACCO2_THP__ = 1; // track how the thread library works in dispatching
+YACCO2_MSG__ = 1; // trace messages between threads
+YACCO2_T__ = 1; // trace Terminals
+YACCO2_TH__ = 1; // trace thread code when debug = "true" in grammar
+YACCO2_MU_TRACING__ = 1; // trace mutex acquire / release tracing mutex
+YACCO2_MU_TH_TBL__ = 1; // trace mutex acquire / release thread table
+YACCO2_MU_GRAMMAR__ = 1; // trace mutex acquire / release in grammar
+*/
+#endif
diff --git a/web/yacco2/library/yacco2_macros.h b/web/yacco2/library/yacco2_macros.h
new file mode 100644
index 0000000000..6799281fa9
--- /dev/null
+++ b/web/yacco2/library/yacco2_macros.h
@@ -0,0 +1,24 @@
+/*12:*/
+T_CTOR(A,B,C,D,E)
+id__= A;
+enumerated_id__= B;
+dtor__= C;
+//= 0;
+abs_parser__= 0;
+auto_delete__= D;
+affected_by_abort__= E;
+tok_co_ords__.external_file_id__= 0;
+tok_co_ords__.rc_pos__= 0;
+
+T_CTOR_RW(A,B,C,D,E,F,G)
+id__= A;
+enumerated_id__= B;
+dtor__= C;
+//= 0;
+abs_parser__= 0;
+auto_delete__= D;
+affected_by_abort__= E;
+tok_co_ords__.external_file_id__= F;
+tok_co_ords__.rc_pos__= G;
+
+/*:12*/
diff --git a/web/yacco2/library/yacco2_typedefs.h b/web/yacco2/library/yacco2_typedefs.h
new file mode 100644
index 0000000000..bd665e1aa0
--- /dev/null
+++ b/web/yacco2/library/yacco2_typedefs.h
@@ -0,0 +1,19 @@
+/*15:*/
+typedef const char*KCHARP;
+typedef unsigned char UCHAR;
+typedef char CHAR;
+typedef UCHAR*UCHARP;
+typedef CHAR*CHARP;
+typedef const void*KVOIDP;
+typedef void*VOIDP;
+typedef int INT;
+typedef unsigned int UINT;
+typedef unsigned int ULINT;
+typedef void(*FN_DTOR)(VOIDP This,VOIDP Parser);
+typedef UCHARP LA_set_type;
+typedef LA_set_type LA_set_ptr;
+
+
+
+
+/*:15*/
diff --git a/web/yacco2/license.w b/web/yacco2/license.w
new file mode 100644
index 0000000000..c683267af8
--- /dev/null
+++ b/web/yacco2/license.w
@@ -0,0 +1,16 @@
+@q file: license.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** License.\fbreak
+Gened date: \today\fbreak
+Copyright \copyright{} 1998-2015 Dave Bone\fbreak
+\fbreak
+This Source Code Form is subject to the terms of the Mozilla Public
+License, v. 2.0. If a copy of the MPL was not distributed with this
+file, You can obtain one at http://mozilla.org/MPL/2.0/.
+\fbreak
+
diff --git a/web/yacco2/o2linker/Makefile b/web/yacco2/o2linker/Makefile
new file mode 100644
index 0000000000..8cec4c5caa
--- /dev/null
+++ b/web/yacco2/o2linker/Makefile
@@ -0,0 +1,86 @@
+## -*- Makefile -*-
+##
+## User: root
+## Time: Apr 17, 2007 4:35:39 PM
+## Makefile created by Sun Studio.
+##
+## This file is generated automatically.
+##
+
+#### Compiler and tool definitions shared by all build targets #####
+CCC = CC
+CXX = CC
+BASICOPTS = -fast -xtarget=opteron -m64 -mt #-xa
+CCFLAGS = $(BASICOPTS) -I'/yacco2/o2linker' -I'/yacco2/compiler/grammars' -I'/yacco2/library/grammars' -I'/yacco2/library'
+CXXFLAGS = $(BASICOPTS)
+CCADMIN = CCadmin -clean
+
+LDLIBS_o2 = -L '/yacco2/library/yacco2build/dist/Release/Sun12-Solaris-x86' -l yacco2 \
+-L '/yacco2/compiler/grammars/o2grammarsbuild/dist/Release/Sun12-Solaris-x86' -l yacco2grammars
+# Define the target directories.
+TARGETDIR_linker=Sun-x86-Solaris
+
+all: $(TARGETDIR_linker)/o2linker
+## Target: linker
+OBJS_linker = $(TARGETDIR_linker)/o2linker.o\
+ $(TARGETDIR_linker)/common_externs.o \
+ $(TARGETDIR_linker)/yacco2_extn.o \
+ $(TARGETDIR_linker)/o2linker_defs.o \
+ $(TARGETDIR_linker)/yacco2_stbl.o
+
+# Link or archive
+$(TARGETDIR_linker)/o2linker: $(TARGETDIR_linker) $(OBJS_linker)
+ $(LINK.cc) -z muldefs -z rescan $(CCFLAGS_linker) $(CPPFLAGS_linker) -o $@ $(OBJS_linker) $(LDLIBS_linker)
+
+
+# Compile source files into .o files
+$(TARGETDIR_linker)/common_externs.o: $(TARGETDIR_linker) common_externs.cpp
+ $(COMPILE.cc) $(CCFLAGS_linker) $(CPPFLAGS_linker) -o $@ common_externs.cpp
+$(TARGETDIR_linker)/yacco2_extn.o: $(TARGETDIR_linker) yacco2_extn.cpp
+ $(COMPILE.cc) $(CCFLAGS_linker) $(CPPFLAGS_linker) -o $@ yacco2_extn.cpp
+
+$(TARGETDIR_linker)/o2linker_defs.o: $(TARGETDIR_linker) o2linker_defs.cpp
+ $(COMPILE.cc) $(CCFLAGS_linker) $(CPPFLAGS_linker) -o $@ o2linker_defs.cpp
+
+$(TARGETDIR_linker)/o2linker.o: $(TARGETDIR_linker) o2linker.cpp
+ $(COMPILE.cc) $(CCFLAGS_linker) $(CPPFLAGS_linker) -o $@ o2linker.cpp
+
+%.cpp: %.w
+ cweave o2linker.w
+ ctangle -l +e o2linker.w
+ cweave /yacco2/compiler/stbl/yacco2_stbl.w
+ ctangle -l +e /yacco2/compiler/stbl/yacco2_stbl.w
+ cweave o2linker_externs.w
+ ctangle -l +e o2linker_externs.w
+ cweave /yacco2/externals/common_externs.w
+ cweave types.w
+ ctangle -l +e types.w
+ ctangle -l +e /yacco2/externals/common_externs.w
+ sh Makefile_Edit_cweb
+
+#### Clean target deletes all generated files ####
+clean:
+ rm -f \
+ $(TARGETDIR_linker)/o2linker \
+ $(TARGETDIR_linker)/o2linker_externs.o \
+ $(TARGETDIR_linker)/yacco2_stbl.o \
+ o2linker.cpp \
+ o2linker.h \
+ o2linker_externs.cpp \
+ o2linker_externs.h \
+ common_externs.cpp \
+ common_externs.h \
+ o2linker_defs.cpp \
+ yacco2_stbl.h
+ $(CCADMIN)
+ rm -f -r $(TARGETDIR_linker)
+
+
+# Create the target directory (if needed)
+$(TARGETDIR_linker):
+ mkdir -p $(TARGETDIR_linker)
+
+# Enable dependency checking
+.KEEP_STATE:
+.KEEP_STATE_FILE:.make.state.Sun-x86-Solaris
+
diff --git a/web/yacco2/o2linker/Makefile_Edit_cweb b/web/yacco2/o2linker/Makefile_Edit_cweb
new file mode 100644
index 0000000000..87d03ba20a
--- /dev/null
+++ b/web/yacco2/o2linker/Makefile_Edit_cweb
@@ -0,0 +1,36 @@
+# Makefile_Edit_cweb
+# clean up the ctangle and cweave droppings
+# changed cwebmac.tex to include \input eplain instead of modifying before o2linker, and o2linker.tex
+# comment out #line of cweb emits
+#
+tmp=/tmp/o2linker
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+#echo '\input eplain' > $tmp/eplain.txt
+#cat $tmp/eplain.txt o2linker.tex > $tmp/o2linker.tex
+#cp $tmp/o2linker.tex o2linker.tex
+#cat $tmp/eplain.txt o2externs.tex > $tmp/o2externs.tex
+#cp $tmp/yacco2extn.tex yacco2extn.tex
+#cat $tmp/eplain.txt yacco2stbl.tex > $tmp/yacco2stbl.tex
+#cp $tmp/yacco2stbl.tex yacco2stbl.tex
+
+sed_cmd1="'-e s;^#line;//line;'"
+sed_cmd2="'-e s/^;$//'"
+
+for i in o2linker o2linker_externs common_externs o2linker_defs # comment out line reference macros
+do
+ j=$i.cpp
+ echo "correcting cweb file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+for i in o2linker o2linker_externs common_externs extndefs # comment out line reference macros of gened headers
+do
+ j=$i.h
+ echo "correcting cweb header file: $j"
+ eval "sed $sed_cmd1 $sed_cmd2 < $j > $tmp/$j"
+ cp $tmp/$j $j
+done
+rm -fr $tmp \ No newline at end of file
diff --git a/web/yacco2/o2linker/bugs.w b/web/yacco2/o2linker/bugs.w
new file mode 100644
index 0000000000..5070d81db0
--- /dev/null
+++ b/web/yacco2/o2linker/bugs.w
@@ -0,0 +1,173 @@
+@q bugs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Bugs --- ugh. Do i make them? Sure do!
+They have all the makings of Darwinism with sloppiness due
+to work overload and not enough self evaluation ... Forget the platitudes Dude. Hey it's Dave.
+The testsuite raised 3 basic programming misconceptions that should enlighten
+u the reader in your use of Yacco2.\fbreak
+\ptindent{1) posting of errors within a thread versus a standalone grammar}
+\ptindent{2) off by xxx in error token co-ordinates}
+\ptindent{3) refining of lookahead expression for common prefix recognition}
+
+@ Posting of errors within a grammar.\fbreak
+There are 2 ways to post an error within a grammar:\fbreak
+\ptindent{1) |ADD_TOKEN_TO_ERROR_QUEUE| macro or parser's |add_token_to_error_queue| procedure}
+\ptindent{2) |RSVP| macro to post the error or parser's |add_token_to_producer| procedure}
+The |ADD_TOKEN_TO_ERROR_QUEUE| route should be used only within a standalone grammar. Why?
+Due to parallelism (nondeterminism), threads can misfire but the overall parsing is fine because
+some thread will accept its parse or the calling grammar that set things in motion also
+uses the conditional parsing features of shifting over reduce.
+
+Putting an error token into the |accept queue| via |RSVP| allows
+ the calling grammar to discriminate
+by arbitration as to what token to accept.
+Then within the grammar's subrule that handles the error token,
+the syntax-directed code would post the accepted error
+as an error and possbily shutdown the parse by parser's |set_stop_parse(true)| routine.
+This allows the grammar writer more flexibitity in error handling.
+
+So the moral of this story is ``know your parsing run context''
+when posting of errors. So where's my mistake?
+I used the |RSVP| facility within a standalone grammar.
+This just shunts the error token into the output
+token queue instead of the error queue.
+
+@ Off by xxx in error token co-ordinates.\fbreak
+When posting an error, the newly created error token needs to be associated with
+the source file position. So how is this accomplished?
+Typically one uses a previous token with established co-ordinates to
+set the error token's co-ordinates via the parser's |set_rc| routine.
+
+So why the off by xxx syndrone? What co-ordinate do u associate an error with when the grammar's
+subrule uses the wild card facility ${\vert+\vert}$ to catch an error.
+Is it the |current_token| routine?
+Not really.
+Depending on the syntax-directed code context,
+this can be the lookahead token after the shift operation.
+That is, it is one past the currently shifted token on the parse stack
+ represented symbolicly by ${\vert+\vert}$.
+So use the appropriate |Sub_rule_xxx.p1__| parameter in the syntax-directed procedure
+to reference the stacked token where xxx is the
+subrule number of this subrule. |p1__| is the first component of the
+subrule's right-hand-side expression. If there are
+other components that are to be referenced, |px__| will
+have the appropriate component number replacing x.
+
+There are other facilities open to the grammar writer like the |start_token| routine
+that provides the starting token passed to the thread for parsing for co-ordinate references.
+One can also store token references within the grammar rules as parsing takes place
+so that a ``roll your own'' fiddling within contexts can be programmed: To each their own.
+
+@ Refining of lookahead expression for keyword recognition.\fbreak
+I describe this problem using a concrete example but the problem is generic
+when there are competing threads that can have common prefixes.
+If a keyword is ``emitfile'' then should it accept ``emitfilex'' when the balance ``x'' follows?
+No it should not. This is the common prefix problem where the lookahead boundary to accept or
+abort the parse was wrongly programmed.
+As theads can fine tune their lookahead expression by the grammar's
+ ``parallel-la-boundary'' statement,
+the correction is to properly program this expression.
+See the |yacco2_linker_keywords.lex| grammar for the proper lookahead expression to abort such
+a parse.
+
+@ Take 2: Teaching the teacher --- why off by xxx in error co-ordinates?.\fbreak
+In testing linker's grammars, the following came up.
+What co-ordinate does one associate with an error token when
+the ``eog'' token produces the error? Remember, the meta-terminals like eog, ${\vert.\vert}$,
+${\vert+\vert}$ have no co-ordinates associated with them as they are shared
+across all token containers.
+
+Quick review of co-ordinates: There are 4 parts to a token's co-ordinates:\fbreak
+\ptindent{1) a file number kept by Yacco2 giving the filename source of token}
+\ptindent{2) line number within the file}
+\ptindent{3) character position on the line}
+\ptindent{4) character position within the physical file returned by the I/O routine}
+Points 1 -- 3 are used for now to print out errors.
+
+Well I had to check the source code of |set_rc| procedure.
+It was programmed properly and had comments to boot describing the problem.
+|set_rc| marches back thru the token container looking for a
+token having physical co-ordinates. Call the number of moves thru the container
+the displacement. This displacement is
+summed with the character position of the referenced token
+to point to a spot on the source line.
+The other co-ordinate attributes are just copied.
+Depending on the token's length in display characters,
+the displacement
+will be xxx moves to the right of the referenced token's co-ordinates.
+This is why the error token graphic ${\uparrow}$ is offset within the error message displaying
+against the source line and character spot.
+Depending on the length of the token in display characters,
+the offset could be within the interior of the token or to the right of it.
+This offset shows that a potential overflow
+was prevented when the ``eog'' token halts the parse.
+Have a look at testsuite's ``no end-T-alphabet keyword''
+or the last test ''end-list-of-transitive-threads keyword not present '' illustrating
+this type of situation.
+
+What about the other meta-terminals?
+This is a rool-your-own-laddie. Grab whatever context u want to associate the
+co-ordinates against the error token. In the case of the ${\vert.\vert}$, the meta-epsilon
+token, u can use the |current_token()| as its co-ordinate context.
+
+Well go tell it to the Yacco2 parse library. See |set_rc| writeup.
+The moral of this tidbit? A user manual must be written. I know but this will
+be my next venture.\fbreak
+4 May 2005.
+
+@ Missed associating the root node thread to its called threads' terminals.\fbreak
+This shows how the forest and the trees (pun intended) got blurred. The scoping of
+a screen just does not allow one to view well
+a general perspective: batteries not required
+nor a camel to carry paper and a caf\'e au lait.
+
+Now the 2 errors:\fbreak
+The |visit_graph| reserved the right amount of space but I mistakenly
+thought that the container's size procedure
+gave the number of elements reserved --- nope.
+So the |visit_graph|'s check on visited became true immediately.
+
+2nd mistake had a compound logic error: the root node thread was not associated
+with the called threads' first sets ---
+which is the raison d'\^etre for all this recursion.
+The more subtle error was checking in the global terminal's set
+for the called thread existance.
+If it was present, the root node thread was bypassed in checking whether
+it should be entered into the global terminal set.
+Boy sometimes you're dump Dave --- spelling correct at the time: haha.
+
+This error should have been caught in the test suites.
+It requires a proper set of faked grammars to test out transitive closure:
+i.e., what about nested calling grammars?, various flavors of epsilon:
+a complete pass thru grammar, ${\vert.\vert}$ to boundary detection, etc.
+
+Plain and simple I was procastinating as real work on other things is building.
+The scaffolding for these other suites requires a bit more thought and much more effort.
+Ahhh self analysis watching the watched watching --- I leave this to Freud
+but it still cost 3 hours of time lost to ferret out these bloopers.
+
+Okay I'm crafting more test suites to cruise-control these esoteric conditions.
+It demonstrates the requirement of
+well calibrated test suites as a necessary dimension to programming
+along with comments as in literate programming, and pre / post constraint declarations
+within code to catch realtime strange-ites.
+Without these tested dimensions, what assurances or confidence does one have to
+ say that the code is correct? Not much but hand wavings and hot ...
+ Let's hear it for QA and its exercising regime to come out and strut itself.\fbreak
+ 11 May 2005.
+
+@ Dynamic reserve space for |Visit_graph|.\fbreak
+The |std::vector<char> Visit_graph();|
+was originally calculating the number of threads before
+reserving space via ``reserve(xxx)'' procedure.
+This is a simple way to associate a visited node for my recursive graph walks:
+stop those revisits.
+Somehow this space was getting reallocated and destroying my trees.
+So out damm dynamics and in with static array no template please...\fbreak
+Nov. 2007\fbreak
+
diff --git a/web/yacco2/o2linker/common_externs.cpp b/web/yacco2/o2linker/common_externs.cpp
new file mode 100644
index 0000000000..6c2bf5ca10
--- /dev/null
+++ b/web/yacco2/o2linker/common_externs.cpp
@@ -0,0 +1,379 @@
+/*7:*/
+//line 87 "/usr/local/yacco2/externals/common_externs.w"
+
+/*6:*/
+//line 84 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "common_externs.h"
+/*:6*/
+//line 88 "/usr/local/yacco2/externals/common_externs.w"
+
+/*8:*/
+//line 93 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+/*:8*//*10:*/
+//line 116 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void GET_CMD_LINE
+(int argc,char*argv[],const char*Holding,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+ofstream ofile;
+ofile.open(Holding,ios_base::out|ios::trunc);
+if(!ofile){
+CAbs_lr1_sym*sym= new Err_bad_filename(Holding);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+if(argc==1){
+char cmd_line[Max_buf_size];
+cout<<"Please enter Command line to process: ";
+cin.get(cmd_line,Max_buf_size,'\n');
+ofile<<cmd_line;
+ofile.close();
+return;
+}
+for(int x= 1;x<argc;++x){
+ofile<<argv[x]<<' ';
+}
+ofile.close();
+return;
+}
+
+/*:10*//*11:*/
+//line 167 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_k_symbols;
+using namespace yacco2;
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+using namespace NS_o2_err_hdlr;
+Co2_err_hdlr fsm;
+Parser pass_errors(fsm,&Errors,0);
+pass_errors.parse();
+yacco2::Parallel_threads_shutdown(pass_errors);
+
+}
+
+/*:11*//*12:*/
+//line 185 "/usr/local/yacco2/externals/common_externs.w"
+
+extern const char*DATE_AND_TIME(){
+static std::string dt;
+if(dt.empty()){
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+dt+= cTime;
+int n= dt.find('\n');
+dt[n]= ' ';
+}
+return dt.c_str();
+}
+
+/*:12*//*13:*/
+//line 199 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym){
+Xlated_sym[0]= (char)0;
+int lll= strlen(Sym_to_xlate);
+int app_ptr= 0;
+for(int x= 0;x<lll;++x,--app_ptr){
+switch(Sym_to_xlate[x]){
+case'{':{
+int sz= sizeof("\\BRACEOPEN{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACEOPEN{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'}':{
+int sz= sizeof("\\BRACECLOSE{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACECLOSE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'<':{
+int sz= sizeof("\\LTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\LTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'>':{
+int sz= sizeof("\\GTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\GTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'@':{
+int sz= sizeof("\\ATsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ATsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'|':{
+if(x+2<lll){
+if(Sym_to_xlate[x+2]!='|'){
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+}else{
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'+':{
+int sz= sizeof("\\ALLshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\ALLshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'.':{
+int sz= sizeof("\\INVshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\INVshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'?':{
+int sz= sizeof("\\QUEshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\QUEshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'|':{
+int sz= sizeof("\\PARshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PARshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'r':{
+int sz= sizeof("\\REDshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\REDshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'p':{
+int sz= sizeof("\\PROCshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PROCshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case't':{
+int sz= sizeof("\\TRAshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\TRAshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+default:{
+int sz= sizeof("\\Verticalbar{}");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar{}",sz);
+app_ptr+= sz;
+continue;
+}
+}
+}
+case'+':{
+int sz= sizeof("+");
+strncpy(&Xlated_sym[app_ptr],"+",sz);
+app_ptr+= sz;
+continue;
+}
+case'-':{
+int sz= sizeof("-");
+strncpy(&Xlated_sym[app_ptr],"-",sz);
+app_ptr+= sz;
+continue;
+}
+case'*':{
+int sz= sizeof("\\ASTERICsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ASTERICsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'#':{
+int sz= sizeof("\\NOsign ");
+strncpy(&Xlated_sym[app_ptr],"\\NOsign ",sz);
+app_ptr+= sz;
+continue;
+}
+case'&':{
+int sz= sizeof("\\AMPERsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\AMPERsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'%':{
+int sz= sizeof("\\PERCENTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\PERCENTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'$':{
+int sz= sizeof("\\DOLLARsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DOLLARsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'\\':{
+if(lll==1){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'\\':{
+if(lll==2){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+int sz= sizeof("\\");
+strcat(Xlated_sym,"\\");
+app_ptr+= sz;
+++x;
+continue;
+}
+case'"':{
+int sz= sizeof("\\DBLQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DBLQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'\'':{
+int sz= sizeof("\\RTQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\RTQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'n':{
+int sz= sizeof("\n");
+strncpy(&Xlated_sym[app_ptr],"\n",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case't':{
+int sz= sizeof("\t");
+strncpy(&Xlated_sym[app_ptr],"\t",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'r':{
+int sz= sizeof("\r");
+strncpy(&Xlated_sym[app_ptr],"\r",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'v':{
+int sz= sizeof("\v");
+strncpy(&Xlated_sym[app_ptr],"\v",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'b':{
+int sz= sizeof("\b");
+strncpy(&Xlated_sym[app_ptr],"\b",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'f':{
+int sz= sizeof("\f");
+strncpy(&Xlated_sym[app_ptr],"\f",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'a':{
+int sz= sizeof("\a");
+strncpy(&Xlated_sym[app_ptr],"\a",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'?':{
+int sz= sizeof("\?");
+strncpy(&Xlated_sym[app_ptr],"\?",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+default:{
+int sz= sizeof("\\");
+strncpy(&Xlated_sym[app_ptr],"\\",sz);
+app_ptr+= sz-1;
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x+1],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++x;
+++app_ptr;
+continue;
+}
+}
+}
+case'^':{
+int sz= sizeof("\\UPARROWsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\UPARROWsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'~':{
+int sz= sizeof("\\TILDE{}");
+strncpy(&Xlated_sym[app_ptr],"\\TILDE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'_':{
+int sz= sizeof("\\_");
+strncpy(&Xlated_sym[app_ptr],"\\_",sz);
+app_ptr+= sz;
+continue;
+}
+default:{
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++app_ptr;
+continue;
+}
+}
+}
+}
+
+/*:13*/
+//line 89 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/o2linker/common_externs.h b/web/yacco2/o2linker/common_externs.h
new file mode 100644
index 0000000000..2a6f913943
--- /dev/null
+++ b/web/yacco2/o2linker/common_externs.h
@@ -0,0 +1,28 @@
+/*4:*/
+//line 63 "/usr/local/yacco2/externals/common_externs.w"
+
+#ifndef common_extern_
+#define common_extern_ 1
+
+//line 66 "/usr/local/yacco2/externals/common_externs.w"
+
+/*5:*/
+//line 71 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "globals.h"
+#include "/usr/local/yacco2/compiler/o2/o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "o2_err_hdlr.h"
+extern
+void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern
+void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern const char*DATE_AND_TIME();
+/*:5*/
+//line 67 "/usr/local/yacco2/externals/common_externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/o2linker/globals.h b/web/yacco2/o2linker/globals.h
new file mode 100644
index 0000000000..e087b874b8
--- /dev/null
+++ b/web/yacco2/o2linker/globals.h
@@ -0,0 +1,26 @@
+/*1:*/
+#line 13 "./o2linker_types.w"
+
+
+
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+using namespace std;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+#endif
+
+/*:1*/
diff --git a/web/yacco2/o2linker/includes.w b/web/yacco2/o2linker/includes.w
new file mode 100644
index 0000000000..8236682a1f
--- /dev/null
+++ b/web/yacco2/o2linker/includes.w
@@ -0,0 +1,42 @@
+@q file: includes.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@*2 Include files.
+To start things off, these are the Standard Template Library (STL) containers
+needed by Linker, Yacco2's parse library definitions, and the specific
+grammar definitions needed by Linker.
+@<Include files@>=
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "o2linker_externs.h"
+#include "link_cleanser.h"
+#include "t_alphabet.h"
+#include "fsc_file.h"
+
+
+@ Include \Olinker header.
+@<io2@>=
+#include "o2linker.h"
+
+@*2 Create header file for \O2{}linker environment.\fbreak
+Note, the ``include search'' directories for the c++ compiler has to be supplied
+to the compiler environment used. This must include \Yacco2's library.
+@(o2linker.h@>=
+@h
+#ifndef o2linker__
+#define o2linker__ 1
+@<Include files@>;
+ @<External rtns and variables@>;
+#endif
+
+@*2 \O2{}linker implementation.\fbreak
+Start the code output to |o2linker.cpp|
+by appending its include file.
+@(o2linker.cpp@>=
+@<io2@>;
+@<accrue linker code@>;
diff --git a/web/yacco2/o2linker/intro.w b/web/yacco2/o2linker/intro.w
new file mode 100644
index 0000000000..ddd81631c5
--- /dev/null
+++ b/web/yacco2/o2linker/intro.w
@@ -0,0 +1,394 @@
+@q file: intro.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Summary of Yacco2's Linker --- threads and their bit maps.\fbreak
+\Olinker produces ``thread bit maps'' for each terminal
+ and a global table of to-run threads, and
+a linker document describing all the processed grammars
+extracted from their grammar's ``fsm-comments''
+ and their called threads.
+Standalone grammars: monolithic y, are also traversed to
+add their thread booty to the global bit maps.
+As Linker is a companion program of Yacco2, please see Yacco2's documentation
+for appropriate development of data structures that are germain to both.
+
+Linker receives its input either interactively or as a command line.
+The file to compile contains a list of grammar first set control files
+generated by Yacco2.
+Each grammar's ``first set'' file generated by Yacco2 uses a naming convention
+of the ``thread name'' supplied by the grammar's |fsm-filename| with an extension of ``fsc''
+indicating a ``first set'' control file.
+At present, Linker's inputted file is handcrafted by the grammar writer
+due to Yacco2 not having a generation database of compiled grammars.
+The below diagram shows \O2{}Linker's manufacturing assembly line for the
+``bit maps'' object file within an Unix context where the ``ld'' linker program
+resolves the globals described in the following section.
+The ``pdf'' generated document provides an overview description of all the grammars in use.
+``CC'' is the c++ compiler on my Sun Solaris work station.
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/o2linker_overview.1"}{1}{1}
+\fbreak
+\fbreak
+The ``O2linker\_doc.pdf'' document provides an index of all grammars compiled
+with comments about their claim-to-fame.
+It is a nice overview document of your language software
+when debugging or just getting a feel for all those defined grammars.
+It demarks the threaded grammars from their monolithic brethren.
+
+@*2 Globals --- those unresolved static variables used by Yacco2's library.\fbreak
+The following variables are made global for Yacco2's parse library usuage and
+placed within |yacco2| namespace:\fbreak
+\ptindent{1) |THDS_STABLE__| - vector of threads for the running}
+\ptindent{2) |T_ARRAY_HAVING_THD_IDS__| - terminals' thread sets}
+\ptindent{3) |BIT_MAPS_FOR_SALE__| - block of 32 bit words for bit map manufacture}
+\ptindent{4) |BIT_MAP_IDX__| - index used to dispense bit maps}
+\ptindent{5) |TOTAL_NO_BIT_WORDS__| - total number of words for sale}
+
+To speed things up and not be involved
+with the |malloc| issues of new / delete, |BIT_MAPS_FOR_SALE__|
+is a constant size of bit map words.
+Its size is controlled by the |TOTAL_NO_BIT_WORDS| macro and indicated at
+run-time by the |TOTAL_NO_BIT_WORDS__| global.
+Why not use c++ template containers?
+Depending on the context, they are not very efficient and in some cases they are not robust
+depending on whose compiler one uses.
+So ``roll your own'' is my mode of operandi. At least I can bark at myself
+instead of dealing with charades of good-citizenship a la Microsoft
+and their bug reporting - fixes: their stated policy of 24 hours response after submitting
+the bug report and now its 2 weeks and I'm still waiting for an acknowledgement.
+Have you seen their latest website
+for bug reporting? No direct button to send the report, only the platitude of
+how wastefull it is at their cost to deal with bug reports so make sure that you review their
+stated digest of bugs before submitting.
+How does democracy come into play when bugs are bugs: Fix them!
+Ranking bugs by developer votes is just (you substitute one of the
+following adjectives: stupid, senseless, witless, dull, brainless, weak-brained,
+muddle-headed, beef-witted, unentertaining). You get my sentiment.
+
+Each global will be developed in their appropriate sections.
+
+
+@*2 Some definitions within Linker's context.\fbreak
+What is a ``first set'' within the linker's context?\fbreak
+It is the terminals within the Start state configuration
+(aka ``Closure only'' state) of an automaton.
+There is some subtlety to this statement as an epsilon rule (empty right-hand-side),
+special terminals ${\vert+\vert}$ and ${\vert.\vert}$,
+ and threads being called
+from within the ``Closure only'' state require special treatment as their
+terminals are outside of this state.
+These situations require going into other state configurations to determine the
+terminals.
+Possibly an epsilon rule and special terminals but definitely
+threads presents a more difficult problem as the
+grammar being parsed does not have access to the called thread's first set.
+Why? A called thread is another grammar requiring compilation.
+This is why Linker is required to post process all grammars in a global context to
+calculate the first sets for grammars calling threads out of their ``Closure only'' state.
+\fbreak
+\fbreak
+Why first sets anyway?\fbreak
+Originally this was not programmed. I wanted to prove my concepts first before
+optimizing for speed.
+Reality demands that a good idea be also practical.
+What good is parsing with threads when they are orders of magnitude slower
+than the current crop of parsing paradigns?
+So to overcome slowness, first sets provide the potential of whether a thread
+should run.
+How? If the current token to be parsed is in the first set of the thread then
+launch it from the running parse context.
+This optimization prevents false thread starts.
+\fbreak
+\fbreak
+Why the name \Olinker instead of for example ``first setter'' or jet?\fbreak
+I checked to the current name of tools required to
+prepare a program as an executable.
+In a sense Linker in my mind's eye was a concept that
+brought together the loose ends of the grammars and made it ready to parse.
+First setter is also appropriate.
+\fbreak
+\fbreak
+How are first sets generated?\fbreak
+The basic problem solved by Linker is the following:
+within a grammar, threads can be called.
+If threads called are within the Start state of a grammar,
+ the grammar's
+first set now has a dependence on another thread's first set.
+Of course this call sequence is transitive: thread A can call thread B can call thread C.
+Both threads B and C can have a call thread dependency within their
+first sets.
+It is this thread dependency that the Linker resolves by applying the
+transitive closure operation across a graph of thread nodes
+to outcome the explicit first set of terminals per dependent thread.
+The output from Linker is a global vector of threads to be run, and their
+global first set bit maps optimized against all terminals. That is, what
+threads can be run by this current terminal.
+
+
+@*2 Overview of \Olinker's generated components.\fbreak
+Threads are just your normal procedures that get launched
+under the guidance of the threading facility native to the operating system
+instead of being called directly.
+Yacco2's parse library documentation goes into the detail between each
+run-time advantages threads versus procedure calls: After experimenting with a stop watch,
+the winner is the threads approach due to c++'s overhead of object birth-run-destructor cycle.
+
+Now the issue becomes ``how to determine and provide a thread id?'' that
+can be referenced globally and locally.
+Why the distinction between global and local contexts?
+Local contexts are the individual grammars that can reference other threads
+who are defined globally outside of its domain.
+As raised before, Linker's raison-d'\^etre is post-processing in a global context all the
+compiled threads.
+As the \o2 compiler / compiler processes the grammar in a local parsing context, references
+to threads within the grammar must be delayed thru indirection in its generated tables.
+This indirection comes from objects whose references are globally defined
+via the ``extern'' c(++) language facility and resolved by the appropriate language linker.
+
+An entente between the global and local contexts was signed in 1066 whereby the
+ charter of thread rights
+ defined the |Thread_entry| structure.
+Each |Thread_entry| uses a naming convention
+of: Ixxx where xxx is the thread name without its namespace drawn from the grammar.
+\o2 generates references to these thread entries whilst Linker creates the
+actual thread entry entities.
+The |Thread_entry| contains a pointer to the literal thread name
+used in \o2's tracings,
+the address to its called procedure, and its thread id that
+is a key to appropriate tables and thread maps.
+Thread ids are positive whole numbers starting from 0.
+The thread names are sorted in ascending sequence. Each thread's id is its
+relative position within this sorted sequence.
+
+
+@*2 Thread bit maps.\fbreak
+To give speed and economy of space, 32 bit words are used whereby
+each bit within a word represents the presence or absence of a specific thread.
+Why 32 bit words? This falls nicely in the current crop of CPUs.
+As 64 bit envy becomes mainstream, the number of bits per word can be changed
+by |cweb|'s macro facility.
+The mapping of a thread id into its bit map, uses modulo 32 on the thread id.
+The quotient indicates which word to access and the remainder indicates
+which specific bit within the word represents the thread.
+Due to the open number of threads being defined,
+the total number of words making up a thread map is
+specific to each parsing environment. For example, the
+current number of threads for \o2 is under 50. So, each thread map
+is 2 words long.
+
+Use of bit maps allows set processing with its operators like intersection to take place.
+Due to other optimizations to be discussed later, the number of words per bit map
+for \Yacco2's parsing library
+is calculated at runtime from the global |THDS_STABLE__| structure
+ that carries the total number of threads being
+supported for the current parse environment.
+The globals |TOTAL_NO_OF_BIT_WORDS__|, |BIT_MAPS_FOR_SALE__|, and |BIT_MAP_IDX__| are used to
+manufacture bit maps.
+Why not manufacture bit maps at time of \o2 running?
+Neither the local grammar or \o2 has any notion to what its or other threads ids are.
+Also, I did not want to impose on the grammar writer an unique thread id assignment within each
+grammar nor an approximation of the total number of threads being developed.
+
+Now, \Yacco2's runtime library has a just-in-time thread map manufacture process.
+Each parsing thread's state keeps a list of threads to possibly run but list processing
+to launch threads is too slow.
+So when a parsing thread arrives at a state configuration needing thread bit maps,
+\Yacco2's library will
+manufacture it using the globals |BIT_MAPS_FOR_SALE__| and |BIT_MAP_IDX__|.
+|BIT_MAP_IDX__| controls the current index into |BIT_MAPS_FOR_SALE__| that houses
+the words for the bit maps.
+This newly minted thread map is now available throughout the balance of the parsing
+of the thread by storing the map address in the state configuration.
+
+The below diagram depicts a partial bit map configuration:\fbreak
+\fbreak
+\fbreak
+\convertMPtoPDF{"/usr/local/yacco2/diagrams/linker.2"}{1}{1}
+\fbreak
+\fbreak
+The word 0 above is in ``big endian'' sequence composed of 4 bytes: byte 0 is the first
+covering
+the most significant bit 31 thru to bit 24 while
+byte 3 contains the least significant bit 0
+where its bits range from 7 thru to 0.
+It illustrates threads 31, 23, 15, 7, and 0 as
+being available for the running as their bits are ``turned on'' represented
+by ``1''.
+Word 1 would have the
+thread id range of 63 thru to 32. Each thread id in a word
+ is just a replay of the modulo: Q is the word map no * 32 + the R the remainder
+ indicating the specific bit from 0..31.
+
+
+@*2 Linker's languages.\fbreak
+There are 3 separate languages to be parsed by Linker:\fbreak
+\ptindent{1) Terminal alphabet --- literal names of each terminal}
+\ptindent{2) Each grammar's first set control file generated by \o2 --- xxx.fsc}
+\ptindent{3) Linker's input control file}
+
+These languages are simplistic but requires proper
+parsing that, of course, will use Yacco2's parse library.
+
+@*2 Terminal alphabet.\fbreak
+This is your terminal vocabulary defined by the 4 classes of terminals:
+LR constants, raw characters, errors, and ``user created'' terminals.
+Its content provides the literal description per terminal used for annotated
+comments in the emitted file. Their input order is also their enumeration.
+This file is outputted by \o2 when one requests the terminals to be compiled
+using one of its gen options: ``-t'' for user terminals or ``-err'' for errors.
+It uses the filename provided by the grammar's T-enumeration's file-name construct
+with a ``fsc'' extension (aka first set control).
+For the \o2 grammars, it looks like this:\fbreak
+\listing{"/usr/local/yacco2/diagrams/intro1.txt"}
+\fbreak
+The outputted vocabulary file is ``|yacco2_T_enumeration.fsc|'' from this above example.
+
+The language uses a bracketing construct
+``T-alphabet'' ... ``end-T-alphabet''
+to contain the list of terminals by their name defined by the grammar's ``terminals'' constructs:
+Lrk, raw characters, errors, and terminals.
+Below is an example:\fbreak
+\listing{"/usr/local/yacco2/diagrams/intro2.txt"}
+
+@*3 Terminal enumeration.\fbreak
+As the inputted terminals are by name, to be more efficient,
+an enumeration scheme is used whereby each terminal's relative position within this list
+starting at 0 becomes their assigned number working
+ out along the positive whole numbers.
+From the example above, the |LR1_questionable_shift_operator| terminal is assigned 0,
+|LR1_eog| terminal is assigned 1 and so on.
+In \Yacco2's documentation you'll find
+``how it applies'' this enumeration to the shifting and reducing sets
+within the automaton tables.
+The storage for these sets favors space economy over speed.
+
+@*3 First set declarations.\fbreak
+\o2 outputs per grammar their first set files having
+a file naming convention of the grammar name with an extension of ``fsc''.
+Below is ``subrule\_def.fsc'' first set control file
+outputted by the subrule\_def.lex grammar.\fbreak
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/intro3.txt"}
+
+This is a summary of what was found within the grammar.
+I included line numbers each delimited by a ``:'' to the left of the language's
+individual source lines as reference points for the
+discussion that follows.
+Lines 5 -- 11 above are the prelude declarations of the compiled grammar.
+The 2 items of interest within the prelude are the keywords ``transitive'' and ``monolithic''.
+Both use a boolean declaration of ``y'' or ``n''.
+The ``transitive'' keyword indicates whether this grammar needs transitive processing.
+The ``monolithic'' keyword indicates whether the grammar is stand alone
+or threaded.
+
+The 3 components following the prelude indicate the intent by their names.
+Lines 12 -- 13 houses the ``list-of-native-first-set-terminals'' component:
+the grammar's explicitly used terminals within its first set where there this
+example has none.
+The ``list-of-transitive-threads'' component: lines 14 -- 16
+indicates the directly called threads from their first set.
+This list is recursively called
+by assessing their called threads's ``fsc'' files:
+the transitive adjective is a memory jog to recursion.
+Please see |first_set_for_threads| grammar on how the
+thread's first set is calculated as
+there is a subtle difference caused by the \INVshift
+in its first set calculation versus
+the regular first set calcaluation of a rule or lr state.
+Lines 17 -- 28 is a cross reference
+list of used threads throughout the grammar
+ and not just the first set.
+Lines 29 -- 30 is the extracted fsm-comments from the grammar.
+It is used in generating the Linker's document indexing
+all the grammars with their comments, and
+their called thread graph with highlighting of nested grammars.
+
+@*2 Linker's control language.\fbreak
+There is not much to this control file.
+It provides the terminal vocabulary file,
+the file to output by Linker,
+a preamble that allows the grammar writer to insert code
+ahead of the ``to be emitted'' code, and finally
+the list of grammars' ``fsc'' files to process.
+Here is a sample of a handcrafted Linker control file drawn from the \o2
+parsing environment.\fbreak
+\let\setuplistinghook = \relax
+\listing{"/usr/local/yacco2/diagrams/intro4.txt"}
+\fbreak
+Basicly, Linker builds a graph by grammar and does its transitive moves to
+produce concrete first sets for each unresolved grammar or thread.
+To improve performance, a global thread map per terminal will be created
+indicating the potential threads that can be run.
+
+@*2 Catalogue of Linker's files.\fbreak
+Linker's Input files to |cweb|:\fbreak
+\ptindent{1) |o2linker.w| --- master Linker file that starts things off}
+\ptindent{2) |intro.w| --- inroduction }
+\ptindent{3) |prog.w| --- linker cweb code }
+\ptindent{4) |o2linker_externs.w| --- external procedures }
+\ptindent{5) |pms.w| --- running comments of life}
+\ptindent{6) |bugs.w| --- yep i do them}
+\ptindent{7) |testsuites.w| --- self proof of code}
+\ptindent{8) |sampleoutput.w|}
+\ptindent{9) |types.w| --- provides a way around burping output formats}
+\ptindent{10) |includes.w| --- C++ include code}
+\ptindent{11) /usr/local/yacco2/externals/common\_defs.w --- external procedures }
+\ptindent{12) |o2linker_defs.w| --- external procedures }
+
+|cweb| generated files:\fbreak
+\ptindent{1) |o2linker.h| --- linker definitions}
+\ptindent{2) |o2linker.cpp| --- linker program}
+\ptindent{3) |xxx.cpp| --- first sets for grammars provided by the input file}
+
+\Yacco2 library memorabilia:\fbreak
+\ptindent{1) yacco2 --- library namespace}
+\ptindent{2) ``\Whereyacco2/library'' --- \yacco2's library directory}
+\ptindent{3) ${< yacco2.h >}$ --- Yacco2's library header file}
+\ptindent{4) ``\Whereyacco2/library/lib/xxxx'' - xxxx is the Debug or Release of the object library}
+\ptindent{5) ``yacco2build.a'' - static \yacco2's library}
+
+Dependency files from other Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_T_enumeration.h| - terminal enumeration for \Yacco2's terminal grammar alphabet}
+\ptindent{|yacco2_err_symbols.h| - error terminal definitions from \Yacco2's grammar alphabet}
+\ptindent{|yacco2_characters.h| - raw character definitions from \Yacco2's grammar alphabet}
+\ptindent{|yacco2_k_symbols.h| - constant terminal definitions from \Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from \Yacco2's grammar alphabet}
+\ptindent{|*.h| - assorted grammar definitions from \Yacco2 to parse}
+\ptindent{|o2linker_externs.h| - external support routines common for \olinker}
+
+Dictionaries\fbreak
+\ptindent{|T_DICTIONARY| --- terminals}
+\ptindent{|GRAMMAR_DICTIONARY|}
+\ptindent{|YACCO2_STBL| --- symbol table}
+\ptindent{|USED_THREADS_LIST|}
+\ptindent{|THREAD_ID_FIRST_SET|}
+\ptindent{|T_THREAD_ID_LIST|}
+Grammars\fbreak
+\ptindent{|T_alphabet.lex|}
+\ptindent{|linker_pass3.lex| --- control file parser }
+\ptindent{|link_cleanser.lex| --- lexical grammar stripping off comments etc}
+\ptindent{|fsc_file.lex| --- syntactic grammar of fsc file}
+Document\fbreak
+\ptindent{|o2linker_doc.w| --- overall index describing the grammars processed: cweave / pdftex}
+
+@*2 Global macro definitions.\fbreak
+@d SPECULATIVE_NO_BIT_WORDS 20
+@d LR1_QUESTIONABLE_SHIFT_OPERATOR 0
+@d LR1_EOG 1
+@d LR1_EOLR 2
+@d LR1_PARALLEL_OPERATOR 3
+@d LR1_REDUCE_OPERATOR 4
+@d LR1_PROCEDURE_CALL_OPERATOR 7
+@d LR1_INVISIBLE_SHIFT_OPERATOR 5
+@d LR1_ALL_SHIFT_OPERATOR 6
+@d LR1_FSET_TRANSIENCE_OPERATOR 7
+@d SMALL_BUFFER_4K 1024*4
+@d BITS_PER_WORD 32
+@d TOTAL_NO_BIT_WORDS 1024*2*100
+
diff --git a/web/yacco2/o2linker/makefile_APPLE b/web/yacco2/o2linker/makefile_APPLE
new file mode 100644
index 0000000000..f2a08e73a2
--- /dev/null
+++ b/web/yacco2/o2linker/makefile_APPLE
@@ -0,0 +1,110 @@
+# File: makefile_APPLE
+# Why: Creates the o2linker companion to o2 compiler /compiler
+# Library placement:
+# Rlse: /usr/local/yacco2/bin/o2linker
+# Dbg: /usr/local/yacco2/bin/o2linker_debug
+# Genw: Create the pdf file: yacco2/docs
+# Generate the *.cpp files from cweb
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of o2linker with no debug support
+# Dbg --- gen the debug version of o2liner_debug
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvelous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# ---> Know where the stdc++ library resides and adjust the STDCC_dir variable
+#
+# Example: gen the debug version compiler/compiler linker: o2linker_debug using GNU make
+# cd /usr/local//yacco2/compiler/grammars
+# make Dbg -f makefile_APPLE
+# Example: gen document and cpp sub/programs
+# make Genw -f makefile_APPLE
+#
+
+O2 := /usr/local/yacco2
+#CC := /opt/local/bin/gcc-mp-4.9
+CC := clang++ #g++
+#LD := /opt/local/bin/ld
+LD := ld #apple linker
+LD_PARMS := -arch x86_64 #-macosx_version_min 10.9 -no_compact_unwind
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+Prg := o2linker
+Compile_opts := -c -pthread -arch x86_64 #-frepo -fno-implicit-templates -fno-rtti
+else
+O2_target_dir := Debug
+Prg := o2linker_debug
+Compile_opts := -c -g -pthread -arch x86_64
+endif
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_bin := $(Base_o2)/bin
+O2_eternals := $(Base_o2)/externals
+O2_docs := $(Base_o2)/docs
+O2_lib := $(Base_o2)/library
+O2_lib_grms := $(Base_o2)/library/grammars
+O2_cc_grms := $(Base_o2)/compiler/grammars
+O2_cc := $(Base_o2)/compiler/o2
+O2_includes := -I'$(O2_cc_grms)' -I'$(O2_lib)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_lib)/lib/$(O2_target_dir)
+CC_lib := c++
+
+##CC_lib := stdc++ #gnu c++
+LD_PARMS := -arch x86_64 -macosx_version_min 10.9 #-stack_size 0x2000000 -no_compact_unwind
+
+#STDCC_dir := -L/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/
+##STDCC_dir := -L/opt/local/lib/gcc49/ #gnu c++
+STDCC_dir := -L/usr/lib/
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY Move_o2linker
+Dbg: YYY Move_o2linker
+YYY:
+ $(CC) $(Compile_opts) $(O2_includes) o2linker.cpp -o $(Prg).o
+ $(CC) $(Compile_opts) $(O2_includes) common_externs.cpp -o common_externs.o
+ $(CC) $(Compile_opts) $(O2_includes) o2linker_externs.cpp -o o2linker_externs.o
+ $(CC) $(Compile_opts) $(O2_includes) o2linker_defs.cpp -o o2linker_defs.o
+ $(LD) $(LD_PARMS) -o $(Prg) $(STDCC_dir) $(O2_lib_directories) $(O2_req_libraries) -l$(CC_lib) -lpthread o2linker_externs.o o2linker_defs.o common_externs.o $(Prg).o
+
+Move_o2linker:
+ mv $(Prg) $(O2_bin)
+ rm *.o
+
+Genw:
+ cweave o2linker_types
+ pdftex o2linker_types
+ mv o2linker_types.pdf $(O2_docs)
+ cweave o2linker
+ pdftex o2linker
+ mv o2linker.pdf $(O2_docs)
+ cweave $(O2_eternals)/common_externs
+ pdftex common_externs
+ mv common_externs.pdf $(O2_docs)
+ cweave o2linker_externs
+ pdftex o2linker_externs
+ mv o2linker_externs.pdf $(O2_docs)
+ ctangle -l +e $(O2_eternals)/common_externs
+ ctangle -l +e o2linker_externs
+ ctangle -l +e o2linker_defs
+ ctangle -l +e o2linker
+ ctangle -l +e o2linker_types
+ sh Makefile_Edit_cweb
+ rm *.idx
+ rm *.scn
+ rm *.toc
+ rm *.tex
+ rm *.log
+ rm *.c
+
diff --git a/web/yacco2/o2linker/makefile_GNU b/web/yacco2/o2linker/makefile_GNU
new file mode 100644
index 0000000000..12067d8a97
--- /dev/null
+++ b/web/yacco2/o2linker/makefile_GNU
@@ -0,0 +1,82 @@
+# File: makefile_GNU
+# Why: Creates the o2linker companion to o2 compiler /compiler
+# Library placement:
+# Rlse: /usr/local/yacco2/bin/o2linker
+# Dbg: /usr/local/yacco2/bin/o2linker_dbg
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# Example: gen the debug version of the library
+# cd /usr/local/yacco2/compiler/grammars
+# make Dbg -f Solaris_makefile
+#
+CC := g++
+
+02_target_dir :=
+ifeq ($(MAKECMDGOALS),Rlse)
+O2_target_dir := Release
+else
+O2_target_dir := Debug
+endif
+
+Base_yacco2 := $(O2)
+O2_bin := $(Base_yacco2)/bin
+O2_eternals := $(Base_yacco2)/externals
+O2_docs := $(Base_yacco2)/docs
+O2_lib := $(Base_yacco2)/library
+O2_lib_grms := $(Base_yacco2)/library/grammars
+O2_cc_grms := $(Base_yacco2)/compiler/grammars
+O2_cc := $(Base_yacco2)/compiler/o2
+O2_includes := -I'$(O2_cc)' -I'$(O2_cc_grms)' -I'$(O2_lib)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_lib)/lib/$(O2_target_dir)
+
+###
+# Set up c++ compiler and ld linker options
+###
+Rlse: Compile_opts := -c -O3 -pthread
+Dbg: Compile_opts := -c -g -pthread
+Link_opts := -Wl,-z -Wl,muldefs -Wl,-Ur #$(O2_lib_directories)
+Multi_rd_libs := -static-libgcc -Wl,--start-group -lyacco2 -lo2grammars -Wl,--end-group -lpthread
+
+###
+# Compile, link, and move O2linker into bin account
+###
+Rlse: YYY Move_rlse_o2linker
+Dbg: YYY Move_dbg_o2linker
+YYY:
+ $(CC) -v $(Compile_opts) o2linker.cpp -o o2linker.o $(O2_includes)
+ $(CC) -v $(Compile_opts) common_externs.cpp -o common_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2linker_externs.cpp -o o2linker_externs.o $(O2_includes)
+ $(CC) -v $(Compile_opts) o2linker_defs.cpp -o o2linker_defs.o $(O2_includes)
+ ld '-o' 'o2linker' '-shared-libgcc' '-mtune=generic'\
+ --eh-frame-hdr -m elf_i386 --hash-style=both -dynamic-linker\
+ /lib/ld-linux.so.2 -o o2linker -z relro /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o /usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2 -L/usr/lib/gcc/i486-linux-gnu/4.3.2\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib -L/lib/../lib -L/usr/lib/../lib\
+ -L/usr/lib/gcc/i486-linux-gnu/4.3.2/../../..\
+ $(O2_lib_directories) o2linker_externs.o o2linker_defs.o common_externs.o o2linker.o\
+ --whole-archive -lyacco2 --no-whole-archive -start-group -lo2grammars --end-group -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc\
+ -lpthread /usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o\
+ /usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crtn.o
+
+Move_rlse_o2linker:
+ mv o2linker $(O2_bin)
+ rm *.o
+Move_dbg_o2linker:
+ mv o2linker o2linker_dbg
+ mv o2linker_dbg $(O2_bin)
+ rm o2linker
+ rm *.o
+
diff --git a/web/yacco2/o2linker/makefile_SOLARIS b/web/yacco2/o2linker/makefile_SOLARIS
new file mode 100644
index 0000000000..bfe9324679
--- /dev/null
+++ b/web/yacco2/o2linker/makefile_SOLARIS
@@ -0,0 +1,141 @@
+# File: makefile_SOLARIS
+# Why: Creates the o2linker compaion to o2 compiler /compiler
+# Library placement:
+# Rlse: /usr/local/yacco2/bin/o2linker
+# Dbg: /usr/local/yacco2/bin/o2linker_debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg
+# Rlse --- gen the fast version of library with no debug support
+# Dbg --- gen the debug version of library
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvalous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+# Notice: Some possible construction to be done
+# 1) Adjust base_dir variable if the ``yacco2'' package is moved elsewhere.
+# For example, if u installed the ``yacco2'' package in /opt/yacco2
+# Set the base_dir variable in this file to: base_dir = /opt/
+# The trailing / must be there or ugly things will happen.
+#
+# 2) Make sure u know where the ``ranlib'' utility resides on your system
+# If it's already defined in your ``bash'' ``PATH'' varable then
+# just space out the below ``RANLIB'' variable
+# RANLIB =
+# or set it to point to its residence as what this file has done
+#
+# Example: gen the debug version of the library
+# cd /usr/local/yacco2/compiler/grammars
+# make Dbg -f Solaris_makefile
+#
+
+o2_eternals :=$(O2)/externals/
+o2_docs := $(O2)/docs/
+o2_lib = $(O2)/library/
+o2_lib_grms := $(O2)/library/grammars/
+o2_grms := $(O2)/compiler/grammars/
+o2linker := $(O2)/o2linker/
+O2_includes := -I'$(o2)' -I'$(o2_grms)' -I'$(o2_lib)' -I'$(o2_lib_grms)'
+o2_req_libraries := -lyacco2 -lo2grammars
+
+files_to_cc := \
+$(o2linker)o2linker_defs.cpp \
+$(o2linker)common_externs.cpp \
+$(o2linker)o2linker_externs.cpp \
+$(o2linker)o2linker.cpp
+files_to_o := $(files_to_cc:.cpp=.o)
+
+Rlse: BASICOPTS := -c -fast -m64 -lpthread
+Rlse: Bld_BASICOPTS := -m64 -lpthread -xs
+Rlse: o2_lib_directories := -L $(o2_grms)lib/Release/ -L $(o2_lib)lib/Release/
+
+Dbg: BASICOPTS := -c -m64 -lpthread -g
+Dbg: Bld_BASICOPTS := -m64 -lpthread -xs -g
+Dbg: o2_lib_directories := -L $(o2_grms)lib/Debug/ -L $(o2_lib)lib/Debug/
+
+Rlse: Compile Rlse_o2
+Rlse := BASICOPTS = -c -fast -m64 -mt -lpthread
+Rlse := Bld_BASICOPTS = -fast -m64 -mt -lpthread
+Rlse := o2_lib_directories = -L $(o2_grms)lib/Release/ -L $(o2_lib)lib/Release/
+Rlse_o2:
+ mv o2linker $(base_dir)yacco2/bin/o2linker
+ rm -f *.o
+
+Dbg: $(files_to_o) Dbg_o2
+Dbg := BASICOPTS = -c -m64 -mt -lpthread -xs -g
+Dbg := Bld_BASICOPTS = -m64 -mt -lpthread -xs -g
+Dbg := o2_lib_directories = -L $(o2_grms)lib/Debug/ -L $(o2_lib)lib/Debug/
+Dbg_o2:
+ mv o2linker $(base_dir)yacco2/bin/o2linker_debug
+ rm -f *.o
+
+Compile: $(files_to_o)
+$(o2linker)common_externs.o: $(o2)common_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2)common_externs.cpp -o $@
+$(o2linker)o2linker_externs.o: $(o2)o2linker_externs.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2)o2linker_externs.cpp -o $@
+$(o2linker)o2linker_defs.o: $(o2)o2linker_defs.cpp
+ CC $(BASICOPTS) $(O2_includes) $(o2)o2linker_defs.cpp -o $@
+$(o2linker)o2linker.o: $(o2)o2linker.cpp
+ CC $(Bld_BASICOPTS) $(O2_includes) $(o2)o2linker.cpp -o o2linker \
+$(o2linker)o2linker_defs.o $(o2)common_externs.o $(o2)o2linker_externs.o \
+$(o2_lib_directories) $(o2_req_libraries)
+Genw:
+ cweave types.w
+ ctangle -l +e types.w
+ pdftex types
+ mv types.pdf $(o2_docs)
+ cweave $(o2_eternals)common_externs.w
+ ctangle -l +e $(o2_eternals)common_externs.w
+ pdftex common_externs
+ mv common_externs.pdf $(o2_docs)
+ cweave o2linker_externs.w
+ ctangle -l +e o2linker_externs.w
+ pdftex o2linker_externs
+ pdftops o2linker_externs.pdf
+ mv o2linker_externs.pdf $(o2_docs)
+ mv o2linker_externs.ps $(o2_docs)
+ cweave o2linker.w
+ ctangle -l +e o2linker.w
+ sh Makefile_Edit_cweb
+ pdftex o2linker
+ pdftops o2linker.pdf
+ mv o2linker.pdf $(o2_docs)
+ mv o2linker.ps $(o2_docs)
+ cweave o2linker_doc.w
+ pdftex o2linker_doc
+ pdftops o2linker_doc.pdf
+ mv o2linker_doc.pdf $(o2_docs)
+ mv o2linker_doc.ps $(o2_docs)
+ rm types.idx
+ rm types.scn
+ rm types.toc
+ rm types.tex
+ rm types.log
+ rm types.c
+ rm common_externs.idx
+ rm common_externs.scn
+ rm common_externs.toc
+ rm common_externs.tex
+ rm common_externs.log
+ rm common_externs.c
+ rm o2linker_externs.idx
+ rm o2linker_externs.scn
+ rm o2linker_externs.toc
+ rm o2linker_externs.tex
+ rm o2linker_externs.log
+ rm o2linker_externs.c
+ rm o2linker.idx
+ rm o2linker.scn
+ rm o2linker.toc
+ rm o2linker.tex
+ rm o2linker.log
+ rm o2linker.c
+ rm o2linker_doc.idx
+ rm o2linker_doc.scn
+ rm o2linker_doc.toc
+ rm o2linker_doc.tex
+ rm o2linker_doc.log
diff --git a/web/yacco2/o2linker/o2linker.cpp b/web/yacco2/o2linker/o2linker.cpp
new file mode 100644
index 0000000000..d1c689d8e4
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker.cpp
@@ -0,0 +1,1132 @@
+/*89:*/
+//line 40 "/usr/local/yacco2/o2linker/includes.w"
+
+/*87:*/
+//line 23 "/usr/local/yacco2/o2linker/includes.w"
+
+#include "o2linker.h"
+
+/*:87*/
+//line 41 "/usr/local/yacco2/o2linker/includes.w"
+
+/*20:*/
+//line 125 "/usr/local/yacco2/o2linker/prog.w"
+
+void load_linkkw_into_tbl(yacco2::CAbs_lr1_sym*Kw){
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+KCHARP kwkey= Kw->id();
+if(*kwkey=='#')++kwkey;
+kw_in_stbl*kw= new kw_in_stbl(Kw);
+add_sym_to_stbl(report_card,*kwkey,*kw,table_entry::defed,table_entry::keyword);
+kw->stbl_idx(report_card.pos_);
+}
+
+void load_linkkws_into_tbl()
+{
+cout<<"Load linker's keywords "<<endl;
+load_linkkw_into_tbl(new T_transitive);
+load_linkkw_into_tbl(new T_grammar_name);
+load_linkkw_into_tbl(new T_name_space);
+load_linkkw_into_tbl(new T_thread_name);
+load_linkkw_into_tbl(new T_fsm_comments);
+load_linkkw_into_tbl(new T_monolithic);
+load_linkkw_into_tbl(new T_file_name);
+load_linkkw_into_tbl(new T_no_of_T);
+load_linkkw_into_tbl(new T_list_of_native_first_set_terminals);
+load_linkkw_into_tbl(new T_end_list_of_native_first_set_terminals);
+load_linkkw_into_tbl(new T_list_of_transitive_threads);
+load_linkkw_into_tbl(new T_end_list_of_transitive_threads);
+load_linkkw_into_tbl(new T_list_of_used_threads);
+load_linkkw_into_tbl(new T_end_list_of_used_threads);
+load_linkkw_into_tbl(new T_T_alphabet);
+load_linkkw_into_tbl(new T_end_T_alphabet);
+load_linkkw_into_tbl(new T_file_of_T_alphabet);
+load_linkkw_into_tbl(new T_emitfile);
+load_linkkw_into_tbl(new T_preamble);
+load_linkkw_into_tbl(new T_end_preamble);
+}
+
+
+/*:20*//*22:*/
+//line 208 "/usr/local/yacco2/o2linker/prog.w"
+
+bool sort_threads_criteria(const table_entry*P1,const table_entry*P2){
+th_in_stbl*th_tbl1= (th_in_stbl*)P1->symbol_;
+th_in_stbl*th_tbl2= (th_in_stbl*)P2->symbol_;
+thread_attributes*p1= th_tbl1->thread_in_stbl();
+thread_attributes*p2= th_tbl2->thread_in_stbl();
+int len_a= p1->thread_name_->c_string()->size();
+int len_b= p2->thread_name_->c_string()->size();
+string ucase_a;
+for(int x= 0;x<len_a;++x){
+ucase_a+= toupper((*p1->thread_name_->c_string())[x]);
+}
+string ucase_b;
+for(int x= 0;x<len_b;++x){
+ucase_b+= toupper((*p2->thread_name_->c_string())[x]);
+}
+if(len_a<len_b){
+for(int x= len_a+1;x<=len_b;++x)ucase_a+= ' ';
+}else{
+for(int x= len_b+1;x<=len_a;++x)ucase_b+= ' ';
+}
+int result;
+if(p1->monolithic_=='n'){
+if(p2->monolithic_=='n'){
+result= strcmp(ucase_a.c_str(),ucase_b.c_str());
+if(result<0)return true;
+return false;
+}
+return true;
+}
+if(p2->monolithic_=='n'){
+return false;
+}
+
+int len_fqna= p1->thread_name_->c_string()->size();
+int len_fqnb= p2->thread_name_->c_string()->size();
+string ucase_fqna;
+for(int x= 0;x<len_fqna;++x){
+ucase_fqna+= toupper((*p1->thread_name_->c_string())[x]);
+}
+string ucase_fqnb;
+for(int x= 0;x<len_fqnb;++x){
+ucase_fqnb+= toupper((*p2->thread_name_->c_string())[x]);
+}
+if(len_fqna<len_fqnb){
+for(int x= len_fqna+1;x<=len_fqnb;++x)ucase_fqna+= ' ';
+}else{
+for(int x= len_fqnb+1;x<=len_fqna;++x)ucase_fqnb+= ' ';
+}
+result= strcmp(ucase_fqna.c_str(),ucase_fqnb.c_str());
+if(result<0)return true;
+return false;
+}
+
+/*:22*//*33:*/
+//line 434 "/usr/local/yacco2/o2linker/prog.w"
+
+void crt_fset_of_thread
+(thread_attributes&Visited_th
+,int Root_thread_id,thread_attributes&Root_thread){
+if(Visit_graph[Visited_th.th_enum_]=='y')return;
+Visit_graph[Visited_th.th_enum_]= 'y';
+/*31:*/
+//line 396 "/usr/local/yacco2/o2linker/prog.w"
+
+std::vector<int> ::iterator fi= Visited_th.list_of_Ts_.begin();
+std::vector<int> ::iterator fie= Visited_th.list_of_Ts_.end();
+for(;fi!=fie;++fi){
+int t_enum= *fi;
+if(t_enum==LR1_ALL_SHIFT_OPERATOR){
+/*29:*/
+//line 332 "/usr/local/yacco2/o2linker/prog.w"
+
+INT_SET_ITER_type t_listi= Root_thread.fs_.find(LR1_EOLR);
+if(t_listi==Root_thread.fs_.end()){
+Root_thread.fs_.insert(LR1_EOLR);
+}
+
+int no_of_T= T_DICTIONARY.size();
+for(int x= 0;x<no_of_T;++x){
+switch(x){
+case LR1_QUESTIONABLE_SHIFT_OPERATOR:break;
+case LR1_EOG:break;
+case LR1_EOLR:continue;
+case LR1_PARALLEL_OPERATOR:continue;
+case LR1_REDUCE_OPERATOR:continue;
+case LR1_INVISIBLE_SHIFT_OPERATOR:continue;
+case LR1_ALL_SHIFT_OPERATOR:continue;
+case LR1_FSET_TRANSIENCE_OPERATOR:continue;
+default:break;
+}
+if(Visited_th.monolithic_=='n'){
+INT_SET_type&th_list= T_THREAD_ID_LIST[x];
+if(th_list.find(Visited_th.th_enum_)==th_list.end()){
+th_list.insert(Visited_th.th_enum_);
+}
+if(th_list.find(Root_thread_id)==th_list.end()){
+th_list.insert(Root_thread_id);
+}
+}
+}
+
+/*:29*/
+//line 402 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+/*30:*/
+//line 369 "/usr/local/yacco2/o2linker/prog.w"
+
+INT_SET_ITER_type t_listi= Root_thread.fs_.find(t_enum);
+if(t_listi==Root_thread.fs_.end()){
+Root_thread.fs_.insert(t_enum);
+}
+if(Visited_th.monolithic_=='n'){
+INT_SET_type&th_list= T_THREAD_ID_LIST[t_enum];
+if(th_list.find(Visited_th.th_enum_)==th_list.end()){
+th_list.insert(Visited_th.th_enum_);
+}
+if(th_list.find(Root_thread_id)==th_list.end()){
+th_list.insert(Root_thread_id);
+}
+}
+
+/*:30*/
+//line 404 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+
+/*:31*/
+//line 440 "/usr/local/yacco2/o2linker/prog.w"
+
+/*32:*/
+//line 409 "/usr/local/yacco2/o2linker/prog.w"
+
+std::vector<thread_attributes*> ::iterator li= Visited_th.list_of_transitive_threads_.begin();
+std::vector<thread_attributes*> ::iterator lie= Visited_th.list_of_transitive_threads_.end();
+for(;li!=lie;++li){
+thread_attributes*th_att= *li;
+lrclog<<"------->process called thread's list thd: "
+<<th_att->thread_name_->c_string()->c_str()
+<<" for root thd id: "<<Root_thread_id
+<<endl;
+crt_fset_of_thread(*th_att,Root_thread_id,Root_thread);
+}
+
+/*:32*/
+//line 441 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+
+/*:33*//*38:*/
+//line 503 "/usr/local/yacco2/o2linker/prog.w"
+
+void walk_called_thread_list(std::vector<thread_attributes*> &Thd_list,AST*Mother_thd_t){
+if(Thd_list.begin()==Thd_list.end())return;
+std::vector<thread_attributes*> ::iterator li= Thd_list.begin();
+std::vector<thread_attributes*> ::iterator lie= Thd_list.end();
+for(;li!=lie;++li){
+thread_attributes*th_att= *li;
+if(Visit_graph[th_att->th_enum_]=='y')continue;
+Visit_graph[th_att->th_enum_]= 'y';
+AST*called_t= new AST(*th_att);
+AST::add_child_at_end(*Mother_thd_t,*called_t);
+walk_called_thread_list(th_att->list_of_transitive_threads_,called_t);
+}
+}
+
+/*:38*//*39:*/
+//line 519 "/usr/local/yacco2/o2linker/prog.w"
+
+void crt_called_thread_graph(thread_attributes&Visited_th){
+if(Visit_graph[Visited_th.th_enum_]=='y')return;
+Visit_graph[Visited_th.th_enum_]= 'y';
+AST*mother_thd_t= new AST(Visited_th);
+Visited_th.called_thread_graph_= mother_thd_t;
+walk_called_thread_list(Visited_th.list_of_transitive_threads_,mother_thd_t);
+}
+/*:39*//*40:*/
+//line 528 "/usr/local/yacco2/o2linker/prog.w"
+
+void gen_each_grammar_s_referenced_threads(){
+std::vector<table_entry*> ::iterator thi= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator thie= GRAMMAR_DICTIONARY.end();
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+/*35:*/
+//line 454 "/usr/local/yacco2/o2linker/prog.w"
+
+for(int vi= 0;vi<NO_OF_THREADS;++vi){
+Visit_graph[vi]= 'n';
+}
+
+/*:35*/
+//line 535 "/usr/local/yacco2/o2linker/prog.w"
+
+crt_called_thread_graph(*th_att);
+}
+}
+/*:40*//*52:*/
+//line 773 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_no_threads(ofstream&ofile){
+ofile<<"// There are NO THREADS emitted"<<endl;
+ofile<<"void* yacco2::THDS_STABLE__ = 0;"<<endl;
+ofile<<"void* yacco2::T_ARRAY_HAVING_THD_IDS__ = 0;"<<endl;
+}
+
+/*:52*//*53:*/
+//line 781 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_cpp_preamble(ofstream&ofile,const char*OFile,const char*Preamble){
+ofile<<"//"<<endl;
+ofile<<"// File: "<<OFile<<endl;
+ofile<<"// Generated by linker.exe"<<endl;
+ofile<<"// Date and Time: "<<DATE_AND_TIME()<<endl;
+ofile<<"//"<<endl;
+ofile<<endl;
+ofile<<"// Preamble code"<<endl;
+ofile<<Preamble<<endl;
+}
+
+/*:53*//*54:*/
+//line 799 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_global_thread_include_files(ofstream&ofile){
+ofile<<"// thread include and namespace"<<std::endl;
+char a[SMALL_BUFFER_4K];
+KCHARP thread_include_ns= "#include \"%s.h\"";
+
+std::vector<table_entry*> ::iterator thi= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator thie= GRAMMAR_DICTIONARY.end();
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+if(th_att->monolithic_=='y')break;
+int x= sprintf
+(a
+,thread_include_ns
+,th_att->grammar_file_name_->c_string()->c_str()
+);
+ofile.write(a,x);
+ofile<<std::endl;
+}
+}
+
+/*:54*//*55:*/
+//line 822 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_global_bit_maps(ofstream&ofile){
+ofile<<"// BIT MAPS"<<std::endl;
+ofile<<"#define TOTAL_NO_BIT_WORDS 2*1024*50"<<std::endl;
+ofile<<"int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);"<<std::endl;
+ofile<<"yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];"<<std::endl;
+ofile<<"void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;"<<std::endl;
+ofile<<"int yacco2::BIT_MAP_IDX__(0);"<<std::endl;
+}
+
+/*:55*//*56:*/
+//line 844 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_global_thread_stable(ofstream&ofile){
+ofile<<"// THREAD STABLE"<<std::endl;
+char a[BIG_BUFFER_32K];
+KCHARP thread_entry= "yacco2::Thread_entry I%s = {%s,%s,%i,%s::PROC_%s};";
+string quoted_name;
+/*57:*/
+//line 855 "/usr/local/yacco2/o2linker/prog.w"
+
+std::vector<table_entry*> ::iterator thi= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator thie= GRAMMAR_DICTIONARY.end();
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+if(th_att->monolithic_=='y')break;
+quoted_name.clear();
+const char*th_name= th_att->thread_name_->c_string()->c_str();
+quoted_name+= '"';
+quoted_name+= th_name;
+quoted_name+= '"';
+
+int x= sprintf(a,thread_entry,th_name,quoted_name.c_str()
+,th_att->fully_qualified_th_name_.c_str(),th_att->th_enum_
+,th_att->name_space_name_->c_string()->c_str()
+,th_att->thread_name_->c_string()->c_str());
+ofile.write(a,x);
+ofile<<std::endl;
+}
+
+/*:57*/
+//line 850 "/usr/local/yacco2/o2linker/prog.w"
+
+/*58:*/
+//line 878 "/usr/local/yacco2/o2linker/prog.w"
+
+div_t c= div(NO_OF_THREADS,BITS_PER_WORD);
+if(c.rem!=0)++c.quot;
+NO_WORDS_FOR_BIT_MAP= c.quot;
+
+KCHARP thread_array=
+"struct thd_array_type {\n"
+" yacco2::USINT no_entries__;\n"
+" yacco2::Thread_entry* first_entry__[%i];"
+"};\n"
+"thd_array_type thd_array = {\n"
+" %i\n"
+" ,\n"
+" {\n";
+int x= sprintf(a,thread_array,NO_OF_THREADS,NO_OF_THREADS);
+
+ofile.write(a,x);
+ofile<<std::endl;
+bool first_entry(true);
+thi= GRAMMAR_DICTIONARY.begin();
+thie= GRAMMAR_DICTIONARY.end();
+KCHARP thread_entry_name= "&I%s";
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+if(th_att->monolithic_=='y')break;
+if(first_entry==true){
+first_entry= false;
+ofile<<" ";
+}else{
+ofile<<" ,";
+}
+int x= sprintf(a,thread_entry_name,th_att->thread_name_->c_string()->c_str());
+ofile.write(a,x);
+ofile<<std::endl;
+}
+ofile<<" }\n};"<<endl;
+/*59:*/
+//line 918 "/usr/local/yacco2/o2linker/prog.w"
+
+ofile<<"void* yacco2::THDS_STABLE__ = (void*)&thd_array;"<<endl;
+
+/*:59*/
+//line 915 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:58*/
+//line 851 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+
+/*:56*//*60:*/
+//line 951 "/usr/local/yacco2/o2linker/prog.w"
+
+void emit_T_fs_of_potential_threads(ofstream&ofile){
+ofile<<"// Terminal thread sets"<<std::endl;
+int no_of_T= T_DICTIONARY.size();
+char a[SMALL_BUFFER_4K];
+KCHARP T_list_to_thd_list_type=
+"struct T_%i_type{\n"
+" yacco2::ULINT first_entry__[%i];\n"
+"};\n";
+KCHARP T_list_to_thd_list_var= "T_%i_type T_%i = {// for T: %s";
+KCHARP thd_id_in_list= "//%i: %s";
+
+INT_SET_LIST_ITER_type i= T_THREAD_ID_LIST.begin();
+INT_SET_LIST_ITER_type ie= T_THREAD_ID_LIST.end();
+int terminal_id(-1);
+for(;i!=ie;++i){
+++terminal_id;
+INT_SET_type&th_list= *i;
+if(th_list.empty()==true)continue;
+int x= sprintf(a,T_list_to_thd_list_type,terminal_id,NO_WORDS_FOR_BIT_MAP);
+ofile.write(a,x);
+ofile<<std::endl;
+/*61:*/
+//line 984 "/usr/local/yacco2/o2linker/prog.w"
+
+int no_thds_ids= th_list.size();
+table_entry*t_entry= T_DICTIONARY[terminal_id];
+tth_in_stbl*t_in_stbl= (tth_in_stbl*)t_entry->symbol_;
+T_attributes*t_att= t_in_stbl->t_in_stbl();
+x= sprintf(a
+,T_list_to_thd_list_var
+,terminal_id
+,terminal_id
+,t_att->fully_qualified_T_name_.c_str()
+);
+ofile.write(a,x);
+ofile<<std::endl;
+ULINT word_map[SPECULATIVE_NO_BIT_WORDS]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+INT_SET_ITER_type j= th_list.begin();
+INT_SET_ITER_type je= th_list.end();
+
+/*62:*/
+//line 1007 "/usr/local/yacco2/o2linker/prog.w"
+
+for(;j!=je;++j){
+int th_id= *j;
+table_entry*tbl_entry= GRAMMAR_DICTIONARY[th_id];
+th_in_stbl*th_tbl= (th_in_stbl*)tbl_entry->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+div_t bb= div(th_id,BITS_PER_WORD);
+ULINT bit_pos_value= 1<<bb.rem;
+word_map[bb.quot]|= bit_pos_value;
+int x= sprintf(a,thd_id_in_list,th_id,th_att->thread_name_->c_string()->c_str());
+ofile.write(a,x);
+ofile<<std::endl;
+}
+
+/*:62*/
+//line 1002 "/usr/local/yacco2/o2linker/prog.w"
+
+/*63:*/
+//line 1022 "/usr/local/yacco2/o2linker/prog.w"
+
+for(int dd= 1;dd<=NO_WORDS_FOR_BIT_MAP;++dd){
+if(dd==1)ofile<<" {";
+else ofile<<" ,";
+ofile<<word_map[dd-1]<<endl;
+}
+ofile<<" }"<<endl;
+ofile<<"};"<<endl;
+
+/*:63*/
+//line 1003 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:61*/
+//line 973 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+/*64:*/
+//line 1033 "/usr/local/yacco2/o2linker/prog.w"
+
+KCHARP T_array_type=
+"struct t_array_type {\n"
+" yacco2::USINT no_entries__;\n"
+" yacco2::thd_ids_having_T* first_entry__[%i];\n"
+"};";
+int x= sprintf(a,T_array_type,no_of_T);
+ofile.write(a,x);
+ofile<<std::endl;
+
+KCHARP T_array=
+"t_array_type t_array = {\n"
+" %i\n"
+" ,{";
+x= sprintf
+(a
+,T_array
+,no_of_T
+);
+ofile.write(a,x);
+ofile<<std::endl;
+
+i= T_THREAD_ID_LIST.begin();
+ie= T_THREAD_ID_LIST.end();
+/*65:*/
+//line 1063 "/usr/local/yacco2/o2linker/prog.w"
+
+bool first_item(true);
+for(int t_id= -1;i!=ie;++i){
+++t_id;
+table_entry*t_entry= T_DICTIONARY[t_id];
+tth_in_stbl*t_in_stbl= (tth_in_stbl*)t_entry->symbol_;
+T_attributes*t_att= t_in_stbl->t_in_stbl();
+INT_SET_type&th_list= *i;
+if(th_list.empty()==true){
+if(first_item==true)first_item= false;
+else ofile<<" ,";
+KCHARP T_array_entries= "%s// %s";
+int x= sprintf(a,T_array_entries,"0",t_att->fully_qualified_T_name_.c_str());
+ofile.write(a,x);
+ofile<<std::endl;
+continue;
+}else{
+if(first_item==true)first_item= false;
+else ofile<<" ,";
+KCHARP T_list_to_thd_list_var= "(yacco2::thd_ids_having_T*)&T_%i // %s";
+
+int x= sprintf(a,T_list_to_thd_list_var,t_id,t_att->fully_qualified_T_name_.c_str());
+ofile.write(a,x);
+ofile<<std::endl;
+}
+}
+
+/*:65*/
+//line 1057 "/usr/local/yacco2/o2linker/prog.w"
+
+ofile<<" }\n};"<<endl;
+ofile<<"void* yacco2::T_ARRAY_HAVING_THD_IDS__ = (void*)&t_array;"<<endl;
+
+/*:64*/
+//line 975 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+
+
+/*:60*//*66:*/
+//line 1091 "/usr/local/yacco2/o2linker/prog.w"
+
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE Error_queue;
+STBL_T_ITEMS_type STBL_T_ITEMS;
+std::vector<NS_yacco2_terminals::table_entry*> GRAMMAR_DICTIONARY;
+std::map<std::string,std::vector<std::string> > USED_THREADS_LIST;
+std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;
+INT_SET_LIST_type T_THREAD_ID_LIST;
+
+int NO_OF_THREADS(0);
+int NO_WORDS_FOR_BIT_MAP(0);
+char Visit_graph[RESERVE_FIXED_NO_THREADS];
+extern void XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym);
+extern void PRINT_CALLED_THREAD_LIST
+(yacco2::AST*Node,std::ofstream*Ow_linker_file,int Recursion_level);
+string cntl_file_name;
+yacco2::CHAR PRT_SW('n');
+
+int main(int argc,char*argv[])
+{
+cout<<yacco2::O2linker_VERSION<<std::endl;
+using namespace yacco2;
+using namespace std;
+load_linkkws_into_tbl();
+cout<<"Get command line and parse it "<<endl;
+GET_CMD_LINE(argc,argv,Linker_holding_file,Error_queue);
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 1117 "/usr/local/yacco2/o2linker/prog.w"
+
+LINKER_PARSE_CMD_LINE(Linker_holding_file,cntl_file_name,Error_queue);
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 1119 "/usr/local/yacco2/o2linker/prog.w"
+
+lrclog<<yacco2::O2linker_VERSION<<std::endl;
+/*17:*/
+//line 45 "/usr/local/yacco2/o2linker/prog.w"
+
+cout<<"Parse linker control file "<<endl;
+using namespace NS_linker_pass3;
+tok_can<std::ifstream> cntl_file_tokens(cntl_file_name.c_str());
+TOKEN_GAGGLE P3_tokens;
+Clinker_pass3 linker_cntl_file_fsm;
+Parser linker_cntl_file(linker_cntl_file_fsm,&cntl_file_tokens,&P3_tokens,0,&Error_queue,0,0);
+linker_cntl_file.parse();
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 53 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:17*/
+//line 1121 "/usr/local/yacco2/o2linker/prog.w"
+
+/*18:*/
+//line 66 "/usr/local/yacco2/o2linker/prog.w"
+
+cout<<"Parse alphabet"<<endl;
+using namespace NS_link_cleanser;
+tok_can<std::ifstream> T_file_tokens(linker_cntl_file_fsm.t_alphabet_filename_.c_str());
+TOKEN_GAGGLE cleanser_tokens;
+Clink_cleanser cleanser_fsm;
+Parser cleanser(cleanser_fsm,&T_file_tokens,&cleanser_tokens,0,&Error_queue,0,0);
+cleanser.parse();
+
+using namespace NS_t_alphabet;
+TOKEN_GAGGLE T_tokens;
+Ct_alphabet T_fsm;
+Parser T_pass3(T_fsm,&cleanser_tokens,&T_tokens,0,&Error_queue,0,0);
+T_pass3.parse();
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 80 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:18*/
+//line 1122 "/usr/local/yacco2/o2linker/prog.w"
+
+/*19:*/
+//line 88 "/usr/local/yacco2/o2linker/prog.w"
+
+cout<<"Parse fsc files"<<endl;
+TOKEN_GAGGLE cleanser_fsc_tokens;
+TOKEN_GAGGLE fsc_file_output_tokens;
+std::vector<std::string> ::iterator ii= linker_cntl_file_fsm.grammars_fsc_files_.begin();
+std::vector<std::string> ::iterator iie= linker_cntl_file_fsm.grammars_fsc_files_.end();
+for(;ii!=iie;++ii){
+tok_can<std::ifstream> T_fsc_file_tokens(ii->c_str());
+Clink_cleanser cleanser_fsc;
+Parser fsc_cleanser(cleanser_fsc,&T_fsc_file_tokens
+,&cleanser_fsc_tokens,0,&Error_queue,0,0);
+fsc_cleanser.parse();
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 100 "/usr/local/yacco2/o2linker/prog.w"
+
+
+using namespace NS_fsc_file;
+Cfsc_file fsc_file_fsm;
+Parser fsc_file_pass(fsc_file_fsm,&cleanser_fsc_tokens
+,&fsc_file_output_tokens,0,&Error_queue,0,0);
+fsc_file_pass.parse();
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 107 "/usr/local/yacco2/o2linker/prog.w"
+
+cleanser_fsc_tokens.clear();
+fsc_file_output_tokens.clear();
+}
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 111 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:19*/
+//line 1123 "/usr/local/yacco2/o2linker/prog.w"
+
+/*21:*/
+//line 173 "/usr/local/yacco2/o2linker/prog.w"
+
+std::vector<table_entry*> ::iterator th_i= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator th_ie= GRAMMAR_DICTIONARY.end();
+for(;th_i!=th_ie;++th_i){
+table_entry*tbl_entry= *th_i;
+
+if(tbl_entry->defined_==true)continue;
+CAbs_lr1_sym*sym= new Err_bad_th_in_list;
+sym->set_who_created("linker.w",__LINE__);
+
+thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();
+sym->set_rc(*th_goodies);
+Error_queue.push_back(*sym);
+}
+/*15:*/
+//line 34 "/usr/local/yacco2/o2linker/prog.w"
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return 1;
+}
+
+/*:15*/
+//line 187 "/usr/local/yacco2/o2linker/prog.w"
+
+
+/*:21*/
+//line 1124 "/usr/local/yacco2/o2linker/prog.w"
+
+/*23:*/
+//line 263 "/usr/local/yacco2/o2linker/prog.w"
+
+cout<<"Sort thread dictionary"<<endl;
+stable_sort(GRAMMAR_DICTIONARY.begin(),GRAMMAR_DICTIONARY.end(),sort_threads_criteria);
+
+/*:23*/
+//line 1125 "/usr/local/yacco2/o2linker/prog.w"
+
+/*24:*/
+//line 269 "/usr/local/yacco2/o2linker/prog.w"
+
+yacco2::lrclog<<"Sorted thread dictionary"<<GRAMMAR_DICTIONARY.size()<<std::endl;
+std::vector<table_entry*> ::iterator dth_i= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator dth_ie= GRAMMAR_DICTIONARY.end();
+int pos(-1);
+for(;dth_i!=dth_ie;++dth_i){
+++pos;
+table_entry*tbl_entry= *dth_i;
+thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();
+yacco2::lrclog<<"tbl entry*: "
+<<tbl_entry<<" th_goodies*: "<<th_goodies
+<<" "<<pos<<":"<<th_goodies->th_enum_
+<<" mono: "<<th_goodies->monolithic_
+<<" thread name: "<<th_goodies->thread_name_->c_string()->c_str()
+<<" FQN: "<<th_goodies->fully_qualified_th_name_.c_str()
+<<" K: "<<th_goodies->fsm_comments_->c_string()->c_str()
+<<std::endl;
+}
+
+/*:24*/
+//line 1126 "/usr/local/yacco2/o2linker/prog.w"
+
+/*25:*/
+//line 291 "/usr/local/yacco2/o2linker/prog.w"
+
+std::vector<table_entry*> ::iterator ri= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator rie= GRAMMAR_DICTIONARY.end();
+for(int p= -1;ri!=rie;++ri){
+++p;
+table_entry*tbl_entry= *ri;
+thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();
+th_goodies->th_enum_= p;
+if(th_goodies->monolithic_=='n')++NO_OF_THREADS;
+}
+
+/*:25*/
+//line 1127 "/usr/local/yacco2/o2linker/prog.w"
+
+/*26:*/
+//line 304 "/usr/local/yacco2/o2linker/prog.w"
+
+int max_thds_supported= SPECULATIVE_NO_BIT_WORDS*BITS_PER_WORD;
+if(NO_OF_THREADS> max_thds_supported){
+char a[SMALL_BUFFER_4K];
+
+KCHARP msg=
+"Error: not enough space for thread bit map manufacture!"
+" # threads: %i, Linker's maximum no of threads supported: %i. \n"
+" Please expand SPECULATIVE_NO_BIT_WORDS";
+sprintf(a,msg,NO_OF_THREADS,max_thds_supported);
+Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+exit(1);
+}
+
+/*:26*/
+//line 1128 "/usr/local/yacco2/o2linker/prog.w"
+
+/*36:*/
+//line 475 "/usr/local/yacco2/o2linker/prog.w"
+
+/*34:*/
+//line 447 "/usr/local/yacco2/o2linker/prog.w"
+
+for(int vi= 0;vi<NO_OF_THREADS;++vi){
+Visit_graph[vi]= 'n';
+}
+
+/*:34*/
+//line 476 "/usr/local/yacco2/o2linker/prog.w"
+
+
+std::vector<table_entry*> ::iterator thi= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator thie= GRAMMAR_DICTIONARY.end();
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+if(th_att->monolithic_=='n'){
+yacco2::lrclog<<"thread being walked: "
+<<th_att->thread_name_->c_string()->c_str()<<" id: "
+<<th_att->th_enum_<<std::endl;
+/*35:*/
+//line 454 "/usr/local/yacco2/o2linker/prog.w"
+
+for(int vi= 0;vi<NO_OF_THREADS;++vi){
+Visit_graph[vi]= 'n';
+}
+
+/*:35*/
+//line 487 "/usr/local/yacco2/o2linker/prog.w"
+
+crt_fset_of_thread(*th_att,th_att->th_enum_,*th_att);
+}
+}
+thi= GRAMMAR_DICTIONARY.begin();
+thie= GRAMMAR_DICTIONARY.end();
+for(;thi!=thie;++thi){
+th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;
+thread_attributes*th_att= th_tbl->thread_in_stbl();
+/*35:*/
+//line 454 "/usr/local/yacco2/o2linker/prog.w"
+
+for(int vi= 0;vi<NO_OF_THREADS;++vi){
+Visit_graph[vi]= 'n';
+}
+
+/*:35*/
+//line 496 "/usr/local/yacco2/o2linker/prog.w"
+
+crt_called_thread_graph(*th_att);
+}
+
+/*:36*/
+//line 1129 "/usr/local/yacco2/o2linker/prog.w"
+
+/*51:*/
+//line 748 "/usr/local/yacco2/o2linker/prog.w"
+
+cout<<"Emit file name: "<<linker_cntl_file_fsm.emitfile_filename_.c_str()<<endl;
+ofstream ofile(linker_cntl_file_fsm.emitfile_filename_.c_str(),ios::out);
+if(!ofile){
+cout<<"Error - can't open emit file: "
+<<linker_cntl_file_fsm.emitfile_filename_.c_str()<<endl;
+return 1;
+}
+emit_cpp_preamble(ofile
+,linker_cntl_file_fsm.emitfile_filename_.c_str()
+,linker_cntl_file_fsm.preamble_srce_->syntax_code()->c_str());
+emit_global_thread_include_files(ofile);
+emit_global_bit_maps(ofile);
+if(NO_OF_THREADS==0){
+emit_no_threads(ofile);
+}else{
+emit_global_thread_stable(ofile);
+emit_T_fs_of_potential_threads(ofile);
+}
+ofile.close();
+
+/*:51*/
+//line 1130 "/usr/local/yacco2/o2linker/prog.w"
+
+/*50:*/
+//line 727 "/usr/local/yacco2/o2linker/prog.w"
+
+gen_each_grammar_s_referenced_threads();
+char big_buf_[BIG_BUFFER_32K];
+std::string w_linker_filename_("o2linker_doc.w");
+std::ofstream ow_linker_file_;
+ow_linker_file_.open(w_linker_filename_.c_str(),ios_base::out|ios::trunc);
+/*46:*/
+//line 640 "/usr/local/yacco2/o2linker/prog.w"
+
+KCHARP w_doc_index=
+"\\input \"supp-pdf\"\n"
+"\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n"
+"\\IDXlinkerdoctitle{%s}{%s}{%s}";
+char xlate_file[Max_cweb_item_size];xlate_file[0]= (char)0;
+char xlate_fscfile[Max_cweb_item_size];xlate_fscfile[0]= (char)0;
+XLATE_SYMBOLS_FOR_cweave(w_linker_filename_.c_str(),xlate_file);
+XLATE_SYMBOLS_FOR_cweave(cntl_file_name.c_str(),xlate_fscfile);
+int x= sprintf(big_buf_
+,w_doc_index
+,xlate_file
+,xlate_file
+,xlate_fscfile
+);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+KCHARP w_doc_comments=
+"@** O2linker Index of Grammars.\\fbreak\n"
+"The grammars are sorted lexicographically into 2 parts:\n"
+"threads followed by the stand alone grammars.\n"
+"Each grammar's called threads graph is determined from their \n"
+" ``list-of-transitive-threads''\n"
+"derived from this construct.%s";
+x= sprintf(big_buf_,w_doc_comments," ");
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+
+/*:46*/
+//line 733 "/usr/local/yacco2/o2linker/prog.w"
+
+/*47:*/
+//line 669 "/usr/local/yacco2/o2linker/prog.w"
+
+KCHARP w_grammar=
+"@*2 %s";
+KCHARP w_comments=
+"\\Linkeridxentryk{%s}";
+KCHARP w_called_threads=
+"\\Linkercalledthreadstitle%s";
+char xlate_gfile[Max_cweb_item_size];
+char rebuild_comment[Max_cweb_item_size];
+char fandk[Max_cweb_item_size];
+char xlate_thnm[Max_cweb_item_size];
+char xlate_tnm[Max_cweb_item_size];
+
+std::vector<table_entry*> ::iterator ithi= GRAMMAR_DICTIONARY.begin();
+std::vector<table_entry*> ::iterator ithie= GRAMMAR_DICTIONARY.end();
+for(;ithi!=ithie;++ithi){
+xlate_gfile[0]= (char)0;
+rebuild_comment[0]= (char)0;
+fandk[0]= (char)0;
+xlate_thnm[0]= (char)0;
+xlate_tnm[0]= (char)0;
+
+table_entry*tbl_entry= *ithi;
+thread_attributes*th_att= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();
+/*42:*/
+//line 547 "/usr/local/yacco2/o2linker/prog.w"
+
+XLATE_SYMBOLS_FOR_cweave(th_att->thread_name_->c_string()->c_str(),xlate_gfile);
+XLATE_SYMBOLS_FOR_cweave(th_att->fsm_comments_->c_string()->c_str(),rebuild_comment);
+strcat(fandk,xlate_gfile);
+strcat(fandk," --- ");
+strcat(fandk,rebuild_comment);
+int fandk_len= strlen(fandk);
+if(fandk_len<CWEAVE_TITLE_LIMIT){
+if(fandk[fandk_len-1]!='.'){
+strcat(fandk,".");
+}
+}else{
+if(fandk_len==CWEAVE_TITLE_LIMIT){
+if(fandk[CWEAVE_TITLE_LIMIT-1]!='.'){
+strcat(fandk,".");
+}
+}else{
+fandk[CWEAVE_TITLE_LIMIT]= (char)0;
+strcat(fandk,"$\\ldots$ .");
+}
+}
+int x= sprintf(big_buf_
+,w_grammar
+,fandk
+);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+x= sprintf(big_buf_
+,w_comments
+,rebuild_comment
+);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+x= sprintf(big_buf_
+,w_called_threads," "
+);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+
+/*:42*/
+//line 693 "/usr/local/yacco2/o2linker/prog.w"
+
+/*43:*/
+//line 587 "/usr/local/yacco2/o2linker/prog.w"
+
+prt_called_thread_list_ast_functor prt_functr(&PRINT_CALLED_THREAD_LIST);
+prt_functr.o_file(&ow_linker_file_);
+ast_prefix pre(*th_att->called_thread_graph_,&prt_functr);
+while(pre.base_stk_.cur_stk_rec()!=0){
+pre.exec();
+}
+
+/*:43*/
+//line 694 "/usr/local/yacco2/o2linker/prog.w"
+
+/*45:*/
+//line 619 "/usr/local/yacco2/o2linker/prog.w"
+
+ow_linker_file_<<"{\\parindent=6pc"<<endl;
+ow_linker_file_<<"\\item{First set:}"<<std::endl;
+KCHARP fs=
+"%s\n"
+"@.%s@>";
+INT_SET_ITER_type fsi= th_att->fs_.begin();
+INT_SET_ITER_type fsie= th_att->fs_.end();
+char xlate_tnm[Max_cweb_item_size];
+for(;fsi!=fsie;++fsi){
+int tenum= *fsi;
+table_entry*t_entry= T_DICTIONARY[tenum];
+tth_in_stbl*t_in_stbl= (tth_in_stbl*)t_entry->symbol_;
+T_attributes*t_att= t_in_stbl->t_in_stbl();
+XLATE_SYMBOLS_FOR_cweave(t_att->fully_qualified_T_name_.c_str(),xlate_tnm);
+int x= sprintf(big_buf_,fs,xlate_tnm,xlate_tnm);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+}
+
+/*:45*/
+//line 695 "/usr/local/yacco2/o2linker/prog.w"
+
+/*44:*/
+//line 596 "/usr/local/yacco2/o2linker/prog.w"
+
+std::map<std::string,std::vector<std::string> > ::iterator ti=
+USED_THREADS_LIST.find(th_att->thread_name_->c_string()->c_str());
+ow_linker_file_<<"{\\parindent=6pc"<<endl;
+ow_linker_file_<<"\\item{Used threads:}"<<std::endl;
+KCHARP used_threads=
+"%s\n"
+"@.%s@>";
+std::vector<std::string> &tt= ti->second;
+std::vector<std::string> ::iterator tti= tt.begin();
+std::vector<std::string> ::iterator ttie= tt.end();
+char xlate_thnm[Max_cweb_item_size];
+for(;tti!=ttie;++tti){
+XLATE_SYMBOLS_FOR_cweave(tti->c_str(),xlate_thnm);
+int x= sprintf(big_buf_,used_threads,xlate_thnm,xlate_thnm);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+}
+if(ti->second.empty()==YES)ow_linker_file_<<" none"<<endl;
+ow_linker_file_<<"}"<<endl;
+
+/*:44*/
+//line 696 "/usr/local/yacco2/o2linker/prog.w"
+
+}
+
+/*:47*/
+//line 734 "/usr/local/yacco2/o2linker/prog.w"
+
+/*48:*/
+//line 700 "/usr/local/yacco2/o2linker/prog.w"
+
+KCHARP w_fsc_file_listing=
+"@** First set control file (fsc) listing.\\fbreak\n"
+"File : ``%s''\\fbreak\n"
+"\\let\\setuplistinghook = \\relax\n"
+"\\listing{\"%s\"}\n";
+char xlated_filename[Max_cweb_item_size];
+
+XLATE_SYMBOLS_FOR_cweave(cntl_file_name.c_str(),xlated_filename);
+x= sprintf(big_buf_
+,w_fsc_file_listing
+,xlated_filename
+,cntl_file_name.c_str()
+);
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+
+/*:48*/
+//line 735 "/usr/local/yacco2/o2linker/prog.w"
+
+/*49:*/
+//line 718 "/usr/local/yacco2/o2linker/prog.w"
+
+KCHARP w_index=
+"@** Index.%s";
+x= sprintf(big_buf_,w_index," ");
+ow_linker_file_.write(big_buf_,x);
+ow_linker_file_<<std::endl;
+
+
+/*:49*/
+//line 736 "/usr/local/yacco2/o2linker/prog.w"
+
+ow_linker_file_.close();
+
+/*:50*/
+//line 1131 "/usr/local/yacco2/o2linker/prog.w"
+
+
+return 0;
+}
+//line 1 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+
+
+
+
+
+
+/*:66*/
+//line 42 "/usr/local/yacco2/o2linker/includes.w"
+
+//line 20 "./o2linker.w"
+/*:89*/
diff --git a/web/yacco2/o2linker/o2linker.h b/web/yacco2/o2linker/o2linker.h
new file mode 100644
index 0000000000..a1bd6aea5d
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker.h
@@ -0,0 +1,60 @@
+/*88:*/
+//line 29 "/usr/local/yacco2/o2linker/includes.w"
+
+#define SPECULATIVE_NO_BIT_WORDS 20
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR 0
+#define LR1_EOG 1
+#define LR1_EOLR 2
+#define LR1_PARALLEL_OPERATOR 3
+#define LR1_REDUCE_OPERATOR 4
+#define LR1_PROCEDURE_CALL_OPERATOR 7
+#define LR1_INVISIBLE_SHIFT_OPERATOR 5
+#define LR1_ALL_SHIFT_OPERATOR 6
+#define LR1_FSET_TRANSIENCE_OPERATOR 7
+#define SMALL_BUFFER_4K 1024*4
+#define BITS_PER_WORD 32
+#define TOTAL_NO_BIT_WORDS 1024*2*100 \
+ \
+ \
+ \
+ \
+ \
+ \
+ \
+
+
+//line 30 "/usr/local/yacco2/o2linker/includes.w"
+
+#ifndef o2linker__
+#define o2linker__ 1
+/*86:*/
+//line 12 "/usr/local/yacco2/o2linker/includes.w"
+
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "o2linker_externs.h"
+#include "link_cleanser.h"
+#include "t_alphabet.h"
+#include "fsc_file.h"
+
+
+/*:86*/
+//line 33 "/usr/local/yacco2/o2linker/includes.w"
+
+/*14:*/
+//line 24 "/usr/local/yacco2/o2linker/prog.w"
+
+extern int NO_OF_THREADS;
+extern int NO_WORDS_FOR_BIT_MAP;
+
+/*:14*//*28:*/
+//line 320 "/usr/local/yacco2/o2linker/prog.w"
+
+extern char Visit_graph[RESERVE_FIXED_NO_THREADS];
+/*:28*/
+//line 34 "/usr/local/yacco2/o2linker/includes.w"
+
+#endif
+
+/*:88*/
diff --git a/web/yacco2/o2linker/o2linker.w b/web/yacco2/o2linker/o2linker.w
new file mode 100644
index 0000000000..3bd40feafd
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker.w
@@ -0,0 +1,20 @@
+@q file: o2linker.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "eplain"
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@i "/usr/local/yacco2/license.w"
+@i "/usr/local/yacco2/o2linker/intro.w"
+@i "/usr/local/yacco2/o2linker/prog.w"
+@i "/usr/local/yacco2/o2linker/o2linker_defs.w"
+@i "/usr/local/yacco2/o2linker/pms.w"
+@i "/usr/local/yacco2/o2linker/bugs.w"
+@i "/usr/local/yacco2/o2linker/testsuites.w"
+@i "/usr/local/yacco2/o2linker/sampleoutput.w"
+@i "/usr/local/yacco2/o2linker/includes.w"
+@** Index. \ No newline at end of file
diff --git a/web/yacco2/o2linker/o2linker_defs.cpp b/web/yacco2/o2linker/o2linker_defs.cpp
new file mode 100644
index 0000000000..019c43c330
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_defs.cpp
@@ -0,0 +1,99 @@
+/*71:*/
+//line 90 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+#include "o2linker.h"
+/*68:*/
+//line 10 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+extern void PRINT_CALLED_THREAD_LIST(AST*Node,std::ofstream*Ow_linker_file,int Idx)
+{
+char big_buf_[BIG_BUFFER_32K];
+thread_attributes*ta= (thread_attributes*)AST::content(*Node);
+KCHARP w_called_threads=
+"\\Linkercalledthreads{%s}{%i}";
+char xlate_gfile[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(ta->thread_name_->c_string()->c_str(),xlate_gfile);
+int x= sprintf(big_buf_
+,w_called_threads
+,xlate_gfile
+,Idx
+);
+(*Ow_linker_file).write(big_buf_,x);
+(*Ow_linker_file)<<endl;
+KCHARP w_called_threads_index=
+"@.%s@>";
+x= sprintf(big_buf_
+,w_called_threads_index
+,xlate_gfile
+);
+(*Ow_linker_file).write(big_buf_,x);
+(*Ow_linker_file)<<endl;
+}
+
+yacco2::functor_result_type
+prt_called_thread_list_ast_functor::operator()(yacco2::ast_base_stack*Stk_env){
+stk_env_= Stk_env;
+srec_= stk_env_->cur_stk_rec_;
+idx_= stk_env_->idx_;
+yacco2::INT pidx= idx_-1;
+cnode_= srec_->node_;
+if(pidx<=0)goto prt_prefix;
+{
+ast_base_stack::s_rec*psrec= stk_env_->stk_rec(pidx);
+}
+prt_prefix:
+/*69:*/
+//line 75 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Acquired trace mu"<<std::endl;
+}
+
+/*:69*/
+//line 48 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+yacco2::INT no_lt(0);
+for(yacco2::INT x= 0;x<=idx_;++x)
+if(stk_env_->stk_rec(x)->act_==ast_base_stack::left)++no_lt;
+/*70:*/
+//line 83 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+if(yacco2::YACCO2_MU_TRACING__){
+yacco2::lrclog<<"YACCO2_MU_TRACING__::Releasing trace mu"<<std::endl;
+}
+UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+/*:70*/
+//line 52 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+call_prt_func:
+(*prt_funct_)(cnode_,ow_linker_file_,no_lt+1);
+return accept_node;
+}
+
+prt_called_thread_list_ast_functor::
+prt_called_thread_list_ast_functor(PFF Func)
+:prt_funct_(Func),cnt_(0),ow_linker_file_(0){}
+
+void
+prt_called_thread_list_ast_functor::
+reset_cnt(){
+cnt_= 0;
+}
+void prt_called_thread_list_ast_functor::o_file(std::ofstream*Ow_linker_file){
+ow_linker_file_= Ow_linker_file;
+}
+
+/*:68*/
+//line 92 "/usr/local/yacco2/o2linker/o2linker_defs.w"
+
+//line 1 "/usr/local/yacco2/o2linker/pms.w"
+
+
+
+
+
+
+
+/*:71*/
diff --git a/web/yacco2/o2linker/o2linker_defs.w b/web/yacco2/o2linker/o2linker_defs.w
new file mode 100644
index 0000000000..9beeb1983e
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_defs.w
@@ -0,0 +1,92 @@
+@q file: o2linker_defs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@*1 Structure implementation.
+@*2 |prt_called_thread_list_ast_functor| implementation.
+@<Structure implementations@>=
+extern void PRINT_CALLED_THREAD_LIST(AST* Node,std::ofstream* Ow_linker_file,int Idx)
+{
+ char big_buf_[BIG_BUFFER_32K];
+ thread_attributes* ta = (thread_attributes*)AST::content(*Node);
+ KCHARP w_called_threads =
+ "\\Linkercalledthreads{%s}{%i}";
+ char xlate_gfile[Max_cweb_item_size];
+ XLATE_SYMBOLS_FOR_cweave(ta->thread_name_->c_string()->c_str(),xlate_gfile);
+ int x = sprintf(big_buf_
+ ,w_called_threads
+ ,xlate_gfile
+ ,Idx
+ );
+ (*Ow_linker_file).write(big_buf_,x);
+ (*Ow_linker_file) << endl;
+ KCHARP w_called_threads_index =
+ "@@.%s@@>";
+ x = sprintf(big_buf_
+ ,w_called_threads_index
+ ,xlate_gfile
+ );
+ (*Ow_linker_file).write(big_buf_,x);
+ (*Ow_linker_file) << endl;
+}
+@/
+yacco2::functor_result_type @/
+prt_called_thread_list_ast_functor::operator()(yacco2::ast_base_stack* Stk_env){
+ stk_env_ = Stk_env;
+ srec_ = stk_env_->cur_stk_rec_;
+ idx_ = stk_env_->idx_;
+ yacco2::INT pidx = idx_ - 1;
+ cnode_ = srec_->node_;
+ if(pidx <= 0) goto prt_prefix;
+ {
+ ast_base_stack::s_rec* psrec = stk_env_->stk_rec(pidx);
+ }
+prt_prefix:@/
+@<acquire trace mu@>;
+ yacco2::INT no_lt(0);
+ for (yacco2::INT x = 0; x <= idx_; ++x)
+ if(stk_env_->stk_rec(x)->act_ == ast_base_stack::left) ++no_lt;
+@<release trace mu@>;
+call_prt_func:@/
+ (*prt_funct_)(cnode_,ow_linker_file_,no_lt+1);
+ return accept_node;//continue looping thru ast
+ }
+
+ prt_called_thread_list_ast_functor::
+ prt_called_thread_list_ast_functor(PFF Func)
+ :prt_funct_(Func),cnt_(0),ow_linker_file_(0){}
+
+ void
+ prt_called_thread_list_ast_functor::
+ reset_cnt(){
+ cnt_ = 0;
+ }
+ void prt_called_thread_list_ast_functor::o_file(std::ofstream* Ow_linker_file){
+ ow_linker_file_ = Ow_linker_file;
+ }
+
+@*2 Acquire trace mu.\fbreak
+Used to serialize trace output.
+Sometimes the traced output is skewed due to the threading.
+The output to a global container is not thread safe, so make it by use of a mutex.
+@<acquire trace mu@>=
+ LOCK_MUTEX(yacco2::TRACE_MU);
+if(yacco2::YACCO2_MU_TRACING__){
+ yacco2::lrclog << "YACCO2_MU_TRACING__::Acquired trace mu" << std::endl;
+}
+
+@*2 Release trace mu.\fbreak
+Used to serialize trace output.
+@<release trace mu@>=
+if(yacco2::YACCO2_MU_TRACING__){
+ yacco2::lrclog << "YACCO2_MU_TRACING__::Releasing trace mu" << std::endl;
+}
+ UNLOCK_MUTEX(yacco2::TRACE_MU);
+
+@** Write out |o2linker_defs.cpp| Structure implementations.\fbreak
+@(o2linker_defs.cpp@>=
+#include "o2linker.h"
+@<Structure implementations@>;
diff --git a/web/yacco2/o2linker/o2linker_doc.w b/web/yacco2/o2linker/o2linker_doc.w
new file mode 100644
index 0000000000..a9cac7f2a7
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_doc.w
@@ -0,0 +1,3195 @@
+@q File: o2linker_def.w @>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+\IDXlinkerdoctitle{o2linker\_doc.w}{o2linker\_doc.w}{/yacco2/compiler/grammars/yacco2.fsc}
+@** O2linker Index of Grammars.\fbreak
+The grammars are sorted lexicographically into 2 parts:
+threads followed by the stand alone grammars.
+Each grammar's called threads graph is determined from their
+ ``list-of-transitive-threads''
+derived from this construct.
+@*2 TH\_angled\_string --- Angled string lexer: \LTsign ... \GTsign with c type$\ldots$ .
+\Linkeridxentryk{Angled string lexer: \LTsign ... \GTsign with c type escape sequences.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_angled\_string}{1}
+@.TH\_angled\_string@>
+{\parindent=6pc
+\item{First set:}
+raw\_less\_than
+@.raw\_less\_than@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_bad\_char\_set --- Bad source character set recognizer.
+\Linkeridxentryk{Bad source character set recognizer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_bad\_char\_set}{1}
+@.TH\_bad\_char\_set@>
+{\parindent=6pc
+\item{First set:}
+raw\_nul
+@.raw\_nul@>
+raw\_soh
+@.raw\_soh@>
+raw\_stx
+@.raw\_stx@>
+raw\_etx
+@.raw\_etx@>
+raw\_eot
+@.raw\_eot@>
+raw\_enq
+@.raw\_enq@>
+raw\_ack
+@.raw\_ack@>
+raw\_bel
+@.raw\_bel@>
+raw\_bs
+@.raw\_bs@>
+raw\_so
+@.raw\_so@>
+raw\_si
+@.raw\_si@>
+raw\_dle
+@.raw\_dle@>
+raw\_dc1
+@.raw\_dc1@>
+raw\_dc2
+@.raw\_dc2@>
+raw\_dc3
+@.raw\_dc3@>
+raw\_dc4
+@.raw\_dc4@>
+raw\_nak
+@.raw\_nak@>
+raw\_syn
+@.raw\_syn@>
+raw\_etb
+@.raw\_etb@>
+raw\_can
+@.raw\_can@>
+raw\_em
+@.raw\_em@>
+raw\_sub
+@.raw\_sub@>
+raw\_esc
+@.raw\_esc@>
+raw\_fs
+@.raw\_fs@>
+raw\_gs
+@.raw\_gs@>
+raw\_rs
+@.raw\_rs@>
+raw\_us
+@.raw\_us@>
+raw\_del
+@.raw\_del@>
+raw\_x80
+@.raw\_x80@>
+raw\_x81
+@.raw\_x81@>
+raw\_x82
+@.raw\_x82@>
+raw\_x83
+@.raw\_x83@>
+raw\_x84
+@.raw\_x84@>
+raw\_x85
+@.raw\_x85@>
+raw\_x86
+@.raw\_x86@>
+raw\_x87
+@.raw\_x87@>
+raw\_x88
+@.raw\_x88@>
+raw\_x89
+@.raw\_x89@>
+raw\_x8a
+@.raw\_x8a@>
+raw\_x8b
+@.raw\_x8b@>
+raw\_x8c
+@.raw\_x8c@>
+raw\_x8d
+@.raw\_x8d@>
+raw\_x8e
+@.raw\_x8e@>
+raw\_x8f
+@.raw\_x8f@>
+raw\_x90
+@.raw\_x90@>
+raw\_x91
+@.raw\_x91@>
+raw\_x92
+@.raw\_x92@>
+raw\_x93
+@.raw\_x93@>
+raw\_x94
+@.raw\_x94@>
+raw\_x95
+@.raw\_x95@>
+raw\_x96
+@.raw\_x96@>
+raw\_x97
+@.raw\_x97@>
+raw\_x98
+@.raw\_x98@>
+raw\_x99
+@.raw\_x99@>
+raw\_x9a
+@.raw\_x9a@>
+raw\_x9b
+@.raw\_x9b@>
+raw\_x9c
+@.raw\_x9c@>
+raw\_x9d
+@.raw\_x9d@>
+raw\_x9e
+@.raw\_x9e@>
+raw\_x9f
+@.raw\_x9f@>
+raw\_xa0
+@.raw\_xa0@>
+raw\_xa1
+@.raw\_xa1@>
+raw\_xa2
+@.raw\_xa2@>
+raw\_xa3
+@.raw\_xa3@>
+raw\_xa4
+@.raw\_xa4@>
+raw\_xa5
+@.raw\_xa5@>
+raw\_xa6
+@.raw\_xa6@>
+raw\_xa7
+@.raw\_xa7@>
+raw\_xa8
+@.raw\_xa8@>
+raw\_xa9
+@.raw\_xa9@>
+raw\_xaa
+@.raw\_xaa@>
+raw\_xab
+@.raw\_xab@>
+raw\_xac
+@.raw\_xac@>
+raw\_xad
+@.raw\_xad@>
+raw\_xae
+@.raw\_xae@>
+raw\_xaf
+@.raw\_xaf@>
+raw\_xb0
+@.raw\_xb0@>
+raw\_xb1
+@.raw\_xb1@>
+raw\_xb2
+@.raw\_xb2@>
+raw\_xb3
+@.raw\_xb3@>
+raw\_xb4
+@.raw\_xb4@>
+raw\_xb5
+@.raw\_xb5@>
+raw\_xb6
+@.raw\_xb6@>
+raw\_xb7
+@.raw\_xb7@>
+raw\_xb8
+@.raw\_xb8@>
+raw\_xb9
+@.raw\_xb9@>
+raw\_xba
+@.raw\_xba@>
+raw\_xbb
+@.raw\_xbb@>
+raw\_xbc
+@.raw\_xbc@>
+raw\_xbd
+@.raw\_xbd@>
+raw\_xbe
+@.raw\_xbe@>
+raw\_xbf
+@.raw\_xbf@>
+raw\_xc0
+@.raw\_xc0@>
+raw\_xc1
+@.raw\_xc1@>
+raw\_xc2
+@.raw\_xc2@>
+raw\_xc3
+@.raw\_xc3@>
+raw\_xc4
+@.raw\_xc4@>
+raw\_xc5
+@.raw\_xc5@>
+raw\_xc6
+@.raw\_xc6@>
+raw\_xc7
+@.raw\_xc7@>
+raw\_xc8
+@.raw\_xc8@>
+raw\_xc9
+@.raw\_xc9@>
+raw\_xca
+@.raw\_xca@>
+raw\_xcb
+@.raw\_xcb@>
+raw\_xcc
+@.raw\_xcc@>
+raw\_xcd
+@.raw\_xcd@>
+raw\_xce
+@.raw\_xce@>
+raw\_xcf
+@.raw\_xcf@>
+raw\_xd0
+@.raw\_xd0@>
+raw\_xd1
+@.raw\_xd1@>
+raw\_xd2
+@.raw\_xd2@>
+raw\_xd3
+@.raw\_xd3@>
+raw\_xd4
+@.raw\_xd4@>
+raw\_xd5
+@.raw\_xd5@>
+raw\_xd6
+@.raw\_xd6@>
+raw\_xd7
+@.raw\_xd7@>
+raw\_xd8
+@.raw\_xd8@>
+raw\_xd9
+@.raw\_xd9@>
+raw\_xda
+@.raw\_xda@>
+raw\_xdb
+@.raw\_xdb@>
+raw\_xdc
+@.raw\_xdc@>
+raw\_xdd
+@.raw\_xdd@>
+raw\_xde
+@.raw\_xde@>
+raw\_xdf
+@.raw\_xdf@>
+raw\_xe0
+@.raw\_xe0@>
+raw\_xe1
+@.raw\_xe1@>
+raw\_xe2
+@.raw\_xe2@>
+raw\_xe3
+@.raw\_xe3@>
+raw\_xe4
+@.raw\_xe4@>
+raw\_xe5
+@.raw\_xe5@>
+raw\_xe6
+@.raw\_xe6@>
+raw\_xe7
+@.raw\_xe7@>
+raw\_xe8
+@.raw\_xe8@>
+raw\_xe9
+@.raw\_xe9@>
+raw\_xea
+@.raw\_xea@>
+raw\_xeb
+@.raw\_xeb@>
+raw\_xec
+@.raw\_xec@>
+raw\_xed
+@.raw\_xed@>
+raw\_xee
+@.raw\_xee@>
+raw\_xef
+@.raw\_xef@>
+raw\_xf0
+@.raw\_xf0@>
+raw\_xf1
+@.raw\_xf1@>
+raw\_xf2
+@.raw\_xf2@>
+raw\_xf3
+@.raw\_xf3@>
+raw\_xf4
+@.raw\_xf4@>
+raw\_xf5
+@.raw\_xf5@>
+raw\_xf6
+@.raw\_xf6@>
+raw\_xf7
+@.raw\_xf7@>
+raw\_xf8
+@.raw\_xf8@>
+raw\_xf9
+@.raw\_xf9@>
+raw\_xfa
+@.raw\_xfa@>
+raw\_xfb
+@.raw\_xfb@>
+raw\_xfc
+@.raw\_xfc@>
+raw\_xfd
+@.raw\_xfd@>
+raw\_xfe
+@.raw\_xfe@>
+raw\_xff
+@.raw\_xff@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_cweb\_comments --- CWEB comments containing directives.
+\Linkeridxentryk{CWEB comments containing directives.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_cweb\_comments}{1}
+@.TH\_cweb\_comments@>
+{\parindent=6pc
+\item{First set:}
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_cweb\_or\_c\_k --- C++ or cweb type comments lexer.
+\Linkeridxentryk{C++ or cweb type comments lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_cweb\_or\_c\_k}{1}
+@.TH\_cweb\_or\_c\_k@>
+{\parindent=6pc
+\item{First set:}
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_c\_comments --- C++ type comments lexer.
+\Linkeridxentryk{C++ type comments lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_c\_comments}{1}
+@.TH\_c\_comments@>
+{\parindent=6pc
+\item{First set:}
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_c\_literal --- C literal lexer.
+\Linkeridxentryk{C literal lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_c\_literal}{1}
+@.TH\_c\_literal@>
+{\parindent=6pc
+\item{First set:}
+raw\_right\_quote
+@.raw\_right\_quote@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_c\_string --- C string lexer.
+\Linkeridxentryk{C string lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_c\_string}{1}
+@.TH\_c\_string@>
+{\parindent=6pc
+\item{First set:}
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_dbl\_colon --- This one's for the thread's name :: lexer.
+\Linkeridxentryk{This one's for the thread's name :: lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_dbl\_colon}{1}
+@.TH\_dbl\_colon@>
+{\parindent=6pc
+\item{First set:}
+raw\_colon
+@.raw\_colon@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_eol --- end-of-line recognizer --- Unix, Mac, and Microsoft supported s$\ldots$ .
+\Linkeridxentryk{end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_eol}{1}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+raw\_lf
+@.raw\_lf@>
+raw\_cr
+@.raw\_cr@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_err\_symbols\_ph\_th --- Parse Error vocabulary.
+\Linkeridxentryk{Parse Error vocabulary.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_err\_symbols\_ph\_th}{1}
+@.TH\_err\_symbols\_ph\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_term\_def\_ph
+@.TH\_term\_def\_ph@>
+}
+@*2 TH\_esc\_seq --- C type escape sequence recognizer.
+\Linkeridxentryk{C type escape sequence recognizer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_esc\_seq}{1}
+@.TH\_esc\_seq@>
+{\parindent=6pc
+\item{First set:}
+raw\_back\_slash
+@.raw\_back\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_fsm\_class\_phrase\_th --- Parse the fsm-class grammar construct.
+\Linkeridxentryk{Parse the fsm-class grammar construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_fsm\_class\_phrase\_th}{1}
+@.TH\_fsm\_class\_phrase\_th@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+}
+@*2 TH\_fsm\_phrase\_th --- Parse grammar's fsm phrase along with its directive$\ldots$ .
+\Linkeridxentryk{Parse grammar's fsm phrase along with its directives.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_fsm\_phrase\_th}{1}
+@.TH\_fsm\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_fsm\_class\_phrase\_th
+@.TH\_fsm\_class\_phrase\_th@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+}
+@*2 TH\_identifier --- Yacco2 identifiers lexer with symbol table lookup.
+\Linkeridxentryk{Yacco2 identifiers lexer with symbol table lookup.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_identifier}{1}
+@.TH\_identifier@>
+{\parindent=6pc
+\item{First set:}
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_int\_no --- Integer number lexer.
+\Linkeridxentryk{Integer number lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_int\_no}{1}
+@.TH\_int\_no@>
+{\parindent=6pc
+\item{First set:}
+raw\_0
+@.raw\_0@>
+raw\_1
+@.raw\_1@>
+raw\_2
+@.raw\_2@>
+raw\_3
+@.raw\_3@>
+raw\_4
+@.raw\_4@>
+raw\_5
+@.raw\_5@>
+raw\_6
+@.raw\_6@>
+raw\_7
+@.raw\_7@>
+raw\_8
+@.raw\_8@>
+raw\_9
+@.raw\_9@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_la\_express\_source --- Lexer: 1st stage of Lookahead source expression$\ldots$ .
+\Linkeridxentryk{Lexer: 1st stage of Lookahead source expression
+ converted into raw character tokens for post evaluation.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_la\_express\_source}{1}
+@.TH\_la\_express\_source@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_c\_literal}{2}
+@.TH\_c\_literal@>
+\Linkercalledthreads{TH\_o2\_code\_end}{2}
+@.TH\_o2\_code\_end@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+\Linkercalledthreads{TH\_la\_lrk\_T}{2}
+@.TH\_la\_lrk\_T@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+LR1\_fset\_transience\_operator
+@.LR1\_fset\_transience\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_right\_quote
+@.raw\_right\_quote@>
+raw\_asteric
+@.raw\_asteric@>
+raw\_plus
+@.raw\_plus@>
+raw\_minus
+@.raw\_minus@>
+raw\_slash
+@.raw\_slash@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+raw\_vertical\_line
+@.raw\_vertical\_line@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_literal
+@.TH\_c\_literal@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_la\_lrk\_T
+@.TH\_la\_lrk\_T@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_code\_end
+@.TH\_o2\_code\_end@>
+}
+@*2 TH\_la\_lrk\_T --- Unquoted lookahead source symbol recognizer.
+\Linkeridxentryk{Unquoted lookahead source symbol recognizer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_la\_lrk\_T}{1}
+@.TH\_la\_lrk\_T@>
+{\parindent=6pc
+\item{First set:}
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_right\_quote
+@.raw\_right\_quote@>
+raw\_vertical\_line
+@.raw\_vertical\_line@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_linker\_id --- \olinker identifiers recognizer: uses symbol table.
+\Linkeridxentryk{\olinker identifiers recognizer: uses symbol table.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_linker\_id}{1}
+@.TH\_linker\_id@>
+{\parindent=6pc
+\item{First set:}
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_linker\_preamble\_code --- \olinker's lexer of preamble code section:
+ $\ldots$ .
+\Linkeridxentryk{\olinker's lexer of preamble code section:
+ similar to Pass3 lexer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_linker\_preamble\_code}{1}
+@.TH\_linker\_preamble\_code@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_c\_literal}{2}
+@.TH\_c\_literal@>
+\Linkercalledthreads{TH\_linker\_id}{2}
+@.TH\_linker\_id@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_right\_quote
+@.raw\_right\_quote@>
+raw\_slash
+@.raw\_slash@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_c\_literal
+@.TH\_c\_literal@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_linker\_id
+@.TH\_linker\_id@>
+}
+@*2 TH\_lint\_balls --- Is this spring cleaning?.
+\Linkeridxentryk{Is this spring cleaning?}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_lint\_balls}{1}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_eol
+@.TH\_eol@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 TH\_lr1\_k\_phrase\_th --- Parse lr1 k symbols phrase.
+\Linkeridxentryk{Parse lr1 k symbols phrase.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_lr1\_k\_phrase\_th}{1}
+@.TH\_lr1\_k\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+TH\_term\_def\_ph
+@.TH\_term\_def\_ph@>
+}
+@*2 TH\_o2\_code\_end --- Lexer syntax directed code end marker: \threeasteric.
+\Linkeridxentryk{Lexer syntax directed code end marker: \threeasteric.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_o2\_code\_end}{1}
+@.TH\_o2\_code\_end@>
+{\parindent=6pc
+\item{First set:}
+raw\_asteric
+@.raw\_asteric@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_o2\_lcl\_opt --- \O2's individual command line option recognizer.
+\Linkeridxentryk{\O2's individual command line option recognizer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_o2\_lcl\_opt}{1}
+@.TH\_o2\_lcl\_opt@>
+{\parindent=6pc
+\item{First set:}
+raw\_minus
+@.raw\_minus@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_o2\_sdc --- \O2's syntax directed code extractor.
+\Linkeridxentryk{\O2's syntax directed code extractor.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_o2\_sdc}{1}
+@.TH\_o2\_sdc@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_c\_literal}{2}
+@.TH\_c\_literal@>
+\Linkercalledthreads{TH\_o2\_code\_end}{2}
+@.TH\_o2\_code\_end@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_right\_quote
+@.raw\_right\_quote@>
+raw\_asteric
+@.raw\_asteric@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_c\_literal
+@.TH\_c\_literal@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_o2\_code\_end
+@.TH\_o2\_code\_end@>
+}
+@*2 TH\_parallel\_monitor\_ph --- Parse a rule's arbitration code:
+ into the v$\ldots$ .
+\Linkeridxentryk{Parse a rule's arbitration code:
+ into the valley of someone's dementia...}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_parallel\_monitor\_ph}{1}
+@.TH\_parallel\_monitor\_ph@>
+{\parindent=6pc
+\item{First set:}
+T\_parallel\_control\_monitor
+@.T\_parallel\_control\_monitor@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+}
+@*2 TH\_parallel\_oper --- Lexer for Parallel operator: \PARshift.
+\Linkeridxentryk{Lexer for Parallel operator: \PARshift.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_parallel\_oper}{1}
+@.TH\_parallel\_oper@>
+{\parindent=6pc
+\item{First set:}
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_vertical\_line
+@.raw\_vertical\_line@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_parallel\_parser\_ph\_th --- Parse grammar's parallel-parser construct.
+\Linkeridxentryk{Parse grammar's parallel-parser construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_parallel\_parser\_ph\_th}{1}
+@.TH\_parallel\_parser\_ph\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_identifier
+@.TH\_identifier@>
+TH\_la\_express\_source
+@.TH\_la\_express\_source@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_code\_end
+@.TH\_o2\_code\_end@>
+}
+@*2 TH\_prefile\_include --- Preprocessor source file from the ``include file''$\ldots$ .
+\Linkeridxentryk{Preprocessor source file from the ``include file'' directive.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_prefile\_include}{1}
+@.TH\_prefile\_include@>
+{\parindent=6pc
+\item{First set:}
+raw\_at\_sign
+@.raw\_at\_sign@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_eol
+@.TH\_eol@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 TH\_rc\_phrase\_th --- Raw character vocabulary parser.
+\Linkeridxentryk{Raw character vocabulary parser.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rc\_phrase\_th}{1}
+@.TH\_rc\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_term\_def\_ph
+@.TH\_term\_def\_ph@>
+}
+@*2 TH\_rhs\_bnd --- Determine end-of-subrule expression within a rule.
+\Linkeridxentryk{Determine end-of-subrule expression within a rule.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rhs\_bnd}{1}
+@.TH\_rhs\_bnd@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eog
+@.LR1\_eog@>
+raw\_minus
+@.raw\_minus@>
+raw\_open\_brace
+@.raw\_open\_brace@>
+raw\_close\_brace
+@.raw\_close\_brace@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_rhs\_component --- Subule's individual component recognizer except eosu$\ldots$ .
+\Linkeridxentryk{Subule's individual component recognizer except eosubrule.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rhs\_component}{1}
+@.TH\_rhs\_component@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_unq\_str}{2}
+@.TH\_unq\_str@>
+\Linkercalledthreads{TH\_cweb\_or\_c\_k}{2}
+@.TH\_cweb\_or\_c\_k@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_slash
+@.raw\_slash@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_unq\_str
+@.TH\_unq\_str@>
+}
+@*2 TH\_rtn\_component --- Recognizer of returned T from a thread call expressi$\ldots$ .
+\Linkeridxentryk{Recognizer of returned T from a thread call expression.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rtn\_component}{1}
+@.TH\_rtn\_component@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_unq\_str}{2}
+@.TH\_unq\_str@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_unq\_str
+@.TH\_unq\_str@>
+}
+@*2 TH\_rules\_phrase\_th --- Parse all of the grammar's rules.
+\Linkeridxentryk{Parse all of the grammar's rules.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rules\_phrase\_th}{1}
+@.TH\_rules\_phrase\_th@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_cweb\_or\_c\_k}{2}
+@.TH\_cweb\_or\_c\_k@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_slash
+@.raw\_slash@>
+raw\_open\_brace
+@.raw\_open\_brace@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_eol
+@.TH\_eol@>
+TH\_rule\_def\_phrase
+@.TH\_rule\_def\_phrase@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 TH\_rule\_def\_phrase --- Parse a grammar's rule definition.
+\Linkeridxentryk{Parse a grammar's rule definition.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rule\_def\_phrase}{1}
+@.TH\_rule\_def\_phrase@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_subrules\_phrase
+@.TH\_subrules\_phrase@>
+TH\_t\_def\_delabort\_tags
+@.TH\_t\_def\_delabort\_tags@>
+}
+@*2 TH\_rule\_lhs\_phrase --- Parse a rule's ``lhs'' directive.
+\Linkeridxentryk{Parse a rule's ``lhs'' directive.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_rule\_lhs\_phrase}{1}
+@.TH\_rule\_lhs\_phrase@>
+{\parindent=6pc
+\item{First set:}
+T\_lhs
+@.T\_lhs@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+}
+@*2 TH\_subrules\_phrase --- Parse subrules: into the valley of ...
+\Linkeridxentryk{Parse subrules: into the valley of ...}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_subrules\_phrase}{1}
+@.TH\_subrules\_phrase@>
+\Linkercalledthreads{TH\_subrule\_def}{2}
+@.TH\_subrule\_def@>
+\Linkercalledthreads{TH\_subrule\_vector}{3}
+@.TH\_subrule\_vector@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_minus
+@.raw\_minus@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_subrule\_def
+@.TH\_subrule\_def@>
+}
+@*2 TH\_subrule\_def --- Parse a subrule: into the valley of sin...
+\Linkeridxentryk{Parse a subrule: into the valley of sin...}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_subrule\_def}{1}
+@.TH\_subrule\_def@>
+\Linkercalledthreads{TH\_subrule\_vector}{2}
+@.TH\_subrule\_vector@>
+{\parindent=6pc
+\item{First set:}
+raw\_minus
+@.raw\_minus@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_dbl\_colon
+@.TH\_dbl\_colon@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+TH\_parallel\_oper
+@.TH\_parallel\_oper@>
+TH\_rhs\_bnd
+@.TH\_rhs\_bnd@>
+TH\_rhs\_component
+@.TH\_rhs\_component@>
+TH\_rtn\_component
+@.TH\_rtn\_component@>
+TH\_subrule\_vector
+@.TH\_subrule\_vector@>
+}
+@*2 TH\_subrule\_vector --- Lexer of subrule begin operator: \subrule.
+\Linkeridxentryk{Lexer of subrule begin operator: \subrule.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_subrule\_vector}{1}
+@.TH\_subrule\_vector@>
+{\parindent=6pc
+\item{First set:}
+raw\_minus
+@.raw\_minus@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_terminals\_phrase\_th --- Parse terminals vocabulary.
+\Linkeridxentryk{Parse terminals vocabulary.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_terminals\_phrase\_th}{1}
+@.TH\_terminals\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+TH\_term\_def\_ph
+@.TH\_term\_def\_ph@>
+}
+@*2 TH\_terminal\_def\_symclass --- Lexer of ``sym-class'' keyword.
+\Linkeridxentryk{Lexer of ``sym-class'' keyword.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_terminal\_def\_symclass}{1}
+@.TH\_terminal\_def\_symclass@>
+{\parindent=6pc
+\item{First set:}
+raw\_s
+@.raw\_s@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_term\_def\_ph --- Parse a terminal symbol.
+\Linkeridxentryk{Parse a terminal symbol.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_term\_def\_ph}{1}
+@.TH\_term\_def\_ph@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+{\parindent=6pc
+\item{First set:}
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+raw\_A
+@.raw\_A@>
+raw\_B
+@.raw\_B@>
+raw\_C
+@.raw\_C@>
+raw\_D
+@.raw\_D@>
+raw\_E
+@.raw\_E@>
+raw\_F
+@.raw\_F@>
+raw\_G
+@.raw\_G@>
+raw\_H
+@.raw\_H@>
+raw\_I
+@.raw\_I@>
+raw\_J
+@.raw\_J@>
+raw\_K
+@.raw\_K@>
+raw\_L
+@.raw\_L@>
+raw\_M
+@.raw\_M@>
+raw\_N
+@.raw\_N@>
+raw\_O
+@.raw\_O@>
+raw\_P
+@.raw\_P@>
+raw\_Q
+@.raw\_Q@>
+raw\_R
+@.raw\_R@>
+raw\_S
+@.raw\_S@>
+raw\_T
+@.raw\_T@>
+raw\_U
+@.raw\_U@>
+raw\_V
+@.raw\_V@>
+raw\_W
+@.raw\_W@>
+raw\_X
+@.raw\_X@>
+raw\_Y
+@.raw\_Y@>
+raw\_Z
+@.raw\_Z@>
+raw\_a
+@.raw\_a@>
+raw\_b
+@.raw\_b@>
+raw\_c
+@.raw\_c@>
+raw\_d
+@.raw\_d@>
+raw\_e
+@.raw\_e@>
+raw\_f
+@.raw\_f@>
+raw\_g
+@.raw\_g@>
+raw\_h
+@.raw\_h@>
+raw\_i
+@.raw\_i@>
+raw\_j
+@.raw\_j@>
+raw\_k
+@.raw\_k@>
+raw\_l
+@.raw\_l@>
+raw\_m
+@.raw\_m@>
+raw\_n
+@.raw\_n@>
+raw\_o
+@.raw\_o@>
+raw\_p
+@.raw\_p@>
+raw\_q
+@.raw\_q@>
+raw\_r
+@.raw\_r@>
+raw\_s
+@.raw\_s@>
+raw\_t
+@.raw\_t@>
+raw\_u
+@.raw\_u@>
+raw\_v
+@.raw\_v@>
+raw\_w
+@.raw\_w@>
+raw\_x
+@.raw\_x@>
+raw\_y
+@.raw\_y@>
+raw\_z
+@.raw\_z@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+TH\_t\_def\_delabort\_tags
+@.TH\_t\_def\_delabort\_tags@>
+TH\_terminal\_def\_symclass
+@.TH\_terminal\_def\_symclass@>
+}
+@*2 TH\_t\_def\_delabort\_tags --- AB AD grammar symbol tags recognizer.
+\Linkeridxentryk{AB AD grammar symbol tags recognizer.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_t\_def\_delabort\_tags}{1}
+@.TH\_t\_def\_delabort\_tags@>
+{\parindent=6pc
+\item{First set:}
+raw\_A
+@.raw\_A@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_T\_enum\_phrase\_th --- Parse ``T-enumeration'' construct: Time out sme$\ldots$ .
+\Linkeridxentryk{Parse ``T-enumeration'' construct: Time out smell the tullips.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_T\_enum\_phrase\_th}{1}
+@.TH\_T\_enum\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+raw\_ht
+@.raw\_ht@>
+raw\_lf
+@.raw\_lf@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_cr
+@.raw\_cr@>
+raw\_sp
+@.raw\_sp@>
+raw\_open\_bracket
+@.raw\_open\_bracket@>
+raw\_slash
+@.raw\_slash@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_identifier
+@.TH\_identifier@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+TH\_o2\_sdc
+@.TH\_o2\_sdc@>
+}
+@*2 TH\_unq\_str --- Unquoted string of characters: raw and basic.
+\Linkeridxentryk{Unquoted string of characters: raw and basic.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_unq\_str}{1}
+@.TH\_unq\_str@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eolr
+@.LR1\_eolr@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_ws --- White space globber.
+\Linkeridxentryk{White space globber.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_ws}{1}
+@.TH\_ws@>
+{\parindent=6pc
+\item{First set:}
+raw\_ht
+@.raw\_ht@>
+raw\_vt
+@.raw\_vt@>
+raw\_ff
+@.raw\_ff@>
+raw\_sp
+@.raw\_sp@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 TH\_xc\_str --- No escape sequence check: accept all characters between dbl$\ldots$ .
+\Linkeridxentryk{No escape sequence check: accept all characters between dbl. quoted string.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{TH\_xc\_str}{1}
+@.TH\_xc\_str@>
+{\parindent=6pc
+\item{First set:}
+raw\_dbl\_quote
+@.raw\_dbl\_quote@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Ccweave\_fsm\_sdc --- Write out cweave fsm directives sentences.
+\Linkeridxentryk{Write out cweave fsm directives sentences.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ccweave\_fsm\_sdc}{1}
+@.Ccweave\_fsm\_sdc@>
+{\parindent=6pc
+\item{First set:}
+T\_user\_declaration
+@.T\_user\_declaration@>
+T\_user\_prefix\_declaration
+@.T\_user\_prefix\_declaration@>
+T\_user\_suffix\_declaration
+@.T\_user\_suffix\_declaration@>
+T\_constructor
+@.T\_constructor@>
+T\_destructor
+@.T\_destructor@>
+T\_op
+@.T\_op@>
+T\_failed
+@.T\_failed@>
+T\_user\_implementation
+@.T\_user\_implementation@>
+T\_user\_imp\_tbl
+@.T\_user\_imp\_tbl@>
+T\_user\_imp\_sym
+@.T\_user\_imp\_sym@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Ccweave\_lhs\_sdc --- Write out cweave rule's lhs directives sentences.
+\Linkeridxentryk{Write out cweave rule's lhs directives sentences}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ccweave\_lhs\_sdc}{1}
+@.Ccweave\_lhs\_sdc@>
+{\parindent=6pc
+\item{First set:}
+T\_arbitrator\_code
+@.T\_arbitrator\_code@>
+T\_user\_declaration
+@.T\_user\_declaration@>
+T\_constructor
+@.T\_constructor@>
+T\_destructor
+@.T\_destructor@>
+T\_op
+@.T\_op@>
+T\_user\_implementation
+@.T\_user\_implementation@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Ccweave\_sdc --- Write out cweave subrule's sdc irectives sentences.
+\Linkeridxentryk{Write out cweave subrule's sdc irectives sentences}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ccweave\_sdc}{1}
+@.Ccweave\_sdc@>
+{\parindent=6pc
+\item{First set:}
+T\_arbitrator\_code
+@.T\_arbitrator\_code@>
+T\_user\_declaration
+@.T\_user\_declaration@>
+T\_user\_prefix\_declaration
+@.T\_user\_prefix\_declaration@>
+T\_user\_suffix\_declaration
+@.T\_user\_suffix\_declaration@>
+T\_constructor
+@.T\_constructor@>
+T\_destructor
+@.T\_destructor@>
+T\_op
+@.T\_op@>
+T\_user\_implementation
+@.T\_user\_implementation@>
+T\_user\_imp\_tbl
+@.T\_user\_imp\_tbl@>
+T\_user\_imp\_sym
+@.T\_user\_imp\_sym@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Ccweave\_T\_sdc --- Write out cweave Terminals' sdc directives.
+\Linkeridxentryk{Write out cweave Terminals' sdc directives.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ccweave\_T\_sdc}{1}
+@.Ccweave\_T\_sdc@>
+{\parindent=6pc
+\item{First set:}
+T\_user\_declaration
+@.T\_user\_declaration@>
+T\_constructor
+@.T\_constructor@>
+T\_destructor
+@.T\_destructor@>
+T\_op
+@.T\_op@>
+T\_user\_implementation
+@.T\_user\_implementation@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Ccweb\_put\_k\_into\_ph --- Extract CWEB comments.
+\Linkeridxentryk{Extract CWEB comments.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ccweb\_put\_k\_into\_ph}{1}
+@.Ccweb\_put\_k\_into\_ph@>
+{\parindent=6pc
+\item{First set:}
+T\_fsm\_phrase
+@.T\_fsm\_phrase@>
+T\_parallel\_parser\_phrase
+@.T\_parallel\_parser\_phrase@>
+T\_enum\_phrase
+@.T\_enum\_phrase@>
+T\_terminals\_phrase
+@.T\_terminals\_phrase@>
+T\_error\_symbols\_phrase
+@.T\_error\_symbols\_phrase@>
+T\_lr1\_k\_phrase
+@.T\_lr1\_k\_phrase@>
+T\_rc\_phrase
+@.T\_rc\_phrase@>
+T\_rules\_phrase
+@.T\_rules\_phrase@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cenumerate\_grammar --- Dump aid: Enumerate grammar's components.
+\Linkeridxentryk{Dump aid: Enumerate grammar's components}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cenumerate\_grammar}{1}
+@.Cenumerate\_grammar@>
+{\parindent=6pc
+\item{First set:}
+rule\_def
+@.rule\_def@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cenumerate\_T\_alphabet --- Enumerate grammar's terminal symbols:
+a 0 and $\ldots$ .
+\Linkeridxentryk{Enumerate grammar's terminal symbols:
+a 0 and a 1, ... the oracle for parsing lookups.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cenumerate\_T\_alphabet}{1}
+@.Cenumerate\_T\_alphabet@>
+{\parindent=6pc
+\item{First set:}
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cepsilon\_rules --- Determine whether rules are epsilon, derive T, or are p$\ldots$ .
+\Linkeridxentryk{Determine whether rules are epsilon, derive T, or are pathological.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cepsilon\_rules}{1}
+@.Cepsilon\_rules@>
+{\parindent=6pc
+\item{First set:}
+rule\_def
+@.rule\_def@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cerr\_symbols\_ph --- Dispatcher to parse ``error-symbols'' vocabulary.
+\Linkeridxentryk{Dispatcher to parse ``error-symbols'' vocabulary.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cerr\_symbols\_ph}{1}
+@.Cerr\_symbols\_ph@>
+\Linkercalledthreads{TH\_err\_symbols\_ph\_th}{2}
+@.TH\_err\_symbols\_ph\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_err\_symbols\_ph\_th
+@.TH\_err\_symbols\_ph\_th@>
+}
+@*2 Ceval\_phrases --- Evaluate parse phrase sequencer:
+ as i use a top / down$\ldots$ .
+\Linkeridxentryk{Evaluate parse phrase sequencer:
+ as i use a top / down approach to dispatching the various phrases.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ceval\_phrases}{1}
+@.Ceval\_phrases@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+LR1\_eog
+@.LR1\_eog@>
+T\_fsm\_phrase
+@.T\_fsm\_phrase@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cfsc\_file --- \Olinker's ``fsc'' control file parser.
+\Linkeridxentryk{\Olinker's ``fsc'' control file parser.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cfsc\_file}{1}
+@.Cfsc\_file@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+T\_transitive
+@.T\_transitive@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cfsm\_phrase --- Dispatcher to parse ``fsm'' construct.
+\Linkeridxentryk{Dispatcher to parse ``fsm'' construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cfsm\_phrase}{1}
+@.Cfsm\_phrase@>
+\Linkercalledthreads{TH\_fsm\_phrase\_th}{2}
+@.TH\_fsm\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_fsm\_phrase\_th
+@.TH\_fsm\_phrase\_th@>
+}
+@*2 Cla\_expr --- Parse the lookahead expression after chaffe removed.
+\Linkeridxentryk{Parse the lookahead expression after chaffe removed.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cla\_expr}{1}
+@.Cla\_expr@>
+{\parindent=6pc
+\item{First set:}
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+T\_in\_stbl
+@.T\_in\_stbl@>
+rule\_in\_stbl
+@.rule\_in\_stbl@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cla\_expr\_lexical --- Lexer: 2nd stage lexing for lookahead: stripper...
+\Linkeridxentryk{Lexer: 2nd stage lexing for lookahead: stripper...}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cla\_expr\_lexical}{1}
+@.Cla\_expr\_lexical@>
+{\parindent=6pc
+\item{First set:}
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+raw\_plus
+@.raw\_plus@>
+raw\_minus
+@.raw\_minus@>
+T\_c\_literal
+@.T\_c\_literal@>
+T\_c\_string
+@.T\_c\_string@>
+T\_identifier
+@.T\_identifier@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Clinker\_pass3 --- Lexer: constructing tokens for \olinker parsing stage.
+\Linkeridxentryk{Lexer: constructing tokens for \olinker parsing stage.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Clinker\_pass3}{1}
+@.Clinker\_pass3@>
+\Linkercalledthreads{TH\_linker\_id}{2}
+@.TH\_linker\_id@>
+\Linkercalledthreads{TH\_lint\_balls}{2}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{3}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_angled\_string
+@.TH\_angled\_string@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_linker\_id
+@.TH\_linker\_id@>
+TH\_linker\_preamble\_code
+@.TH\_linker\_preamble\_code@>
+TH\_lint\_balls
+@.TH\_lint\_balls@>
+}
+@*2 Clink\_cleanser --- Lexer: \olinker's cleanser from
+ previous lexing to re$\ldots$ .
+\Linkeridxentryk{Lexer: \olinker's cleanser from
+ previous lexing to remove chaffe before parsing stage.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Clink\_cleanser}{1}
+@.Clink\_cleanser@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_linker\_id}{2}
+@.TH\_linker\_id@>
+\Linkercalledthreads{TH\_int\_no}{2}
+@.TH\_int\_no@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+\Linkercalledthreads{TH\_bad\_char\_set}{2}
+@.TH\_bad\_char\_set@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eog
+@.LR1\_eog@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_bad\_char\_set
+@.TH\_bad\_char\_set@>
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_eol
+@.TH\_eol@>
+TH\_int\_no
+@.TH\_int\_no@>
+TH\_linker\_id
+@.TH\_linker\_id@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 Clr1\_k\_phrase --- Dispatcher to parse ``lrk-symbols'' construct.
+\Linkeridxentryk{Dispatcher to parse ``lrk-symbols'' construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Clr1\_k\_phrase}{1}
+@.Clr1\_k\_phrase@>
+\Linkercalledthreads{TH\_lr1\_k\_phrase\_th}{2}
+@.TH\_lr1\_k\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_lr1\_k\_phrase\_th
+@.TH\_lr1\_k\_phrase\_th@>
+}
+@*2 Cmpost\_output --- Output grammar rules railroad diagrams for mpost that cw$\ldots$ .
+\Linkeridxentryk{Output grammar rules railroad diagrams for mpost that cweb program uses.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cmpost\_output}{1}
+@.Cmpost\_output@>
+{\parindent=6pc
+\item{First set:}
+T\_grammar\_phrase
+@.T\_grammar\_phrase@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Co2\_err\_hdlr --- Logic sequencer: Print out errors from \O2.
+\Linkeridxentryk{Logic sequencer: Print out errors from \O2.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Co2\_err\_hdlr}{1}
+@.Co2\_err\_hdlr@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eog
+@.LR1\_eog@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+Err\_nested\_files\_exceeded
+@.Err\_nested\_files\_exceeded@>
+Err\_no\_end\_of\_code
+@.Err\_no\_end\_of\_code@>
+Err\_no\_filename
+@.Err\_no\_filename@>
+Err\_bad\_filename
+@.Err\_bad\_filename@>
+Err\_bad\_cmd\_lne\_opt
+@.Err\_bad\_cmd\_lne\_opt@>
+Err\_bad\_int\_no
+@.Err\_bad\_int\_no@>
+Err\_bad\_int\_no\_range
+@.Err\_bad\_int\_no\_range@>
+Err\_no\_int\_present
+@.Err\_no\_int\_present@>
+Err\_bad\_eos
+@.Err\_bad\_eos@>
+Err\_bad\_esc
+@.Err\_bad\_esc@>
+Err\_comment\_overrun
+@.Err\_comment\_overrun@>
+Err\_bad\_char
+@.Err\_bad\_char@>
+Err\_bad\_univ\_seq
+@.Err\_bad\_univ\_seq@>
+T\_file\_inclusion
+@.T\_file\_inclusion@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Co2\_lcl\_opts --- \O2's command line options dispatcher.
+\Linkeridxentryk{\O2's command line options dispatcher.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Co2\_lcl\_opts}{1}
+@.Co2\_lcl\_opts@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+\Linkercalledthreads{TH\_unq\_str}{2}
+@.TH\_unq\_str@>
+\Linkercalledthreads{TH\_xc\_str}{2}
+@.TH\_xc\_str@>
+\Linkercalledthreads{TH\_o2\_lcl\_opt}{2}
+@.TH\_o2\_lcl\_opt@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_eol
+@.TH\_eol@>
+TH\_o2\_lcl\_opt
+@.TH\_o2\_lcl\_opt@>
+TH\_unq\_str
+@.TH\_unq\_str@>
+TH\_ws
+@.TH\_ws@>
+TH\_xc\_str
+@.TH\_xc\_str@>
+}
+@*2 Co2\_linker\_opts --- \Olinker's Command line options parser.
+\Linkeridxentryk{\Olinker's Command line options parser.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Co2\_linker\_opts}{1}
+@.Co2\_linker\_opts@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+\Linkercalledthreads{TH\_unq\_str}{2}
+@.TH\_unq\_str@>
+\Linkercalledthreads{TH\_xc\_str}{2}
+@.TH\_xc\_str@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_eol
+@.TH\_eol@>
+TH\_unq\_str
+@.TH\_unq\_str@>
+TH\_ws
+@.TH\_ws@>
+TH\_xc\_str
+@.TH\_xc\_str@>
+}
+@*2 Cparallel\_parser\_phrase --- Dispather to parse grammar's ``parallel-parse$\ldots$ .
+\Linkeridxentryk{Dispather to parse grammar's ``parallel-parser'' construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cparallel\_parser\_phrase}{1}
+@.Cparallel\_parser\_phrase@>
+\Linkercalledthreads{TH\_parallel\_parser\_ph\_th}{2}
+@.TH\_parallel\_parser\_ph\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_parallel\_parser\_ph\_th
+@.TH\_parallel\_parser\_ph\_th@>
+}
+@*2 Cpass3 --- \O2's lexer constructing tokens for syntax parser stage.
+\Linkeridxentryk{\O2's lexer constructing tokens for syntax parser stage.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cpass3}{1}
+@.Cpass3@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+\Linkercalledthreads{TH\_cweb\_or\_c\_k}{2}
+@.TH\_cweb\_or\_c\_k@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+\Linkercalledthreads{TH\_bad\_char\_set}{2}
+@.TH\_bad\_char\_set@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+LR1\_eog
+@.LR1\_eog@>
+raw\_at\_sign
+@.raw\_at\_sign@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_bad\_char\_set
+@.TH\_bad\_char\_set@>
+TH\_cweb\_or\_c\_k
+@.TH\_cweb\_or\_c\_k@>
+TH\_eol
+@.TH\_eol@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 Cprt\_sr\_elements --- Print the subrule's symbol string.
+\Linkeridxentryk{Print the subrule's symbol string.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cprt\_sr\_elements}{1}
+@.Cprt\_sr\_elements@>
+{\parindent=6pc
+\item{First set:}
+T\_subrule\_def
+@.T\_subrule\_def@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cprt\_xrefs\_docs --- Output xref doc ---
+``first set'' per rule, and refe$\ldots$ .
+\Linkeridxentryk{Output xref doc ---
+``first set'' per rule, and referenced symbols.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cprt\_xrefs\_docs}{1}
+@.Cprt\_xrefs\_docs@>
+{\parindent=6pc
+\item{First set:}
+rule\_def
+@.rule\_def@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Crc\_phrase --- Dispatcher to parse raw character vocabulary.
+\Linkeridxentryk{Dispatcher to parse raw character vocabulary.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Crc\_phrase}{1}
+@.Crc\_phrase@>
+\Linkercalledthreads{TH\_rc\_phrase\_th}{2}
+@.TH\_rc\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_rc\_phrase\_th
+@.TH\_rc\_phrase\_th@>
+}
+@*2 Crules\_phrase --- Dispatcher to parse the grammar's rules.
+\Linkeridxentryk{Dispatcher to parse the grammar's rules.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Crules\_phrase}{1}
+@.Crules\_phrase@>
+\Linkercalledthreads{TH\_rules\_phrase\_th}{2}
+@.TH\_rules\_phrase\_th@>
+\Linkercalledthreads{TH\_ws}{3}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_cweb\_or\_c\_k}{3}
+@.TH\_cweb\_or\_c\_k@>
+\Linkercalledthreads{TH\_eol}{3}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_rules\_phrase\_th
+@.TH\_rules\_phrase\_th@>
+}
+@*2 Crules\_use\_cnt --- Optimization: Count ``rules used''
+ to lower new / de$\ldots$ .
+\Linkeridxentryk{Optimization: Count ``rules used''
+ to lower new / delete rule cycles while parsing.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Crules\_use\_cnt}{1}
+@.Crules\_use\_cnt@>
+{\parindent=6pc
+\item{First set:}
+rule\_def
+@.rule\_def@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 Cterminals\_phrase --- Dispatcher to parse the terminals alphabet.
+\Linkeridxentryk{Dispatcher to parse the terminals alphabet.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Cterminals\_phrase}{1}
+@.Cterminals\_phrase@>
+\Linkercalledthreads{TH\_terminals\_phrase\_th}{2}
+@.TH\_terminals\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_terminals\_phrase\_th
+@.TH\_terminals\_phrase\_th@>
+}
+@*2 Ctest\_components --- Tester: lexical stage constructing tokens for syntax $\ldots$ .
+\Linkeridxentryk{Tester: lexical stage constructing tokens for syntax parser.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ctest\_components}{1}
+@.Ctest\_components@>
+\Linkercalledthreads{TH\_o2\_code\_end}{2}
+@.TH\_o2\_code\_end@>
+\Linkercalledthreads{TH\_angled\_string}{2}
+@.TH\_angled\_string@>
+\Linkercalledthreads{TH\_bad\_char\_set}{2}
+@.TH\_bad\_char\_set@>
+\Linkercalledthreads{TH\_c\_comments}{2}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_c\_literal}{2}
+@.TH\_c\_literal@>
+\Linkercalledthreads{TH\_c\_string}{2}
+@.TH\_c\_string@>
+\Linkercalledthreads{TH\_dbl\_colon}{2}
+@.TH\_dbl\_colon@>
+\Linkercalledthreads{TH\_eol}{2}
+@.TH\_eol@>
+\Linkercalledthreads{TH\_esc\_seq}{2}
+@.TH\_esc\_seq@>
+\Linkercalledthreads{TH\_identifier}{2}
+@.TH\_identifier@>
+\Linkercalledthreads{TH\_int\_no}{2}
+@.TH\_int\_no@>
+\Linkercalledthreads{TH\_ws}{2}
+@.TH\_ws@>
+{\parindent=6pc
+\item{First set:}
+LR1\_eog
+@.LR1\_eog@>
+LR1\_all\_shift\_operator
+@.LR1\_all\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_angled\_string
+@.TH\_angled\_string@>
+TH\_bad\_char\_set
+@.TH\_bad\_char\_set@>
+TH\_c\_comments
+@.TH\_c\_comments@>
+TH\_c\_literal
+@.TH\_c\_literal@>
+TH\_c\_string
+@.TH\_c\_string@>
+TH\_dbl\_colon
+@.TH\_dbl\_colon@>
+TH\_eol
+@.TH\_eol@>
+TH\_esc\_seq
+@.TH\_esc\_seq@>
+TH\_identifier
+@.TH\_identifier@>
+TH\_int\_no
+@.TH\_int\_no@>
+TH\_o2\_code\_end
+@.TH\_o2\_code\_end@>
+TH\_ws
+@.TH\_ws@>
+}
+@*2 Ct\_alphabet --- Parse Linker's t-alphabet language.
+\Linkeridxentryk{Parse Linker's t-alphabet language.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{Ct\_alphabet}{1}
+@.Ct\_alphabet@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+T\_T\_alphabet
+@.T\_T\_alphabet@>
+{\parindent=6pc
+\item{Used threads:}
+ none
+}
+@*2 CT\_enum\_phrase --- Dispatcher to parse T-enumeration construct.
+\Linkeridxentryk{Dispatcher to parse T-enumeration construct.}
+\Linkercalledthreadstitle
+\Linkercalledthreads{CT\_enum\_phrase}{1}
+@.CT\_enum\_phrase@>
+\Linkercalledthreads{TH\_T\_enum\_phrase\_th}{2}
+@.TH\_T\_enum\_phrase\_th@>
+\Linkercalledthreads{TH\_lint\_balls}{3}
+@.TH\_lint\_balls@>
+\Linkercalledthreads{TH\_ws}{4}
+@.TH\_ws@>
+\Linkercalledthreads{TH\_c\_comments}{4}
+@.TH\_c\_comments@>
+\Linkercalledthreads{TH\_eol}{4}
+@.TH\_eol@>
+{\parindent=6pc
+\item{First set:}
+LR1\_questionable\_shift\_operator
+@.LR1\_questionable\_shift\_operator@>
+{\parindent=6pc
+\item{Used threads:}
+TH\_T\_enum\_phrase\_th
+@.TH\_T\_enum\_phrase\_th@>
+}
+@** First set control file (fsc) listing.\fbreak
+File : ``/yacco2/compiler/grammars/yacco2.fsc''\fbreak
+\let\setuplistinghook = \relax
+\listing{"/yacco2/compiler/grammars/yacco2.fsc"}
+
+@** Index.
diff --git a/web/yacco2/o2linker/o2linker_externs.cpp b/web/yacco2/o2linker/o2linker_externs.cpp
new file mode 100644
index 0000000000..f9767979ba
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_externs.cpp
@@ -0,0 +1,54 @@
+/*7:*/
+//line 83 "./o2linker_externs.w"
+
+/*6:*/
+//line 80 "./o2linker_externs.w"
+
+#include "o2linker_externs.h"
+/*:6*/
+//line 84 "./o2linker_externs.w"
+
+/*8:*/
+//line 89 "./o2linker_externs.w"
+
+
+yacco2::AST*CWEB_MARKER(0);
+
+/*:8*//*10:*/
+//line 112 "./o2linker_externs.w"
+
+extern
+void
+LINKER_PARSE_CMD_LINE
+(const char*Cmd_file,std::string&Ctrl_file,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+tok_can<std::ifstream> Cmd1_tokens(Cmd_file);
+if(Cmd1_tokens.file_ok()==NO){
+yacco2::Delete_tokens(Cmd1_tokens.container());
+CAbs_lr1_sym*sym= new Err_bad_filename(Cmd_file);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+
+using namespace NS_o2_linker_opts;
+TOKEN_GAGGLE linker_options_tokens;
+Co2_linker_opts opts_fsm;
+Parser options(opts_fsm,&Cmd1_tokens,&linker_options_tokens,0,&Errors,0,0);
+options.parse();
+yacco2::Delete_tokens(Cmd1_tokens.container());
+if(Errors.empty()!=YES)return;
+Ctrl_file+= opts_fsm.file_to_compile_;
+return;
+}
+
+/*:10*/
+//line 85 "./o2linker_externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/o2linker/o2linker_externs.h b/web/yacco2/o2linker/o2linker_externs.h
new file mode 100644
index 0000000000..5f8905428a
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_externs.h
@@ -0,0 +1,32 @@
+/*4:*/
+//line 55 "./o2linker_externs.w"
+
+#ifndef o2linker_externs_
+#define o2linker_externs_ 1
+
+//line 58 "./o2linker_externs.w"
+
+/*5:*/
+//line 63 "./o2linker_externs.w"
+
+#include "globals.h"
+#include "o2linker_types.h"
+#include "yacco2_stbl.h"
+#include "o2_linker_opts.h"
+#include "linker_pass3.h"
+
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern void LINKER_PARSE_CMD_LINE(const char*Fsc
+,std::string&Cntl_file,yacco2::TOKEN_GAGGLE&Errors);
+extern void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern const char*DATE_AND_TIME();
+extern void XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym);
+extern yacco2::AST*CWEB_MARKER;
+/*:5*/
+//line 59 "./o2linker_externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/o2linker/o2linker_externs.w b/web/yacco2/o2linker/o2linker_externs.w
new file mode 100644
index 0000000000..33fff26142
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_externs.w
@@ -0,0 +1,147 @@
+@q file: o2linker_externs.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@q% This file is part of YACC02 compiler/compiler project.@>
+
+\input "eplain"
+\input "supp-pdf"
+\input "/usr/local/yacco2/diagrams/o2mac.tex"
+%\tracingall=1
+%\tracingall=1
+%\tracingmacros=1
+%\tracingcommands=2
+@i "/usr/local/yacco2/license.w"
+@** Summary Linker External parse routines.\fbreak
+These are the various procedures that parse \Yacco2's grammar language
+and emit the grammar's c++ code
+and tex document with mpost generated diagrams.
+Each language construct has its appropriate external procedure that houses
+the monolithic grammar to start the parse.
+There is no namespace used to contain these routines as I felt that this was overkill.
+As this is a closed system, their grammars are not universal and
+cannot be re-cycled for others.
+Their only outside value are in teaching examples on ``how to skin a cat'' or is it
+``how to parse a lion?''...
+
+External routines ratatouille:\fbreak
+\ptindent{|o2linker_externs.w| - cweb generator file}
+\ptindent{|o2linker_externs.h| - header file}
+\ptindent{|o2linker_externs.cpp| - implementation}
+
+Dependency files from other Yacco2 sub-systems:\fbreak
+\ptindent{|yacco2.h| - basic definitions used by Yacco2}
+\ptindent{|yacco2_T_enumeration.h| - terminal enumeration for Yacco2's terminal grammar alphabet}
+\ptindent{|yacco2_err_symbols.h| - error terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_characters.h| - raw character definitions from Yacco2's grammar alphabet}
+\ptindent{|yacco2_k_symbols.h| - constant meta terminal defs from Yacco2's grammar alphabet}
+\ptindent{|yacco2_terminals.h| - regular terminal definitions from Yacco2's grammar alphabet}
+\ptindent{|*.h| - assorted grammar definitions for Yacco2's parsing}
+\ptindent{|yacco2_stbl.h| - symbol table defnitions}
+
+External procedures and other globals:\fbreak
+\ptindent{|LINKER_PARSE_CMD_LINE|}
+
+@** Global definitions, External parse routines for Yacco2.\fbreak
+\def\ptindent#1{\line{\hskip.5in{#1}\hfill}}
+\def\fbreak{\hfill\break}
+\def\wildcard{$\vert$+$\vert$}
+\def\parallelop{$\vert\vert\vert$}
+
+@ Create header file.
+@(o2linker_externs.h@>=
+#ifndef o2linker_externs_
+#define o2linker_externs_ 1
+@h
+@<Files for header@>;
+#endif
+
+@*2 Files for header.
+@<Files for header@>=
+#include "globals.h"
+#include "o2linker_types.h"
+#include "yacco2_stbl.h"
+#include "o2_linker_opts.h"
+#include "linker_pass3.h"
+
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern void GET_CMD_LINE(int argc, char* argv[]
+ ,const char* File,yacco2::TOKEN_GAGGLE& Errors);
+extern void LINKER_PARSE_CMD_LINE(const char* Fsc
+ ,std::string& Cntl_file,yacco2::TOKEN_GAGGLE& Errors);
+extern void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE& Errors);
+extern const char* DATE_AND_TIME();
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern yacco2::AST*CWEB_MARKER;
+@ Include Header file.
+@<Include Header file@>=
+#include "o2linker_externs.h"
+@ Yacco2 external routines blueprint. Output of the code.
+@(o2linker_externs.cpp@>=
+@<Include Header file@>;
+@<accrue source for emit@>;
+
+
+@ Accrue source for emit.
+@<accrue source for emit@>=
+
+yacco2::AST*CWEB_MARKER(0);
+
+@** Local o2linker routines.\fbreak
+
+
+@*2 Linker Parse command line: |LINKER_PARSE_CMD_LINE|.\fbreak
+The parameters have been extracted from the program
+run environment and placed into Linker's holding file.
+The routine is suitable for public consumption if
+a filename parameter is needed.
+
+
+Constraints:\fbreak
+ \ptindent{ip1: Linker's holding file containing the command line to compile}
+ \ptindent{ip2: Extracted fsc file to compile}
+ \ptindent{ip3: Error container for generated errors}
+
+Errors:\fbreak
+\ptindent{1) bad filename}
+\ptindent{2) parameters errors}
+
+@<accrue source for emit@>+=
+extern
+void
+LINKER_PARSE_CMD_LINE@/
+ (const char* Cmd_file,std::string& Ctrl_file,yacco2::TOKEN_GAGGLE& Errors)@/
+{
+ using namespace NS_yacco2_err_symbols;
+ using namespace yacco2;
+ tok_can<std::ifstream> Cmd1_tokens(Cmd_file);
+ if(Cmd1_tokens.file_ok() == NO){
+ yacco2::Delete_tokens(Cmd1_tokens.container());
+ CAbs_lr1_sym* sym = new Err_bad_filename(Cmd_file);
+ sym->set_external_file_id(1);
+ sym->set_line_no(1);
+ sym->set_pos_in_line(1);
+ Errors.push_back(*sym);
+ return;
+ }
+
+ using namespace NS_o2_linker_opts;
+ TOKEN_GAGGLE linker_options_tokens;
+ Co2_linker_opts opts_fsm;
+ Parser options(opts_fsm,&Cmd1_tokens,&linker_options_tokens,0,&Errors,0,0);
+ options.parse();
+ yacco2::Delete_tokens(Cmd1_tokens.container());
+ if(Errors.empty() != YES) return;
+ Ctrl_file += opts_fsm.file_to_compile_;
+ return;
+}
+
+@** Bric-a-brac.\fbreak
+
+@** Index.
+
+
+
diff --git a/web/yacco2/o2linker/o2linker_types.h b/web/yacco2/o2linker/o2linker_types.h
new file mode 100644
index 0000000000..70765a179c
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_types.h
@@ -0,0 +1,142 @@
+/*2:*/
+#line 41 "./o2linker_types.w"
+
+#ifndef o2linker_types_
+#define o2linker_types_ 1
+/*3:*/
+#line 52 "./o2linker_types.w"
+
+#define CWEAVE_TITLE_LIMIT 75
+#define RESERVE_FIXED_NO_THREADS 1024
+#define NO_BITS_PER_SET_PARTITION 8
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Success true
+#define Failure false
+#define Nested_file_cnt_limit 15
+#define O2_library_file "yacco2.h"
+#define Yacco2_holding_file "yacco2cmd.tmp"
+#define Linker_holding_file "linkercmd.tmp"
+#define Max_buf_size 2*1024
+#define Max_cweb_item_size 10*1024
+/*:3*/
+#line 44 "./o2linker_types.w"
+;
+/*4:*/
+#line 67 "./o2linker_types.w"
+
+typedef int Voc_ENO;
+typedef int RULE_ENO;
+
+/*:4*//*5:*/
+#line 71 "./o2linker_types.w"
+
+typedef std::set<int> INT_SET_type;
+/*:5*//*6:*/
+#line 73 "./o2linker_types.w"
+
+typedef INT_SET_type::iterator INT_SET_ITER_type;
+/*:6*//*7:*/
+#line 75 "./o2linker_types.w"
+
+typedef std::vector<INT_SET_type> INT_SET_LIST_type;
+/*:7*//*8:*/
+#line 77 "./o2linker_types.w"
+
+typedef INT_SET_LIST_type::iterator INT_SET_LIST_ITER_type;
+/*:8*//*9:*/
+#line 79 "./o2linker_types.w"
+
+typedef std::map<int,std::string> INT_STR_MAP_type;
+/*:9*//*10:*/
+#line 81 "./o2linker_types.w"
+
+typedef INT_STR_MAP_type::iterator INT_STR_MAP_ITER_type;
+/*:10*//*11:*/
+#line 83 "./o2linker_types.w"
+
+typedef std::set<std::string*> STR_SET_type;
+/*:11*//*12:*/
+#line 85 "./o2linker_types.w"
+
+typedef STR_SET_type::iterator STR_SET_ITER_type;
+/*:12*//*13:*/
+#line 87 "./o2linker_types.w"
+
+typedef std::map<NS_yacco2_terminals::T_in_stbl*,STR_SET_type> T_IN_STBL_SET_STR_MAP_type;
+/*:13*//*14:*/
+#line 89 "./o2linker_types.w"
+
+typedef T_IN_STBL_SET_STR_MAP_type::iterator T_IN_STBL_SET_STR_MAP_ITER_type;
+/*:14*//*15:*/
+#line 91 "./o2linker_types.w"
+
+typedef int Voc_ENO;
+/*:15*//*16:*/
+#line 93 "./o2linker_types.w"
+
+typedef int RULE_ENO;
+/*:16*//*17:*/
+#line 95 "./o2linker_types.w"
+
+typedef int T_ENO;
+/*:17*//*18:*/
+#line 98 "./o2linker_types.w"
+
+typedef std::set<T_in_stbl*> T_IN_STBL_SET_type;
+/*:18*//*19:*/
+#line 101 "./o2linker_types.w"
+
+typedef T_IN_STBL_SET_type::iterator T_IN_STBL_SET_ITER_type;
+/*:19*//*20:*/
+#line 103 "./o2linker_types.w"
+
+typedef vector<T_ENO> T_COUNT_type;
+/*:20*//*21:*/
+#line 105 "./o2linker_types.w"
+
+typedef T_COUNT_type::iterator T_COUNT_ITER_type;
+/*:21*//*22:*/
+#line 107 "./o2linker_types.w"
+
+typedef vector<T_in_stbl*> STBL_T_ITEMS_type;
+/*:22*//*23:*/
+#line 109 "./o2linker_types.w"
+
+typedef STBL_T_ITEMS_type::iterator STBL_T_ITEMS_ITER_type;
+/*:23*//*24:*/
+#line 111 "./o2linker_types.w"
+
+typedef std::map<int,int> BIT_MAP_type;
+/*:24*//*25:*/
+#line 113 "./o2linker_types.w"
+
+typedef BIT_MAP_type::iterator BIT_MAP_ITER_type;
+
+/*:25*/
+#line 45 "./o2linker_types.w"
+;
+/*26:*/
+#line 117 "./o2linker_types.w"
+
+struct prt_called_thread_list_ast_functor:public Type_AST_functor{
+functor_result_type operator()(yacco2::ast_base_stack*Stk_env);
+typedef void(*PFF)(AST*,std::ofstream*,int);
+prt_called_thread_list_ast_functor(PFF Func);
+void o_file(std::ofstream*Ow_linker_file);
+void reset_cnt();
+private:
+yacco2::ast_base_stack*stk_env_;
+yacco2::INT idx_;
+yacco2::AST*cnode_;
+yacco2::ast_base_stack::s_rec*srec_;
+PFF prt_funct_;
+yacco2::INT cnt_;
+std::ofstream*ow_linker_file_;
+};
+/*:26*/
+#line 46 "./o2linker_types.w"
+;
+#endif
+
+/*:2*/
diff --git a/web/yacco2/o2linker/o2linker_types.w b/web/yacco2/o2linker/o2linker_types.w
new file mode 100644
index 0000000000..99cd42dca7
--- /dev/null
+++ b/web/yacco2/o2linker/o2linker_types.w
@@ -0,0 +1,133 @@
+@q file: o2linker_types.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+\input "eplain"
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@*2 Global definitions and files.\fbreak
+Basic preamble include files used by all others.
+@(globals.h@>=
+// file: globals.h
+// prelude files using yacco2: for o2, o2linker utilities
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+using namespace std;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+#endif
+
+@*3 ``o2linker\_types'' header file of common set of definitions and structures.\fbreak
+``o2linker\_types.h'' file is a common set of definitions
+and structures used by ``o2linker\_externs.w''
+external routines.
+Contains definitions and type-defs.
+@(o2linker_types.h@>=
+#ifndef o2linker_types_
+#define o2linker_types_ 1
+@<defines@>;
+@<Type defs@>;
+@<Structure defs@>;
+#endif
+
+@ Definitions for O2 and my external routines --- ``yacco2\_extn.w''.\fbreak
+As i'm writing directly out to a file, the use of the ctangle macro directive
+displays its displeasure so i'm using the direct c code route.
+@<defines@>=
+#define CWEAVE_TITLE_LIMIT 75
+#define RESERVE_FIXED_NO_THREADS 1024
+#define NO_BITS_PER_SET_PARTITION 8
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Success true
+#define Failure false
+#define Nested_file_cnt_limit 15
+#define O2_library_file "yacco2.h"
+#define Yacco2_holding_file "yacco2cmd.tmp"
+#define Linker_holding_file "linkercmd.tmp"
+#define Max_buf_size 2*1024
+#define Max_cweb_item_size 10*1024
+@ Typedef definitions.
+@<Type defs@>=
+typedef int Voc_ENO;
+typedef int RULE_ENO;
+
+@ @<Type defs@>+=
+typedef std::set<int> INT_SET_type;
+@ @<Type defs@>+=
+typedef INT_SET_type::iterator INT_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::vector< INT_SET_type> INT_SET_LIST_type;
+@ @<Type defs@>+=
+typedef INT_SET_LIST_type::iterator INT_SET_LIST_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<int,std::string> INT_STR_MAP_type;
+@ @<Type defs@>+=
+typedef INT_STR_MAP_type::iterator INT_STR_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef std::set<std::string*> STR_SET_type;
+@ @<Type defs@>+=
+typedef STR_SET_type::iterator STR_SET_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<NS_yacco2_terminals::T_in_stbl*,STR_SET_type > T_IN_STBL_SET_STR_MAP_type;
+@ @<Type defs@>+=
+typedef T_IN_STBL_SET_STR_MAP_type::iterator T_IN_STBL_SET_STR_MAP_ITER_type;
+@ @<Type defs@>+=
+typedef int Voc_ENO;
+@ @<Type defs@>+=
+typedef int RULE_ENO;
+@ @<Type defs@>+=
+typedef int T_ENO;
+@
+@<Type defs@>+=
+typedef std::set<T_in_stbl*> T_IN_STBL_SET_type;
+@
+@<Type defs@>+=
+typedef T_IN_STBL_SET_type::iterator T_IN_STBL_SET_ITER_type;
+@ @<Type defs@>+=
+typedef vector<T_ENO> T_COUNT_type;
+@ @<Type defs@>+=
+typedef T_COUNT_type::iterator T_COUNT_ITER_type;
+@ @<Type defs@>+=
+typedef vector<T_in_stbl*> STBL_T_ITEMS_type;
+@ @<Type defs@>+=
+typedef STBL_T_ITEMS_type::iterator STBL_T_ITEMS_ITER_type;
+@ @<Type defs@>+=
+typedef std::map<int,int> BIT_MAP_type;
+@ @<Type defs@>+=
+typedef BIT_MAP_type::iterator BIT_MAP_ITER_type;
+
+@*2 |prt_called_thread_list_ast_functor|.\fbreak
+@<Structure defs@>+=
+struct prt_called_thread_list_ast_functor :public Type_AST_functor{
+ functor_result_type operator()(yacco2::ast_base_stack* Stk_env);
+ typedef void (*PFF)(AST*,std::ofstream*,int);
+ prt_called_thread_list_ast_functor(PFF Func);
+ void o_file(std::ofstream* Ow_linker_file);
+ void reset_cnt();
+ private:@/
+ yacco2::ast_base_stack* stk_env_;
+ yacco2::INT idx_;
+ yacco2::AST* cnode_;
+ yacco2::ast_base_stack::s_rec* srec_;
+ PFF prt_funct_;
+ yacco2::INT cnt_;
+ std::ofstream* ow_linker_file_;
+};
+
diff --git a/web/yacco2/o2linker/pms.w b/web/yacco2/o2linker/pms.w
new file mode 100644
index 0000000000..e12c8c5441
--- /dev/null
+++ b/web/yacco2/o2linker/pms.w
@@ -0,0 +1,38 @@
+@q file: pms.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** PMS --- Post meta syndrome.\fbreak
+Post thoughts of improvement before using Linker.
+
+@ What happens when there are no threads to produce?.\fbreak
+Deal with iT?
+Sorry for the yelling...haha
+This is a legitimate situation.\fbreak
+
+So |THDS_STABLE__| and |T_ARRAY_HAVING_THD_IDS__| have NULL pointers emitted.
+This situation does not have to be checked for in Yacco2 parse library
+as there are no threads in the local state configuration to be tried.
+Yacco2 parsing checks to see if the ${\vert\vert\vert}$ symbol is present in the current
+state configuration before trying to parallel parse.\fbreak
+22 April 2005
+
+@ Passover on code.\fbreak
+Spring cleaning so put in those last gasp constraints. I know
+C++'s containers could be used to generate bit maps but...
+Enough of my rantings and mistrust on others software.
+So there's a hardcoded number of threads supported.
+The number of threads supported is |SPECULATIVE_NO_BIT_WORDS| *
+|BITS_PER_WORD|. Under current definitions this works out to 20*32 threads
+that can be gened. A bit of overkill but u never know who's out there.
+Now u can rant at me if this limit is surpassed. I would really
+like to know what u're doing to exceed this speed bump:
+Could be an interesting conversation. \fbreak
+24 Apr. 2005
+
+@ Add test suites.\fbreak
+25 Apr. 2005
+
diff --git a/web/yacco2/o2linker/prog.w b/web/yacco2/o2linker/prog.w
new file mode 100644
index 0000000000..38c728960c
--- /dev/null
+++ b/web/yacco2/o2linker/prog.w
@@ -0,0 +1,1134 @@
+@q file: prog.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@*2 External routines and globals.\fbreak
+General routines to get things going:\fbreak
+\ptindent{1) get control file and put into Linker's holding file}
+\ptindent{2) parse the command line}
+\ptindent{3) format errors}
+These are defined by including |o2_externs.h|.
+
+The globals are:\fbreak
+\ptindent{1) |Error_queue| --- global container of errors passed across all parsings}
+\ptindent{2) |GRAMMAR_DICTIONARY| --- thread container whose contents point into the symbol table}
+\ptindent{3) |T_DICTIONARY| --- terminal container whose contents point into the symbol table}
+\ptindent{4) |T_THREAD_ID_LIST| --- thread id list per terminal}
+\ptindent{5) |NO_OF_THREADS| --- found number of threads}
+\ptindent{6) |NO_WORDS_FOR_BIT_MAP| --- calculated number of words per thread bit map}
+\ptindent{7) |THREAD_ID_FS| --- first set per thread id}
+
+@<External rtns and ...@>=
+extern int NO_OF_THREADS;@/
+extern int NO_WORDS_FOR_BIT_MAP;
+
+@ Do we have errors?.
+Check that error queue for those errors.
+Note, |DUMP_ERROR_QUEUE| will also flush out
+ any launched threads for the good housekeeping or is it
+housetrained seal
+award? Trying to do my best in the realm of short lived winddowns.
+@<if error queue not empty then deal with posted errors@>=
+if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ return 1;
+}
+
+@** Local routines.\fbreak
+@*2 Parse linker control file.\fbreak
+Handcrafted file that gathers all the grammar control files together for the processing.
+Note the use of |tok_can<std::ifstream>| to read raw characters
+and produce tokens in just-in-time.
+@<parse linker control file@>=
+ cout << "Parse linker control file " << endl;
+ using namespace NS_linker_pass3;
+ tok_can<std::ifstream> cntl_file_tokens(cntl_file_name.c_str());
+ TOKEN_GAGGLE P3_tokens;
+ Clinker_pass3 linker_cntl_file_fsm;
+ Parser linker_cntl_file(linker_cntl_file_fsm,&cntl_file_tokens,&P3_tokens,0,&Error_queue,0,0);
+ linker_cntl_file.parse();
+ @<if error queue not empty then deal with posted errors@>;
+
+@*2 Parse T alphabet.\fbreak
+Ahh the terminal vocabulary. The symbol's position within the list
+is also its enumerate value starting from 0.
+The |T_alphabet| grammar places the terminal symbols into the symbol table
+as a 1:1 mapping, into
+the |T_DICTIONARY| as a consolidated repository
+and into the |T_THREAD_ID_LIST|
+which is the terminal to thread list relationship used
+to quickly determine if the current token has the potential to run as a thread.
+Each thread contains its first set list squirreled away in thread\_attributes's |list_of_Ts_|.
+
+@<parse T alphabet@>=
+cout << "Parse alphabet" << endl;
+using namespace NS_link_cleanser;
+tok_can<std::ifstream> T_file_tokens(linker_cntl_file_fsm.t_alphabet_filename_.c_str());
+TOKEN_GAGGLE cleanser_tokens;
+Clink_cleanser cleanser_fsm;
+Parser cleanser(cleanser_fsm,&T_file_tokens,&cleanser_tokens,0,&Error_queue,0,0);
+cleanser.parse();
+
+using namespace NS_t_alphabet;
+TOKEN_GAGGLE T_tokens;
+Ct_alphabet T_fsm;
+Parser T_pass3(T_fsm,&cleanser_tokens,&T_tokens,0,&Error_queue,0,0);
+T_pass3.parse();
+@<if error queue not empty then deal with posted errors@>;
+
+@*2 Parse fsc files.\fbreak
+Digest those fsc files. Burp. Better that than the other end.
+Now for a chiro for the stretched stomach muscles.
+The |fsc_file| grammar puts the digested grammar's fsc content into
+the symbol table of thread attribute's object and its reference into
+the |GRAMMAR_DICTIONARY|.
+@<parse fsc files@>=
+cout << "Parse fsc files" << endl;
+TOKEN_GAGGLE cleanser_fsc_tokens;
+TOKEN_GAGGLE fsc_file_output_tokens;
+std::vector<std::string>::iterator ii = linker_cntl_file_fsm.grammars_fsc_files_.begin();
+std::vector<std::string>::iterator iie = linker_cntl_file_fsm.grammars_fsc_files_.end();
+for(;ii!=iie;++ii){
+ tok_can<std::ifstream> T_fsc_file_tokens(ii->c_str());
+ Clink_cleanser cleanser_fsc;
+ Parser fsc_cleanser(cleanser_fsc,&T_fsc_file_tokens
+ ,&cleanser_fsc_tokens,0,&Error_queue,0,0);
+ fsc_cleanser.parse();
+ @<if error queue not empty then deal with posted errors@>;
+
+ using namespace NS_fsc_file;
+ Cfsc_file fsc_file_fsm;
+ Parser fsc_file_pass(fsc_file_fsm,&cleanser_fsc_tokens
+ ,&fsc_file_output_tokens,0,&Error_queue,0,0);
+ fsc_file_pass.parse();
+ @<if error queue not empty then deal with posted errors@>;
+ cleanser_fsc_tokens.clear();
+ fsc_file_output_tokens.clear();
+}
+ @<if error queue not empty then deal with posted errors@>;
+
+@*2 |load_linkkw_into_tbl|.\fbreak
+ These are the keywords
+ from all the languages to be parsed.
+ So why the loading up of keywords? Speed.
+ |linker_id| does a symbol table lookup for \olinker.
+ So where ever appropriate like the
+ ``first set control'' files, normal boundary parsing can take place.
+ There is your lexical grammar that discriminates characters into
+ tokens like keywords, comments followed by
+ a separate syntax grammar to process the language structure.
+ See comments in Yacco2's external document regarding the reason for
+ the kludge.
+@<accrue linker code@>+=
+void load_linkkw_into_tbl(yacco2::CAbs_lr1_sym* Kw){
+ using namespace yacco2_stbl;
+ T_sym_tbl_report_card report_card;
+ KCHARP kwkey = Kw->id();
+ if(*kwkey == '#')++kwkey;// kludge: bypass 1st char eg "$\#$fsm"
+ kw_in_stbl* kw = new kw_in_stbl(Kw);
+ add_sym_to_stbl(report_card,*kwkey,*kw,table_entry::defed,table_entry::keyword);
+ kw->stbl_idx(report_card.pos_);
+}
+
+void load_linkkws_into_tbl()@/
+{
+ cout << "Load linker's keywords " << endl;
+ load_linkkw_into_tbl(new T_transitive);
+ load_linkkw_into_tbl(new T_grammar_name);
+ load_linkkw_into_tbl(new T_name_space);
+ load_linkkw_into_tbl(new T_thread_name);
+ load_linkkw_into_tbl(new T_fsm_comments);
+ load_linkkw_into_tbl(new T_monolithic);
+ load_linkkw_into_tbl(new T_file_name);
+ load_linkkw_into_tbl(new T_no_of_T);
+ load_linkkw_into_tbl(new T_list_of_native_first_set_terminals);
+ load_linkkw_into_tbl(new T_end_list_of_native_first_set_terminals);
+ load_linkkw_into_tbl(new T_list_of_transitive_threads);
+ load_linkkw_into_tbl(new T_end_list_of_transitive_threads);
+ load_linkkw_into_tbl(new T_list_of_used_threads);
+ load_linkkw_into_tbl(new T_end_list_of_used_threads);
+ load_linkkw_into_tbl(new T_T_alphabet);
+ load_linkkw_into_tbl(new T_end_T_alphabet);
+ load_linkkw_into_tbl(new T_file_of_T_alphabet);
+ load_linkkw_into_tbl(new T_emitfile);
+ load_linkkw_into_tbl(new T_preamble);
+ load_linkkw_into_tbl(new T_end_preamble);
+}
+
+
+@*2 Verify that all threads used are defined.\fbreak
+ Simple check! Just
+sequentially read the |GRAMMAR_DICTIONARY| whose elements are pointers to their
+symbol table registry where the entry is not ``defined'' but referenced by some
+transitive call list.
+The loop just pours the rogues into the error queue and uses the
+token co-ordinates that created the entry as ``used'' for the error message.
+This allows the error dump to pinpoint the source file and specific line that
+referenced the rogue thread.
+Correction is to add the missing grammar to the control file list or
+correct the grammar that issued the thread call.
+ @<post verify that there are no threads ``used'' and not ``defined''@>=
+ std::vector<table_entry*>::iterator th_i = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator th_ie = GRAMMAR_DICTIONARY.end();@/
+ for(;th_i != th_ie;++th_i){
+ table_entry* tbl_entry = *th_i;
+
+ if(tbl_entry->defined_ == true) continue;
+ CAbs_lr1_sym* sym = new Err_bad_th_in_list;
+ sym->set_who_created("linker.w",__LINE__);
+
+ @=thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();@>@/
+ sym->set_rc(*th_goodies);
+ Error_queue.push_back(*sym);
+ }
+ @<if error queue not empty then deal with posted errors@>;
+
+@** Sort thread dictionary.\fbreak
+The grammars are divided into 2 types:\fbreak
+\ptindent{1) monolithic --- stand alone grammars}
+\ptindent{2) called threads}
+
+
+To facilitate the emitted code,
+the following partial order is imposed on the fully qualified name (FQN) of the grammar
+composed of the grammar's namespace
+and name separated by ``::'': for example, |NS_eol::TH_eol|. This is the calling handle of
+the thread when used with the ${\vert\vert\vert}$ statement.
+The partial order is divided into 2 parts --- threads followed by standalone
+grammars:\fbreak
+\ptindent{thread vs thread --- lexicographical order on ``thread name'' only}
+\ptindent{thread vs mono --- thread less than mono grammar}
+\ptindent{mono vs thread --- thread less than mono grammar}
+\ptindent{mono vs mono --- lexicographical order on FQN}
+The order defines explicitly the enumerate value assigned to each thread starting from 0.
+The standalone grammars (monolithic) are not part of the thread stable that gets emitted.
+@<accrue linker code@>+=
+bool sort_threads_criteria(const table_entry* P1,const table_entry* P2){
+ @=th_in_stbl*th_tbl1= (th_in_stbl*)P1->symbol_;@> @/
+ @=th_in_stbl*th_tbl2= (th_in_stbl*)P2->symbol_;@> @/
+ thread_attributes* p1 = th_tbl1->thread_in_stbl();
+ thread_attributes* p2 = th_tbl2->thread_in_stbl();
+ int len_a = p1->thread_name_->c_string()->size();
+ int len_b = p2->thread_name_->c_string()->size();
+ string ucase_a;
+ for(int x=0;x<len_a;++x){
+ ucase_a += toupper((*p1->thread_name_->c_string())[x]) ;
+ }
+ string ucase_b;
+ for(int x=0;x<len_b;++x){
+ ucase_b += toupper((*p2->thread_name_->c_string())[x]) ;
+ }
+ if(len_a < len_b){
+ for(int x = len_a+1;x <=len_b;++x) ucase_a += ' ';
+ }else{
+ for(int x = len_b+1;x <=len_a;++x) ucase_b += ' ';
+ }
+ int result;
+ if(p1->monolithic_ == 'n'){// a:thread
+ if(p2->monolithic_ == 'n'){// a:thread b:thread
+ result = strcmp(ucase_a.c_str(),ucase_b.c_str());
+ if(result < 0) return true;// a less b
+ return false;// a gt b
+ }
+ return true;// a:thread b:mono; a less b
+ }
+ if(p2->monolithic_ == 'n'){// a:mono b:thread
+ return false;// a gt b
+ }
+ // a:mono b:mono changed to the thread name instead of fqn
+ int len_fqna = p1->thread_name_->c_string()->size();
+ int len_fqnb = p2->thread_name_->c_string()->size();
+ string ucase_fqna;
+ for(int x=0;x<len_fqna;++x){
+ ucase_fqna += toupper((*p1->thread_name_->c_string())[x]);
+ }
+ string ucase_fqnb;
+ for(int x=0;x<len_fqnb;++x){
+ ucase_fqnb += toupper((*p2->thread_name_->c_string())[x]);
+ }
+ if(len_fqna < len_fqnb){
+ for(int x = len_fqna+1;x <=len_fqnb;++x) ucase_fqna += ' ';
+ }else{
+ for(int x = len_fqnb+1;x <=len_fqna;++x) ucase_fqnb += ' ';
+ }
+ result = strcmp(ucase_fqna.c_str(),ucase_fqnb.c_str());
+ if(result < 0 ) return true;// a less b
+ return false;// a gt b
+}
+
+@*2 Sort uses template algorithm.
+@<sort thread dictionary@>=
+ cout << "Sort thread dictionary" << endl;
+ stable_sort(GRAMMAR_DICTIONARY.begin(),GRAMMAR_DICTIONARY.end(),sort_threads_criteria);
+
+@*2 Dump sorted dictionary.\fbreak
+Not another reality show? Yupp.
+@<dump sorted dictionary@>=
+yacco2::lrclog << "Sorted thread dictionary" << GRAMMAR_DICTIONARY.size()<< std::endl;
+ std::vector<table_entry*>::iterator dth_i = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator dth_ie = GRAMMAR_DICTIONARY.end();@/
+ int pos(-1);
+ for(;dth_i != dth_ie;++dth_i){
+ ++pos;
+ table_entry* tbl_entry = *dth_i;
+ @=thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();@>@/
+yacco2::lrclog << "tbl entry*: "
+<< tbl_entry << " th_goodies*: " << th_goodies
+<< " " << pos << ":" << th_goodies->th_enum_
+<< " mono: " << th_goodies->monolithic_
+ << " thread name: " << th_goodies->thread_name_->c_string()->c_str()
+ << " FQN: " << th_goodies->fully_qualified_th_name_.c_str()
+ << " K: " << th_goodies->fsm_comments_->c_string()->c_str()
+ << std::endl;
+ }
+
+@*2 Count and re-align threads enumerate values to sorted position.\fbreak
+The |NO_OF_THREADS| is calculated at the same time. It is used to indicate thread presence
+and the numbers of threads to emit.
+@<count and re-align threads enumerate values to sorted position@>=
+ std::vector<table_entry*>::iterator ri = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator rie = GRAMMAR_DICTIONARY.end();@/
+ for(int p = -1;ri != rie;++ri){
+ ++p;
+ table_entry* tbl_entry = *ri;
+ @=thread_attributes*th_goodies= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();@>@/
+ th_goodies->th_enum_ = p;
+ if(th_goodies->monolithic_ == 'n') ++NO_OF_THREADS;
+ }
+
+@ Check whether Linker has enough space to generate the thread bit maps.\fbreak
+See |Passover on code| for my comments.
+@<check whether Linker has enough space to gen thread bit maps: no throw up@>=
+int max_thds_supported = SPECULATIVE_NO_BIT_WORDS * BITS_PER_WORD;
+if(NO_OF_THREADS > max_thds_supported ){
+ char a[SMALL_BUFFER_4K];
+@.Error: not enough space for thread bit map manufacture!@>;
+ KCHARP msg =
+ "Error: not enough space for thread bit map manufacture!"
+ " # threads: %i, Linker's maximum no of threads supported: %i. \n"
+ " Please expand SPECULATIVE_NO_BIT_WORDS";
+ sprintf(a,msg,NO_OF_THREADS,max_thds_supported);
+ Yacco2_faulty_precondition(msg,__FILE__,__LINE__);
+ exit(1);
+}
+
+@** Thread graphs: first set generation.
+@*2 |Visit_graph|.
+@<External rtns and ...@>+=
+extern char Visit_graph[RESERVE_FIXED_NO_THREADS];
+@*3 Probagate ${\vert+\vert}$.\fbreak
+Not much to it. The ``all shift'' operator indicates all terminals.
+It is a wild token facility that eases the pain in using grammars.
+So, all terminals except some meta operators must be placed into
+the first set and the thread id against each terminal.
+
+To lower the \olinker document, the \ALLshift
+meta terminal representing all terminals substitutes ``eolr''
+in the thread's first set.
+It certainly makes for a cleaner document without the slug fest.
+@<probagate ${\vert+\vert}$@>=
+ INT_SET_ITER_type t_listi = Root_thread.fs_.find(LR1_EOLR);// substitute eolr
+ if(t_listi == Root_thread.fs_.end()){
+ Root_thread.fs_.insert(LR1_EOLR);
+ }
+
+ int no_of_T = T_DICTIONARY.size();// rel 1 instead of 0
+ for(int x=0;x<no_of_T;++x){
+ switch(x){
+ case LR1_QUESTIONABLE_SHIFT_OPERATOR:break;
+ case LR1_EOG:break;
+ case LR1_EOLR:continue;
+ case LR1_PARALLEL_OPERATOR:continue;
+ case LR1_REDUCE_OPERATOR:continue;
+ case LR1_INVISIBLE_SHIFT_OPERATOR:continue;
+ case LR1_ALL_SHIFT_OPERATOR:continue;
+ case LR1_FSET_TRANSIENCE_OPERATOR:continue;
+ default:break;
+ }
+ if(Visited_th.monolithic_ == 'n'){
+ INT_SET_type& th_list = T_THREAD_ID_LIST[x];
+ if(th_list.find(Visited_th.th_enum_) ==th_list.end()){
+ th_list.insert(Visited_th.th_enum_);
+ }
+ if(th_list.find(Root_thread_id) ==th_list.end()){
+ th_list.insert(Root_thread_id);
+ }
+ }
+ }
+
+@*3 Deal with threads having T in first set.\fbreak
+Please note that threads only are dealt with and not their standalone brethren.
+The root grammar is still traversed so that
+its called threads can be added to the list.
+
+Though the monolithic grammar is not launched by its first set,
+I included its first set calculations to verify my work.
+@<deal with threads having T in first set@>=
+ INT_SET_ITER_type t_listi = Root_thread.fs_.find(t_enum);
+ if(t_listi == Root_thread.fs_.end()){
+ Root_thread.fs_.insert(t_enum);
+ }
+if(Visited_th.monolithic_ == 'n'){
+ INT_SET_type& th_list = T_THREAD_ID_LIST[t_enum];@/
+ if(th_list.find(Visited_th.th_enum_) ==th_list.end()){
+ th_list.insert(Visited_th.th_enum_);
+ }
+ if(th_list.find(Root_thread_id) ==th_list.end()){
+ th_list.insert(Root_thread_id);
+ }
+}
+
+@*3 Associate native terminals with called thread.\fbreak
+For the moment until i can refine the thread's first set algorithm
+in \o2 that generates the Tes for ``list-of-native-first-set-terminals'',
+ i force ``attempting to run'' the threads
+having the \TRAshift in their first set across all Tes.
+There will be thread stutters in firing them up
+and then shuting them down when their true
+first set is outside of the current token.
+Remember these threads are fired up when they are in the
+being run grammar's current lr parse state.
+So the speed bump shouldn't be too big.
+
+@<associate native terminals with called thread@>=
+ std::vector<int>::iterator fi = Visited_th.list_of_Ts_.begin();@/
+ std::vector<int>::iterator fie = Visited_th.list_of_Ts_.end();@/
+ for(;fi!=fie;++fi){
+ int t_enum = *fi;
+ if(t_enum == LR1_ALL_SHIFT_OPERATOR){
+ @<probagate ${\vert+\vert}$@>;
+ }
+ @<deal with threads having T in first set@>;
+ }
+
+@*3 Process called thread's list.\fbreak
+Walk the list and recursively call that graph.
+@<process called thread's list@>=
+std::vector<thread_attributes*>::iterator li = Visited_th.list_of_transitive_threads_.begin();
+std::vector<thread_attributes*>::iterator lie = Visited_th.list_of_transitive_threads_.end();
+for(;li!=lie;++li){
+ thread_attributes* th_att = *li;
+lrclog << "------->process called thread's list thd: "
+<< th_att->thread_name_->c_string()->c_str()
+<< " for root thd id: " << Root_thread_id
+<< endl;
+ crt_fset_of_thread(*th_att,Root_thread_id,Root_thread);
+}
+
+@*2 |crt_fset_of_thread|.\fbreak
+Recursive procedure that chews gum, pats its stomach, and belches fire.\fbreak
+It traverses the called threads recursively to continue
+the association of the inherited terminals into their thread bit maps.
+Uses the |Visit_graph| to prevent self looping: whichever
+way u call it left or right recursion depending on your context ---
+cheers or bottoms-up.
+
+The |Root_thread_id| associates the starting thread id
+to the traversed called threads' first sets' terminals.
+Each thread is processed individually to associate itself
+with their called brethern's first sets.
+
+@<accrue linker code@>+=
+void crt_fset_of_thread
+ (thread_attributes& Visited_th
+ ,int Root_thread_id,thread_attributes& Root_thread){
+ if(Visit_graph[Visited_th.th_enum_] == 'y') return;
+ Visit_graph[Visited_th.th_enum_] = 'y';
+ @<associate native terminals with called thread@>;
+ @<process called thread's list@>;
+}
+
+@*2 Allocation space for |Visit_graph|.\fbreak
+Before, reserve allocated its space, now MS throws an error
+as |push_back| not done.
+@<allocation space for |Visit_graph|@>=
+ for(int vi = 0;vi<NO_OF_THREADS;++vi){
+ Visit_graph[vi] = 'n';
+ }
+
+@*2 Initialize |Visit_graph| to ``not visited''.\fbreak
+Each new thread having its final fist set's gened presets the graph.
+@<initialize |Visit_graph| to not visited@>=
+for(int vi = 0;vi<NO_OF_THREADS;++vi){
+ Visit_graph[vi] = 'n';
+}
+
+@*2 Generate those first sets.\fbreak
+Walk the what? u threads fulfull your first set destinies.
+Not very complex.
+A visit graph
+is built having its nodes equal in number to the threads
+in the |GRAMMAR_DICTIONARY|.
+Each node is initialized to ``not visited''.
+From here, it's just process each thread and visit its called threads to
+inherit their native terminals: Of course this is a transitive process.
+Sorry for the let down but there ain't much to it.
+
+A secondary graph of called threads per grammar is built so that
+ an overall linker document can be emitted with:\fbreak
+\ptindent{1) index of threads sorted by their name with its fsm's comments}
+\ptindent{2) followed by the monolithic grammars}
+\ptindent{3)) each grammar will have its called threads}
+@<generate threads final first sets@>=
+@<allocation space for |Visit_graph|@>;
+
+ std::vector<table_entry*>::iterator thi = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator thie = GRAMMAR_DICTIONARY.end();@/
+ for(;thi != thie;++thi){// individually process each thread
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ if(th_att->monolithic_ == 'n'){
+yacco2::lrclog << "thread being walked: "
+ <<th_att->thread_name_->c_string()->c_str() << " id: "
+<< th_att->th_enum_ << std::endl;
+ @<initialize |Visit_graph| to not visited@>;
+ crt_fset_of_thread(*th_att,th_att->th_enum_,*th_att);
+ }
+ }
+ thi = GRAMMAR_DICTIONARY.begin();@/
+ thie = GRAMMAR_DICTIONARY.end();@/
+ for(;thi != thie;++thi){// individually process each thread
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ @<initialize |Visit_graph| to not visited@>;
+ crt_called_thread_graph(*th_att);
+ }
+
+@** Generate document for each grammar's called threads.\fbreak
+@*3 |crt_called_thread_list| and |walk_called_thread_list|.\fbreak
+Generate the call graph per thread for reporting purposes.
+@<accrue linker code@>+=
+void walk_called_thread_list(std::vector<thread_attributes*>& Thd_list,AST* Mother_thd_t){
+ if(Thd_list.begin() == Thd_list.end()) return;
+ std::vector<thread_attributes*>::iterator li = Thd_list.begin();
+ std::vector<thread_attributes*>::iterator lie = Thd_list.end();
+ for(;li!=lie;++li){
+ thread_attributes* th_att = *li;
+ if(Visit_graph[th_att->th_enum_] == 'y') continue;
+ Visit_graph[th_att->th_enum_] = 'y';
+ AST* called_t = new AST(*th_att);
+ AST::add_child_at_end(*Mother_thd_t,*called_t);
+ walk_called_thread_list(th_att->list_of_transitive_threads_,called_t);
+ }
+}
+
+@*3 |crt_called_thread_graph|.
+@<accrue linker code@>+=
+void crt_called_thread_graph(thread_attributes& Visited_th){
+ if(Visit_graph[Visited_th.th_enum_] == 'y') return;
+ Visit_graph[Visited_th.th_enum_] = 'y';
+ AST* mother_thd_t = new AST(Visited_th);
+ Visited_th.called_thread_graph_ = mother_thd_t;
+ walk_called_thread_list(Visited_th.list_of_transitive_threads_,mother_thd_t);
+}
+@*3 |gen_each_thread_s_referenced_threads|.
+@<accrue linker code@>+=
+void gen_each_grammar_s_referenced_threads(){
+ std::vector<table_entry*>::iterator thi = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator thie = GRAMMAR_DICTIONARY.end();@/
+ for(;thi != thie;++thi){// individually process each thread
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ @<initialize |Visit_graph| to not visited@>;
+ crt_called_thread_graph(*th_att);
+ }
+}
+@*1 Generate Linker's document.\fbreak
+A secondary graph of called threads per grammar is built so that
+ an overall linker document can be emitted with:\fbreak
+\ptindent{1) index of threads sorted by their name with its fsm's comments}
+\ptindent{2) followed by the monolithic grammars}
+\ptindent{3)) each grammar will have its ``called threads'' graph}
+
+@*4 Make grammar's contents cweaveable and output.
+@<make grammar's contents cweaveable and output@>=
+ XLATE_SYMBOLS_FOR_cweave(th_att->thread_name_->c_string()->c_str(),xlate_gfile);
+ XLATE_SYMBOLS_FOR_cweave(th_att->fsm_comments_->c_string()->c_str(),rebuild_comment);
+ strcat(fandk,xlate_gfile);
+ strcat(fandk," --- ");
+ strcat(fandk,rebuild_comment);
+ int fandk_len = strlen(fandk);
+ if(fandk_len < CWEAVE_TITLE_LIMIT){
+ if(fandk[fandk_len-1] != '.'){
+ strcat(fandk,".");
+ }
+ }else{
+ if(fandk_len == CWEAVE_TITLE_LIMIT){
+ if(fandk[CWEAVE_TITLE_LIMIT-1] != '.'){
+ strcat(fandk,".");
+ }
+ }else{
+ fandk[CWEAVE_TITLE_LIMIT] = (char)0;
+ strcat(fandk,"$\\ldots$ .");
+ }
+ }
+ int x = sprintf(big_buf_
+ ,w_grammar
+ ,fandk
+ );
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+ x = sprintf(big_buf_
+ ,w_comments
+ ,rebuild_comment
+ );
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+ x = sprintf(big_buf_
+ ,w_called_threads," "
+ );
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+
+@*4 Output grammar's called threads list.
+@<output grammar's called threads list@>=
+ prt_called_thread_list_ast_functor prt_functr(&PRINT_CALLED_THREAD_LIST);
+ prt_functr.o_file(&ow_linker_file_);
+ ast_prefix pre(*th_att->called_thread_graph_,&prt_functr);
+ while (pre.base_stk_.cur_stk_rec() != 0){
+ pre.exec();
+ }
+
+@*4 Output grammar's used threads.
+@<output grammar's used threads@>=
+std::map<std::string, std::vector<std::string> >::iterator ti =
+ USED_THREADS_LIST.find(th_att->thread_name_->c_string()->c_str());
+ ow_linker_file_ << "{\\parindent=6pc" << endl;
+ ow_linker_file_ << "\\item{Used threads:}" << std::endl;
+ KCHARP used_threads =
+ "%s\n"
+ "@@.%s@@>";// xref entry
+ std::vector<std::string>& tt = ti->second;
+ std::vector<std::string>::iterator tti = tt.begin();
+ std::vector<std::string> ::iterator ttie= tt.end();
+ char xlate_thnm[Max_cweb_item_size];
+ for(;tti!=ttie;++tti){
+ XLATE_SYMBOLS_FOR_cweave(tti->c_str(),xlate_thnm);
+ int x = sprintf(big_buf_,used_threads,xlate_thnm,xlate_thnm);
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+ }
+ if(ti->second.empty() == YES) ow_linker_file_ << " none" << endl;
+ ow_linker_file_ << "}" << endl;
+
+@*4 Output grammar's first set.\fbreak
+Go thru the set and map the T enum into its literal value.
+@<output grammar's first set@>=
+ ow_linker_file_ << "{\\parindent=6pc" << endl;
+ ow_linker_file_ << "\\item{First set:}" << std::endl;
+ KCHARP fs =
+ "%s\n"
+ "@@.%s@@>";// xref entry
+ INT_SET_ITER_type fsi = th_att->fs_.begin();
+ INT_SET_ITER_type fsie = th_att->fs_.end();
+ char xlate_tnm[Max_cweb_item_size];
+ for(;fsi!=fsie;++fsi){
+ int tenum = *fsi;
+ table_entry* t_entry = T_DICTIONARY[tenum];
+ tth_in_stbl* t_in_stbl = (tth_in_stbl*)t_entry->symbol_;
+ T_attributes * t_att = t_in_stbl->t_in_stbl();
+ XLATE_SYMBOLS_FOR_cweave(t_att->fully_qualified_T_name_.c_str(),xlate_tnm);
+ int x = sprintf(big_buf_,fs,xlate_tnm,xlate_tnm);
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+ }
+
+@*3 Output preamble of document.
+@<output preamble of document@>=
+ KCHARP w_doc_index =
+ "\\input \"supp-pdf\"\n"
+ "\\input \"/usr/local/yacco2/diagrams/o2mac.tex\"\n"
+ "\\IDXlinkerdoctitle{%s}{%s}{%s}";
+ char xlate_file[Max_cweb_item_size];xlate_file[0] = (char)0;
+ char xlate_fscfile[Max_cweb_item_size];xlate_fscfile[0] = (char)0;
+ XLATE_SYMBOLS_FOR_cweave(w_linker_filename_.c_str(),xlate_file);
+ XLATE_SYMBOLS_FOR_cweave(cntl_file_name.c_str(),xlate_fscfile);
+ int x = sprintf(big_buf_
+ ,w_doc_index
+ ,xlate_file
+ ,xlate_file
+ ,xlate_fscfile
+ );
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+ KCHARP w_doc_comments =
+ "@@** O2linker Index of Grammars.\\fbreak\n"
+ "The grammars are sorted lexicographically into 2 parts:\n"
+ "threads followed by the stand alone grammars.\n"
+ "Each grammar's called threads graph is determined from their \n"
+ " ``list-of-transitive-threads''\n"
+ "derived from this construct.%s";
+ x = sprintf(big_buf_,w_doc_comments," ");
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+
+@*3 Loop thru grammars to gen their local linker doc info.
+@<loop thru grammars to gen their local linker doc info@>=
+ KCHARP w_grammar =
+ "@@*2 %s";
+ KCHARP w_comments =
+ "\\Linkeridxentryk{%s}";
+ KCHARP w_called_threads =
+ "\\Linkercalledthreadstitle%s";
+ char xlate_gfile[Max_cweb_item_size];
+ char rebuild_comment[Max_cweb_item_size];
+ char fandk[Max_cweb_item_size];
+ char xlate_thnm[Max_cweb_item_size];
+ char xlate_tnm[Max_cweb_item_size];
+
+ std::vector<table_entry*>::iterator ithi = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator ithie = GRAMMAR_DICTIONARY.end();@/
+ for(;ithi != ithie;++ithi){// individually process each thread
+ xlate_gfile[0] = (char)0;
+ rebuild_comment[0] = (char)0;
+ fandk[0] = (char)0;
+ xlate_thnm[0] = (char)0;
+ xlate_tnm[0] = (char)0;
+
+ table_entry* tbl_entry = *ithi;
+ @=thread_attributes*th_att= ((th_in_stbl*)tbl_entry->symbol_)->thread_in_stbl();@>@/
+ @<make grammar's contents cweaveable and output@>;
+ @<output grammar's called threads list@>;
+ @<output grammar's first set@>;
+ @<output grammar's used threads@>;
+ }
+
+@*3 Output First set of linker.
+@<output First set of linker@>=
+ KCHARP w_fsc_file_listing =
+ "@@** First set control file (fsc) listing.\\fbreak\n"
+ "File : ``%s''\\fbreak\n"
+ "\\let\\setuplistinghook = \\relax\n"
+ "\\listing{\"%s\"}\n";
+ char xlated_filename[Max_cweb_item_size];
+
+XLATE_SYMBOLS_FOR_cweave(cntl_file_name.c_str(),xlated_filename);
+ x = sprintf(big_buf_
+ ,w_fsc_file_listing
+ ,xlated_filename
+ ,cntl_file_name.c_str()
+ );
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+
+@*3 Output Index of linker.
+@<output Index of linker@>=
+ KCHARP w_index =
+ "@@** Index.%s";
+ x = sprintf(big_buf_,w_index," ");
+ ow_linker_file_.write(big_buf_,x);
+ ow_linker_file_ << std::endl;
+
+
+@*2 Output driver of the linker document.
+@<generate linker document@>=
+ gen_each_grammar_s_referenced_threads();
+ char big_buf_[BIG_BUFFER_32K];
+ std::string w_linker_filename_("o2linker_doc.w");
+ std::ofstream ow_linker_file_;
+ ow_linker_file_.open(w_linker_filename_.c_str(),ios_base::out|ios::trunc);
+ @<output preamble of document@>;
+ @<loop thru grammars to gen their local linker doc info@>;
+ @<output First set of linker@>;
+ @<output Index of linker@>;
+ ow_linker_file_.close();
+
+@** Emit code.\fbreak
+There is not too much to emit.\fbreak
+\ptindent{1) cpp preamble code --- time of day, and the grammar writer's preamble}
+\ptindent{2) threads include files and their namespace statement}
+\ptindent{3) global bit maps}
+\ptindent{4) global thread stable}
+\ptindent{5) global terminals and their thread bit maps}
+
+As an afterthought, the situation of having no threads to emit has been added.
+@<emit code@>=
+ cout << "Emit file name: " << linker_cntl_file_fsm.emitfile_filename_.c_str() << endl;
+ ofstream ofile(linker_cntl_file_fsm.emitfile_filename_.c_str(),ios::out);
+ if (!ofile){
+ cout << "Error - can't open emit file: "
+ << linker_cntl_file_fsm.emitfile_filename_.c_str() << endl;
+ return 1;
+ }
+ emit_cpp_preamble(ofile
+ ,linker_cntl_file_fsm.emitfile_filename_.c_str()
+ ,linker_cntl_file_fsm.preamble_srce_->syntax_code()->c_str());
+ emit_global_thread_include_files(ofile);
+ emit_global_bit_maps(ofile);
+ if(NO_OF_THREADS == 0){
+ emit_no_threads(ofile);
+ }else{
+ emit_global_thread_stable(ofile);
+ emit_T_fs_of_potential_threads(ofile);
+ }
+ ofile.close();
+
+@*2 Emit no threads.\fbreak
+A situation where the grammar writer has only standalone grammars; there
+are no parallel statements used within the grammars:
+${\vert\vert\vert}$ "returned token" called "thread".
+@<accrue linker code@>+=
+void emit_no_threads(ofstream& ofile){
+ ofile << "// There are NO THREADS emitted" << endl;
+ ofile << "void* yacco2::THDS_STABLE__ = 0;" << endl;
+ ofile << "void* yacco2::T_ARRAY_HAVING_THD_IDS__ = 0;" << endl;
+}
+
+@*2 Emit cpp preamble.
+@<accrue linker code@>+=
+void emit_cpp_preamble(ofstream& ofile,const char* OFile,const char* Preamble){
+ ofile << "//" << endl;
+ ofile << "// File: " << OFile << endl;
+ ofile << "// Generated by linker.exe" << endl;
+ ofile << "// Date and Time: " << DATE_AND_TIME() << endl;
+ ofile << "//" << endl;
+ ofile << endl;
+ ofile << "// Preamble code" << endl;
+ ofile << Preamble << endl;
+}
+
+@*2 Emit thread include files.\fbreak
+Unfortunately, a lot of verbage to resolve the thread's
+procedure. OhHum.
+
+Note, standalone grammars are not emitted. Why process them anyway?
+They provide thread calls that are added to the terminal's thread bit map.
+ @<accrue linker code@>+=
+void emit_global_thread_include_files(ofstream& ofile){
+ ofile << "// thread include and namespace" << std::endl;
+ char a[SMALL_BUFFER_4K];
+ KCHARP thread_include_ns = "#include \"%s.h\"";
+
+ std::vector<table_entry*>::iterator thi = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator thie = GRAMMAR_DICTIONARY.end();@/
+ for(;thi != thie;++thi){
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ if(th_att->monolithic_ == 'y') break;
+ int x = sprintf
+ (a
+ ,thread_include_ns
+ ,th_att->grammar_file_name_->c_string()->c_str()
+ );
+ ofile.write(a,x);
+ ofile << std::endl;
+ }
+}
+
+@*2 Emit global bit maps.
+@<accrue linker code@>+=
+void emit_global_bit_maps(ofstream& ofile){
+ ofile << "// BIT MAPS" << std::endl;
+ ofile << "#define TOTAL_NO_BIT_WORDS 2*1024*50" << std::endl;
+ ofile << "int yacco2::TOTAL_NO_BIT_WORDS__(TOTAL_NO_BIT_WORDS);" << std::endl;
+ ofile << "yacco2::ULINT bit_maps[TOTAL_NO_BIT_WORDS];" << std::endl;
+ ofile << "void* yacco2::BIT_MAPS_FOR_SALE__ = (void*)&bit_maps;" << std::endl;
+ ofile << "int yacco2::BIT_MAP_IDX__(0);" << std::endl;
+}
+
+@*2 Emit global thread stable |THDS_STABLE__|.\fbreak
+Read the |GRAMMAR_DICTIONARY| and emit a sorted |Thread_entry| list where
+each thread (excluded are the standalone grammars)
+has a global naming convention of Ixxx where the xxx is the thread name.
+The |Thread_entry| provides its literate name,
+ the thread function to be spawned, and its enumerate value
+used as an index into the array of threads.
+
+|THDS_STABLE__| is a global referenced by Yacco2's runtime library.
+It is a structure indicating the number of threads within its array and
+the array of addresses to each just-gened thread's |Thread_entry|. HoHum --- is
+this better than fe-fi-foe-fum I smell the blood of an ...?
+@<accrue linker code@>+=
+void emit_global_thread_stable(ofstream& ofile){
+ ofile << "// THREAD STABLE" << std::endl;
+ char a[BIG_BUFFER_32K];
+ KCHARP thread_entry = "yacco2::Thread_entry I%s = {%s,%s,%i,%s::PROC_%s};";
+ string quoted_name;
+ @<gen thread list@>;
+ @<gen global thread array@>;
+}
+
+@*2 The threading stew.
+@<gen thread list@>=
+ std::vector<table_entry*>::iterator thi = GRAMMAR_DICTIONARY.begin();@/
+ std::vector<table_entry*>::iterator thie = GRAMMAR_DICTIONARY.end();@/
+ for(;thi != thie;++thi){
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ if(th_att->monolithic_ == 'y') break;
+ quoted_name.clear();
+ const char* th_name = th_att->thread_name_->c_string()->c_str();
+ quoted_name += '"';
+ quoted_name += th_name;
+ quoted_name += '"';
+
+ int x = sprintf(a,thread_entry,th_name,quoted_name.c_str()
+ ,th_att->fully_qualified_th_name_.c_str(),th_att->th_enum_
+ ,th_att->name_space_name_->c_string()->c_str()
+ ,th_att->thread_name_->c_string()->c_str());
+ ofile.write(a,x);
+ ofile << std::endl;
+ }
+
+@*2 The table h\^ote.\fbreak
+The thoroughbreds waiting for the ``and they'rrrre off''.
+@<gen global thread array@>=
+ div_t c = div(NO_OF_THREADS,BITS_PER_WORD);
+ if(c.rem != 0) ++c.quot;
+ NO_WORDS_FOR_BIT_MAP = c.quot;
+
+ KCHARP thread_array =
+ "struct thd_array_type {\n"
+ " yacco2::USINT no_entries__;\n"
+ " yacco2::Thread_entry* first_entry__[%i];"
+ "};\n"
+ "thd_array_type thd_array = {\n"
+ " %i\n"
+ " ,\n"
+ " {\n";
+ int x = sprintf(a,thread_array,NO_OF_THREADS,NO_OF_THREADS);
+
+ ofile.write(a,x);
+ ofile << std::endl;
+ bool first_entry(true);
+ thi = GRAMMAR_DICTIONARY.begin();
+ thie = GRAMMAR_DICTIONARY.end();
+ KCHARP thread_entry_name = "&I%s";
+ for(;thi!=thie;++thi){
+ @=th_in_stbl*th_tbl= (th_in_stbl*)(*thi)->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ if(th_att->monolithic_ == 'y') break;
+ if(first_entry == true){
+ first_entry = false;
+ ofile << " ";
+ }else{
+ ofile << " ,";
+ }
+ int x = sprintf(a,thread_entry_name,th_att->thread_name_->c_string()->c_str());
+ ofile.write(a,x);
+ ofile << std::endl;
+ }
+ ofile << " }\n};" << endl;
+ @<announce the stable to the world@>;
+
+@*2 Announce the stable to the world.
+@<announce the stable to the world@>=
+ ofile << "void* yacco2::THDS_STABLE__ = (void*)&thd_array;" << endl;
+
+@*2 Emit global Terminals' thread bit maps.\fbreak
+This is the inverse to first sets: these are the threads that can
+run from the specific terminal.
+
+This global optimization determines whether the finite state table
+has the potential to run a thread. How so?
+Firstly, the local grammar determines
+whether threading is taking place in its current state configuration.
+If so, the current token is
+checked to see whether there are threads to possibly run using
+the global thread bit map specific to itself.
+With these potental threads the local state
+configuration is measured for activity.
+Then and only then will the
+just-in-time dynamics of building the grammar's local thread map occur and the
+found threads launched.
+
+This optimization stops stuttering: how so?
+Only threads having the current token in their first set get launched.
+The jiggles now are only real potential prefixes to parse by each launched thread.
+Remember, common prefixes get resolved by arbitration within the
+launching grammar specific to the current finite state configuration.
+
+Why the output to another file? The flatulence of Microsoft's compiler: an
+INTERNAL COMPILER ERROR ``C1001'' message.
+Well I found the typo that causes this draconian behavior: ``endl::endl''
+instead of ``std::endl''. This congers up speculative thoughts on how
+Microsoft's compiler is written. Enough of my racket: Back to appending
+to the same file.
+
+@<accrue linker code@>+=
+void emit_T_fs_of_potential_threads(ofstream& ofile){
+ ofile << "// Terminal thread sets" << std::endl;
+ int no_of_T = T_DICTIONARY.size();
+ char a[SMALL_BUFFER_4K];
+ KCHARP T_list_to_thd_list_type =
+ "struct T_%i_type{\n"
+ " yacco2::ULINT first_entry__[%i];\n"
+ "};\n";@/
+ KCHARP T_list_to_thd_list_var = "T_%i_type T_%i = {// for T: %s";@/
+ KCHARP thd_id_in_list = "//%i: %s";@/
+
+ INT_SET_LIST_ITER_type i = T_THREAD_ID_LIST.begin();@>@/
+ INT_SET_LIST_ITER_type ie = T_THREAD_ID_LIST.end();@>@/
+ int terminal_id(-1);
+ for(;i!=ie;++i){
+ ++terminal_id;@/
+ INT_SET_type& th_list = *i;
+ if(th_list.empty() == true) continue;
+ int x = sprintf(a,T_list_to_thd_list_type,terminal_id,NO_WORDS_FOR_BIT_MAP);
+ ofile.write(a,x);
+ ofile << std::endl;
+ @<create terminal's thread bit map@>;
+ }
+ @<emit array of Terminals' thread bit maps@>;
+}
+
+
+@*2 Create terminal's thread bit map.\fbreak
+As the number of threads are unknown,
+I use |SPECULATIVE_NO_BIT_WORDS| to reserve the space to manufacture
+the thread maps.
+See my comments in |Passover on code|.
+@<create terminal's thread bit map@>=
+ int no_thds_ids = th_list.size();
+ table_entry* t_entry = T_DICTIONARY[terminal_id];
+ tth_in_stbl* t_in_stbl= (tth_in_stbl*)t_entry->symbol_;
+ T_attributes* t_att= t_in_stbl->t_in_stbl();
+ x = sprintf(a
+ ,T_list_to_thd_list_var
+ ,terminal_id
+ ,terminal_id
+ ,t_att->fully_qualified_T_name_.c_str()
+ );
+ ofile.write(a,x);
+ ofile << std::endl;@/
+ ULINT word_map[SPECULATIVE_NO_BIT_WORDS]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+
+ INT_SET_ITER_type j = th_list.begin();
+ INT_SET_ITER_type je = th_list.end();
+
+ @<calculate terminal's thread bit map@>;
+ @<emit terminal's thread bit map@>;
+
+@*2 Calculate terminal's thread bit map.
+And print out their contents as comments.
+@<calculate terminal's thread bit map@>=
+ for(;j!=je;++j){
+ int th_id = *j;
+ table_entry* tbl_entry = GRAMMAR_DICTIONARY[th_id];
+ @=th_in_stbl*th_tbl= (th_in_stbl*)tbl_entry->symbol_;@> @/
+ thread_attributes* th_att = th_tbl->thread_in_stbl();
+ div_t bb = div(th_id,BITS_PER_WORD);
+ ULINT bit_pos_value = 1 << bb.rem;
+ word_map[bb.quot] |= bit_pos_value;
+ int x = sprintf(a,thd_id_in_list,th_id,th_att->thread_name_->c_string()->c_str());
+ ofile.write(a,x);
+ ofile << std::endl;
+ }
+
+@*2 Emit terminal's thread bit map.
+@<emit terminal's thread bit map@>=
+ for(int dd=1;dd<=NO_WORDS_FOR_BIT_MAP;++dd){
+ if(dd == 1) ofile << " {";
+ else ofile << " ,";
+ ofile << word_map[dd-1]<< endl;
+ }
+ ofile << " }" << endl;
+ ofile << "};" << endl;
+
+ @*2 Emit Terminals' thread bit maps and global |T_ARRAY_HAVING_THD_IDS__|.\fbreak
+ Go tell it to the ? or is it Yacco2?
+ @<emit array of Terminals' thread bit maps@>=
+ KCHARP T_array_type =
+ "struct t_array_type {\n"
+ " yacco2::USINT no_entries__;\n"
+ " yacco2::thd_ids_having_T* first_entry__[%i];\n"
+ "};";
+ int x = sprintf(a,T_array_type,no_of_T);
+ ofile.write(a,x);
+ ofile << std::endl;
+
+ KCHARP T_array =
+ "t_array_type t_array = {\n"
+ " %i\n"
+ " ,{";
+ x = sprintf
+ (a
+ ,T_array
+ ,no_of_T
+ );
+ ofile.write(a,x);
+ ofile << std::endl;
+
+ i = T_THREAD_ID_LIST.begin();
+ ie = T_THREAD_ID_LIST.end();@>@/
+ @<print out each thread set@>;
+ ofile << " }\n};" << endl;
+ ofile << "void* yacco2::T_ARRAY_HAVING_THD_IDS__ = (void*)&t_array;" << endl;
+
+@*2 Print each entry.\fbreak
+More coughing. Oh well.
+@<print out each thread set@>=
+ bool first_item(true);// regulates if a comma should be emitted
+ for(int t_id = -1;i!=ie;++i){
+ ++t_id;
+ table_entry* t_entry = T_DICTIONARY[t_id];@/
+ tth_in_stbl* t_in_stbl= (tth_in_stbl*)t_entry->symbol_;
+ T_attributes* t_att= t_in_stbl->t_in_stbl();
+ INT_SET_type& th_list = *i;
+ if(th_list.empty() == true){// no thds with this T as first set
+ if(first_item == true) first_item = false;
+ else ofile << " ,";
+ KCHARP T_array_entries = "%s// %s";
+ int x = sprintf(a,T_array_entries,"0",t_att->fully_qualified_T_name_.c_str());
+ ofile.write(a,x);
+ ofile << std::endl;
+ continue;
+ }else{
+ if(first_item == true) first_item = false;
+ else ofile << " ,";
+ KCHARP T_list_to_thd_list_var = "(yacco2::thd_ids_having_T*)&T_%i // %s";
+
+ int x = sprintf(a,T_list_to_thd_list_var,t_id,t_att->fully_qualified_T_name_.c_str());
+ ofile.write(a,x);
+ ofile << std::endl;
+ }
+ }
+
+@** Main line of Linker.
+@<accrue linker code@>=
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE Error_queue;@/
+STBL_T_ITEMS_type STBL_T_ITEMS;
+std::vector<NS_yacco2_terminals::table_entry*> GRAMMAR_DICTIONARY;@/
+std::map<std::string, std::vector<std::string> > USED_THREADS_LIST;@/
+std::vector<NS_yacco2_terminals::table_entry*> T_DICTIONARY;@/
+INT_SET_LIST_type T_THREAD_ID_LIST;
+
+int NO_OF_THREADS(0);@/
+int NO_WORDS_FOR_BIT_MAP(0);
+char Visit_graph[RESERVE_FIXED_NO_THREADS];
+extern void XLATE_SYMBOLS_FOR_cweave(const char* Sym_to_xlate,char* Xlated_sym);
+extern void PRINT_CALLED_THREAD_LIST
+ (yacco2::AST* Node,std::ofstream* Ow_linker_file,int Recursion_level);
+string cntl_file_name;
+yacco2::CHAR PRT_SW('n');
+
+int main(int argc, char* argv[])
+{
+ cout << yacco2::O2linker_VERSION << std::endl;
+ using namespace yacco2;
+ using namespace std;
+ load_linkkws_into_tbl();
+ cout << "Get command line and parse it " << endl;
+ GET_CMD_LINE(argc,argv,Linker_holding_file,Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+ LINKER_PARSE_CMD_LINE(Linker_holding_file,cntl_file_name,Error_queue);
+ @<if error queue not empty then deal with posted errors@>;
+ lrclog << yacco2::O2linker_VERSION << std::endl;
+ @<parse linker control file@>;
+ @<parse T alphabet@>;
+ @<parse fsc files@>;
+ @<post verify that there are no threads ``used'' and not ``defined''@>;
+ @<sort thread dictionary@>;
+ @<dump sorted dictionary@>;
+ @<count and re-align threads enumerate values to sorted position@>;
+ @<check whether Linker has enough space to gen thread bit maps: no throw up@>;
+ @<generate threads final first sets@>;
+ @<emit code@>;
+ @<generate linker document@>;
+ //|yacco2::Parallel_threads_shutdown(linker_cntl_file);|
+return 0;
+}
diff --git a/web/yacco2/o2linker/sampleoutput.w b/web/yacco2/o2linker/sampleoutput.w
new file mode 100644
index 0000000000..e3d80227b9
--- /dev/null
+++ b/web/yacco2/o2linker/sampleoutput.w
@@ -0,0 +1,23 @@
+@q file: sampleoutput.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+@** Sample output from Linker.\fbreak
+A sampling from Yacco2's grammars.
+Have a look in the source code below where the following
+external variables are defined at line references 41, 43, 44, 72, and 193:\fbreak
+\ptindent{|yacco2::TOTAL_NO_BIT_WORDS__| }
+\ptindent{|yacco2::BIT_MAPS_FOR_SALE__| }
+\ptindent{|yacco2::BIT_MAP_IDX__| }
+\ptindent{|yacco2::THDS_STABLE__| }
+\ptindent{|yacco2::T_ARRAY_HAVING_THD_IDS__| }
+
+Yacoo2's parse library references them and they get resolved by the language linker.
+\let\setuplistinghook = \linenumberedlisting
+\listing{"/usr/local/yacco2/diagrams/sampleoutput.txt"}
+
+@*2 Sample 2: No threads outputted just a stand alone grammar.
+\listing{"/usr/local/yacco2/diagrams/sampleoutput2.txt"}
diff --git a/web/yacco2/o2linker/testsuites.w b/web/yacco2/o2linker/testsuites.w
new file mode 100644
index 0000000000..47e4c75f38
--- /dev/null
+++ b/web/yacco2/o2linker/testsuites.w
@@ -0,0 +1,15 @@
+@q file: testsuites.w@>
+@q% Copyright Dave Bone 1998 - 2015@>
+@q% /*@>
+@q% This Source Code Form is subject to the terms of the Mozilla Public@>
+@q% License, v. 2.0. If a copy of the MPL was not distributed with this@>
+@q% file, You can obtain one at http://mozilla.org/MPL/2.0/.@>
+@q% */@>
+*@** Test suites: Check out those flabby grammar muscles.\fbreak
+Exercise, exercise, excerise, perhaps to ... Linker's languages.
+Microsoft's batch facility is used to do the sweating.
+The test suites are inputted via the command line option on Linker.
+
+The batch file |linker_testsuite.bat| contains the all the test suites.
+Here are the test results with some editorial liberties:\fbreak
+\listing{"/usr/local/yacco2/diagrams/testsuiteoutput.txt"}
diff --git a/web/yacco2/o2testdriver/common_externs.cpp b/web/yacco2/o2testdriver/common_externs.cpp
new file mode 100644
index 0000000000..803925e123
--- /dev/null
+++ b/web/yacco2/o2testdriver/common_externs.cpp
@@ -0,0 +1,380 @@
+/*7:*/
+//line 92 "/usr/local/yacco2/externals/common_externs.w"
+
+/*6:*/
+//line 89 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "common_externs.h"
+/*:6*/
+//line 93 "/usr/local/yacco2/externals/common_externs.w"
+
+/*8:*/
+//line 98 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+
+/*:8*//*10:*/
+//line 122 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void GET_CMD_LINE
+(int argc,char*argv[],const char*Holding,yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+ofstream ofile;
+ofile.open(Holding,ios_base::out|ios::trunc);
+if(!ofile){
+CAbs_lr1_sym*sym= new Err_bad_filename(Holding);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Errors.push_back(*sym);
+return;
+}
+if(argc==1){
+char cmd_line[Max_buf_size];
+cout<<"Please enter Command line to process: ";
+cin.get(cmd_line,Max_buf_size,'\n');
+ofile<<cmd_line;
+ofile.close();
+return;
+}
+for(int x= 1;x<argc;++x){
+ofile<<argv[x]<<' ';
+}
+ofile.close();
+return;
+}
+
+/*:10*//*11:*/
+//line 173 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors)
+{
+using namespace NS_yacco2_k_symbols;
+using namespace yacco2;
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+Errors.push_back(*yacco2::PTR_LR1_eog__);
+using namespace NS_o2_err_hdlr;
+Co2_err_hdlr fsm;
+Parser pass_errors(fsm,&Errors,0);
+pass_errors.parse();
+yacco2::Parallel_threads_shutdown(pass_errors);
+
+}
+
+/*:11*//*12:*/
+//line 191 "/usr/local/yacco2/externals/common_externs.w"
+
+extern const char*DATE_AND_TIME(){
+static std::string dt;
+if(dt.empty()){
+time_t theTime= time(0);
+char*cTime= ctime(&theTime);
+dt+= cTime;
+int n= dt.find('\n');
+dt[n]= ' ';
+}
+return dt.c_str();
+}
+
+/*:12*//*13:*/
+//line 205 "/usr/local/yacco2/externals/common_externs.w"
+
+extern
+void
+XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym){
+Xlated_sym[0]= (char)0;
+int lll= strlen(Sym_to_xlate);
+int app_ptr= 0;
+for(int x= 0;x<lll;++x,--app_ptr){
+switch(Sym_to_xlate[x]){
+case'{':{
+int sz= sizeof("\\BRACEOPEN{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACEOPEN{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'}':{
+int sz= sizeof("\\BRACECLOSE{}");
+strncpy(&Xlated_sym[app_ptr],"\\BRACECLOSE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'<':{
+int sz= sizeof("\\LTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\LTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'>':{
+int sz= sizeof("\\GTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\GTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'@':{
+int sz= sizeof("\\ATsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ATsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'|':{
+if(x+2<lll){
+if(Sym_to_xlate[x+2]!='|'){
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+}else{
+int sz= sizeof("\\Verticalbar ");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar ",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'+':{
+int sz= sizeof("\\ALLshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\ALLshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'.':{
+int sz= sizeof("\\INVshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\INVshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'?':{
+int sz= sizeof("\\QUEshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\QUEshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'|':{
+int sz= sizeof("\\PARshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PARshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'r':{
+int sz= sizeof("\\REDshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\REDshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case'p':{
+int sz= sizeof("\\PROCshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\PROCshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+case't':{
+int sz= sizeof("\\TRAshift{}");
+strncpy(&Xlated_sym[app_ptr],"\\TRAshift{}",sz);
+app_ptr+= sz;
+x+= 2;
+continue;
+}
+default:{
+int sz= sizeof("\\Verticalbar{}");
+strncpy(&Xlated_sym[app_ptr],"\\Verticalbar{}",sz);
+app_ptr+= sz;
+continue;
+}
+}
+}
+case'+':{
+int sz= sizeof("+");
+strncpy(&Xlated_sym[app_ptr],"+",sz);
+app_ptr+= sz;
+continue;
+}
+case'-':{
+int sz= sizeof("-");
+strncpy(&Xlated_sym[app_ptr],"-",sz);
+app_ptr+= sz;
+continue;
+}
+case'*':{
+int sz= sizeof("\\ASTERICsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\ASTERICsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'#':{
+int sz= sizeof("\\NOsign ");
+strncpy(&Xlated_sym[app_ptr],"\\NOsign ",sz);
+app_ptr+= sz;
+continue;
+}
+case'&':{
+int sz= sizeof("\\AMPERsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\AMPERsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'%':{
+int sz= sizeof("\\PERCENTsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\PERCENTsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'$':{
+int sz= sizeof("\\DOLLARsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DOLLARsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'\\':{
+if(lll==1){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+switch(Sym_to_xlate[x+1]){
+case'\\':{
+if(lll==2){
+int sz= sizeof("\\BKSLASHsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\BKSLASHsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+int sz= sizeof("\\");
+strcat(Xlated_sym,"\\");
+app_ptr+= sz;
+++x;
+continue;
+}
+case'"':{
+int sz= sizeof("\\DBLQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\DBLQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'\'':{
+int sz= sizeof("\\RTQUOTEsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\RTQUOTEsign{}",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'n':{
+int sz= sizeof("\n");
+strncpy(&Xlated_sym[app_ptr],"\n",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case't':{
+int sz= sizeof("\t");
+strncpy(&Xlated_sym[app_ptr],"\t",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'r':{
+int sz= sizeof("\r");
+strncpy(&Xlated_sym[app_ptr],"\r",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'v':{
+int sz= sizeof("\v");
+strncpy(&Xlated_sym[app_ptr],"\v",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'b':{
+int sz= sizeof("\b");
+strncpy(&Xlated_sym[app_ptr],"\b",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'f':{
+int sz= sizeof("\f");
+strncpy(&Xlated_sym[app_ptr],"\f",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'a':{
+int sz= sizeof("\a");
+strncpy(&Xlated_sym[app_ptr],"\a",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+case'?':{
+int sz= sizeof("\?");
+strncpy(&Xlated_sym[app_ptr],"\?",sz);
+app_ptr+= sz;
+++x;
+continue;
+}
+default:{
+int sz= sizeof("\\");
+strncpy(&Xlated_sym[app_ptr],"\\",sz);
+app_ptr+= sz-1;
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x+1],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++x;
+++app_ptr;
+continue;
+}
+}
+}
+case'^':{
+int sz= sizeof("\\UPARROWsign{}");
+strncpy(&Xlated_sym[app_ptr],"\\UPARROWsign{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'~':{
+int sz= sizeof("\\TILDE{}");
+strncpy(&Xlated_sym[app_ptr],"\\TILDE{}",sz);
+app_ptr+= sz;
+continue;
+}
+case'_':{
+int sz= sizeof("\\_");
+strncpy(&Xlated_sym[app_ptr],"\\_",sz);
+app_ptr+= sz;
+continue;
+}
+default:{
+strncpy(&Xlated_sym[app_ptr],&Sym_to_xlate[x],1);
+++app_ptr;
+strncpy(&Xlated_sym[app_ptr],"",1);
+++app_ptr;
+continue;
+}
+}
+}
+}
+
+/*:13*/
+//line 94 "/usr/local/yacco2/externals/common_externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/o2testdriver/common_externs.h b/web/yacco2/o2testdriver/common_externs.h
new file mode 100644
index 0000000000..0398c50e99
--- /dev/null
+++ b/web/yacco2/o2testdriver/common_externs.h
@@ -0,0 +1,28 @@
+/*4:*/
+//line 68 "/usr/local/yacco2/externals/common_externs.w"
+
+#ifndef common_extern_
+#define common_extern_ 1
+
+//line 71 "/usr/local/yacco2/externals/common_externs.w"
+
+/*5:*/
+//line 76 "/usr/local/yacco2/externals/common_externs.w"
+
+#include "globals.h"
+#include "/usr/local/yacco2/compiler/o2/o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "o2_err_hdlr.h"
+extern
+void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern
+void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern const char*DATE_AND_TIME();
+/*:5*/
+//line 72 "/usr/local/yacco2/externals/common_externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/o2testdriver/globals.h b/web/yacco2/o2testdriver/globals.h
new file mode 100644
index 0000000000..64dc151bd9
--- /dev/null
+++ b/web/yacco2/o2testdriver/globals.h
@@ -0,0 +1,26 @@
+/*1:*/
+//line 8 "./o2_types.w"
+
+
+
+#ifndef globals_h__
+#define globals_h__ 1
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_characters.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+using namespace std;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+#endif
+
+/*:1*/
diff --git a/web/yacco2/o2testdriver/makefile_APPLE b/web/yacco2/o2testdriver/makefile_APPLE
new file mode 100644
index 0000000000..ca43223de4
--- /dev/null
+++ b/web/yacco2/o2testdriver/makefile_APPLE
@@ -0,0 +1,93 @@
+# File: makefile_APPLE
+# Why: Creates the testdriver using the GNU make program
+# Ks: Depending on your system, this utility might be called gmake or make
+#
+# O2 placement:
+# Rlse: /usr/local/yacco2/bin/o2
+# Dbg: /usr/local/yacco2/bin/o2_debug
+# Genw: for the pdf file: yacco2/docs
+# for the *.cpp files
+#
+# How to run: U must choose the label to execute: Rlse, Dbg, or Genw
+# Rlse --- gen the optimizwd version of O2 with no debug support
+# Dbg --- gen the debug version of O2
+# Genw --- gen the pdf document and the cpp code
+# from cweb see www.tug.org for details on obtaining code
+# for the literate programming environment aka CWEB
+# and please join Tug. It is a marvelous FOSS
+# Note: U do not need to use Genw as *.cpp and pdf
+# document are included in the ``yacco2'' package
+#
+# ---> Know where the stdc++ library resides and adjust the STDCC_dir variable
+#
+# Example: gen the compiler/compiler o2 release version using GNU make
+# cd /usr/local//yacco2/o2testdriver
+# make Rlse -f makefile_APPLE
+#
+# Example: gen programs from cweb
+# make Genw -f makefile_APPLE
+#
+
+O2 := /usr/local/yacco2
+##CC := /opt/local/bin/c++-mp-4.9
+CC := clang++#g++
+##LD := /opt/local/bin/ld
+LD := ld #apple linker
+02_target_dir :=
+Prg := testdriver
+O2_target_dir := Release
+Compile_opts := -c -pthread -arch x86_64 #-frepo -fno-implicit-templates -fno-rtti
+
+###
+# Set up directories
+###
+Base_o2 := $(O2)
+O2_bin := $(Base_o2)/bin
+O2_eternals := $(Base_o2)/externals
+O2_docs := $(Base_o2)/docs
+O2_docs := $(Base_o2)/docs
+O2_library := $(Base_o2)/library
+O2_library_lib := $(O2_library)/lib
+O2_lib_grms := $(O2_library)/grammars
+O2_cc_grms := $(Base_o2)/compiler/grammars
+O2_cc := $(Base_o2)/compiler/o2
+O2_testdriver := $(Base_o2)/o2testdriver
+O2_includes := -I'$(O2_testdriver)' -I'$(O2_cc_grms)' -I'$(O2_library)' -I'$(O2_lib_grms)'
+O2_req_libraries := -lyacco2 -lo2grammars
+O2_lib_directories := -L$(O2_cc_grms)/lib/$(O2_target_dir) -L$(O2_library_lib)/$(O2_target_dir)
+
+CC_lib := c++
+##CC_lib := stdc++ #gnu c++
+LD_PARMS := -arch x86_64 -macosx_version_min 10.9 #-stack_size 0x2000000 -no_compact_unwind
+
+#STDCC_dir := -L/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin11/4.2.1/
+##STDCC_dir := -L/opt/local/lib/gcc49/ #gnu c++
+STDCC_dir := -L/usr/lib/
+
+###
+# Compile, link, and move O2 into bin account
+###
+Rlse: YYY Move_o2
+
+YYY:
+ $(CC) -v $(Compile_opts) $(O2_includes) testdriver.cpp -o $(Prg).o
+ $(CC) -v $(Compile_opts) $(O2_includes) common_externs.cpp -o common_externs.o
+ $(CC) -v $(Compile_opts) $(O2_includes) o2_externs.cpp -o o2_externs.o
+ $(CC) -v $(Compile_opts) $(O2_includes) o2_defs.cpp -o o2_defs.o
+ $(LD) $(LD_PARMS) -o $(Prg) $(STDCC_dir) $(O2_lib_directories) $(O2_req_libraries) -l$(CC_lib) -lpthread o2_externs.o o2_defs.o common_externs.o $(Prg).o
+
+Move_o2:
+ mv $(Prg) $(O2_bin)
+ rm *.o
+
+Genw:
+ cweave testdriver
+ pdftex testdriver
+ mv testdriver.pdf $(O2_docs)
+ ctangle -l +e testdriver
+ rm *.idx
+ rm *.scn
+ rm *.toc
+ rm *.tex
+ rm *.log
+ rm *.c
diff --git a/web/yacco2/o2testdriver/o2.h b/web/yacco2/o2testdriver/o2.h
new file mode 100644
index 0000000000..92a99347d3
--- /dev/null
+++ b/web/yacco2/o2testdriver/o2.h
@@ -0,0 +1,46 @@
+/*163:*/
+//line 31 "/usr/local/yacco2/compiler/o2/includes.w"
+
+
+//line 32 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#ifndef o2__
+#define o2__ 1
+/*161:*/
+//line 8 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_types.h"
+#include "la_expr_lexical.h"
+#include "la_expr.h"
+#include "enumerate_T_alphabet.h"
+#include "epsilon_rules.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "eval_phrases.h"
+#include "enumerate_grammar.h"
+#include "rules_use_cnt.h"
+/*:161*/
+//line 35 "/usr/local/yacco2/compiler/o2/includes.w"
+
+/*13:*/
+//line 19 "/usr/local/yacco2/compiler/o2/prog.w"
+
+extern int RECURSION_INDEX__;
+extern void COMMONIZE_LA_SETS();
+extern int NO_LR1_STATES;
+extern STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+extern LR1_STATES_type LR1_COMMON_STATES;
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern void Print_dump_state(state*State);
+/*:13*/
+//line 36 "/usr/local/yacco2/compiler/o2/includes.w"
+
+#endif
+
+/*:163*/
diff --git a/web/yacco2/o2testdriver/o2_defs.cpp b/web/yacco2/o2testdriver/o2_defs.cpp
new file mode 100644
index 0000000000..9c38646cd5
--- /dev/null
+++ b/web/yacco2/o2testdriver/o2_defs.cpp
@@ -0,0 +1,1664 @@
+/*141:*/
+//line 2207 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+#include "o2.h"
+/*44:*/
+//line 237 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+gen_context::gen_context(state*S,Voc_ENO Ve):for_closure_state_(S),gen_vector_(Ve){}
+
+/*:44*//*46:*/
+//line 254 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state_element::state_element(AST*Elem)
+:cs_vector_combo_gening_it_(0,-1)
+,sr_element_(Elem)
+,sr_def_element_(0)
+,its_enum_id_(-1)
+,subrule_def_(0)
+,closure_state_(0)
+,goto_state_(0)
+,previous_state_(0)
+,reduced_state_(0)
+,self_state_(0)
+,previous_state_element_(0)
+,next_state_element_(0)
+,la_set_(0)
+,common_la_set_idx_(-1)
+{
+/*47:*/
+//line 275 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+CAbs_lr1_sym*sym= AST::content(*Elem);
+Voc_ENO id= sym->enumerated_id__;
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1877 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 280 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+sr_def_element_= rd;
+its_enum_id_= rd->enum_id();
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 287 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+la_set_= new LA_SET_type();
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+/*111:*/
+//line 1888 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;
+/*:111*/
+//line 294 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+/*112:*/
+//line 1891 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;
+
+/*:112*/
+//line 300 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+sr_def_element_= eos;
+its_enum_id_= eos->enumerated_id__;
+break;
+}
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1881 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 306 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_terminal_def*td= rt->its_t_def();
+sr_def_element_= td;
+its_enum_id_= td->enum_id();
+break;
+}
+}
+
+/*:47*/
+//line 271 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+/*:46*//*48:*/
+//line 315 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state_element::~state_element(){
+if(la_set_!=0)delete la_set_;
+}
+
+/*:48*//*50:*/
+//line 329 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state_element::add_fs_setA_to_LA(follow_element&Fe,LA_SET_type&La_to_fill_in){
+FOLLOW_SETS_ITER_type i= Fe.follow_set_.begin();
+FOLLOW_SETS_ITER_type ie= Fe.follow_set_.end();
+for(;i!=ie;++i){
+LA_SET_ITER_type j= La_to_fill_in.find(*i);
+if(j==La_to_fill_in.end()){
+T_in_stbl*t_sym= *i;
+/*51:*/
+//line 346 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(t_sym->t_def()->enum_id()!=LR1_PARALLEL_OPERATOR){
+La_to_fill_in.insert(t_sym);
+}else{
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_REDUCE_OPERATOR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+La_to_fill_in.insert(td);
+}
+
+/*:51*/
+//line 337 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+}
+}
+/*:50*//*52:*/
+//line 363 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state_element::calc_la(state_element&La_to_fill_in){
+if(La_to_fill_in.la_set_==NULL){
+return false;
+}
+if(La_to_fill_in.reduced_state_!=La_to_fill_in.self_state_)return true;
+VISITED_MERGE_STATES_IN_LA_CALC.clear();
+La_to_fill_in.la_set_->clear();
+state*cs= La_to_fill_in.closure_state_;
+CAbs_lr1_sym*sym= AST::content(*La_to_fill_in.sr_element_);
+T_ENO id= sym->enumerated_id__;
+switch(id){
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 376 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= eos->its_rule_def();
+RULE_ENO r_id= rd->enum_id();
+S_FOLLOW_SETS_ITER_type i= cs->state_s_follow_set_map_.find(r_id);
+follow_element*fe= i->second;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,r_id);
+}
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+break;
+}
+}
+if(La_to_fill_in.la_set_->empty()==true){
+return false;
+}else{
+return true;
+}
+}
+
+/*:52*//*53:*/
+//line 405 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state_element::
+fill_la_from_merge(state_element&La_to_fill_in,MERGES_type&Merge,RULE_ENO Rule_no){
+MERGES_ITER_type i= Merge.begin();
+MERGES_ITER_type ie= Merge.end();
+for(;i!=ie;++i){
+state*cs= *i;
+STATES_SET_ITER_type ii= VISITED_MERGE_STATES_IN_LA_CALC.find(cs);
+if(ii!=VISITED_MERGE_STATES_IN_LA_CALC.end())return;
+VISITED_MERGE_STATES_IN_LA_CALC.insert(cs);
+S_FOLLOW_SETS_ITER_type i= cs->state_s_follow_set_map_.find(Rule_no);
+follow_element*fe= i->second;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+}
+}
+}
+
+/*:53*//*54:*/
+//line 429 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state_element::
+fill_la_from_transition(state_element&La_to_fill_in,TRANSITIONS_type&Transition){
+TRANSITIONS_ITER_type i= Transition.begin();
+TRANSITIONS_ITER_type ie= Transition.end();
+for(;i!=ie;++i){
+follow_element*fe= *i;
+add_fs_setA_to_LA(*fe,*La_to_fill_in.la_set_);
+if(fe->transitions_.empty()!=true){
+fill_la_from_transition(La_to_fill_in,fe->transitions_);
+}
+if(fe->merges_.empty()!=true){
+fill_la_from_merge(La_to_fill_in,fe->merges_,fe->rule_no_);
+}
+}
+}
+
+/*:54*//*55:*/
+//line 449 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_ENO state_element::find_state_element_s_rule_no(){
+return subrule_def_->its_rule_def()->enum_id();
+}
+
+/*:55*//*57:*/
+//line 467 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+AST*follow_element::rule_def_t(){return rule_def_t_;}
+state*follow_element::its_state(){return its_state_;}
+follow_element::follow_element(state*State)
+:rule_no_(-1)
+,rule_def_t_(0)
+,its_state_(State)
+{}
+follow_element::follow_element(RULE_ENO Rule_no,state_element&State_elem,AST&Rule_def_t)
+:rule_no_(Rule_no)
+,rule_def_t_(&Rule_def_t)
+,its_state_(State_elem.closure_state_)
+{}
+
+void follow_element::add_follow_set_contributor(AST*SR_element){
+sr_elements_.push_back(SR_element);
+}
+/*:57*//*58:*/
+//line 490 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_follow_set_transition(state_element&State_elem,T_eosubrule&Eos){
+rule_def*rd= Eos.its_rule_def();
+RULE_ENO eno= rd->enum_id();
+
+S_FOLLOW_SETS_ITER_type fsi=
+State_elem.closure_state_->state_s_follow_set_map_.find(eno);
+if(fsi==State_elem.closure_state_->state_s_follow_set_map_.end()){
+return;
+}
+follow_element*fe= fsi->second;
+/*59:*/
+//line 508 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if((rule_no_==eno)
+&&
+(its_state_->state_no_==State_elem.closure_state_->state_no_))
+return;
+
+/*:59*/
+//line 501 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+transitions_.push_back(fe);
+}
+
+/*:58*//*60:*/
+//line 516 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_T_to_follow_set(AST*Refered_T){
+/*61:*/
+//line 522 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* t = (refered_T*)AST::content(*Refered_T);
+
+/*:61*/
+//line 518 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+follow_set_.insert(t->t_in_stbl());
+}
+/*:60*//*62:*/
+//line 526 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::remove_merge_closure_info(){
+merges_.pop_front();
+}
+
+/*:62*//*63:*/
+//line 534 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void follow_element::add_merge_closure_info(state&To_merge_closure_state){
+state*tm= &To_merge_closure_state;
+MERGES_ITER_type i= merges_.begin();
+MERGES_ITER_type ie= merges_.end();
+for(;i!=ie;++i){
+state*s= *i;
+if(s==tm)return;
+}
+merges_.push_front(&To_merge_closure_state);
+}
+
+/*:63*//*66:*/
+//line 635 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+
+/*:66*//*67:*/
+//line 639 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state(AST*Start_rule_t)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+{
+create_start_state(*Start_rule_t);
+add_state_to_gbl_lr1_state_tbls(this);
+}
+
+/*:67*//*68:*/
+//line 653 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state()
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(START_STATE_ENUMERATE)
+,vectored_into_by_elem_sym_(0)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+{}
+
+/*:68*//*69:*/
+//line 664 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state::state(Voc_ENO Eno,CAbs_lr1_sym*Entry_sym)
+:cs_vector_combo_gening_it_(0,-1)
+,vectored_into_by_elem_(Eno)
+,vectored_into_by_elem_sym_(Entry_sym)
+,state_no_(0)
+,closure_state_birthing_it_(0)
+,state_type_(0)
+{}
+
+/*:69*//*70:*/
+//line 678 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::closure_only_derives(AST*Rule_tree){
+gen_context gening_context(0,-1);
+add_rule_s_subrules_to_state(*Rule_tree,gening_context,*this);
+add_closure_rules_subrules_to_state(gening_context,*this);
+}
+
+
+/*:70*//*72:*/
+//line 700 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_element_to_state_vector
+(Voc_ENO Elem_id,state_element&Elem){
+S_VECTORS_ITER_type i= state_s_vector_.find(Elem_id);
+if(i==state_s_vector_.end()){
+state_s_vector_[Elem_id]= S_VECTOR_ELEMS_type();
+i= state_s_vector_.find(Elem_id);
+}
+S_VECTOR_ELEMS_type&el= i->second;
+if(el.empty()==true){
+el.push_back(&Elem);
+return;
+}
+S_VECTOR_ELEMS_ITER_type j= el.begin();
+S_VECTOR_ELEMS_ITER_type je= el.end();
+for(;j!=je;++j){
+state_element*se= *j;
+if(Elem.sr_element_<se->sr_element_){
+el.insert(j,&Elem);
+return;
+}
+}
+el.push_back(&Elem);
+}
+
+/*:72*//*73:*/
+//line 731 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_closure_rules_subrules_to_state(gen_context&Possible_gen_context,state&Closure_state){
+CLOSURE_RULES_type processed_rules_set;
+loop_until_empty:;
+if(closure_rule_list_.empty()==true)return;
+CLOSURE_RULES_ITER_type i= closure_rule_list_.begin();
+if(processed_rules_set.find(*i)!=processed_rules_set.end()){
+closure_rule_list_.erase(*i);
+goto loop_until_empty;
+}
+processed_rules_set.insert(*i);
+rule_def*rd= (*i)->r_def();
+AST*t= rd->rule_s_tree();
+add_rule_s_subrules_to_state(*t,Possible_gen_context,Closure_state);
+goto loop_until_empty;
+}
+
+/*:73*//*74:*/
+//line 749 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_rule_to_closure_list(rule_in_stbl*Rule_in_stbl){
+CLOSURE_RULES_ITER_type i= closure_rule_list_.find(Rule_in_stbl);
+if(i==closure_rule_list_.end()){
+closure_rule_list_.insert(Rule_in_stbl);
+derives_closure_rule_list_.insert(Rule_in_stbl);
+rule_def*rd= Rule_in_stbl->r_def();
+if(rd->closure_rules_making_up_first_set()->empty()==true)return;
+CLOSURE_RULES_type*cr= rd->closure_rules_making_up_first_set();
+CLOSURE_RULES_ITER_type j= cr->begin();
+CLOSURE_RULES_ITER_type je= cr->end();
+for(;j!=je;++j){
+rule_in_stbl*ris= *j;
+i= closure_rule_list_.find(ris);
+if(i==closure_rule_list_.end()){
+derives_closure_rule_list_.insert(ris);
+closure_rule_list_.insert(ris);
+}
+}
+}
+}
+/*:74*//*75:*/
+//line 777 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void
+state::
+add_rule_s_subrules_to_state(AST&Start_Rule_def_t,gen_context&Possible_gen_context,state&Closure_state_associate_with){
+AST*subrules_t= AST::get_1st_son(Start_Rule_def_t);
+AST*first_element_t(0);
+CAbs_lr1_sym*first_element(0);
+Voc_ENO id(START_STATE_ENUMERATE);
+Voc_ENO cs_id(START_STATE_ENUMERATE);
+for(;subrules_t!=0;subrules_t= AST::brother(*subrules_t)){
+T_subrule_def* srd = (T_subrule_def*)AST::content(*subrules_t);
+first_element_t= AST::get_1st_son(*subrules_t);
+first_element= AST::content(*first_element_t);
+state_element*se= new state_element(first_element_t);
+se->subrule_def_= srd;
+se->self_state_= this;
+se->closure_state_= this;
+se->closured_state_gening_it_= &Closure_state_associate_with;
+id= first_element->enumerated_id__;
+switch(id){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)first_element;
+rule_def*rd= rr->its_rule_def();
+rule_in_stbl*ris= rr->Rule_in_stbl();
+RULE_ENO r_id= rd->enum_id();
+cs_id= r_id;
+se->cs_vector_combo_gening_it_.gen_vector_= r_id;
+add_element_to_state_vector(r_id,*se);
+add_rule_to_follow_list(r_id);
+add_rule_to_closure_list(ris);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_null_call_thread_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_called_thread_eosubrule_;
+cs_id= t_id;
+se->reduced_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)first_element;
+T_terminal_def*td= rt->its_t_def();
+T_ENO t_id= td->enum_id();
+cs_id= t_id;
+se->cs_vector_combo_gening_it_.gen_vector_= t_id;
+add_element_to_state_vector(t_id,*se);
+break;
+}
+}
+if(Possible_gen_context.gen_vector_!=-1){
+se->cs_vector_combo_gening_it_= Possible_gen_context;
+}else{
+se->cs_vector_combo_gening_it_.for_closure_state_= this;
+se->cs_vector_combo_gening_it_.gen_vector_= cs_id;
+}
+
+}
+}
+
+/*:75*//*76:*/
+//line 869 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::crt_core_items_of_state
+(S_VECTOR_ELEMS_ITER_type&Iter_begin
+,S_VECTOR_ELEMS_ITER_type&Iter_end
+,gen_context&Gening_context){
+bool rt_bnded(false);
+AST*to_element_t(0);
+CAbs_lr1_sym*to_element(0);
+Voc_ENO id(START_STATE_ENUMERATE);
+for(;Iter_begin!=Iter_end;++Iter_begin){
+state_element*from_se= *Iter_begin;
+to_element_t= AST::brother(*from_se->sr_element_);
+bool se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+switch(to_element->enumerated_id__){
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+to_element_t= AST::brother(*to_element_t);
+se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+to_element_t= AST::brother(*to_element_t);
+se_rt_bnded_condition= is_str_rt_bnded(to_element_t);
+if(se_rt_bnded_condition==true)rt_bnded= se_rt_bnded_condition;
+to_element= AST::content(*to_element_t);
+break;
+}
+}
+state_element*se= new state_element(to_element_t);
+se->subrule_def_= from_se->subrule_def_;
+se->self_state_= this;
+se->closure_state_= from_se->closure_state_;
+se->closured_state_gening_it_= Gening_context.for_closure_state_;
+
+se->cs_vector_combo_gening_it_= Gening_context;
+
+if(se_rt_bnded_condition==true){
+if(from_se->closured_state_gening_it_!=Gening_context.for_closure_state_){
+
+se->cs_vector_combo_gening_it_= from_se->cs_vector_combo_gening_it_;
+se->closured_state_gening_it_= from_se->closured_state_gening_it_;
+}else{
+se->cs_vector_combo_gening_it_= Gening_context;
+se->closured_state_gening_it_= Gening_context.for_closure_state_;
+}
+}
+from_se->goto_state_= se->self_state_;
+se->previous_state_= from_se->self_state_;
+
+from_se->next_state_element_= se;
+se->previous_state_element_= from_se;
+id= to_element->enumerated_id__;
+/*77:*/
+//line 930 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)to_element;
+rule_def*rd= rr->its_rule_def();
+rule_in_stbl*ris= rr->Rule_in_stbl();
+RULE_ENO r_id= rd->enum_id();
+add_element_to_state_vector(r_id,*se);
+add_rule_to_follow_list(r_id);
+add_rule_to_closure_list(ris);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_null_call_thread_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_ENO t_id= T_Enum::T_T_called_thread_eosubrule_;
+add_element_to_state_vector(-t_id,*se);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)to_element;
+T_terminal_def*td= rt->its_t_def();
+T_ENO t_id= td->enum_id();
+add_element_to_state_vector(t_id,*se);
+break;
+}
+}
+
+/*:77*/
+//line 924 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+return rt_bnded;
+}
+
+/*:76*//*78:*/
+//line 967 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::create_start_state(AST&Start_rule_t){
+gen_context gening_context(0,-1);
+add_rule_s_subrules_to_state(Start_rule_t,gening_context,*this);
+add_closure_rules_subrules_to_state(gening_context,*this);
+crt_start_rule_s_follow_set(Start_rule_t);
+create_follow_sets_of_state();
+this->state_type_= determine_reduced_state_type(this);
+
+}
+/*:78*//*79:*/
+//line 985 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool
+state::
+gen_transitive_states_for_closure_context
+(gen_context&For_gening_context,state&For_closure_state,state&State){
+/*137:*/
+//line 2192 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2197 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2193 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2194 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 990 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_transitive_states_for_closure_context for closure state: "
+<<For_gening_context.for_closure_state_->state_no_
+<<endl;
+S_VECTORS_ITER_type i= State.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= State.state_s_vector_.end();
+for(;i!=ie;++i){
+Voc_ENO eno= i->first;
+/*80:*/
+//line 1017 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(eno==-T_Enum::T_T_eosubrule_)
+{
+S_VECTOR_ELEMS_type elem_list= i->second;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+for(;j!=je;++j){
+state_element*se= *j;
+se->reduced_state_= se->self_state_;
+state*reduced_state= se->self_state_;
+while(se->previous_state_element_!=0){
+se->previous_state_element_->reduced_state_= reduced_state;
+se= se->previous_state_element_;
+}
+}
+continue;
+}
+
+/*:80*/
+//line 998 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+For_gening_context.gen_vector_= eno;
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1000 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<" for vector: "
+<<For_gening_context.gen_vector_
+<<endl;
+bool continue_gening= gen_a_state(For_gening_context,For_closure_state,State,i);
+if(continue_gening==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1006 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+}
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1010 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return LR1_COMPATIBLE;
+}
+
+/*:79*//*81:*/
+//line 1036 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool
+state::
+gen_transitive_states_balance_for_closure_vector
+(gen_context&Gen_context,state&For_closure_state,state&Goto_state){
+/*137:*/
+//line 2192 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2197 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2193 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2194 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 1041 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_transitive_states_balance_for_closure_vector for <"
+<<Gen_context.for_closure_state_->state_no_
+<<","
+<<Gen_context.gen_vector_
+<<"> goto state: "
+<<Goto_state.state_no_
+<<endl;
+S_VECTORS_ITER_type i= Goto_state.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= Goto_state.state_s_vector_.end();
+for(;i!=ie;++i){
+Voc_ENO eno= i->first;
+/*80:*/
+//line 1017 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(eno==-T_Enum::T_T_eosubrule_)
+{
+S_VECTOR_ELEMS_type elem_list= i->second;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+for(;j!=je;++j){
+state_element*se= *j;
+se->reduced_state_= se->self_state_;
+state*reduced_state= se->self_state_;
+while(se->previous_state_element_!=0){
+se->previous_state_element_->reduced_state_= reduced_state;
+se= se->previous_state_element_;
+}
+}
+continue;
+}
+
+/*:80*/
+//line 1054 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool continue_gening= gen_a_state(Gen_context,For_closure_state,Goto_state,i);
+if(continue_gening==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1057 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+}
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1061 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return LR1_COMPATIBLE;
+}
+
+
+/*:81*//*82:*/
+//line 1109 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::gen_a_state
+(gen_context&For_gening_context
+,state&For_closure_state
+,state&Requesting_state,S_VECTORS_ITER_type&Elem_iter){
+/*137:*/
+//line 2192 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*138:*/
+//line 2197 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+++RECURSION_INDEX__;
+/*:138*/
+//line 2193 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 2194 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:137*/
+//line 1114 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_a_state for <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<"> requesting state: "
+<<Requesting_state.state_no_
+<<endl;
+
+gen_context associated_rt_bnded_cs(0,-1);
+Voc_ENO eno= Elem_iter->first;
+S_VECTOR_ELEMS_type elem_list= Elem_iter->second;
+S_VECTOR_ELEMS_ITER_type i= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ie= elem_list.end();
+bool compatible(false);
+for(;i!=ie;++i){
+state_element*se= *i;
+/*83:*/
+//line 1165 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if((
+(se->cs_vector_combo_gening_it_.for_closure_state_==For_gening_context.for_closure_state_)
+&&
+(se->cs_vector_combo_gening_it_.gen_vector_==For_gening_context.gen_vector_)
+)!=true){
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1171 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+lrclog<<"gen_a_state Bypass subrule as its gening <"
+<<se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<<","
+<<se->cs_vector_combo_gening_it_.gen_vector_
+<<"> different then gening <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<">"
+<<endl;
+continue;
+}
+
+/*:83*/
+//line 1131 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*84:*/
+//line 1186 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(se->goto_state_!=0){
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1188 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_a_state subrule COMMON PREFIX state gened by a different gening context. <"
+<<se->cs_vector_combo_gening_it_.for_closure_state_->state_no_
+<<","
+<<se->cs_vector_combo_gening_it_.gen_vector_
+<<"> goto state: "
+<<se->goto_state_->state_no_
+<<endl;
+add_state_to_conflict_states_list_if(For_gening_context,*se->goto_state_);
+bool gen_ok= gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*se->goto_state_);
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1199 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return gen_ok;
+}
+/*:84*/
+//line 1132 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*85:*/
+//line 1203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+state*s= new state(eno,se->sr_def_element_);
+s->closure_state_birthing_it_= For_gening_context.for_closure_state_;
+s->cs_vector_combo_gening_it_= For_gening_context;
+S_VECTOR_ELEMS_ITER_type j= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type je= elem_list.end();
+
+bool rt_bnded= s->crt_core_items_of_state(j,je,For_gening_context);
+if(rt_bnded==true){
+associated_rt_bnded_cs= For_gening_context;
+}else{
+associated_rt_bnded_cs.for_closure_state_= 0;
+associated_rt_bnded_cs.gen_vector_= -1;
+}
+s->add_closure_rules_subrules_to_state(associated_rt_bnded_cs,*s);
+s->create_follow_sets_of_state();
+
+/*:85*/
+//line 1133 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+/*86:*/
+//line 1223 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int compatibility_result= find_2_states_compatible_and_merge(*s);
+switch(compatibility_result){
+case MERGED:{
+delete s;
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1228 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return true;
+}
+case ABORT_GENING_STATES:{
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1232 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+case NOT_MERGED:{
+break;
+}
+}
+
+/*:86*/
+//line 1134 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+add_state_to_gbl_lr1_state_tbls(s);
+/*139:*/
+//line 2200 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+for(int y__(1);y__<=RECURSION_INDEX__;++y__)lrclog<<'.';
+/*:139*/
+//line 1136 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+lrclog<<"gen_a_state for <"
+<<For_gening_context.for_closure_state_->state_no_
+<<","
+<<For_gening_context.gen_vector_
+<<"> requesting state: "
+<<Requesting_state.state_no_
+<<" NEW STATE CREATED: "
+<<s->state_no_
+<<endl;
+add_state_to_conflict_states_list_if(For_gening_context,*s);
+compatible= is_state_lr1_compatible(*s);
+if(compatible==NOT_LR1_COMPATIBLE){
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1150 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_LR1_COMPATIBLE;
+}
+
+s->state_type_= determine_reduced_state_type(s);
+bool gen_ok= gen_transitive_states_balance_for_closure_vector(For_gening_context,For_closure_state,*s);
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1156 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return gen_ok;
+}
+/*140:*/
+//line 2203 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+--RECURSION_INDEX__;
+
+/*:140*/
+//line 1159 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+return LR1_COMPATIBLE;
+}
+
+/*:82*//*87:*/
+//line 1243 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int state::determine_reduced_state_type(state*S){
+
+using namespace NS_yacco2_T_enum;
+int no_reduces(0);
+int no_reduce_types(0);
+S_VECTORS_ITER_type svi= S->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= S->state_s_vector_.end();
+S_VECTORS_ITER_type tvi= S->state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+tvi= S->state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+tvi= S->state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+if(tvi!=svie){
+no_reduces+= tvi->second.size();
+++no_reduce_types;
+}
+if(no_reduces> 1)no_reduces= 3;
+if(S->state_s_vector_.size()> no_reduce_types){
+if(no_reduce_types> 0){
+++no_reduces;
+}
+}
+return no_reduces;
+}
+
+/*:87*//*88:*/
+//line 1276 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_state_to_gbl_lr1_state_tbls(state*State){
+++NO_LR1_STATES;
+State->state_no_= NO_LR1_STATES;
+LR1_STATES.push_back(State);
+Voc_ENO eno= State->vectored_into_by_elem_;
+LR1_STATES_ITER_type i= LR1_COMMON_STATES.find(eno);
+if(i==LR1_COMMON_STATES.end()){
+LR1_COMMON_STATES[eno]= STATES_type();
+i= LR1_COMMON_STATES.find(eno);
+}
+i->second.push_back(State);
+}
+
+/*:88*//*89:*/
+//line 1295 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_state_to_conflict_states_list_if(gen_context&Gening_context,state&State){
+S_VECTORS_ITER_type i= State.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(i!=State.state_s_vector_.end())goto reduce_fnd;
+return;
+reduce_fnd:;
+if(i->second.size()> 1){
+Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+return;
+}
+if(State.state_s_vector_.size()<2)return;
+Gening_context.for_closure_state_->state_s_conflict_state_list_.push_back(&State);
+}
+
+/*:89*//*91:*/
+//line 1345 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::are_states_equivalent(state&Merge_into_state,state&To_merge_state){
+if(Merge_into_state.vectored_into_by_elem_!=To_merge_state.vectored_into_by_elem_){
+return false;
+}
+if(Merge_into_state.state_s_vector_.size()!=To_merge_state.state_s_vector_.size()){
+return false;
+}
+S_VECTORS_ITER_type i= Merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type ie= Merge_into_state.state_s_vector_.end();
+S_VECTORS_ITER_type j= To_merge_state.state_s_vector_.begin();
+S_VECTORS_ITER_type je= To_merge_state.state_s_vector_.end();
+for(;i!=ie;++i,++j){
+Voc_ENO ieno= i->first;
+Voc_ENO jeno= j->first;
+if(ieno!=jeno){
+return false;
+}
+if(i->second.size()!=j->second.size()){
+return false;
+}
+S_VECTOR_ELEMS_ITER_type l= i->second.begin();
+S_VECTOR_ELEMS_ITER_type le= i->second.end();
+S_VECTOR_ELEMS_ITER_type m= j->second.begin();
+S_VECTOR_ELEMS_ITER_type me= j->second.end();
+for(;l!=le;++l,++m){
+state_element*ls= *l;
+state_element*ms= *m;
+if(ls->sr_element_!=ms->sr_element_){
+return false;
+}
+}
+}
+return true;
+}
+
+/*:91*//*92:*/
+//line 1399 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_state_lr1_compatible(state&State_to_eval){
+T_COUNT_type t_cnt(START_OF_RULES_ENUM);
+for(int x= 0;x<START_OF_RULES_ENUM;++x)t_cnt[x]= 0;
+S_VECTORS_ITER_type i;
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_called_thread_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+i= State_to_eval.state_s_vector_.find(-T_Enum::T_T_null_call_thread_eosubrule_);
+if(i!=State_to_eval.state_s_vector_.end()){
+goto assess_state;
+}
+return LR1_COMPATIBLE;
+assess_state:
+int no_reduces= 0;
+S_VECTOR_ELEMS_ITER_type j= i->second.begin();
+S_VECTOR_ELEMS_ITER_type je= i->second.end();
+bool T_not_meta(false);
+for(;j!=je;++j){
+++no_reduces;
+state_element*se= *j;
+if(se->calc_la(*se)==false){
+return NOT_LR1_COMPATIBLE;
+}
+LA_SET_ITER_type k= se->la_set_->begin();
+LA_SET_ITER_type ke= se->la_set_->end();
+for(;k!=ke;++k){
+T_in_stbl*tintbl= *k;
+T_ENO teno= tintbl->t_def()->enum_id();
+if(teno<=END_OF_LR1_DEFS){
+if(teno==LR1_EOG){
+T_not_meta= true;
+}
+}else{
+T_not_meta= true;
+}
+++t_cnt[teno];
+if(t_cnt[teno]> 1)return NOT_LR1_COMPATIBLE;
+}
+}
+if(no_reduces> 1){
+if(T_not_meta==true){
+if(t_cnt[LR1_EOLR]> 0)return NOT_LR1_COMPATIBLE;
+}
+}
+
+
+S_VECTORS_ITER_type l= State_to_eval.state_s_vector_.begin();
+S_VECTORS_ITER_type le= State_to_eval.state_s_vector_.end();
+for(;l!=le;++l){
+Voc_ENO t= l->first;
+if(t==-T_Enum::T_T_eosubrule_)continue;
+if(t==-T_Enum::T_T_null_call_thread_eosubrule_)continue;
+if(t==-T_Enum::T_T_called_thread_eosubrule_)continue;
+if(t==T_Enum::T_refered_rule_)continue;
+S_VECTOR_ELEMS_ITER_type m= l->second.begin();
+state_element*se= *m;
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+T_ENO tid= sym->enumerated_id__;
+switch(tid){
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1881 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 1465 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_in_stbl*tintbl= rt->t_in_stbl();
+T_ENO teno= tintbl->t_def()->enum_id();
+if(teno<=END_OF_LR1_DEFS){
+if(teno!=LR1_EOG){
+continue;
+}
+}
+++t_cnt[teno];
+if(t_cnt[teno]> 1)return NOT_LR1_COMPATIBLE;
+if(teno> END_OF_LR1_DEFS){
+if(t_cnt[LR1_EOLR]> 0)return NOT_LR1_COMPATIBLE;
+}
+}
+}
+}
+return LR1_COMPATIBLE;
+}
+
+/*:92*//*93:*/
+//line 1539 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int
+state::
+are_2_states_compatible_yes_merge(state&To_merge_into_state,state&State_for_merging){
+state*cs_To_merge_into= To_merge_into_state.closure_state_birthing_it_;
+state*cs_for_merging= State_for_merging.closure_state_birthing_it_;
+
+/*94:*/
+//line 1578 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_NOS_SET_type rules_to_add;
+S_VECTORS_ITER_type sfmi= To_merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type sfmie= To_merge_into_state.state_s_vector_.end();
+S_VECTORS_ITER_type msfmi= State_for_merging.state_s_vector_.begin();
+for(;sfmi!=sfmie;++sfmi,++msfmi){
+S_VECTOR_ELEMS_ITER_type rri= sfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type mrri= msfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= sfmi->second.end();
+for(;rri!=rrie;++rri,++mrri){
+state_element*re= *rri;
+state_element*mre= *mrri;
+if(re->closure_state_==re->self_state_)continue;
+RULE_ENO ruleno= re->find_state_element_s_rule_no();
+S_FOLLOW_SETS_ITER_type j= re->closure_state_->state_s_follow_set_map_.find(ruleno);
+follow_element*fe= j->second;
+RULE_NOS_SET_ITER_type rni= rules_to_add.find(ruleno);
+if(rni==rules_to_add.end()){
+fe->add_merge_closure_info(*mre->closure_state_);
+rules_to_add.insert(ruleno);
+}
+}
+}
+/*:94*/
+//line 1546 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool compatible(false);
+if(cs_To_merge_into->state_s_conflict_state_list_.empty()==true)goto merged;
+lr1_test:
+{
+S_CONFLICT_STATES_ITER_type k= cs_To_merge_into->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ke= cs_To_merge_into->state_s_conflict_state_list_.end();
+for(;k!=ke;++k){
+state*s= *k;
+
+compatible= s->is_state_lr1_compatible(*s);
+
+if(compatible==NOT_LR1_COMPATIBLE)goto unwind_merge;
+}
+}
+merged:
+{
+/*95:*/
+//line 1602 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+S_VECTORS_ITER_type ri= State_for_merging.state_s_vector_.begin();
+S_VECTORS_ITER_type rie= State_for_merging.state_s_vector_.end();
+S_VECTORS_ITER_type si= To_merge_into_state.state_s_vector_.begin();
+for(;ri!=rie;++ri,++si){
+S_VECTOR_ELEMS_ITER_type rri= ri->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= ri->second.end();
+S_VECTOR_ELEMS_ITER_type ssi= si->second.begin();
+for(;rri!=rrie;++rri,++ssi){
+state_element*re= *rri;
+state_element*se= *ssi;
+if(re->previous_state_element_==0)continue;
+state_element*prev_re= re->previous_state_element_;
+prev_re->goto_state_= se->self_state_;
+prev_re->reduced_state_= se->reduced_state_;
+prev_re->next_state_element_= se;
+
+for(prev_re= prev_re->previous_state_element_;
+prev_re!=0;prev_re= prev_re->previous_state_element_){
+prev_re->reduced_state_= se->reduced_state_;
+}
+}
+}
+/*96:*/
+//line 1634 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+if(cs_for_merging->cs_vector_combo_gening_it_.for_closure_state_
+!=cs_To_merge_into->cs_vector_combo_gening_it_.for_closure_state_){
+S_CONFLICT_STATES_ITER_type k= cs_To_merge_into->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ke= cs_To_merge_into->state_s_conflict_state_list_.end();
+for(;k!=ke;++k){
+state*s= *k;
+cs_for_merging->state_s_conflict_state_list_.push_back(s);
+}
+}
+
+/*:96*/
+//line 1625 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+
+/*:95*/
+//line 1563 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return MERGED;
+}
+
+unwind_merge:{
+
+unwind:;
+/*97:*/
+//line 1646 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+RULE_NOS_SET_type rules_to_add;
+S_VECTORS_ITER_type sfmi= To_merge_into_state.state_s_vector_.begin();
+S_VECTORS_ITER_type sfmie= To_merge_into_state.state_s_vector_.end();
+for(;sfmi!=sfmie;++sfmi){
+S_VECTOR_ELEMS_ITER_type rri= sfmi->second.begin();
+S_VECTOR_ELEMS_ITER_type rrie= sfmi->second.end();
+for(;rri!=rrie;++rri){
+state_element*re= *rri;
+if(re->closure_state_==re->self_state_)continue;
+RULE_ENO ruleno= re->find_state_element_s_rule_no();
+S_FOLLOW_SETS_ITER_type j= re->closure_state_->state_s_follow_set_map_.find(ruleno);
+follow_element*fe= j->second;
+RULE_NOS_SET_ITER_type rni= rules_to_add.find(ruleno);
+if(rni==rules_to_add.end()){
+fe->remove_merge_closure_info();
+rules_to_add.insert(ruleno);
+}
+}
+}
+
+/*:97*/
+//line 1570 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+return NOT_MERGED;
+}
+return NOT_MERGED;
+}
+
+/*:93*//*98:*/
+//line 1670 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+int state::find_2_states_compatible_and_merge(state&State_for_merging){
+Voc_ENO eno= State_for_merging.vectored_into_by_elem_;
+LR1_STATES_ITER_type i= LR1_COMMON_STATES.find(eno);
+if(i==LR1_COMMON_STATES.end()){
+return NOT_MERGED;
+}
+STATES_ITER_type j= i->second.begin();
+STATES_ITER_type je= i->second.end();
+for(;j!=je;++j){
+state*s= *j;
+bool equivalent= are_states_equivalent(State_for_merging,*s);
+if(equivalent==false)continue;
+int compatible= are_2_states_compatible_yes_merge(*s,State_for_merging);
+if(compatible==LR1_COMPATIBLE)return MERGED;
+if(compatible==ABORT_GENING_STATES)return ABORT_GENING_STATES;
+}
+return NOT_MERGED;
+}
+
+/*:98*//*99:*/
+//line 1692 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::are_gened_states_lr1_compatible(){
+S_CONFLICT_STATES_ITER_type i= state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type ie= state_s_conflict_state_list_.end();
+if(i==ie)return LR1_COMPATIBLE;
+for(;i!=ie;++i){
+state*s= *i;
+if(is_state_lr1_compatible(*s)==NOT_LR1_COMPATIBLE)return NOT_LR1_COMPATIBLE;
+}
+return LR1_COMPATIBLE;
+}
+
+/*:99*//*100:*/
+//line 1725 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_str_rt_bnded(AST*Str){
+AST*rstr_t= AST::brother(*Str);
+if(rstr_t==0)return false;
+CAbs_lr1_sym*sym= AST::content(*rstr_t);
+Voc_ENO id= sym->enumerated_id__;
+if(id==T_Enum::T_T_eosubrule_){
+CAbs_lr1_sym*rsym= AST::content(*Str);
+if(rsym->enumerated_id__==T_Enum::T_refered_rule_){
+return true;
+}
+}
+return is_str_epsilonable(rstr_t);
+}
+/*:100*//*101:*/
+//line 1748 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+bool state::is_str_epsilonable(AST*Str){
+AST*str_t= Str;
+for(;str_t!=0;str_t= AST::brother(*str_t)){
+CAbs_lr1_sym*sym= AST::content(*str_t);
+Voc_ENO id= sym->enumerated_id__;
+/*102:*/
+//line 1765 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1877 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 1768 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+if(rd->epsilon()!=true)return false;
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+return true;
+}
+case T_Enum::T_refered_T_:{
+return false;
+}
+}
+
+/*:102*/
+//line 1754 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+return true;
+}
+
+/*:101*//*104:*/
+//line 1783 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::add_rule_to_follow_list(RULE_ENO Refered_rule){
+FOLLOW_RULES_ITER_type i= follow_rule_list_.find(Refered_rule);
+if(i==follow_rule_list_.end()){
+follow_rule_list_.insert(Refered_rule);
+}
+}
+
+/*:104*//*105:*/
+//line 1798 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::create_follow_sets_of_state(){
+if(follow_rule_list_.empty()==true)return;
+RULE_ENO eno(-1);
+FOLLOW_RULES_ITER_type i= follow_rule_list_.begin();
+FOLLOW_RULES_ITER_type ie= follow_rule_list_.end();
+for(;i!=ie;++i){
+follow_element*fe= new follow_element(this);
+eno= *i;
+fe->rule_no_= eno;
+state_s_follow_set_map_[eno]= fe;
+}
+
+i= follow_rule_list_.begin();
+for(;i!=ie;++i){
+eno= *i;
+S_VECTORS_ITER_type j= state_s_vector_.find(eno);
+S_FOLLOW_SETS_ITER_type fsi= state_s_follow_set_map_.find(eno);
+follow_element*fe= fsi->second;
+
+S_VECTOR_ELEMS_ITER_type k= j->second.begin();
+S_VECTOR_ELEMS_ITER_type ke= j->second.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+/*107:*/
+//line 1874 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)AST::content(*se->sr_element_);
+/*:107*/
+//line 1822 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+AST*follow_str_t= AST::brother(*se->sr_element_);
+deal_with_follow_str_sym:;
+fe->rule_def_t_= rr->its_rule_def()->rule_s_tree();
+fe->add_follow_set_contributor(follow_str_t);
+CAbs_lr1_sym*sym= AST::content(*follow_str_t);
+Voc_ENO id= sym->enumerated_id__;
+/*106:*/
+//line 1834 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*108:*/
+//line 1877 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+
+/*:108*/
+//line 1837 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+rule_def*rd= rr->its_rule_def();
+if(rd->first_set()->empty()!=true){
+FIRST_SET_ITER_type a= rd->first_set()->begin();
+FIRST_SET_ITER_type ae= rd->first_set()->end();
+for(;a!=ae;++a){
+T_in_stbl*t= *a;
+if(fe->follow_set_.find(t)==fe->follow_set_.end()){
+fe->follow_set_.insert(t);
+}
+}
+}
+if(rd->epsilon()==true){
+follow_str_t= AST::brother(*follow_str_t);
+goto deal_with_follow_str_sym;
+}
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*110:*/
+//line 1885 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:110*/
+//line 1856 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+fe->add_follow_set_transition(*se,*eos);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+break;
+}
+case T_Enum::T_refered_T_:{
+/*109:*/
+//line 1881 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:109*/
+//line 1867 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+fe->follow_set_.insert(rt->t_in_stbl());
+break;
+}
+}
+
+/*:106*/
+//line 1829 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+}
+}
+/*:105*//*113:*/
+//line 1904 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+void state::crt_start_rule_s_follow_set(AST&Start_rule){
+CAbs_lr1_sym*sym= AST::content(Start_rule);
+rule_def* rd = (rule_def*)sym;;
+RULE_ENO rno= rd->enum_id();
+follow_element*fe= new follow_element(this);
+fe->rule_no_= rno;
+state_s_follow_set_map_[rno]= fe;
+fe->rule_def_t_= rd->rule_s_tree();
+if(O2_PP_PHASE==0){
+fe->follow_set_.insert(STBL_T_ITEMS[LR1_EOLR]);
+}else{
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+T_parallel_la_boundary*la= pp_ph->la_bndry();
+LA_SET_ITER_type i= la->la_first_set()->begin();
+LA_SET_ITER_type ie= la->la_first_set()->end();
+for(;i!=ie;++i){
+T_in_stbl*t= *i;
+FOLLOW_SETS_ITER_type j= fe->follow_set_.find(t);
+if(j==fe->follow_set_.end()){
+fe->follow_set_.insert(t);
+}
+}
+}
+
+}
+
+/*:113*//*115:*/
+//line 1933 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+const char*state::entry_symbol_literal(){
+if(vectored_into_by_elem_sym_==0)return" No symbol";
+/*116:*/
+//line 1941 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+Voc_ENO id= vectored_into_by_elem_sym_->enumerated_id__;
+CAbs_lr1_sym*sym= vectored_into_by_elem_sym_;
+switch(id){
+case T_Enum::T_rule_def_:{
+rule_def* rd = (rule_def*)sym;
+return rd->rule_name()->c_str();
+}
+case T_Enum::T_T_eosubrule_:{
+return"eos";
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+return"null-eos";
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+return"called-thd-eos";
+break;
+}
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* td = (T_terminal_def*)sym;
+return td->t_name()->c_str();
+}
+default:{
+return"null-eos";
+break;
+}
+}
+
+/*:116*/
+//line 1936 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+}
+
+/*:115*/
+//line 2209 "/usr/local/yacco2/compiler/o2/o2_defs.w"
+
+//line 1 "/usr/local/yacco2/compiler/o2/bugs.w"
+
+
+
+
+/*:141*/
diff --git a/web/yacco2/o2testdriver/o2_externs.cpp b/web/yacco2/o2testdriver/o2_externs.cpp
new file mode 100644
index 0000000000..7feee91017
--- /dev/null
+++ b/web/yacco2/o2testdriver/o2_externs.cpp
@@ -0,0 +1,7277 @@
+/*7:*/
+//line 183 "./o2externs.w"
+
+/*6:*/
+//line 180 "./o2externs.w"
+
+#include "o2_externs.h"
+/*:6*/
+//line 184 "./o2externs.w"
+
+/*8:*/
+//line 189 "./o2externs.w"
+
+RULES_HAVING_AR_type RULES_HAVING_AR;
+COMMON_LA_SETS_type COMMON_LA_SETS;
+T_fsm_phrase*O2_FSM_PHASE(0);
+T_parallel_parser_phrase*O2_PP_PHASE(0);
+T_enum_phrase*O2_T_ENUM_PHASE(0);
+T_lr1_k_phrase*O2_LRK_PHASE(0);
+T_rc_phrase*O2_RC_PHASE(0);
+T_error_symbols_phrase*O2_ERROR_PHASE(0);
+T_terminals_phrase*O2_T_PHASE(0);
+T_rules_phrase*O2_RULES_PHASE(0);
+
+yacco2::AST*CWEB_MARKER(0);
+yacco2::AST*GRAMMAR_TREE(0);
+RULE_ENO START_OF_RULES_ENUM(-1);
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+/*:8*//*10:*/
+//line 209 "./o2externs.w"
+
+void prescan_mpname_for_cweb(std::string&In,std::string&Out){
+int len= In.length();
+for(int x= 0;x<len;++x){
+switch(In[x]){
+case' ':{
+Out+= '.';
+break;
+}
+case'\\':{
+if(x+1<len){
+if(In[x+1]=='\\'){
+Out+= In[x];
+++x;
+break;
+}
+Out+= In[x];
+break;
+}else{
+Out+= In[x];
+break;
+}
+}
+default:{
+Out+= In[x];
+break;
+}
+}
+}
+}
+
+/*:10*//*11:*/
+//line 241 "./o2externs.w"
+
+extern void Print_dump_state(state*State){
+/*12:*/
+//line 245 "./o2externs.w"
+
+const char*literal_name;
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<"->State: ";
+state*cur_state= State;
+literal_name= cur_state->entry_symbol_literal();
+
+yacco2::lrclog<<cur_state->state_no_<<" Entry: "<<
+cur_state->vectored_into_by_elem_
+<<" Symbol: "
+<<literal_name;
+if(cur_state->closure_state_birthing_it_!=0){
+yacco2::lrclog<<" Birthing closure state: "
+<<cur_state->closure_state_birthing_it_->state_no_;
+}
+yacco2::lrclog<<std::endl;
+yacco2::lrclog<<" Follow set:"<<std::endl;
+S_FOLLOW_SETS_ITER_type sfi= cur_state->state_s_follow_set_map_.begin();
+S_FOLLOW_SETS_ITER_type sfie= cur_state->state_s_follow_set_map_.end();
+for(;sfi!=sfie;++sfi){
+follow_element*fe= sfi->second;
+rule_def* rd = (rule_def*)AST::content(*fe->rule_def_t_);
+yacco2::lrclog<<" Rule no: "<<fe->rule_no_
+<<" Name: "<<rd->rule_name()->c_str()<<std::endl;
+
+FOLLOW_SETS_ITER_type i= fe->follow_set_.begin();
+FOLLOW_SETS_ITER_type ie= fe->follow_set_.end();
+if(i!=ie){
+yacco2::lrclog<<" follow set:"<<endl;
+yacco2::lrclog<<" ";
+}
+int nos(1);
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<"\t\t";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+
+TRANSITIONS_ITER_type j= fe->transitions_.begin();
+TRANSITIONS_ITER_type je= fe->transitions_.end();
+if(j!=je){
+yacco2::lrclog<<" transitions"<<endl;
+}
+for(;j!=je;++j){
+follow_element*tfe= *j;
+rule_def* rd = (rule_def*)AST::content(*tfe->rule_def_t_);
+yacco2::lrclog<<" S"<<tfe->its_state_->state_no_
+<<"x"<<rd->rule_name()->c_str()<<endl;
+}
+MERGES_ITER_type k= fe->merges_.begin();
+MERGES_ITER_type ke= fe->merges_.end();
+if(k!=ke){
+yacco2::lrclog<<" merges"<<endl;
+}
+for(;k!=ke;++k){
+state*s= *k;
+yacco2::lrclog<<" S"<<s->state_no_<<" ";
+}
+yacco2::lrclog<<endl;
+}
+yacco2::lrclog<<" Vectors:"<<std::endl;
+S_VECTORS_ITER_type svi= cur_state->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= cur_state->state_s_vector_.end();
+for(;svi!=svie;++svi){
+yacco2::lrclog<<" Symbol no: "<<svi->first;
+
+int first_time(0);
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+S_VECTOR_ELEMS_ITER_type selie= svi->second.end();
+for(;seli!=selie;++seli){
+state_element*se= *seli;
+if(first_time==0){
+first_time= 1;
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+yacco2::lrclog<<" Symbol: ";
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_rule_:{
+/*16:*/
+//line 489 "./o2externs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+/*:16*/
+//line 327 "./o2externs.w"
+
+rule_def*rd= rr->its_rule_def();
+yacco2::lrclog<<rd->rule_name()->c_str()<<endl;
+break;
+}
+case T_Enum::T_refered_T_:{
+/*17:*/
+//line 492 "./o2externs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:17*/
+//line 333 "./o2externs.w"
+
+T_terminal_def*td= rt->its_t_def();
+yacco2::lrclog<<td->t_name()->c_str()<<endl;
+break;
+}
+default:{
+yacco2::lrclog<<sym->id()<<endl;
+break;
+}
+
+}
+
+}
+/*13:*/
+//line 361 "./o2externs.w"
+
+CAbs_lr1_sym*sym= AST::content(*se->sr_element_);
+Voc_ENO id= sym->enumerated_id__;
+/*14:*/
+//line 367 "./o2externs.w"
+
+switch(id){
+case T_Enum::T_refered_rule_:{
+/*16:*/
+//line 489 "./o2externs.w"
+
+refered_rule* rr = (refered_rule*)sym;
+/*:16*/
+//line 370 "./o2externs.w"
+
+yacco2::lrclog<<" RxSRxPos: "<<rr->grammar_s_enumerate()->c_str();
+rule_def*rd= rr->its_rule_def();
+yacco2::lrclog<<" "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+/*18:*/
+//line 496 "./o2externs.w"
+
+T_eosubrule* eos = (T_eosubrule*)sym;
+/*:18*/
+//line 377 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+/*19:*/
+//line 499 "./o2externs.w"
+
+T_null_call_thread_eosubrule* eos = (T_null_call_thread_eosubrule*)sym;
+/*:19*/
+//line 405 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;
+}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+/*20:*/
+//line 502 "./o2externs.w"
+
+T_called_thread_eosubrule* eos = (T_called_thread_eosubrule*)sym;
+
+
+/*:20*/
+//line 434 "./o2externs.w"
+
+if(se->la_set_!=0){
+LA_SET_ITER_type i= se->la_set_->begin();
+LA_SET_ITER_type ie= se->la_set_->end();
+int nos(1);
+if(i!=ie){
+yacco2::lrclog<<" reduce set #: "<<se->common_la_set_idx_<<endl;
+yacco2::lrclog<<" ";
+for(;i!=ie;++i){
+T_in_stbl*tit= *i;
+++nos;
+if(nos> 15){
+yacco2::lrclog<<endl;
+yacco2::lrclog<<" ";
+nos= 1;
+}
+yacco2::lrclog<<tit->t_def()->t_name()->c_str()<<" ";
+}
+yacco2::lrclog<<endl;
+}else{
+yacco2::lrclog<<" reduce set #: Empty see following transition"<<endl;
+}
+}
+yacco2::lrclog<<" RxSRxPos: "<<eos->grammar_s_enumerate()->c_str();
+rule_def*rd= eos->its_rule_def();
+yacco2::lrclog<<" Eos of "<<rd->rule_name()->c_str();
+break;
+}
+case T_Enum::T_refered_T_:{
+/*17:*/
+//line 492 "./o2externs.w"
+
+refered_T* rt = (refered_T*)sym;
+
+/*:17*/
+//line 463 "./o2externs.w"
+
+yacco2::lrclog<<" RxSRxPos: "<<rt->grammar_s_enumerate()->c_str();
+T_terminal_def*td= rt->its_t_def();
+yacco2::lrclog<<" "<<td->t_name()->c_str();
+break;
+}
+}
+yacco2::lrclog<<" Closured S"<<se->closure_state_->state_no_;
+yacco2::lrclog<<" CS-gening-it S"<<se->closured_state_gening_it_->state_no_;
+if(se->closure_state_->state_no_!=se->closured_state_gening_it_->state_no_){
+yacco2::lrclog<<" due to rt bnd ";
+}
+if(se->goto_state_!=0){
+yacco2::lrclog<<" goto S"<<se->goto_state_->state_no_;
+}
+if(se->reduced_state_!=0){
+yacco2::lrclog<<" reduced S"<<se->reduced_state_->state_no_;
+yacco2::lrclog<<std::endl;
+}else{
+yacco2::lrclog<<" reduced S"<<"????";
+yacco2::lrclog<<std::endl;
+}
+/*:14*/
+//line 364 "./o2externs.w"
+
+
+/*:13*/
+//line 346 "./o2externs.w"
+
+}
+}
+if(cur_state->state_s_conflict_state_list_.empty()!=true){
+yacco2::lrclog<<" ===>Conflict states:"<<std::endl;
+S_CONFLICT_STATES_ITER_type csi= cur_state->state_s_conflict_state_list_.begin();
+S_CONFLICT_STATES_ITER_type csie= cur_state->state_s_conflict_state_list_.end();
+for(;csi!=csie;++csi){
+state*cstate= *csi;
+yacco2::lrclog<<" State no: "<<cstate->state_no_<<endl;
+}
+}
+yacco2::lrclog<<"End of state"<<std::endl;
+
+/*:12*/
+//line 243 "./o2externs.w"
+
+}
+/*:11*//*21:*/
+//line 576 "./o2externs.w"
+
+bool
+process_fsm_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_fsm&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+
+using namespace NS_fsm_phrase;
+Cfsm_phrase fsm;
+Parser p1(fsm,ip1,&op1,start_pos,er1);
+p1.parse();
+
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_fsm_phrase* t = (T_fsm_phrase*)sym;
+Phrase_to_parse.fsm_phrase(t);
+if(O2_FSM_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_fsm_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_FSM_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in fsm-phrase"<<std::endl;
+return Failure;
+}
+
+/*:21*//*22:*/
+//line 620 "./o2externs.w"
+
+void output_cweb_macros_and_banner(
+NS_mpost_output::Cmpost_output*Fsm
+,std::ofstream&Ofile
+,yacco2::KCHARP Banner
+,const char*Date
+,string*Grammar_name
+,string*Name_space
+,int No_t){
+using namespace NS_mpost_output;
+KCHARP macros=
+"\\input%s \"supp-pdf\"\n"
+"\\input \"/usr/local/yacco2/diagrams+etc/o2mac.tex\"\n";
+int x= sprintf(Fsm->big_buf_,macros," ");
+Ofile.write(Fsm->big_buf_,x);
+KCHARP banner=
+"\\DOCtitle{%s}{%s}%\n"
+"{%s}{%i}\n";
+char fname[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Grammar_name->c_str(),fname);
+char ns_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Name_space->c_str(),ns_name);
+
+x= sprintf(Fsm->big_buf_,banner
+,Banner
+,fname,ns_name,No_t);
+Ofile.write(Fsm->big_buf_,x);
+}
+
+/*:22*//*23:*/
+//line 690 "./o2externs.w"
+
+bool
+process_parallel_parser_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_parallel_parser&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_parallel_parser_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cparallel_parser_phrase pparser;
+Parser p1(pparser,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_parallel_parser_phrase* t = (T_parallel_parser_phrase*)sym;
+Phrase_to_parse.parallel_parser_phrase(t);
+if(O2_PP_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_pp_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_PP_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in parallel-parser-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:23*//*24:*/
+//line 753 "./o2externs.w"
+
+bool
+process_T_enum_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_enumeration&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_T_enum_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+CT_enum_phrase enum_ph;
+Parser p1(enum_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_enum_phrase* t = (T_enum_phrase*)sym;
+Phrase_to_parse.enum_phrase(t);
+if(O2_T_ENUM_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_T_enum_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_T_ENUM_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in t-enum-phrase"<<std::endl;
+return Failure;
+}
+
+/*:24*//*25:*/
+//line 816 "./o2externs.w"
+
+bool
+process_error_symbols_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_error_symbols&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_err_symbols_ph;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cerr_symbols_ph err_ph;
+Parser p1(err_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_error_symbols_phrase* t = (T_error_symbols_phrase*)sym;
+Phrase_to_parse.error_symbols_phrase(t);
+if(O2_ERROR_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_error_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_ERROR_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in error-symbols-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:25*//*26:*/
+//line 878 "./o2externs.w"
+
+bool
+process_rc_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_raw_characters&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_rc_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Crc_phrase rc_ph;
+Parser p1(rc_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_rc_phrase* t = (T_rc_phrase*)sym;
+Phrase_to_parse.rc_phrase(t);
+if(O2_RC_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_rc_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_RC_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in rc-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:26*//*27:*/
+//line 940 "./o2externs.w"
+
+bool
+process_lr1_k_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_lr1_constant_symbols&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_lr1_k_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Clr1_k_phrase lr_ph;
+Parser p1(lr_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_lr1_k_phrase* t = (T_lr1_k_phrase*)sym;
+Phrase_to_parse.lr1_k_phrase(t);
+if(O2_LRK_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_lrk_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_LRK_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in lr1-k-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:27*//*28:*/
+//line 1004 "./o2externs.w"
+
+bool
+process_terminals_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_terminals&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_terminals_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Cterminals_phrase term_ph;
+Parser p1(term_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_terminals_phrase* t = (T_terminals_phrase*)sym;
+Phrase_to_parse.terminals_phrase(t);
+if(O2_T_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_T_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_T_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+return Success;
+}
+error_exit:
+lrclog<<"error in terminals-phrase"<<std::endl;
+return Failure;
+}
+
+
+/*:28*//*32:*/
+//line 1176 "./o2externs.w"
+
+bool
+process_rules_phrase
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_rules&Phrase_to_parse
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+/*30:*/
+//line 1143 "./o2externs.w"
+
+lrclog<<"Enumerate T alphabet"<<endl;
+using namespace NS_enumerate_T_alphabet;
+Cenumerate_T_alphabet enum_syms_fsm;
+Parser enum_syms(enum_syms_fsm,0,0,0,Calling_parser.error_queue(),0,0);
+enum_syms.parse();
+if(Calling_parser.error_queue()->empty()!=true)return Failure;
+
+/*:30*/
+//line 1184 "./o2externs.w"
+
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+
+using namespace NS_rules_phrase;
+TOKEN_GAGGLE op1;
+yacco2::INT start_pos= Calling_parser.current_token_pos__;
+token_container_type*ip1= Calling_parser.token_supplier();
+TOKEN_GAGGLE*er1= (TOKEN_GAGGLE*)Calling_parser.error_queue();
+Crules_phrase rule_ph;
+Parser p1(rule_ph,ip1,&op1,start_pos,er1);
+p1.parse();
+if(er1->empty()==YES){
+*Cont_pos= p1.current_token_pos__;
+*Cont_tok= p1.current_token();
+TOKEN_GAGGLE_ITER i= op1.begin();
+CAbs_lr1_sym*sym= *i;
+T_rules_phrase* t = (T_rules_phrase*)sym;
+Phrase_to_parse.rules_phrase(t);
+if(O2_RULES_PHASE!=0){
+CAbs_lr1_sym*sym= new Err_already_processed_rule_phase;
+sym->set_rc(Phrase_to_parse);
+p1.add_token_to_error_queue(*sym);
+goto error_exit;
+}
+O2_RULES_PHASE= t;
+AST*gt= t->phrase_tree();
+BUILD_GRAMMAR_TREE(*gt);
+/*31:*/
+//line 1162 "./o2externs.w"
+
+lrclog<<"Enumerate Rule alphabet"<<endl;
+int Rules_enum= START_OF_RULES_ENUM;
+RULE_DEFS_TBL_ITER_type ri= t->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type rie= t->crt_order()->end();
+int rule_no(0);
+for(;ri!=rie;++ri,++Rules_enum){
+rule_def*rd= *ri;
+++rule_no;
+rd->enum_id(Rules_enum);
+rd->rule_no(rule_no);
+}
+
+/*:31*/
+//line 1212 "./o2externs.w"
+
+return Success;
+}
+error_exit:
+lrclog<<"error in rules-phrase"<<std::endl;
+return Failure;
+}
+
+/*:32*//*34:*/
+//line 1237 "./o2externs.w"
+
+extern void
+YACCO2_PARSE_CMD_LINE
+(yacco2::CHAR&T_sw,yacco2::CHAR&ERR_sw
+,yacco2::CHAR&PRT_sw
+,std::string&Grammar_to_compile
+,yacco2::TOKEN_GAGGLE&Error_queue)
+{
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+tok_can<std::ifstream> Cmd1_tokens(Yacco2_holding_file);
+if(Cmd1_tokens.file_ok()==NO){
+yacco2::Delete_tokens(Cmd1_tokens.container());
+CAbs_lr1_sym*sym= new Err_bad_filename(Yacco2_holding_file);
+sym->set_external_file_id(1);
+sym->set_line_no(1);
+sym->set_pos_in_line(1);
+Error_queue.push_back(*sym);
+return;
+}
+
+using namespace NS_o2_lcl_opts;
+TOKEN_GAGGLE lcl_options_tokens;
+Co2_lcl_opts opts_fsm;
+Parser options(opts_fsm,&Cmd1_tokens,&lcl_options_tokens,0,&Error_queue,0,0);
+options.parse();
+yacco2::Delete_tokens(Cmd1_tokens.container());
+if(Error_queue.empty()!=YES)return;
+T_sw= opts_fsm.t_sw_;ERR_sw= opts_fsm.err_sw_;
+PRT_sw= opts_fsm.prt_sw_;
+Grammar_to_compile+= opts_fsm.file_to_compile_;
+}
+
+/*:34*//*35:*/
+//line 1290 "./o2externs.w"
+
+extern void
+BUILD_GRAMMAR_TREE(yacco2::AST&Item)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+CAbs_lr1_sym*sym= AST::content(Item);
+static AST*cur_node(0);
+static AST*holding_kcweb(0);
+static AST*end_holding_kcweb(0);
+static bool rules_phrase_seen(false);
+if(sym->enumerated_id__==T_Enum::T_T_cweb_marker_){
+if(rules_phrase_seen==true){
+AST::join_sts(*cur_node,Item);
+cur_node= &Item;
+return;
+}
+if(holding_kcweb==0){
+holding_kcweb= &Item;
+}else{
+if(end_holding_kcweb==0){
+end_holding_kcweb= &Item;
+AST::join_sts(*holding_kcweb,*end_holding_kcweb);
+}else{
+AST::join_sts(*end_holding_kcweb,Item);
+end_holding_kcweb= &Item;
+}
+}
+return;
+}
+if(cur_node==0){
+CAbs_lr1_sym*gp= new T_grammar_phrase();
+gp->set_line_no_and_pos_in_line(*sym);
+gp->set_external_file_id(sym->tok_co_ords__.external_file_id__);
+GRAMMAR_TREE= new AST(*gp);
+AST::crt_tree_of_1son(*GRAMMAR_TREE,Item);
+cur_node= &Item;
+}else{
+AST::join_sts(*cur_node,Item);
+cur_node= &Item;
+}
+if(sym->enumerated_id__==T_Enum::T_T_rules_phrase_){
+rules_phrase_seen= true;
+}
+/*36:*/
+//line 1343 "./o2externs.w"
+
+if(holding_kcweb==0)return;
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest element_walk(Item,&just_walk_functr);
+tok_can<AST*> phrase_can(element_walk);
+using namespace NS_cweb_put_k_into_ph;
+Ccweb_put_k_into_ph cweb_k_fsm;
+cweb_k_fsm.initialize(holding_kcweb,&rules_phrase_seen);
+Parser cweb_k(cweb_k_fsm,&phrase_can,0);
+cweb_k.parse();
+holding_kcweb= 0;
+end_holding_kcweb= 0;
+
+/*:36*/
+//line 1335 "./o2externs.w"
+
+}
+
+/*:35*//*37:*/
+//line 1381 "./o2externs.w"
+
+void load_kw_into_tbl(yacco2::CAbs_lr1_sym*Kw){
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+const char*kwkey= Kw->id__;
+if(*kwkey=='#')++kwkey;
+kw_in_stbl*kw= new kw_in_stbl(Kw);
+add_sym_to_stbl(report_card,*kwkey,*kw,table_entry::defed,table_entry::keyword);
+kw->stbl_idx(report_card.pos_);
+}
+
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL()
+{
+using namespace yacco2_stbl;
+load_kw_into_tbl(new T_raw_characters);
+load_kw_into_tbl(new T_lr1_constant_symbols);
+load_kw_into_tbl(new T_error_symbols);
+load_kw_into_tbl(new T_eocode);
+load_kw_into_tbl(new T_AD);
+load_kw_into_tbl(new T_AB);
+load_kw_into_tbl(new T_parallel_la_boundary);
+load_kw_into_tbl(new T_arbitrator_code);
+load_kw_into_tbl(new T_parallel_parser);
+load_kw_into_tbl(new T_parallel_thread_function);
+load_kw_into_tbl(new T_parallel_control_monitor);
+load_kw_into_tbl(new T_fsm);
+load_kw_into_tbl(new T_fsm_id);
+load_kw_into_tbl(new T_fsm_filename);
+load_kw_into_tbl(new T_fsm_namespace);
+load_kw_into_tbl(new T_fsm_class);
+load_kw_into_tbl(new T_fsm_version);
+load_kw_into_tbl(new T_fsm_date);
+load_kw_into_tbl(new T_fsm_debug);
+load_kw_into_tbl(new T_fsm_comments);
+load_kw_into_tbl(new T_terminals);
+load_kw_into_tbl(new T_enumeration);
+load_kw_into_tbl(new T_file_name);
+load_kw_into_tbl(new T_name_space);
+load_kw_into_tbl(new T_sym_class);
+load_kw_into_tbl(new T_rules);
+load_kw_into_tbl(new T_lhs);
+load_kw_into_tbl(new T_user_declaration);
+load_kw_into_tbl(new T_user_prefix_declaration);
+load_kw_into_tbl(new T_user_suffix_declaration);
+load_kw_into_tbl(new T_constructor);
+load_kw_into_tbl(new T_destructor);
+load_kw_into_tbl(new T_op);
+load_kw_into_tbl(new T_failed);
+load_kw_into_tbl(new T_user_implementation);
+load_kw_into_tbl(new T_user_imp_tbl);
+load_kw_into_tbl(new T_user_imp_sym);
+load_kw_into_tbl(new T_constant_defs);
+load_kw_into_tbl(new T_terminals_refs);
+load_kw_into_tbl(new T_terminals_sufx);
+load_kw_into_tbl(new T_lrk_sufx);
+load_kw_into_tbl(new T_NULL);
+}
+
+/*:37*//*38:*/
+//line 1445 "./o2externs.w"
+
+extern void PRINT_RULES_TREE_STRUCTURE(AST*Node)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+if(Node==0)return;
+CAbs_lr1_sym*sym= AST::content(*Node);
+if(sym==0){
+yacco2::lrclog<<" SYMBOL IN AST CONTENT NULL"
+<<" Node*: "<<Node<<endl;
+return;
+}
+yacco2::lrclog<<sym->id__<<' ';
+
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_T_:{
+refered_T* sym1 = (refered_T*)sym;
+T_in_stbl*T= sym1->t_in_stbl();
+yacco2::lrclog<<T->t_def()->t_name()->c_str();
+break;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* sym1 = (refered_rule*)sym;
+rule_in_stbl*R= sym1->Rule_in_stbl();
+yacco2::lrclog<<R->r_def()->rule_name()->c_str();
+break;
+}
+case T_Enum::T_T_identifier_:{
+T_identifier* sym1 = (T_identifier*)sym;
+yacco2::lrclog<<sym1->identifier()->c_str();
+break;
+}
+case T_Enum::T_rule_def_:{
+rule_def* sym1 = (rule_def*)sym;
+yacco2::lrclog<<sym1->rule_name()->c_str();
+yacco2::lrclog<<" epsilon: ";
+if(sym1->epsilon()==true){
+yacco2::lrclog<<" Y ";
+}else{
+yacco2::lrclog<<" N ";
+}
+break;
+}
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* sym1 = (T_terminal_def*)sym;
+yacco2::lrclog<<sym1->t_name()->c_str();
+break;
+}
+case T_Enum::T_T_subrule_def_:{
+T_subrule_def* sym1 = (T_subrule_def*)sym;
+yacco2::lrclog<<" epsilon: ";
+if(sym1->epsilon()==true){
+yacco2::lrclog<<" Y ";
+}else{
+yacco2::lrclog<<" N ";
+}
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+break;
+}
+case T_Enum::T_T_NULL_:{
+break;
+}
+case T_Enum::T_T_2colon_:{
+break;
+}
+
+default:{
+yacco2::lrclog<<sym->id__;
+}
+}
+
+yacco2::lrclog<<" file# "<<sym->tok_co_ords__.external_file_id__
+<<':'<<sym->tok_co_ords__.rc_pos__<<':';
+yacco2::lrclog<<" line# "<<sym->tok_co_ords__.line_no__
+<<':'<<sym->tok_co_ords__.pos_in_line__<<':';
+yacco2::lrclog<<" sym*: "<<sym<<' ';
+yacco2::lrclog<<endl;
+}
+
+/*:38*//*39:*/
+//line 1529 "./o2externs.w"
+
+extern void WRT_CWEB_MARKER(std::ofstream*Wfile,yacco2::AST*Cweb_marker){
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+INT_SET_type filter;
+filter.insert(T_Enum::T_T_cweb_comment_);
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest rule_walk(*Cweb_marker,&just_walk_functr,&filter,ACCEPT_FILTER);
+tok_can<AST*> comments_can(rule_walk);
+for(int x(0);comments_can[x]!=yacco2::PTR_LR1_eog__;++x){
+T_cweb_comment*k= (T_cweb_comment*)comments_can[x];
+(*Wfile)<<k->comment_data()->c_str()<<endl;
+}
+}
+
+/*:39*//*40:*/
+//line 1552 "./o2externs.w"
+
+extern void PRINT_GRAMMAR_TREE(AST*Node)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+if(Node==0)return;
+CAbs_lr1_sym*sym= AST::content(*Node);
+if(sym==0){
+yacco2::lrclog<<" SYMBOL IN AST CONTENT NULL"
+<<" Node*: "<<Node
+<<" lt*: "<<Node->lt_<<" rt*: "<<Node->rt_
+<<std::endl;
+return;
+}
+yacco2::lrclog<<sym->id__<<' ';
+
+switch(sym->enumerated_id__){
+case T_Enum::T_T_cweb_comment_:{
+T_cweb_comment* sym1 = (T_cweb_comment*)sym;
+yacco2::lrclog<<sym1->comment_data()->c_str();
+break;
+}
+}
+
+yacco2::lrclog<<" file# "<<sym->tok_co_ords__.external_file_id__
+<<':'<<sym->tok_co_ords__.rc_pos__<<':';
+yacco2::lrclog<<" line# "<<sym->tok_co_ords__.line_no__
+<<':'<<sym->tok_co_ords__.pos_in_line__<<':';
+yacco2::lrclog<<" sym*: "<<sym<<' ';
+yacco2::lrclog<<" Node*: "<<Node
+<<" lt*: "<<Node->lt_<<" rt*: "<<Node->rt_
+<<std::endl;
+}
+
+/*:40*//*41:*/
+//line 1632 "./o2externs.w"
+
+extern
+bool
+PROCESS_INCLUDE_FILE
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_file_inclusion&File_include
+,yacco2::token_container_type&T2)
+{
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_err_symbols;
+using namespace yacco2;
+std::string*ps_fn= File_include.file_name()->c_string();
+lrclog<<"Pre-process file: "<<ps_fn->c_str()<<std::endl;
+if(yacco2::STK_FILE_NOS__.size()>=Nested_file_cnt_limit){
+CAbs_lr1_sym*s= new Err_nested_files_exceeded(Nested_file_cnt_limit,*ps_fn);
+s->set_line_no_and_pos_in_line(File_include);
+s->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+Calling_parser.add_token_to_error_queue(*s);
+Calling_parser.abort_parse__;
+return Failure;
+}
+
+tok_can<std::ifstream> p1_tokens(ps_fn->c_str());
+if(p1_tokens.file_ok()==NO){
+yacco2::Delete_tokens(p1_tokens.container());
+CAbs_lr1_sym*sym= new NS_yacco2_err_symbols::Err_bad_filename(*ps_fn);
+sym->set_external_file_id(File_include.tok_co_ords__.external_file_id__);
+sym->set_line_no_and_pos_in_line(File_include);
+Calling_parser.add_token_to_error_queue(*sym);
+Calling_parser.abort_parse__;
+return Failure;
+}
+using namespace NS_pass3;
+Cpass3 p3_fsm;
+Parser pass3(p3_fsm,&p1_tokens,&T2,0,Calling_parser.error_queue(),Calling_parser.recycle_bin__);
+pass3.parse();
+yacco2::Delete_tokens(p1_tokens.container());
+
+if(pass3.error_queue()->empty()!=YES){
+Calling_parser.abort_parse__;
+return Failure;
+}
+
+yacco2::STK_FILE_NOS__.pop_back();
+return Success;
+}
+
+/*:41*//*42:*/
+//line 1714 "./o2externs.w"
+
+extern
+bool
+PROCESS_KEYWORD_FOR_SYNTAX_CODE
+(yacco2::Parser&Parser
+,yacco2::CAbs_lr1_sym*Keyword
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos)
+{
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+using namespace yacco2;
+switch(Keyword->enumerated_id__){
+case T_Enum::T_T_fsm_:{
+T_fsm* fsm = (T_fsm*)Keyword;
+return process_fsm_phrase(Parser,*fsm,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_parallel_parser_:{
+T_parallel_parser* pparser = (T_parallel_parser*)Keyword;
+return process_parallel_parser_phrase(Parser,*pparser,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_enumeration_:{
+T_enumeration* enumer = (T_enumeration*)Keyword;
+return process_T_enum_phrase(Parser,*enumer,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_error_symbols_:{
+T_error_symbols* err = (T_error_symbols*)Keyword;
+return process_error_symbols_phrase(Parser,*err,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_raw_characters_:{
+T_raw_characters* rc = (T_raw_characters*)Keyword;
+return process_rc_phrase(Parser,*rc,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_lr1_constant_symbols_:{
+T_lr1_constant_symbols* lr = (T_lr1_constant_symbols*)Keyword;
+return process_lr1_k_phrase(Parser,*lr,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_terminals_:{
+T_terminals* term = (T_terminals*)Keyword;
+return process_terminals_phrase(Parser,*term,Cont_tok,Cont_pos);
+}
+case T_Enum::T_T_rules_:{
+T_rules* rule = (T_rules*)Keyword;
+return process_rules_phrase(Parser,*rule,Cont_tok,Cont_pos);
+}
+default:{
+CAbs_lr1_sym*sym= new Err_not_kw_defining_grammar_construct;
+sym->set_rc(*Keyword);
+Parser.add_token_to_error_queue(*sym);
+return Failure;
+}
+}
+return Success;
+}
+
+/*:42*//*44:*/
+//line 1786 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_LOAD_XLATE_CHRS
+(NS_mpost_output::Cmpost_output*Fsm)
+{
+Fsm->xlated_names_[T_Enum::T_raw_exclam_]= "exclamation mark";
+Fsm->xlated_names_[T_Enum::T_raw_dbl_quote_]= "dbl quote";
+Fsm->xlated_names_[T_Enum::T_raw_no_sign_]= "no sign";
+Fsm->xlated_names_[T_Enum::T_raw_dollar_sign_]= "dollar sign";
+Fsm->xlated_names_[T_Enum::T_raw_percent_]= "percent";
+Fsm->xlated_names_[T_Enum::T_raw_ampersign_]= "ampersand";
+Fsm->xlated_names_[T_Enum::T_raw_right_quote_]= "rt quote";
+Fsm->xlated_names_[T_Enum::T_raw_open_bracket_]= "open bracket";
+Fsm->xlated_names_[T_Enum::T_raw_close_bracket_]= "close bracket";
+Fsm->xlated_names_[T_Enum::T_raw_asteric_]= "asterisk";
+Fsm->xlated_names_[T_Enum::T_raw_plus_]= "plus";
+Fsm->xlated_names_[T_Enum::T_raw_comma_]= "comma";
+Fsm->xlated_names_[T_Enum::T_raw_minus_]= "minus";
+Fsm->xlated_names_[T_Enum::T_raw_period_]= "period";
+Fsm->xlated_names_[T_Enum::T_raw_slash_]= "slash";
+Fsm->xlated_names_[T_Enum::T_raw_colon_]= "colon";
+Fsm->xlated_names_[T_Enum::T_raw_semi_colon_]= "semi colon";
+Fsm->xlated_names_[T_Enum::T_raw_less_than_]= "less than";
+Fsm->xlated_names_[T_Enum::T_raw_eq_]= "eq";
+Fsm->xlated_names_[T_Enum::T_raw_gt_than_]= "gt than";
+Fsm->xlated_names_[T_Enum::T_raw_question_mark_]= "question mark";
+Fsm->xlated_names_[T_Enum::T_raw_at_sign_]= "at sign";
+Fsm->xlated_names_[T_Enum::T_raw_open_sq_bracket_]= "open sq bracket";
+Fsm->xlated_names_[T_Enum::T_raw_back_slash_]= "back slash";
+Fsm->xlated_names_[T_Enum::T_raw_close_sq_bracket_]= "close sq bracket";
+Fsm->xlated_names_[T_Enum::T_raw_up_arrow_]= "up arrow";
+Fsm->xlated_names_[T_Enum::T_raw_under_score_]= "under score";
+Fsm->xlated_names_[T_Enum::T_raw_left_quote_]= "left quote";
+Fsm->xlated_names_[T_Enum::T_raw_open_brace_]= "open brace";
+Fsm->xlated_names_[T_Enum::T_raw_vertical_line_]= "vertical line";
+Fsm->xlated_names_[T_Enum::T_raw_close_brace_]= "close brace";
+Fsm->xlated_names_[T_Enum::T_raw_tilde_]= "tilde";
+Fsm->xlated_names_[T_Enum::T_raw_del_]= "del";
+Fsm->xlated_names_[T_Enum::T_LR1_invisible_shift_operator_]= "\\invisibleshift";
+Fsm->xlated_names_[T_Enum::T_LR1_all_shift_operator_]= "\\allshift";
+Fsm->xlated_names_[T_Enum::T_LR1_reduce_operator_]= "\\reduceoperator";
+Fsm->xlated_names_[T_Enum::T_LR1_fset_transience_operator_]= "\\transienceoperator";
+Fsm->xlated_names_[T_Enum::T_LR1_questionable_shift_operator_]= "\\questionableoperator";
+}
+
+/*:44*//*48:*/
+//line 1889 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_EMIT_PREFIX_CODE
+(NS_mpost_output::Cmpost_output*Fsm)
+{
+/*46:*/
+//line 1839 "./o2externs.w"
+
+
+KCHARP mp_prefix_file= "% file: ";
+Fsm->omp_file_<<mp_prefix_file;
+KCHARP mp_prefix_file_value=
+"%s - grammar railroad diagrams for mpost program\n";
+int x= sprintf(Fsm->big_buf_,mp_prefix_file_value,Fsm->mp_filename_.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+
+KCHARP mp_prefix_date= "% date: ";
+Fsm->omp_file_<<mp_prefix_date;
+KCHARP mp_prefix_date_value=
+"%s\n"
+"input \"/usr/local/yacco2/diagrams+etc/o2diag.mp\"\n"
+"numeric no_of_rules,Box_solid,Box_dotted,Circle_solid,Circle_dotted;\n"
+"Box_solid:=1;Box_dotted:=2;Circle_solid:=3;Circle_dotted:=4;\n"
+"string rule_names[].literal;\n"
+"string rule_names[].vname;\n"
+"numeric rule_s_no_rhs[];\n"
+"string rhs_elems[][][].literal;\n"
+"string rhs_elems[][][].vname;\n"
+"numeric rhs_elems[][][].Drw_how;\n"
+"numeric rule_s_subrule_no_elems[][];\n";
+x= sprintf(Fsm->big_buf_,mp_prefix_date_value,Fsm->gened_date_time_.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+
+
+/*:46*/
+//line 1896 "./o2externs.w"
+
+/*47:*/
+//line 1868 "./o2externs.w"
+
+KCHARP w_prefix_file= "% file: ";
+Fsm->ow_file_<<w_prefix_file;
+KCHARP w_prefix_filename_value= "%s - cweb grammar\n";
+x= sprintf(Fsm->big_buf_,w_prefix_filename_value,Fsm->w_filename_.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+KCHARP w_prefix_date= "%Date: ";
+Fsm->ow_file_<<w_prefix_date;
+KCHARP w_prefix_date_value= "%s\n";
+x= sprintf(Fsm->big_buf_,w_prefix_date_value,Fsm->gened_date_time_.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+
+KCHARP macros=
+"\\input%s \"supp-pdf\"\n"
+"\\input \"/usr/local/yacco2/diagrams+etc/o2mac.tex\"\n";
+x= sprintf(Fsm->big_buf_,macros," ");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+
+/*:47*/
+//line 1897 "./o2externs.w"
+
+}
+
+
+/*:48*//*49:*/
+//line 1910 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_dimension_name
+(Cmpost_output*Fsm,std::string&Mp_obj_name,int Dimension){
+int R,Q;
+R= Dimension%27;
+Q= Dimension/27;
+++Q;
+Mp_obj_name+= Fsm->mp_dimension_[Q];
+Mp_obj_name+= Fsm->mp_dimension_[R];
+}
+
+/*:49*//*50:*/
+//line 1926 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_calc_mp_obj_name
+(Cmpost_output*Fsm,std::string&Mp_obj_name,int Elem_no){
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->rule_no_);
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Fsm->subrule_no_);
+Fsm->MPOST_CWEB_gen_dimension_name(Fsm,Mp_obj_name,Elem_no);
+}
+
+/*:50*//*51:*/
+//line 1943 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_mp_rhs_elem
+(Cmpost_output*Fsm,std::string&Elem_name,std::string&Drw_how){
+std::string mp_xlate_name;
+prescan_mpname_for_cweb(Elem_name,mp_xlate_name);
+std::string mp_obj_name;
+KCHARP mp_subrule_elems_literal= "rhs_elems[%i][%i][%i].literal := \"%s\";";
+int x= sprintf(Fsm->big_buf_,mp_subrule_elems_literal
+,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,mp_xlate_name.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+KCHARP mp_subrule_elems_RorT= "rhs_elems[%i][%i][%i].Drw_how := %s;";
+x= sprintf(Fsm->big_buf_,mp_subrule_elems_RorT,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,Drw_how.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+KCHARP mp_subrule_elems_vname= "rhs_elems[%i][%i][%i].vname := \"%s\";";
+Fsm->MPOST_CWEB_calc_mp_obj_name(Fsm,mp_obj_name,Fsm->elem_no_);
+x= sprintf(Fsm->big_buf_,mp_subrule_elems_vname,Fsm->rule_no_,Fsm->subrule_no_,Fsm->elem_no_
+,mp_obj_name.c_str());
+Fsm->omp_file_.write(Fsm->big_buf_,x);
+Fsm->omp_file_<<endl;
+}
+
+/*:51*//*55:*/
+//line 2065 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_gen_sr_elem_xrefs
+(Cmpost_output*Fsm,AST*Subrule_tree){
+/*53:*/
+//line 1984 "./o2externs.w"
+
+using namespace yacco2;
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_terminals;
+KCHARP xref= "@.%s@>\n";
+INT_SET_type filter;
+filter.insert(T_Enum::T_refered_T_);
+filter.insert(T_Enum::T_refered_rule_);
+filter.insert(T_Enum::T_T_eosubrule_);
+filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+filter.insert(T_Enum::T_LR1_parallel_operator_);
+filter.insert(T_Enum::T_LR1_fset_transience_operator_);
+
+tok_can_ast_functor just_walk_functr;
+ast_prefix_1forest element_walk(*Subrule_tree,&just_walk_functr,&filter,ACCEPT_FILTER);
+tok_can<AST*> elements_can(element_walk);
+
+
+/*:53*/
+//line 2071 "./o2externs.w"
+
+int elem_cnt(0);
+string th_name;
+/*54:*/
+//line 2004 "./o2externs.w"
+
+for(int x(0);elements_can[x]!=yacco2::PTR_LR1_eog__;++x){
+++elem_cnt;
+CAbs_lr1_sym*sym= elements_can[x];
+switch(sym->enumerated_id__){
+case T_Enum::T_LR1_parallel_operator_:{
+int x= sprintf(Fsm->big_buf_,xref,"\\paralleloperator");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+int x= sprintf(Fsm->big_buf_,xref,"\\transienceoperator");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)sym;
+Fsm->MPOST_CWEB_xref_refered_T(Fsm,rt);
+break;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)sym;
+Fsm->MPOST_CWEB_xref_refered_rule(Fsm,rr);
+break;
+}
+case T_Enum::T_T_eosubrule_:{
+if(elem_cnt==1){
+int x= sprintf(Fsm->big_buf_,xref,"\\emptyrule");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)sym;
+if(id->ns()!=0){
+th_name+= id->ns()->identifier()->c_str();
+th_name+= "::";
+}
+th_name+= id->called_thread_name()->identifier()->c_str();
+string name_with_bkslash;
+int len= th_name.length();
+for(int x= 0;x<len;++x){
+char c= th_name[x];
+if(c=='_'){
+name_with_bkslash+= '\\';
+}
+name_with_bkslash+= c;
+}
+int x= sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+int x= sprintf(Fsm->big_buf_,xref,"NULL");
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+}
+}
+
+/*:54*/
+//line 2074 "./o2externs.w"
+
+}
+
+/*:55*//*56:*/
+//line 2078 "./o2externs.w"
+
+extern int
+MPOST_CWEB_xlated_symbol(AST*Sym_t,char*Xlated_sym){
+CAbs_lr1_sym*Sym= AST::content(*Sym_t);
+int Enum= Sym->enumerated_id();
+Xlated_sym[0]= (char)0;
+const char*xsym= "%s";
+switch(Enum){
+case T_Enum::T_LR1_parallel_operator_:{
+sprintf(Xlated_sym,xsym,"\\paralleloperator");
+return 1;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+sprintf(Xlated_sym,xsym,"\\transienceoperator");
+return 1;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)Sym;
+XLATE_SYMBOLS_FOR_cweave(rt->its_t_def()->t_name()->c_str(),Xlated_sym);
+return rt->element_pos();
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)Sym;
+XLATE_SYMBOLS_FOR_cweave(rr->its_rule_def()->rule_name()->c_str(),Xlated_sym);
+return rr->element_pos();
+}
+case T_Enum::T_T_eosubrule_:{
+T_eosubrule* eos = (T_eosubrule*)Sym;
+AST*prev_t= Sym_t->pr_;
+if(eos->element_pos()==1){
+sprintf(Xlated_sym,xsym,"\\emptyrule");
+return eos->element_pos();
+}else{
+sprintf(Xlated_sym,xsym,"");
+}
+CAbs_lr1_sym*sym= AST::content(*prev_t);
+switch(sym->enumerated_id()){
+case T_Enum::T_T_called_thread_eosubrule_:{
+return eos->element_pos()-1;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+return eos->element_pos()-1;
+}
+default:{
+return eos->element_pos();
+}
+}
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+T_called_thread_eosubrule* id = (T_called_thread_eosubrule*)Sym;
+string th_name;
+if(id->ns()!=0){
+th_name+= id->ns()->identifier()->c_str();
+th_name+= "::";
+}
+th_name+= id->called_thread_name()->identifier()->c_str();
+XLATE_SYMBOLS_FOR_cweave(th_name.c_str(),Xlated_sym);
+return id->element_pos();
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+T_null_call_thread_eosubrule* id = (T_null_call_thread_eosubrule*)Sym;
+sprintf(Xlated_sym,xsym,"NULL");
+return id->element_pos();
+}
+}
+return 0;
+}
+/*:56*//*57:*/
+//line 2155 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_crt_rhs_sym_str
+(state_element*se,std::string*Xlated_str){
+char a[BUFFER_SIZE];
+char cur_sym[Max_cweb_item_size];
+char nxtsym_1[Max_cweb_item_size];
+char nxtsym_2[Max_cweb_item_size];
+KCHARP thread_expr_string_template=
+"{%s} {%s} {%s}";
+KCHARP underline_symbol= "{$\\underline{%s}$} \n";
+KCHARP underline_symbol_wepsilon= "{$\\underline{%s^{\\emptyrule}}$} \n";
+KCHARP not_underline_symbol= "{%s} \n";
+state_element*nxt1_se= 0;
+state_element*nxt2_se= 0;
+state_element*nxt3_se= 0;
+int pp= MPOST_CWEB_xlated_symbol(se->sr_element_,cur_sym);
+
+if(
+(se->its_enum_id_==T_Enum::T_LR1_parallel_operator_)
+||
+(se->its_enum_id_==T_Enum::T_LR1_fset_transience_operator_)
+){
+nxt1_se= se->next_state_element_;
+AST*nxt2_se= se->sr_element_->rt_->rt_;
+pp= MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+pp= MPOST_CWEB_xlated_symbol(nxt2_se,nxtsym_2);
+sprintf(a,thread_expr_string_template,cur_sym,nxtsym_1,nxtsym_2);
+(*Xlated_str)+= a;
+return;
+}
+sprintf(a,not_underline_symbol,cur_sym);
+(*Xlated_str)+= a;
+if(se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+return;
+}
+
+nxt1_se= se->next_state_element_;
+if(nxt1_se==0)return;
+if(nxt1_se->its_enum_id_==T_Enum::T_T_eosubrule_)return;
+pp= MPOST_CWEB_xlated_symbol(nxt1_se->sr_element_,nxtsym_1);
+if(nxt1_se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+sprintf(a,underline_symbol,nxtsym_1);
+}else{
+rule_def*rd= (rule_def*)nxt1_se->sr_def_element_;
+if(rd->epsilon()==YES){
+sprintf(a,underline_symbol_wepsilon,nxtsym_1);
+nxt2_se= nxt1_se->next_state_element_;
+}else{
+sprintf(a,underline_symbol,nxtsym_1);
+nxt2_se= 0;
+}
+}
+(*Xlated_str)+= a;
+
+if(nxt2_se!=0){
+if(nxt2_se->its_enum_id_==T_Enum::T_T_eosubrule_)return;
+pp= MPOST_CWEB_xlated_symbol(nxt2_se->sr_element_,nxtsym_2);
+if(nxt2_se->sr_def_element_->enumerated_id__!=T_Enum::T_rule_def_){
+sprintf(a,underline_symbol,nxtsym_2);
+}else{
+rule_def*rd= (rule_def*)nxt2_se->sr_def_element_;
+if(rd->epsilon()==YES){
+sprintf(a,underline_symbol_wepsilon,nxtsym_2);
+nxt3_se= nxt1_se->next_state_element_;
+if(nxt3_se->its_enum_id_==T_Enum::T_T_eosubrule_){
+nxt3_se= 0;
+}
+}else{
+sprintf(a,underline_symbol,nxtsym_2);
+nxt3_se= 0;
+}
+}
+(*Xlated_str)+= a;
+}
+if(nxt3_se!=0){
+sprintf(a,not_underline_symbol,"...");
+(*Xlated_str)+= a;
+}
+}
+
+/*:57*//*58:*/
+//line 2241 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_woutput_sr_sdcode
+(Cmpost_output*Fsm,T_subrule_def*Subrule_def){
+SDC_MAP_type*sr_dirs= Subrule_def->subrule_directives();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+using namespace NS_cweave_sdc;
+Ccweave_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_file_,Fsm->subrule_def_,Fsm->subrule_no_);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+
+/*:58*//*62:*/
+//line 2296 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_fsm
+(Cmpost_output*Fsm,T_fsm_phrase*Fsm_phrase){
+KCHARP banner=
+"\\GRAMMARtitle{%s}\n{%s}{%s}%\n"
+"{%s}{%s}%\n"
+"{%s}\n";
+
+KCHARP banner_of_thread=
+"\\THREADtitle{%s}%\n"
+"{%s}{%s}%\n"
+"{%s}{%s}{%s}{%i}%\n"
+"{%s}\n";
+char fname[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm->grammar_filename_prefix_.c_str(),fname);
+char ns_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->namespace_id()->identifier()->c_str(),ns_name);
+char fsm_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->fsm_id()->c_string()->c_str(),fsm_name);
+char k_cweb[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(Fsm_phrase->comment()->c_string()->c_str(),k_cweb);
+
+if(O2_PP_PHASE!=0){
+T_parallel_parser_phrase*la_ph= O2_PP_PHASE;
+T_parallel_la_boundary*la= la_ph->la_bndry();
+
+char expr_prescan_cweb[Max_cweb_item_size];
+int x= sprintf(Fsm->big_buf_
+,banner_of_thread
+,fname
+,fsm_name
+,ns_name
+,Fsm_phrase->version()->c_string()->c_str()
+,Fsm_phrase->debug()->c_string()->c_str()
+,k_cweb
+,la->la_first_set()->size()
+
+,la->cweb_la_srce_expr()->c_str()
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+}else{
+int x= sprintf(Fsm->big_buf_
+,banner
+,fname
+,fsm_name
+,ns_name
+,Fsm_phrase->version()->c_string()->c_str()
+,Fsm_phrase->debug()->c_string()->c_str()
+,k_cweb
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+}
+
+if(Fsm_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_file_,Fsm_phrase->cweb_marker());
+}
+
+/*60:*/
+//line 2267 "./o2externs.w"
+
+char xa[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave
+(Fsm_phrase->fsm_class_phrase()->identifier()->identifier()->c_str()
+,xa);
+
+KCHARP fsm_class=
+"@*2 Fsm %s class.\n";
+int x= sprintf(Fsm->big_buf_
+,fsm_class
+,xa
+);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+Fsm->ow_file_<<endl;
+
+/*:60*/
+//line 2358 "./o2externs.w"
+
+/*61:*/
+//line 2283 "./o2externs.w"
+
+T_fsm_class_phrase*fcp= Fsm_phrase->fsm_class_phrase();
+SDC_MAP_type*sr_dirs= fcp->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+
+/*:61*/
+//line 2359 "./o2externs.w"
+
+
+using namespace NS_cweave_fsm_sdc;
+Ccweave_fsm_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_file_,Fsm_phrase);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+
+
+/*:62*//*70:*/
+//line 2488 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_T
+(Cmpost_output*Fsm,T_terminals_phrase*T_phrase){
+/*64:*/
+//line 2373 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_t_file_,"Terminal Vocabulary",Fsm->gened_date_time_.c_str()
+,T_phrase->filename_id()->identifier()
+,T_phrase->namespace_id()->identifier()
+,T_phrase->alphabet()->size());
+
+/*:64*/
+//line 2494 "./o2externs.w"
+
+if(T_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,T_phrase->cweb_marker());
+}
+
+/*67:*/
+//line 2429 "./o2externs.w"
+
+if(T_phrase->terminals_refs_code()!=0){
+KCHARP tref=
+"@*2 {\\bf Terminals-refs} directive.\\fbreak\n";
+Fsm->ow_t_file_<<tref;
+
+T_syntax_code*stc= T_phrase->terminals_refs_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+}
+KCHARP tref_code=
+"@<terminals-refs directive@>=\n"
+"%s"
+"\n";
+
+int x= sprintf(Fsm->big_buf_
+,tref_code
+,T_phrase->terminals_refs_code()->syntax_code()->c_str()
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+}
+
+/*:67*/
+//line 2499 "./o2externs.w"
+
+T_DEF_MAP_ITER_type a= T_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= T_phrase->alphabet()->end();
+char term_name[Max_cweb_item_size];
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*66:*/
+//line 2391 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+
+char name[Max_cweb_item_size];
+
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+
+const char*enum_name_for_format=
+"T\\_%s\\_";
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_name_for_format,class_name);
+
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,tdef->cweb_marker());
+}
+/*65:*/
+//line 2381 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+
+/*:65*/
+//line 2426 "./o2externs.w"
+
+
+/*:66*/
+//line 2505 "./o2externs.w"
+
+/*69:*/
+//line 2477 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2506 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+sdc_fsm.initialize(&Fsm->ow_t_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+/*68:*/
+//line 2453 "./o2externs.w"
+
+if(T_phrase->terminals_sufx_code()!=0){
+KCHARP tsuf=
+"@*1 {\\bf Terminals-sufx} directive.\\fbreak\n";
+Fsm->ow_t_file_<<tsuf;
+
+T_syntax_code*stc= T_phrase->terminals_sufx_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_t_file_,stc->cweb_marker());
+}
+KCHARP tsuf_code=
+"@<terminals-sufx directive@>=\n"
+"%s"
+"\n";
+
+int x= sprintf(Fsm->big_buf_
+,tsuf_code
+,T_phrase->terminals_sufx_code()->syntax_code()->c_str()
+);
+Fsm->ow_t_file_.write(Fsm->big_buf_,x);
+Fsm->ow_t_file_<<endl;
+}
+
+/*:68*/
+//line 2514 "./o2externs.w"
+
+Fsm->ow_t_file_<<"@** Index.\n";
+}
+
+/*:70*//*75:*/
+//line 2582 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Err
+(Cmpost_output*Fsm,T_error_symbols_phrase*Err_phrase){
+/*72:*/
+//line 2522 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_err_file_,"Error Vocabulary",Fsm->gened_date_time_.c_str()
+,Err_phrase->filename_id()->identifier()
+,Err_phrase->namespace_id()->identifier()
+,Err_phrase->alphabet()->size());
+
+/*:72*/
+//line 2588 "./o2externs.w"
+
+if(Err_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_err_file_,Err_phrase->cweb_marker());
+}
+
+T_DEF_MAP_ITER_type a= Err_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= Err_phrase->alphabet()->end();
+char term_name[Max_cweb_item_size];
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*74:*/
+//line 2546 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+char name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+const char*enum_name_for_format=
+"T\\_%s\\_";
+char enum_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),enum_name);
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_name_for_format,enum_name);
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+Fsm->ow_err_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_err_file_,tdef->cweb_marker());
+}
+/*73:*/
+//line 2530 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_err_file_.write(Fsm->big_buf_,x);
+
+/*:73*/
+//line 2579 "./o2externs.w"
+
+
+/*:74*/
+//line 2598 "./o2externs.w"
+
+/*69:*/
+//line 2477 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2599 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+sdc_fsm.initialize(&Fsm->ow_err_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+Fsm->ow_err_file_<<"@** Index.\n";
+}
+
+
+/*:75*//*81:*/
+//line 2727 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_Lrk
+(Cmpost_output*Fsm,T_lr1_k_phrase*Lrk_phrase){
+/*77:*/
+//line 2615 "./o2externs.w"
+
+output_cweb_macros_and_banner(
+Fsm,Fsm->ow_lrk_file_,"Lr K Vocabulary",Fsm->gened_date_time_.c_str()
+,Lrk_phrase->filename_id()->identifier()
+,Lrk_phrase->namespace_id()->identifier()
+,Lrk_phrase->alphabet()->size()
+);
+
+/*:77*/
+//line 2733 "./o2externs.w"
+
+if(Lrk_phrase->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,Lrk_phrase->cweb_marker());
+}
+char term_name[Max_cweb_item_size];
+char name[Max_cweb_item_size];
+
+T_DEF_MAP_ITER_type a= Lrk_phrase->alphabet()->begin();
+T_DEF_MAP_ITER_type ae= Lrk_phrase->alphabet()->end();
+for(;a!=ae;++a){
+T_terminal_def*tdef= a->second;
+/*79:*/
+//line 2638 "./o2externs.w"
+
+char ab[]= "Y";
+if(tdef->autoabort()==true)ab[0]= 'Y';
+else ab[0]= 'N';
+char ad[]= "Y";
+
+if(tdef->autodelete()==true)ad[0]= 'Y';
+else ad[0]= 'N';
+switch(tdef->enumerated_id__){
+case T_Enum::T_LR1_parallel_operator_:{
+strcpy(name,"\\paralleloperator");
+strcpy(term_name,"|parallel_operator|");
+break;
+}
+case T_Enum::T_LR1_all_shift_operator_:{
+strcpy(name,"\\allshift");
+strcpy(term_name,"|all_shift|");
+break;
+}
+case T_Enum::T_LR1_invisible_shift_operator_:{
+strcpy(name,"\\invisibleshift");
+strcpy(term_name,"|invisible_shift|");
+break;
+}
+case T_Enum::T_LR1_fset_transience_operator_:{
+strcpy(name,"\\transienceoperator");
+strcpy(term_name,"|transience_operator|");
+break;
+}
+case T_Enum::T_LR1_questionable_shift_operator_:{
+strcpy(name,"\\questionableoperator");
+strcpy(term_name,"|questionable_operator|");
+break;
+}
+default:{
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),name);
+XLATE_SYMBOLS_FOR_cweave(tdef->t_name()->c_str(),term_name);
+break;
+}
+}
+const char*enum_class_name_format= "T\\_%s\\_";
+char class_name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(tdef->classsym()->c_str(),class_name);
+char a[SMALL_BUFFER_4K];
+sprintf(a,enum_class_name_format,class_name);
+
+KCHARP t_entry= "@*2 {\\bf %s}.\\fbreak\n"
+"Enum: %s\n\\fbreak\n"
+"\\line{Class: %s \\hfil AB: %s \\hfil AD: %s}\n";
+int x= sprintf(Fsm->big_buf_
+,t_entry
+,name
+,a
+,class_name
+,ab
+,ad
+);
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+Fsm->ow_lrk_file_<<endl;
+if(tdef->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,tdef->cweb_marker());
+}
+/*78:*/
+//line 2624 "./o2externs.w"
+
+KCHARP rule_it=
+"\\fbreak%s\n"
+"\\hrule\n";
+x= sprintf(Fsm->big_buf_,rule_it," ");
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+
+/*:78*/
+//line 2700 "./o2externs.w"
+
+
+/*:79*/
+//line 2744 "./o2externs.w"
+
+/*69:*/
+//line 2477 "./o2externs.w"
+
+SDC_MAP_type*sr_dirs= tdef->directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+
+/*:69*/
+//line 2745 "./o2externs.w"
+
+using namespace NS_cweave_T_sdc;
+Ccweave_T_sdc sdc_fsm;
+sdc_fsm.initialize(&Fsm->ow_lrk_file_,term_name);
+Parser sdc_emit(sdc_fsm,&dirs_tokens,0);
+sdc_emit.parse();
+}
+/*80:*/
+//line 2703 "./o2externs.w"
+
+if(Lrk_phrase->lrk_sufx_code()!=0){
+KCHARP tsuf=
+"@*1 {\\bf lrk-sufx} directive.\\fbreak\n";
+Fsm->ow_lrk_file_<<tsuf;
+
+T_syntax_code*stc= Lrk_phrase->lrk_sufx_code();
+if(stc->cweb_marker()!=0){
+WRT_CWEB_MARKER(&Fsm->ow_lrk_file_,stc->cweb_marker());
+}
+KCHARP tsuf_code=
+"@<lrk-sufx directive@>=\n"
+"%s"
+"\n";
+int x= sprintf(Fsm->big_buf_
+,tsuf_code
+,Lrk_phrase->lrk_sufx_code()->syntax_code()->c_str()
+);
+Fsm->ow_lrk_file_.write(Fsm->big_buf_,x);
+Fsm->ow_lrk_file_<<endl;
+}
+
+
+/*:80*/
+//line 2752 "./o2externs.w"
+
+Fsm->ow_lrk_file_<<"@** Index.\n";
+}
+
+/*:81*//*82:*/
+//line 2759 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_wrt_rule_s_lhs_sdc
+(Cmpost_output*Fsm,rule_def*Rule_def){
+T_rule_lhs_phrase*rlp= Rule_def->rule_lhs();
+if(rlp==0)return;
+SDC_MAP_type*sr_dirs= rlp->lhs_directives_map();
+SDC_MAP_ITER_type i= sr_dirs->begin();
+SDC_MAP_ITER_type ie= sr_dirs->end();
+TOKEN_GAGGLE dirs_tokens;
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+T_parallel_monitor_phrase*ppm= Rule_def->parallel_mntr();
+if(ppm!=0){
+sr_dirs= ppm->mntr_directives_map();
+i= sr_dirs->begin();
+ie= sr_dirs->end();
+for(;i!=ie;++i){
+CAbs_lr1_sym*sym= i->second;
+dirs_tokens.push_back(*sym);
+}
+}
+using namespace NS_cweave_lhs_sdc;
+Ccweave_lhs_sdc lhs_sdc_fsm;
+lhs_sdc_fsm.initialize(&Fsm->ow_file_,Rule_def->rule_name()->c_str());
+Parser lhs_sdc_emit(lhs_sdc_fsm,&dirs_tokens,0);
+lhs_sdc_emit.parse();
+}
+
+/*:82*//*83:*/
+//line 2796 "./o2externs.w"
+
+bool
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_should_subrule_be_printed
+(Cmpost_output*Fsm,T_subrule_def*Subrule_def){
+if(Subrule_def->cweb_marker()!=0)return true;
+SDC_MAP_type*sr_dirs= Subrule_def->subrule_directives();
+if(sr_dirs->empty()==true)return false;
+return true;
+}
+/*:83*//*85:*/
+//line 2857 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_T
+(Cmpost_output*Fsm,refered_T*R_T){
+T_in_stbl*t= R_T->t_in_stbl();
+T_terminal_def*td= t->t_def();
+
+KCHARP xref= "@.%s@>\n";
+
+char name[Max_cweb_item_size];
+XLATE_SYMBOLS_FOR_cweave(td->t_name()->c_str(),name);
+/*84:*/
+//line 2809 "./o2externs.w"
+
+switch(td->classification()){
+case T_terminal_def::err:{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+break;
+}
+case T_terminal_def::rc:{
+break;
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_terminal_def::lrk:{
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+case T_terminal_def::t:{
+INT_STR_MAP_ITER_type i= Fsm->xlated_names_.find(td->enumerated_id__);
+if(i!=Fsm->xlated_names_.end()){
+int x= sprintf(Fsm->big_buf_,xref,i->second.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}else{
+int x= sprintf(Fsm->big_buf_,xref,name);
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+break;
+}
+}
+
+/*:84*/
+//line 2870 "./o2externs.w"
+
+}
+
+/*:85*//*86:*/
+//line 2876 "./o2externs.w"
+
+void
+NS_mpost_output::
+Cmpost_output::
+MPOST_CWEB_xref_refered_rule
+(Cmpost_output*Fsm,refered_rule*R_rule){
+rule_in_stbl*r= R_rule->Rule_in_stbl();
+rule_def*rd= r->r_def();
+KCHARP xref= "@.%s@>\n";
+string name_with_bkslash;
+int len= rd->rule_name()->length();
+for(int x= 0;x<len;++x){
+char c= (*rd->rule_name())[x];
+if(c=='_'){
+name_with_bkslash+= '\\';
+}
+name_with_bkslash+= c;
+}
+int x= sprintf(Fsm->big_buf_,xref,name_with_bkslash.c_str());
+Fsm->ow_file_.write(Fsm->big_buf_,x);
+}
+
+/*:86*//*93:*/
+//line 3049 "./o2externs.w"
+
+AST*elem_space[Max_no_subrules];
+void GEN_CALLED_THREADS_FS_OF_RULE(rule_def*Start_rule){
+using namespace NS_yacco2_T_enum;
+using namespace std;
+std::set<rule_def*> rules_in_elem_space;
+std::set<rule_def*> ::iterator i;
+INT_SET_type sr_filter;
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor just_walk_functr;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+int cc(0);
+int nc(-1);
+AST*cur_elem_t(0);
+CAbs_lr1_sym*cur_elem(0);
+/*89:*/
+//line 2973 "./o2externs.w"
+
+{
+AST*rtree= Start_rule->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2960 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2980 "./o2externs.w"
+
+}
+
+/*:89*/
+//line 3064 "./o2externs.w"
+
+while(cc<=nc){
+cur_elem_t= elem_space[cc];
+cur_elem= AST::content(*cur_elem_t);
+/*91:*/
+//line 3001 "./o2externs.w"
+
+switch(cur_elem->enumerated_id__){
+case T_Enum::T_T_eosubrule_:{
+++cc;
+continue;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)cur_elem;
+T_terminal_def*td= rt->its_t_def();
+if(td->enum_id()!=LR1_PARALLEL_OPERATOR){
+++cc;
+continue;
+}
+/*92:*/
+//line 3037 "./o2externs.w"
+
+AST*first_el_t= cur_elem_t;
+AST*third_el_t= AST::get_younger_sibling(*first_el_t,2);
+CAbs_lr1_sym*sym= AST::content(*third_el_t);
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule*ct= (T_called_thread_eosubrule*)sym;
+Start_rule->add_to_called_thread_first_set(ct);
+}
+
+/*:92*/
+//line 3014 "./o2externs.w"
+
+++cc;
+continue;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)cur_elem;
+rule_def*rdef= rr->its_rule_def();
+/*90:*/
+//line 2984 "./o2externs.w"
+
+{
+i= rules_in_elem_space.find(rdef);
+if(i==rules_in_elem_space.end()){
+rules_in_elem_space.insert(rdef);
+AST*rtree= rdef->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2960 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2994 "./o2externs.w"
+
+}
+}
+
+/*:90*/
+//line 3021 "./o2externs.w"
+
+if(rdef->epsilon()==YES){
+AST*et= AST::brother(*cur_elem_t);
+elem_space[cc]= et;
+continue;
+}else{
+++cc;
+continue;
+}
+}
+}
+/*:91*/
+//line 3068 "./o2externs.w"
+
+}
+}
+
+/*:93*//*98:*/
+//line 3150 "./o2externs.w"
+
+void GEN_FS_OF_RULE(rule_def*Rule_def){
+using namespace NS_yacco2_T_enum;
+using namespace std;
+std::set<rule_def*> rules_in_elem_space;
+std::set<rule_def*> ::iterator i;
+INT_SET_type sr_filter;
+sr_filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor just_walk_functr;
+
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+int cc(0);
+int nc(-1);
+AST*cur_elem_t(0);
+CAbs_lr1_sym*cur_elem(0);
+/*95:*/
+//line 3080 "./o2externs.w"
+
+{
+AST*rtree= Rule_def->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2960 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 3087 "./o2externs.w"
+
+}
+
+/*:95*/
+//line 3165 "./o2externs.w"
+
+/*97:*/
+//line 3131 "./o2externs.w"
+
+if(Rule_def->rule_no()!=1)goto not_start_rule;
+if(O2_PP_PHASE==0)goto not_start_rule;
+if(Rule_def->epsilon()==NO)goto not_start_rule;
+{
+T_parallel_la_boundary*la= O2_PP_PHASE->la_bndry();
+set<T_in_stbl*> ::iterator lai= la->la_first_set()->begin();
+set<T_in_stbl*> ::iterator laie= la->la_first_set()->end();
+for(;lai!=laie;++lai){
+T_in_stbl*tstbl= *lai;
+Rule_def->add_to_first_set(*tstbl);
+}
+}
+not_start_rule:;
+
+/*:97*/
+//line 3166 "./o2externs.w"
+
+while(cc<=nc){
+cur_elem_t= elem_space[cc];
+cur_elem= AST::content(*cur_elem_t);
+/*96:*/
+//line 3091 "./o2externs.w"
+
+switch(cur_elem->enumerated_id__){
+case T_Enum::T_T_eosubrule_:{
+++cc;
+continue;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)cur_elem;
+T_in_stbl*tstbl= rt->t_in_stbl();
+Rule_def->add_to_first_set(*tstbl);
+Rule_def->add_rule_adding_T_in_first_set(tstbl,rt->grammar_s_enumerate());
+++cc;
+continue;
+}
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)cur_elem;
+rule_def*rdef= rr->its_rule_def();
+/*90:*/
+//line 2984 "./o2externs.w"
+
+{
+i= rules_in_elem_space.find(rdef);
+if(i==rules_in_elem_space.end()){
+rules_in_elem_space.insert(rdef);
+AST*rtree= rdef->rule_s_tree();
+ast_prefix_1forest subrule_walk(*rtree,&just_walk_functr,&sr_filter,ACCEPT_FILTER);
+tok_can<AST*> subrules_can(subrule_walk);
+yacco2::UINT xxx(0);
+for(;subrules_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+/*88:*/
+//line 2960 "./o2externs.w"
+
+vector<AST*> ::iterator ti= subrules_can.nodes_visited()->begin();
+vector<AST*> ::iterator tie= subrules_can.nodes_visited()->end();
+for(;ti!=tie;++ti){
+AST*srdef_t= *ti;
+T_subrule_def* sr_def = (T_subrule_def*)AST::content(*srdef_t);
+AST*sr_t= sr_def->subrule_s_tree();
+AST*et= AST::get_spec_child(*sr_t,1);
+++nc;
+elem_space[nc]= et;
+}
+
+/*:88*/
+//line 2994 "./o2externs.w"
+
+}
+}
+
+/*:90*/
+//line 3108 "./o2externs.w"
+
+if(rdef->epsilon()==YES){
+AST*et= AST::brother(*cur_elem_t);
+elem_space[cc]= et;
+continue;
+}else{
+++cc;
+continue;
+}
+}
+}
+
+/*:96*/
+//line 3170 "./o2externs.w"
+
+}
+}
+
+/*:98*//*102:*/
+//line 3212 "./o2externs.w"
+
+bool
+fs_sort_criteria(const NS_yacco2_terminals::T_in_stbl*E1,const NS_yacco2_terminals::T_in_stbl*E2){
+T_in_stbl* e1 = (T_in_stbl*)E1;
+T_in_stbl* e2 = (T_in_stbl*)E2;
+T_terminal_def*e1_t_def= e1->t_def();
+T_terminal_def*e2_t_def= e2->t_def();
+string*e1s= e1_t_def->t_name();
+string*e2s= e2_t_def->t_name();
+if(*e1s<*e2s)return true;
+return false;
+}
+void PRT_RULE_S_FIRST_SET(std::ofstream&Ofile,NS_yacco2_terminals::rule_def*Rule_def){
+/*100:*/
+//line 3183 "./o2externs.w"
+
+T_IN_STBL_SET_type*fs= Rule_def->first_set();
+Ofile<<"@*2 |"<<Rule_def->rule_name()->c_str()<<"|";
+if(Rule_def->epsilon()==true){
+Ofile<<"{$^\\emptyrule$}";
+}
+Ofile<<" \\# in set: "<<fs->size()<<".\\fbreak"<<std::endl;
+T_IN_STBL_SORTED_SET_type ran_array;
+ran_array.reserve(fs->size());
+T_IN_STBL_SET_ITER_type ii= fs->begin();
+T_IN_STBL_SET_ITER_type iie= fs->end();
+for(;ii!=iie;++ii){
+ran_array.push_back(*ii);
+}
+stable_sort(ran_array.begin(),ran_array.end(),fs_sort_criteria);
+
+/*:100*/
+//line 3225 "./o2externs.w"
+
+/*101:*/
+//line 3200 "./o2externs.w"
+
+char xlate[Max_cweb_item_size];
+T_IN_STBL_SORTED_SET_ITER_type i= ran_array.begin();
+T_IN_STBL_SORTED_SET_ITER_type ie= ran_array.end();
+for(;i!=ie;++i){
+T_in_stbl*el= *i;
+Ofile<<" ";
+XLATE_SYMBOLS_FOR_cweave(el->t_def()->t_name()->c_str(),xlate);
+Ofile<<xlate<<"\\ \\ "<<std::endl;
+}
+
+/*:101*/
+//line 3226 "./o2externs.w"
+
+}
+
+/*:102*//*104:*/
+//line 3239 "./o2externs.w"
+
+LA_SET_type*make_copy_of_la_set(LA_SET_type*Set1){
+LA_SET_type*copy_set= new LA_SET_type;
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+LA_SET_ITER_type f= Set1->find(td);
+if(f!=Set1->end()){
+copy_set->insert(td);
+return copy_set;
+}
+LA_SET_ITER_type i= Set1->begin();
+LA_SET_ITER_type ie= Set1->end();
+for(;i!=ie;++i){
+copy_set->insert(*i);
+}
+return copy_set;
+}
+
+/*:104*//*105:*/
+//line 3261 "./o2externs.w"
+
+bool are_2_la_sets_equal(LA_SET_type*Common_set1,LA_SET_type*Set2){
+LA_SET_type*la_set_to_compare_against= Set2;
+using namespace yacco2_stbl;
+T_sym_tbl_report_card report_card;
+find_sym_in_stbl(report_card,*LR1_EOLR_LITERAL);
+T_in_stbl* td = (T_in_stbl*)report_card.tbl_entry_->symbol_;
+LA_SET_type*eolr_set(0);
+LA_SET_ITER_type f= Set2->find(td);
+if(f!=Set2->end()){
+eolr_set= new LA_SET_type;
+eolr_set->insert(td);
+la_set_to_compare_against= eolr_set;
+}
+
+if(Common_set1->size()!=la_set_to_compare_against->size()){
+if(eolr_set!=0)delete eolr_set;
+return false;
+}
+LA_SET_ITER_type set1i= Common_set1->begin();
+LA_SET_ITER_type set1ie= Common_set1->end();
+LA_SET_ITER_type set2i= la_set_to_compare_against->begin();
+LA_SET_ITER_type set2ie= la_set_to_compare_against->end();
+for(;set1i!=set1ie;){
+T_in_stbl*set1T= *set1i;
+T_in_stbl*set2T= *set2i;
+if(set1T!=set2T)
+return false;
+++set1i;
+++set2i;
+}
+if(eolr_set!=0)delete eolr_set;
+return true;
+}
+
+/*:105*//*106:*/
+//line 3297 "./o2externs.w"
+
+int find_common_la_set_idx(LA_SET_type*La_){
+if(COMMON_LA_SETS.empty()==true){
+LA_SET_type*copy_set= make_copy_of_la_set(La_);
+COMMON_LA_SETS.push_back(copy_set);
+return 0;
+}
+COMMON_LA_SETS_ITER_type i= COMMON_LA_SETS.begin();
+COMMON_LA_SETS_ITER_type ie= COMMON_LA_SETS.end();
+int idx(0);
+for(;i!=ie;++i,++idx){
+LA_SET_type*st1= *i;
+bool result= are_2_la_sets_equal(st1,La_);
+if(result==true){
+return idx;
+}
+}
+LA_SET_type*copy_set= make_copy_of_la_set(La_);
+COMMON_LA_SETS.push_back(copy_set);
+return idx;
+}
+
+
+/*:106*//*107:*/
+//line 3326 "./o2externs.w"
+
+void COMMONIZE_LA_SETS(){
+STATES_ITER_type si= LR1_STATES.begin();
+STATES_ITER_type sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+S_VECTORS_ITER_type svi= cur_state->state_s_vector_.begin();
+S_VECTORS_ITER_type svie= cur_state->state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+S_VECTOR_ELEMS_ITER_type selie= svi->second.end();
+for(;seli!=selie;++seli){
+state_element*se= *seli;
+if(se->goto_state_!=0)continue;
+bool set_ok= se->calc_la(*se);
+if(set_ok==false){
+return;
+}
+se->common_la_set_idx_= find_common_la_set_idx(se->la_set_);
+}
+}
+}
+}
+
+/*:107*//*109:*/
+//line 3372 "./o2externs.w"
+
+int calc_cyclic_key
+(NS_yacco2_terminals::rule_def*Rule_use,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+static int no_of_rules(0);
+static int start_of_rules(0);
+if(no_of_rules==0){
+start_of_rules= O2_T_ENUM_PHASE->total_enumerate();
+no_of_rules= O2_RULES_PHASE->rules_alphabet()->size();
+}
+int rule_use_enum_rel0= Rule_use->enum_id()-start_of_rules;
+int part1_key_of_rule_use= rule_use_enum_rel0*no_of_rules;
+int against_rule_enum_rel0= Against_rule->enum_id()-start_of_rules;
+int part2_key_of_against_rule= against_rule_enum_rel0;
+int key= part1_key_of_rule_use+part2_key_of_against_rule;
+return key;
+}
+
+/*:109*//*110:*/
+//line 3397 "./o2externs.w"
+
+void determine_rhs_indirect_use_cnt
+(NS_yacco2_terminals::rule_def*Use_for_rule,yacco2::AST*SRule_t
+,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor walk_functr;
+ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int indirect_use_cnt(0);
+int direct_use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+refered_rule* rr = (refered_rule*)sym;
+rule_def*its_rd= rr->its_rule_def();
+if(its_rd==Use_for_rule){
+continue;
+}
+int idc= MAX_USE_CNT_RxR(Use_for_rule,its_rd);
+}
+}
+
+/*:110*//*111:*/
+//line 3428 "./o2externs.w"
+
+int determine_rhs_max_use_cnt
+(NS_yacco2_terminals::rule_def*Use_for_rule,yacco2::AST*SRule_t
+,NS_yacco2_terminals::rule_def*Against_rule){
+using namespace NS_yacco2_T_enum;
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_refered_rule_);
+
+tok_can_ast_functor walk_functr;
+ast_prefix_1forest walk(*SRule_t,&walk_functr,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int running_indirect_use_cnt(0);
+int running_direct_use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+rule_def*its_rd(0);
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+refered_rule* rr = (refered_rule*)sym;
+its_rd= rr->its_rule_def();
+if(its_rd==Against_rule)Against_rule->recursive(YES);
+if(its_rd==Use_for_rule){
+++running_direct_use_cnt;
+continue;
+}else{
+use_cnt_type rule_use_key(Use_for_rule,its_rd);
+int use_cnt_key= calc_cyclic_key(Use_for_rule,its_rd);
+CYCLIC_USE_TBL_ITER_type i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+int idc= uc.use_cnt_;
+int potential_idc_cnt= idc+running_direct_use_cnt;
+if(potential_idc_cnt> running_indirect_use_cnt){
+running_indirect_use_cnt= potential_idc_cnt;
+}
+}
+}
+if(running_direct_use_cnt> running_indirect_use_cnt){
+return running_direct_use_cnt;
+}
+return running_indirect_use_cnt;
+}
+
+/*:111*//*112:*/
+//line 3471 "./o2externs.w"
+
+int MAX_USE_CNT_RxR
+(NS_yacco2_terminals::rule_def*Rule_use,NS_yacco2_terminals::rule_def*Against_rule){
+use_cnt_type rule_use_key(Rule_use,Against_rule);
+int use_cnt_key= calc_cyclic_key(Rule_use,Against_rule);
+CYCLIC_USE_TBL_ITER_type i= CYCLIC_USE_TABLE.find(use_cnt_key);
+if(i!=CYCLIC_USE_TABLE.end()){
+return i->second.use_cnt_;
+}
+CYCLIC_USE_TABLE.insert(make_pair(use_cnt_key,rule_use_key));
+using namespace NS_yacco2_T_enum;
+if(Against_rule->rule_use_skeleton()==0){
+i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+uc.use_cnt_= 0;
+return 0;
+}
+SET_FILTER_type filter;
+filter.insert(T_Enum::T_T_subrule_def_);
+tok_can_ast_functor walk_functr;
+ast_prefix walk(*Against_rule->rule_use_skeleton(),&walk_functr
+,&filter,ACCEPT_FILTER);
+TOK_CAN_TREE_type rules_use_can(walk);
+int use_cnt(0);
+int x(0);
+CAbs_lr1_sym*sym= rules_use_can[x];
+for(;sym->enumerated_id()!=LR1_Eog;++x,sym= rules_use_can[x]){
+AST*sr_t= rules_use_can.ast(x);
+determine_rhs_indirect_use_cnt(Rule_use,sr_t,Against_rule);
+int rhs_uc= determine_rhs_max_use_cnt(Rule_use,sr_t,Against_rule);
+if(use_cnt<rhs_uc){
+use_cnt= rhs_uc;
+}
+}
+i= CYCLIC_USE_TABLE.find(use_cnt_key);
+use_cnt_type&uc= i->second;
+if((Against_rule->recursive()==YES)
+&&(Rule_use!=Against_rule))use_cnt= 2*use_cnt;
+uc.use_cnt_= use_cnt;
+return use_cnt;
+}
+
+
+/*:112*//*115:*/
+//line 3615 "./o2externs.w"
+
+void intro_comment
+(std::ofstream&Op_str,const char*File_name){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP op_template=
+"/*\n"
+" File: %s\n"
+" Date and Time: %s\n"
+"*/";
+
+int x= sprintf(big_buf_
+,op_template
+,File_name
+,DATE_AND_TIME()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:115*//*116:*/
+//line 3643 "./o2externs.w"
+
+void grammar_header_includes
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lrk_ph= O2_LRK_PHASE;
+T_rc_phrase*rc_ph= O2_RC_PHASE;
+T_error_symbols_phrase*err_ph= O2_ERROR_PHASE;
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_list=
+"#include \"%s\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"\n"
+"#include \"%s.h\"";
+
+int x= sprintf(big_buf_
+,include_list
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,lrk_ph->filename_id()->identifier()->c_str()
+,err_ph->filename_id()->identifier()->c_str()
+,t_ph->filename_id()->identifier()->c_str()
+,rc_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:116*//*117:*/
+//line 3676 "./o2externs.w"
+
+void user_prefix_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP upd_code= "%s";
+
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_prefix_declaration);
+if(i==dir_map->end())return;
+T_user_prefix_declaration* upd = (T_user_prefix_declaration*)i->second;
+int x= sprintf(big_buf_
+,upd_code
+,upd->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+
+/*:117*//*118:*/
+//line 3701 "./o2externs.w"
+
+void thread_entry_extern_for_header
+(std::ofstream&Op_str){
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+if(pp_ph==0){
+Op_str<<"// monolithic grammar: no thread"<<endl;
+return;
+}
+char big_buf_[BIG_BUFFER_32K];
+KCHARP th_extern= "extern yacco2::Thread_entry I%s;\n";
+
+int x= sprintf(big_buf_
+,th_extern
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:118*//*119:*/
+//line 3721 "./o2externs.w"
+
+void using_ns_for_header
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP default_ns_use=
+"using namespace %s;// enumerate\n"
+"using namespace yacco2;";
+
+int x= sprintf(big_buf_
+,default_ns_use
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:119*//*120:*/
+//line 3744 "./o2externs.w"
+
+void fsm_enum_rules_subrules_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP enumeration_of_rules_sbrules=
+" enum rules_and_subrules{\n"
+" start_of_rule_list = %s::T_Enum::sum_total_T";
+int x= sprintf(big_buf_
+,enumeration_of_rules_sbrules
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+int current_rule_no(-1);
+int no_rules= rules_ph->rules_alphabet()->size();
+KCHARP rule_enum=
+" ,R_%s_ = %i//start_of_rule_list + %i";
+for(;i!=ie;++i){
+++current_rule_no;
+rule_def*rd= *i;
+x= sprintf(big_buf_
+,rule_enum
+,rd->rule_name()->c_str()
+,rd->enum_id()
+,current_rule_no++
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+KCHARP subrule_enum=
+" ,rhs%i_%s_ = %i";
+for(;j!=je;++j){
+T_subrule_def*srd= *j;
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,subrule_enum
+,srd->subrule_no_of_rule()
+,rd->rule_name()->c_str()
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+KCHARP end_enumeration_of_rules_sbrules=
+" };";
+Op_str<<end_enumeration_of_rules_sbrules<<endl;
+}
+
+/*:120*//*121:*/
+//line 3812 "./o2externs.w"
+
+void fsm_map_subrules_to_rules_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP array_of_subrules_to_rules_mapping=
+" fsm_rules_reuse_table_type fsm_rules_reuse_table;\n"
+" static int rhs_to_rules_mapping_[%i];";
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+}
+}
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:121*//*122:*/
+//line 3849 "./o2externs.w"
+
+void fsm_comments_about_la_sets_and_states
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP no_of_la_sets_and_states=
+" //no of la sets = %i\n"
+" //no of states = %i";
+int x= sprintf(big_buf_
+,no_of_la_sets_and_states
+,COMMON_LA_SETS.size()
+,NO_LR1_STATES
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:122*//*123:*/
+//line 3871 "./o2externs.w"
+
+void fsm_class_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP class_fsm=
+"class %s: public yacco2::CAbs_fsm {\n"
+" public:";
+int x= sprintf(big_buf_
+,class_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+fsm_enum_rules_subrules_for_header(Op_str);
+fsm_comments_about_la_sets_and_states(Op_str);
+
+KCHARP ctor_fsm=
+" %s();";
+
+x= sprintf(big_buf_
+,ctor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP dtor_fsm=
+" ~%s();";
+x= sprintf(big_buf_
+,dtor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP op_failed=
+" void op();\n"
+" bool failed();";
+Op_str<<op_failed<<endl;
+
+
+KCHARP reduce_rhs=
+" void reduce_rhs_of_rule\n"
+" (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);";
+Op_str<<reduce_rhs<<endl;
+fsm_map_subrules_to_rules_for_header(Op_str);
+KCHARP user_declaration=
+" %s";
+
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_declaration);
+if(i!=dir_map->end()){
+T_user_declaration* ud = (T_user_declaration*)i->second;
+int x= sprintf(big_buf_
+,user_declaration
+,ud->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+KCHARP end_class_fsm=
+" };";
+Op_str<<end_class_fsm<<endl;
+
+}
+/*:123*//*124:*/
+//line 3942 "./o2externs.w"
+
+void forward_refs_of_rules_declarations_for_header
+(std::ofstream&Op_str){
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP forward_ref=
+"struct %s;";
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+int x= sprintf(big_buf_
+,forward_ref
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:124*//*125:*/
+//line 3964 "./o2externs.w"
+
+void rules_class_defs_for_header
+(std::ofstream&Op_str){
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP end_rule_def=
+"};\n";
+/*126:*/
+//line 3975 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+KCHARP start_rule_def=
+"struct %s:public yacco2::CAbs_lr1_sym {\n"
+" %s(yacco2::Parser* P);";
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*127:*/
+//line 4029 "./o2externs.w"
+
+if(rd->parallel_mntr()!=0){
+T_parallel_monitor_phrase*pp_phrase= rd->parallel_mntr();
+if(rd->parallel_mntr()->mntr_directives_map()->empty()!=true){
+SDC_MAP_type*dir_map= pp_phrase->mntr_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_arbitrator_code);
+if(i!=dir_map->end()){
+T_arbitrator_code* ac = (T_arbitrator_code*)i->second;
+string::size_type idx=
+ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+if(idx!=string::npos){
+KCHARP rule_s_arbitrator=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"AR_%s(yacco2::Parser* Caller_pp);// rule's arbitrator";
+
+int x= sprintf(big_buf_
+,rule_s_arbitrator
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+RULES_HAVING_AR.insert(rd);
+}
+}
+}
+}
+
+
+/*:127*/
+//line 3983 "./o2externs.w"
+
+int x= sprintf(big_buf_
+,start_rule_def
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+if(rlhs!=0){
+SDC_MAP_type*dir_map= rlhs->lhs_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_destructor);
+if(i!=dir_map->end()){
+KCHARP rule_def_dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+int x= sprintf(big_buf_
+,rule_def_dtor
+,rd->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+KCHARP rule_def_op=
+" void op();";
+Op_str<<rule_def_op<<endl;
+}
+i= dir_map->find(SDC_constructor);
+if(i!=dir_map->end()){
+KCHARP rule_def_ctor=
+" void ctor();";
+Op_str<<rule_def_ctor<<endl;
+}
+i= dir_map->find(SDC_user_declaration);
+if(i!=dir_map->end()){
+T_user_declaration* ud = (T_user_declaration*)i->second;
+Op_str<<ud->syntax_code()->syntax_code()->c_str()<<endl;
+}
+}
+/*128:*/
+//line 4059 "./o2externs.w"
+
+KCHARP sub_rule_def_public=
+" public:";
+Op_str<<sub_rule_def_public<<endl;
+KCHARP sub_rule_def=
+" void sr%i();";
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(int xx= 1;j!=je;++j,++xx){
+T_subrule_def*srd= *j;
+SDC_MAP_type*sdrmap= srd->subrule_directives();
+if(!sdrmap->empty()){
+int x= sprintf(big_buf_
+,sub_rule_def
+,xx
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+Op_str<<end_rule_def<<endl;
+
+/*:128*/
+//line 4023 "./o2externs.w"
+
+
+}
+/*:126*/
+//line 3971 "./o2externs.w"
+
+}
+
+/*:125*//*129:*/
+//line 4093 "./o2externs.w"
+
+void possible_thread_procedure_declaration
+(std::ofstream&Op_str){
+if(O2_PP_PHASE==0)return;
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP thd_proc=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s(yacco2::Parser* Caller);// called thread\n"
+"yacco2::THR_result _YACCO2_CALL_TYPE\n"
+"PROC_%s(yacco2::Parser* Caller);// called thread's twin the procedure";
+int x= sprintf(big_buf_
+,thd_proc
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:129*//*130:*/
+//line 4117 "./o2externs.w"
+
+void rules_reuse_table_declaration
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP rules_recycled_table_type=
+"struct fsm_rules_reuse_table_type{\n"
+" fsm_rules_reuse_table_type();\n"
+" int no_rules_entries_;\n"
+" Per_rule_s_reuse_table* per_rule_s_table_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,rules_recycled_table_type
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:130*//*131:*/
+//line 4140 "./o2externs.w"
+
+void namespace_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ns_of_grammar_start=
+"namespace %s {";
+int x= sprintf(big_buf_
+,ns_of_grammar_start
+,fsm_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+possible_thread_procedure_declaration(Op_str);
+using_ns_for_header(Op_str);
+rules_reuse_table_declaration(Op_str);
+fsm_class_declaration_for_header(Op_str);
+forward_refs_of_rules_declarations_for_header(Op_str);
+rules_class_defs_for_header(Op_str);
+KCHARP ns_of_grammar_end=
+"} // end of namespace\n";
+Op_str<<ns_of_grammar_end<<endl;
+}
+
+/*:131*//*132:*/
+//line 4165 "./o2externs.w"
+
+void state_1_extern
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP state_extern=
+"extern yacco2::State S1_%s;";
+int x= sprintf(big_buf_
+,state_extern
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:132*//*133:*/
+//line 4181 "./o2externs.w"
+
+void grammar_include_guard_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,fsm_ph->filename_id()->identifier()->c_str()
+,fsm_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+grammar_header_includes(Op_str);
+user_prefix_declaration_for_header(Op_str);
+thread_entry_extern_for_header(Op_str);
+state_1_extern(Op_str);
+namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+/*:133*//*134:*/
+//line 4209 "./o2externs.w"
+
+void user_suffix_declaration_for_header
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_suffix_declaration);
+if(i==dir_map->end())return;
+T_user_suffix_declaration* upd = (T_user_suffix_declaration*)i->second;
+KCHARP upd_code= "%s";
+int x= sprintf(big_buf_
+,upd_code
+,upd->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:134*//*135:*/
+//line 4230 "./o2externs.w"
+
+void OP_GRAMMAR_HEADER(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmheader;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmheader_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_HEADER",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+grammar_include_guard_for_header(Op_file);
+user_suffix_declaration_for_header(Op_file);
+Op_file.close();
+}
+
+/*:135*//*137:*/
+//line 4260 "./o2externs.w"
+
+void fsm_cpp_includes
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_list=
+"#include \"%s.h\"";
+
+int x= sprintf(big_buf_
+,include_list
+,fsm_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:137*//*138:*/
+//line 4277 "./o2externs.w"
+
+void using_ns_for_fsm_cpp
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lrk_ph= O2_LRK_PHASE;
+T_rc_phrase*rc_ph= O2_RC_PHASE;
+T_error_symbols_phrase*err_ph= O2_ERROR_PHASE;
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP default_ns_use=
+"using namespace %s;// enumerate\n"
+"using namespace %s;// error symbols\n"
+"using namespace %s;// lrk \n"
+"using namespace %s;// terminals\n"
+"using namespace %s;// rc \n"
+"using namespace %s;// yacco2 library\n"
+"using namespace %s;// grammar's ns\n"
+"// first set terminals";
+
+int x= sprintf(big_buf_
+,default_ns_use
+,enum_ph->namespace_id()->identifier()->c_str()
+,err_ph->namespace_id()->identifier()->c_str()
+,lrk_ph->namespace_id()->identifier()->c_str()
+,t_ph->namespace_id()->identifier()->c_str()
+,rc_ph->namespace_id()->identifier()->c_str()
+,"yacco2"
+,fsm_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:138*//*139:*/
+//line 4315 "./o2externs.w"
+
+void rules_reuse_table_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP rules_recycled_table_type=
+"fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){\n"
+" no_rules_entries_ = %i;";
+int x= sprintf(big_buf_
+,rules_recycled_table_type
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP per_rule_s_table_ref_type=
+" per_rule_s_table_[%i] = new Per_rule_s_reuse_table();";
+
+for(int xx= 1;xx<=no_rules;++xx){
+int x0= xx-1;
+x= sprintf(big_buf_
+,per_rule_s_table_ref_type
+,x0
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<"}"<<endl;
+}
+
+/*:139*//*140:*/
+//line 4349 "./o2externs.w"
+
+void fsm_map_subrules_to_rules_table_imp
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+int overall_subrules_nos(0);
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+}
+}
+++overall_subrules_nos;
+
+KCHARP array_of_subrules_to_rules_mapping_start=
+"int %s::rhs_to_rules_mapping_[%i] = {\n"
+" -1";
+int x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping_start
+,fsm_class->identifier()->identifier()->c_str()
+,overall_subrules_nos
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP subrules_to_rule_mapping=
+" ,%i // subrule %i for rule %i";
+
+KCHARP array_of_subrules_to_rules_mapping_end=
+"};%s";
+
+
+
+i= rules_ph->crt_order()->begin();
+ie= rules_ph->crt_order()->end();
+overall_subrules_nos= 0;
+for(;i!=ie;++i){
+rule_def*rd= *i;
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+for(;j!=je;++j){
+++overall_subrules_nos;
+int x= sprintf(big_buf_
+,subrules_to_rule_mapping
+,rd->rule_no()-1
+,overall_subrules_nos
+,rd->rule_no()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+x= sprintf(big_buf_
+,array_of_subrules_to_rules_mapping_end," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+enum_ph->total_no_subrules(overall_subrules_nos);
+}
+
+/*:140*//*141:*/
+//line 4431 "./o2externs.w"
+
+void fsm_class_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ctor_fsm=
+" %s::\n"
+" %s()\n"
+" :yacco2::CAbs_fsm\n"
+" (\"%s\"\n"
+" ,\"%s\"\n"
+" ,\"%s\"\n"
+" ,%s\n"
+" ,\"%s\"\n"
+" ,\"%s\"\n"
+" ,S1_%s){\n"
+" %s\n"
+" }";
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_constructor);
+const char*cc_str(0);
+if(i!=dir_map->end()){
+T_constructor* cc = (T_constructor*)i->second;
+cc_str= cc->syntax_code()->syntax_code()->c_str();
+}else{
+cc_str= "";
+}
+
+int x= sprintf(big_buf_
+,ctor_fsm
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->fsm_id()->c_string()->c_str()
+,fsm_ph->version()->c_string()->c_str()
+,fsm_ph->date()->c_string()->c_str()
+,fsm_ph->debug()->c_string()->c_str()
+,fsm_ph->comment()->c_string()->c_str()
+,DATE_AND_TIME()
+,fsm_class->identifier()->identifier()->c_str()
+,cc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP dtor_rtn_start=
+" \n"
+"%s::~%s(){\n"
+"%s";
+i= dir_map->find(SDC_destructor);
+const char*dc_str(0);
+if(i!=dir_map->end()){
+T_destructor* dc = (T_destructor*)i->second;
+dc_str= dc->syntax_code()->syntax_code()->c_str();
+}else{
+dc_str= "";
+}
+x= sprintf(big_buf_
+,dtor_rtn_start
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,dc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+int no_rules= rules_ph->rules_alphabet()->size();
+KCHARP delete_recycled_rules=
+" for(int x = 0;x < %i;++x){\n"
+" ///delete fsm_rules_reuse_table.per_rule_s_table_[x];\n"
+" }";
+
+x= sprintf(big_buf_
+,delete_recycled_rules
+,no_rules
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP dtor_rtn_end=
+"}%s\n"
+"";
+x= sprintf(big_buf_
+,dtor_rtn_end," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP failed_rtn=
+" bool %s::failed(){\n"
+" %s\n"
+" }";
+
+i= dir_map->find(SDC_failed);
+const char*fc_str(0);
+if(i!=dir_map->end()){
+T_failed* fc = (T_failed*)i->second;
+fc_str= fc->syntax_code()->syntax_code()->c_str();
+}else{
+fc_str= " return false;";
+}
+x= sprintf(big_buf_
+,failed_rtn
+,fsm_class->identifier()->identifier()->c_str()
+,fc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP op_rtn=
+" void %s::op(){%s\n}";
+i= dir_map->find(SDC_op);
+const char*oc_str(0);
+if(i!=dir_map->end()){
+T_op* oc = (T_op*)i->second;
+oc_str= oc->syntax_code()->syntax_code()->c_str();
+}else{
+oc_str= "";
+}
+x= sprintf(big_buf_
+,op_rtn
+,fsm_class->identifier()->identifier()->c_str()
+,oc_str
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+fsm_map_subrules_to_rules_table_imp(Op_str);
+dir_map= fsm_class->directives_map();
+i= dir_map->find(SDC_user_implementation);
+if(i!=dir_map->end()){
+T_user_implementation* ui = (T_user_implementation*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str()<<endl;
+}
+}
+
+/*:141*//*142:*/
+//line 4574 "./o2externs.w"
+
+void rules_subrules_implementations
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+/*143:*/
+//line 4584 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*144:*/
+//line 4735 "./o2externs.w"
+
+if(rd->parallel_mntr()!=0){
+T_parallel_monitor_phrase* pp_phrase = rd->parallel_mntr();
+/*145:*/
+//line 4741 "./o2externs.w"
+
+if(pp_phrase->mntr_directives_map()->empty()!=true){
+SDC_MAP_type*pp_map= pp_phrase->mntr_directives_map();
+SDC_MAP_ITER_type p= pp_map->find(SDC_arbitrator_code);
+if(p!=pp_map->end()){
+T_arbitrator_code* ac = (T_arbitrator_code*)p->second;
+string::size_type idx=
+ac->syntax_code()->syntax_code()->find(CODE_PRESENCE_IN_ARBITRATOR_CODE);
+if(idx!=string::npos){
+KCHARP rule_s_arbitrator_imp=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s::AR_%s(yacco2::Parser* Caller_pp){\n"
+" yacco2::KCHARP ar_name = \"AR_%s\";\n"
+"#include \"war_begin_code.h\"\n"
+" %s\n"
+"#include \"war_end_code.h\"\n"
+"}\n";
+int x= sprintf(big_buf_
+,rule_s_arbitrator_imp
+,fsm_ph->namespace_id()->identifier()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,ac->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+
+/*:145*/
+//line 4738 "./o2externs.w"
+
+}
+/*:144*/
+//line 4589 "./o2externs.w"
+
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+const char*ctor_code(0);
+const char*dtor_code(0);
+string dtor_name("0");
+const char*op_code(0);
+const char*user_imp_code(0);
+T_destructor*dtor(0);
+if(rlhs!=0){
+SDC_MAP_type*dir_map= rlhs->lhs_directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_constructor);
+if(i!=dir_map->end()){
+T_constructor* ctor = (T_constructor*)i->second;
+ctor_code= ctor->syntax_code()->syntax_code()->c_str();
+}
+i= dir_map->find(SDC_destructor);
+if(i!=dir_map->end()){
+dtor = (T_destructor*)i->second;
+dtor_code= dtor->syntax_code()->syntax_code()->c_str();
+KCHARP dtor_nm=
+"&dtor_%s";
+sprintf(big_buf_
+,dtor_nm
+,rd->rule_name()->c_str()
+);
+dtor_name.clear();
+dtor_name+= big_buf_;
+}
+i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+T_op* op = (T_op*)i->second;
+op_code= op->syntax_code()->syntax_code()->c_str();
+}
+
+i= dir_map->find(SDC_user_implementation);
+if(i!=dir_map->end()){
+T_user_implementation* uimp= (T_user_implementation*)i->second;
+user_imp_code= uimp->syntax_code()->syntax_code()->c_str();
+}
+}
+
+KCHARP rule_def_imp=
+"%s::%s(yacco2::Parser* P)\n"
+" :CAbs_lr1_sym\n"
+" (\"%s\",%s,%s::R_%s_,P,%s,%s){\n"
+"}\n";
+string ad;
+if(rd->autodelete()==true){
+ad+= "true";
+}else{
+ad+= "false";
+}
+string ab;
+if(rd->autoabort()==true){
+ab+= "true";
+}else{
+ab+= "false";
+}
+int x= sprintf(big_buf_
+,rule_def_imp
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_name.c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,rd->rule_name()->c_str()
+,ad.c_str()
+,ab.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+
+if(dtor_code!=0){
+std::string::size_type r=
+dtor->syntax_code()->syntax_code()->find("ABORT_STATUS");
+KCHARP rule_def_dtor=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP rule_def_dtor_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+int x;
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,rule_def_dtor
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_code
+);
+}else{
+x= sprintf(big_buf_
+,rule_def_dtor_noabort
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,dtor_code
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+if(op_code!=0){
+KCHARP rule_def_op=
+"void %s::op(){\n"
+" sstrace_rulesss\n"
+" %s\n"
+"}";
+int x= sprintf(big_buf_
+,rule_def_op
+,rd->rule_name()->c_str()
+,op_code
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+if(ctor_code!=0){
+KCHARP rule_def_ctor=
+"void %s::ctor(){\n"
+" %s\n"
+"}";
+int x= sprintf(big_buf_
+,rule_def_ctor
+,rd->rule_name()->c_str()
+,ctor_code
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+if(user_imp_code!=0){
+Op_str<<user_imp_code<<endl;
+}
+/*146:*/
+//line 4784 "./o2externs.w"
+
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+int nosrs= sr_ph->no_subrules();
+for(int xx= 1;j!=je;++j,++xx){
+T_subrule_def*srd= *j;
+AST*sr_t= AST::get_spec_child(*srd->subrule_s_tree(),1);
+int no_parms= srd->no_of_elems()-1;
+KCHARP sub_rule_def_imp=
+"void %s::sr%i(){";
+SDC_MAP_type*dir_map= srd->subrule_directives();
+if(dir_map->empty()!=true){
+int x= sprintf(big_buf_
+,sub_rule_def_imp
+,rd->rule_name()->c_str()
+,xx
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+SDC_MAP_ITER_type i= dir_map->find(SDC_op);
+if(i!=dir_map->end()){
+T_op* rhsc = (T_op*)i->second;
+std::string::size_type idx;
+idx= rhsc->syntax_code()->syntax_code()->find("sf->p");
+
+if(idx==std::string::npos)goto write_out_op_code;
+/*147:*/
+//line 4852 "./o2externs.w"
+
+for(int y= 1;y<=no_parms;++y){
+bool eos_thd_or_proc(false);
+CAbs_lr1_sym*sym= AST::content(*sr_t);
+const char*parm_name(0);
+switch(sym->enumerated_id__){
+case T_Enum::T_refered_rule_:{
+refered_rule* rr = (refered_rule*)sym;
+parm_name= rr->its_rule_def()->rule_name()->c_str();
+break;
+}
+case T_Enum::T_refered_T_:{
+refered_T* rt = (refered_T*)sym;
+T_terminal_def*td= rt->its_t_def();
+if(td->enum_id()==LR1_ALL_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+if(td->enum_id()==LR1_QUESTIONABLE_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+if(td->enum_id()==LR1_INVISIBLE_SHIFT_OPERATOR){
+parm_name= "CAbs_lr1_sym";
+break;
+}
+parm_name= td->classsym()->c_str();
+break;
+}
+case T_Enum::T_T_identifier_:{
+parm_name= "T_identifier";
+break;
+}
+case T_Enum::T_T_NULL_:{
+parm_name= "T_NULL";
+break;
+}
+case T_Enum::T_T_2colon_:{
+parm_name= "T_2colon";
+break;
+}
+case T_Enum::T_T_called_thread_eosubrule_:{
+eos_thd_or_proc= true;
+--no_parms;
+--y;
+break;
+}
+case T_Enum::T_T_null_call_thread_eosubrule_:{
+eos_thd_or_proc= true;
+--no_parms;
+--y;
+break;
+}
+}
+
+
+if(y==1){
+KCHARP sub_rule_stk_parms_begin=
+" struct SF{";
+Op_str<<sub_rule_stk_parms_begin<<endl;
+}
+KCHARP sub_rule_stk_parm=
+" %s* p%i__;\n"
+" State* s%i__;\n"
+" bool abort%i__;\n"
+" Rule_s_reuse_entry* rule_s_reuse_entry%i__;";
+if(eos_thd_or_proc==false){
+int x= sprintf(big_buf_
+,sub_rule_stk_parm
+,parm_name
+,y
+,y
+,y
+,y
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+sr_t= AST::brother(*sr_t);
+}
+if(no_parms> 0){
+KCHARP sub_rule_stk_parms_end=
+" };";
+Op_str<<sub_rule_stk_parms_end<<endl;
+KCHARP stk_frame_equate=
+" SF* sf = (SF*)rule_info__.parser__->parse_stack__.sf_by_top(%i);";
+
+int x= sprintf(big_buf_
+,stk_frame_equate
+,no_parms
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:147*/
+//line 4812 "./o2externs.w"
+
+write_out_op_code:;
+KCHARP sub_rule_def_op_code=
+" %s";
+int x= sprintf(big_buf_
+,sub_rule_def_op_code
+,rhsc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+KCHARP sub_rule_def_end=
+"}\n";
+Op_str<<sub_rule_def_end<<endl;
+}
+}
+/*:146*/
+//line 4731 "./o2externs.w"
+
+}
+
+/*:143*/
+//line 4581 "./o2externs.w"
+
+}
+/*:142*//*148:*/
+//line 4948 "./o2externs.w"
+
+void OP_GRAMMAR_CPP(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmimp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmcpp_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+rules_reuse_table_implementation(Op_file);
+fsm_class_implementation(Op_file);
+rules_subrules_implementations(Op_file);
+Op_file.close();
+}
+
+/*:148*//*150:*/
+//line 4992 "./o2externs.w"
+
+void user_imp_sym
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_imp_sym);
+if(i!=dir_map->end()){
+T_user_imp_sym* ui = (T_user_imp_sym*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str();
+Op_str<<endl;
+}
+}
+/*:150*//*151:*/
+//line 5009 "./o2externs.w"
+
+void thread_implementation
+(std::ofstream&Op_str){
+T_parallel_parser_phrase*pp_ph= O2_PP_PHASE;
+if(pp_ph==0){
+Op_str<<"// monolithic grammar --- no thread"<<endl;
+return;
+}
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP thread_definition=
+"yacco2::THR _YACCO2_CALL_TYPE\n"
+"%s::%s(yacco2::Parser* Caller_pp){\n"
+" yacco2::Thread_entry& pp_thread_entry = I%s;\n"
+" %s::%s %s_;// parallel-parser's parse table\n"
+"#define ssPARSE_TABLE %s_\n"
+"#include \"wpp_core.h\"\n"
+"}";
+
+int x= sprintf(big_buf_
+,thread_definition
+,fsm_ph->namespace_id()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+KCHARP proc_thread_definition=
+"THR_result _YACCO2_CALL_TYPE\n"
+"%s::PROC_%s(yacco2::Parser* Caller_pp){\n"
+" char called_proc_name[] = \"PROC_%s\";\n"
+" static bool one_time(false);\n"
+" static %s::%s* %s_%s_(0);// parallel-parser's fsm table\n"
+" static Parser* %s_%s_parser(0);\n"
+" Parser* proc_parser(0);\n"
+" if(one_time == false){\n"
+" one_time = true;\n"
+" %s_%s_ = new %s::%s();// parallel-parser's fsm table\n"
+" %s_%s_parser = new Parser(*%s_%s_,Caller_pp);\n"
+" }\n"
+" proc_parser = %s_%s_parser;\n"
+"#include \"wproc_pp_core.h\"\n"
+"}";
+
+x= sprintf(big_buf_
+,proc_thread_definition
+,fsm_ph->namespace_id()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,pp_ph->pp_funct()->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+
+,fsm_ph->namespace_id()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:151*//*152:*/
+//line 5092 "./o2externs.w"
+
+void fsm_reduce_rhs_of_rule_implementation
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP reduce_rhs_of_rule_hdr=
+"void \n"
+"%s::reduce_rhs_of_rule\n"
+" (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){\n"
+" int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];\n"
+" Per_rule_s_reuse_table* rule_reuse_tbl_ptr = \n"
+" fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];\n"
+" Rule_s_reuse_entry* re(0);\n"
+" find_a_recycled_rule(rule_reuse_tbl_ptr,&re);\n"
+" (*Recycled_rule) = re;\n"
+" fnd_re: switch (Sub_rule_no){";
+int x= sprintf(big_buf_
+,reduce_rhs_of_rule_hdr
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*153:*/
+//line 5121 "./o2externs.w"
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+for(;i!=ie;++i){
+rule_def*rd= *i;
+/*154:*/
+//line 5175 "./o2externs.w"
+
+const char*rule_s_ctor= "// no rule's constructor directive";
+T_rule_lhs_phrase*rlhs= rd->rule_lhs();
+if(rlhs!=0){
+SDC_MAP_type*rdlhs_map= rlhs->lhs_directives_map();
+if(rdlhs_map!=0){
+SDC_MAP_ITER_type kkk= rdlhs_map->find(SDC_constructor);
+if(kkk!=rdlhs_map->end()){
+T_constructor* cc = (T_constructor*)kkk->second;
+rule_s_ctor= "sym->ctor();\n";
+}
+}
+}
+
+T_subrules_phrase*sr_ph= rd->subrules();
+SUBRULE_DEFS_ITER_type j= sr_ph->subrules()->begin();
+SUBRULE_DEFS_ITER_type je= sr_ph->subrules()->end();
+KCHARP case_stmt_parta=
+" case rhs%i_%s_:{\n"
+" %s* sym;\n"
+" if(re->rule_ == 0){\n"
+" sym = new %s(parser__);\n"
+" re->rule_ = sym;\n"
+" }else{\n"
+" sym = (%s*)re->rule_;\n"
+" }\n"
+" %s\n"
+" (*Recycled_rule)->rule_ = sym;\n"
+" sym->rule_info__.rhs_no_of_parms__ = %i;\n"
+" \n";
+KCHARP case_stmt_partb= " sym->sr%i();";
+KCHARP case_stmt_partc= " return;}";
+for(;j!=je;++j){
+T_subrule_def*srd= *j;
+
+int no_parms= srd->no_of_elems()-1;
+
+AST*sr_t= srd->subrule_s_tree();
+set<int> eos_filter;
+eos_filter.insert(T_Enum::T_T_called_thread_eosubrule_);
+eos_filter.insert(T_Enum::T_T_null_call_thread_eosubrule_);
+tok_can_ast_functor walk_the_plank_mate;
+ast_prefix_1forest eos_walk
+(*sr_t,&walk_the_plank_mate,&eos_filter,ACCEPT_FILTER);
+tok_can<AST*> eos_can(eos_walk);
+for(int xxx= 0;eos_can.operator[](xxx)!=yacco2::PTR_LR1_eog__;++xxx);
+if(eos_can.empty()==false)--no_parms;
+
+int x= sprintf(big_buf_
+,case_stmt_parta
+,srd->subrule_no_of_rule()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rd->rule_name()->c_str()
+,rule_s_ctor
+,no_parms);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+SDC_MAP_type*sdrmap= srd->subrule_directives();
+
+if(!sdrmap->empty()){
+int x= sprintf(big_buf_,case_stmt_partb,srd->subrule_no_of_rule());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+
+if(rd->rule_lhs()!=0){
+SDC_MAP_type*xxrdmap= rd->rule_lhs()->lhs_directives_map();
+if(xxrdmap!=0){
+SDC_MAP_ITER_type kkk= xxrdmap->find(SDC_op);
+if(kkk!=xxrdmap->end()){
+Op_str<<" sym->op();"<<endl;
+}
+}
+}
+Op_str<<case_stmt_partc<<endl;
+}
+
+
+
+/*:154*/
+//line 5126 "./o2externs.w"
+
+}
+KCHARP default_case_and_end_sw=
+" default: return;\n"
+" }";
+Op_str<<default_case_and_end_sw<<endl;
+
+KCHARP end_rtn=
+"}";
+Op_str<<end_rtn<<endl;
+
+/*:153*/
+//line 5117 "./o2externs.w"
+
+}
+
+/*:152*//*155:*/
+//line 5259 "./o2externs.w"
+
+void OP_GRAMMAR_SYM(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmsym;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmsym_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_imp_sym(Op_file);
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+thread_implementation(Op_file);
+
+fsm_reduce_rhs_of_rule_implementation(Op_file);
+Op_file.close();
+}
+
+/*:155*//*157:*/
+//line 5308 "./o2externs.w"
+
+void user_imp_tbl
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+SDC_MAP_type*dir_map= fsm_class->directives_map();
+SDC_MAP_ITER_type i= dir_map->find(SDC_user_imp_tbl);
+if(i!=dir_map->end()){
+T_user_imp_tbl* ui = (T_user_imp_tbl*)i->second;
+Op_str<<ui->syntax_code()->syntax_code()->c_str();
+Op_str<<endl;
+}
+}
+
+/*:157*//*158:*/
+//line 5323 "./o2externs.w"
+
+void output_la_sets
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+
+COMMON_LA_SETS_ITER_type i= COMMON_LA_SETS.begin();
+COMMON_LA_SETS_ITER_type ie= COMMON_LA_SETS.end();
+for(int idx= 0;i!=ie;++i,++idx){
+LA_SET_type*la_set= *i;
+/*159:*/
+//line 5340 "./o2externs.w"
+
+KCHARP la_set_entry_literal=
+"// %s";
+LA_SET_ITER_type j= la_set->begin();
+LA_SET_ITER_type je= la_set->end();
+for(;j!=je;++j){
+T_in_stbl*tsym= *j;
+int x= sprintf(big_buf_
+,la_set_entry_literal
+,tsym->t_def()->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+/*:159*/
+//line 5334 "./o2externs.w"
+
+/*160:*/
+//line 5364 "./o2externs.w"
+
+KCHARP la_set_hdr=
+"yacco2::UCHAR LA%i_%s[] ={";
+int x= sprintf(big_buf_
+,la_set_hdr
+,idx+1
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*161:*/
+//line 5378 "./o2externs.w"
+
+BIT_MAP_type paired_set;
+LA_SET_ITER_type k= la_set->begin();
+LA_SET_ITER_type ke= la_set->end();
+int en_no(-1);
+for(;k!=ke;++k){
+T_in_stbl*T= *k;
+en_no= T->t_def()->enum_id();
+
+int Q= en_no/NO_BITS_PER_SET_PARTITION;
+int R= en_no%NO_BITS_PER_SET_PARTITION;
+int One(1);
+int E_v= One<<R;
+BIT_MAP_ITER_type e= paired_set.find(Q);
+if(e==paired_set.end()){
+paired_set[Q]= E_v;
+}else{
+int se= e->second;
+int v= se+E_v;
+e->second= v;
+}
+}
+
+/*:161*/
+//line 5374 "./o2externs.w"
+
+/*162:*/
+//line 5402 "./o2externs.w"
+
+KCHARP no_la_set_entries=
+"%i";
+x= sprintf(big_buf_
+,no_la_set_entries
+,paired_set.size()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+BIT_MAP_ITER_type kl= paired_set.begin();
+BIT_MAP_ITER_type kle= paired_set.end();
+for(;kl!=kle;++kl){
+int part_no= kl->first;
+int e_v= kl->second;
+KCHARP la_set_entry=
+",%i,%i";
+x= sprintf(big_buf_
+,la_set_entry
+,part_no
+,e_v
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+KCHARP la_set_hdr_end=
+"};";
+Op_str<<la_set_hdr_end<<endl;
+
+
+/*:162*/
+//line 5375 "./o2externs.w"
+
+
+/*:160*/
+//line 5335 "./o2externs.w"
+
+}
+}
+/*:158*//*163:*/
+//line 5432 "./o2externs.w"
+
+void externs_and_thread_tbl_defs
+(std::ofstream&Op_str){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+
+char big_buf_[BIG_BUFFER_32K];
+STATES_ITER_type i= LR1_STATES.begin();
+STATES_ITER_type ie= LR1_STATES.end();
+int state_cnt(0);
+for(;i!=ie;++i){
+state*s= *i;
+++state_cnt;
+KCHARP state_extern=
+"extern yacco2::State S%i_%s;";
+int x= sprintf(big_buf_
+,state_extern
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*164:*/
+//line 5460 "./o2externs.w"
+
+using namespace NS_yacco2_T_enum;
+if(s->vectored_into_by_elem_sym_==0)continue;
+switch(s->vectored_into_by_elem_){
+case LR1_PARALLEL_OPERATOR:{
+/*165:*/
+//line 5477 "./o2externs.w"
+
+string ar_name;
+rule_def*ar_s_rule_s_name(0);
+int no_of_threads(0);
+S_VECTORS_ITER_type j= s->state_s_vector_.begin();
+S_VECTORS_ITER_type je= s->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+
+if(se->next_state_element_==0)continue;
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));
+if(sym->enumerated_id__!=T_Enum::T_T_called_thread_eosubrule_)continue;
+rule_def*rd= se->subrule_def_->its_rule_def();
+RULES_HAVING_AR_ITER_type ai= RULES_HAVING_AR.find(rd);
+if(ai!=RULES_HAVING_AR.end()){
+ar_s_rule_s_name= rd;
+}
+++no_of_threads;
+}
+}
+if(ar_s_rule_s_name!=0){
+ar_name+= "AR_";
+ar_name+= ar_s_rule_s_name->rule_name()->c_str();
+}
+
+/*:165*/
+//line 5465 "./o2externs.w"
+
+/*166:*/
+//line 5513 "./o2externs.w"
+
+if(no_of_threads> 0){
+KCHARP state_s_thread_tbl_def=
+"struct S%ittd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;\n"
+" yacco2::ULINT (*thd_id_bit_map_ptr__)[];\n"
+" yacco2::Thread_entry* thread_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_def
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_threads
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*168:*/
+//line 5613 "./o2externs.w"
+
+if(ar_name.empty()==true)
+ar_name+= "0";
+
+
+/*:168*/
+//line 5530 "./o2externs.w"
+
+KCHARP state_s_thread_tbl_imp=
+"S%ittd_%s S%itt_%s = {\n"
+" %i // no of threads\n"
+" ,%s //AR_rulename or 0\n"
+" ,0// ptr to thread id bit map";
+x= sprintf(big_buf_
+,state_s_thread_tbl_imp
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,state_cnt
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_threads
+,ar_name.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+j= s->state_s_vector_.begin();
+je= s->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+if(se->next_state_element_==0)continue;
+CAbs_lr1_sym*sym= AST::content(*AST::brother(*se->sr_element_));
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;
+KCHARP state_s_thread_tbl_entry=
+" ,(yacco2::Thread_entry*)&I%s";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_entry
+,called_th->called_thread_name()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+KCHARP state_s_thread_tbl_end=
+"};";
+Op_str<<state_s_thread_tbl_end<<endl;
+}
+/*:166*/
+//line 5466 "./o2externs.w"
+
+break;
+}
+default:continue;
+}
+
+/*:164*/
+//line 5454 "./o2externs.w"
+
+}
+}
+/*:163*//*169:*/
+//line 5620 "./o2externs.w"
+
+const char*determine_shift_element_name(CAbs_lr1_sym*Sym){
+switch(Sym->enumerated_id__){
+case T_Enum::T_T_terminal_def_:{
+T_terminal_def* td = (T_terminal_def*)Sym;
+return td->classsym()->c_str();
+}
+case T_Enum::T_rule_def_:{
+rule_def* rd = (rule_def*)Sym;
+return rd->rule_name()->c_str();
+}
+}
+return"element not found";
+}
+
+/*:169*//*170:*/
+//line 5642 "./o2externs.w"
+
+void output_1st_state_s_shift_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+rule_def*s_rule= (*rules_ph->crt_order())[0];
+int s_rule_enum_no= s_rule->enum_id();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi;
+S_VECTORS_ITER_type svie;
+/*176:*/
+//line 5810 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5882 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5818 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 5652 "./o2externs.w"
+
+++no_of_shift_items;
+bool first_or_2nd_prt(false);
+bool accept_prted(false);
+/*173:*/
+//line 5745 "./o2externs.w"
+
+KCHARP def_of_state_s_shift_entries=
+"struct S%istd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Shift_entry shift_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,def_of_state_s_shift_entries
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP imp_of_state_s_shift_entries_begin=
+"S%istd_%s S%ist_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,imp_of_state_s_shift_entries_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*:173*/
+//line 5656 "./o2externs.w"
+
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5882 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5663 "./o2externs.w"
+
+int goto_state_no= se->goto_state_->state_no_;
+const char*shift_elem_literal= determine_shift_element_name(se->sr_def_element_);
+if(cur_se_enum_no<s_rule_enum_no){
+/*171:*/
+//line 5684 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5667 "./o2externs.w"
+
+}else{
+if(accept_prted==false){
+accept_prted= true;
+/*172:*/
+//line 5715 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_1st_entry=
+" ,{%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:172*/
+//line 5671 "./o2externs.w"
+
+}
+/*171:*/
+//line 5684 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5673 "./o2externs.w"
+
+}
+}
+if(accept_prted==false){
+accept_prted= true;
+/*172:*/
+//line 5715 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_1st_entry=
+" ,{%i,(State*)&S%i_%s} // accept sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,s_rule_enum_no
+,1
+,fsm_class->identifier()->identifier()->c_str()
+,s_rule->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:172*/
+//line 5678 "./o2externs.w"
+
+}
+/*174:*/
+//line 5776 "./o2externs.w"
+
+KCHARP imp_of_shift_entries_end=
+" }// end of shift table\n"
+"};";
+Op_str<<imp_of_shift_entries_end<<endl;
+
+/*:174*/
+//line 5680 "./o2externs.w"
+
+}
+
+/*:170*//*175:*/
+//line 5783 "./o2externs.w"
+
+void output_all_others_state_s_shift_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+bool first_or_2nd_prt(false);
+S_VECTORS_ITER_type svi;
+S_VECTORS_ITER_type svie;
+/*176:*/
+//line 5810 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5882 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5818 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 5791 "./o2externs.w"
+
+if(no_of_shift_items){
+/*173:*/
+//line 5745 "./o2externs.w"
+
+KCHARP def_of_state_s_shift_entries=
+"struct S%istd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Shift_entry shift_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,def_of_state_s_shift_entries
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP imp_of_state_s_shift_entries_begin=
+"S%istd_%s S%ist_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,imp_of_state_s_shift_entries_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_shift_items
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*:173*/
+//line 5793 "./o2externs.w"
+
+S_VECTORS_ITER_type svi= State.state_s_vector_.begin();
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5882 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5800 "./o2externs.w"
+
+int goto_state_no= se->goto_state_->state_no_;
+const char*shift_elem_literal= determine_shift_element_name(se->sr_def_element_);
+/*171:*/
+//line 5684 "./o2externs.w"
+
+if(first_or_2nd_prt==false){
+first_or_2nd_prt= true;
+KCHARP imp_of_state_s_shift_1st_entry=
+" {%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_1st_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+else{
+KCHARP imp_of_state_s_shift_2nd_entry=
+" ,{%i,(State*)&S%i_%s} // shift sym: %s";
+int x= sprintf(big_buf_
+,imp_of_state_s_shift_2nd_entry
+,cur_se_enum_no
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+,shift_elem_literal
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:171*/
+//line 5803 "./o2externs.w"
+
+}
+/*174:*/
+//line 5776 "./o2externs.w"
+
+KCHARP imp_of_shift_entries_end=
+" }// end of shift table\n"
+"};";
+Op_str<<imp_of_shift_entries_end<<endl;
+
+/*:174*/
+//line 5805 "./o2externs.w"
+
+}
+}
+
+/*:175*//*179:*/
+//line 5898 "./o2externs.w"
+
+void output_meta_shifts_separately(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+"yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_PARALLEL_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_INVISIBLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+"yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_ALL_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+"yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_FSET_TRANSIENCE_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+"yacco2::Shift_entry S%iqse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_QUESTIONABLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+}
+
+/*:179*//*180:*/
+//line 5998 "./o2externs.w"
+
+void output_state_s_reduced_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+/*181:*/
+//line 6017 "./o2externs.w"
+
+int no_of_reduces(0);
+S_VECTORS_ITER_type j= State.state_s_vector_.begin();
+S_VECTORS_ITER_type je= State.state_s_vector_.end();
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+S_VECTOR_ELEMS_ITER_type seli= j->second.begin();
+state_element*se= *seli;
+if(cur_se_enum_no>=0)break;
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0){
+no_of_reduces+= j->second.size();
+continue;
+}
+}
+}
+}
+
+/*:181*/
+//line 6003 "./o2externs.w"
+
+/*182:*/
+//line 6037 "./o2externs.w"
+
+if(no_of_reduces> 0){
+KCHARP reduce_def=
+"struct S%irtd_%s{\n"
+" yacco2::USINT no_entries_;\n"
+" yacco2::Reduce_entry reduce_entries_[%i];\n"
+"};";
+int x= sprintf(big_buf_
+,reduce_def
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_reduces
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+KCHARP reduce_imp_begin=
+"S%irtd_%s S%irt_%s = {\n"
+" %i\n"
+" ,\n"
+" {// start of table";
+x= sprintf(big_buf_
+,reduce_imp_begin
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,no_of_reduces
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+/*183:*/
+//line 6074 "./o2externs.w"
+
+j= State.state_s_vector_.begin();
+je= State.state_s_vector_.end();
+int reduce_no(-1);
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+if(cur_se_enum_no>=0)break;
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+++reduce_no;
+state_element*se= *k;
+if(reduce_no==0){
+KCHARP reduce_imp_1st_entry=
+" {(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+int x= sprintf(big_buf_
+,reduce_imp_1st_entry
+,se->common_la_set_idx_+1
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,se->subrule_def_->subrule_no_of_rule()
+,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+KCHARP reduce_imp_2nd_entry=
+" ,{(Set_tbl*)&LA%i_%s,%s::rhs%i_%s_}";
+int x= sprintf(big_buf_
+,reduce_imp_2nd_entry
+,se->common_la_set_idx_+1
+,fsm_class->identifier()->identifier()->c_str()
+,fsm_class->identifier()->identifier()->c_str()
+,se->subrule_def_->subrule_no_of_rule()
+,se->subrule_def_->its_rule_def()->rule_name()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+}
+
+/*:183*/
+//line 6067 "./o2externs.w"
+
+KCHARP reduce_imp_end=
+" }// end of reduce table\n"
+"};";
+Op_str<<reduce_imp_end<<endl;
+}
+/*:182*/
+//line 6004 "./o2externs.w"
+
+}
+
+/*:180*//*184:*/
+//line 6118 "./o2externs.w"
+
+void output_state_s_called_threads_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp=
+"yacco2::Shift_entry S%ipse_%s = \n"
+"{%i,(State*)&S%i_%s};\n";
+}
+
+/*:184*//*185:*/
+//line 6129 "./o2externs.w"
+
+void output_state_s_called_procedure_table(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP call_thread_table_imp=
+"yacco2::Shift_entry S%ipcse_%s = \n"
+"{%i,(State*)&S%i_%s};\n";
+}
+/*:185*//*186:*/
+//line 6139 "./o2externs.w"
+
+void output_questionable_shift(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+"yacco2::Shift_entry S%ipse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_PARALLEL_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_INVISIBLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+"yacco2::Shift_entry S%iase_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_ALL_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+"yacco2::Shift_entry S%ipcse_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_FSET_TRANSIENCE_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+"yacco2::Shift_entry S%iise_%s = {%i,(State*)&S%i_%s};";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,LR1_QUESTIONABLE_SHIFT_OPERATOR
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:186*//*187:*/
+//line 6242 "./o2externs.w"
+
+void output_lr_state(std::ofstream&Op_str,state&State){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+T_fsm_class_phrase*fsm_class= fsm_ph->fsm_class_phrase();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP state_entry=
+"yacco2::State S%i_%s = //State's vectored into symbol: \"%s\" \n"
+"{%i";
+int x= sprintf(big_buf_
+,state_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+,State.entry_symbol_literal()
+,State.state_no_
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+/*188:*/
+//line 6274 "./o2externs.w"
+
+S_VECTORS_ITER_type svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+S_VECTORS_ITER_type svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP parallel_entry=
+",(Shift_entry*)&S%ipse_%s";
+int x= sprintf(big_buf_
+,parallel_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+/*:188*/
+//line 6260 "./o2externs.w"
+
+/*189:*/
+//line 6294 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_ALL_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP all_shift_entry=
+",(Shift_entry*)&S%iase_%s";
+int x= sprintf(big_buf_
+,all_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+/*:189*/
+//line 6261 "./o2externs.w"
+
+/*190:*/
+//line 6314 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_INVISIBLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP invisible_shift_entry=
+",(Shift_entry*)&S%iise_%s";
+int x= sprintf(big_buf_
+,invisible_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+/*:190*/
+//line 6262 "./o2externs.w"
+
+/*191:*/
+//line 6334 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+svie= State.state_s_vector_.end();
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP procedure_call_entry=
+",(Shift_entry*)&S%ipcse_%s";
+int x= sprintf(big_buf_
+,procedure_call_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+/*:191*/
+//line 6263 "./o2externs.w"
+
+/*193:*/
+//line 6375 "./o2externs.w"
+
+/*176:*/
+//line 5810 "./o2externs.w"
+
+int no_of_shift_items(0);
+svi= State.state_s_vector_.begin();
+svie= State.state_s_vector_.end();
+for(;svi!=svie;++svi){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int cur_se_enum_no= svi->first;
+/*178:*/
+//line 5882 "./o2externs.w"
+
+if(cur_se_enum_no>=0){
+}else{
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0)continue;
+if(se->previous_state_element_==0)continue;
+break;
+}
+default:{
+break;
+}
+}
+}
+
+/*:178*/
+//line 5818 "./o2externs.w"
+
+++no_of_shift_items;
+}
+
+/*:176*/
+//line 6376 "./o2externs.w"
+
+if(no_of_shift_items> 0){
+KCHARP shift_entry=
+",(Shift_tbl*)&S%ist_%s";
+int x= sprintf(big_buf_
+,shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}else{
+Op_str<<",0";
+}
+
+
+/*:193*/
+//line 6264 "./o2externs.w"
+
+/*194:*/
+//line 6392 "./o2externs.w"
+
+/*181:*/
+//line 6017 "./o2externs.w"
+
+int no_of_reduces(0);
+S_VECTORS_ITER_type j= State.state_s_vector_.begin();
+S_VECTORS_ITER_type je= State.state_s_vector_.end();
+for(;j!=je;++j){
+int cur_se_enum_no= j->first;
+S_VECTOR_ELEMS_ITER_type seli= j->second.begin();
+state_element*se= *seli;
+if(cur_se_enum_no>=0)break;
+switch(cur_se_enum_no){
+case-T_Enum::T_T_eosubrule_:{
+if(se->next_state_element_==0){
+no_of_reduces+= j->second.size();
+continue;
+}
+}
+}
+}
+
+/*:181*/
+//line 6393 "./o2externs.w"
+
+if(no_of_reduces> 0){
+KCHARP reduce_entry=
+",(Reduce_tbl*)&S%irt_%s";
+int x= sprintf(big_buf_
+,reduce_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+}else{
+Op_str<<",0";
+}
+/*:194*/
+//line 6265 "./o2externs.w"
+
+/*195:*/
+//line 6410 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_PARALLEL_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+if(se->next_state_element_->goto_state_==0){
+Op_str<<",0";
+}else{
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP thread_calls_entry=
+",(State_s_thread_tbl*)&S%itt_%s";
+int x= sprintf(big_buf_
+,thread_calls_entry
+,goto_state_no
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+}
+}else{
+Op_str<<",0";
+}
+
+/*:195*/
+//line 6266 "./o2externs.w"
+
+/*196:*/
+//line 6436 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_FSET_TRANSIENCE_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+if(se->next_state_element_->goto_state_==0){
+Op_str<<",0";
+}else{
+/*167:*/
+//line 5582 "./o2externs.w"
+
+S_VECTORS_ITER_type j= se->goto_state_->state_s_vector_.begin();
+S_VECTORS_ITER_type je= se->goto_state_->state_s_vector_.end();
+for(;j!=je;++j){
+S_VECTOR_ELEMS_type&elem_list= j->second;
+S_VECTOR_ELEMS_ITER_type k= elem_list.begin();
+S_VECTOR_ELEMS_ITER_type ke= elem_list.end();
+for(;k!=ke;++k){
+state_element*se= *k;
+if(se->next_state_element_==0)continue;
+AST*bypassed_thd_eos_t= AST::brother(*se->sr_element_);
+CAbs_lr1_sym*sym= AST::content(*bypassed_thd_eos_t);
+if(sym->enumerated_id__==T_Enum::T_T_called_thread_eosubrule_){
+T_called_thread_eosubrule* called_th = (T_called_thread_eosubrule*)sym;
+KCHARP state_s_thread_tbl_entry=
+",(yacco2::Type_pc_fnct_ptr)&%s::%s";
+int x= sprintf(big_buf_
+,state_s_thread_tbl_entry
+,called_th->ns()->identifier()->c_str()
+,called_th->called_thread_name()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+}
+}
+}
+
+/*:167*/
+//line 6444 "./o2externs.w"
+
+}
+}else{
+Op_str<<",0";
+}
+
+/*:196*/
+//line 6267 "./o2externs.w"
+
+/*192:*/
+//line 6354 "./o2externs.w"
+
+svi= State.state_s_vector_.find(LR1_QUESTIONABLE_SHIFT_OPERATOR);
+if(svi!=svie){
+S_VECTOR_ELEMS_ITER_type seli= svi->second.begin();
+state_element*se= *seli;
+int goto_state_no= se->goto_state_->state_no_;
+KCHARP questionable_shift_entry=
+",(Shift_entry*)&S%iqse_%s";
+int x= sprintf(big_buf_
+,questionable_shift_entry
+,State.state_no_
+,fsm_class->identifier()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+Op_str<<",0";
+}
+
+
+/*:192*/
+//line 6268 "./o2externs.w"
+
+Op_str<<"};"<<endl;
+}
+
+
+/*:187*//*197:*/
+//line 6457 "./o2externs.w"
+
+void emit_each_lr_state_s_tables(std::ofstream&Op_str){
+STATES_ITER_type si= LR1_STATES.begin();
+STATES_ITER_type sie= LR1_STATES.end();
+for(;si!=sie;++si){
+state*cur_state= *si;
+if(cur_state->state_no_==1){
+output_1st_state_s_shift_table(Op_str,*cur_state);
+}else{
+output_all_others_state_s_shift_table(Op_str,*cur_state);
+}
+output_meta_shifts_separately(Op_str,*cur_state);
+output_state_s_reduced_table(Op_str,*cur_state);
+output_state_s_called_threads_table(Op_str,*cur_state);
+output_state_s_called_procedure_table(Op_str,*cur_state);
+output_lr_state(Op_str,*cur_state);
+}
+}
+/*:197*//*198:*/
+//line 6476 "./o2externs.w"
+
+void OP_GRAMMAR_TBL(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsmtbl;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmtbl_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_GRAMMAR_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_imp_tbl(Op_file);
+fsm_cpp_includes(Op_file);
+using_ns_for_fsm_cpp(Op_file);
+output_la_sets(Op_file);
+externs_and_thread_tbl_defs(Op_file);
+emit_each_lr_state_s_tables(Op_file);
+Op_file.close();
+}
+
+/*:198*//*200:*/
+//line 6522 "./o2externs.w"
+
+void enumerate_lrk
+(std::ofstream&Op_str){
+T_lr1_k_phrase*ph= O2_LRK_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:200*//*201:*/
+//line 6549 "./o2externs.w"
+
+void enumerate_rc
+(std::ofstream&Op_str){
+T_rc_phrase*ph= O2_RC_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:201*//*202:*/
+//line 6575 "./o2externs.w"
+
+void enumerate_errors
+(std::ofstream&Op_str){
+T_error_symbols_phrase*ph= O2_ERROR_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+/*:202*//*203:*/
+//line 6601 "./o2externs.w"
+
+void enumerate_T
+(std::ofstream&Op_str){
+T_terminals_phrase*ph= O2_T_PHASE;
+std::vector<T_terminal_def*> *dictionary= ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enumerate_item=
+" ,T_%s_ = %i";
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+int x= sprintf(big_buf_
+,enumerate_item
+,td->classsym()->c_str()
+,td->enum_id()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:203*//*204:*/
+//line 6624 "./o2externs.w"
+
+void enumeration_summary_for_struct
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP summary=
+" sum_total_T = %i\n"
+" ,no_of_terminals = %i\n"
+" ,no_of_raw_chars = %i\n"
+" ,no_of_lr1_constants = %i\n"
+" ,no_of_error_terminals = %i\n"
+" ,start_LRK=%i,end_LRK=%i\n"
+" ,start_RC=%i,end_RC=%i\n"
+" ,start_T=%i,end_T=%i\n"
+" ,start_ERR=%i,end_ERR=%i\n"
+" ,start_R=%i";
+int x= sprintf(big_buf_
+,summary
+,enum_ph->total_enumerate()
+,enum_ph->total_T_enumerate()
+,enum_ph->total_rc_enumerate()
+,enum_ph->total_lrk_enumerate()
+,enum_ph->total_err_enumerate()
+,enum_ph->start_lrk_enumerate(),enum_ph->stop_lrk_enumerate()
+,enum_ph->start_rc_enumerate(),enum_ph->stop_rc_enumerate()
+,enum_ph->start_T_enumerate(),enum_ph->stop_T_enumerate()
+,enum_ph->start_err_enumerate(),enum_ph->stop_err_enumerate()
+,enum_ph->total_enumerate()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:204*//*205:*/
+//line 6658 "./o2externs.w"
+
+void enumeration_define_list
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP enum_list_start=
+" enum enumerated_terminals%s{";
+int x= sprintf(big_buf_
+,enum_list_start," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_summary_for_struct(Op_str);
+enumerate_lrk(Op_str);
+enumerate_rc(Op_str);
+enumerate_T(Op_str);
+enumerate_errors(Op_str);
+
+KCHARP enum_list_end=
+" }; // close defining enum list";
+Op_str<<enum_list_end<<endl;
+}
+
+/*:205*//*206:*/
+//line 6683 "./o2externs.w"
+
+void enumeration_define_structure
+(std::ofstream&Op_str){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP struct_start=
+" struct T_Enum%s{";
+int x= sprintf(big_buf_
+,struct_start," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_define_list(Op_str);
+KCHARP struct_end=
+" }; // close defining T_enum";
+Op_str<<struct_end<<endl;
+}
+/*:206*//*207:*/
+//line 6702 "./o2externs.w"
+
+void enumeration_namespace_for_header
+(std::ofstream&Op_str){
+using namespace NS_yacco2_terminals;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP ns_of_enum_start=
+"namespace %s {";
+int x= sprintf(big_buf_
+,ns_of_enum_start
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+enumeration_define_structure(Op_str);
+KCHARP ns_of_enum_end=
+"} // end of namespace";
+Op_str<<ns_of_enum_end<<endl;
+}
+
+/*:207*//*208:*/
+//line 6724 "./o2externs.w"
+
+void enumeration_include_guard_for_header
+(std::ofstream&Op_str){
+using namespace NS_yacco2_terminals;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,enum_ph->filename_id()->identifier()->c_str()
+,enum_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+enumeration_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+/*:208*//*209:*/
+//line 6746 "./o2externs.w"
+
+void gen_Tes_literals_per_spec_voc
+(std::ofstream&Op_str
+,std::vector<T_terminal_def*> ::iterator I
+,std::vector<T_terminal_def*> ::iterator IE){
+char big_buf_[BIG_BUFFER_32K];
+
+KCHARP literal=
+"%s";
+for(;I!=IE;++I){
+T_terminal_def*td= *I;
+int x= sprintf(big_buf_
+,literal
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+/*:209*//*210:*/
+//line 6766 "./o2externs.w"
+
+void gen_Tes_literals
+(std::ofstream&Op_str){
+T_terminals_phrase*pht= O2_T_PHASE;
+T_rc_phrase*phrc= O2_RC_PHASE;
+T_error_symbols_phrase*phe= O2_ERROR_PHASE;
+T_lr1_k_phrase*phlr= O2_LRK_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP t_alphabet=
+"T-alphabet%s";
+int x= sprintf(big_buf_,t_alphabet," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+gen_Tes_literals_per_spec_voc(Op_str,phlr->crt_order()->begin(),phlr->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,phrc->crt_order()->begin(),phrc->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,pht->crt_order()->begin(),pht->crt_order()->end());
+gen_Tes_literals_per_spec_voc(Op_str,phe->crt_order()->begin(),phe->crt_order()->end());
+KCHARP end_t_alphabet=
+"end-T-alphabet%s";
+x= sprintf(big_buf_,end_t_alphabet," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:210*//*211:*/
+//line 6819 "./o2externs.w"
+
+void OP_ENUMERATION_HEADER(TOKEN_GAGGLE&Error_queue){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+string fn(enum_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_enumeration_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_enum_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+enumeration_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:211*//*212:*/
+//line 6847 "./o2externs.w"
+
+void OP_T_Alphabet(TOKEN_GAGGLE&Error_queue){
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+string fn_literal(enum_ph->filename_id()->identifier()->c_str());
+fn_literal+= Suffix_t_alphabet;
+std::ofstream Op_file;
+Op_file.open(fn_literal.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_enum_filename(fn_literal.c_str());
+sym->set_line_no_and_pos_in_line(*enum_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ENUMERATION_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+intro_comment(Op_file,fn_literal.c_str());
+gen_Tes_literals(Op_file);
+Op_file.close();
+}
+
+/*:212*//*214:*/
+//line 6880 "./o2externs.w"
+
+void errors_loop_thru_and_gen_defs_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= errors_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+"%s";
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_declaration);
+if(j==sdc_map->end()){
+KCHARP shell_of_def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+" %s();\n"
+" };";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,td->classsym()->c_str()
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+T_user_declaration*gw_sdc= (T_user_declaration*)j->second;
+int x= sprintf(big_buf_
+,def_item
+,td->classsym()->c_str()
+,gw_sdc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+j= sdc_map->find(SDC_op);
+if(j!=sdc_map->end()){
+Op_str<<" op();"<<endl;
+}
+j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+KCHARP dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);\n";
+int x= sprintf(big_buf_
+,dtor
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<" };"<<endl;
+}
+}
+}
+
+/*:214*//*215:*/
+//line 6940 "./o2externs.w"
+
+void errors_use_enum_namespace_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_T_namespace=
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_T_namespace
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:215*//*216:*/
+//line 6958 "./o2externs.w"
+
+void errors_namespace_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP namespace_start=
+"namespace %s{";
+int x= sprintf(big_buf_
+,namespace_start
+,errors_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+errors_use_enum_namespace_for_header(Op_str);
+errors_loop_thru_and_gen_defs_for_header(Op_str);
+
+KCHARP namespace_end=
+"}//namespace";
+Op_str<<namespace_end<<endl;
+}
+
+/*:216*//*217:*/
+//line 6981 "./o2externs.w"
+
+void errors_include_guard_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,errors_ph->filename_id()->identifier()->c_str()
+,errors_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+errors_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+
+/*:217*//*218:*/
+//line 7003 "./o2externs.w"
+
+void errors_include_files_for_header
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,Suffix_enumeration_hdr
+,lr_ph->filename_id()->identifier()->c_str()
+,Suffix_LRK_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:218*//*219:*/
+//line 7028 "./o2externs.w"
+
+void OP_ERRORS_HEADER(TOKEN_GAGGLE&Error_queue){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+string fn(errors_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_hdrfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+errors_include_files_for_header(Op_file);
+errors_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:219*//*221:*/
+//line 7059 "./o2externs.w"
+
+void errors_imp_dtor
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_destructor*dtor_t= (T_destructor*)J->second;
+KCHARP dtor_code=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP dtor_code_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+std::string::size_type r=
+dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,dtor_code
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}else{
+x= sprintf(big_buf_
+,dtor_code_noabort
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:221*//*222:*/
+//line 7102 "./o2externs.w"
+
+void errors_imp_implementation
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_user_implementation*imp_t= (T_user_implementation*)J->second;
+Op_str<<imp_t->syntax_code()->syntax_code()->c_str();
+SDC_MAP_type*sdc_map= Td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+errors_imp_dtor(Op_str,Td,j);
+}
+}
+
+/*:222*//*223:*/
+//line 7116 "./o2externs.w"
+
+void errors_imp_shellimplementation
+(std::ofstream&Op_str,T_terminal_def*Td,std::string&Autodelete,std::string&Autoabort){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP shell_of_def_item=
+"%s::\n"
+"%s()\n"
+" T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->t_name()->c_str()
+,Td->classsym()->c_str()
+,"0"
+,Autodelete.c_str()
+,Autoabort.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:223*//*224:*/
+//line 7139 "./o2externs.w"
+
+void errors_loop_thru_and_gen_defs_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+std::vector<T_terminal_def*> *dictionary= errors_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+string auto_delete;
+string auto_abort;
+string dtor_adr;
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_implementation);
+if(td->autodelete()==false){
+auto_delete= "false";
+}else{
+auto_delete= "true";
+}
+if(td->autoabort()==false){
+auto_abort= "false";
+}else{
+auto_abort= "true";
+}
+
+if(j==sdc_map->end()){
+errors_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+}else{
+errors_imp_implementation(Op_str,td,j);
+}
+}
+}
+
+/*:224*//*225:*/
+//line 7175 "./o2externs.w"
+
+void errors_use_enum_namespace_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_namespace=
+" using namespace %s;\n"
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_namespace
+,errors_ph->namespace_id()->identifier()->c_str()
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:225*//*226:*/
+//line 7195 "./o2externs.w"
+
+void errors_include_files_for_imp
+(std::ofstream&Op_str){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,errors_ph->filename_id()->identifier()->c_str()
+,Suffix_Errors_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:226*//*227:*/
+//line 7215 "./o2externs.w"
+
+void OP_ERRORS_CPP(TOKEN_GAGGLE&Error_queue){
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+string fn(errors_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_imp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_impfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*errors_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_ERRORS_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+errors_include_files_for_imp(Op_file);
+errors_use_enum_namespace_for_imp(Op_file);
+errors_loop_thru_and_gen_defs_for_imp(Op_file);
+Op_file.close();
+}
+/*:227*//*229:*/
+//line 7250 "./o2externs.w"
+
+void user_t_loop_thru_and_gen_defs_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= t_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+KCHARP def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+"%s";
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_declaration);
+if(j==sdc_map->end()){
+KCHARP shell_of_def_item=
+" struct %s:public yacco2::CAbs_lr1_sym{\n"
+" %s();\n"
+" };";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,td->classsym()->c_str()
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}else{
+T_user_declaration*gw_sdc= (T_user_declaration*)j->second;
+int x= sprintf(big_buf_
+,def_item
+,td->classsym()->c_str()
+,gw_sdc->syntax_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+
+
+j= sdc_map->find(SDC_op);
+if(j!=sdc_map->end()){
+Op_str<<" op();"<<endl;
+}
+j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+KCHARP dtor=
+" static void dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P);";
+int x= sprintf(big_buf_
+,dtor
+,td->classsym()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+Op_str<<" };"<<endl;
+}
+}
+}
+
+/*:229*//*230:*/
+//line 7310 "./o2externs.w"
+
+void user_t_use_enum_namespace_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_T_namespace=
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_T_namespace
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:230*//*231:*/
+//line 7328 "./o2externs.w"
+
+void user_t_terminals_refs_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+if(t_ph->terminals_refs_code()!=0){
+KCHARP t_ref_code=
+" %s";
+int x= sprintf(big_buf_
+,t_ref_code
+,t_ph->terminals_refs_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:231*//*232:*/
+//line 7346 "./o2externs.w"
+
+void user_t_terminals_sufx_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+if(t_ph->terminals_sufx_code()!=0){
+KCHARP t_sufx_code=
+" %s";
+int x= sprintf(big_buf_
+,t_sufx_code
+,t_ph->terminals_sufx_code()->syntax_code()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+}
+
+/*:232*//*233:*/
+//line 7364 "./o2externs.w"
+
+void user_t_namespace_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP namespace_start=
+"namespace %s{";
+int x= sprintf(big_buf_
+,namespace_start
+,t_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+user_t_use_enum_namespace_for_header(Op_str);
+user_t_terminals_refs_for_header(Op_str);
+user_t_loop_thru_and_gen_defs_for_header(Op_str);
+user_t_terminals_sufx_for_header(Op_str);
+
+KCHARP namespace_end=
+"}//namespace";
+Op_str<<namespace_end<<endl;
+}
+
+/*:233*//*234:*/
+//line 7389 "./o2externs.w"
+
+void user_t_include_guard_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP signal_guard_start=
+"#ifndef __%s_h__\n"
+"#define __%s_h__ 1";
+int x= sprintf(big_buf_
+,signal_guard_start
+,t_ph->filename_id()->identifier()->c_str()
+,t_ph->filename_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+user_t_namespace_for_header(Op_str);
+KCHARP signal_guard_end=
+"#endif";
+Op_str<<signal_guard_end<<endl;
+}
+
+/*:234*//*235:*/
+//line 7411 "./o2externs.w"
+
+void user_t_include_files_for_header
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+T_error_symbols_phrase*errors_ph= O2_ERROR_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"\n"
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,O2_library_file
+,enum_ph->filename_id()->identifier()->c_str()
+,Suffix_enumeration_hdr
+,lr_ph->filename_id()->identifier()->c_str()
+,Suffix_LRK_hdr
+,errors_ph->filename_id()->identifier()->c_str()
+,Suffix_Errors_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:235*//*236:*/
+//line 7441 "./o2externs.w"
+
+void OP_USER_T_HEADER(TOKEN_GAGGLE&Error_queue){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+string fn(t_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_T_hdr;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_hdrfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_USER_T_HEADER_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_t_include_files_for_header(Op_file);
+user_t_include_guard_for_header(Op_file);
+Op_file.close();
+}
+
+/*:236*//*238:*/
+//line 7474 "./o2externs.w"
+
+void user_t_imp_dtor
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_destructor*dtor_t= (T_destructor*)J->second;
+KCHARP dtor_code=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" bool ABORT_STATUS = ((yacco2::Parser*)P)->top_stack_record()->aborted__;\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+KCHARP dtor_code_noabort=
+"void %s::dtor_%s(yacco2::VOIDP This,yacco2::VOIDP P){\n"
+" %s* R = (%s*)(This);\n"
+" %s\n"
+"}";
+std::string::size_type r=
+dtor_t->syntax_code()->syntax_code()->find("ABORT_STATUS");
+int x(0);
+if(r!=std::string::npos){
+x= sprintf(big_buf_
+,dtor_code
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}else{
+x= sprintf(big_buf_
+,dtor_code_noabort
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,dtor_t->syntax_code()->syntax_code()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:238*//*239:*/
+//line 7517 "./o2externs.w"
+
+void user_t_imp_implementation
+(std::ofstream&Op_str,T_terminal_def*Td,SDC_MAP_ITER_type&J){
+char big_buf_[BIG_BUFFER_32K];
+T_user_implementation*imp_t= (T_user_implementation*)J->second;
+Op_str<<imp_t->syntax_code()->syntax_code()->c_str();
+SDC_MAP_type*sdc_map= Td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_destructor);
+if(j!=sdc_map->end()){
+errors_imp_dtor(Op_str,Td,j);
+}
+}
+
+/*:239*//*240:*/
+//line 7531 "./o2externs.w"
+
+void user_t_imp_shellimplementation
+(std::ofstream&Op_str,T_terminal_def*Td,std::string&Autodelete,std::string&Autoabort){
+char big_buf_[BIG_BUFFER_32K];
+KCHARP shell_of_def_item=
+"%s::\n"
+"%s()\n"
+" T_CTOR(\"%s\",T_Enum::T_%s_,%s,%s,%s){}";
+int x= sprintf(big_buf_
+,shell_of_def_item
+,Td->classsym()->c_str()
+,Td->classsym()->c_str()
+,Td->t_name()->c_str()
+,Td->classsym()->c_str()
+,"0"
+,Autodelete.c_str()
+,Autoabort.c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:240*//*241:*/
+//line 7554 "./o2externs.w"
+
+void user_t_loop_thru_and_gen_defs_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+
+std::vector<T_terminal_def*> *dictionary= t_ph->crt_order();
+char big_buf_[BIG_BUFFER_32K];
+string auto_delete;
+string auto_abort;
+string dtor_adr;
+
+std::vector<T_terminal_def*> ::iterator i= dictionary->begin();
+std::vector<T_terminal_def*> ::iterator ie= dictionary->end();
+for(;i!=ie;++i){
+T_terminal_def*td= *i;
+SDC_MAP_type*sdc_map= td->directives_map();
+SDC_MAP_ITER_type j= sdc_map->find(SDC_user_implementation);
+if(td->autodelete()==false){
+auto_delete= "false";
+}else{
+auto_delete= "true";
+}
+if(td->autoabort()==false){
+auto_abort= "false";
+}else{
+auto_abort= "true";
+}
+
+if(j==sdc_map->end()){
+user_t_imp_shellimplementation(Op_str,td,auto_delete,auto_abort);
+}else{
+user_t_imp_implementation(Op_str,td,j);
+}
+}
+}
+
+/*:241*//*242:*/
+//line 7591 "./o2externs.w"
+
+void user_t_use_enum_namespace_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+
+char big_buf_[BIG_BUFFER_32K];
+KCHARP using_namespace=
+" using namespace %s;\n"
+" using namespace %s;";
+int x= sprintf(big_buf_
+,using_namespace
+,t_ph->namespace_id()->identifier()->c_str()
+,enum_ph->namespace_id()->identifier()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:242*//*243:*/
+//line 7611 "./o2externs.w"
+
+void user_t_include_files_for_imp
+(std::ofstream&Op_str){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_lr1_k_phrase*lr_ph= O2_LRK_PHASE;
+char big_buf_[BIG_BUFFER_32K];
+KCHARP include_files=
+"#include \"%s%s\"";
+int x= sprintf(big_buf_
+,include_files
+,t_ph->filename_id()->identifier()->c_str()
+,Suffix_T_hdr
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:243*//*244:*/
+//line 7631 "./o2externs.w"
+
+void OP_USER_T_CPP(TOKEN_GAGGLE&Error_queue){
+T_terminals_phrase*t_ph= O2_T_PHASE;
+string fn(t_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_Errors_imp;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_errors_impfilename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*t_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_USER_T_CPP",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+
+intro_comment(Op_file,fn.c_str());
+user_t_include_files_for_imp(Op_file);
+user_t_use_enum_namespace_for_imp(Op_file);
+user_t_loop_thru_and_gen_defs_for_imp(Op_file);
+Op_file.close();
+}
+
+/*:244*//*246:*/
+//line 7664 "./o2externs.w"
+
+void fsc_prelude_imp
+(std::ofstream&Op_str,std::string&Fn){
+KCHARP pp_thd_nm(0);
+string transitive("n");
+string mono;
+char big_buf_[BIG_BUFFER_32K];
+T_fsm_phrase*fcp= O2_FSM_PHASE;
+T_parallel_parser_phrase*ppp= O2_PP_PHASE;
+T_enum_phrase*enum_ph= O2_T_ENUM_PHASE;
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+rule_def*rd= *i;
+FIRST_SET_type*fs= rd->first_set();
+FIRST_SET_ITER_type j= fs->begin();
+FIRST_SET_ITER_type je= fs->end();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+transitive[0]= 'y';
+break;
+}
+}
+
+KCHARP fsc_prelude=
+"transitive %s\n"
+"grammar-name \"%s\"\n"
+"name-space \"%s\"\n"
+"thread-name \"%s\"\n"
+"monolithic %s\n"
+"file-name \"%s\"\n"
+"no-of-T %i";
+if(ppp==0){
+pp_thd_nm= fcp->fsm_class_phrase()->identifier()->identifier()->c_str();
+mono+= 'y';
+}else{
+pp_thd_nm= ppp->pp_funct()->identifier()->identifier()->c_str();
+mono+= 'n';
+}
+int x= sprintf(big_buf_
+,fsc_prelude
+,transitive.c_str()
+,fcp->filename_id()->identifier()->c_str()
+,fcp->namespace_id()->identifier()->c_str()
+,pp_thd_nm
+,mono.c_str()
+,Fn.c_str()
+,enum_ph->total_enumerate()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:246*//*248:*/
+//line 7793 "./o2externs.w"
+
+void list_of_native_Tes_in_fs_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+int no_Tes_in_list(0);
+string Tes_in_list;
+
+
+STATES_ITER_type si= LR1_STATES.begin();
+state*cur_state= *si;
+int no_of_Tes_in_fs(0);
+std::set<CAbs_lr1_sym*> fs_set;
+
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+RULE_DEFS_TBL_ITER_type i= rules_ph->crt_order()->begin();
+RULE_DEFS_TBL_ITER_type ie= rules_ph->crt_order()->end();
+rule_def*rd= *i;
+FIRST_SET_type*fs= rd->first_set();
+FIRST_SET_ITER_type j= fs->begin();
+FIRST_SET_ITER_type je= fs->end();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+continue;
+}
+++no_Tes_in_list;
+}
+
+done:;
+KCHARP fs_list_of_Tes=
+"list-of-native-first-set-terminals %i";
+KCHARP fs_T_in_list=
+" %s";
+KCHARP end_fs_list_of_Tes=
+"end-list-of-native-first-set-terminals%s";
+int x= sprintf(big_buf_
+,fs_list_of_Tes
+,no_Tes_in_list
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+j= fs->begin();
+for(;j!=je;++j){
+T_in_stbl*tintbl= *j;
+T_terminal_def*tdef= tintbl->t_def();
+if(tdef->enum_id()==LR1_PARALLEL_OPERATOR){
+continue;
+}
+if(tdef->enum_id()==LR1_INVISIBLE_SHIFT_OPERATOR){
+x= sprintf(big_buf_
+,fs_T_in_list
+,LR1_FSET_TRANSIENCE_OPERATOR_LITERAL
+);
+}else{
+x= sprintf(big_buf_
+,fs_T_in_list
+,tdef->classsym()->c_str()
+);
+}
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+x= sprintf(big_buf_,end_fs_list_of_Tes," ");
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:248*//*249:*/
+//line 7863 "./o2externs.w"
+
+void transitive_list_of_threads_in_fs_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+T_rules_phrase*rules_ph= O2_RULES_PHASE;
+AST*rules_tree= rules_ph->phrase_tree();
+AST*start_rule_def_t= AST::get_1st_son(*rules_tree);
+rule_def*rd= (rule_def*)AST::content(*start_rule_def_t);
+
+
+int no_threads_in_list= rd->called_thread_first_set()->size();
+
+KCHARP transitive_thread_list=
+"list-of-transitive-threads %i";
+KCHARP transitive_thread_in_list=
+" %s::%s";
+KCHARP end_transitive_thread_list=
+"end-list-of-transitive-threads%s";
+
+int x= sprintf(big_buf_,transitive_thread_list,no_threads_in_list);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+std::set<T_called_thread_eosubrule*> ::iterator e= rd->called_thread_first_set()->begin();
+std::set<T_called_thread_eosubrule*> ::iterator ee= rd->called_thread_first_set()->end();
+for(;e!=ee;++e){
+T_called_thread_eosubrule*called_thd= *e;
+x= sprintf(big_buf_
+,transitive_thread_in_list
+,called_thd->ns()->identifier()->c_str()
+,called_thd->called_thread_name()->identifier()->c_str());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+x= sprintf
+(big_buf_
+,end_transitive_thread_list," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:249*//*250:*/
+//line 7907 "./o2externs.w"
+
+void used_list_of_threads_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+std::set<string> used_threads;
+STATES_ITER_type i= LR1_STATES.begin();
+STATES_ITER_type ie= LR1_STATES.end();
+for(;i!=ie;++i){
+state*start_state= *i;
+S_VECTOR_ELEMS_type*state_elems_wparallelism(0);
+S_VECTORS_type&vect= start_state->state_s_vector_;
+S_VECTORS_ITER_type vi= vect.find(LR1_PARALLEL_OPERATOR);
+if(vi==vect.end())continue;
+state_elems_wparallelism= &vi->second;
+S_VECTOR_ELEMS_ITER_type k= state_elems_wparallelism->begin();
+S_VECTOR_ELEMS_ITER_type ke= state_elems_wparallelism->end();
+for(;k!=ke;++k){
+state_element*thread_1st_elem= *k;
+AST*rtned_T_t= thread_1st_elem->next_state_element_->sr_element_;
+AST*bypassed_thd_eos_t= AST::brother(*rtned_T_t);
+if(bypassed_thd_eos_t==0)continue;
+CAbs_lr1_sym*sym= AST::content(*bypassed_thd_eos_t);
+if(sym->enumerated_id__!=T_Enum::T_T_called_thread_eosubrule_){
+continue;
+}
+T_called_thread_eosubrule*called_thd= (T_called_thread_eosubrule*)sym;
+
+string fqtnm;
+fqtnm+= called_thd->ns()->identifier()->c_str();
+fqtnm+= "::";
+fqtnm+= called_thd->called_thread_name()->identifier()->c_str();
+if(used_threads.find(fqtnm)==used_threads.end())used_threads.insert(fqtnm);
+}
+}
+KCHARP used_thread_list=
+"list-of-used-threads %i";
+KCHARP used_thread_in_list=
+" %s";
+KCHARP end_used_thread_list=
+"end-list-of-used-threads%s";
+
+int x= sprintf(big_buf_,used_thread_list,used_threads.size());
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+
+std::set<string> ::iterator si= used_threads.begin();
+std::set<string> ::iterator sie= used_threads.end();
+for(;si!=sie;++si){
+x= sprintf(big_buf_
+,used_thread_in_list
+,si->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+x= sprintf
+(big_buf_
+,end_used_thread_list," "
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:250*//*251:*/
+//line 7972 "./o2externs.w"
+
+void grammar_s_comments_for_linker_doc_imp
+(std::ofstream&Op_str){
+char big_buf_[BIG_BUFFER_32K];
+T_fsm_phrase*fcp= O2_FSM_PHASE;
+
+KCHARP fsm_comments=
+"fsm-comments\n"
+"\"%s\"";
+int x= sprintf
+(big_buf_
+,fsm_comments
+,fcp->comment()->c_string()->c_str()
+);
+Op_str.write(big_buf_,x);
+Op_str<<endl;
+}
+
+/*:251*//*252:*/
+//line 7992 "./o2externs.w"
+
+void OP_FSC_FILE(TOKEN_GAGGLE&Error_queue){
+T_fsm_phrase*fsm_ph= O2_FSM_PHASE;
+string fn(fsm_ph->filename_id()->identifier()->c_str());
+fn+= Suffix_fsc;
+std::ofstream Op_file;
+Op_file.open(fn.c_str(),ios_base::out|ios::trunc);
+if(!Op_file){
+CAbs_lr1_sym*sym= new Err_bad_fsmtbl_filename(fn.c_str());
+sym->set_line_no_and_pos_in_line(*fsm_ph->filename_id());
+sym->set_who_created("o2externs.w - OP_FSC_FILE",__LINE__);
+Error_queue.push_back(*sym);
+return;
+}
+intro_comment(Op_file,fn.c_str());
+fsc_prelude_imp(Op_file,fn);
+list_of_native_Tes_in_fs_imp(Op_file);
+transitive_list_of_threads_in_fs_imp(Op_file);
+used_list_of_threads_imp(Op_file);
+grammar_s_comments_for_linker_doc_imp(Op_file);
+Op_file.close();
+}
+
+/*:252*/
+//line 185 "./o2externs.w"
+
+
+
+/*:7*/
diff --git a/web/yacco2/o2testdriver/o2_externs.h b/web/yacco2/o2testdriver/o2_externs.h
new file mode 100644
index 0000000000..ea767bc667
--- /dev/null
+++ b/web/yacco2/o2testdriver/o2_externs.h
@@ -0,0 +1,96 @@
+/*4:*/
+//line 91 "./o2externs.w"
+
+#ifndef o2_externs_
+#define o2_externs_ 1
+
+//line 94 "./o2externs.w"
+
+/*5:*/
+//line 99 "./o2externs.w"
+
+#include "globals.h"
+#include "o2_types.h"
+#include "o2_lcl_opts.h"
+#include "o2_lcl_opt.h"
+#include "pass3.h"
+#include "o2_err_hdlr.h"
+#include "fsm_phrase.h"
+#include "parallel_parser_phrase.h"
+#include "T_enum_phrase.h"
+#include "err_symbols_ph.h"
+#include "rc_phrase.h"
+#include "lr1_k_phrase.h"
+#include "terminals_phrase.h"
+#include "rules_phrase.h"
+#include "yacco2_stbl.h"
+#include "enumerate_T_alphabet.h"
+#include "mpost_output.h"
+#include "prt_xrefs_docs.h"
+#include "cweb_put_k_into_ph.h"
+extern CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern int NO_LR1_STATES;
+extern T_fsm_phrase*O2_FSM_PHASE;
+extern T_parallel_parser_phrase*O2_PP_PHASE;
+extern T_enum_phrase*O2_T_ENUM_PHASE;
+extern T_lr1_k_phrase*O2_LRK_PHASE;
+extern T_rc_phrase*O2_RC_PHASE;
+extern T_error_symbols_phrase*O2_ERROR_PHASE;
+extern T_terminals_phrase*O2_T_PHASE;
+extern T_rules_phrase*O2_RULES_PHASE;
+extern STATES_type LR1_STATES;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern STBL_T_ITEMS_type STBL_T_ITEMS;
+extern RULE_ENO START_OF_RULES_ENUM;
+extern yacco2::AST*GRAMMAR_TREE;
+extern yacco2::AST*CWEB_MARKER;
+extern void WRT_CWEB_MARKER(std::ofstream*Wfile,yacco2::AST*Cweb_marker);
+extern void LOAD_YACCO2_KEYWORDS_INTO_STBL();
+extern void GET_CMD_LINE(int argc,char*argv[]
+,const char*File,yacco2::TOKEN_GAGGLE&Errors);
+extern void DUMP_ERROR_QUEUE(yacco2::TOKEN_GAGGLE&Errors);
+extern void PRINT_RULES_TREE_STRUCTURE(AST*Node);
+extern const char*DATE_AND_TIME();
+extern void YACCO2_PARSE_CMD_LINE
+(yacco2::CHAR&T_sw
+,yacco2::CHAR&ERR_sw,yacco2::CHAR&PRT_sw
+,std::string&Grammar_to_compile
+,yacco2::TOKEN_GAGGLE&Error_queue);
+extern bool PROCESS_INCLUDE_FILE
+(yacco2::Parser&Calling_parser
+,NS_yacco2_terminals::T_file_inclusion&File_include
+,yacco2::token_container_type&T2);
+extern bool PROCESS_KEYWORD_FOR_SYNTAX_CODE
+(yacco2::Parser&Parser
+,yacco2::CAbs_lr1_sym*Keyword
+,yacco2::CAbs_lr1_sym**Cont_tok
+,yacco2::INT*Cont_pos);
+extern void BUILD_GRAMMAR_TREE(yacco2::AST&Item);
+extern void PRINT_GRAMMAR_TREE(AST*Node);
+extern void GEN_FS_OF_RULE(NS_yacco2_terminals::rule_def*Rule_def);
+extern void GEN_CALLED_THREADS_FS_OF_RULE
+(NS_yacco2_terminals::rule_def*Start_rule);
+extern int MAX_USE_CNT_RxR
+(NS_yacco2_terminals::rule_def*Rule_use
+,NS_yacco2_terminals::rule_def*Against_rule);
+extern void XLATE_SYMBOLS_FOR_cweave(const char*Sym_to_xlate,char*Xlated_sym);
+extern void PRT_RULE_S_FIRST_SET(NS_yacco2_terminals::rule_def*Rule_def);
+extern void OP_GRAMMAR_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_SYM(TOKEN_GAGGLE&Error_queue);
+extern void OP_GRAMMAR_TBL(TOKEN_GAGGLE&Error_queue);
+extern void OP_ENUMERATION_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_T_Alphabet(TOKEN_GAGGLE&Error_queue);
+extern void OP_ERRORS_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_ERRORS_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_USER_T_HEADER(TOKEN_GAGGLE&Error_queue);
+extern void OP_USER_T_CPP(TOKEN_GAGGLE&Error_queue);
+extern void OP_FSC_FILE(TOKEN_GAGGLE&Error_queue);
+extern void Print_dump_state(state*State);
+/*:5*/
+//line 95 "./o2externs.w"
+
+#endif
+
+/*:4*/
diff --git a/web/yacco2/o2testdriver/o2_types.h b/web/yacco2/o2testdriver/o2_types.h
new file mode 100644
index 0000000000..d24ba2e43e
--- /dev/null
+++ b/web/yacco2/o2testdriver/o2_types.h
@@ -0,0 +1,536 @@
+/*2:*/
+#line 36 "./o2_types.w"
+
+#ifndef o2_types_
+#define o2_types_ 1
+/*3:*/
+#line 47 "./o2_types.w"
+
+#define NO_BITS_PER_SET_PARTITION 8
+#define CODE_PRESENCE_IN_ARBITRATOR_CODE "pp_accept_queue__"
+#define ACCEPT_FILTER true
+#define BYPASS_FILTER false
+#define Success true
+#define Failure false
+#define Nested_file_cnt_limit 15
+#define O2_library_file "yacco2.h"
+#define Yacco2_holding_file "yacco2cmd.tmp"
+#define Linker_holding_file "linkercmd.tmp"
+#define Max_cweb_item_size 10*1024
+#define Max_buf_size 2*1024
+#define Max_no_subrules 8*1024
+#define EPSILON_YES 0
+#define EPSILON_NO 1
+#define EPSILON_DONT_KNOW 2
+#define EPSILON_MAYBE 3
+#define SDC_user_imp_sym "#user-imp-sym"
+#define SDC_user_imp_tbl "#user-imp-tbl"
+#define SDC_user_prefix_declaration "#user-prefix-declaration"
+#define SDC_user_suffix_declaration "#user-suffix-declaration"
+#define SDC_user_declaration "#user-declaration"
+#define SDC_constructor "#constructor"
+#define SDC_destructor "#destructor"
+#define SDC_op "#op"
+#define SDC_failed "#failed"
+#define SDC_user_implementation "#user-implementation"
+#define SDC_user_imp_implementation "#user-imp-sym"
+#define SDC_user_tbl_implementation "#user-tbl-tbl"
+#define SDC_arbitrator_code "#arbitrator-code"
+#define PP_thread_name "#parallel-thread-function"
+#define Suffix_fsmheader ".h"
+#define Suffix_fsmimp ".cpp"
+#define Suffix_fsmsym "sym.cpp"
+#define Suffix_fsmtbl "tbl.cpp"
+#define Suffix_enumeration_hdr ".h"
+#define Suffix_t_alphabet ".fsc"
+#define Suffix_Errors_hdr ".h"
+#define Suffix_Errors_imp ".cpp"
+#define Suffix_T_hdr ".h"
+#define Suffix_T_imp ".cpp"
+#define Suffix_RC_hdr ".h"
+#define Suffix_RC_imp ".cpp"
+#define Suffix_LRK_hdr ".h"
+#define Suffix_LRK_imp ".cpp"
+#define Suffix_fsc ".fsc"
+#define LR1_COMPATIBLE true
+#define NOT_LR1_COMPATIBLE false
+#define MERGED true
+#define NOT_MERGED false
+#define ABORT_GENING_STATES 2
+#define START_STATE_ENUMERATE -1
+
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR 0
+#define LR1_QUESTIONABLE_SHIFT_OPERATOR_LITERAL "|?|"
+#define LR1_EOG 1
+#define LR1_EOLR 2
+#define LR1_EOLR_LITERAL "eolr"
+#define LR1_PARALLEL_OPERATOR 3
+#define LR1_REDUCE_OPERATOR 4
+#define LR1_REDUCE_OPERATOR_LITERAL "|r|"
+#define LR1_INVISIBLE_SHIFT_OPERATOR 5
+#define LR1_ALL_SHIFT_OPERATOR 6
+#define LR1_FSET_TRANSIENCE_OPERATOR 7
+#define LR1_FSET_TRANSIENCE_OPERATOR_LITERAL "LR1_fset_transience_operator"
+#define LR1_PROCEDURE_CALL_OPERATOR 7
+#define LR1_PROCEDURE_CALL_OPERATOR_LITERAL "|p|"
+#define END_OF_LR1_DEFS 7
+
+#define SMALL_BUFFER_4K 1024*4
+#define BIG_BUFFER_32K 1024*32
+#define THREAD_CALL 0
+#define PROCEDURE_CALL 1
+#define MICROSOFT_THREAD_LIBRARY 1
+#define PTHREAD_LIBRARY 0
+/*:3*/
+#line 39 "./o2_types.w"
+;
+/*4:*/
+#line 124 "./o2_types.w"
+
+typedef int Voc_ENO;
+typedef int RULE_ENO;
+struct state;
+struct state_element;
+struct follow_element;
+/*:4*//*5:*/
+#line 130 "./o2_types.w"
+
+typedef std::map<std::string,yacco2::CAbs_lr1_sym*> SDC_MAP_type;
+/*:5*//*6:*/
+#line 132 "./o2_types.w"
+
+typedef SDC_MAP_type::iterator SDC_MAP_ITER_type;
+/*:6*//*7:*/
+#line 134 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> STBL_T_ITEMS_type;
+/*:7*//*8:*/
+#line 136 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SET_type;
+/*:8*//*9:*/
+#line 138 "./o2_types.w"
+
+typedef T_IN_STBL_SET_type::iterator T_IN_STBL_SET_ITER_type;
+/*:9*//*10:*/
+#line 140 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_in_stbl*> T_IN_STBL_SORTED_SET_type;
+/*:10*//*11:*/
+#line 142 "./o2_types.w"
+
+typedef T_IN_STBL_SORTED_SET_type::iterator T_IN_STBL_SORTED_SET_ITER_type;
+/*:11*//*12:*/
+#line 144 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::rule_in_stbl*> RULE_IN_STBL_SET_type;
+/*:12*//*13:*/
+#line 146 "./o2_types.w"
+
+typedef RULE_IN_STBL_SET_type::iterator RULE_IN_STBL_SET_ITER_type;
+/*:13*//*14:*/
+#line 148 "./o2_types.w"
+
+typedef std::vector<yacco2::CAbs_lr1_sym*> O2_PHRASE_TBL_type;
+/*:14*//*15:*/
+#line 150 "./o2_types.w"
+
+typedef O2_PHRASE_TBL_type::iterator O2_PHRASE_TBL_ITER_type;
+/*:15*//*16:*/
+#line 152 "./o2_types.w"
+
+typedef std::set<NS_yacco2_terminals::rule_in_stbl*> RULES_IN_FS_SET_type;
+/*:16*//*17:*/
+#line 154 "./o2_types.w"
+
+typedef RULES_IN_FS_SET_type::iterator RULES_IN_FS_SET_ITER_type;
+/*:17*//*18:*/
+#line 156 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::rule_def*> RULE_DEFS_TBL_type;
+/*:18*//*19:*/
+#line 158 "./o2_types.w"
+
+typedef RULE_DEFS_TBL_type::iterator RULE_DEFS_TBL_ITER_type;
+/*:19*//*20:*/
+#line 160 "./o2_types.w"
+
+typedef std::vector<NS_yacco2_terminals::T_subrule_def*> SUBRULE_DEFS_type;
+/*:20*//*21:*/
+#line 162 "./o2_types.w"
+
+typedef SUBRULE_DEFS_type::iterator SUBRULE_DEFS_ITER_type;
+/*:21*//*22:*/
+#line 164 "./o2_types.w"
+
+typedef std::map<std::string,NS_yacco2_terminals::T_terminal_def*> T_DEF_MAP_type;
+/*:22*//*23:*/
+#line 166 "./o2_types.w"
+
+typedef T_DEF_MAP_type::iterator T_DEF_MAP_ITER_type;
+/*:23*//*24:*/
+#line 168 "./o2_types.w"
+
+typedef std::set<int> INT_SET_type;
+/*:24*//*25:*/
+#line 170 "./o2_types.w"
+
+typedef INT_SET_type::iterator INT_SET_ITER_type;
+/*:25*//*26:*/
+#line 172 "./o2_types.w"
+
+typedef std::map<int,std::string> INT_STR_MAP_type;
+/*:26*//*27:*/
+#line 174 "./o2_types.w"
+
+typedef INT_STR_MAP_type::iterator INT_STR_MAP_ITER_type;
+/*:27*//*28:*/
+#line 176 "./o2_types.w"
+
+typedef std::set<std::string*> STR_SET_type;
+/*:28*//*29:*/
+#line 178 "./o2_types.w"
+
+typedef STR_SET_type::iterator STR_SET_ITER_type;
+/*:29*//*30:*/
+#line 180 "./o2_types.w"
+
+typedef std::map<NS_yacco2_terminals::T_in_stbl*,STR_SET_type> T_IN_STBL_SET_STR_MAP_type;
+/*:30*//*31:*/
+#line 182 "./o2_types.w"
+
+typedef T_IN_STBL_SET_STR_MAP_type::iterator T_IN_STBL_SET_STR_MAP_ITER_type;
+/*:31*//*32:*/
+#line 184 "./o2_types.w"
+
+typedef std::list<state*> STATES_type;
+/*:32*//*33:*/
+#line 186 "./o2_types.w"
+
+typedef STATES_type::iterator STATES_ITER_type;
+/*:33*//*34:*/
+#line 188 "./o2_types.w"
+
+typedef int Voc_ENO;
+/*:34*//*35:*/
+#line 190 "./o2_types.w"
+
+typedef int RULE_ENO;
+/*:35*//*36:*/
+#line 192 "./o2_types.w"
+
+typedef int T_ENO;
+/*:36*//*37:*/
+#line 195 "./o2_types.w"
+
+typedef std::set<RULE_ENO> RULE_NOS_SET_type;
+/*:37*//*38:*/
+#line 198 "./o2_types.w"
+
+typedef RULE_NOS_SET_type::iterator RULE_NOS_SET_ITER_type;
+/*:38*//*39:*/
+#line 201 "./o2_types.w"
+
+typedef std::set<state*> STATES_SET_type;
+/*:39*//*40:*/
+#line 204 "./o2_types.w"
+
+typedef STATES_SET_type::iterator STATES_SET_ITER_type;
+/*:40*//*41:*/
+#line 207 "./o2_types.w"
+
+typedef std::map<Voc_ENO,STATES_type> LR1_STATES_type;
+/*:41*//*42:*/
+#line 210 "./o2_types.w"
+
+typedef LR1_STATES_type::iterator LR1_STATES_ITER_type;
+/*:42*//*43:*/
+#line 213 "./o2_types.w"
+
+typedef std::list<state_element*> S_VECTOR_ELEMS_type;
+/*:43*//*44:*/
+#line 216 "./o2_types.w"
+
+typedef S_VECTOR_ELEMS_type::iterator S_VECTOR_ELEMS_ITER_type;
+/*:44*//*45:*/
+#line 226 "./o2_types.w"
+
+typedef std::map<Voc_ENO,S_VECTOR_ELEMS_type> S_VECTORS_type;
+/*:45*//*46:*/
+#line 228 "./o2_types.w"
+
+typedef S_VECTORS_type::iterator S_VECTORS_ITER_type;
+/*:46*//*47:*/
+#line 230 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> FOLLOW_SETS_type;
+/*:47*//*48:*/
+#line 232 "./o2_types.w"
+
+typedef FOLLOW_SETS_type::iterator FOLLOW_SETS_ITER_type;
+/*:48*//*49:*/
+#line 234 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> LA_SET_type;
+/*:49*//*50:*/
+#line 236 "./o2_types.w"
+
+typedef LA_SET_type::iterator LA_SET_ITER_type;
+/*:50*//*51:*/
+#line 238 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> SHIFT_SET_type;
+/*:51*//*52:*/
+#line 240 "./o2_types.w"
+
+typedef SHIFT_SET_type::iterator SHIFT_SET_ITER_type;
+/*:52*//*53:*/
+#line 242 "./o2_types.w"
+
+typedef std::list<follow_element*> TRANSITIONS_type;
+/*:53*//*54:*/
+#line 244 "./o2_types.w"
+
+typedef TRANSITIONS_type::iterator TRANSITIONS_ITER_type;
+/*:54*//*55:*/
+#line 246 "./o2_types.w"
+
+typedef std::list<state*> MERGES_type;
+/*:55*//*56:*/
+#line 248 "./o2_types.w"
+
+typedef MERGES_type::iterator MERGES_ITER_type;
+/*:56*//*57:*/
+#line 254 "./o2_types.w"
+
+typedef std::list<AST*> SR_ELEMENTS_type;
+/*:57*//*58:*/
+#line 259 "./o2_types.w"
+
+typedef std::map<RULE_ENO,follow_element*> S_FOLLOW_SETS_type;
+/*:58*//*59:*/
+#line 262 "./o2_types.w"
+
+typedef S_FOLLOW_SETS_type::iterator S_FOLLOW_SETS_ITER_type;
+/*:59*//*60:*/
+#line 271 "./o2_types.w"
+
+typedef std::list<state*> S_CONFLICT_STATES_type;
+/*:60*//*61:*/
+#line 274 "./o2_types.w"
+
+typedef S_CONFLICT_STATES_type::iterator S_CONFLICT_STATES_ITER_type;
+/*:61*//*62:*/
+#line 277 "./o2_types.w"
+
+typedef std::set<rule_in_stbl*> CLOSURE_RULES_type;
+/*:62*//*63:*/
+#line 280 "./o2_types.w"
+
+typedef CLOSURE_RULES_type::iterator CLOSURE_RULES_ITER_type;
+/*:63*//*64:*/
+#line 283 "./o2_types.w"
+
+typedef std::set<T_ENO> FOLLOW_RULES_type;
+/*:64*//*65:*/
+#line 286 "./o2_types.w"
+
+typedef FOLLOW_RULES_type::iterator FOLLOW_RULES_ITER_type;
+/*:65*//*66:*/
+#line 289 "./o2_types.w"
+
+typedef std::set<T_in_stbl*> FIRST_SET_type;
+/*:66*//*67:*/
+#line 292 "./o2_types.w"
+
+typedef FIRST_SET_type::iterator FIRST_SET_ITER_type;
+/*:67*//*68:*/
+#line 294 "./o2_types.w"
+
+typedef vector<T_ENO> T_COUNT_type;
+/*:68*//*69:*/
+#line 296 "./o2_types.w"
+
+typedef T_COUNT_type::iterator T_COUNT_ITER_type;
+/*:69*//*70:*/
+#line 298 "./o2_types.w"
+
+typedef vector<T_in_stbl*> STBL_T_ITEMS_type;
+/*:70*//*71:*/
+#line 300 "./o2_types.w"
+
+typedef STBL_T_ITEMS_type::iterator STBL_T_ITEMS_ITER_type;
+/*:71*//*72:*/
+#line 302 "./o2_types.w"
+
+typedef std::set<rule_def*> RULES_HAVING_AR_type;
+/*:72*//*73:*/
+#line 304 "./o2_types.w"
+
+typedef RULES_HAVING_AR_type::iterator RULES_HAVING_AR_ITER_type;
+/*:73*//*74:*/
+#line 306 "./o2_types.w"
+
+typedef std::vector<LA_SET_type*> COMMON_LA_SETS_type;
+/*:74*//*75:*/
+#line 308 "./o2_types.w"
+
+typedef COMMON_LA_SETS_type::iterator COMMON_LA_SETS_ITER_type;
+/*:75*//*76:*/
+#line 310 "./o2_types.w"
+
+typedef std::map<int,int> BIT_MAP_type;
+/*:76*//*77:*/
+#line 312 "./o2_types.w"
+
+typedef BIT_MAP_type::iterator BIT_MAP_ITER_type;
+
+/*:77*//*78:*/
+#line 315 "./o2_types.w"
+
+struct use_cnt_type{
+rule_def*for_rule_use_cnt_;
+rule_def*against_rule_;
+int use_cnt_;
+use_cnt_type(rule_def*R,rule_def*S):for_rule_use_cnt_(R),against_rule_(S),use_cnt_(0){};
+use_cnt_type(const use_cnt_type&C):for_rule_use_cnt_(C.for_rule_use_cnt_)
+,against_rule_(C.against_rule_),use_cnt_(C.use_cnt_){};
+};
+typedef std::map<int,use_cnt_type> CYCLIC_USE_TBL_type;
+typedef CYCLIC_USE_TBL_type::iterator CYCLIC_USE_TBL_ITER_type;
+/*:78*//*79:*/
+#line 326 "./o2_types.w"
+
+typedef std::set<int> SET_FILTER_type;
+/*:79*//*80:*/
+#line 328 "./o2_types.w"
+
+typedef tok_can<AST*> TOK_CAN_TREE_type;
+
+/*:80*/
+#line 40 "./o2_types.w"
+;
+/*82:*/
+#line 562 "./o2_types.w"
+
+struct gen_context{
+state*for_closure_state_;
+Voc_ENO gen_vector_;
+gen_context(state*S,Voc_ENO Ve);
+};
+
+/*:82*//*83:*/
+#line 582 "./o2_types.w"
+
+struct state_element{
+gen_context cs_vector_combo_gening_it_;
+LA_SET_type*la_set_;
+state*closure_state_;
+state*goto_state_;
+state*reduced_state_;
+state*previous_state_;
+state*self_state_;
+state*closured_state_gening_it_;
+state_element*previous_state_element_;
+state_element*next_state_element_;
+AST*sr_element_;
+CAbs_lr1_sym*sr_def_element_;
+T_subrule_def*subrule_def_;
+int common_la_set_idx_;
+int its_enum_id_;
+state_element(AST*Elem);
+~state_element();
+void fill_la_from_merge(state_element&La_to_fill_in,MERGES_type&Merge,RULE_ENO Rule_no);
+void fill_la_from_transition(state_element&La_to_fill_in,TRANSITIONS_type&Transition);
+bool calc_la(state_element&La_to_fill_in);
+void add_fs_setA_to_LA(follow_element&Fe,LA_SET_type&La_to_fill_in);
+RULE_ENO find_state_element_s_rule_no();
+};
+
+/*:83*//*84:*/
+#line 620 "./o2_types.w"
+
+struct follow_element{
+RULE_ENO rule_no_;
+AST*rule_def_t_;
+state*its_state_;
+FOLLOW_SETS_type follow_set_;
+TRANSITIONS_type transitions_;
+MERGES_type merges_;
+SR_ELEMENTS_type sr_elements_;
+void add_T_to_follow_set(AST*T_element);
+void add_follow_set_contributor(AST*SR_element);
+void add_follow_set_transition(state_element&State_elem,T_eosubrule&Eos);
+void add_follow_set_transition(state_element&State_elem,T_called_thread_eosubrule&Eos);
+void add_follow_set_transition(state_element&State_elem,T_null_call_thread_eosubrule&Eos);
+AST*rule_def_t();
+state*its_state();
+follow_element(RULE_ENO Rule_no,state_element&State_elem,AST&Rule_def_t);
+follow_element(state*State);
+void remove_merge_closure_info();
+void add_merge_closure_info(state&To_merge_closure_state);
+};
+
+/*:84*//*85:*/
+#line 672 "./o2_types.w"
+
+struct state{
+gen_context cs_vector_combo_gening_it_;
+Voc_ENO vectored_into_by_elem_;
+CAbs_lr1_sym*vectored_into_by_elem_sym_;
+int state_no_;
+CLOSURE_RULES_type closure_rule_list_;
+CLOSURE_RULES_type derives_closure_rule_list_;
+FOLLOW_RULES_type follow_rule_list_;
+void add_closure_rules_subrules_to_state(gen_context&Possible_gen_context,state&Closure_state);
+void add_rule_s_subrules_to_state(AST&Start_Rule_def_t,gen_context&Possible_gen_context,state&Closure_state_associate_with);
+bool crt_core_items_of_state
+(S_VECTOR_ELEMS_ITER_type&Iter_begin
+,S_VECTOR_ELEMS_ITER_type&Iter_end
+,gen_context&Gening_context);
+S_VECTORS_type state_s_vector_;
+S_FOLLOW_SETS_type state_s_follow_set_map_;
+S_CONFLICT_STATES_type state_s_conflict_state_list_;
+void add_element_to_state_vector(Voc_ENO Elem_id,state_element&Elem);
+void add_rule_to_closure_list(rule_in_stbl*Rule_in_stbl);
+void add_rule_to_follow_list(RULE_ENO Refered_rule);
+void create_follow_sets_of_state();
+void create_start_state(AST&Start_rule_t);
+bool gen_transitive_states_for_closure_context(gen_context&For_gening_context,state&For_closure_state,state&State);
+
+bool gen_transitive_states_balance_for_closure_vector(gen_context&Gen_context,state&For_closure_state,state&Goto_state);
+
+
+state(Voc_ENO Eno,CAbs_lr1_sym*Entry_sym);
+state(AST*Start_rule_t);
+
+bool gen_a_state
+(gen_context&For_gening_context
+,state&For_closure_state
+,state&Requesting_state,S_VECTORS_ITER_type&Elem_iter);
+
+const char*entry_symbol_literal();
+void add_state_to_gbl_lr1_state_tbls(state*State);
+void add_state_to_conflict_states_list_if(gen_context&Gening_context,state&State);
+state*closure_state_birthing_it_;
+bool is_state_lr1_compatible(state&State_to_eval);
+int are_2_states_compatible_yes_merge(state&To_merge_into_state,state&State_for_merging);
+void merge_state(state&To_merge_into_state,state&State_for_merging);
+int find_2_states_compatible_and_merge(state&State_for_merging);
+bool are_states_equivalent(state&Merge_into_state,state&To_merge_state);
+bool are_gened_states_lr1_compatible();
+bool is_str_rt_bnded(AST*Str);
+bool is_str_epsilonable(AST*Str);
+void crt_start_rule_s_follow_set(AST&Str);
+state();
+void closure_only_derives(AST*Rule_tree);
+int determine_reduced_state_type(state*S);
+int state_type_;
+};
+
+/*:85*/
+#line 41 "./o2_types.w"
+;
+#endif
+
+/*:2*/
diff --git a/web/yacco2/o2testdriver/testdriver.cpp b/web/yacco2/o2testdriver/testdriver.cpp
new file mode 100644
index 0000000000..773ee8a8e4
--- /dev/null
+++ b/web/yacco2/o2testdriver/testdriver.cpp
@@ -0,0 +1,106 @@
+/*6:*/
+#line 132 "./testdriver.w"
+
+/*3:*/
+#line 36 "./testdriver.w"
+
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "test_components.h"
+#include "o2_externs.h"
+
+/*:3*//*4:*/
+#line 44 "./testdriver.w"
+
+int RECURSION_INDEX__(0);
+
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE P3_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+yacco2::TOKEN_GAGGLE tc_recycle_bin;
+T_sym_tbl_report_card report_card;
+std::string tc_file_to_compile;
+STBL_T_ITEMS_type STBL_T_ITEMS;
+
+yacco2::CHAR T_SW('n');
+yacco2::CHAR ERR_SW('n');
+yacco2::CHAR PRT_SW('n');
+STATES_type LR1_STATES;
+LR1_STATES_type LR1_COMMON_STATES;
+bool LR1_HEALTH(LR1_COMPATIBLE);
+int NO_LR1_STATES(0);
+STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+
+
+/*:4*//*5:*/
+#line 67 "./testdriver.w"
+
+int main(int argc,char*argv[]){
+cout<<"Testdriver start"<<endl;
+yacco2::lrclog<<"Testdriver start"<<endl;
+
+LOAD_YACCO2_KEYWORDS_INTO_STBL();
+
+GET_CMD_LINE(argc,argv,Yacco2_holding_file,Error_queue);
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return-1;
+}
+YACCO2_PARSE_CMD_LINE
+(T_SW,ERR_SW,PRT_SW,tc_file_to_compile,Error_queue);
+
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+return-1;
+}
+tok_can<std::ifstream> cmd_line(tc_file_to_compile.c_str());
+if(cmd_line.file_ok()==NO){
+cout<<"Error occurred file does not exist: "<<tc_file_to_compile.c_str()<<endl;
+return 1;
+}
+
+
+yacco2::YACCO2_AR__= 1;
+
+using namespace NS_test_components;
+Ctest_components tc_fsm;
+Parser tc(tc_fsm,&cmd_line,&P3_tokens,0,&Error_queue,&tc_recycle_bin,0);
+tc.parse();
+
+yacco2::TOKEN_GAGGLE::iterator i= P3_tokens.begin();
+yacco2::TOKEN_GAGGLE::iterator ie= P3_tokens.end();
+cout<<"Dump of P3 tokons"<<endl;
+for(int yyy= 1;i!=ie;++i){
+CAbs_lr1_sym*sym= *i;
+if(sym==yacco2::PTR_LR1_eog__)continue;
+cout<<yyy<<":: "<<sym->id()
+<<" file no: "<<sym->external_file_id()
+<<" line no: "<<sym->line_no()
+<<" pos: "<<sym->pos_in_line()
+<<endl;
+yacco2::lrclog<<yyy<<":: "<<sym->id()
+<<" file no: "<<sym->external_file_id()
+<<" line no: "<<sym->line_no()
+<<" pos: "<<sym->pos_in_line()
+<<endl;
+++yyy;
+}
+if(Error_queue.empty()!=true){
+DUMP_ERROR_QUEUE(Error_queue);
+cout<<"Testdriver exit"<<endl;
+yacco2::lrclog<<"Testdriver exit"<<endl;
+return-1;
+}
+
+exit:
+cout<<"Testdriver exit"<<endl;
+yacco2::lrclog<<"Testdriver exit"<<endl;
+return 0;
+}
+/*:5*/
+#line 133 "./testdriver.w"
+;
+
+/*:6*/
diff --git a/web/yacco2/o2testdriver/testdriver.w b/web/yacco2/o2testdriver/testdriver.w
new file mode 100644
index 0000000000..410c1d999a
--- /dev/null
+++ b/web/yacco2/o2testdriver/testdriver.w
@@ -0,0 +1,136 @@
+@q file: testdriver.w@>
+% Copyright Dave Bone 1998 - 2015
+%
+% This Source Code Form is subject to the terms of the Mozilla Public
+% License, v. 2.0. If a copy of the MPL was not distributed with this
+% file, You can obtain one at http://mozilla.org/MPL/2.0/.
+%
+\input "eplain"
+\input "supp-pdf"
+\input"/usr/local/yacco2/diagrams/o2mac.tex"
+@i "/yacco2/license.w"
+@** Testdriver introduction.\fbreak
+Testout the lexical part of \O2.
+This is a quick and dirty program originally c++
+but now literate? So don't critique me on its sparseness.
+Its header files etc are cloned from \O2's implementation.
+Its logic is the same pattern as \O2{} program.
+Same notes and chords to parsing.
+
+The driver uses the {\bf{test\_components.lex}} grammar to parse and test out the data files inputs.
+It is equivalent to \O2's {\bf{pass3.lex}} token pass without
+the other lexical components.
+In {\bf{\Whereyacco2/qa}}, there are various dat files acting as exercisers
+for testdriver.
+{\bf{\Whereyacco2/qa/o2testdriver\_tests.bat}} bash script runs the various tests.
+
+The claim-to-fame for {\bf{test\_components.lex}} is how the {\bf{arbitrator-code}}
+is placed within a rule that has direct thread calls.
+Rule {\bf{Rtoken}} closures these other rules that directly call threads.
+Due to current \O2{} implementation, this is a requirement to gen the arbitrator
+procedure.
+Why not have a read: {\bf{\Whereyacco2/docs/test\_components.pdf}} with its enlightened comments.
+
+
+@*2 Append header files for testdriver environment.\fbreak
+@<accrue testdriver code@>+=
+#include "globals.h"
+#include "yacco2_stbl.h"
+using namespace yacco2_stbl;
+#include "test_components.h"
+#include "o2_externs.h"
+
+@** Define variables.\fbreak
+@<accrue testdriver code@>+=
+int RECURSION_INDEX__(0);
+
+YACCO2_define_trace_variables();
+yacco2::TOKEN_GAGGLE P3_tokens;
+yacco2::TOKEN_GAGGLE Error_queue;
+yacco2::TOKEN_GAGGLE tc_recycle_bin;
+T_sym_tbl_report_card report_card;
+std::string tc_file_to_compile;
+STBL_T_ITEMS_type STBL_T_ITEMS;
+
+yacco2::CHAR T_SW('n');
+yacco2::CHAR ERR_SW('n');
+yacco2::CHAR PRT_SW('n');
+STATES_type LR1_STATES;
+LR1_STATES_type LR1_COMMON_STATES;
+bool LR1_HEALTH(LR1_COMPATIBLE);
+int NO_LR1_STATES(0);
+STATES_SET_type VISITED_MERGE_STATES_IN_LA_CALC;
+CYCLIC_USE_TBL_type CYCLIC_USE_TABLE;
+
+
+@** Mainline.\fbreak
+@<accrue testdriver code@>+=
+int main(int argc, char* argv[]){
+cout << "Testdriver start" << endl;
+yacco2::lrclog << "Testdriver start" << endl;
+
+LOAD_YACCO2_KEYWORDS_INTO_STBL();
+
+ GET_CMD_LINE(argc,argv,Yacco2_holding_file,Error_queue);
+ if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ return-1;
+ }
+YACCO2_PARSE_CMD_LINE
+(T_SW,ERR_SW,PRT_SW,tc_file_to_compile,Error_queue);
+
+ if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ return-1;
+ }
+ tok_can<std::ifstream> cmd_line(tc_file_to_compile.c_str());
+ if(cmd_line.file_ok() == NO){
+ cout << "Error occurred file does not exist: " << tc_file_to_compile.c_str() << endl;
+ return 1;
+ }
+ //|yacco2::YACCO2_TH__ = 1;|//watch test\_component.lex parse
+ //|yacco2::YACCO2_T__ = 1;|//watch terminals as fetched
+ yacco2::YACCO2_AR__ = 1;//watch arbitration
+ //|yacco2::YACCO2_MSG__ = 1;|//watch communication between threads
+ using namespace NS_test_components;
+ Ctest_components tc_fsm;
+ Parser tc(tc_fsm,&cmd_line,&P3_tokens,0,&Error_queue,&tc_recycle_bin,0);
+ tc.parse();
+
+ yacco2::TOKEN_GAGGLE::iterator i = P3_tokens.begin();
+ yacco2::TOKEN_GAGGLE::iterator ie = P3_tokens.end();
+ cout << "Dump of P3 tokons" << endl;
+ for(int yyy = 1;i != ie;++i){
+ CAbs_lr1_sym* sym = *i;
+ if(sym == yacco2::PTR_LR1_eog__) continue;
+ cout << yyy << ":: " << sym->id()
+ << " file no: " << sym->external_file_id()
+ << " line no: " << sym->line_no()
+ << " pos: " << sym->pos_in_line()
+ << endl;
+ yacco2::lrclog << yyy << ":: " << sym->id()
+ << " file no: " << sym->external_file_id()
+ << " line no: " << sym->line_no()
+ << " pos: " << sym->pos_in_line()
+ << endl;
+ ++yyy;
+ }
+ if(Error_queue.empty()!=true){
+ DUMP_ERROR_QUEUE(Error_queue);
+ cout << "Testdriver exit" << endl;
+ yacco2::lrclog << "Testdriver exit" << endl;
+ return-1;
+ }
+ // |yacco2::Delete_tokens(Error_queue,true);|
+exit:
+ cout << "Testdriver exit" << endl;
+ yacco2::lrclog << "Testdriver exit" << endl;
+ return 0;
+}
+@*2 Testdriver implementation.\fbreak
+Output program to |testdriver.cpp|.
+@(testdriver.cpp@>=
+@<accrue testdriver code@>;
+
+@** Index.
+
diff --git a/web/yacco2/qa/1.dat b/web/yacco2/qa/1.dat
new file mode 100644
index 0000000000..3fbd62fac0
--- /dev/null
+++ b/web/yacco2/qa/1.dat
@@ -0,0 +1,7 @@
+/*
+ $echo file: 1.dat
+ $echo test integer, include, integer
+*/
+1
+@"/usr/local/yacco2/qa/a.dat"
+2 \ No newline at end of file
diff --git a/web/yacco2/qa/LR1_sp4.cpp b/web/yacco2/qa/LR1_sp4.cpp
new file mode 100644
index 0000000000..bab60db6b2
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp4.cpp
@@ -0,0 +1,75 @@
+/*
+ File: LR1_sp4.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp4;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clr1_sp4_fsm::
+ Clr1_sp4_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_sp4.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:13 2014 "
+ ,S1_Clr1_sp4_fsm){
+
+ }
+
+Clr1_sp4_fsm::~Clr1_sp4_fsm(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_sp4_fsm::failed(){
+ return false;
+ }
+ void Clr1_sp4_fsm::op(){
+}
+int Clr1_sp4_fsm::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rlr1_sp4::Rlr1_sp4(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_sp4",0,Clr1_sp4_fsm::R_Rlr1_sp4_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Clr1_sp4_fsm::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_sp4_fsm::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_sp4_fsm::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/LR1_sp4.fsc b/web/yacco2/qa/LR1_sp4.fsc
new file mode 100644
index 0000000000..22497632c7
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp4.fsc
@@ -0,0 +1,21 @@
+/*
+ File: LR1_sp4.fsc
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+transitive n
+grammar-name "LR1_sp4"
+name-space "NS_LR1_sp4"
+thread-name "Clr1_sp4_fsm"
+monolithic y
+file-name "LR1_sp4.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/LR1_sp4.h b/web/yacco2/qa/LR1_sp4.h
new file mode 100644
index 0000000000..1e43c2bf69
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp4.h
@@ -0,0 +1,76 @@
+/*
+ File: LR1_sp4.h
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#ifndef __LR1_sp4_h__
+#define __LR1_sp4_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_sp4_fsm;
+namespace NS_LR1_sp4 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clr1_sp4_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_sp4_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_sp4_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,rhs3_RS_ = 4
+ ,rhs4_RS_ = 5
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 6
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 15
+ Clr1_sp4_fsm();
+ ~Clr1_sp4_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rlr1_sp4;
+struct RS;
+struct RA;
+struct RB;
+struct Rlr1_sp4:public yacco2::CAbs_lr1_sym {
+ Rlr1_sp4(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/LR1_sp4sym.cpp b/web/yacco2/qa/LR1_sp4sym.cpp
new file mode 100644
index 0000000000..ff64e07a2f
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp4sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: LR1_sp4sym.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp4;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_sp4_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_sp4_:{
+ Rlr1_sp4* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_sp4(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_sp4*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/LR1_sp4tbl.cpp b/web/yacco2/qa/LR1_sp4tbl.cpp
new file mode 100644
index 0000000000..9dbca98c32
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp4tbl.cpp
@@ -0,0 +1,267 @@
+/*
+ File: LR1_sp4tbl.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp4;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Clr1_sp4_fsm[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Clr1_sp4_fsm[] ={
+1
+,0,4
+};
+// raw_d
+yacco2::UCHAR LA3_Clr1_sp4_fsm[] ={
+1
+,13,16
+};
+// raw_c
+yacco2::UCHAR LA4_Clr1_sp4_fsm[] ={
+1
+,13,8
+};
+extern yacco2::State S1_Clr1_sp4_fsm;
+extern yacco2::State S2_Clr1_sp4_fsm;
+extern yacco2::State S3_Clr1_sp4_fsm;
+extern yacco2::State S4_Clr1_sp4_fsm;
+extern yacco2::State S5_Clr1_sp4_fsm;
+extern yacco2::State S6_Clr1_sp4_fsm;
+extern yacco2::State S7_Clr1_sp4_fsm;
+extern yacco2::State S8_Clr1_sp4_fsm;
+extern yacco2::State S9_Clr1_sp4_fsm;
+extern yacco2::State S10_Clr1_sp4_fsm;
+extern yacco2::State S11_Clr1_sp4_fsm;
+extern yacco2::State S12_Clr1_sp4_fsm;
+extern yacco2::State S13_Clr1_sp4_fsm;
+extern yacco2::State S14_Clr1_sp4_fsm;
+extern yacco2::State S15_Clr1_sp4_fsm;
+struct S1std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Clr1_sp4_fsm S1st_Clr1_sp4_fsm = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_sp4_fsm} // shift sym: raw_a
+ ,{106,(State*)&S7_Clr1_sp4_fsm} // shift sym: raw_b
+ ,{569,(State*)&S1_Clr1_sp4_fsm} // accept sym: Rlr1_sp4
+ ,{570,(State*)&S12_Clr1_sp4_fsm} // shift sym: RS
+ }// end of shift table
+};
+yacco2::State S1_Clr1_sp4_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_sp4_fsm,0,0,0,0};
+struct S2std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clr1_sp4_fsm S2st_Clr1_sp4_fsm = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S14_Clr1_sp4_fsm} // shift sym: raw_f
+ ,{571,(State*)&S3_Clr1_sp4_fsm} // shift sym: RA
+ ,{572,(State*)&S5_Clr1_sp4_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S2_Clr1_sp4_fsm = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_sp4_fsm,0,0,0,0};
+struct S3std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_sp4_fsm S3st_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S4_Clr1_sp4_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S3_Clr1_sp4_fsm = //State's vectored into symbol: "RA"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_sp4_fsm,0,0,0,0};
+struct S4rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_sp4_fsm S4rt_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_sp4_fsm = //State's vectored into symbol: "c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_sp4_fsm,0,0,0};
+struct S5std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clr1_sp4_fsm S5st_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S6_Clr1_sp4_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S5_Clr1_sp4_fsm = //State's vectored into symbol: "RB"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_sp4_fsm,0,0,0,0};
+struct S6rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_sp4_fsm S6rt_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_sp4_fsm = //State's vectored into symbol: "d"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_sp4_fsm,0,0,0};
+struct S7std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Clr1_sp4_fsm S7st_Clr1_sp4_fsm = {
+ 3
+ ,
+ {// start of table
+ {110,(State*)&S15_Clr1_sp4_fsm} // shift sym: raw_f
+ ,{571,(State*)&S8_Clr1_sp4_fsm} // shift sym: RA
+ ,{572,(State*)&S10_Clr1_sp4_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S7_Clr1_sp4_fsm = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_sp4_fsm,0,0,0,0};
+struct S8std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Clr1_sp4_fsm S8st_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S9_Clr1_sp4_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S8_Clr1_sp4_fsm = //State's vectored into symbol: "RA"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_sp4_fsm,0,0,0,0};
+struct S9rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clr1_sp4_fsm S9rt_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs3_RS_}
+ }// end of reduce table
+};
+yacco2::State S9_Clr1_sp4_fsm = //State's vectored into symbol: "d"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clr1_sp4_fsm,0,0,0};
+struct S10std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Clr1_sp4_fsm S10st_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S11_Clr1_sp4_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S10_Clr1_sp4_fsm = //State's vectored into symbol: "RB"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clr1_sp4_fsm,0,0,0,0};
+struct S11rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clr1_sp4_fsm S11rt_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs4_RS_}
+ }// end of reduce table
+};
+yacco2::State S11_Clr1_sp4_fsm = //State's vectored into symbol: "c"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clr1_sp4_fsm,0,0,0};
+struct S12std_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clr1_sp4_fsm S12st_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Clr1_sp4_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Clr1_sp4_fsm = //State's vectored into symbol: "RS"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_sp4_fsm,0,0,0,0};
+struct S13rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_sp4_fsm S13rt_Clr1_sp4_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_Rlr1_sp4_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_sp4_fsm = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_sp4_fsm,0,0,0};
+struct S14rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S14rtd_Clr1_sp4_fsm S14rt_Clr1_sp4_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA4_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S14_Clr1_sp4_fsm = //State's vectored into symbol: "f"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clr1_sp4_fsm,0,0,0};
+struct S15rtd_Clr1_sp4_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S15rtd_Clr1_sp4_fsm S15rt_Clr1_sp4_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA3_Clr1_sp4_fsm,Clr1_sp4_fsm::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_sp4_fsm = //State's vectored into symbol: "f"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_sp4_fsm,0,0,0};
diff --git a/web/yacco2/qa/LR1_sp5.cpp b/web/yacco2/qa/LR1_sp5.cpp
new file mode 100644
index 0000000000..842b476760
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp5.cpp
@@ -0,0 +1,93 @@
+/*
+ File: LR1_sp5.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp5.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp5;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Clr1_sp5_fsm::
+ Clr1_sp5_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_sp5.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:13 2014 "
+ ,S1_Clr1_sp5_fsm){
+
+ }
+
+Clr1_sp5_fsm::~Clr1_sp5_fsm(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_sp5_fsm::failed(){
+ return false;
+ }
+ void Clr1_sp5_fsm::op(){
+}
+int Clr1_sp5_fsm::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,2 // subrule 7 for rule 3
+ ,3 // subrule 8 for rule 4
+ ,4 // subrule 9 for rule 5
+ ,4 // subrule 10 for rule 5
+ ,4 // subrule 11 for rule 5
+ ,5 // subrule 12 for rule 6
+ ,5 // subrule 13 for rule 6
+};
+Rlr1_sp5::Rlr1_sp5(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_sp5",0,Clr1_sp5_fsm::R_Rlr1_sp5_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Clr1_sp5_fsm::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_sp5_fsm::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_sp5_fsm::R_RB_,P,false,false){
+}
+
+RD::RD(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RD",0,Clr1_sp5_fsm::R_RD_,P,false,false){
+}
+
+RE::RE(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RE",0,Clr1_sp5_fsm::R_RE_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/LR1_sp5.fsc b/web/yacco2/qa/LR1_sp5.fsc
new file mode 100644
index 0000000000..9a9672f992
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp5.fsc
@@ -0,0 +1,21 @@
+/*
+ File: LR1_sp5.fsc
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+transitive n
+grammar-name "LR1_sp5"
+name-space "NS_LR1_sp5"
+thread-name "Clr1_sp5_fsm"
+monolithic y
+file-name "LR1_sp5.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_d
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/LR1_sp5.h b/web/yacco2/qa/LR1_sp5.h
new file mode 100644
index 0000000000..6c1f7f83ac
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp5.h
@@ -0,0 +1,96 @@
+/*
+ File: LR1_sp5.h
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#ifndef __LR1_sp5_h__
+#define __LR1_sp5_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_sp5_fsm;
+namespace NS_LR1_sp5 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Clr1_sp5_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_sp5_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_sp5_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,rhs3_RS_ = 4
+ ,rhs4_RS_ = 5
+ ,rhs5_RS_ = 6
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 7
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 8
+ ,R_RD_ = 573//start_of_rule_list + 8
+ ,rhs1_RD_ = 9
+ ,rhs2_RD_ = 10
+ ,rhs3_RD_ = 11
+ ,R_RE_ = 574//start_of_rule_list + 10
+ ,rhs1_RE_ = 12
+ ,rhs2_RE_ = 13
+ };
+ //no of la sets = 4
+ //no of states = 22
+ Clr1_sp5_fsm();
+ ~Clr1_sp5_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+ };
+struct Rlr1_sp5;
+struct RS;
+struct RA;
+struct RB;
+struct RD;
+struct RE;
+struct Rlr1_sp5:public yacco2::CAbs_lr1_sym {
+ Rlr1_sp5(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+struct RD:public yacco2::CAbs_lr1_sym {
+ RD(yacco2::Parser* P);
+ public:
+};
+
+struct RE:public yacco2::CAbs_lr1_sym {
+ RE(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/LR1_sp5sym.cpp b/web/yacco2/qa/LR1_sp5sym.cpp
new file mode 100644
index 0000000000..f42ba5ef0a
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp5sym.cpp
@@ -0,0 +1,209 @@
+/*
+ File: LR1_sp5sym.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp5.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp5;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_sp5_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_sp5_:{
+ Rlr1_sp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_sp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_sp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs4_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs5_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/LR1_sp5tbl.cpp b/web/yacco2/qa/LR1_sp5tbl.cpp
new file mode 100644
index 0000000000..12f2354af0
--- /dev/null
+++ b/web/yacco2/qa/LR1_sp5tbl.cpp
@@ -0,0 +1,391 @@
+/*
+ File: LR1_sp5tbl.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "LR1_sp5.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_LR1_sp5;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_z
+yacco2::UCHAR LA1_Clr1_sp5_fsm[] ={
+2
+,0,2
+,16,4
+};
+// raw_x
+yacco2::UCHAR LA2_Clr1_sp5_fsm[] ={
+1
+,16,1
+};
+// LR1_eog
+yacco2::UCHAR LA3_Clr1_sp5_fsm[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Clr1_sp5_fsm[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clr1_sp5_fsm;
+extern yacco2::State S2_Clr1_sp5_fsm;
+extern yacco2::State S3_Clr1_sp5_fsm;
+extern yacco2::State S4_Clr1_sp5_fsm;
+extern yacco2::State S5_Clr1_sp5_fsm;
+extern yacco2::State S6_Clr1_sp5_fsm;
+extern yacco2::State S7_Clr1_sp5_fsm;
+extern yacco2::State S8_Clr1_sp5_fsm;
+extern yacco2::State S9_Clr1_sp5_fsm;
+extern yacco2::State S10_Clr1_sp5_fsm;
+extern yacco2::State S11_Clr1_sp5_fsm;
+extern yacco2::State S12_Clr1_sp5_fsm;
+extern yacco2::State S13_Clr1_sp5_fsm;
+extern yacco2::State S14_Clr1_sp5_fsm;
+extern yacco2::State S15_Clr1_sp5_fsm;
+extern yacco2::State S16_Clr1_sp5_fsm;
+extern yacco2::State S17_Clr1_sp5_fsm;
+extern yacco2::State S18_Clr1_sp5_fsm;
+extern yacco2::State S19_Clr1_sp5_fsm;
+extern yacco2::State S20_Clr1_sp5_fsm;
+extern yacco2::State S21_Clr1_sp5_fsm;
+extern yacco2::State S22_Clr1_sp5_fsm;
+struct S1std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Clr1_sp5_fsm S1st_Clr1_sp5_fsm = {
+ 6
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_sp5_fsm} // shift sym: raw_a
+ ,{108,(State*)&S4_Clr1_sp5_fsm} // shift sym: raw_d
+ ,{569,(State*)&S1_Clr1_sp5_fsm} // accept sym: Rlr1_sp5
+ ,{570,(State*)&S17_Clr1_sp5_fsm} // shift sym: RS
+ ,{571,(State*)&S19_Clr1_sp5_fsm} // shift sym: RA
+ ,{572,(State*)&S21_Clr1_sp5_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S1_Clr1_sp5_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_sp5_fsm,0,0,0,0};
+struct S2std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clr1_sp5_fsm S2st_Clr1_sp5_fsm = {
+ 3
+ ,
+ {// start of table
+ {106,(State*)&S3_Clr1_sp5_fsm} // shift sym: raw_b
+ ,{110,(State*)&S10_Clr1_sp5_fsm} // shift sym: raw_f
+ ,{573,(State*)&S16_Clr1_sp5_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S2_Clr1_sp5_fsm = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_sp5_fsm,0,0,0,0};
+struct S3std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_Clr1_sp5_fsm S3st_Clr1_sp5_fsm = {
+ 3
+ ,
+ {// start of table
+ {108,(State*)&S4_Clr1_sp5_fsm} // shift sym: raw_d
+ ,{571,(State*)&S5_Clr1_sp5_fsm} // shift sym: RA
+ ,{572,(State*)&S8_Clr1_sp5_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S3_Clr1_sp5_fsm = //State's vectored into symbol: "b"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_sp5_fsm,0,0,0,0};
+struct S4rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S4rtd_Clr1_sp5_fsm S4rt_Clr1_sp5_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_RA_}
+ ,{(Set_tbl*)&LA2_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_sp5_fsm = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_sp5_fsm,0,0,0};
+struct S5std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Clr1_sp5_fsm S5st_Clr1_sp5_fsm = {
+ 2
+ ,
+ {// start of table
+ {130,(State*)&S6_Clr1_sp5_fsm} // shift sym: raw_z
+ ,{574,(State*)&S7_Clr1_sp5_fsm} // shift sym: RE
+ }// end of shift table
+};
+struct S5rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clr1_sp5_fsm S5rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S5_Clr1_sp5_fsm = //State's vectored into symbol: "RA"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_sp5_fsm,(Reduce_tbl*)&S5rt_Clr1_sp5_fsm,0,0,0};
+struct S6rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_sp5_fsm S6rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_sp5_fsm = //State's vectored into symbol: "z"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_sp5_fsm,0,0,0};
+struct S7rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clr1_sp5_fsm S7rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S7_Clr1_sp5_fsm = //State's vectored into symbol: "RE"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clr1_sp5_fsm,0,0,0};
+struct S8std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Clr1_sp5_fsm S8st_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S9_Clr1_sp5_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S8_Clr1_sp5_fsm = //State's vectored into symbol: "RB"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_sp5_fsm,0,0,0,0};
+struct S9rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clr1_sp5_fsm S9rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S9_Clr1_sp5_fsm = //State's vectored into symbol: "x"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clr1_sp5_fsm,0,0,0};
+struct S10std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S10std_Clr1_sp5_fsm S10st_Clr1_sp5_fsm = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S11_Clr1_sp5_fsm} // shift sym: raw_a
+ ,{108,(State*)&S4_Clr1_sp5_fsm} // shift sym: raw_d
+ ,{571,(State*)&S13_Clr1_sp5_fsm} // shift sym: RA
+ ,{572,(State*)&S14_Clr1_sp5_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S10_Clr1_sp5_fsm = //State's vectored into symbol: "f"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clr1_sp5_fsm,0,0,0,0};
+struct S11std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S11std_Clr1_sp5_fsm S11st_Clr1_sp5_fsm = {
+ 2
+ ,
+ {// start of table
+ {110,(State*)&S10_Clr1_sp5_fsm} // shift sym: raw_f
+ ,{573,(State*)&S12_Clr1_sp5_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S11_Clr1_sp5_fsm = //State's vectored into symbol: "a"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Clr1_sp5_fsm,0,0,0,0};
+struct S12rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clr1_sp5_fsm S12rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs3_RD_}
+ }// end of reduce table
+};
+yacco2::State S12_Clr1_sp5_fsm = //State's vectored into symbol: "RD"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clr1_sp5_fsm,0,0,0};
+struct S13rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_sp5_fsm S13rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_sp5_fsm = //State's vectored into symbol: "RA"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_sp5_fsm,0,0,0};
+struct S14std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Clr1_sp5_fsm S14st_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S15_Clr1_sp5_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S14_Clr1_sp5_fsm = //State's vectored into symbol: "RB"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Clr1_sp5_fsm,0,0,0,0};
+struct S15rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clr1_sp5_fsm S15rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs2_RD_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_sp5_fsm = //State's vectored into symbol: "x"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_sp5_fsm,0,0,0};
+struct S16rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_sp5_fsm S16rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs3_RS_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_sp5_fsm = //State's vectored into symbol: "RD"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clr1_sp5_fsm,0,0,0};
+struct S17std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Clr1_sp5_fsm S17st_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S18_Clr1_sp5_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S17_Clr1_sp5_fsm = //State's vectored into symbol: "RS"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Clr1_sp5_fsm,0,0,0,0};
+struct S18rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Clr1_sp5_fsm S18rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs1_Rlr1_sp5_}
+ }// end of reduce table
+};
+yacco2::State S18_Clr1_sp5_fsm = //State's vectored into symbol: "eog"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Clr1_sp5_fsm,0,0,0};
+struct S19std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S19std_Clr1_sp5_fsm S19st_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S20_Clr1_sp5_fsm} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S19_Clr1_sp5_fsm = //State's vectored into symbol: "RA"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Clr1_sp5_fsm,0,0,0,0};
+struct S20rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Clr1_sp5_fsm S20rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs4_RS_}
+ }// end of reduce table
+};
+yacco2::State S20_Clr1_sp5_fsm = //State's vectored into symbol: "z"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clr1_sp5_fsm,0,0,0};
+struct S21std_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S21std_Clr1_sp5_fsm S21st_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S22_Clr1_sp5_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S21_Clr1_sp5_fsm = //State's vectored into symbol: "RB"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Clr1_sp5_fsm,0,0,0,0};
+struct S22rtd_Clr1_sp5_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clr1_sp5_fsm S22rt_Clr1_sp5_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp5_fsm,Clr1_sp5_fsm::rhs5_RS_}
+ }// end of reduce table
+};
+yacco2::State S22_Clr1_sp5_fsm = //State's vectored into symbol: "x"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clr1_sp5_fsm,0,0,0};
diff --git a/web/yacco2/qa/TS.fsc b/web/yacco2/qa/TS.fsc
new file mode 100644
index 0000000000..642f061067
--- /dev/null
+++ b/web/yacco2/qa/TS.fsc
@@ -0,0 +1,22 @@
+/*
+ File: TS.fsc
+$echo FILE: TS.fsc
+$echo Test out keyword recognition for O2linker where TS_0.fsc in error
+$echo Error on keyword no-of-T
+*/
+file-of-T-alphabet "/usr/local/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+emitfile "/usr/local/yacco2/qa/TS_fsc.cpp"
+preamble
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+end-preamble
+"/usr/local/yacco2/qa/TS_0.fsc"
+"/usr/local/yacco2/qa/TS_1.fsc"
diff --git a/web/yacco2/qa/TS1.fsc b/web/yacco2/qa/TS1.fsc
new file mode 100644
index 0000000000..b04f77851d
--- /dev/null
+++ b/web/yacco2/qa/TS1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS.fsc
+$echo FILE: TS.fsc
+$echo Test out keyword recognition for O2linker where TS_0.fsc in error
+$echo Error on T in TS_1.fsc
+*/
+file-of-T-alphabet "/usr/local/yacco2/compiler/grammars/yacco2_T_enumeration.fsc"
+emitfile "/usr/local/yacco2/qa/TS_fsc.cpp"
+preamble
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+using namespace NS_yacco2_T_enum;
+using namespace NS_yacco2_err_symbols;
+using namespace NS_yacco2_k_symbols;
+using namespace NS_yacco2_terminals;
+using namespace NS_yacco2_characters;
+end-preamble
+"/usr/local/yacco2/qa/TS_1.fsc"
diff --git a/web/yacco2/qa/TS_0.fsc b/web/yacco2/qa/TS_0.fsc
new file mode 100644
index 0000000000..26e723b95b
--- /dev/null
+++ b/web/yacco2/qa/TS_0.fsc
@@ -0,0 +1,22 @@
+/*
+ File: TS_0.fsc
+$echo FILE: TS_0.fsc
+$echo Test out keyword recognition for O2linker
+$echo Error on keyword no-of-T
+*/
+transitive n
+grammar-name "eol"
+name-space "NS_eol"
+thread-name "TH_eol"
+monolithic n
+file-name "eol.fsc"
+no-of-TT 571
+list-of-native-first-set-terminals 1
+ raw_x
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer --- Unix, Mac, and Microsoft supported styles."
diff --git a/web/yacco2/qa/TS_1.fsc b/web/yacco2/qa/TS_1.fsc
new file mode 100644
index 0000000000..1302a0aa7e
--- /dev/null
+++ b/web/yacco2/qa/TS_1.fsc
@@ -0,0 +1,22 @@
+/*
+ File: TS_1.fsc
+$echo FILE: TS_1.fsc
+$echo Test out keyword recognition for O2linker
+$echo Error on literal T raw_x
+*/
+transitive n
+grammar-name "eol"
+name-space "NS_eol"
+thread-name "TH_eol"
+monolithic n
+file-name "eol.fsc"
+no-of-T 571
+list-of-native-first-set-terminals 1
+ raw_xx
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer --- Unix, Mac, and Microsoft supported styles."
diff --git a/web/yacco2/qa/TS_la1.cpp b/web/yacco2/qa/TS_la1.cpp
new file mode 100644
index 0000000000..549fbd7e8a
--- /dev/null
+++ b/web/yacco2/qa/TS_la1.cpp
@@ -0,0 +1,60 @@
+/*
+ File: TS_la1.cpp
+ Date and Time: Sat Oct 11 20:57:07 2014
+*/
+#include "TS_la1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_la1::
+ CTS_la1()
+ :yacco2::CAbs_fsm
+ ("TS_la1.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:07 2014 "
+ ,S1_CTS_la1){
+
+ }
+
+CTS_la1::~CTS_la1(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la1::failed(){
+ return false;
+ }
+ void CTS_la1::op(){
+}
+int CTS_la1::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_la1::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_la1::R_Rdelimiters_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_la1.fsc b/web/yacco2/qa/TS_la1.fsc
new file mode 100644
index 0000000000..ce19aad903
--- /dev/null
+++ b/web/yacco2/qa/TS_la1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_la1.fsc
+ Date and Time: Sat Oct 11 20:57:07 2014
+*/
+transitive n
+grammar-name "TS_la1"
+name-space "NS_TS_la1"
+thread-name "TH_TS_la1"
+monolithic n
+file-name "TS_la1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_la1.h b/web/yacco2/qa/TS_la1.h
new file mode 100644
index 0000000000..915f926dba
--- /dev/null
+++ b/web/yacco2/qa/TS_la1.h
@@ -0,0 +1,64 @@
+/*
+ File: TS_la1.h
+ Date and Time: Sat Oct 11 20:57:07 2014
+*/
+#ifndef __TS_la1_h__
+#define __TS_la1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_la1;
+
+extern yacco2::State S1_CTS_la1;
+namespace NS_TS_la1 {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_la1(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_la1(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_la1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_la1();
+ ~CTS_la1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_la1.lex b/web/yacco2/qa/TS_la1.lex
new file mode 100644
index 0000000000..7268a878b5
--- /dev/null
+++ b/web/yacco2/qa/TS_la1.lex
@@ -0,0 +1,36 @@
+/*
+$echo FILE: TS_la1.lex
+$echo Purpose: test la expr: eolr only
+$echo Okay
+*/
+fsm
+(fsm-id "TS_la1.lex",fsm-filename TS_la1,fsm-namespace NS_TS_la1
+,fsm-class CTS_la1
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la1
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+Rdelimiters AD AB()
+{
+ -> /@ lf: Unix\fbreak@/ "x0a"
+ -> "x0d" |.|
+ -> /@ cr:lf Windows\fbreak@/ "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la1.pdf b/web/yacco2/qa/TS_la1.pdf
new file mode 100644
index 0000000000..dd23a1cee0
--- /dev/null
+++ b/web/yacco2/qa/TS_la1.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la1_idx.pdf b/web/yacco2/qa/TS_la1_idx.pdf
new file mode 100644
index 0000000000..f9765d6499
--- /dev/null
+++ b/web/yacco2/qa/TS_la1_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la1sym.cpp b/web/yacco2/qa/TS_la1sym.cpp
new file mode 100644
index 0000000000..0141ce3789
--- /dev/null
+++ b/web/yacco2/qa/TS_la1sym.cpp
@@ -0,0 +1,104 @@
+/*
+ File: TS_la1sym.cpp
+ Date and Time: Sat Oct 11 20:57:07 2014
+*/
+#include "TS_la1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la1;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_la1::TH_TS_la1(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_la1;
+ NS_TS_la1::CTS_la1 CTS_la1_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_la1_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_la1::PROC_TH_TS_la1(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_la1";
+ static bool one_time(false);
+ static NS_TS_la1::CTS_la1* NS_TS_la1_CTS_la1_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_la1_CTS_la1_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_la1_CTS_la1_ = new NS_TS_la1::CTS_la1();// parallel-parser's fsm table
+ NS_TS_la1_CTS_la1_parser = new Parser(*NS_TS_la1_CTS_la1_,Caller_pp);
+ }
+ proc_parser = NS_TS_la1_CTS_la1_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_la1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_la1tbl.cpp b/web/yacco2/qa/TS_la1tbl.cpp
new file mode 100644
index 0000000000..ce59df5067
--- /dev/null
+++ b/web/yacco2/qa/TS_la1tbl.cpp
@@ -0,0 +1,114 @@
+/*
+ File: TS_la1tbl.cpp
+ Date and Time: Sat Oct 11 20:57:07 2014
+*/
+#include "TS_la1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la1;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_CTS_la1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_CTS_la1;
+extern yacco2::State S2_CTS_la1;
+extern yacco2::State S3_CTS_la1;
+extern yacco2::State S4_CTS_la1;
+extern yacco2::State S5_CTS_la1;
+extern yacco2::State S6_CTS_la1;
+struct S1std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_la1 S1st_CTS_la1 = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_la1} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_la1} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_la1} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_la1} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_la1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la1,0,0,0,0};
+struct S2rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la1 S2rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la1 = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la1,0,0,0};
+struct S3std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_la1 S3st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_la1} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_la1} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_la1 = {5,(State*)&S4_CTS_la1};
+yacco2::State S3_CTS_la1 = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_la1
+,0,(Shift_tbl*)&S3st_CTS_la1,0,0,0,0};
+struct S4rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la1 S4rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la1 = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la1,0,0,0};
+struct S5rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_la1 S5rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_la1 = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_la1,0,0,0};
+struct S6rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_la1 S6rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_la1 = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_la1,0,0,0};
diff --git a/web/yacco2/qa/TS_la2.lex b/web/yacco2/qa/TS_la2.lex
new file mode 100644
index 0000000000..1ac59f0d84
--- /dev/null
+++ b/web/yacco2/qa/TS_la2.lex
@@ -0,0 +1,34 @@
+/*
+$echo FILE: TS_la2.lex
+$echo Purpose: test la expr: a - eolr an empty set created
+$echo Error --- empty lookahead set created due to eolr
+*/
+fsm
+(fsm-id "TS_la2.lex",fsm-filename TS_la2,fsm-namespace NS_TS_la2
+,fsm-class CTS_la2
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la2
+ ***
+ parallel-la-boundary
+ a - eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la2a.lex b/web/yacco2/qa/TS_la2a.lex
new file mode 100644
index 0000000000..d4180c5dd4
--- /dev/null
+++ b/web/yacco2/qa/TS_la2a.lex
@@ -0,0 +1,35 @@
+/*
+$echo FILE: TS_la2a.lex
+$echo Purpose: test la expr producing an empty set
+$echo LA expr: a + b - a - b
+$echo Error --- all terms specifically added and then removed
+*/
+fsm
+(fsm-id "TS_la2a.lex",fsm-filename TS_la2a,fsm-namespace NS_TS_la2a
+,fsm-class CTS_la2
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la2a
+ ***
+ parallel-la-boundary
+ a + b - a - b
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la3.lex b/web/yacco2/qa/TS_la3.lex
new file mode 100644
index 0000000000..3f4110ffb8
--- /dev/null
+++ b/web/yacco2/qa/TS_la3.lex
@@ -0,0 +1,35 @@
+/*
+$echo FILE: TS_la3.lex
+$echo Purpose: test la expr removal operator applied against an empty la set
+$echo la expr: a - eolr - b
+$echo Error empty set with removal operator applied against it
+*/
+fsm
+(fsm-id "TS_la3.lex",fsm-filename TS_la3,fsm-namespace NS_TS_la3
+,fsm-class CTS_la3
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la3
+ ***
+ parallel-la-boundary
+ a - eolr - b
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la4.cpp b/web/yacco2/qa/TS_la4.cpp
new file mode 100644
index 0000000000..bac567790f
--- /dev/null
+++ b/web/yacco2/qa/TS_la4.cpp
@@ -0,0 +1,60 @@
+/*
+ File: TS_la4.cpp
+ Date and Time: Sat Oct 11 20:57:13 2014
+*/
+#include "TS_la4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la4;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_la4::
+ CTS_la4()
+ :yacco2::CAbs_fsm
+ ("TS_la4.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:13 2014 "
+ ,S1_CTS_la4){
+
+ }
+
+CTS_la4::~CTS_la4(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la4::failed(){
+ return false;
+ }
+ void CTS_la4::op(){
+}
+int CTS_la4::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_la4::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_la4::R_Rdelimiters_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_la4.fsc b/web/yacco2/qa/TS_la4.fsc
new file mode 100644
index 0000000000..8dae58f629
--- /dev/null
+++ b/web/yacco2/qa/TS_la4.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_la4.fsc
+ Date and Time: Sat Oct 11 20:57:13 2014
+*/
+transitive n
+grammar-name "TS_la4"
+name-space "NS_TS_la4"
+thread-name "TH_TS_la4"
+monolithic n
+file-name "TS_la4.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_la4.h b/web/yacco2/qa/TS_la4.h
new file mode 100644
index 0000000000..93beb066a3
--- /dev/null
+++ b/web/yacco2/qa/TS_la4.h
@@ -0,0 +1,64 @@
+/*
+ File: TS_la4.h
+ Date and Time: Sat Oct 11 20:57:13 2014
+*/
+#ifndef __TS_la4_h__
+#define __TS_la4_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_la4;
+
+extern yacco2::State S1_CTS_la4;
+namespace NS_TS_la4 {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_la4(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_la4(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_la4: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_la4();
+ ~CTS_la4();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_la4.lex b/web/yacco2/qa/TS_la4.lex
new file mode 100644
index 0000000000..a96f51c440
--- /dev/null
+++ b/web/yacco2/qa/TS_la4.lex
@@ -0,0 +1,34 @@
+/*
+$echo FILE: TS_la4.lex
+$echo Purpose: test la expr rnd about to crt b in first set
+$echo la expr: a - eolr + b
+$echo Okay
+*/
+fsm
+(fsm-id "TS_la4.lex",fsm-filename TS_la4,fsm-namespace NS_TS_la4
+,fsm-class CTS_la4
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la4
+ ***
+ parallel-la-boundary
+ a - eolr + b
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la4.pdf b/web/yacco2/qa/TS_la4.pdf
new file mode 100644
index 0000000000..db9982212e
--- /dev/null
+++ b/web/yacco2/qa/TS_la4.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la4_idx.pdf b/web/yacco2/qa/TS_la4_idx.pdf
new file mode 100644
index 0000000000..a7c76cb61b
--- /dev/null
+++ b/web/yacco2/qa/TS_la4_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la4sym.cpp b/web/yacco2/qa/TS_la4sym.cpp
new file mode 100644
index 0000000000..12d0531112
--- /dev/null
+++ b/web/yacco2/qa/TS_la4sym.cpp
@@ -0,0 +1,104 @@
+/*
+ File: TS_la4sym.cpp
+ Date and Time: Sat Oct 11 20:57:13 2014
+*/
+#include "TS_la4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la4;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_la4::TH_TS_la4(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_la4;
+ NS_TS_la4::CTS_la4 CTS_la4_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_la4_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_la4::PROC_TH_TS_la4(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_la4";
+ static bool one_time(false);
+ static NS_TS_la4::CTS_la4* NS_TS_la4_CTS_la4_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_la4_CTS_la4_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_la4_CTS_la4_ = new NS_TS_la4::CTS_la4();// parallel-parser's fsm table
+ NS_TS_la4_CTS_la4_parser = new Parser(*NS_TS_la4_CTS_la4_,Caller_pp);
+ }
+ proc_parser = NS_TS_la4_CTS_la4_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_la4::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_la4tbl.cpp b/web/yacco2/qa/TS_la4tbl.cpp
new file mode 100644
index 0000000000..03566e5a3f
--- /dev/null
+++ b/web/yacco2/qa/TS_la4tbl.cpp
@@ -0,0 +1,114 @@
+/*
+ File: TS_la4tbl.cpp
+ Date and Time: Sat Oct 11 20:57:13 2014
+*/
+#include "TS_la4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la4;// grammar's ns
+// first set terminals
+// raw_b
+yacco2::UCHAR LA1_CTS_la4[] ={
+1
+,13,4
+};
+extern yacco2::State S1_CTS_la4;
+extern yacco2::State S2_CTS_la4;
+extern yacco2::State S3_CTS_la4;
+extern yacco2::State S4_CTS_la4;
+extern yacco2::State S5_CTS_la4;
+extern yacco2::State S6_CTS_la4;
+struct S1std_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_la4 S1st_CTS_la4 = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_la4} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_la4} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_la4} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_la4} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_la4 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la4,0,0,0,0};
+struct S2rtd_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la4 S2rt_CTS_la4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la4,CTS_la4::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la4 = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la4,0,0,0};
+struct S3std_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_la4 S3st_CTS_la4 = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_la4} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_la4} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_la4 = {5,(State*)&S4_CTS_la4};
+yacco2::State S3_CTS_la4 = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_la4
+,0,(Shift_tbl*)&S3st_CTS_la4,0,0,0,0};
+struct S4rtd_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la4 S4rt_CTS_la4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la4,CTS_la4::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la4 = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la4,0,0,0};
+struct S5rtd_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_la4 S5rt_CTS_la4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la4,CTS_la4::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_la4 = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_la4,0,0,0};
+struct S6rtd_CTS_la4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_la4 S6rt_CTS_la4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la4,CTS_la4::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_la4 = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_la4,0,0,0};
diff --git a/web/yacco2/qa/TS_la5.lex b/web/yacco2/qa/TS_la5.lex
new file mode 100644
index 0000000000..40527136ba
--- /dev/null
+++ b/web/yacco2/qa/TS_la5.lex
@@ -0,0 +1,38 @@
+/*
+$echo FILE: TS_la5.lex
+$echo Purpose: test la expr non existant rule
+$echo eolr - Rnon_existant_rule
+$echo Error
+*/
+fsm
+(fsm-id "TS_la5.lex",fsm-filename TS_la5,fsm-namespace NS_TS_la5
+,fsm-class CTS_la5
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la5
+ ***
+ parallel-la-boundary
+ eolr - Rnon_existant_rule
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la6.cpp b/web/yacco2/qa/TS_la6.cpp
new file mode 100644
index 0000000000..118c64a561
--- /dev/null
+++ b/web/yacco2/qa/TS_la6.cpp
@@ -0,0 +1,165 @@
+/*
+ File: TS_la6.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la6;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 8;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+}
+ CTS_la6::
+ CTS_la6()
+ :yacco2::CAbs_fsm
+ ("TS_la6.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:16 2014 "
+ ,S1_CTS_la6){
+
+ }
+
+CTS_la6::~CTS_la6(){
+
+ for(int x = 0;x < 8;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la6::failed(){
+ return false;
+ }
+ void CTS_la6::op(){
+}
+int CTS_la6::rhs_to_rules_mapping_[74] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,3 // subrule 14 for rule 4
+ ,3 // subrule 15 for rule 4
+ ,3 // subrule 16 for rule 4
+ ,3 // subrule 17 for rule 4
+ ,3 // subrule 18 for rule 4
+ ,3 // subrule 19 for rule 4
+ ,3 // subrule 20 for rule 4
+ ,3 // subrule 21 for rule 4
+ ,3 // subrule 22 for rule 4
+ ,3 // subrule 23 for rule 4
+ ,3 // subrule 24 for rule 4
+ ,4 // subrule 25 for rule 5
+ ,4 // subrule 26 for rule 5
+ ,4 // subrule 27 for rule 5
+ ,4 // subrule 28 for rule 5
+ ,4 // subrule 29 for rule 5
+ ,4 // subrule 30 for rule 5
+ ,4 // subrule 31 for rule 5
+ ,4 // subrule 32 for rule 5
+ ,4 // subrule 33 for rule 5
+ ,4 // subrule 34 for rule 5
+ ,4 // subrule 35 for rule 5
+ ,4 // subrule 36 for rule 5
+ ,4 // subrule 37 for rule 5
+ ,5 // subrule 38 for rule 6
+ ,5 // subrule 39 for rule 6
+ ,5 // subrule 40 for rule 6
+ ,5 // subrule 41 for rule 6
+ ,5 // subrule 42 for rule 6
+ ,5 // subrule 43 for rule 6
+ ,5 // subrule 44 for rule 6
+ ,5 // subrule 45 for rule 6
+ ,5 // subrule 46 for rule 6
+ ,5 // subrule 47 for rule 6
+ ,5 // subrule 48 for rule 6
+ ,5 // subrule 49 for rule 6
+ ,5 // subrule 50 for rule 6
+ ,6 // subrule 51 for rule 7
+ ,6 // subrule 52 for rule 7
+ ,6 // subrule 53 for rule 7
+ ,6 // subrule 54 for rule 7
+ ,6 // subrule 55 for rule 7
+ ,6 // subrule 56 for rule 7
+ ,6 // subrule 57 for rule 7
+ ,6 // subrule 58 for rule 7
+ ,6 // subrule 59 for rule 7
+ ,6 // subrule 60 for rule 7
+ ,6 // subrule 61 for rule 7
+ ,6 // subrule 62 for rule 7
+ ,6 // subrule 63 for rule 7
+ ,7 // subrule 64 for rule 8
+ ,7 // subrule 65 for rule 8
+ ,7 // subrule 66 for rule 8
+ ,7 // subrule 67 for rule 8
+ ,7 // subrule 68 for rule 8
+ ,7 // subrule 69 for rule 8
+ ,7 // subrule 70 for rule 8
+ ,7 // subrule 71 for rule 8
+ ,7 // subrule 72 for rule 8
+ ,7 // subrule 73 for rule 8
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_la6::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_la6::R_Rdelimiters_,P,true,true){
+}
+
+Rminus_la::Rminus_la(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus_la",0,CTS_la6::R_Rminus_la_,P,true,true){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,CTS_la6::R_RUPPER_A_M_,P,true,true){
+}
+
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,CTS_la6::R_RUPPER_N_Z_,P,true,true){
+}
+
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,CTS_la6::R_Rlower_a_m_,P,true,true){
+}
+
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,CTS_la6::R_Rlower_n_z_,P,true,true){
+}
+
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,CTS_la6::R_RNUMBERS_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_la6.fsc b/web/yacco2/qa/TS_la6.fsc
new file mode 100644
index 0000000000..5ac35be2e7
--- /dev/null
+++ b/web/yacco2/qa/TS_la6.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_la6.fsc
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+transitive n
+grammar-name "TS_la6"
+name-space "NS_TS_la6"
+thread-name "TH_TS_la6"
+monolithic n
+file-name "TS_la6.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_la6.h b/web/yacco2/qa/TS_la6.h
new file mode 100644
index 0000000000..7c84d98ec0
--- /dev/null
+++ b/web/yacco2/qa/TS_la6.h
@@ -0,0 +1,175 @@
+/*
+ File: TS_la6.h
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#ifndef __TS_la6_h__
+#define __TS_la6_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_la6;
+
+extern yacco2::State S1_CTS_la6;
+namespace NS_TS_la6 {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_la6(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_la6(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[8];
+};
+class CTS_la6: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ ,R_Rminus_la_ = 571//start_of_rule_list + 4
+ ,rhs1_Rminus_la_ = 5
+ ,rhs2_Rminus_la_ = 6
+ ,rhs3_Rminus_la_ = 7
+ ,rhs4_Rminus_la_ = 8
+ ,rhs5_Rminus_la_ = 9
+ ,rhs6_Rminus_la_ = 10
+ ,rhs7_Rminus_la_ = 11
+ ,R_RUPPER_A_M_ = 572//start_of_rule_list + 6
+ ,rhs1_RUPPER_A_M_ = 12
+ ,rhs2_RUPPER_A_M_ = 13
+ ,rhs3_RUPPER_A_M_ = 14
+ ,rhs4_RUPPER_A_M_ = 15
+ ,rhs5_RUPPER_A_M_ = 16
+ ,rhs6_RUPPER_A_M_ = 17
+ ,rhs7_RUPPER_A_M_ = 18
+ ,rhs8_RUPPER_A_M_ = 19
+ ,rhs9_RUPPER_A_M_ = 20
+ ,rhs10_RUPPER_A_M_ = 21
+ ,rhs11_RUPPER_A_M_ = 22
+ ,rhs12_RUPPER_A_M_ = 23
+ ,rhs13_RUPPER_A_M_ = 24
+ ,R_RUPPER_N_Z_ = 573//start_of_rule_list + 8
+ ,rhs1_RUPPER_N_Z_ = 25
+ ,rhs2_RUPPER_N_Z_ = 26
+ ,rhs3_RUPPER_N_Z_ = 27
+ ,rhs4_RUPPER_N_Z_ = 28
+ ,rhs5_RUPPER_N_Z_ = 29
+ ,rhs6_RUPPER_N_Z_ = 30
+ ,rhs7_RUPPER_N_Z_ = 31
+ ,rhs8_RUPPER_N_Z_ = 32
+ ,rhs9_RUPPER_N_Z_ = 33
+ ,rhs10_RUPPER_N_Z_ = 34
+ ,rhs11_RUPPER_N_Z_ = 35
+ ,rhs12_RUPPER_N_Z_ = 36
+ ,rhs13_RUPPER_N_Z_ = 37
+ ,R_Rlower_a_m_ = 574//start_of_rule_list + 10
+ ,rhs1_Rlower_a_m_ = 38
+ ,rhs2_Rlower_a_m_ = 39
+ ,rhs3_Rlower_a_m_ = 40
+ ,rhs4_Rlower_a_m_ = 41
+ ,rhs5_Rlower_a_m_ = 42
+ ,rhs6_Rlower_a_m_ = 43
+ ,rhs7_Rlower_a_m_ = 44
+ ,rhs8_Rlower_a_m_ = 45
+ ,rhs9_Rlower_a_m_ = 46
+ ,rhs10_Rlower_a_m_ = 47
+ ,rhs11_Rlower_a_m_ = 48
+ ,rhs12_Rlower_a_m_ = 49
+ ,rhs13_Rlower_a_m_ = 50
+ ,R_Rlower_n_z_ = 575//start_of_rule_list + 12
+ ,rhs1_Rlower_n_z_ = 51
+ ,rhs2_Rlower_n_z_ = 52
+ ,rhs3_Rlower_n_z_ = 53
+ ,rhs4_Rlower_n_z_ = 54
+ ,rhs5_Rlower_n_z_ = 55
+ ,rhs6_Rlower_n_z_ = 56
+ ,rhs7_Rlower_n_z_ = 57
+ ,rhs8_Rlower_n_z_ = 58
+ ,rhs9_Rlower_n_z_ = 59
+ ,rhs10_Rlower_n_z_ = 60
+ ,rhs11_Rlower_n_z_ = 61
+ ,rhs12_Rlower_n_z_ = 62
+ ,rhs13_Rlower_n_z_ = 63
+ ,R_RNUMBERS_ = 576//start_of_rule_list + 14
+ ,rhs1_RNUMBERS_ = 64
+ ,rhs2_RNUMBERS_ = 65
+ ,rhs3_RNUMBERS_ = 66
+ ,rhs4_RNUMBERS_ = 67
+ ,rhs5_RNUMBERS_ = 68
+ ,rhs6_RNUMBERS_ = 69
+ ,rhs7_RNUMBERS_ = 70
+ ,rhs8_RNUMBERS_ = 71
+ ,rhs9_RNUMBERS_ = 72
+ ,rhs10_RNUMBERS_ = 73
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_la6();
+ ~CTS_la6();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[74];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Rminus_la;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+struct Rminus_la:public yacco2::CAbs_lr1_sym {
+ Rminus_la(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_la6.lex b/web/yacco2/qa/TS_la6.lex
new file mode 100644
index 0000000000..fb21a5ee31
--- /dev/null
+++ b/web/yacco2/qa/TS_la6.lex
@@ -0,0 +1,69 @@
+/*
+$echo FILE: TS_la6.lex
+eolr - RNUMBERSPurpose: test la expr with existant rule
+$echo la express: eolr - RNUMBERS
+$echo Okay
+*/
+fsm
+(fsm-id "TS_la6.lex",fsm-filename TS_la6,fsm-namespace NS_TS_la6
+,fsm-class CTS_la6
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la6
+ ***
+ parallel-la-boundary
+ eolr - RNUMBERS
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+Rminus_la AD AB() {
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS
+}
+
+RUPPER_A_M AD AB (){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z AD AB (){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m AD AB (){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z AD AB (){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS AD AB (){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la6.pdf b/web/yacco2/qa/TS_la6.pdf
new file mode 100644
index 0000000000..d50ff38bb3
--- /dev/null
+++ b/web/yacco2/qa/TS_la6.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la6_idx.pdf b/web/yacco2/qa/TS_la6_idx.pdf
new file mode 100644
index 0000000000..9ec20e1f1b
--- /dev/null
+++ b/web/yacco2/qa/TS_la6_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la6sym.cpp b/web/yacco2/qa/TS_la6sym.cpp
new file mode 100644
index 0000000000..f5bb15eeb2
--- /dev/null
+++ b/web/yacco2/qa/TS_la6sym.cpp
@@ -0,0 +1,1070 @@
+/*
+ File: TS_la6sym.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la6;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_la6::TH_TS_la6(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_la6;
+ NS_TS_la6::CTS_la6 CTS_la6_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_la6_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_la6::PROC_TH_TS_la6(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_la6";
+ static bool one_time(false);
+ static NS_TS_la6::CTS_la6* NS_TS_la6_CTS_la6_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_la6_CTS_la6_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_la6_CTS_la6_ = new NS_TS_la6::CTS_la6();// parallel-parser's fsm table
+ NS_TS_la6_CTS_la6_parser = new Parser(*NS_TS_la6_CTS_la6_,Caller_pp);
+ }
+ proc_parser = NS_TS_la6_CTS_la6_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_la6::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_la6tbl.cpp b/web/yacco2/qa/TS_la6tbl.cpp
new file mode 100644
index 0000000000..71d16cbfa5
--- /dev/null
+++ b/web/yacco2/qa/TS_la6tbl.cpp
@@ -0,0 +1,735 @@
+/*
+ File: TS_la6tbl.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la6;// grammar's ns
+// first set terminals
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+yacco2::UCHAR LA1_CTS_la6[] ={
+71
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,8,252
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_CTS_la6;
+extern yacco2::State S2_CTS_la6;
+extern yacco2::State S3_CTS_la6;
+extern yacco2::State S4_CTS_la6;
+extern yacco2::State S5_CTS_la6;
+extern yacco2::State S6_CTS_la6;
+struct S1std_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_la6 S1st_CTS_la6 = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_la6} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_la6} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_la6} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_la6} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_la6 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la6,0,0,0,0};
+struct S2rtd_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la6 S2rt_CTS_la6 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la6,CTS_la6::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la6 = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la6,0,0,0};
+struct S3std_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_la6 S3st_CTS_la6 = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_la6} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_la6} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_la6 = {5,(State*)&S4_CTS_la6};
+yacco2::State S3_CTS_la6 = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_la6
+,0,(Shift_tbl*)&S3st_CTS_la6,0,0,0,0};
+struct S4rtd_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la6 S4rt_CTS_la6 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la6,CTS_la6::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la6 = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la6,0,0,0};
+struct S5rtd_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_la6 S5rt_CTS_la6 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la6,CTS_la6::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_la6 = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_la6,0,0,0};
+struct S6rtd_CTS_la6{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_la6 S6rt_CTS_la6 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la6,CTS_la6::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_la6 = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_la6,0,0,0};
diff --git a/web/yacco2/qa/TS_la7.cpp b/web/yacco2/qa/TS_la7.cpp
new file mode 100644
index 0000000000..5f5eb58b53
--- /dev/null
+++ b/web/yacco2/qa/TS_la7.cpp
@@ -0,0 +1,165 @@
+/*
+ File: TS_la7.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la7.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la7;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 8;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+}
+ CTS_la7::
+ CTS_la7()
+ :yacco2::CAbs_fsm
+ ("TS_la7.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:16 2014 "
+ ,S1_CTS_la7){
+
+ }
+
+CTS_la7::~CTS_la7(){
+
+ for(int x = 0;x < 8;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la7::failed(){
+ return false;
+ }
+ void CTS_la7::op(){
+}
+int CTS_la7::rhs_to_rules_mapping_[74] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,2 // subrule 10 for rule 3
+ ,2 // subrule 11 for rule 3
+ ,3 // subrule 12 for rule 4
+ ,3 // subrule 13 for rule 4
+ ,3 // subrule 14 for rule 4
+ ,3 // subrule 15 for rule 4
+ ,3 // subrule 16 for rule 4
+ ,3 // subrule 17 for rule 4
+ ,3 // subrule 18 for rule 4
+ ,3 // subrule 19 for rule 4
+ ,3 // subrule 20 for rule 4
+ ,3 // subrule 21 for rule 4
+ ,3 // subrule 22 for rule 4
+ ,3 // subrule 23 for rule 4
+ ,3 // subrule 24 for rule 4
+ ,4 // subrule 25 for rule 5
+ ,4 // subrule 26 for rule 5
+ ,4 // subrule 27 for rule 5
+ ,4 // subrule 28 for rule 5
+ ,4 // subrule 29 for rule 5
+ ,4 // subrule 30 for rule 5
+ ,4 // subrule 31 for rule 5
+ ,4 // subrule 32 for rule 5
+ ,4 // subrule 33 for rule 5
+ ,4 // subrule 34 for rule 5
+ ,4 // subrule 35 for rule 5
+ ,4 // subrule 36 for rule 5
+ ,4 // subrule 37 for rule 5
+ ,5 // subrule 38 for rule 6
+ ,5 // subrule 39 for rule 6
+ ,5 // subrule 40 for rule 6
+ ,5 // subrule 41 for rule 6
+ ,5 // subrule 42 for rule 6
+ ,5 // subrule 43 for rule 6
+ ,5 // subrule 44 for rule 6
+ ,5 // subrule 45 for rule 6
+ ,5 // subrule 46 for rule 6
+ ,5 // subrule 47 for rule 6
+ ,5 // subrule 48 for rule 6
+ ,5 // subrule 49 for rule 6
+ ,5 // subrule 50 for rule 6
+ ,6 // subrule 51 for rule 7
+ ,6 // subrule 52 for rule 7
+ ,6 // subrule 53 for rule 7
+ ,6 // subrule 54 for rule 7
+ ,6 // subrule 55 for rule 7
+ ,6 // subrule 56 for rule 7
+ ,6 // subrule 57 for rule 7
+ ,6 // subrule 58 for rule 7
+ ,6 // subrule 59 for rule 7
+ ,6 // subrule 60 for rule 7
+ ,6 // subrule 61 for rule 7
+ ,6 // subrule 62 for rule 7
+ ,6 // subrule 63 for rule 7
+ ,7 // subrule 64 for rule 8
+ ,7 // subrule 65 for rule 8
+ ,7 // subrule 66 for rule 8
+ ,7 // subrule 67 for rule 8
+ ,7 // subrule 68 for rule 8
+ ,7 // subrule 69 for rule 8
+ ,7 // subrule 70 for rule 8
+ ,7 // subrule 71 for rule 8
+ ,7 // subrule 72 for rule 8
+ ,7 // subrule 73 for rule 8
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_la7::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_la7::R_Rdelimiters_,P,true,true){
+}
+
+Rminus_la::Rminus_la(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rminus_la",0,CTS_la7::R_Rminus_la_,P,true,true){
+}
+
+RUPPER_A_M::RUPPER_A_M(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_A_M",0,CTS_la7::R_RUPPER_A_M_,P,true,true){
+}
+
+RUPPER_N_Z::RUPPER_N_Z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RUPPER_N_Z",0,CTS_la7::R_RUPPER_N_Z_,P,true,true){
+}
+
+Rlower_a_m::Rlower_a_m(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_a_m",0,CTS_la7::R_Rlower_a_m_,P,true,true){
+}
+
+Rlower_n_z::Rlower_n_z(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlower_n_z",0,CTS_la7::R_Rlower_n_z_,P,true,true){
+}
+
+RNUMBERS::RNUMBERS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RNUMBERS",0,CTS_la7::R_RNUMBERS_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_la7.fsc b/web/yacco2/qa/TS_la7.fsc
new file mode 100644
index 0000000000..d1dca02224
--- /dev/null
+++ b/web/yacco2/qa/TS_la7.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_la7.fsc
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+transitive n
+grammar-name "TS_la7"
+name-space "NS_TS_la7"
+thread-name "TH_TS_la7"
+monolithic n
+file-name "TS_la7.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_la7.h b/web/yacco2/qa/TS_la7.h
new file mode 100644
index 0000000000..d41aa8d59f
--- /dev/null
+++ b/web/yacco2/qa/TS_la7.h
@@ -0,0 +1,175 @@
+/*
+ File: TS_la7.h
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#ifndef __TS_la7_h__
+#define __TS_la7_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_la7;
+
+extern yacco2::State S1_CTS_la7;
+namespace NS_TS_la7 {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_la7(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_la7(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[8];
+};
+class CTS_la7: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ ,R_Rminus_la_ = 571//start_of_rule_list + 4
+ ,rhs1_Rminus_la_ = 5
+ ,rhs2_Rminus_la_ = 6
+ ,rhs3_Rminus_la_ = 7
+ ,rhs4_Rminus_la_ = 8
+ ,rhs5_Rminus_la_ = 9
+ ,rhs6_Rminus_la_ = 10
+ ,rhs7_Rminus_la_ = 11
+ ,R_RUPPER_A_M_ = 572//start_of_rule_list + 6
+ ,rhs1_RUPPER_A_M_ = 12
+ ,rhs2_RUPPER_A_M_ = 13
+ ,rhs3_RUPPER_A_M_ = 14
+ ,rhs4_RUPPER_A_M_ = 15
+ ,rhs5_RUPPER_A_M_ = 16
+ ,rhs6_RUPPER_A_M_ = 17
+ ,rhs7_RUPPER_A_M_ = 18
+ ,rhs8_RUPPER_A_M_ = 19
+ ,rhs9_RUPPER_A_M_ = 20
+ ,rhs10_RUPPER_A_M_ = 21
+ ,rhs11_RUPPER_A_M_ = 22
+ ,rhs12_RUPPER_A_M_ = 23
+ ,rhs13_RUPPER_A_M_ = 24
+ ,R_RUPPER_N_Z_ = 573//start_of_rule_list + 8
+ ,rhs1_RUPPER_N_Z_ = 25
+ ,rhs2_RUPPER_N_Z_ = 26
+ ,rhs3_RUPPER_N_Z_ = 27
+ ,rhs4_RUPPER_N_Z_ = 28
+ ,rhs5_RUPPER_N_Z_ = 29
+ ,rhs6_RUPPER_N_Z_ = 30
+ ,rhs7_RUPPER_N_Z_ = 31
+ ,rhs8_RUPPER_N_Z_ = 32
+ ,rhs9_RUPPER_N_Z_ = 33
+ ,rhs10_RUPPER_N_Z_ = 34
+ ,rhs11_RUPPER_N_Z_ = 35
+ ,rhs12_RUPPER_N_Z_ = 36
+ ,rhs13_RUPPER_N_Z_ = 37
+ ,R_Rlower_a_m_ = 574//start_of_rule_list + 10
+ ,rhs1_Rlower_a_m_ = 38
+ ,rhs2_Rlower_a_m_ = 39
+ ,rhs3_Rlower_a_m_ = 40
+ ,rhs4_Rlower_a_m_ = 41
+ ,rhs5_Rlower_a_m_ = 42
+ ,rhs6_Rlower_a_m_ = 43
+ ,rhs7_Rlower_a_m_ = 44
+ ,rhs8_Rlower_a_m_ = 45
+ ,rhs9_Rlower_a_m_ = 46
+ ,rhs10_Rlower_a_m_ = 47
+ ,rhs11_Rlower_a_m_ = 48
+ ,rhs12_Rlower_a_m_ = 49
+ ,rhs13_Rlower_a_m_ = 50
+ ,R_Rlower_n_z_ = 575//start_of_rule_list + 12
+ ,rhs1_Rlower_n_z_ = 51
+ ,rhs2_Rlower_n_z_ = 52
+ ,rhs3_Rlower_n_z_ = 53
+ ,rhs4_Rlower_n_z_ = 54
+ ,rhs5_Rlower_n_z_ = 55
+ ,rhs6_Rlower_n_z_ = 56
+ ,rhs7_Rlower_n_z_ = 57
+ ,rhs8_Rlower_n_z_ = 58
+ ,rhs9_Rlower_n_z_ = 59
+ ,rhs10_Rlower_n_z_ = 60
+ ,rhs11_Rlower_n_z_ = 61
+ ,rhs12_Rlower_n_z_ = 62
+ ,rhs13_Rlower_n_z_ = 63
+ ,R_RNUMBERS_ = 576//start_of_rule_list + 14
+ ,rhs1_RNUMBERS_ = 64
+ ,rhs2_RNUMBERS_ = 65
+ ,rhs3_RNUMBERS_ = 66
+ ,rhs4_RNUMBERS_ = 67
+ ,rhs5_RNUMBERS_ = 68
+ ,rhs6_RNUMBERS_ = 69
+ ,rhs7_RNUMBERS_ = 70
+ ,rhs8_RNUMBERS_ = 71
+ ,rhs9_RNUMBERS_ = 72
+ ,rhs10_RNUMBERS_ = 73
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_la7();
+ ~CTS_la7();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[74];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Rminus_la;
+struct RUPPER_A_M;
+struct RUPPER_N_Z;
+struct Rlower_a_m;
+struct Rlower_n_z;
+struct RNUMBERS;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+struct Rminus_la:public yacco2::CAbs_lr1_sym {
+ Rminus_la(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_A_M:public yacco2::CAbs_lr1_sym {
+ RUPPER_A_M(yacco2::Parser* P);
+ public:
+};
+
+struct RUPPER_N_Z:public yacco2::CAbs_lr1_sym {
+ RUPPER_N_Z(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_a_m:public yacco2::CAbs_lr1_sym {
+ Rlower_a_m(yacco2::Parser* P);
+ public:
+};
+
+struct Rlower_n_z:public yacco2::CAbs_lr1_sym {
+ Rlower_n_z(yacco2::Parser* P);
+ public:
+};
+
+struct RNUMBERS:public yacco2::CAbs_lr1_sym {
+ RNUMBERS(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_la7.lex b/web/yacco2/qa/TS_la7.lex
new file mode 100644
index 0000000000..e0c50e00cf
--- /dev/null
+++ b/web/yacco2/qa/TS_la7.lex
@@ -0,0 +1,65 @@
+/*
+$echo FILE: TS_la7.lex
+$echo Purpose: test la expr with nested rule references in Rminus_la 'eolr - Rminus_la'
+$echo Okay
+*/
+fsm
+(fsm-id "TS_la7.lex",fsm-filename TS_la7,fsm-namespace NS_TS_la7
+,fsm-class CTS_la7
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la7
+ ***
+ parallel-la-boundary
+ eolr - Rminus_la
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+Rminus_la AD AB() {
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS
+}
+
+RUPPER_A_M AD AB (){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z AD AB (){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m AD AB (){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z AD AB (){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS AD AB (){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la7.pdf b/web/yacco2/qa/TS_la7.pdf
new file mode 100644
index 0000000000..1393b89447
--- /dev/null
+++ b/web/yacco2/qa/TS_la7.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la7_idx.pdf b/web/yacco2/qa/TS_la7_idx.pdf
new file mode 100644
index 0000000000..a5c424a6b5
--- /dev/null
+++ b/web/yacco2/qa/TS_la7_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la7sym.cpp b/web/yacco2/qa/TS_la7sym.cpp
new file mode 100644
index 0000000000..6581fdd8b5
--- /dev/null
+++ b/web/yacco2/qa/TS_la7sym.cpp
@@ -0,0 +1,1070 @@
+/*
+ File: TS_la7sym.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la7.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la7;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_la7::TH_TS_la7(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_la7;
+ NS_TS_la7::CTS_la7 CTS_la7_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_la7_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_la7::PROC_TH_TS_la7(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_la7";
+ static bool one_time(false);
+ static NS_TS_la7::CTS_la7* NS_TS_la7_CTS_la7_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_la7_CTS_la7_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_la7_CTS_la7_ = new NS_TS_la7::CTS_la7();// parallel-parser's fsm table
+ NS_TS_la7_CTS_la7_parser = new Parser(*NS_TS_la7_CTS_la7_,Caller_pp);
+ }
+ proc_parser = NS_TS_la7_CTS_la7_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_la7::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rminus_la_:{
+ Rminus_la* sym;
+ if(re->rule_ == 0){
+ sym = new Rminus_la(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rminus_la*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_A_M_:{
+ RUPPER_A_M* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_A_M(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_A_M*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_RUPPER_N_Z_:{
+ RUPPER_N_Z* sym;
+ if(re->rule_ == 0){
+ sym = new RUPPER_N_Z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RUPPER_N_Z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_a_m_:{
+ Rlower_a_m* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_a_m(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_a_m*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs11_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs12_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs13_Rlower_n_z_:{
+ Rlower_n_z* sym;
+ if(re->rule_ == 0){
+ sym = new Rlower_n_z(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlower_n_z*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs3_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs4_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs5_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs6_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs7_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs8_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs9_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs10_RNUMBERS_:{
+ RNUMBERS* sym;
+ if(re->rule_ == 0){
+ sym = new RNUMBERS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RNUMBERS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_la7tbl.cpp b/web/yacco2/qa/TS_la7tbl.cpp
new file mode 100644
index 0000000000..9895cb500a
--- /dev/null
+++ b/web/yacco2/qa/TS_la7tbl.cpp
@@ -0,0 +1,677 @@
+/*
+ File: TS_la7tbl.cpp
+ Date and Time: Sat Oct 11 20:57:16 2014
+*/
+#include "TS_la7.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la7;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_period
+// raw_slash
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_left_quote
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+yacco2::UCHAR LA1_CTS_la7[] ={
+67
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,223
+,8,252
+,9,1
+,12,120
+,13,1
+,16,248
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_CTS_la7;
+extern yacco2::State S2_CTS_la7;
+extern yacco2::State S3_CTS_la7;
+extern yacco2::State S4_CTS_la7;
+extern yacco2::State S5_CTS_la7;
+extern yacco2::State S6_CTS_la7;
+struct S1std_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_la7 S1st_CTS_la7 = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_la7} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_la7} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_la7} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_la7} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_la7 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la7,0,0,0,0};
+struct S2rtd_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la7 S2rt_CTS_la7 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la7,CTS_la7::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la7 = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la7,0,0,0};
+struct S3std_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_la7 S3st_CTS_la7 = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_la7} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_la7} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_la7 = {5,(State*)&S4_CTS_la7};
+yacco2::State S3_CTS_la7 = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_la7
+,0,(Shift_tbl*)&S3st_CTS_la7,0,0,0,0};
+struct S4rtd_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la7 S4rt_CTS_la7 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la7,CTS_la7::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la7 = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la7,0,0,0};
+struct S5rtd_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_la7 S5rt_CTS_la7 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la7,CTS_la7::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_la7 = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_la7,0,0,0};
+struct S6rtd_CTS_la7{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_la7 S6rt_CTS_la7 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la7,CTS_la7::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_la7 = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_la7,0,0,0};
diff --git a/web/yacco2/qa/TS_la8.lex b/web/yacco2/qa/TS_la8.lex
new file mode 100644
index 0000000000..cc866a07ba
--- /dev/null
+++ b/web/yacco2/qa/TS_la8.lex
@@ -0,0 +1,66 @@
+/*
+$echo FILE: TS_la8.lex
+$echo Purpose: test la expr with nested rule references where 1 of the rules is non existant
+$echo eolr - Rminus_la
+$echo Error
+*/
+fsm
+(fsm-id "TS_la8.lex",fsm-filename TS_la8,fsm-namespace NS_TS_la8
+,fsm-class CTS_la8
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la8
+ ***
+ parallel-la-boundary
+ eolr - Rminus_la
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+Rminus_la AD AB() {
+ -> "_"
+ -> "-"
+ -> RUPPER_A_M
+ -> RUPPER_N_Z
+ -> Rlower_a_m
+ -> Rlower_n_z
+ -> RNUMBERS1
+}
+
+RUPPER_A_M AD AB (){
+ -> A -> B -> C -> D -> E -> F -> G -> H -> I -> J -> K -> L -> M
+}
+
+RUPPER_N_Z AD AB (){
+ -> N -> O -> P -> Q
+ -> "R" // considered a Rule when not quoted!
+ -> S -> T -> U -> V -> W -> X -> Y -> Z
+}
+
+Rlower_a_m AD AB (){
+ -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m
+}
+
+Rlower_n_z AD AB (){
+ -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z
+}
+
+RNUMBERS AD AB (){
+ -> 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la9.cpp b/web/yacco2/qa/TS_la9.cpp
new file mode 100644
index 0000000000..1d96e2c0ce
--- /dev/null
+++ b/web/yacco2/qa/TS_la9.cpp
@@ -0,0 +1,60 @@
+/*
+ File: TS_la9.cpp
+ Date and Time: Sat Oct 11 20:57:19 2014
+*/
+#include "TS_la9.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la9;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_la9::
+ CTS_la9()
+ :yacco2::CAbs_fsm
+ ("TS_la9.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:19 2014 "
+ ,S1_CTS_la9){
+
+ }
+
+CTS_la9::~CTS_la9(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la9::failed(){
+ return false;
+ }
+ void CTS_la9::op(){
+}
+int CTS_la9::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_la9::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_la9::R_Rdelimiters_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_la9.fsc b/web/yacco2/qa/TS_la9.fsc
new file mode 100644
index 0000000000..1f19b0fcf2
--- /dev/null
+++ b/web/yacco2/qa/TS_la9.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_la9.fsc
+ Date and Time: Sat Oct 11 20:57:19 2014
+*/
+transitive n
+grammar-name "TS_la9"
+name-space "NS_TS_la9"
+thread-name "TH_TS_la9"
+monolithic n
+file-name "TS_la9.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_la9.h b/web/yacco2/qa/TS_la9.h
new file mode 100644
index 0000000000..e2082952eb
--- /dev/null
+++ b/web/yacco2/qa/TS_la9.h
@@ -0,0 +1,64 @@
+/*
+ File: TS_la9.h
+ Date and Time: Sat Oct 11 20:57:19 2014
+*/
+#ifndef __TS_la9_h__
+#define __TS_la9_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_la9;
+
+extern yacco2::State S1_CTS_la9;
+namespace NS_TS_la9 {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_la9(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_la9(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_la9: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_la9();
+ ~CTS_la9();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_la9.lex b/web/yacco2/qa/TS_la9.lex
new file mode 100644
index 0000000000..f62f191911
--- /dev/null
+++ b/web/yacco2/qa/TS_la9.lex
@@ -0,0 +1,37 @@
+/*
+$echo FILE: TS_la9.lex
+$echo Purpose: test la expr" 'a + b + c + d - a + b'"
+$echo Okay
+*/
+fsm
+(fsm-id "TS_la9.lex",fsm-filename TS_la9,fsm-namespace NS_TS_la9
+,fsm-class CTS_la9
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_la9
+ ***
+ parallel-la-boundary
+ a + b + c + d - a + b
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_la9.pdf b/web/yacco2/qa/TS_la9.pdf
new file mode 100644
index 0000000000..6c82b07e1c
--- /dev/null
+++ b/web/yacco2/qa/TS_la9.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la9_idx.pdf b/web/yacco2/qa/TS_la9_idx.pdf
new file mode 100644
index 0000000000..6a32b4e26a
--- /dev/null
+++ b/web/yacco2/qa/TS_la9_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_la9sym.cpp b/web/yacco2/qa/TS_la9sym.cpp
new file mode 100644
index 0000000000..62cf3a32d3
--- /dev/null
+++ b/web/yacco2/qa/TS_la9sym.cpp
@@ -0,0 +1,104 @@
+/*
+ File: TS_la9sym.cpp
+ Date and Time: Sat Oct 11 20:57:19 2014
+*/
+#include "TS_la9.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la9;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_la9::TH_TS_la9(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_la9;
+ NS_TS_la9::CTS_la9 CTS_la9_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_la9_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_la9::PROC_TH_TS_la9(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_la9";
+ static bool one_time(false);
+ static NS_TS_la9::CTS_la9* NS_TS_la9_CTS_la9_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_la9_CTS_la9_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_la9_CTS_la9_ = new NS_TS_la9::CTS_la9();// parallel-parser's fsm table
+ NS_TS_la9_CTS_la9_parser = new Parser(*NS_TS_la9_CTS_la9_,Caller_pp);
+ }
+ proc_parser = NS_TS_la9_CTS_la9_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_la9::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_la9tbl.cpp b/web/yacco2/qa/TS_la9tbl.cpp
new file mode 100644
index 0000000000..4d92c5868e
--- /dev/null
+++ b/web/yacco2/qa/TS_la9tbl.cpp
@@ -0,0 +1,116 @@
+/*
+ File: TS_la9tbl.cpp
+ Date and Time: Sat Oct 11 20:57:19 2014
+*/
+#include "TS_la9.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_la9;// grammar's ns
+// first set terminals
+// raw_b
+// raw_c
+// raw_d
+yacco2::UCHAR LA1_CTS_la9[] ={
+1
+,13,28
+};
+extern yacco2::State S1_CTS_la9;
+extern yacco2::State S2_CTS_la9;
+extern yacco2::State S3_CTS_la9;
+extern yacco2::State S4_CTS_la9;
+extern yacco2::State S5_CTS_la9;
+extern yacco2::State S6_CTS_la9;
+struct S1std_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_la9 S1st_CTS_la9 = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_la9} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_la9} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_la9} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_la9} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_la9 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la9,0,0,0,0};
+struct S2rtd_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la9 S2rt_CTS_la9 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la9,CTS_la9::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la9 = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la9,0,0,0};
+struct S3std_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_la9 S3st_CTS_la9 = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_la9} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_la9} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_la9 = {5,(State*)&S4_CTS_la9};
+yacco2::State S3_CTS_la9 = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_la9
+,0,(Shift_tbl*)&S3st_CTS_la9,0,0,0,0};
+struct S4rtd_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la9 S4rt_CTS_la9 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la9,CTS_la9::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la9 = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la9,0,0,0};
+struct S5rtd_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_la9 S5rt_CTS_la9 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la9,CTS_la9::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_la9 = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_la9,0,0,0};
+struct S6rtd_CTS_la9{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_la9 S6rt_CTS_la9 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la9,CTS_la9::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_la9 = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_la9,0,0,0};
diff --git a/web/yacco2/qa/TS_laa.cpp b/web/yacco2/qa/TS_laa.cpp
new file mode 100644
index 0000000000..8d3af7f5ef
--- /dev/null
+++ b/web/yacco2/qa/TS_laa.cpp
@@ -0,0 +1,62 @@
+/*
+ File: TS_laa.cpp
+ Date and Time: Mon Jul 28 14:42:05 2008
+*/
+#include "TS_laa.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_laa;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = (Per_rule_s_reuse_table*) new reuse_rule1_table_type();
+ per_rule_s_table_[1] = (Per_rule_s_reuse_table*) new reuse_rule2_table_type();
+}
+ CTS_lab::
+ CTS_lab()
+ :yacco2::CAbs_fsm
+ ("TS_laa.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Mon Jul 28 14:42:05 2008 "
+ ,S1_CTS_lab){
+
+ }
+
+CTS_lab::~CTS_lab(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_lab::failed(){
+ return false;
+ }
+ void CTS_lab::op(){
+}
+int CTS_lab::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_lab::R_Reol_,P,true,true){
+
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_lab::R_Rdelimiters_,P,true,true){
+
+}
+
diff --git a/web/yacco2/qa/TS_laa.fsc b/web/yacco2/qa/TS_laa.fsc
new file mode 100644
index 0000000000..8c8c426454
--- /dev/null
+++ b/web/yacco2/qa/TS_laa.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_laa.fsc
+ Date and Time: Mon Jul 28 14:42:05 2008
+*/
+transitive n
+grammar-name "TS_laa"
+name-space "NS_TS_laa"
+thread-name "TH_TS_lab"
+monolithic n
+file-name "TS_laa.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_laa.h b/web/yacco2/qa/TS_laa.h
new file mode 100644
index 0000000000..8069a84a7c
--- /dev/null
+++ b/web/yacco2/qa/TS_laa.h
@@ -0,0 +1,72 @@
+/*
+ File: TS_laa.h
+ Date and Time: Mon Jul 28 14:42:05 2008
+*/
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+#ifndef __TS_laa_h__
+#define __TS_laa_h__ 1
+extern yacco2::Thread_entry ITH_TS_lab;
+extern yacco2::State S1_CTS_lab;
+namespace NS_TS_laa {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_lab(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_lab(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+struct reuse_rule1_table_type {// for rule: Reol
+ reuse_rule1_table_type():no_rule_s_entries_(1){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+};
+struct reuse_rule2_table_type {// for rule: Rdelimiters
+ reuse_rule2_table_type():no_rule_s_entries_(1){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+};
+class CTS_lab: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 2
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_lab();
+ ~CTS_lab();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Recycled_rule_struct* Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+#endif
diff --git a/web/yacco2/qa/TS_laa.lex b/web/yacco2/qa/TS_laa.lex
new file mode 100644
index 0000000000..09b4fe4096
--- /dev/null
+++ b/web/yacco2/qa/TS_laa.lex
@@ -0,0 +1,37 @@
+/*
+$echo FILE: TS_laa.lex
+$echo Purpose: test la expr with missing term: 'a + b - a - +'
+$echo Error
+*/
+fsm
+(fsm-id "TS_laa.lex",fsm-filename TS_laa,fsm-namespace NS_TS_laa
+,fsm-class CTS_laa
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_laa
+ ***
+ parallel-la-boundary
+ a + b - a - +
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_laasym.cpp b/web/yacco2/qa/TS_laasym.cpp
new file mode 100644
index 0000000000..b79f5bf698
--- /dev/null
+++ b/web/yacco2/qa/TS_laasym.cpp
@@ -0,0 +1,108 @@
+/*
+ File: TS_laasym.cpp
+ Date and Time: Mon Jul 28 14:42:05 2008
+*/
+#include "TS_laa.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_laa;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_laa::TH_TS_lab(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_lab;
+ NS_TS_laa::CTS_lab CTS_lab_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_lab_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_laa::PROC_TH_TS_lab(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_lab";
+ static bool one_time(false);
+ static NS_TS_laa::CTS_lab* NS_TS_laa_CTS_lab_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_laa_CTS_lab_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_laa_CTS_lab_ = new NS_TS_laa::CTS_lab();// parallel-parser's fsm table
+ NS_TS_laa_CTS_lab_parser = new Parser(*NS_TS_laa_CTS_lab_,Caller_pp);
+ }
+ proc_parser = NS_TS_laa_CTS_lab_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_lab::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Recycled_rule_struct* Recycled_rule){
+ char a[BUFFER_SIZE];
+ int bbb(0);
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_entry_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ int no_entries = rule_entry_tbl_ptr->no_rule_s_entries_;
+ Rule_s_reuse_entry* re(0);
+ for(;;){
+ re = &rule_entry_tbl_ptr->rule_s_reuse_entry_[bbb];
+ if(re->rule_on_stk_ == OFF){
+ re->rule_on_stk_ = ON;
+ Recycled_rule->rule_s_reuse_entry_ = re;
+ break;
+ }
+ ++bbb;
+ if(bbb >= no_entries){
+ KCHARP msg = "Error ran out of rule recycled entries for %s --- major bug";
+ sprintf(a,msg,re->rule_->id());
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ }
+ switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_laatbl.cpp b/web/yacco2/qa/TS_laatbl.cpp
new file mode 100644
index 0000000000..32895eca62
--- /dev/null
+++ b/web/yacco2/qa/TS_laatbl.cpp
@@ -0,0 +1,118 @@
+/*
+ File: TS_laatbl.cpp
+ Date and Time: Mon Jul 28 14:42:05 2008
+*/
+#include "TS_laa.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_laa;// grammar's ns
+// first set terminals
+// raw_plus
+// raw_minus
+// raw_a
+// raw_b
+yacco2::UCHAR LA1_CTS_lab[] ={
+2
+,6,40
+,13,6
+};
+extern yacco2::State S1_CTS_lab;
+extern yacco2::State S2_CTS_lab;
+extern yacco2::State S3_CTS_lab;
+extern yacco2::State S4_CTS_lab;
+extern yacco2::State S5_CTS_lab;
+extern yacco2::State S6_CTS_lab;
+struct S1std_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_lab S1st_CTS_lab = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_lab} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_lab} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_lab} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_lab} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_lab = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_lab,0,0,0,0};
+struct S2rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_lab S2rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_lab = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_lab,0,0,0};
+struct S3std_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_lab S3st_CTS_lab = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_lab} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_lab} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_lab = {5,(State*)&S4_CTS_lab};
+yacco2::State S3_CTS_lab = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_lab
+,0,(Shift_tbl*)&S3st_CTS_lab,0,0,0,0};
+struct S4rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_lab S4rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_lab = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_lab,0,0,0};
+struct S5rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_lab S5rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_lab = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_lab,0,0,0};
+struct S6rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_lab S6rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_lab = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_lab,0,0,0};
diff --git a/web/yacco2/qa/TS_lab.cpp b/web/yacco2/qa/TS_lab.cpp
new file mode 100644
index 0000000000..23b950cb11
--- /dev/null
+++ b/web/yacco2/qa/TS_lab.cpp
@@ -0,0 +1,60 @@
+/*
+ File: TS_lab.cpp
+ Date and Time: Sat Oct 11 20:57:21 2014
+*/
+#include "TS_lab.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_lab;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_lab::
+ CTS_lab()
+ :yacco2::CAbs_fsm
+ ("TS_lab.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Sat Oct 11 20:57:21 2014 "
+ ,S1_CTS_lab){
+
+ }
+
+CTS_lab::~CTS_lab(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_lab::failed(){
+ return false;
+ }
+ void CTS_lab::op(){
+}
+int CTS_lab::rhs_to_rules_mapping_[5] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+};
+Reol::Reol(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Reol",0,CTS_lab::R_Reol_,P,true,true){
+}
+
+Rdelimiters::Rdelimiters(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rdelimiters",0,CTS_lab::R_Rdelimiters_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_lab.fsc b/web/yacco2/qa/TS_lab.fsc
new file mode 100644
index 0000000000..35b0487896
--- /dev/null
+++ b/web/yacco2/qa/TS_lab.fsc
@@ -0,0 +1,21 @@
+/*
+ File: TS_lab.fsc
+ Date and Time: Sat Oct 11 20:57:21 2014
+*/
+transitive n
+grammar-name "TS_lab"
+name-space "NS_TS_lab"
+thread-name "TH_TS_lab"
+monolithic n
+file-name "TS_lab.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_lf
+ raw_cr
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/TS_lab.h b/web/yacco2/qa/TS_lab.h
new file mode 100644
index 0000000000..3f4baf1f91
--- /dev/null
+++ b/web/yacco2/qa/TS_lab.h
@@ -0,0 +1,64 @@
+/*
+ File: TS_lab.h
+ Date and Time: Sat Oct 11 20:57:21 2014
+*/
+#ifndef __TS_lab_h__
+#define __TS_lab_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_TS_lab;
+
+extern yacco2::State S1_CTS_lab;
+namespace NS_TS_lab {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_TS_lab(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_TS_lab(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_lab: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Reol_ = 569//start_of_rule_list + 0
+ ,rhs1_Reol_ = 1
+ ,R_Rdelimiters_ = 570//start_of_rule_list + 2
+ ,rhs1_Rdelimiters_ = 2
+ ,rhs2_Rdelimiters_ = 3
+ ,rhs3_Rdelimiters_ = 4
+ };
+ //no of la sets = 1
+ //no of states = 6
+ CTS_lab();
+ ~CTS_lab();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[5];
+ };
+struct Reol;
+struct Rdelimiters;
+struct Reol:public yacco2::CAbs_lr1_sym {
+ Reol(yacco2::Parser* P);
+ public:
+};
+
+struct Rdelimiters:public yacco2::CAbs_lr1_sym {
+ Rdelimiters(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_lab.lex b/web/yacco2/qa/TS_lab.lex
new file mode 100644
index 0000000000..c198ab4d70
--- /dev/null
+++ b/web/yacco2/qa/TS_lab.lex
@@ -0,0 +1,39 @@
+/*
+$echo FILE: TS_lab.lex
+$echo Purpose: test la expr with missing term: a + b + '-' + '+' - '-' + '-'
+$echo Note: dbl quotes for + and - as operands where the
+$echo unquoted + and - are considered operators.
+$echo Okay
+*/
+fsm
+(fsm-id "TS_lab.lex",fsm-filename TS_lab,fsm-namespace NS_TS_lab
+,fsm-class CTS_lab
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_TS_lab
+ ***
+ parallel-la-boundary
+ a + b + "-" + "+" - "-" + "-"
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol AD AB(){
+ -> Rdelimiters
+}
+
+
+Rdelimiters AD AB()
+{
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_lab.pdf b/web/yacco2/qa/TS_lab.pdf
new file mode 100644
index 0000000000..bbfb90c3f3
--- /dev/null
+++ b/web/yacco2/qa/TS_lab.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_lab_idx.pdf b/web/yacco2/qa/TS_lab_idx.pdf
new file mode 100644
index 0000000000..1f3380692d
--- /dev/null
+++ b/web/yacco2/qa/TS_lab_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/TS_labsym.cpp b/web/yacco2/qa/TS_labsym.cpp
new file mode 100644
index 0000000000..e7ceb39b8b
--- /dev/null
+++ b/web/yacco2/qa/TS_labsym.cpp
@@ -0,0 +1,104 @@
+/*
+ File: TS_labsym.cpp
+ Date and Time: Sat Oct 11 20:57:21 2014
+*/
+#include "TS_lab.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_lab;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_TS_lab::TH_TS_lab(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_TS_lab;
+ NS_TS_lab::CTS_lab CTS_lab_;// parallel-parser's parse table
+#define ssPARSE_TABLE CTS_lab_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_TS_lab::PROC_TH_TS_lab(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_TS_lab";
+ static bool one_time(false);
+ static NS_TS_lab::CTS_lab* NS_TS_lab_CTS_lab_(0);// parallel-parser's fsm table
+ static Parser* NS_TS_lab_CTS_lab_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_TS_lab_CTS_lab_ = new NS_TS_lab::CTS_lab();// parallel-parser's fsm table
+ NS_TS_lab_CTS_lab_parser = new Parser(*NS_TS_lab_CTS_lab_,Caller_pp);
+ }
+ proc_parser = NS_TS_lab_CTS_lab_parser;
+#include "wproc_pp_core.h"
+}
+void
+CTS_lab::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Reol_:{
+ Reol* sym;
+ if(re->rule_ == 0){
+ sym = new Reol(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Reol*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_Rdelimiters_:{
+ Rdelimiters* sym;
+ if(re->rule_ == 0){
+ sym = new Rdelimiters(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rdelimiters*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_labtbl.cpp b/web/yacco2/qa/TS_labtbl.cpp
new file mode 100644
index 0000000000..44f8451d99
--- /dev/null
+++ b/web/yacco2/qa/TS_labtbl.cpp
@@ -0,0 +1,118 @@
+/*
+ File: TS_labtbl.cpp
+ Date and Time: Sat Oct 11 20:57:21 2014
+*/
+#include "TS_lab.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_lab;// grammar's ns
+// first set terminals
+// raw_plus
+// raw_minus
+// raw_a
+// raw_b
+yacco2::UCHAR LA1_CTS_lab[] ={
+2
+,6,40
+,13,6
+};
+extern yacco2::State S1_CTS_lab;
+extern yacco2::State S2_CTS_lab;
+extern yacco2::State S3_CTS_lab;
+extern yacco2::State S4_CTS_lab;
+extern yacco2::State S5_CTS_lab;
+extern yacco2::State S6_CTS_lab;
+struct S1std_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_CTS_lab S1st_CTS_lab = {
+ 4
+ ,
+ {// start of table
+ {18,(State*)&S2_CTS_lab} // shift sym: raw_lf
+ ,{21,(State*)&S3_CTS_lab} // shift sym: raw_cr
+ ,{569,(State*)&S1_CTS_lab} // accept sym: Reol
+ ,{570,(State*)&S6_CTS_lab} // shift sym: Rdelimiters
+ }// end of shift table
+};
+yacco2::State S1_CTS_lab = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_lab,0,0,0,0};
+struct S2rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_lab S2rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs1_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_lab = //State's vectored into symbol: "x0a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_lab,0,0,0};
+struct S3std_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_CTS_lab S3st_CTS_lab = {
+ 2
+ ,
+ {// start of table
+ {5,(State*)&S4_CTS_lab} // shift sym: LR1_invisible_shift_operator
+ ,{18,(State*)&S5_CTS_lab} // shift sym: raw_lf
+ }// end of shift table
+};
+yacco2::Shift_entry S3ise_CTS_lab = {5,(State*)&S4_CTS_lab};
+yacco2::State S3_CTS_lab = //State's vectored into symbol: "x0d"
+{3
+,0,0,(Shift_entry*)&S3ise_CTS_lab
+,0,(Shift_tbl*)&S3st_CTS_lab,0,0,0,0};
+struct S4rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_lab S4rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs2_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_lab = //State's vectored into symbol: "|.|"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_lab,0,0,0};
+struct S5rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_CTS_lab S5rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs3_Rdelimiters_}
+ }// end of reduce table
+};
+yacco2::State S5_CTS_lab = //State's vectored into symbol: "x0a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_CTS_lab,0,0,0};
+struct S6rtd_CTS_lab{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_CTS_lab S6rt_CTS_lab = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_lab,CTS_lab::rhs1_Reol_}
+ }// end of reduce table
+};
+yacco2::State S6_CTS_lab = //State's vectored into symbol: "Rdelimiters"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_CTS_lab,0,0,0};
diff --git a/web/yacco2/qa/TS_path1.lex b/web/yacco2/qa/TS_path1.lex
new file mode 100644
index 0000000000..4e27c7ba78
--- /dev/null
+++ b/web/yacco2/qa/TS_path1.lex
@@ -0,0 +1,38 @@
+/*
+$echo FILE: TS_path1.lex
+$echo Purpose: Pathological test
+$echo Error --- Rule |RA| does not completely derive a subrule
+*/
+/@
+@** |TS_path1| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not completely derive a subrule.
+This is a left or right recursion situation: it depends on how u view the
+the epsilon situation. i'm slanted towards the left.
+Before left recursion can take place, one of its subrules must be derived
+before it can continue deriving its $\beta$ string.
+I allow printing of the PDF document but there can be down stream
+annoyances caused by my PDF implementation: the fsc file is expected.
+now I have corrected the emitted ``xx.w'' file to test
+for its existance.
+Also notice that i corrected the single symbol left recursion: i just bypass
+trying to draw it as it is pathological.\fbreak
+|RA| $\rightarrow$ $\alpha_{\epsilon}$ |RA| $\beta_{\epsilon}$ \fbreak
+@/
+fsm
+(fsm-id "TS_path1.lex",fsm-filename TS_path1
+,fsm-namespace NS_TS_path1
+,fsm-class CTS_path1
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "Pathological grammar -- does not derives a terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA
+}
+
+RA AD AB()
+{
+ -> RA
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path1a.cpp b/web/yacco2/qa/TS_path1a.cpp
new file mode 100644
index 0000000000..9a1f8163c7
--- /dev/null
+++ b/web/yacco2/qa/TS_path1a.cpp
@@ -0,0 +1,59 @@
+/*
+ File: TS_path1a.cpp
+ Date and Time: Sat Oct 11 20:57:24 2014
+*/
+#include "TS_path1a.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path1a;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_path1a::
+ CTS_path1a()
+ :yacco2::CAbs_fsm
+ ("TS_path1a.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"Pathological grammar -- does not derives a terminal string"
+ ,"Sat Oct 11 20:57:24 2014 "
+ ,S1_CTS_path1a){
+
+ }
+
+CTS_path1a::~CTS_path1a(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_path1a::failed(){
+ return false;
+ }
+ void CTS_path1a::op(){
+}
+int CTS_path1a::rhs_to_rules_mapping_[4] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+};
+Rstart::Rstart(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart",0,CTS_path1a::R_Rstart_,P,true,true){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,CTS_path1a::R_RA_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_path1a.fsc b/web/yacco2/qa/TS_path1a.fsc
new file mode 100644
index 0000000000..f18b6e3ce4
--- /dev/null
+++ b/web/yacco2/qa/TS_path1a.fsc
@@ -0,0 +1,20 @@
+/*
+ File: TS_path1a.fsc
+ Date and Time: Sat Oct 11 20:57:24 2014
+*/
+transitive n
+grammar-name "TS_path1a"
+name-space "NS_TS_path1a"
+thread-name "CTS_path1a"
+monolithic y
+file-name "TS_path1a.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_x
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Pathological grammar -- does not derives a terminal string"
diff --git a/web/yacco2/qa/TS_path1a.h b/web/yacco2/qa/TS_path1a.h
new file mode 100644
index 0000000000..ad800bd305
--- /dev/null
+++ b/web/yacco2/qa/TS_path1a.h
@@ -0,0 +1,58 @@
+/*
+ File: TS_path1a.h
+ Date and Time: Sat Oct 11 20:57:24 2014
+*/
+#ifndef __TS_path1a_h__
+#define __TS_path1a_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_CTS_path1a;
+namespace NS_TS_path1a {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_path1a: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstart_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstart_ = 1
+ ,R_RA_ = 570//start_of_rule_list + 2
+ ,rhs1_RA_ = 2
+ ,rhs2_RA_ = 3
+ };
+ //no of la sets = 2
+ //no of states = 4
+ CTS_path1a();
+ ~CTS_path1a();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[4];
+ };
+struct Rstart;
+struct RA;
+struct Rstart:public yacco2::CAbs_lr1_sym {
+ Rstart(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_path1a.lex b/web/yacco2/qa/TS_path1a.lex
new file mode 100644
index 0000000000..056b671155
--- /dev/null
+++ b/web/yacco2/qa/TS_path1a.lex
@@ -0,0 +1,30 @@
+/*
+$echo FILE: TS_path1a.lex
+$echo Dates: 21 Jul 2006
+$echo Purpose: Pathological test
+$echo Error --- does not derives a terminal string: not lr1
+$echo Error --- shift / reduce error before pathological check!
+*/
+/@
+@** |TS_path1a| grammar.\fbreak
+Pathological test grammar.\fbreak
+Not lr1.
+@/
+fsm
+(fsm-id "TS_path1a.lex",fsm-filename TS_path1a
+,fsm-namespace NS_TS_path1a
+,fsm-class CTS_path1a
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "Pathological grammar -- does not derives a terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA eog
+}
+
+RA AD AB()
+{
+ -> RA
+ -> "x"
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path1asym.cpp b/web/yacco2/qa/TS_path1asym.cpp
new file mode 100644
index 0000000000..7bbcde11e2
--- /dev/null
+++ b/web/yacco2/qa/TS_path1asym.cpp
@@ -0,0 +1,69 @@
+/*
+ File: TS_path1asym.cpp
+ Date and Time: Sat Oct 11 20:57:24 2014
+*/
+#include "TS_path1a.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path1a;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+CTS_path1a::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstart_:{
+ Rstart* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_path1atbl.cpp b/web/yacco2/qa/TS_path1atbl.cpp
new file mode 100644
index 0000000000..3ba414e0fb
--- /dev/null
+++ b/web/yacco2/qa/TS_path1atbl.cpp
@@ -0,0 +1,96 @@
+/*
+ File: TS_path1atbl.cpp
+ Date and Time: Sat Oct 11 20:57:24 2014
+*/
+#include "TS_path1a.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path1a;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_CTS_path1a[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_CTS_path1a[] ={
+1
+,0,4
+};
+extern yacco2::State S1_CTS_path1a;
+extern yacco2::State S2_CTS_path1a;
+extern yacco2::State S3_CTS_path1a;
+extern yacco2::State S4_CTS_path1a;
+struct S1std_CTS_path1a{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_CTS_path1a S1st_CTS_path1a = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S2_CTS_path1a} // shift sym: raw_x
+ ,{569,(State*)&S1_CTS_path1a} // accept sym: Rstart
+ ,{570,(State*)&S3_CTS_path1a} // shift sym: RA
+ }// end of shift table
+};
+yacco2::State S1_CTS_path1a = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_path1a,0,0,0,0};
+struct S2rtd_CTS_path1a{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_path1a S2rt_CTS_path1a = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_path1a,CTS_path1a::rhs2_RA_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_path1a = //State's vectored into symbol: "x"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_path1a,0,0,0};
+struct S3std_CTS_path1a{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_CTS_path1a S3st_CTS_path1a = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_CTS_path1a} // shift sym: LR1_eog
+ }// end of shift table
+};
+struct S3rtd_CTS_path1a{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_CTS_path1a S3rt_CTS_path1a = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_path1a,CTS_path1a::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S3_CTS_path1a = //State's vectored into symbol: "RA"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_CTS_path1a,(Reduce_tbl*)&S3rt_CTS_path1a,0,0,0};
+struct S4rtd_CTS_path1a{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_path1a S4rt_CTS_path1a = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CTS_path1a,CTS_path1a::rhs1_Rstart_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_path1a = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_path1a,0,0,0};
diff --git a/web/yacco2/qa/TS_path2.lex b/web/yacco2/qa/TS_path2.lex
new file mode 100644
index 0000000000..a9a8dd5441
--- /dev/null
+++ b/web/yacco2/qa/TS_path2.lex
@@ -0,0 +1,33 @@
+/*
+$echo FILE: TS_path2.lex
+$echo Purpose: Pathological test
+$echo Error --- Indirect lt recursion that does not derive a terminal string
+*/
+/@
+@** |TS_path2| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not derive a terminal string.
+It indirectly left recurses on self thru RB.
+@/
+fsm
+(fsm-id "TS_path2.lex",fsm-filename TS_path2
+,fsm-namespace NS_TS_path2
+,fsm-class CTS_path2
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "Indirect lt recursion that does not derive a terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA
+}
+
+
+RA AD AB()
+{
+ -> RB RA
+}
+RB AD AB()
+{
+ -> RA
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path3.lex b/web/yacco2/qa/TS_path3.lex
new file mode 100644
index 0000000000..1c564fe226
--- /dev/null
+++ b/web/yacco2/qa/TS_path3.lex
@@ -0,0 +1,32 @@
+/*
+$echo FILE: TS_path3.lex
+$echo Purpose: Pathologiacl test
+$echo Error --- rt recursion that does not derive a terminal string
+*/
+/@
+@** |TS_path3| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not derive a terminal string.
+It indirectly left recurses on self thru RB.
+@/
+fsm
+(fsm-id "TS_path3.lex",fsm-filename TS_path3
+,fsm-namespace NS_TS_path3
+,fsm-class CTS_path3
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "rt recursion that does not derive a terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA
+}
+
+RA AD AB()
+{
+ -> RB RA
+}
+RB AD AB()
+{
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path4.cpp b/web/yacco2/qa/TS_path4.cpp
new file mode 100644
index 0000000000..855fb1f3d1
--- /dev/null
+++ b/web/yacco2/qa/TS_path4.cpp
@@ -0,0 +1,59 @@
+/*
+ File: TS_path4.cpp
+ Date and Time: Sat Oct 11 20:57:28 2014
+*/
+#include "TS_path4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path4;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ CTS_path4::
+ CTS_path4()
+ :yacco2::CAbs_fsm
+ ("TS_path3.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"Okay accepts empty terminal string"
+ ,"Sat Oct 11 20:57:28 2014 "
+ ,S1_CTS_path4){
+
+ }
+
+CTS_path4::~CTS_path4(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_path4::failed(){
+ return false;
+ }
+ void CTS_path4::op(){
+}
+int CTS_path4::rhs_to_rules_mapping_[4] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+};
+Rstart::Rstart(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart",0,CTS_path4::R_Rstart_,P,true,true){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,CTS_path4::R_RA_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/TS_path4.fsc b/web/yacco2/qa/TS_path4.fsc
new file mode 100644
index 0000000000..628d5bb04c
--- /dev/null
+++ b/web/yacco2/qa/TS_path4.fsc
@@ -0,0 +1,20 @@
+/*
+ File: TS_path4.fsc
+ Date and Time: Sat Oct 11 20:57:28 2014
+*/
+transitive n
+grammar-name "TS_path4"
+name-space "NS_TS_path4"
+thread-name "CTS_path4"
+monolithic y
+file-name "TS_path4.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ LR1_eog
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"Okay accepts empty terminal string"
diff --git a/web/yacco2/qa/TS_path4.h b/web/yacco2/qa/TS_path4.h
new file mode 100644
index 0000000000..07398b9989
--- /dev/null
+++ b/web/yacco2/qa/TS_path4.h
@@ -0,0 +1,58 @@
+/*
+ File: TS_path4.h
+ Date and Time: Sat Oct 11 20:57:28 2014
+*/
+#ifndef __TS_path4_h__
+#define __TS_path4_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_CTS_path4;
+namespace NS_TS_path4 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class CTS_path4: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstart_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstart_ = 1
+ ,R_RA_ = 570//start_of_rule_list + 2
+ ,rhs1_RA_ = 2
+ ,rhs2_RA_ = 3
+ };
+ //no of la sets = 2
+ //no of states = 3
+ CTS_path4();
+ ~CTS_path4();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[4];
+ };
+struct Rstart;
+struct RA;
+struct Rstart:public yacco2::CAbs_lr1_sym {
+ Rstart(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/TS_path4.lex b/web/yacco2/qa/TS_path4.lex
new file mode 100644
index 0000000000..0fe8c94c26
--- /dev/null
+++ b/web/yacco2/qa/TS_path4.lex
@@ -0,0 +1,31 @@
+/*
+$echo FILE: TS_path4.lex
+$echo Purpose: Pathological test?
+$echo Error as Rstart and Ra both shift Ra and conflict s/r: not lr1
+$echo Error shift / reduce error on common eog before pathological check!
+*/
+/@
+@** |TS_path4| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not derive a terminal string.
+It indirectly left recurses on self thru RA with a twist of \emptyrule.
+@/
+fsm
+(fsm-id "TS_path3.lex",fsm-filename TS_path4
+,fsm-namespace NS_TS_path4
+,fsm-class CTS_path4
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "Okay accepts empty terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA eog
+}
+
+
+RA AD AB()
+{
+ -> RA
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path4sym.cpp b/web/yacco2/qa/TS_path4sym.cpp
new file mode 100644
index 0000000000..f15c5bee60
--- /dev/null
+++ b/web/yacco2/qa/TS_path4sym.cpp
@@ -0,0 +1,69 @@
+/*
+ File: TS_path4sym.cpp
+ Date and Time: Sat Oct 11 20:57:28 2014
+*/
+#include "TS_path4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path4;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+CTS_path4::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstart_:{
+ Rstart* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/TS_path4tbl.cpp b/web/yacco2/qa/TS_path4tbl.cpp
new file mode 100644
index 0000000000..1977ded275
--- /dev/null
+++ b/web/yacco2/qa/TS_path4tbl.cpp
@@ -0,0 +1,91 @@
+/*
+ File: TS_path4tbl.cpp
+ Date and Time: Sat Oct 11 20:57:28 2014
+*/
+#include "TS_path4.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_TS_path4;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_CTS_path4[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_CTS_path4[] ={
+1
+,0,4
+};
+extern yacco2::State S1_CTS_path4;
+extern yacco2::State S2_CTS_path4;
+extern yacco2::State S3_CTS_path4;
+struct S1std_CTS_path4{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_CTS_path4 S1st_CTS_path4 = {
+ 2
+ ,
+ {// start of table
+ {569,(State*)&S1_CTS_path4} // accept sym: Rstart
+ ,{570,(State*)&S2_CTS_path4} // shift sym: RA
+ }// end of shift table
+};
+struct S1rtd_CTS_path4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_CTS_path4 S1rt_CTS_path4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_path4,CTS_path4::rhs2_RA_}
+ }// end of reduce table
+};
+yacco2::State S1_CTS_path4 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_path4,(Reduce_tbl*)&S1rt_CTS_path4,0,0,0};
+struct S2std_CTS_path4{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_CTS_path4 S2st_CTS_path4 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S3_CTS_path4} // shift sym: LR1_eog
+ }// end of shift table
+};
+struct S2rtd_CTS_path4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_path4 S2rt_CTS_path4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_path4,CTS_path4::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_path4 = //State's vectored into symbol: "RA"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_CTS_path4,(Reduce_tbl*)&S2rt_CTS_path4,0,0,0};
+struct S3rtd_CTS_path4{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_CTS_path4 S3rt_CTS_path4 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CTS_path4,CTS_path4::rhs1_Rstart_}
+ }// end of reduce table
+};
+yacco2::State S3_CTS_path4 = //State's vectored into symbol: "eog"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_CTS_path4,0,0,0};
diff --git a/web/yacco2/qa/TS_path5.lex b/web/yacco2/qa/TS_path5.lex
new file mode 100644
index 0000000000..59b16e107f
--- /dev/null
+++ b/web/yacco2/qa/TS_path5.lex
@@ -0,0 +1,33 @@
+/*
+$echo FILE: TS_path5.lex
+$echo Purpose: Pathologiacl test
+$echo Error --- does not derive a subrule: terminal string
+$echo Error --- left recurses on self but does not derive a str first
+*/
+/@
+@** |TS_path5| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not derive a terminal string.
+It left recurses on self but does not derive a str first.
+@/
+fsm
+(fsm-id "TS_path5.lex",fsm-filename TS_path5
+,fsm-namespace NS_TS_path5
+,fsm-class CTS_path5
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "does not derive a subrule: terminal string")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA
+}
+
+RA AD AB()
+{
+ -> RA RB
+}
+RB AD AB()
+{
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path6.lex b/web/yacco2/qa/TS_path6.lex
new file mode 100644
index 0000000000..a7bf02a1ee
--- /dev/null
+++ b/web/yacco2/qa/TS_path6.lex
@@ -0,0 +1,32 @@
+/*
+$echo FILE: TS_path6.lex
+$echo Purpose: Pathologiacl test
+$echo Error --- Rule |RA| does not derive a terminal string
+*/
+/@
+@** |TS_path6| grammar.\fbreak
+Pathological test grammar.\fbreak
+Rule |RA| does not derive a terminal string.
+It left recurses on self but does not derive a str first.
+@/
+fsm
+(fsm-id "TS_path6.lex",fsm-filename TS_path6
+,fsm-namespace NS_TS_path6
+,fsm-class CTS_path6
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "does not derive a subrule")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart AD AB(){
+ -> RA
+}
+
+RA AD AB()
+{
+ -> RA RB
+}
+RB AD AB()
+{
+ -> RA
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_path7.lex b/web/yacco2/qa/TS_path7.lex
new file mode 100644
index 0000000000..ad109bdb15
--- /dev/null
+++ b/web/yacco2/qa/TS_path7.lex
@@ -0,0 +1,41 @@
+/*
+$echo FILE: TS_path7.lex
+$echo Purpose: Pathological test
+$echo Error --- Grammar is not lr1.
+*/
+/@
+@** |TS_path7| grammar.\fbreak
+Pathological test grammar.\fbreak
+Grammar is not lr1.
+|RA| $\rightarrow$ $\alpha{_{\epsilon}}$ |RA|\fbreak
+@/
+fsm
+(fsm-id "TS_path7.lex",fsm-filename TS_path7
+,fsm-namespace NS_TS_path7
+,fsm-class CTS_path7
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Rstart (){
+ -> RA eog
+}
+
+RA ()
+{
+ -> RB RA
+ -> "x"
+}
+RB ()
+{
+ -> RC RD
+}
+RC ()
+{
+ ->
+}
+RD ()
+{
+ ->
+}
+}// end of rules
diff --git a/web/yacco2/qa/TS_pathsp2.lex b/web/yacco2/qa/TS_pathsp2.lex
new file mode 100644
index 0000000000..899a5a6e63
--- /dev/null
+++ b/web/yacco2/qa/TS_pathsp2.lex
@@ -0,0 +1,82 @@
+/*
+$echo FILE: TS_pathSP2.lex
+$echo Copy of lr1_sp2.lex modified to show not lr(1)
+$echo Test on common closure state but vector y for RE not lr1
+$echo Merge into own closure gened state. so stop gening
+$echo A LR1 GRAMMAR FROM
+$echo DAVID SPECTOR
+$echo SIGPLAN VOL 23 DEC/88
+$echo Not lr1
+*/
+/@
+@** |LR1_SP2| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+@/
+fsm (fsm-id "lr1_sp2.lex",fsm-filename lr1_sp2,fsm-namespace NS_lr1_sp2
+ ,fsm-class Clr1_sp2_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_sp2(){
+ -> RS eog
+ }
+
+ RS(){
+ -> t RE a
+ -> t RF b
+ -> t RG c
+ -> t RH d
+ -> u RE b
+ -> u RF c
+ -> u RG d
+ -> u RH a
+
+ -> v RE c
+ -> v RF d
+ -> v RG a
+ -> v RH b
+ -> w RE d
+ -> w RF a
+ -> w RG b
+ -> w RH c
+ }
+
+ RE(){
+ -> x RA
+ -> y RD
+ }
+
+ RF(){
+ -> x RB
+ -> y RA
+ }
+
+ RG(){
+ -> x RC
+ -> y RB
+ }
+
+ RH(){
+ -> x RD
+ -> y RC
+ }
+ RA(){
+ -> z
+ }
+
+ RB(){
+ -> z
+ }
+
+ RC(){
+ -> z
+ }
+
+ RD(){
+ -> z
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/a.dat b/web/yacco2/qa/a.dat
new file mode 100644
index 0000000000..ab0df53b27
--- /dev/null
+++ b/web/yacco2/qa/a.dat
@@ -0,0 +1,8 @@
+/*
+ $echo file: 1.dat
+ $echo test integer, include, intehger
+*/
+
+A
+@"/usr/local/yacco2/testdriver/b.dat"
+9 \ No newline at end of file
diff --git a/web/yacco2/qa/angled_string.dat b/web/yacco2/qa/angled_string.dat
new file mode 100644
index 0000000000..3777623ae8
--- /dev/null
+++ b/web/yacco2/qa/angled_string.dat
@@ -0,0 +1,15 @@
+// file angled_string.dat
+// test
+/*
+$echo file: angled_string.dat
+$echo test: test angled staring combinations
+$echo last item in error bad escape and no no closing >
+*/
+<> // zero filled string
+<\"> // string of 1 "
+<\"\">// string of 2 ""
+<hello world>
+<'>
+<'''>
+<\n\t\v\b\r\f\a\\\?\'\"\\\u7961\U79616363\077\xffd0momma mia> // \test escape
+<\
diff --git a/web/yacco2/qa/b.dat b/web/yacco2/qa/b.dat
new file mode 100644
index 0000000000..7371f47a6f
--- /dev/null
+++ b/web/yacco2/qa/b.dat
@@ -0,0 +1 @@
+B \ No newline at end of file
diff --git a/web/yacco2/qa/c_comment.dat b/web/yacco2/qa/c_comment.dat
new file mode 100644
index 0000000000..afc207b478
--- /dev/null
+++ b/web/yacco2/qa/c_comment.dat
@@ -0,0 +1,10 @@
+/*
+$echo file:c_comment.dat
+$echo test out comment 9 variations c stlye outside of this prefix comment
+*/
+/**/
+/********** // ******* *****/
+///**/
+// ssss
+/*//*
+*/ \ No newline at end of file
diff --git a/web/yacco2/qa/c_literal.dat b/web/yacco2/qa/c_literal.dat
new file mode 100644
index 0000000000..deaca6798e
--- /dev/null
+++ b/web/yacco2/qa/c_literal.dat
@@ -0,0 +1,14 @@
+/*
+$echo file:c_literal.dat
+$echo test out 8 c literal variations where 8th is in error
+$echo literal has not been closed off by the closing '
+$echo but the esc seq not completed first
+*/
+'\n\t\v\b\r\f\a\\\?\"\'\\'// \test escape str 1
+''// zero filled string str2
+'\''// string of 1 'str3
+'\'\''// string of 2 ''str4
+'hello world'//str5
+'"'////str6
+'"""'//str7
+'\
diff --git a/web/yacco2/qa/c_literal1.dat b/web/yacco2/qa/c_literal1.dat
new file mode 100644
index 0000000000..e4ef915665
--- /dev/null
+++ b/web/yacco2/qa/c_literal1.dat
@@ -0,0 +1,6 @@
+/*
+$echo file:c_literal1.dat
+$echo test out eos of literal
+$echo error - literal has not been closed off by the closing '
+*/
+'
diff --git a/web/yacco2/qa/c_string.dat b/web/yacco2/qa/c_string.dat
new file mode 100644
index 0000000000..6f020c2c0b
--- /dev/null
+++ b/web/yacco2/qa/c_string.dat
@@ -0,0 +1,14 @@
+/*
+$echo file:c_string.dat
+$echo test out 8 c++ strings where 8th is in error
+$echo c string literal has not been closed off by the closing "
+$echo but its starting escape seq is not completed before closing "
+*/
+""// zero filled string
+"\""// string of 1 "
+"\"\""// string of 2 ""
+"hello world"
+"'"
+"'''"
+"\n\t\v\b\r\f\a\\\?\'\"\\"// \test escape
+"\
diff --git a/web/yacco2/qa/c_string1.dat b/web/yacco2/qa/c_string1.dat
new file mode 100644
index 0000000000..a232847ad1
--- /dev/null
+++ b/web/yacco2/qa/c_string1.dat
@@ -0,0 +1,6 @@
+/*
+$echo file:c_string1.dat
+$echo test out eos of c++ string
+$echo error - c++ string has not been closed off by the closing "
+*/
+"
diff --git a/web/yacco2/qa/cmd_line.dat b/web/yacco2/qa/cmd_line.dat
new file mode 100644
index 0000000000..9605e200fd
--- /dev/null
+++ b/web/yacco2/qa/cmd_line.dat
@@ -0,0 +1,5 @@
+/*
+ file: cmd_line.dat
+ test: error on state's parm > 30k
+*/
+"c:/yacco2/compiler/grammars/ws.lex" /gg/s:40000 \ No newline at end of file
diff --git a/web/yacco2/qa/cmd_line1.dat b/web/yacco2/qa/cmd_line1.dat
new file mode 100644
index 0000000000..6d4e43df9c
--- /dev/null
+++ b/web/yacco2/qa/cmd_line1.dat
@@ -0,0 +1,5 @@
+/*
+ file: cmd_line1.dat
+ test: error on file name
+*/
+"ws1.lex" /s:30000 \ No newline at end of file
diff --git a/web/yacco2/qa/cmd_line2.dat b/web/yacco2/qa/cmd_line2.dat
new file mode 100644
index 0000000000..96ee47e846
--- /dev/null
+++ b/web/yacco2/qa/cmd_line2.dat
@@ -0,0 +1,6 @@
+/*
+ file: cmd_line2.dat
+ test: error on option using prefix
+*/
+"c:/yacco2/compiler/grammars/ws.lex"
+/tt
diff --git a/web/yacco2/qa/cmd_line3.dat b/web/yacco2/qa/cmd_line3.dat
new file mode 100644
index 0000000000..8a9b43a07d
--- /dev/null
+++ b/web/yacco2/qa/cmd_line3.dat
@@ -0,0 +1,7 @@
+/*
+$echo file: cmd_line3.dat
+$echo test: load up all switches
+$echo Okay
+*/
+/t
+/lrk
diff --git a/web/yacco2/qa/cmd_line4.dat b/web/yacco2/qa/cmd_line4.dat
new file mode 100644
index 0000000000..d1cf88969c
--- /dev/null
+++ b/web/yacco2/qa/cmd_line4.dat
@@ -0,0 +1,5 @@
+/*
+ file: cmd_line4.dat
+ test: defaults
+*/
+"c:/yacco2/compiler/grammars/ws.lex"/g
diff --git a/web/yacco2/qa/comment.dat b/web/yacco2/qa/comment.dat
new file mode 100644
index 0000000000..8bceb2d4cc
--- /dev/null
+++ b/web/yacco2/qa/comment.dat
@@ -0,0 +1,16 @@
+/*
+$echo file:comment.dat
+$echo okay - test out comment 9 variations outside of this prefix comment
+*/
+/**/
+/********** // ******* *****/
+//
+////
+///**/...
+// ssss
+/*//*
+*/
+///**/
+/*
+//
+*/
diff --git a/web/yacco2/qa/comment1.dat b/web/yacco2/qa/comment1.dat
new file mode 100644
index 0000000000..7f8a0d4f4c
--- /dev/null
+++ b/web/yacco2/qa/comment1.dat
@@ -0,0 +1,6 @@
+/*
+$echo file:comment1.dat
+$echo test out comment overrun
+*/
+/* * **/
+/* \ No newline at end of file
diff --git a/web/yacco2/qa/costofthrding.txt b/web/yacco2/qa/costofthrding.txt
new file mode 100644
index 0000000000..af6f6e4d00
--- /dev/null
+++ b/web/yacco2/qa/costofthrding.txt
@@ -0,0 +1,119999 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/yacco2/qa/dbl_colon.dat b/web/yacco2/qa/dbl_colon.dat
new file mode 100644
index 0000000000..f7863383bb
--- /dev/null
+++ b/web/yacco2/qa/dbl_colon.dat
@@ -0,0 +1,8 @@
+/*
+/*
+$echo file: dbl_colon.dat
+$echo 1st good, 2nd prefix test bad token
+$echo error --- 2nd prefix test bad token
+*/
+::
+:::
diff --git a/web/yacco2/qa/eol.dat b/web/yacco2/qa/eol.dat
new file mode 100644
index 0000000000..fa00254130
--- /dev/null
+++ b/web/yacco2/qa/eol.dat
@@ -0,0 +1,56 @@
+/*
+FILE: eol.lex
+Dates: 4 May 2000
+Test file: eol.dat
+Purpose: end-of-line and line splice recognizer
+ tokens: T_splice_eol, T_eol
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol{
+ user-declaration
+ public:
+ static UINT line_cnt_;
+ ***
+ user-implementation
+ UINT Ceol::line_cnt_ = 0;
+ ***
+}
+,fsm-version "1.0" ,fsm-date "4 May 2000",fsm-debug "false"
+,fsm-comments "end-of-line/line splice recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+ code
+#include "yacco2:parallel_function_include_code.h"
+ ***
+)
+
+//@"yacco2_include_files.lex"
+//
+rules{
+Reol AD AB(
+lhs{
+ user-declaration
+ public:
+static CAbs_lr1_sym* sym_;
+ ***
+ user-implementation
+ CAbs_lr1_sym* Reol::sym_(0);
+ ***
+ }
+){
+ -> Reol_chrs {
+ rhs-op
+ CAbs_lr1_sym* sym = new T_eol();
+ sym->rc(Reol::sym_);
+ RSVP(sym)
+ Reol::sym_ = 0;
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/err_sym.dat b/web/yacco2/qa/err_sym.dat
new file mode 100644
index 0000000000..c78bf48c1c
--- /dev/null
+++ b/web/yacco2/qa/err_sym.dat
@@ -0,0 +1,51 @@
+/*
+File: err_sym.dat
+Date: 29 Mar 2004
+test error syms
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" (sym-class LR1_err_no_end_of_code)
+nottttt (sym-class LR1_err_no_cmd_lne_data)
+"no-cmd-lne-data" AD (sym-class LR1_err_no_cmd_lne_data)
+"no-filename" AB (sym-class LR1_err_no_filename)
+
+"no-error-symbols-definitions-present" AD AB (sym-class LR1_err_no_error_sym_defs_present)
+"no-key-value-present-in-terminal-definition" AB AD (sym-class LR1_err_no_terminal_key_present)
+
+"nested-files-exceeded" AD AB
+(sym-class LR1_err_nested_files_exceeded {
+ user-declaration
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+ user-implementation
+ LR1_err_nested_files_exceeded::
+ LR1_err_nested_files_exceeded(INT Nested_cnt,std::string& File_name){
+ T_CTOR("nested-files-exceeded",T_LR1_err_nested_files_exceeded_,0,0,false,true,0,0)
+ nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+ ***
+ constructor
+ x_ = -1;
+ ***
+ destructor
+ R->x_ = 0;
+ ***
+ op
+ cout << "hi" << endl;
+ ***
+ }
+)
+/**/nnnnnn/**/AB/**/AD/**/(/**/sym-class/**/LR1_err_present/**/)/**/
+/**/nnnnnn/**/AB/**/AD/**/(/**/sym-class/**/LR1_err_present/**/)/**/
+
+
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym1.dat b/web/yacco2/qa/err_sym1.dat
new file mode 100644
index 0000000000..97898b894b
--- /dev/null
+++ b/web/yacco2/qa/err_sym1.dat
@@ -0,0 +1,12 @@
+/*
+File: err_sym1.dat
+Date: 29 Mar 2004
+duplicate sym name
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" (sym-class LR1_err_no_end_of_code)
+"no-end-of-code" (sym-class LR1_err_no_cmd_lne_data)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym10.dat b/web/yacco2/qa/err_sym10.dat
new file mode 100644
index 0000000000..9161224af3
--- /dev/null
+++ b/web/yacco2/qa/err_sym10.dat
@@ -0,0 +1,24 @@
+/*
+File: err_sym10.dat
+Date: 29 Mar 2004
+no sym-class id present
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested-files-exceeded"
+(sym-class //LR1_err_nested_files_exceeded
+{
+ user-declaration1
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym11.dat b/web/yacco2/qa/err_sym11.dat
new file mode 100644
index 0000000000..3a110650c3
--- /dev/null
+++ b/web/yacco2/qa/err_sym11.dat
@@ -0,0 +1,24 @@
+/*
+File: err_sym11.dat
+Date: 29 Mar 2004
+missing ***
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested-files-exceeded"
+(sym-class LR1_err_nested_files_exceeded
+{
+ user-declaration
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ **
+)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym2.dat b/web/yacco2/qa/err_sym2.dat
new file mode 100644
index 0000000000..d9d2abbeae
--- /dev/null
+++ b/web/yacco2/qa/err_sym2.dat
@@ -0,0 +1,11 @@
+/*
+File: err_sym2.dat
+Date: 29 Mar 2004
+duplicate AD declared
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" AD AD (sym-class LR1_err_no_end_of_code)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym3.dat b/web/yacco2/qa/err_sym3.dat
new file mode 100644
index 0000000000..203066a06e
--- /dev/null
+++ b/web/yacco2/qa/err_sym3.dat
@@ -0,0 +1,11 @@
+/*
+File: err_sym3.dat
+Date: 29 Mar 2004
+duplicate AB declared
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" AB AB (sym-class LR1_err_no_end_of_code)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym4.dat b/web/yacco2/qa/err_sym4.dat
new file mode 100644
index 0000000000..118d8ecd27
--- /dev/null
+++ b/web/yacco2/qa/err_sym4.dat
@@ -0,0 +1,11 @@
+/*
+File: err_sym4.dat
+Date: 29 Mar 2004
+missing (
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" {sym-class LR1_err_no_end_of_code)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym5.dat b/web/yacco2/qa/err_sym5.dat
new file mode 100644
index 0000000000..f172f2c51d
--- /dev/null
+++ b/web/yacco2/qa/err_sym5.dat
@@ -0,0 +1,11 @@
+/*
+File: err_sym5.dat
+Date: 29 Mar 2004
+missing )
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"no-end-of-code" (sym-class LR1_err_no_end_of_code]
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym6.dat b/web/yacco2/qa/err_sym6.dat
new file mode 100644
index 0000000000..6eb84d0c80
--- /dev/null
+++ b/web/yacco2/qa/err_sym6.dat
@@ -0,0 +1,44 @@
+/*
+File: err_sym6.dat
+Date: 29 Mar 2004
+duplicate directive
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested-files-exceeded"
+(sym-class LR1_err_nested_files_exceeded {
+ user-declaration
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+ user-implementation
+ LR1_err_nested_files_exceeded::
+ LR1_err_nested_files_exceeded(INT Nested_cnt,std::string& File_name){
+ T_CTOR("nested-files-exceeded",T_LR1_err_nested_files_exceeded_,0,0,false,true,0,0)
+ nested_cnt_ = Nested_cnt;file_exceeded_ += File_name.c_str();}
+ ***
+ constructor
+ x_ = -1;
+ ***
+ destructor
+ R->x_ = 0;
+ ***
+ op
+ cout << "hi" << endl;
+ ***
+ constructor
+ x_ = -1;
+ ***
+ }
+)
+
+
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym7.dat b/web/yacco2/qa/err_sym7.dat
new file mode 100644
index 0000000000..76802da7a8
--- /dev/null
+++ b/web/yacco2/qa/err_sym7.dat
@@ -0,0 +1,23 @@
+/*
+File: err_sym7.dat
+Date: 29 Mar 2004
+invalid duplicate
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested-files-exceeded"
+(sym-class LR1_err_nested_files_exceeded {
+ user-declaration1
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym8.dat b/web/yacco2/qa/err_sym8.dat
new file mode 100644
index 0000000000..bd1fac9eab
--- /dev/null
+++ b/web/yacco2/qa/err_sym8.dat
@@ -0,0 +1,23 @@
+/*
+File: err_sym8.dat
+Date: 29 Mar 2004
+no sym key
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+//"nested-files-exceeded"
+(sym-class LR1_err_nested_files_exceeded {
+ user-declaration1
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/err_sym9.dat b/web/yacco2/qa/err_sym9.dat
new file mode 100644
index 0000000000..ecd08ac98e
--- /dev/null
+++ b/web/yacco2/qa/err_sym9.dat
@@ -0,0 +1,23 @@
+/*
+File: err_sym9.dat
+Date: 29 Mar 2004
+no sym-class present
+*/
+error-symbols
+(file-name err_symbols
+,name-space NS_yacco2_err_symbols)
+{
+"nested-files-exceeded"
+(/*sym-class*/ LR1_err_nested_files_exceeded {
+ user-declaration1
+ public:
+ int x_;
+ LR1_err_nested_files_exceeded(INT Nested_file_cnt,std::string& File_name);
+ INT nested_cnt(){return nested_cnt_;};
+ std::string* file_exceeded(){return &file_exceeded_;};
+ private:
+ INT nested_cnt_;
+ std::string file_exceeded_;
+ ***
+)
+} \ No newline at end of file
diff --git a/web/yacco2/qa/esc_seq.dat b/web/yacco2/qa/esc_seq.dat
new file mode 100644
index 0000000000..847e949e11
--- /dev/null
+++ b/web/yacco2/qa/esc_seq.dat
@@ -0,0 +1,12 @@
+/*
+$echo file:esc_seq.dat
+$echo test out 6 escape sequences inside literal and in c++ string
+$echo hex, extra wide sequence, octal and \ escape sequences
+$echo last \ escape sequence is in error
+*/
+"\U00ffaBaD"
+'\n\t\v\b\r\f\a\\\?\'\"\\\u7961\U79616363\077\xffd0momma mia'
+'\xa'
+"\x0123456789abcde"
+"\xfff"
+'\m' \ No newline at end of file
diff --git a/web/yacco2/qa/file_include1.dat b/web/yacco2/qa/file_include1.dat
new file mode 100644
index 0000000000..2cff49b8e5
--- /dev/null
+++ b/web/yacco2/qa/file_include1.dat
@@ -0,0 +1,6 @@
+/*
+$echo file: file_include1.dat
+$echo test recursion on self. should abort at level 16
+$echo Error
+*/
+@"/usr/local/yacco2/qa/file_include1.dat"
diff --git a/web/yacco2/qa/file_include2.dat b/web/yacco2/qa/file_include2.dat
new file mode 100644
index 0000000000..9d46902382
--- /dev/null
+++ b/web/yacco2/qa/file_include2.dat
@@ -0,0 +1,6 @@
+/*
+$echo file: file_include2.dat
+$echo no-filename
+$echo Error no file name for the file include operator
+*/
+@
diff --git a/web/yacco2/qa/fsm_class_phrase.dat b/web/yacco2/qa/fsm_class_phrase.dat
new file mode 100644
index 0000000000..e5f7dd880d
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase.dat
+$echo test missing , after fsm-class section
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+ int x(0);
+ ***
+}
diff --git a/web/yacco2/qa/fsm_class_phrase1.dat b/web/yacco2/qa/fsm_class_phrase1.dat
new file mode 100644
index 0000000000..bb9d659091
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase1.dat
@@ -0,0 +1,43 @@
+/*
+$echo file: fsm_class_phrase1.dat
+$echo all directives:
+$echo will produce no T enumeration phrase error
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ user-declaration
+ int x__;
+ ***
+ user-implementation
+ Cfsm_class_phrase_th::x__ = 0;
+ ***
+ user-prefix-declaration
+ #include <sss.h>
+ ***
+ user-suffix-declaration
+ #include <zzz.h>
+ ***
+ constructor
+ int x__;
+ ***
+ destructor
+ x__ = 0;
+ ***
+ op
+ int x(0);
+ ***
+ failed
+ return false;
+ ***
+ user-imp-tbl
+ #include <zzz.h>
+ ***
+ user-imp-sym
+ #include <zzz.h>
+ ***
+}
+,fsm-version "1.0",fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments "lexical stage constructing tokens for syntax parser")
+
diff --git a/web/yacco2/qa/fsm_class_phrase10.dat b/web/yacco2/qa/fsm_class_phrase10.dat
new file mode 100644
index 0000000000..c15decace4
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase10.dat
@@ -0,0 +1,11 @@
+/*
+$echo file: fsm_class_phrase10.dat
+$echo missing version string
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th
+,fsm-version ,fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments "lexical stage constructing tokens for syntax parser")
+
diff --git a/web/yacco2/qa/fsm_class_phrase11.dat b/web/yacco2/qa/fsm_class_phrase11.dat
new file mode 100644
index 0000000000..0ed6f58ea3
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase11.dat
@@ -0,0 +1,39 @@
+/*
+$echo file: fsm_class_phrase11.dat
+$echo missing date string
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ user-declaration
+ int x__;
+ ***
+ user-implementation
+ Cfsm_class_phrase_th::x__ = 0;
+ ***
+ user-prefix-declaration
+ #include <sss.h>
+ ***
+ user-suffix-declaration
+ #include <zzz.h>
+ ***
+ constructor
+ int x__;
+ ***
+ destructor
+ x__ = 0;
+ ***
+ op
+ int x(0);
+ ***
+ user-imp-tbl
+ #include <zzz.h>
+ ***
+ user-imp-sym
+ #include <zzz.h>
+ ***
+}
+,fsm-version "1.0" ,fsm-date ,fsm-debug "true"
+,fsm-comments "lexical stage constructing tokens for syntax parser")
+
diff --git a/web/yacco2/qa/fsm_class_phrase12.dat b/web/yacco2/qa/fsm_class_phrase12.dat
new file mode 100644
index 0000000000..12f0cad8cc
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase12.dat
@@ -0,0 +1,39 @@
+/*
+$echo file: fsm_class_phrase12.dat
+$echo missing debug string
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ user-declaration
+ int x__;
+ ***
+ user-implementation
+ Cfsm_class_phrase_th::x__ = 0;
+ ***
+ user-prefix-declaration
+ #include <sss.h>
+ ***
+ user-suffix-declaration
+ #include <zzz.h>
+ ***
+ constructor
+ int x__;
+ ***
+ destructor
+ x__ = 0;
+ ***
+ op
+ int x(0);
+ ***
+ user-imp-tbl
+ #include <zzz.h>
+ ***
+ user-imp-sym
+ #include <zzz.h>
+ ***
+}
+,fsm-version "1.0" ,fsm-date "17 Apr 2001",fsm-debug
+,fsm-comments "lexical stage constructing tokens for syntax parser")
+
diff --git a/web/yacco2/qa/fsm_class_phrase13.dat b/web/yacco2/qa/fsm_class_phrase13.dat
new file mode 100644
index 0000000000..cca80cba7e
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase13.dat
@@ -0,0 +1,10 @@
+/*
+$echo file: fsm_class_phrase13.dat
+$echo missing comments string
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th,fsm-version "1.0" ,fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments )
+
diff --git a/web/yacco2/qa/fsm_class_phrase14.dat b/web/yacco2/qa/fsm_class_phrase14.dat
new file mode 100644
index 0000000000..d1b213c62a
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase14.dat
@@ -0,0 +1,10 @@
+/*
+$echo file: fsm_class_phrase14.dat
+$echo missing , before the version
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th}
+,fsm-version ,fsm-date "17 Apr 2001",fsm-debug "true"
+,fsm-comments "lexical stage constructing tokens for syntax parser")
diff --git a/web/yacco2/qa/fsm_class_phrase15.dat b/web/yacco2/qa/fsm_class_phrase15.dat
new file mode 100644
index 0000000000..99f1a38d10
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase15.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase15.dat
+$echo debug string not true or false
+$echo Error
+*/
+fsm
+(/** **/fsm-id/** **/"fsm_class_phrase_th.lex"/** **/,/** **/fsm-filename/** **/fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+/** **/,/** **/fsm-class/** **/Cfsm_class_phrase_th/** **/
+/** **/,fsm-version/** **/"1.0"/** **/,/** **/fsm-date/** **/"17 Apr 2001"/** **/
+/** **/,/** **/fsm-debug/** **/"True"/** **/
+/** **/,fsm-comments/** **/
+"lexical stage constructing tokens for syntax parser"/** **/)
diff --git a/web/yacco2/qa/fsm_class_phrase2.dat b/web/yacco2/qa/fsm_class_phrase2.dat
new file mode 100644
index 0000000000..a54c9d4747
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase2.dat
@@ -0,0 +1,39 @@
+/*
+$echo file: fsm_class_phrase2.dat
+$echo dup directive
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ user-declaration
+ int x__;
+ ***
+ user-implementation
+ Cfsm_class_phrase_th::x__ = 0;
+ ***
+ user-prefix-declaration
+ #include <sss.h>
+ ***
+ user-suffix-declaration
+ #include <zzz.h>
+ ***
+ constructor
+ int x__;
+ ***
+ destructor
+ x__ = 0;
+ ***
+ op
+ int x(0);
+ ***
+ user-imp-tbl
+ #include <zzz.h>
+ ***
+ user-imp-sym
+ #include <zzz.h>
+ ***
+ user-prefix-declaration
+ #include <sss.h>
+ ***
+}
diff --git a/web/yacco2/qa/fsm_class_phrase3.dat b/web/yacco2/qa/fsm_class_phrase3.dat
new file mode 100644
index 0000000000..1340a15c22
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase3.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase3.dat
+$echo no directive present
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op1
+ int x__;
+ ***
+}
diff --git a/web/yacco2/qa/fsm_class_phrase4.dat b/web/yacco2/qa/fsm_class_phrase4.dat
new file mode 100644
index 0000000000..4017dbe5b5
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase4.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase4.dat
+$echo eog missing close brace
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+ int x__;
+ ***
+
diff --git a/web/yacco2/qa/fsm_class_phrase5.dat b/web/yacco2/qa/fsm_class_phrase5.dat
new file mode 100644
index 0000000000..d6153fc2c0
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase5.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase5.dat
+$echo missing close brace
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+ int x__;
+ ***
+, \ No newline at end of file
diff --git a/web/yacco2/qa/fsm_class_phrase6.dat b/web/yacco2/qa/fsm_class_phrase6.dat
new file mode 100644
index 0000000000..f9f6aa3272
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase6.dat
@@ -0,0 +1,13 @@
+/*
+$echo file: fsm_class_phrase6.dat
+$echo comment overrun in syntax
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+/*
+ int x__;
+ ***
+, \ No newline at end of file
diff --git a/web/yacco2/qa/fsm_class_phrase7.dat b/web/yacco2/qa/fsm_class_phrase7.dat
new file mode 100644
index 0000000000..3f11c333ca
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase7.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase7.dat
+$echo no end-of-code
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+ int x__;
+ **
+, \ No newline at end of file
diff --git a/web/yacco2/qa/fsm_class_phrase8.dat b/web/yacco2/qa/fsm_class_phrase8.dat
new file mode 100644
index 0000000000..62a83f01f6
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase8.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase8.dat
+$echo no identifier
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class /*xcccccccccc*/{
+ op
+ int x__;
+ ***
+, \ No newline at end of file
diff --git a/web/yacco2/qa/fsm_class_phrase9.dat b/web/yacco2/qa/fsm_class_phrase9.dat
new file mode 100644
index 0000000000..8fdda21cfb
--- /dev/null
+++ b/web/yacco2/qa/fsm_class_phrase9.dat
@@ -0,0 +1,12 @@
+/*
+$echo file: fsm_class_phrase9.dat
+$echo no syntax code present
+$echo Error
+*/
+fsm
+(fsm-id "fsm_class_phrase_th.lex",fsm-filename fsm_class_phrase_th,fsm-namespace NS_fsm_class_phrase_th
+,fsm-class Cfsm_class_phrase_th{
+ op
+ //int x__;
+ ***
+}
diff --git a/web/yacco2/qa/fsm_op.dat b/web/yacco2/qa/fsm_op.dat
new file mode 100644
index 0000000000..d9dd421eda
--- /dev/null
+++ b/web/yacco2/qa/fsm_op.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op.dat
+correct format
+*/
+fsm-operation /**/
+/**/(/**/fsm-operation-shift-class/**/ fsm_Shift
+/**/,/**/fsm-operation-reduce-class /**/ fsm_Reduce
+/**/,/**/fsm-operation-accept-class/**/ fsm_Accept
+/**/,/**/fsm-operation-error-class/**/ fsm_Error
+/**/)/**/
diff --git a/web/yacco2/qa/fsm_op1.dat b/web/yacco2/qa/fsm_op1.dat
new file mode 100644
index 0000000000..d26cd042ac
--- /dev/null
+++ b/web/yacco2/qa/fsm_op1.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op1.dat
+missing (
+*/
+fsm-operation
+fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op10.dat b/web/yacco2/qa/fsm_op10.dat
new file mode 100644
index 0000000000..83d597f1f8
--- /dev/null
+++ b/web/yacco2/qa/fsm_op10.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op10.dat
+missing )
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+//)
diff --git a/web/yacco2/qa/fsm_op2.dat b/web/yacco2/qa/fsm_op2.dat
new file mode 100644
index 0000000000..6e5c7736c7
--- /dev/null
+++ b/web/yacco2/qa/fsm_op2.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op2.dat
+missing fsm-operation-shift-class
+*/
+fsm-operation
+(fsm-operation-shift-class1 fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op3.dat b/web/yacco2/qa/fsm_op3.dat
new file mode 100644
index 0000000000..126f67d0f4
--- /dev/null
+++ b/web/yacco2/qa/fsm_op3.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op3.dat
+missing fsm-operation-reduce-class
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class2 fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op4.dat b/web/yacco2/qa/fsm_op4.dat
new file mode 100644
index 0000000000..4452a8e60c
--- /dev/null
+++ b/web/yacco2/qa/fsm_op4.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op4.dat
+missing fsm-operation-accept-class
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-classs fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op5.dat b/web/yacco2/qa/fsm_op5.dat
new file mode 100644
index 0000000000..c5c60c91f2
--- /dev/null
+++ b/web/yacco2/qa/fsm_op5.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op5.dat
+missing fsm-operation-error-class
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class_ fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op6.dat b/web/yacco2/qa/fsm_op6.dat
new file mode 100644
index 0000000000..0cc65a1484
--- /dev/null
+++ b/web/yacco2/qa/fsm_op6.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op6.dat
+missing fsm-operation-error-class id
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class //fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op7.dat b/web/yacco2/qa/fsm_op7.dat
new file mode 100644
index 0000000000..830aa309d5
--- /dev/null
+++ b/web/yacco2/qa/fsm_op7.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op7.dat
+missing fsm-operation-accept-class id
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class //fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op8.dat b/web/yacco2/qa/fsm_op8.dat
new file mode 100644
index 0000000000..5f98ff1ec2
--- /dev/null
+++ b/web/yacco2/qa/fsm_op8.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op8.dat
+missing fsm-operation-reduce-class id
+*/
+fsm-operation
+(fsm-operation-shift-class fsm_Shift
+,fsm-operation-reduce-class 1fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/fsm_op9.dat b/web/yacco2/qa/fsm_op9.dat
new file mode 100644
index 0000000000..f92c8a9184
--- /dev/null
+++ b/web/yacco2/qa/fsm_op9.dat
@@ -0,0 +1,10 @@
+/*
+file: fsm_op9.dat
+missing fsm-operation-shift-class id
+*/
+fsm-operation
+(fsm-operation-shift-class -fsm_Shift
+,fsm-operation-reduce-class fsm_Reduce
+,fsm-operation-accept-class fsm_Accept
+,fsm-operation-error-class fsm_Error
+)
diff --git a/web/yacco2/qa/identifier.dat b/web/yacco2/qa/identifier.dat
new file mode 100644
index 0000000000..8ce8601c23
--- /dev/null
+++ b/web/yacco2/qa/identifier.dat
@@ -0,0 +1,49 @@
+/*
+$echo file:identifier.dat
+$echo test out 41 identifiers, ***, + 2 identifiers with keyword prefixes
+$echo additional test with keywords: ensure keywords are keywords and not identifiers
+*/
+fsm_
+fsm1
+// keywords
+fsm
+fsm-id
+fsm-filename
+fsm-namespace
+fsm-class
+fsm-version
+fsm-date
+fsm-debug
+fsm-comments
+raw-characters
+lr1-constant-symbolsc_literal.dat
+error-symbols
+AD
+AB
+parallel-parser
+parallel-la-boundary
+arbitrator-code
+parallel-thread-function
+parallel-control-monitor
+terminals
+T-enumeration
+file-name
+name-space
+sym-class
+rules
+lhs
+user-declaration
+user-prefix-declaration
+user-suffix-declaration
+constructor
+destructor
+op
+user-implementation
+user-imp-tbl
+user-imp-sym
+constant-defs
+terminals-refs
+terminals-sufx
+lrk-sufx
+NULL
+***
diff --git a/web/yacco2/qa/identifier1.dat b/web/yacco2/qa/identifier1.dat
new file mode 100644
index 0000000000..3b992c52e0
--- /dev/null
+++ b/web/yacco2/qa/identifier1.dat
@@ -0,0 +1,4 @@
+fsm_
+fsm1
+// keywords
+fsm
diff --git a/web/yacco2/qa/int_no.dat b/web/yacco2/qa/int_no.dat
new file mode 100644
index 0000000000..c1b5988677
--- /dev/null
+++ b/web/yacco2/qa/int_no.dat
@@ -0,0 +1,10 @@
+/*
+file: int_no.dat
+too large a number
+$echo file: int_no.dat
+$echo last int bad too large long int
+$echo too large a number - bad int
+*/
+0
+9000000000000
+111111111111111111111111111111111111111111111111111 \ No newline at end of file
diff --git a/web/yacco2/qa/keyword.dat b/web/yacco2/qa/keyword.dat
new file mode 100644
index 0000000000..5c0e99cfeb
--- /dev/null
+++ b/web/yacco2/qa/keyword.dat
@@ -0,0 +1,46 @@
+/*
+$echo file:keyword.dat
+$echo test out 41 identifiers only
+*/
+***
+AB
+AD
+NULL
+T-enumeration
+arbitrator-code
+constant-defs
+constructor
+destructor
+error-symbols
+failed
+file-name
+fsm
+fsm-class
+fsm-comments
+fsm-date
+fsm-debug
+fsm-filename
+fsm-id
+fsm-namespace
+fsm-version
+lhs
+lr1-constant-symbols
+lrk-sufx
+name-space
+op
+parallel-control-monitor
+parallel-la-boundary
+parallel-parser
+parallel-thread-function
+raw-characters
+rules
+sym-class
+terminals
+terminals-refs
+terminals-sufx
+user-declaration
+user-imp-sym
+user-imp-tbl
+user-implementation
+user-prefix-declaration
+user-suffix-declaration
diff --git a/web/yacco2/qa/keyword1.dat b/web/yacco2/qa/keyword1.dat
new file mode 100644
index 0000000000..e64bce15be
--- /dev/null
+++ b/web/yacco2/qa/keyword1.dat
@@ -0,0 +1,7 @@
+/*
+$echo file:keyword1.dat
+$echo mix contexts and predicated keyword ``code'' which now is an identifier
+*/
+lhs ***
+code
+fsm
diff --git a/web/yacco2/qa/knu1.cpp b/web/yacco2/qa/knu1.cpp
new file mode 100644
index 0000000000..dfc066c726
--- /dev/null
+++ b/web/yacco2/qa/knu1.cpp
@@ -0,0 +1,76 @@
+/*
+ File: knu1.cpp
+ Date and Time: Mon Oct 13 18:18:18 2014
+*/
+#include "knu1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cknu1::
+ Cknu1()
+ :yacco2::CAbs_fsm
+ ("knu1.lex"
+ ,"1.0"
+ ,"23 oct 2008"
+ ,true
+ ,"knuth grammar (24)"
+ ,"Mon Oct 13 18:18:18 2014 "
+ ,S1_Cknu1){
+
+ }
+
+Cknu1::~Cknu1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cknu1::failed(){
+ return false;
+ }
+ void Cknu1::op(){
+}
+int Cknu1::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+};
+Rstart::Rstart(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart",0,Cknu1::R_Rstart_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Cknu1::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Cknu1::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Cknu1::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/knu1.fsc b/web/yacco2/qa/knu1.fsc
new file mode 100644
index 0000000000..75077787af
--- /dev/null
+++ b/web/yacco2/qa/knu1.fsc
@@ -0,0 +1,22 @@
+/*
+ File: knu1.fsc
+ Date and Time: Mon Oct 13 18:18:18 2014
+*/
+transitive n
+grammar-name "knu1"
+name-space "NS_knu1"
+thread-name "Cknu1"
+monolithic y
+file-name "knu1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ LR1_eog
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"knuth grammar (24)"
diff --git a/web/yacco2/qa/knu1.h b/web/yacco2/qa/knu1.h
new file mode 100644
index 0000000000..c7e219b576
--- /dev/null
+++ b/web/yacco2/qa/knu1.h
@@ -0,0 +1,77 @@
+/*
+ File: knu1.h
+ Date and Time: Mon Oct 13 18:18:18 2014
+*/
+#ifndef __knu1_h__
+#define __knu1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cknu1;
+namespace NS_knu1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cknu1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstart_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstart_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,rhs3_RS_ = 4
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 5
+ ,rhs2_RA_ = 6
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 7
+ ,rhs2_RB_ = 8
+ };
+ //no of la sets = 4
+ //no of states = 19
+ Cknu1();
+ ~Cknu1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+ };
+struct Rstart;
+struct RS;
+struct RA;
+struct RB;
+struct Rstart:public yacco2::CAbs_lr1_sym {
+ Rstart(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/knu1.lex b/web/yacco2/qa/knu1.lex
new file mode 100644
index 0000000000..78913d4a64
--- /dev/null
+++ b/web/yacco2/qa/knu1.lex
@@ -0,0 +1,44 @@
+/*
+$echo FILE: knu1.lex
+$echo Purpose: test out lr1 from knuth's paper
+$echo Knuth's paper
+$echo On the Translation of languages from left to right
+$echo from Information and control, vol. 8 of 6, pages 607--639, 1965
+$echo (24) grammar
+$echo Okay lr1.
+FILE:
+dates: 23 oct 2008
+*/
+/@
+@** |knu1| Grammar.\fbreak
+Test out (24) grammar from Knuth's paper:
+``On the Translation of languages from left to right''
+from Information and control, vol. 8 of 6, pages 607--639, 1965.
+@/
+fsm
+(fsm-id "knu1.lex",fsm-filename knu1,fsm-namespace NS_knu1
+,fsm-class Cknu1
+,fsm-version "1.0",fsm-date "23 oct 2008",fsm-debug "true"
+,fsm-comments "knuth grammar (24)")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rstart(){
+ -> RS eog
+}
+
+RS (){
+ ->
+ -> a RA b RS
+ -> b RB a RS
+}
+RA (){
+ ->
+ -> a RA b RA
+}
+RB (){
+ ->
+ -> b RB a RB
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/knu1.pdf b/web/yacco2/qa/knu1.pdf
new file mode 100644
index 0000000000..7502aab1fd
--- /dev/null
+++ b/web/yacco2/qa/knu1.pdf
Binary files differ
diff --git a/web/yacco2/qa/knu1_idx.pdf b/web/yacco2/qa/knu1_idx.pdf
new file mode 100644
index 0000000000..5fca77ddd1
--- /dev/null
+++ b/web/yacco2/qa/knu1_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/knu1_sick.cpp b/web/yacco2/qa/knu1_sick.cpp
new file mode 100644
index 0000000000..9aadd83300
--- /dev/null
+++ b/web/yacco2/qa/knu1_sick.cpp
@@ -0,0 +1,76 @@
+/*
+ File: knu1_sick.cpp
+ Date and Time: Fri Oct 3 14:30:08 2014
+*/
+#include "knu1_sick.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1_sick;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cknu1_sick::
+ Cknu1_sick()
+ :yacco2::CAbs_fsm
+ ("knu1_sick.lex"
+ ,"1.0"
+ ,"23 oct 2008"
+ ,true
+ ,"knuth grammar (24) --- modified as not lr1 on rt recursion cycling"
+ ,"Fri Oct 3 14:30:08 2014 "
+ ,S1_Cknu1_sick){
+
+ }
+
+Cknu1_sick::~Cknu1_sick(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cknu1_sick::failed(){
+ return false;
+ }
+ void Cknu1_sick::op(){
+}
+int Cknu1_sick::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+ ,3 // subrule 8 for rule 4
+};
+Rstart::Rstart(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart",0,Cknu1_sick::R_Rstart_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Cknu1_sick::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Cknu1_sick::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Cknu1_sick::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/knu1_sick.h b/web/yacco2/qa/knu1_sick.h
new file mode 100644
index 0000000000..36040aeeac
--- /dev/null
+++ b/web/yacco2/qa/knu1_sick.h
@@ -0,0 +1,77 @@
+/*
+ File: knu1_sick.h
+ Date and Time: Fri Oct 3 14:30:08 2014
+*/
+#ifndef __knu1_sick_h__
+#define __knu1_sick_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cknu1_sick;
+namespace NS_knu1_sick {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cknu1_sick: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstart_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstart_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,rhs3_RS_ = 4
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 5
+ ,rhs2_RA_ = 6
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 7
+ ,rhs2_RB_ = 8
+ };
+ //no of la sets = 1
+ //no of states = 8
+ Cknu1_sick();
+ ~Cknu1_sick();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+ };
+struct Rstart;
+struct RS;
+struct RA;
+struct RB;
+struct Rstart:public yacco2::CAbs_lr1_sym {
+ Rstart(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/knu1_sick.lex b/web/yacco2/qa/knu1_sick.lex
new file mode 100644
index 0000000000..0de5214012
--- /dev/null
+++ b/web/yacco2/qa/knu1_sick.lex
@@ -0,0 +1,55 @@
+/*
+$echo FILE: knu1_sick.lex
+$echo Purpose: Pathological test not lr1 on the gening closure state network
+$echo variation on knu1.lex grammar
+$echo Error --- Grammar is not lr1.
+*/
+/*
+FILE: knu1_sick.lex
+dates: 27 oct 2008
+Purpose: test out non lr1 grammar due to a coding mistake on knu1.lex
+where the closure network being gened never stops.
+The symptom is this:
+the gened state is trying to merge into its self and is not lr1.
+*/
+/@
+@** |knu1_sick| Grammar.\fbreak
+Test out non lr1 grammar due to a coding mistake on |knu1.lex| grammar.
+When the closure state network is being gened,
+ it never stops generating states.\fbreak
+The symptom is this:\fbreak
+The new gened state is trying to merge into
+one of its states but this merge makes it non lr1.
+The run away forever gening' symptom is due to the right recursion
+with the grammar --- rule `RS'.\fbreak
+\fbreak
+Solution: when above detected stop gening lr state network
+due to not lr1 condition.
+@/
+fsm
+(fsm-id "knu1_sick.lex",fsm-filename knu1_sick,fsm-namespace NS_knu1_sick
+,fsm-class Cknu1_sick
+,fsm-version "1.0",fsm-date "23 oct 2008",fsm-debug "true"
+,fsm-comments "knuth grammar (24) --- modified as not lr1 on rt recursion cycling")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rstart(){
+ -> RS eog
+}
+
+RS (){
+ ->
+ -> a RA b RS
+ -> b RA a RS // RA should be RB but used to detect run away generation
+}
+RA (){
+ ->
+ -> a RA b RA
+}
+RB (){
+ ->
+ -> b RB a RB
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/knu1_sicksym.cpp b/web/yacco2/qa/knu1_sicksym.cpp
new file mode 100644
index 0000000000..c85e15fecb
--- /dev/null
+++ b/web/yacco2/qa/knu1_sicksym.cpp
@@ -0,0 +1,139 @@
+/*
+ File: knu1_sicksym.cpp
+ Date and Time: Fri Oct 3 14:30:08 2014
+*/
+#include "knu1_sick.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1_sick;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cknu1_sick::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstart_:{
+ Rstart* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/knu1_sicktbl.cpp b/web/yacco2/qa/knu1_sicktbl.cpp
new file mode 100644
index 0000000000..3b1966e17f
--- /dev/null
+++ b/web/yacco2/qa/knu1_sicktbl.cpp
@@ -0,0 +1,35 @@
+/*
+ File: knu1_sicktbl.cpp
+ Date and Time: Fri Oct 3 14:30:08 2014
+*/
+#include "knu1_sick.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1_sick;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Cknu1_sick[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Cknu1_sick;
+extern yacco2::State S2_Cknu1_sick;
+extern yacco2::State S3_Cknu1_sick;
+extern yacco2::State S4_Cknu1_sick;
+extern yacco2::State S5_Cknu1_sick;
+extern yacco2::State S6_Cknu1_sick;
+extern yacco2::State S7_Cknu1_sick;
+extern yacco2::State S8_Cknu1_sick;
+struct S1std_Cknu1_sick{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cknu1_sick S1st_Cknu1_sick = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Cknu1_sick} // shift sym: raw_a
diff --git a/web/yacco2/qa/knu1sym.cpp b/web/yacco2/qa/knu1sym.cpp
new file mode 100644
index 0000000000..f6af2021f6
--- /dev/null
+++ b/web/yacco2/qa/knu1sym.cpp
@@ -0,0 +1,139 @@
+/*
+ File: knu1sym.cpp
+ Date and Time: Mon Oct 13 18:18:18 2014
+*/
+#include "knu1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cknu1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstart_:{
+ Rstart* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/knu1tbl.cpp b/web/yacco2/qa/knu1tbl.cpp
new file mode 100644
index 0000000000..89995b06ba
--- /dev/null
+++ b/web/yacco2/qa/knu1tbl.cpp
@@ -0,0 +1,430 @@
+/*
+ File: knu1tbl.cpp
+ Date and Time: Mon Oct 13 18:18:18 2014
+*/
+#include "knu1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu1;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Cknu1[] ={
+1
+,0,2
+};
+// raw_b
+yacco2::UCHAR LA2_Cknu1[] ={
+1
+,13,4
+};
+// raw_a
+yacco2::UCHAR LA3_Cknu1[] ={
+1
+,13,2
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Cknu1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cknu1;
+extern yacco2::State S2_Cknu1;
+extern yacco2::State S3_Cknu1;
+extern yacco2::State S4_Cknu1;
+extern yacco2::State S5_Cknu1;
+extern yacco2::State S6_Cknu1;
+extern yacco2::State S7_Cknu1;
+extern yacco2::State S8_Cknu1;
+extern yacco2::State S9_Cknu1;
+extern yacco2::State S10_Cknu1;
+extern yacco2::State S11_Cknu1;
+extern yacco2::State S12_Cknu1;
+extern yacco2::State S13_Cknu1;
+extern yacco2::State S14_Cknu1;
+extern yacco2::State S15_Cknu1;
+extern yacco2::State S16_Cknu1;
+extern yacco2::State S17_Cknu1;
+extern yacco2::State S18_Cknu1;
+extern yacco2::State S19_Cknu1;
+struct S1std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cknu1 S1st_Cknu1 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Cknu1} // shift sym: raw_a
+ ,{106,(State*)&S5_Cknu1} // shift sym: raw_b
+ ,{569,(State*)&S1_Cknu1} // accept sym: Rstart
+ ,{570,(State*)&S10_Cknu1} // shift sym: RS
+ }// end of shift table
+};
+struct S1rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Cknu1 S1rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu1,Cknu1::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S1_Cknu1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cknu1,(Reduce_tbl*)&S1rt_Cknu1,0,0,0};
+struct S2std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Cknu1 S2st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S12_Cknu1} // shift sym: raw_a
+ ,{571,(State*)&S3_Cknu1} // shift sym: RA
+ }// end of shift table
+};
+struct S2rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Cknu1 S2rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu1,Cknu1::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S2_Cknu1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cknu1,(Reduce_tbl*)&S2rt_Cknu1,0,0,0};
+struct S3std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cknu1 S3st_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S4_Cknu1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S3_Cknu1 = //State's vectored into symbol: "RA"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cknu1,0,0,0,0};
+struct S4std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cknu1 S4st_Cknu1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S2_Cknu1} // shift sym: raw_a
+ ,{106,(State*)&S5_Cknu1} // shift sym: raw_b
+ ,{570,(State*)&S9_Cknu1} // shift sym: RS
+ }// end of shift table
+};
+struct S4rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cknu1 S4rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu1,Cknu1::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S4_Cknu1 = //State's vectored into symbol: "b"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cknu1,(Reduce_tbl*)&S4rt_Cknu1,0,0,0};
+struct S5std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_Cknu1 S5st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {106,(State*)&S16_Cknu1} // shift sym: raw_b
+ ,{572,(State*)&S6_Cknu1} // shift sym: RB
+ }// end of shift table
+};
+struct S5rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Cknu1 S5rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cknu1,Cknu1::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S5_Cknu1 = //State's vectored into symbol: "b"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cknu1,(Reduce_tbl*)&S5rt_Cknu1,0,0,0};
+struct S6std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S6std_Cknu1 S6st_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S7_Cknu1} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S6_Cknu1 = //State's vectored into symbol: "RB"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Cknu1,0,0,0,0};
+struct S7std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Cknu1 S7st_Cknu1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S2_Cknu1} // shift sym: raw_a
+ ,{106,(State*)&S5_Cknu1} // shift sym: raw_b
+ ,{570,(State*)&S8_Cknu1} // shift sym: RS
+ }// end of shift table
+};
+struct S7rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cknu1 S7rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu1,Cknu1::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S7_Cknu1 = //State's vectored into symbol: "a"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cknu1,(Reduce_tbl*)&S7rt_Cknu1,0,0,0};
+struct S8rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Cknu1 S8rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu1,Cknu1::rhs3_RS_}
+ }// end of reduce table
+};
+yacco2::State S8_Cknu1 = //State's vectored into symbol: "RS"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Cknu1,0,0,0};
+struct S9rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cknu1 S9rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu1,Cknu1::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S9_Cknu1 = //State's vectored into symbol: "RS"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cknu1,0,0,0};
+struct S10std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cknu1 S10st_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S11_Cknu1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S10_Cknu1 = //State's vectored into symbol: "RS"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cknu1,0,0,0,0};
+struct S11rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cknu1 S11rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Cknu1,Cknu1::rhs1_Rstart_}
+ }// end of reduce table
+};
+yacco2::State S11_Cknu1 = //State's vectored into symbol: "eog"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cknu1,0,0,0};
+struct S12std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S12std_Cknu1 S12st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S12_Cknu1} // shift sym: raw_a
+ ,{571,(State*)&S13_Cknu1} // shift sym: RA
+ }// end of shift table
+};
+struct S12rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cknu1 S12rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu1,Cknu1::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S12_Cknu1 = //State's vectored into symbol: "a"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Cknu1,(Reduce_tbl*)&S12rt_Cknu1,0,0,0};
+struct S13std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Cknu1 S13st_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S14_Cknu1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S13_Cknu1 = //State's vectored into symbol: "RA"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cknu1,0,0,0,0};
+struct S14std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_Cknu1 S14st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S12_Cknu1} // shift sym: raw_a
+ ,{571,(State*)&S15_Cknu1} // shift sym: RA
+ }// end of shift table
+};
+struct S14rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cknu1 S14rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu1,Cknu1::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S14_Cknu1 = //State's vectored into symbol: "b"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Cknu1,(Reduce_tbl*)&S14rt_Cknu1,0,0,0};
+struct S15rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cknu1 S15rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu1,Cknu1::rhs2_RA_}
+ }// end of reduce table
+};
+yacco2::State S15_Cknu1 = //State's vectored into symbol: "RA"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cknu1,0,0,0};
+struct S16std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_Cknu1 S16st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {106,(State*)&S16_Cknu1} // shift sym: raw_b
+ ,{572,(State*)&S17_Cknu1} // shift sym: RB
+ }// end of shift table
+};
+struct S16rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Cknu1 S16rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cknu1,Cknu1::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S16_Cknu1 = //State's vectored into symbol: "b"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cknu1,(Reduce_tbl*)&S16rt_Cknu1,0,0,0};
+struct S17std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Cknu1 S17st_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S18_Cknu1} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S17_Cknu1 = //State's vectored into symbol: "RB"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cknu1,0,0,0,0};
+struct S18std_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S18std_Cknu1 S18st_Cknu1 = {
+ 2
+ ,
+ {// start of table
+ {106,(State*)&S16_Cknu1} // shift sym: raw_b
+ ,{572,(State*)&S19_Cknu1} // shift sym: RB
+ }// end of shift table
+};
+struct S18rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Cknu1 S18rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cknu1,Cknu1::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S18_Cknu1 = //State's vectored into symbol: "a"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Cknu1,(Reduce_tbl*)&S18rt_Cknu1,0,0,0};
+struct S19rtd_Cknu1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Cknu1 S19rt_Cknu1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cknu1,Cknu1::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S19_Cknu1 = //State's vectored into symbol: "RB"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Cknu1,0,0,0};
diff --git a/web/yacco2/qa/knu2.cpp b/web/yacco2/qa/knu2.cpp
new file mode 100644
index 0000000000..5aa9dea249
--- /dev/null
+++ b/web/yacco2/qa/knu2.cpp
@@ -0,0 +1,59 @@
+/*
+ File: knu2.cpp
+ Date and Time: Sun Oct 5 16:04:59 2014
+*/
+#include "knu2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cknu2::
+ Cknu2()
+ :yacco2::CAbs_fsm
+ ("knu2.lex"
+ ,"1.0"
+ ,"23 oct 2008"
+ ,true
+ ,"knuth grammar (25)"
+ ,"Sun Oct 5 16:04:59 2014 "
+ ,S1_Cknu2){
+
+ }
+
+Cknu2::~Cknu2(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cknu2::failed(){
+ return false;
+ }
+ void Cknu2::op(){
+}
+int Cknu2::rhs_to_rules_mapping_[4] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+};
+Rstart::Rstart(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rstart",0,Cknu2::R_Rstart_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Cknu2::R_RS_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/knu2.fsc b/web/yacco2/qa/knu2.fsc
new file mode 100644
index 0000000000..3270808e52
--- /dev/null
+++ b/web/yacco2/qa/knu2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: knu2.fsc
+ Date and Time: Sun Oct 5 16:04:59 2014
+*/
+transitive n
+grammar-name "knu2"
+name-space "NS_knu2"
+thread-name "Cknu2"
+monolithic y
+file-name "knu2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_open_bracket
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"knuth grammar (25)"
diff --git a/web/yacco2/qa/knu2.h b/web/yacco2/qa/knu2.h
new file mode 100644
index 0000000000..5dbc72c108
--- /dev/null
+++ b/web/yacco2/qa/knu2.h
@@ -0,0 +1,58 @@
+/*
+ File: knu2.h
+ Date and Time: Sun Oct 5 16:04:59 2014
+*/
+#ifndef __knu2_h__
+#define __knu2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cknu2;
+namespace NS_knu2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cknu2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rstart_ = 569//start_of_rule_list + 0
+ ,rhs1_Rstart_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ };
+ //no of la sets = 2
+ //no of states = 9
+ Cknu2();
+ ~Cknu2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[4];
+ };
+struct Rstart;
+struct RS;
+struct Rstart:public yacco2::CAbs_lr1_sym {
+ Rstart(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/knu2.lex b/web/yacco2/qa/knu2.lex
new file mode 100644
index 0000000000..12472449e5
--- /dev/null
+++ b/web/yacco2/qa/knu2.lex
@@ -0,0 +1,34 @@
+/*
+$echo FILE: knu2.lex
+$echo Purpose: test out lr1 from knuth's paper
+$echo Knuth's paper
+$echo On the Translation of languages from left to right
+$echo from Infromation and control, vol. 8 of 6, pages 607--639, 1965
+$echo (25) grammar
+$echo Okay lr1.
+FILE:
+dates: 23 oct 2008
+*/
+/@
+@** |knu2| Grammar.\fbreak
+Test out (25) grammar from Knuth's paper:
+``On the Translation of languages from left to right''
+from Information and control, vol. 8 of 6, pages 607--639, 1965.
+@/
+fsm
+(fsm-id "knu2.lex",fsm-filename knu2,fsm-namespace NS_knu2
+,fsm-class Cknu2
+,fsm-version "1.0",fsm-date "23 oct 2008",fsm-debug "true"
+,fsm-comments "knuth grammar (25)")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rstart(){
+ -> RS eog
+}
+
+RS (){
+ -> a
+ -> ( RS + RS )
+}
+}// end of rules
diff --git a/web/yacco2/qa/knu2.pdf b/web/yacco2/qa/knu2.pdf
new file mode 100644
index 0000000000..32b122f89d
--- /dev/null
+++ b/web/yacco2/qa/knu2.pdf
Binary files differ
diff --git a/web/yacco2/qa/knu2_idx.pdf b/web/yacco2/qa/knu2_idx.pdf
new file mode 100644
index 0000000000..00de75c98c
--- /dev/null
+++ b/web/yacco2/qa/knu2_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/knu2sym.cpp b/web/yacco2/qa/knu2sym.cpp
new file mode 100644
index 0000000000..9c388e84b3
--- /dev/null
+++ b/web/yacco2/qa/knu2sym.cpp
@@ -0,0 +1,69 @@
+/*
+ File: knu2sym.cpp
+ Date and Time: Sun Oct 5 16:04:59 2014
+*/
+#include "knu2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cknu2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rstart_:{
+ Rstart* sym;
+ if(re->rule_ == 0){
+ sym = new Rstart(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rstart*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/knu2tbl.cpp b/web/yacco2/qa/knu2tbl.cpp
new file mode 100644
index 0000000000..9e05c3215c
--- /dev/null
+++ b/web/yacco2/qa/knu2tbl.cpp
@@ -0,0 +1,168 @@
+/*
+ File: knu2tbl.cpp
+ Date and Time: Sun Oct 5 16:04:59 2014
+*/
+#include "knu2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu2;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_close_bracket
+// raw_plus
+yacco2::UCHAR LA1_Cknu2[] ={
+2
+,0,2
+,6,10
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cknu2[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cknu2;
+extern yacco2::State S2_Cknu2;
+extern yacco2::State S3_Cknu2;
+extern yacco2::State S4_Cknu2;
+extern yacco2::State S5_Cknu2;
+extern yacco2::State S6_Cknu2;
+extern yacco2::State S7_Cknu2;
+extern yacco2::State S8_Cknu2;
+extern yacco2::State S9_Cknu2;
+struct S1std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cknu2 S1st_Cknu2 = {
+ 4
+ ,
+ {// start of table
+ {48,(State*)&S2_Cknu2} // shift sym: raw_open_bracket
+ ,{105,(State*)&S7_Cknu2} // shift sym: raw_a
+ ,{569,(State*)&S1_Cknu2} // accept sym: Rstart
+ ,{570,(State*)&S8_Cknu2} // shift sym: RS
+ }// end of shift table
+};
+yacco2::State S1_Cknu2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cknu2,0,0,0,0};
+struct S2std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Cknu2 S2st_Cknu2 = {
+ 3
+ ,
+ {// start of table
+ {48,(State*)&S2_Cknu2} // shift sym: raw_open_bracket
+ ,{105,(State*)&S7_Cknu2} // shift sym: raw_a
+ ,{570,(State*)&S3_Cknu2} // shift sym: RS
+ }// end of shift table
+};
+yacco2::State S2_Cknu2 = //State's vectored into symbol: "("
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cknu2,0,0,0,0};
+struct S3std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cknu2 S3st_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {51,(State*)&S4_Cknu2} // shift sym: raw_plus
+ }// end of shift table
+};
+yacco2::State S3_Cknu2 = //State's vectored into symbol: "RS"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cknu2,0,0,0,0};
+struct S4std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S4std_Cknu2 S4st_Cknu2 = {
+ 3
+ ,
+ {// start of table
+ {48,(State*)&S2_Cknu2} // shift sym: raw_open_bracket
+ ,{105,(State*)&S7_Cknu2} // shift sym: raw_a
+ ,{570,(State*)&S5_Cknu2} // shift sym: RS
+ }// end of shift table
+};
+yacco2::State S4_Cknu2 = //State's vectored into symbol: "+"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Cknu2,0,0,0,0};
+struct S5std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Cknu2 S5st_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {49,(State*)&S6_Cknu2} // shift sym: raw_close_bracket
+ }// end of shift table
+};
+yacco2::State S5_Cknu2 = //State's vectored into symbol: "RS"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cknu2,0,0,0,0};
+struct S6rtd_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cknu2 S6rt_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu2,Cknu2::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S6_Cknu2 = //State's vectored into symbol: ")"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cknu2,0,0,0};
+struct S7rtd_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cknu2 S7rt_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu2,Cknu2::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S7_Cknu2 = //State's vectored into symbol: "a"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cknu2,0,0,0};
+struct S8std_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Cknu2 S8st_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S9_Cknu2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S8_Cknu2 = //State's vectored into symbol: "RS"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cknu2,0,0,0,0};
+struct S9rtd_Cknu2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cknu2 S9rt_Cknu2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu2,Cknu2::rhs1_Rstart_}
+ }// end of reduce table
+};
+yacco2::State S9_Cknu2 = //State's vectored into symbol: "eog"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cknu2,0,0,0};
diff --git a/web/yacco2/qa/knu3.cpp b/web/yacco2/qa/knu3.cpp
new file mode 100644
index 0000000000..fdb89ad42b
--- /dev/null
+++ b/web/yacco2/qa/knu3.cpp
@@ -0,0 +1,88 @@
+/*
+ File: knu3.cpp
+ Date and Time: Tue Nov 4 18:08:44 2008
+*/
+#include "knu3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu3;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 5;
+ per_rule_s_table_[0] = (Per_rule_s_reuse_table*) new reuse_rule1_table_type();
+ per_rule_s_table_[1] = (Per_rule_s_reuse_table*) new reuse_rule2_table_type();
+ per_rule_s_table_[2] = (Per_rule_s_reuse_table*) new reuse_rule3_table_type();
+ per_rule_s_table_[3] = (Per_rule_s_reuse_table*) new reuse_rule4_table_type();
+ per_rule_s_table_[4] = (Per_rule_s_reuse_table*) new reuse_rule5_table_type();
+}
+ Cknu3::
+ Cknu3()
+ :yacco2::CAbs_fsm
+ ("knu26.lex"
+ ,"1.0"
+ ,"23 oct 2008"
+ ,true
+ ,"knuth grammar (26)"
+ ,"Tue Nov 4 18:08:44 2008 "
+ ,S1_Cknu3){
+
+ }
+
+Cknu3::~Cknu3(){
+
+ for(int x = 0;x < 5;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cknu3::failed(){
+ return false;
+ }
+ void Cknu3::op(){
+}
+int Cknu3::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+};
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Cknu3::R_RS_,P,false,false){
+
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Cknu3::R_RB_,P,false,false){
+
+}
+
+RL::RL(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RL",0,Cknu3::R_RL_,P,false,false){
+
+}
+
+RR::RR(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RR",0,Cknu3::R_RR_,P,false,false){
+
+}
+
+RN::RN(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RN",0,Cknu3::R_RN_,P,false,false){
+
+}
+
diff --git a/web/yacco2/qa/knu3.fsc b/web/yacco2/qa/knu3.fsc
new file mode 100644
index 0000000000..26a8044210
--- /dev/null
+++ b/web/yacco2/qa/knu3.fsc
@@ -0,0 +1,20 @@
+/*
+ File: knu3.fsc
+ Date and Time: Tue Nov 4 18:08:44 2008
+*/
+transitive n
+grammar-name "knu3"
+name-space "NS_knu3"
+thread-name "Cknu3"
+monolithic y
+file-name "knu3.fsc"
+no-of-T 571
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"knuth grammar (26)"
diff --git a/web/yacco2/qa/knu3.h b/web/yacco2/qa/knu3.h
new file mode 100644
index 0000000000..387d201fbb
--- /dev/null
+++ b/web/yacco2/qa/knu3.h
@@ -0,0 +1,113 @@
+/*
+ File: knu3.h
+ Date and Time: Tue Nov 4 18:08:44 2008
+*/
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+#ifndef __knu3_h__
+#define __knu3_h__ 1
+// monolithic grammar: no thread
+extern yacco2::State S1_Cknu3;
+namespace NS_knu3 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[5];
+};
+struct reuse_rule1_table_type {// for rule: RS
+ reuse_rule1_table_type():no_rule_s_entries_(1){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+};
+struct reuse_rule2_table_type {// for rule: RB
+ reuse_rule2_table_type():no_rule_s_entries_(1){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+};
+struct reuse_rule3_table_type {// for rule: RL
+ reuse_rule3_table_type():no_rule_s_entries_(2){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+ Rule_s_reuse_entry entry_2_;
+};
+struct reuse_rule4_table_type {// for rule: RR
+ reuse_rule4_table_type():no_rule_s_entries_(2){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+ Rule_s_reuse_entry entry_2_;
+};
+struct reuse_rule5_table_type {// for rule: RN
+ reuse_rule5_table_type():no_rule_s_entries_(3){};
+ int no_rule_s_entries_;
+ Rule_s_reuse_entry entry_1_;
+ Rule_s_reuse_entry entry_2_;
+ Rule_s_reuse_entry entry_3_;
+};
+class Cknu3: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_RS_ = 571//start_of_rule_list + 5
+ ,rhs1_RS_ = 1
+ ,R_RB_ = 572//start_of_rule_list + 5
+ ,rhs1_RB_ = 2
+ ,rhs2_RB_ = 3
+ ,R_RL_ = 573//start_of_rule_list + 5
+ ,rhs1_RL_ = 4
+ ,rhs2_RL_ = 5
+ ,R_RR_ = 574//start_of_rule_list + 5
+ ,rhs1_RR_ = 6
+ ,rhs2_RR_ = 7
+ ,R_RN_ = 575//start_of_rule_list + 5
+ ,rhs1_RN_ = 8
+ ,rhs2_RN_ = 9
+ };
+ //no of la sets = 3
+ //no of states = 17
+ Cknu3();
+ ~Cknu3();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Recycled_rule_struct* Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+ };
+struct RS;
+struct RB;
+struct RL;
+struct RR;
+struct RN;
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+struct RL:public yacco2::CAbs_lr1_sym {
+ RL(yacco2::Parser* P);
+ public:
+};
+
+struct RR:public yacco2::CAbs_lr1_sym {
+ RR(yacco2::Parser* P);
+ public:
+};
+
+struct RN:public yacco2::CAbs_lr1_sym {
+ RN(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+#endif
diff --git a/web/yacco2/qa/knu3.lex b/web/yacco2/qa/knu3.lex
new file mode 100644
index 0000000000..61fdea2010
--- /dev/null
+++ b/web/yacco2/qa/knu3.lex
@@ -0,0 +1,46 @@
+/*
+$echo FILE: knu3.lex
+$echo Purpose: test out lr1 from knuth's paper
+$echo Knuth's paper
+$echo On the Translation of languages from left to right
+$echo from Infromation and control, vol. 8 of 6, pages 607--639, 1965
+$echo (26) grammar
+$echo Okay lr1.
+FILE:
+dates: 23 oct 2008
+*/
+/@
+@** |knu3| Grammar.\fbreak
+Test out (26) grammar from Knuth's paper:
+``On the Translation of languages from left to right''
+from Information and control, vol. 8 of 6, pages 607--639, 1965.
+@/
+fsm
+(fsm-id "knu26.lex",fsm-filename knu3,fsm-namespace NS_knu3
+,fsm-class Cknu3
+,fsm-version "1.0",fsm-date "23 oct 2008",fsm-debug "true"
+,fsm-comments "knuth grammar (26)")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+RS (){
+ -> RB eog
+}
+RB (){
+ -> a
+ ->RL RR
+}
+RL (){
+ -> a
+ -> RL RN b
+}
+RR (){
+ -> a
+ -> b RN RR
+}
+RN (){
+ -> a
+ -> b RN RN b
+}
+}// end of rules
+
diff --git a/web/yacco2/qa/knu3sym.cpp b/web/yacco2/qa/knu3sym.cpp
new file mode 100644
index 0000000000..c7b28f85c3
--- /dev/null
+++ b/web/yacco2/qa/knu3sym.cpp
@@ -0,0 +1,142 @@
+/*
+ File: knu3sym.cpp
+ Date and Time: Tue Nov 4 18:08:44 2008
+*/
+#include "knu3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu3;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cknu3::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Recycled_rule_struct* Recycled_rule){
+ char a[BUFFER_SIZE];
+ int bbb(0);
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_entry_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ int no_entries = rule_entry_tbl_ptr->no_rule_s_entries_;
+ Rule_s_reuse_entry* re(0);
+ for(;;){
+ re = &rule_entry_tbl_ptr->rule_s_reuse_entry_[bbb];
+ if(re->rule_on_stk_ == OFF){
+ re->rule_on_stk_ = ON;
+ Recycled_rule->rule_s_reuse_entry_ = re;
+ break;
+ }
+ ++bbb;
+ if(bbb >= no_entries){
+ KCHARP msg = "Error ran out of rule recycled entries for %s --- major bug";
+ sprintf(a,msg,re->rule_->id());
+ Yacco2_faulty_precondition(a,__FILE__,__LINE__);
+ exit(1);
+ }
+ }
+ switch (Sub_rule_no){
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs2_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+ return;}
+ case rhs1_RL_:{
+ RL* sym;
+ if(re->rule_ == 0){
+ sym = new RL(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RL*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs2_RL_:{
+ RL* sym;
+ if(re->rule_ == 0){
+ sym = new RL(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RL*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+ return;}
+ case rhs1_RR_:{
+ RR* sym;
+ if(re->rule_ == 0){
+ sym = new RR(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RR*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs2_RR_:{
+ RR* sym;
+ if(re->rule_ == 0){
+ sym = new RR(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RR*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+ return;}
+ case rhs1_RN_:{
+ RN* sym;
+ if(re->rule_ == 0){
+ sym = new RN(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RN*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+ return;}
+ case rhs2_RN_:{
+ RN* sym;
+ if(re->rule_ == 0){
+ sym = new RN(parser__);
+ Recycled_rule->rule_ = sym;
+ }else{
+ sym = (RN*)re->rule_;
+ //if ctor present on code sym->reset_ctor();
+ }
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/knu3tbl.cpp b/web/yacco2/qa/knu3tbl.cpp
new file mode 100644
index 0000000000..418ae94725
--- /dev/null
+++ b/web/yacco2/qa/knu3tbl.cpp
@@ -0,0 +1,301 @@
+/*
+ File: knu3tbl.cpp
+ Date and Time: Tue Nov 4 18:08:44 2008
+*/
+#include "knu3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_knu3;// grammar's ns
+// first set terminals
+// raw_a
+// raw_b
+yacco2::UCHAR LA1_Cknu3[] ={
+1
+,13,6
+};
+// LR1_eog
+yacco2::UCHAR LA2_Cknu3[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Cknu3[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cknu3;
+extern yacco2::State S2_Cknu3;
+extern yacco2::State S3_Cknu3;
+extern yacco2::State S4_Cknu3;
+extern yacco2::State S5_Cknu3;
+extern yacco2::State S6_Cknu3;
+extern yacco2::State S7_Cknu3;
+extern yacco2::State S8_Cknu3;
+extern yacco2::State S9_Cknu3;
+extern yacco2::State S10_Cknu3;
+extern yacco2::State S11_Cknu3;
+extern yacco2::State S12_Cknu3;
+extern yacco2::State S13_Cknu3;
+extern yacco2::State S14_Cknu3;
+extern yacco2::State S15_Cknu3;
+extern yacco2::State S16_Cknu3;
+extern yacco2::State S17_Cknu3;
+struct S1std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Cknu3 S1st_Cknu3 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Cknu3} // shift sym: raw_a
+ ,{571,(State*)&S1_Cknu3} // accept sym: RS
+ ,{572,(State*)&S3_Cknu3} // shift sym: RB
+ ,{573,(State*)&S5_Cknu3} // shift sym: RL
+ }// end of shift table
+};
+yacco2::State S1_Cknu3 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cknu3,0,0,0,0};
+struct S2rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S2rtd_Cknu3 S2rt_Cknu3 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu3,Cknu3::rhs1_RL_}
+ ,{(Set_tbl*)&LA2_Cknu3,Cknu3::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S2_Cknu3 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cknu3,0,0,0};
+struct S3std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cknu3 S3st_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_Cknu3} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S3_Cknu3 = //State's vectored into symbol: "RB"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cknu3,0,0,0,0};
+struct S4rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cknu3 S4rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Cknu3,Cknu3::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S4_Cknu3 = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cknu3,0,0,0};
+struct S5std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S5std_Cknu3 S5st_Cknu3 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S6_Cknu3} // shift sym: raw_a
+ ,{106,(State*)&S7_Cknu3} // shift sym: raw_b
+ ,{574,(State*)&S12_Cknu3} // shift sym: RR
+ ,{575,(State*)&S13_Cknu3} // shift sym: RN
+ }// end of shift table
+};
+yacco2::State S5_Cknu3 = //State's vectored into symbol: "RL"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Cknu3,0,0,0,0};
+struct S6rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S6rtd_Cknu3 S6rt_Cknu3 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu3,Cknu3::rhs1_RR_}
+ ,{(Set_tbl*)&LA1_Cknu3,Cknu3::rhs1_RN_}
+ }// end of reduce table
+};
+yacco2::State S6_Cknu3 = //State's vectored into symbol: "a"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cknu3,0,0,0};
+struct S7std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Cknu3 S7st_Cknu3 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S15_Cknu3} // shift sym: raw_a
+ ,{106,(State*)&S16_Cknu3} // shift sym: raw_b
+ ,{575,(State*)&S8_Cknu3} // shift sym: RN
+ }// end of shift table
+};
+yacco2::State S7_Cknu3 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Cknu3,0,0,0,0};
+struct S8std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S8std_Cknu3 S8st_Cknu3 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S6_Cknu3} // shift sym: raw_a
+ ,{106,(State*)&S7_Cknu3} // shift sym: raw_b
+ ,{574,(State*)&S9_Cknu3} // shift sym: RR
+ ,{575,(State*)&S10_Cknu3} // shift sym: RN
+ }// end of shift table
+};
+yacco2::State S8_Cknu3 = //State's vectored into symbol: "RN"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Cknu3,0,0,0,0};
+struct S9rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Cknu3 S9rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu3,Cknu3::rhs2_RR_}
+ }// end of reduce table
+};
+yacco2::State S9_Cknu3 = //State's vectored into symbol: "RR"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Cknu3,0,0,0};
+struct S10std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Cknu3 S10st_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S11_Cknu3} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S10_Cknu3 = //State's vectored into symbol: "RN"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Cknu3,0,0,0,0};
+struct S11rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Cknu3 S11rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu3,Cknu3::rhs2_RN_}
+ }// end of reduce table
+};
+yacco2::State S11_Cknu3 = //State's vectored into symbol: "b"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Cknu3,0,0,0};
+struct S12rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Cknu3 S12rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cknu3,Cknu3::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S12_Cknu3 = //State's vectored into symbol: "RR"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Cknu3,0,0,0};
+struct S13std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Cknu3 S13st_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S14_Cknu3} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S13_Cknu3 = //State's vectored into symbol: "RN"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Cknu3,0,0,0,0};
+struct S14rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Cknu3 S14rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu3,Cknu3::rhs2_RL_}
+ }// end of reduce table
+};
+yacco2::State S14_Cknu3 = //State's vectored into symbol: "b"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Cknu3,0,0,0};
+struct S15rtd_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Cknu3 S15rt_Cknu3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cknu3,Cknu3::rhs1_RN_}
+ }// end of reduce table
+};
+yacco2::State S15_Cknu3 = //State's vectored into symbol: "a"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Cknu3,0,0,0};
+struct S16std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S16std_Cknu3 S16st_Cknu3 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S15_Cknu3} // shift sym: raw_a
+ ,{106,(State*)&S16_Cknu3} // shift sym: raw_b
+ ,{575,(State*)&S17_Cknu3} // shift sym: RN
+ }// end of shift table
+};
+yacco2::State S16_Cknu3 = //State's vectored into symbol: "b"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Cknu3,0,0,0,0};
+struct S17std_Cknu3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S17std_Cknu3 S17st_Cknu3 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S15_Cknu3} // shift sym: raw_a
+ ,{106,(State*)&S16_Cknu3} // shift sym: raw_b
+ ,{575,(State*)&S10_Cknu3} // shift sym: RN
+ }// end of shift table
+};
+yacco2::State S17_Cknu3 = //State's vectored into symbol: "RN"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Cknu3,0,0,0,0};
diff --git a/web/yacco2/qa/lalr1_dp1.cpp b/web/yacco2/qa/lalr1_dp1.cpp
new file mode 100644
index 0000000000..efc15632e7
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1.cpp
@@ -0,0 +1,75 @@
+/*
+ File: lalr1_dp1.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clalr1_dp1::
+ Clalr1_dp1()
+ :yacco2::CAbs_fsm
+ ("lalr1_dp1.lex"
+ ,"1.0"
+ ,"13-sep-97"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:14 2014 "
+ ,S1_Clalr1_dp1){
+
+ }
+
+Clalr1_dp1::~Clalr1_dp1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clalr1_dp1::failed(){
+ return false;
+ }
+ void Clalr1_dp1::op(){
+}
+int Clalr1_dp1::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rlalr1_dp1::Rlalr1_dp1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlalr1_dp1",0,Clalr1_dp1::R_Rlalr1_dp1_,P,false,false){
+}
+
+RS1::RS1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS1",0,Clalr1_dp1::R_RS1_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clalr1_dp1::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clalr1_dp1::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lalr1_dp1.fsc b/web/yacco2/qa/lalr1_dp1.fsc
new file mode 100644
index 0000000000..505b1af0bf
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: lalr1_dp1.fsc
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+transitive n
+grammar-name "lalr1_dp1"
+name-space "NS_lalr1_dp1"
+thread-name "Clalr1_dp1"
+monolithic y
+file-name "lalr1_dp1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lalr1_dp1.h b/web/yacco2/qa/lalr1_dp1.h
new file mode 100644
index 0000000000..e323612d6b
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1.h
@@ -0,0 +1,76 @@
+/*
+ File: lalr1_dp1.h
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#ifndef __lalr1_dp1_h__
+#define __lalr1_dp1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clalr1_dp1;
+namespace NS_lalr1_dp1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clalr1_dp1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlalr1_dp1_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlalr1_dp1_ = 1
+ ,R_RS1_ = 570//start_of_rule_list + 2
+ ,rhs1_RS1_ = 2
+ ,rhs2_RS1_ = 3
+ ,rhs3_RS1_ = 4
+ ,rhs4_RS1_ = 5
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 6
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 15
+ Clalr1_dp1();
+ ~Clalr1_dp1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rlalr1_dp1;
+struct RS1;
+struct RA;
+struct RB;
+struct Rlalr1_dp1:public yacco2::CAbs_lr1_sym {
+ Rlalr1_dp1(yacco2::Parser* P);
+ public:
+};
+
+struct RS1:public yacco2::CAbs_lr1_sym {
+ RS1(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lalr1_dp1.lex b/web/yacco2/qa/lalr1_dp1.lex
new file mode 100644
index 0000000000..5e6f44a8ec
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1.lex
@@ -0,0 +1,47 @@
+/*
+$echo FILE: lalr1_dp1.lex
+$echo Test out lalr grammar --- okay parse
+$echo A laLR1 grammar
+$echo from deremer and pennello paper
+$echo efficient computation of lalr(1) look-ahead sets
+$echo acm trans on prog lang and systems
+$echo vol. 4 no. 4 oct 82
+$echo page 632
+$echo Okay
+*/
+/@
+@** |lalr1_dp1| grammar.\fbreak
+ A laLR1 grammar
+ from deremer and pennello paper
+ efficient computation of lalr(1) look-ahead sets
+ acm trans on prog lang and systems
+ vol. 4 no. 4 oct 82
+ page 632
+@/
+fsm
+ (fsm-id "lalr1_dp1.lex",fsm-filename lalr1_dp1,fsm-namespace NS_lalr1_dp1
+ ,fsm-class Clalr1_dp1
+ ,fsm-version "1.0",fsm-date "13-sep-97"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlalr1_dp1(){
+ -> RS1 eog
+ }
+
+ RS1(){
+ -> a RA c
+ -> a g d
+ -> b RA d
+ -> b g c
+ }
+
+ RA(){
+ -> RB
+ }
+
+ RB(){
+ -> g
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lalr1_dp1.pdf b/web/yacco2/qa/lalr1_dp1.pdf
new file mode 100644
index 0000000000..60169f2529
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1.pdf
Binary files differ
diff --git a/web/yacco2/qa/lalr1_dp1_idx.pdf b/web/yacco2/qa/lalr1_dp1_idx.pdf
new file mode 100644
index 0000000000..0ddc7e0379
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lalr1_dp1sym.cpp b/web/yacco2/qa/lalr1_dp1sym.cpp
new file mode 100644
index 0000000000..60d204803a
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: lalr1_dp1sym.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clalr1_dp1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlalr1_dp1_:{
+ Rlalr1_dp1* sym;
+ if(re->rule_ == 0){
+ sym = new Rlalr1_dp1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlalr1_dp1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lalr1_dp1tbl.cpp b/web/yacco2/qa/lalr1_dp1tbl.cpp
new file mode 100644
index 0000000000..00e7a20a7e
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp1tbl.cpp
@@ -0,0 +1,287 @@
+/*
+ File: lalr1_dp1tbl.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp1;// grammar's ns
+// first set terminals
+// raw_c
+yacco2::UCHAR LA1_Clalr1_dp1[] ={
+1
+,13,8
+};
+// LR1_eog
+yacco2::UCHAR LA2_Clalr1_dp1[] ={
+1
+,0,2
+};
+// raw_d
+yacco2::UCHAR LA3_Clalr1_dp1[] ={
+1
+,13,16
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Clalr1_dp1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clalr1_dp1;
+extern yacco2::State S2_Clalr1_dp1;
+extern yacco2::State S3_Clalr1_dp1;
+extern yacco2::State S4_Clalr1_dp1;
+extern yacco2::State S5_Clalr1_dp1;
+extern yacco2::State S6_Clalr1_dp1;
+extern yacco2::State S7_Clalr1_dp1;
+extern yacco2::State S8_Clalr1_dp1;
+extern yacco2::State S9_Clalr1_dp1;
+extern yacco2::State S10_Clalr1_dp1;
+extern yacco2::State S11_Clalr1_dp1;
+extern yacco2::State S12_Clalr1_dp1;
+extern yacco2::State S13_Clalr1_dp1;
+extern yacco2::State S14_Clalr1_dp1;
+extern yacco2::State S15_Clalr1_dp1;
+struct S1std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Clalr1_dp1 S1st_Clalr1_dp1 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Clalr1_dp1} // shift sym: raw_a
+ ,{106,(State*)&S7_Clalr1_dp1} // shift sym: raw_b
+ ,{569,(State*)&S1_Clalr1_dp1} // accept sym: Rlalr1_dp1
+ ,{570,(State*)&S12_Clalr1_dp1} // shift sym: RS1
+ }// end of shift table
+};
+yacco2::State S1_Clalr1_dp1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clalr1_dp1,0,0,0,0};
+struct S2std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clalr1_dp1 S2st_Clalr1_dp1 = {
+ 3
+ ,
+ {// start of table
+ {111,(State*)&S3_Clalr1_dp1} // shift sym: raw_g
+ ,{571,(State*)&S5_Clalr1_dp1} // shift sym: RA
+ ,{572,(State*)&S14_Clalr1_dp1} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S2_Clalr1_dp1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clalr1_dp1,0,0,0,0};
+struct S3std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clalr1_dp1 S3st_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Clalr1_dp1} // shift sym: raw_d
+ }// end of shift table
+};
+struct S3rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Clalr1_dp1 S3rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clalr1_dp1,Clalr1_dp1::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S3_Clalr1_dp1 = //State's vectored into symbol: "g"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clalr1_dp1,(Reduce_tbl*)&S3rt_Clalr1_dp1,0,0,0};
+struct S4rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clalr1_dp1 S4rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp1,Clalr1_dp1::rhs2_RS1_}
+ }// end of reduce table
+};
+yacco2::State S4_Clalr1_dp1 = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clalr1_dp1,0,0,0};
+struct S5std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clalr1_dp1 S5st_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S6_Clalr1_dp1} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S5_Clalr1_dp1 = //State's vectored into symbol: "RA"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clalr1_dp1,0,0,0,0};
+struct S6rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clalr1_dp1 S6rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp1,Clalr1_dp1::rhs1_RS1_}
+ }// end of reduce table
+};
+yacco2::State S6_Clalr1_dp1 = //State's vectored into symbol: "c"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clalr1_dp1,0,0,0};
+struct S7std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Clalr1_dp1 S7st_Clalr1_dp1 = {
+ 3
+ ,
+ {// start of table
+ {111,(State*)&S8_Clalr1_dp1} // shift sym: raw_g
+ ,{571,(State*)&S10_Clalr1_dp1} // shift sym: RA
+ ,{572,(State*)&S15_Clalr1_dp1} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S7_Clalr1_dp1 = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clalr1_dp1,0,0,0,0};
+struct S8std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Clalr1_dp1 S8st_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S9_Clalr1_dp1} // shift sym: raw_c
+ }// end of shift table
+};
+struct S8rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clalr1_dp1 S8rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clalr1_dp1,Clalr1_dp1::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S8_Clalr1_dp1 = //State's vectored into symbol: "g"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clalr1_dp1,(Reduce_tbl*)&S8rt_Clalr1_dp1,0,0,0};
+struct S9rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clalr1_dp1 S9rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp1,Clalr1_dp1::rhs4_RS1_}
+ }// end of reduce table
+};
+yacco2::State S9_Clalr1_dp1 = //State's vectored into symbol: "c"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clalr1_dp1,0,0,0};
+struct S10std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Clalr1_dp1 S10st_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S11_Clalr1_dp1} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S10_Clalr1_dp1 = //State's vectored into symbol: "RA"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clalr1_dp1,0,0,0,0};
+struct S11rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clalr1_dp1 S11rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp1,Clalr1_dp1::rhs3_RS1_}
+ }// end of reduce table
+};
+yacco2::State S11_Clalr1_dp1 = //State's vectored into symbol: "d"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clalr1_dp1,0,0,0};
+struct S12std_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clalr1_dp1 S12st_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Clalr1_dp1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Clalr1_dp1 = //State's vectored into symbol: "RS1"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clalr1_dp1,0,0,0,0};
+struct S13rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clalr1_dp1 S13rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clalr1_dp1,Clalr1_dp1::rhs1_Rlalr1_dp1_}
+ }// end of reduce table
+};
+yacco2::State S13_Clalr1_dp1 = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clalr1_dp1,0,0,0};
+struct S14rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clalr1_dp1 S14rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clalr1_dp1,Clalr1_dp1::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S14_Clalr1_dp1 = //State's vectored into symbol: "RB"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clalr1_dp1,0,0,0};
+struct S15rtd_Clalr1_dp1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clalr1_dp1 S15rt_Clalr1_dp1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clalr1_dp1,Clalr1_dp1::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S15_Clalr1_dp1 = //State's vectored into symbol: "RB"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clalr1_dp1,0,0,0};
diff --git a/web/yacco2/qa/lalr1_dp2.cpp b/web/yacco2/qa/lalr1_dp2.cpp
new file mode 100644
index 0000000000..8b4eb24628
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2.cpp
@@ -0,0 +1,88 @@
+/*
+ File: lalr1_dp2.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 6;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+}
+ Clalr1_dp2::
+ Clalr1_dp2()
+ :yacco2::CAbs_fsm
+ ("lalr1_dp2.lex"
+ ,"1.0"
+ ,"13-sep-97"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:14 2014 "
+ ,S1_Clalr1_dp2){
+
+ }
+
+Clalr1_dp2::~Clalr1_dp2(){
+
+ for(int x = 0;x < 6;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clalr1_dp2::failed(){
+ return false;
+ }
+ void Clalr1_dp2::op(){
+}
+int Clalr1_dp2::rhs_to_rules_mapping_[9] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,4 // subrule 7 for rule 5
+ ,5 // subrule 8 for rule 6
+};
+Rlalr1_dp2::Rlalr1_dp2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlalr1_dp2",0,Clalr1_dp2::R_Rlalr1_dp2_,P,false,false){
+}
+
+RS1::RS1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS1",0,Clalr1_dp2::R_RS1_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clalr1_dp2::R_RB_,P,false,false){
+}
+
+RC::RC(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RC",0,Clalr1_dp2::R_RC_,P,false,false){
+}
+
+RD::RD(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RD",0,Clalr1_dp2::R_RD_,P,false,false){
+}
+
+RE::RE(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RE",0,Clalr1_dp2::R_RE_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lalr1_dp2.fsc b/web/yacco2/qa/lalr1_dp2.fsc
new file mode 100644
index 0000000000..b1c7d1bdc4
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: lalr1_dp2.fsc
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+transitive n
+grammar-name "lalr1_dp2"
+name-space "NS_lalr1_dp2"
+thread-name "Clalr1_dp2"
+monolithic y
+file-name "lalr1_dp2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_c
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lalr1_dp2.h b/web/yacco2/qa/lalr1_dp2.h
new file mode 100644
index 0000000000..273fe29e49
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2.h
@@ -0,0 +1,91 @@
+/*
+ File: lalr1_dp2.h
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#ifndef __lalr1_dp2_h__
+#define __lalr1_dp2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clalr1_dp2;
+namespace NS_lalr1_dp2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[6];
+};
+class Clalr1_dp2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlalr1_dp2_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlalr1_dp2_ = 1
+ ,R_RS1_ = 570//start_of_rule_list + 2
+ ,rhs1_RS1_ = 2
+ ,rhs2_RS1_ = 3
+ ,rhs3_RS1_ = 4
+ ,R_RB_ = 571//start_of_rule_list + 4
+ ,rhs1_RB_ = 5
+ ,R_RC_ = 572//start_of_rule_list + 6
+ ,rhs1_RC_ = 6
+ ,R_RD_ = 573//start_of_rule_list + 8
+ ,rhs1_RD_ = 7
+ ,R_RE_ = 574//start_of_rule_list + 10
+ ,rhs1_RE_ = 8
+ };
+ //no of la sets = 4
+ //no of states = 13
+ Clalr1_dp2();
+ ~Clalr1_dp2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[9];
+ };
+struct Rlalr1_dp2;
+struct RS1;
+struct RB;
+struct RC;
+struct RD;
+struct RE;
+struct Rlalr1_dp2:public yacco2::CAbs_lr1_sym {
+ Rlalr1_dp2(yacco2::Parser* P);
+ public:
+};
+
+struct RS1:public yacco2::CAbs_lr1_sym {
+ RS1(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+struct RC:public yacco2::CAbs_lr1_sym {
+ RC(yacco2::Parser* P);
+ public:
+};
+
+struct RD:public yacco2::CAbs_lr1_sym {
+ RD(yacco2::Parser* P);
+ public:
+};
+
+struct RE:public yacco2::CAbs_lr1_sym {
+ RE(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lalr1_dp2.lex b/web/yacco2/qa/lalr1_dp2.lex
new file mode 100644
index 0000000000..863d029e97
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2.lex
@@ -0,0 +1,51 @@
+/*
+$echo FILE: lalr1_dp2.lex
+$echo A laLR1 grammar
+$echo from Deremer and Pennello paper
+$echo efficient computation: lalr(1) look-ahead sets
+$echo acm trans on prog lang and systems vol. 4 no. 4 oct 82
+$echo page 633
+$echo Okay
+*/
+/@
+@** |lalr1_dp2| grammar.\fbreak
+ A laLR1 grammar
+ from Deremer and Pennello paper
+ efficient computation: lalr(1) look-ahead sets
+ acm trans on prog lang and systems vol. 4 no. 4 oct 82
+ page 633
+@/
+fsm
+ (fsm-id "lalr1_dp2.lex",fsm-filename lalr1_dp2,fsm-namespace NS_lalr1_dp2
+ ,fsm-class Clalr1_dp2
+ ,fsm-version "1.0",fsm-date "13-sep-97"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlalr1_dp2(){
+ -> RS1 eog
+ }
+
+ RS1(){
+ -> c d
+ -> a RB d
+ -> RC RB g
+ }
+
+ RB(){
+ -> RD RE
+ }
+
+ RC(){
+ -> c
+ }
+
+ RD(){
+ ->
+ }
+
+ RE(){
+ ->
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lalr1_dp2.pdf b/web/yacco2/qa/lalr1_dp2.pdf
new file mode 100644
index 0000000000..03175ea33e
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2.pdf
Binary files differ
diff --git a/web/yacco2/qa/lalr1_dp2_idx.pdf b/web/yacco2/qa/lalr1_dp2_idx.pdf
new file mode 100644
index 0000000000..5a1c9f1f05
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lalr1_dp2sym.cpp b/web/yacco2/qa/lalr1_dp2sym.cpp
new file mode 100644
index 0000000000..474169dc89
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2sym.cpp
@@ -0,0 +1,139 @@
+/*
+ File: lalr1_dp2sym.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clalr1_dp2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlalr1_dp2_:{
+ Rlalr1_dp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rlalr1_dp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlalr1_dp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RC_:{
+ RC* sym;
+ if(re->rule_ == 0){
+ sym = new RC(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RC*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs1_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lalr1_dp2tbl.cpp b/web/yacco2/qa/lalr1_dp2tbl.cpp
new file mode 100644
index 0000000000..e74a2b4f42
--- /dev/null
+++ b/web/yacco2/qa/lalr1_dp2tbl.cpp
@@ -0,0 +1,279 @@
+/*
+ File: lalr1_dp2tbl.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lalr1_dp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lalr1_dp2;// grammar's ns
+// first set terminals
+// raw_d
+// raw_g
+yacco2::UCHAR LA1_Clalr1_dp2[] ={
+1
+,13,144
+};
+// LR1_eog
+yacco2::UCHAR LA2_Clalr1_dp2[] ={
+1
+,0,2
+};
+// raw_g
+yacco2::UCHAR LA3_Clalr1_dp2[] ={
+1
+,13,128
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Clalr1_dp2[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clalr1_dp2;
+extern yacco2::State S2_Clalr1_dp2;
+extern yacco2::State S3_Clalr1_dp2;
+extern yacco2::State S4_Clalr1_dp2;
+extern yacco2::State S5_Clalr1_dp2;
+extern yacco2::State S6_Clalr1_dp2;
+extern yacco2::State S7_Clalr1_dp2;
+extern yacco2::State S8_Clalr1_dp2;
+extern yacco2::State S9_Clalr1_dp2;
+extern yacco2::State S10_Clalr1_dp2;
+extern yacco2::State S11_Clalr1_dp2;
+extern yacco2::State S12_Clalr1_dp2;
+extern yacco2::State S13_Clalr1_dp2;
+struct S1std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Clalr1_dp2 S1st_Clalr1_dp2 = {
+ 5
+ ,
+ {// start of table
+ {105,(State*)&S2_Clalr1_dp2} // shift sym: raw_a
+ ,{107,(State*)&S5_Clalr1_dp2} // shift sym: raw_c
+ ,{569,(State*)&S1_Clalr1_dp2} // accept sym: Rlalr1_dp2
+ ,{570,(State*)&S7_Clalr1_dp2} // shift sym: RS1
+ ,{572,(State*)&S9_Clalr1_dp2} // shift sym: RC
+ }// end of shift table
+};
+yacco2::State S1_Clalr1_dp2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clalr1_dp2,0,0,0,0};
+struct S2std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S2std_Clalr1_dp2 S2st_Clalr1_dp2 = {
+ 2
+ ,
+ {// start of table
+ {571,(State*)&S3_Clalr1_dp2} // shift sym: RB
+ ,{573,(State*)&S12_Clalr1_dp2} // shift sym: RD
+ }// end of shift table
+};
+struct S2rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_Clalr1_dp2 S2rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clalr1_dp2,Clalr1_dp2::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S2_Clalr1_dp2 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clalr1_dp2,(Reduce_tbl*)&S2rt_Clalr1_dp2,0,0,0};
+struct S3std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clalr1_dp2 S3st_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Clalr1_dp2} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S3_Clalr1_dp2 = //State's vectored into symbol: "RB"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clalr1_dp2,0,0,0,0};
+struct S4rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clalr1_dp2 S4rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp2,Clalr1_dp2::rhs2_RS1_}
+ }// end of reduce table
+};
+yacco2::State S4_Clalr1_dp2 = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clalr1_dp2,0,0,0};
+struct S5std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clalr1_dp2 S5st_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S6_Clalr1_dp2} // shift sym: raw_d
+ }// end of shift table
+};
+struct S5rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clalr1_dp2 S5rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clalr1_dp2,Clalr1_dp2::rhs1_RC_}
+ }// end of reduce table
+};
+yacco2::State S5_Clalr1_dp2 = //State's vectored into symbol: "c"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clalr1_dp2,(Reduce_tbl*)&S5rt_Clalr1_dp2,0,0,0};
+struct S6rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clalr1_dp2 S6rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp2,Clalr1_dp2::rhs1_RS1_}
+ }// end of reduce table
+};
+yacco2::State S6_Clalr1_dp2 = //State's vectored into symbol: "d"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clalr1_dp2,0,0,0};
+struct S7std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Clalr1_dp2 S7st_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S8_Clalr1_dp2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S7_Clalr1_dp2 = //State's vectored into symbol: "RS1"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clalr1_dp2,0,0,0,0};
+struct S8rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clalr1_dp2 S8rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clalr1_dp2,Clalr1_dp2::rhs1_Rlalr1_dp2_}
+ }// end of reduce table
+};
+yacco2::State S8_Clalr1_dp2 = //State's vectored into symbol: "eog"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clalr1_dp2,0,0,0};
+struct S9std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Clalr1_dp2 S9st_Clalr1_dp2 = {
+ 2
+ ,
+ {// start of table
+ {571,(State*)&S10_Clalr1_dp2} // shift sym: RB
+ ,{573,(State*)&S12_Clalr1_dp2} // shift sym: RD
+ }// end of shift table
+};
+struct S9rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clalr1_dp2 S9rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clalr1_dp2,Clalr1_dp2::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S9_Clalr1_dp2 = //State's vectored into symbol: "RC"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clalr1_dp2,(Reduce_tbl*)&S9rt_Clalr1_dp2,0,0,0};
+struct S10std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Clalr1_dp2 S10st_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {111,(State*)&S11_Clalr1_dp2} // shift sym: raw_g
+ }// end of shift table
+};
+yacco2::State S10_Clalr1_dp2 = //State's vectored into symbol: "RB"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clalr1_dp2,0,0,0,0};
+struct S11rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clalr1_dp2 S11rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clalr1_dp2,Clalr1_dp2::rhs3_RS1_}
+ }// end of reduce table
+};
+yacco2::State S11_Clalr1_dp2 = //State's vectored into symbol: "g"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clalr1_dp2,0,0,0};
+struct S12std_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clalr1_dp2 S12st_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {574,(State*)&S13_Clalr1_dp2} // shift sym: RE
+ }// end of shift table
+};
+struct S12rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clalr1_dp2 S12rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clalr1_dp2,Clalr1_dp2::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S12_Clalr1_dp2 = //State's vectored into symbol: "RD"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clalr1_dp2,(Reduce_tbl*)&S12rt_Clalr1_dp2,0,0,0};
+struct S13rtd_Clalr1_dp2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clalr1_dp2 S13rt_Clalr1_dp2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clalr1_dp2,Clalr1_dp2::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S13_Clalr1_dp2 = //State's vectored into symbol: "RE"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clalr1_dp2,0,0,0};
diff --git a/web/yacco2/qa/lr1_br1.cpp b/web/yacco2/qa/lr1_br1.cpp
new file mode 100644
index 0000000000..122e767c9d
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1.cpp
@@ -0,0 +1,77 @@
+/*
+ File: lr1_br1.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_br1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_br1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clr1_br1_rul_fsm::
+ Clr1_br1_rul_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_br1.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:14 2014 "
+ ,S1_Clr1_br1_rul_fsm){
+
+ }
+
+Clr1_br1_rul_fsm::~Clr1_br1_rul_fsm(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_br1_rul_fsm::failed(){
+ return false;
+ }
+ void Clr1_br1_rul_fsm::op(){
+}
+int Clr1_br1_rul_fsm::rhs_to_rules_mapping_[10] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,2 // subrule 7 for rule 3
+ ,3 // subrule 8 for rule 4
+ ,3 // subrule 9 for rule 4
+};
+Rlr1_br1::Rlr1_br1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_br1",0,Clr1_br1_rul_fsm::R_Rlr1_br1_,P,false,false){
+}
+
+RE::RE(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RE",0,Clr1_br1_rul_fsm::R_RE_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_br1_rul_fsm::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_br1_rul_fsm::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_br1.fsc b/web/yacco2/qa/lr1_br1.fsc
new file mode 100644
index 0000000000..1f3b2b145b
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: lr1_br1.fsc
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+transitive n
+grammar-name "lr1_br1"
+name-space "NS_lr1_br1"
+thread-name "Clr1_br1_rul_fsm"
+monolithic y
+file-name "lr1_br1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_u
+ raw_x
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lr1_br1.h b/web/yacco2/qa/lr1_br1.h
new file mode 100644
index 0000000000..acdb7b3c4f
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1.h
@@ -0,0 +1,78 @@
+/*
+ File: lr1_br1.h
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#ifndef __lr1_br1_h__
+#define __lr1_br1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_br1_rul_fsm;
+namespace NS_lr1_br1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clr1_br1_rul_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_br1_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_br1_ = 1
+ ,R_RE_ = 570//start_of_rule_list + 2
+ ,rhs1_RE_ = 2
+ ,rhs2_RE_ = 3
+ ,rhs3_RE_ = 4
+ ,rhs4_RE_ = 5
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 6
+ ,rhs2_RA_ = 7
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 8
+ ,rhs2_RB_ = 9
+ };
+ //no of la sets = 4
+ //no of states = 24
+ Clr1_br1_rul_fsm();
+ ~Clr1_br1_rul_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[10];
+ };
+struct Rlr1_br1;
+struct RE;
+struct RA;
+struct RB;
+struct Rlr1_br1:public yacco2::CAbs_lr1_sym {
+ Rlr1_br1(yacco2::Parser* P);
+ public:
+};
+
+struct RE:public yacco2::CAbs_lr1_sym {
+ RE(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_br1.lex b/web/yacco2/qa/lr1_br1.lex
new file mode 100644
index 0000000000..b5299d1592
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1.lex
@@ -0,0 +1,46 @@
+/*
+$echo FILE: lr1_br1.lex
+$echo A LR1 GRAMMAR FROM
+$echo LETTER FROM BENT BRUUN KRISTENSEN
+$echo AND
+$echo OLE LEHRMANN MADSEN
+$echo SIGPLAN VOL 19 NO 8 AUG 1984
+$echo Okay
+*/
+/@
+@** |lr1_br1| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ LETTER FROM BENT BRUUN KRISTENSEN
+ AND
+ OLE LEHRMANN MADSEN
+ SIGPLAN VOL 19 NO 8 AUG 1984
+@/
+fsm (fsm-id "lr1_br1.lex",fsm-filename lr1_br1,fsm-namespace NS_lr1_br1
+ ,fsm-class Clr1_br1_rul_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules
+{
+ Rlr1_br1 (){
+ -> RE eog
+ }
+
+ RE (){
+ -> RA a
+ -> RB b
+ -> u RA b
+ -> u RB a
+ }
+
+ RA (){
+ -> x y z RA
+ -> x q
+ }
+
+ RB (){
+ -> x y z RB
+ -> x q
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_br1.pdf b/web/yacco2/qa/lr1_br1.pdf
new file mode 100644
index 0000000000..bdb404f588
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_br1_idx.pdf b/web/yacco2/qa/lr1_br1_idx.pdf
new file mode 100644
index 0000000000..8bd1bc9e78
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_br1sym.cpp b/web/yacco2/qa/lr1_br1sym.cpp
new file mode 100644
index 0000000000..11d774aa3f
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1sym.cpp
@@ -0,0 +1,153 @@
+/*
+ File: lr1_br1sym.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_br1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_br1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_br1_rul_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_br1_:{
+ Rlr1_br1* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_br1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_br1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs3_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_br1tbl.cpp b/web/yacco2/qa/lr1_br1tbl.cpp
new file mode 100644
index 0000000000..7a02c43e12
--- /dev/null
+++ b/web/yacco2/qa/lr1_br1tbl.cpp
@@ -0,0 +1,408 @@
+/*
+ File: lr1_br1tbl.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_br1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_br1;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Clr1_br1_rul_fsm[] ={
+1
+,0,2
+};
+// raw_a
+yacco2::UCHAR LA2_Clr1_br1_rul_fsm[] ={
+1
+,13,2
+};
+// raw_b
+yacco2::UCHAR LA3_Clr1_br1_rul_fsm[] ={
+1
+,13,4
+};
+// LR1_eolr
+yacco2::UCHAR LA4_Clr1_br1_rul_fsm[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clr1_br1_rul_fsm;
+extern yacco2::State S2_Clr1_br1_rul_fsm;
+extern yacco2::State S3_Clr1_br1_rul_fsm;
+extern yacco2::State S4_Clr1_br1_rul_fsm;
+extern yacco2::State S5_Clr1_br1_rul_fsm;
+extern yacco2::State S6_Clr1_br1_rul_fsm;
+extern yacco2::State S7_Clr1_br1_rul_fsm;
+extern yacco2::State S8_Clr1_br1_rul_fsm;
+extern yacco2::State S9_Clr1_br1_rul_fsm;
+extern yacco2::State S10_Clr1_br1_rul_fsm;
+extern yacco2::State S11_Clr1_br1_rul_fsm;
+extern yacco2::State S12_Clr1_br1_rul_fsm;
+extern yacco2::State S13_Clr1_br1_rul_fsm;
+extern yacco2::State S14_Clr1_br1_rul_fsm;
+extern yacco2::State S15_Clr1_br1_rul_fsm;
+extern yacco2::State S16_Clr1_br1_rul_fsm;
+extern yacco2::State S17_Clr1_br1_rul_fsm;
+extern yacco2::State S18_Clr1_br1_rul_fsm;
+extern yacco2::State S19_Clr1_br1_rul_fsm;
+extern yacco2::State S20_Clr1_br1_rul_fsm;
+extern yacco2::State S21_Clr1_br1_rul_fsm;
+extern yacco2::State S22_Clr1_br1_rul_fsm;
+extern yacco2::State S23_Clr1_br1_rul_fsm;
+extern yacco2::State S24_Clr1_br1_rul_fsm;
+struct S1std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Clr1_br1_rul_fsm S1st_Clr1_br1_rul_fsm = {
+ 6
+ ,
+ {// start of table
+ {125,(State*)&S2_Clr1_br1_rul_fsm} // shift sym: raw_u
+ ,{128,(State*)&S7_Clr1_br1_rul_fsm} // shift sym: raw_x
+ ,{569,(State*)&S1_Clr1_br1_rul_fsm} // accept sym: Rlr1_br1
+ ,{570,(State*)&S13_Clr1_br1_rul_fsm} // shift sym: RE
+ ,{571,(State*)&S15_Clr1_br1_rul_fsm} // shift sym: RA
+ ,{572,(State*)&S17_Clr1_br1_rul_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S1_Clr1_br1_rul_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S2std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clr1_br1_rul_fsm S2st_Clr1_br1_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S19_Clr1_br1_rul_fsm} // shift sym: raw_x
+ ,{571,(State*)&S3_Clr1_br1_rul_fsm} // shift sym: RA
+ ,{572,(State*)&S5_Clr1_br1_rul_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S2_Clr1_br1_rul_fsm = //State's vectored into symbol: "u"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S3std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_br1_rul_fsm S3st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S4_Clr1_br1_rul_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S3_Clr1_br1_rul_fsm = //State's vectored into symbol: "RA"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S4rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_br1_rul_fsm S4rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs3_RE_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_br1_rul_fsm = //State's vectored into symbol: "b"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_br1_rul_fsm,0,0,0};
+struct S5std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clr1_br1_rul_fsm S5st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S6_Clr1_br1_rul_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S5_Clr1_br1_rul_fsm = //State's vectored into symbol: "RB"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S6rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_br1_rul_fsm S6rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs4_RE_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_br1_rul_fsm = //State's vectored into symbol: "a"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_br1_rul_fsm,0,0,0};
+struct S7std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_Clr1_br1_rul_fsm S7st_Clr1_br1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {121,(State*)&S8_Clr1_br1_rul_fsm} // shift sym: raw_q
+ ,{129,(State*)&S9_Clr1_br1_rul_fsm} // shift sym: raw_y
+ }// end of shift table
+};
+yacco2::State S7_Clr1_br1_rul_fsm = //State's vectored into symbol: "x"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S8rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S8rtd_Clr1_br1_rul_fsm S8rt_Clr1_br1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs2_RA_}
+ ,{(Set_tbl*)&LA3_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S8_Clr1_br1_rul_fsm = //State's vectored into symbol: "q"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clr1_br1_rul_fsm,0,0,0};
+struct S9std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Clr1_br1_rul_fsm S9st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S10_Clr1_br1_rul_fsm} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S9_Clr1_br1_rul_fsm = //State's vectored into symbol: "y"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S10std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Clr1_br1_rul_fsm S10st_Clr1_br1_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S7_Clr1_br1_rul_fsm} // shift sym: raw_x
+ ,{571,(State*)&S11_Clr1_br1_rul_fsm} // shift sym: RA
+ ,{572,(State*)&S12_Clr1_br1_rul_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S10_Clr1_br1_rul_fsm = //State's vectored into symbol: "z"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S11rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clr1_br1_rul_fsm S11rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S11_Clr1_br1_rul_fsm = //State's vectored into symbol: "RA"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clr1_br1_rul_fsm,0,0,0};
+struct S12rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clr1_br1_rul_fsm S12rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S12_Clr1_br1_rul_fsm = //State's vectored into symbol: "RB"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clr1_br1_rul_fsm,0,0,0};
+struct S13std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Clr1_br1_rul_fsm S13st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S14_Clr1_br1_rul_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S13_Clr1_br1_rul_fsm = //State's vectored into symbol: "RE"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S14rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clr1_br1_rul_fsm S14rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_Rlr1_br1_}
+ }// end of reduce table
+};
+yacco2::State S14_Clr1_br1_rul_fsm = //State's vectored into symbol: "eog"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clr1_br1_rul_fsm,0,0,0};
+struct S15std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S15std_Clr1_br1_rul_fsm S15st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S16_Clr1_br1_rul_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S15_Clr1_br1_rul_fsm = //State's vectored into symbol: "RA"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S16rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_br1_rul_fsm S16rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_br1_rul_fsm = //State's vectored into symbol: "a"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clr1_br1_rul_fsm,0,0,0};
+struct S17std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_Clr1_br1_rul_fsm S17st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S18_Clr1_br1_rul_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S17_Clr1_br1_rul_fsm = //State's vectored into symbol: "RB"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S18rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S18rtd_Clr1_br1_rul_fsm S18rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S18_Clr1_br1_rul_fsm = //State's vectored into symbol: "b"
+{18
+,0,0,0,0,0,(Reduce_tbl*)&S18rt_Clr1_br1_rul_fsm,0,0,0};
+struct S19std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S19std_Clr1_br1_rul_fsm S19st_Clr1_br1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {121,(State*)&S20_Clr1_br1_rul_fsm} // shift sym: raw_q
+ ,{129,(State*)&S21_Clr1_br1_rul_fsm} // shift sym: raw_y
+ }// end of shift table
+};
+yacco2::State S19_Clr1_br1_rul_fsm = //State's vectored into symbol: "x"
+{19
+,0,0,0,0,(Shift_tbl*)&S19st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S20rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S20rtd_Clr1_br1_rul_fsm S20rt_Clr1_br1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs2_RA_}
+ ,{(Set_tbl*)&LA2_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S20_Clr1_br1_rul_fsm = //State's vectored into symbol: "q"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clr1_br1_rul_fsm,0,0,0};
+struct S21std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S21std_Clr1_br1_rul_fsm S21st_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S22_Clr1_br1_rul_fsm} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S21_Clr1_br1_rul_fsm = //State's vectored into symbol: "y"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S22std_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S22std_Clr1_br1_rul_fsm S22st_Clr1_br1_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {128,(State*)&S19_Clr1_br1_rul_fsm} // shift sym: raw_x
+ ,{571,(State*)&S23_Clr1_br1_rul_fsm} // shift sym: RA
+ ,{572,(State*)&S24_Clr1_br1_rul_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S22_Clr1_br1_rul_fsm = //State's vectored into symbol: "z"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Clr1_br1_rul_fsm,0,0,0,0};
+struct S23rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Clr1_br1_rul_fsm S23rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S23_Clr1_br1_rul_fsm = //State's vectored into symbol: "RA"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Clr1_br1_rul_fsm,0,0,0};
+struct S24rtd_Clr1_br1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clr1_br1_rul_fsm S24rt_Clr1_br1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_br1_rul_fsm,Clr1_br1_rul_fsm::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S24_Clr1_br1_rul_fsm = //State's vectored into symbol: "RB"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clr1_br1_rul_fsm,0,0,0};
diff --git a/web/yacco2/qa/lr1_pa1.cpp b/web/yacco2/qa/lr1_pa1.cpp
new file mode 100644
index 0000000000..5e2463fa33
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1.cpp
@@ -0,0 +1,99 @@
+/*
+ File: lr1_pa1.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 7;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+}
+ Clr1_pa1_rul_fsm::
+ Clr1_pa1_rul_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_pa1.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:14 2014 "
+ ,S1_Clr1_pa1_rul_fsm){
+
+ }
+
+Clr1_pa1_rul_fsm::~Clr1_pa1_rul_fsm(){
+
+ for(int x = 0;x < 7;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_pa1_rul_fsm::failed(){
+ return false;
+ }
+ void Clr1_pa1_rul_fsm::op(){
+}
+int Clr1_pa1_rul_fsm::rhs_to_rules_mapping_[14] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,2 // subrule 8 for rule 3
+ ,2 // subrule 9 for rule 3
+ ,3 // subrule 10 for rule 4
+ ,4 // subrule 11 for rule 5
+ ,5 // subrule 12 for rule 6
+ ,6 // subrule 13 for rule 7
+};
+Rlr1_pa1::Rlr1_pa1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_pa1",0,Clr1_pa1_rul_fsm::R_Rlr1_pa1_,P,false,false){
+}
+
+RX::RX(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RX",0,Clr1_pa1_rul_fsm::R_RX_,P,false,false){
+}
+
+RY::RY(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RY",0,Clr1_pa1_rul_fsm::R_RY_,P,false,false){
+}
+
+RZ::RZ(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RZ",0,Clr1_pa1_rul_fsm::R_RZ_,P,false,false){
+}
+
+RT::RT(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RT",0,Clr1_pa1_rul_fsm::R_RT_,P,false,false){
+}
+
+RW::RW(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RW",0,Clr1_pa1_rul_fsm::R_RW_,P,false,false){
+}
+
+RV::RV(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RV",0,Clr1_pa1_rul_fsm::R_RV_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_pa1.fsc b/web/yacco2/qa/lr1_pa1.fsc
new file mode 100644
index 0000000000..762e0d0ecd
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1.fsc
@@ -0,0 +1,21 @@
+/*
+ File: lr1_pa1.fsc
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+transitive n
+grammar-name "lr1_pa1"
+name-space "NS_lr1_pa1"
+thread-name "Clr1_pa1_rul_fsm"
+monolithic y
+file-name "lr1_pa1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lr1_pa1.h b/web/yacco2/qa/lr1_pa1.h
new file mode 100644
index 0000000000..d2733ed9af
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1.h
@@ -0,0 +1,103 @@
+/*
+ File: lr1_pa1.h
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#ifndef __lr1_pa1_h__
+#define __lr1_pa1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_pa1_rul_fsm;
+namespace NS_lr1_pa1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[7];
+};
+class Clr1_pa1_rul_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_pa1_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_pa1_ = 1
+ ,R_RX_ = 570//start_of_rule_list + 2
+ ,rhs1_RX_ = 2
+ ,rhs2_RX_ = 3
+ ,rhs3_RX_ = 4
+ ,rhs4_RX_ = 5
+ ,rhs5_RX_ = 6
+ ,rhs6_RX_ = 7
+ ,R_RY_ = 571//start_of_rule_list + 4
+ ,rhs1_RY_ = 8
+ ,rhs2_RY_ = 9
+ ,R_RZ_ = 572//start_of_rule_list + 6
+ ,rhs1_RZ_ = 10
+ ,R_RT_ = 573//start_of_rule_list + 8
+ ,rhs1_RT_ = 11
+ ,R_RW_ = 574//start_of_rule_list + 10
+ ,rhs1_RW_ = 12
+ ,R_RV_ = 575//start_of_rule_list + 12
+ ,rhs1_RV_ = 13
+ };
+ //no of la sets = 6
+ //no of states = 24
+ Clr1_pa1_rul_fsm();
+ ~Clr1_pa1_rul_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[14];
+ };
+struct Rlr1_pa1;
+struct RX;
+struct RY;
+struct RZ;
+struct RT;
+struct RW;
+struct RV;
+struct Rlr1_pa1:public yacco2::CAbs_lr1_sym {
+ Rlr1_pa1(yacco2::Parser* P);
+ public:
+};
+
+struct RX:public yacco2::CAbs_lr1_sym {
+ RX(yacco2::Parser* P);
+ public:
+};
+
+struct RY:public yacco2::CAbs_lr1_sym {
+ RY(yacco2::Parser* P);
+ public:
+};
+
+struct RZ:public yacco2::CAbs_lr1_sym {
+ RZ(yacco2::Parser* P);
+ public:
+};
+
+struct RT:public yacco2::CAbs_lr1_sym {
+ RT(yacco2::Parser* P);
+ public:
+};
+
+struct RW:public yacco2::CAbs_lr1_sym {
+ RW(yacco2::Parser* P);
+ public:
+};
+
+struct RV:public yacco2::CAbs_lr1_sym {
+ RV(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_pa1.lex b/web/yacco2/qa/lr1_pa1.lex
new file mode 100644
index 0000000000..f4e8d6eea2
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1.lex
@@ -0,0 +1,58 @@
+/*
+$echo FILE: lr1_pa1.lex
+$echo A LR1 GRAMMAR FROM
+$echo ACTA INFORMATICA 7 249-268(1977)
+$echo A PRACTICAL GENERAL METHOD FOR CONSTRUCTING LR(K) PARSERS
+$echo BY DAVID PAGER
+$echo P. 256 GRAMMAR G2
+$echo Okay
+*/
+/@
+@** |lr1_pa1| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ ACTA INFORMATICA 7 249-268(1977)
+ A PRACTICAL GENERAL METHOD FOR CONSTRUCTING LR(K) PARSERS
+ BY DAVID PAGER
+ P. 256 GRAMMAR G2
+@/
+fsm(fsm-id "lr1_pa1.lex",fsm-filename lr1_pa1,fsm-namespace NS_lr1_pa1
+ ,fsm-class Clr1_pa1_rul_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_pa1(){
+ -> RX eog
+ }
+
+ RX(){
+ -> a RY d
+ -> a RZ c
+ -> a RT
+ -> b RY e
+ -> b RZ d
+ -> b RT
+ }
+
+ RY(){
+ -> t RW
+ -> u RX
+ }
+
+ RZ(){
+ -> t u
+ }
+
+ RT(){
+ -> u RX a
+ }
+
+ RW(){
+ -> u RV
+ }
+
+ RV(){
+ ->
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_pa1.pdf b/web/yacco2/qa/lr1_pa1.pdf
new file mode 100644
index 0000000000..f66b7cea18
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_pa1_idx.pdf b/web/yacco2/qa/lr1_pa1_idx.pdf
new file mode 100644
index 0000000000..224e324dce
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_pa1sym.cpp b/web/yacco2/qa/lr1_pa1sym.cpp
new file mode 100644
index 0000000000..a90db633a7
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1sym.cpp
@@ -0,0 +1,209 @@
+/*
+ File: lr1_pa1sym.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_pa1_rul_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_pa1_:{
+ Rlr1_pa1* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_pa1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_pa1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs4_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs5_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs6_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RY_:{
+ RY* sym;
+ if(re->rule_ == 0){
+ sym = new RY(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RY*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RY_:{
+ RY* sym;
+ if(re->rule_ == 0){
+ sym = new RY(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RY*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RZ_:{
+ RZ* sym;
+ if(re->rule_ == 0){
+ sym = new RZ(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RZ*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RT_:{
+ RT* sym;
+ if(re->rule_ == 0){
+ sym = new RT(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RT*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RW_:{
+ RW* sym;
+ if(re->rule_ == 0){
+ sym = new RW(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RW*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RV_:{
+ RV* sym;
+ if(re->rule_ == 0){
+ sym = new RV(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RV*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_pa1tbl.cpp b/web/yacco2/qa/lr1_pa1tbl.cpp
new file mode 100644
index 0000000000..e4b0b6a51e
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa1tbl.cpp
@@ -0,0 +1,458 @@
+/*
+ File: lr1_pa1tbl.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa1;// grammar's ns
+// first set terminals
+// raw_c
+yacco2::UCHAR LA1_Clr1_pa1_rul_fsm[] ={
+1
+,13,8
+};
+// raw_d
+// raw_e
+yacco2::UCHAR LA2_Clr1_pa1_rul_fsm[] ={
+1
+,13,48
+};
+// raw_d
+yacco2::UCHAR LA3_Clr1_pa1_rul_fsm[] ={
+1
+,13,16
+};
+// raw_e
+yacco2::UCHAR LA4_Clr1_pa1_rul_fsm[] ={
+1
+,13,32
+};
+// LR1_eog
+// raw_a
+// raw_d
+// raw_e
+yacco2::UCHAR LA5_Clr1_pa1_rul_fsm[] ={
+2
+,0,2
+,13,50
+};
+// LR1_eolr
+yacco2::UCHAR LA6_Clr1_pa1_rul_fsm[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Clr1_pa1_rul_fsm;
+extern yacco2::State S2_Clr1_pa1_rul_fsm;
+extern yacco2::State S3_Clr1_pa1_rul_fsm;
+extern yacco2::State S4_Clr1_pa1_rul_fsm;
+extern yacco2::State S5_Clr1_pa1_rul_fsm;
+extern yacco2::State S6_Clr1_pa1_rul_fsm;
+extern yacco2::State S7_Clr1_pa1_rul_fsm;
+extern yacco2::State S8_Clr1_pa1_rul_fsm;
+extern yacco2::State S9_Clr1_pa1_rul_fsm;
+extern yacco2::State S10_Clr1_pa1_rul_fsm;
+extern yacco2::State S11_Clr1_pa1_rul_fsm;
+extern yacco2::State S12_Clr1_pa1_rul_fsm;
+extern yacco2::State S13_Clr1_pa1_rul_fsm;
+extern yacco2::State S14_Clr1_pa1_rul_fsm;
+extern yacco2::State S15_Clr1_pa1_rul_fsm;
+extern yacco2::State S16_Clr1_pa1_rul_fsm;
+extern yacco2::State S17_Clr1_pa1_rul_fsm;
+extern yacco2::State S18_Clr1_pa1_rul_fsm;
+extern yacco2::State S19_Clr1_pa1_rul_fsm;
+extern yacco2::State S20_Clr1_pa1_rul_fsm;
+extern yacco2::State S21_Clr1_pa1_rul_fsm;
+extern yacco2::State S22_Clr1_pa1_rul_fsm;
+extern yacco2::State S23_Clr1_pa1_rul_fsm;
+extern yacco2::State S24_Clr1_pa1_rul_fsm;
+struct S1std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Clr1_pa1_rul_fsm S1st_Clr1_pa1_rul_fsm = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_pa1_rul_fsm} // shift sym: raw_a
+ ,{106,(State*)&S8_Clr1_pa1_rul_fsm} // shift sym: raw_b
+ ,{569,(State*)&S1_Clr1_pa1_rul_fsm} // accept sym: Rlr1_pa1
+ ,{570,(State*)&S23_Clr1_pa1_rul_fsm} // shift sym: RX
+ }// end of shift table
+};
+yacco2::State S1_Clr1_pa1_rul_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S2std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S2std_Clr1_pa1_rul_fsm S2st_Clr1_pa1_rul_fsm = {
+ 5
+ ,
+ {// start of table
+ {124,(State*)&S3_Clr1_pa1_rul_fsm} // shift sym: raw_t
+ ,{125,(State*)&S7_Clr1_pa1_rul_fsm} // shift sym: raw_u
+ ,{571,(State*)&S18_Clr1_pa1_rul_fsm} // shift sym: RY
+ ,{572,(State*)&S20_Clr1_pa1_rul_fsm} // shift sym: RZ
+ ,{573,(State*)&S22_Clr1_pa1_rul_fsm} // shift sym: RT
+ }// end of shift table
+};
+yacco2::State S2_Clr1_pa1_rul_fsm = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S3std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Clr1_pa1_rul_fsm S3st_Clr1_pa1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {125,(State*)&S4_Clr1_pa1_rul_fsm} // shift sym: raw_u
+ ,{574,(State*)&S6_Clr1_pa1_rul_fsm} // shift sym: RW
+ }// end of shift table
+};
+yacco2::State S3_Clr1_pa1_rul_fsm = //State's vectored into symbol: "t"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S4std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S4std_Clr1_pa1_rul_fsm S4st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {575,(State*)&S5_Clr1_pa1_rul_fsm} // shift sym: RV
+ }// end of shift table
+};
+struct S4rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S4rtd_Clr1_pa1_rul_fsm S4rt_Clr1_pa1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RZ_}
+ ,{(Set_tbl*)&LA2_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RV_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_pa1_rul_fsm = //State's vectored into symbol: "u"
+{4
+,0,0,0,0,(Shift_tbl*)&S4st_Clr1_pa1_rul_fsm,(Reduce_tbl*)&S4rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S5rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clr1_pa1_rul_fsm S5rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RW_}
+ }// end of reduce table
+};
+yacco2::State S5_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RV"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S6rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_pa1_rul_fsm S6rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RY_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RW"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S7std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Clr1_pa1_rul_fsm S7st_Clr1_pa1_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_pa1_rul_fsm} // shift sym: raw_a
+ ,{106,(State*)&S8_Clr1_pa1_rul_fsm} // shift sym: raw_b
+ ,{570,(State*)&S16_Clr1_pa1_rul_fsm} // shift sym: RX
+ }// end of shift table
+};
+yacco2::State S7_Clr1_pa1_rul_fsm = //State's vectored into symbol: "u"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S8std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S8std_Clr1_pa1_rul_fsm S8st_Clr1_pa1_rul_fsm = {
+ 5
+ ,
+ {// start of table
+ {124,(State*)&S9_Clr1_pa1_rul_fsm} // shift sym: raw_t
+ ,{125,(State*)&S7_Clr1_pa1_rul_fsm} // shift sym: raw_u
+ ,{571,(State*)&S11_Clr1_pa1_rul_fsm} // shift sym: RY
+ ,{572,(State*)&S13_Clr1_pa1_rul_fsm} // shift sym: RZ
+ ,{573,(State*)&S15_Clr1_pa1_rul_fsm} // shift sym: RT
+ }// end of shift table
+};
+yacco2::State S8_Clr1_pa1_rul_fsm = //State's vectored into symbol: "b"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S9std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Clr1_pa1_rul_fsm S9st_Clr1_pa1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {125,(State*)&S10_Clr1_pa1_rul_fsm} // shift sym: raw_u
+ ,{574,(State*)&S6_Clr1_pa1_rul_fsm} // shift sym: RW
+ }// end of shift table
+};
+yacco2::State S9_Clr1_pa1_rul_fsm = //State's vectored into symbol: "t"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S10std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Clr1_pa1_rul_fsm S10st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {575,(State*)&S5_Clr1_pa1_rul_fsm} // shift sym: RV
+ }// end of shift table
+};
+struct S10rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S10rtd_Clr1_pa1_rul_fsm S10rt_Clr1_pa1_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RZ_}
+ ,{(Set_tbl*)&LA4_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RV_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_pa1_rul_fsm = //State's vectored into symbol: "u"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clr1_pa1_rul_fsm,(Reduce_tbl*)&S10rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S11std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Clr1_pa1_rul_fsm S11st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {109,(State*)&S12_Clr1_pa1_rul_fsm} // shift sym: raw_e
+ }// end of shift table
+};
+yacco2::State S11_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RY"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S12rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clr1_pa1_rul_fsm S12rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs4_RX_}
+ }// end of reduce table
+};
+yacco2::State S12_Clr1_pa1_rul_fsm = //State's vectored into symbol: "e"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S13std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S13std_Clr1_pa1_rul_fsm S13st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S14_Clr1_pa1_rul_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S13_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RZ"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S14rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Clr1_pa1_rul_fsm S14rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs5_RX_}
+ }// end of reduce table
+};
+yacco2::State S14_Clr1_pa1_rul_fsm = //State's vectored into symbol: "d"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S15rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clr1_pa1_rul_fsm S15rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs6_RX_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RT"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S16std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Clr1_pa1_rul_fsm S16st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S17_Clr1_pa1_rul_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+struct S16rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_pa1_rul_fsm S16rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs2_RY_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RX"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Clr1_pa1_rul_fsm,(Reduce_tbl*)&S16rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S17rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_pa1_rul_fsm S17rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RT_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_pa1_rul_fsm = //State's vectored into symbol: "a"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S18std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S18std_Clr1_pa1_rul_fsm S18st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S19_Clr1_pa1_rul_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S18_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RY"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S19rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clr1_pa1_rul_fsm S19rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_RX_}
+ }// end of reduce table
+};
+yacco2::State S19_Clr1_pa1_rul_fsm = //State's vectored into symbol: "d"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S20std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S20std_Clr1_pa1_rul_fsm S20st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S21_Clr1_pa1_rul_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S20_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RZ"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S21rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clr1_pa1_rul_fsm S21rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs2_RX_}
+ }// end of reduce table
+};
+yacco2::State S21_Clr1_pa1_rul_fsm = //State's vectored into symbol: "c"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S22rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clr1_pa1_rul_fsm S22rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs3_RX_}
+ }// end of reduce table
+};
+yacco2::State S22_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RT"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clr1_pa1_rul_fsm,0,0,0};
+struct S23std_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S23std_Clr1_pa1_rul_fsm S23st_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S24_Clr1_pa1_rul_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S23_Clr1_pa1_rul_fsm = //State's vectored into symbol: "RX"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Clr1_pa1_rul_fsm,0,0,0,0};
+struct S24rtd_Clr1_pa1_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clr1_pa1_rul_fsm S24rt_Clr1_pa1_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_pa1_rul_fsm,Clr1_pa1_rul_fsm::rhs1_Rlr1_pa1_}
+ }// end of reduce table
+};
+yacco2::State S24_Clr1_pa1_rul_fsm = //State's vectored into symbol: "eog"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clr1_pa1_rul_fsm,0,0,0};
diff --git a/web/yacco2/qa/lr1_pa2.cpp b/web/yacco2/qa/lr1_pa2.cpp
new file mode 100644
index 0000000000..3516d44917
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2.cpp
@@ -0,0 +1,75 @@
+/*
+ File: lr1_pa2.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clr1_pa2_rul_fsm::
+ Clr1_pa2_rul_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_pa2.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:14 2014 "
+ ,S1_Clr1_pa2_rul_fsm){
+
+ }
+
+Clr1_pa2_rul_fsm::~Clr1_pa2_rul_fsm(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_pa2_rul_fsm::failed(){
+ return false;
+ }
+ void Clr1_pa2_rul_fsm::op(){
+}
+int Clr1_pa2_rul_fsm::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,2 // subrule 6 for rule 3
+ ,3 // subrule 7 for rule 4
+};
+Rlr1_pa2::Rlr1_pa2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_pa2",0,Clr1_pa2_rul_fsm::R_Rlr1_pa2_,P,false,false){
+}
+
+RX::RX(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RX",0,Clr1_pa2_rul_fsm::R_RX_,P,false,false){
+}
+
+RY::RY(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RY",0,Clr1_pa2_rul_fsm::R_RY_,P,false,false){
+}
+
+RZ::RZ(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RZ",0,Clr1_pa2_rul_fsm::R_RZ_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_pa2.fsc b/web/yacco2/qa/lr1_pa2.fsc
new file mode 100644
index 0000000000..6c53c66b15
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2.fsc
@@ -0,0 +1,21 @@
+/*
+ File: lr1_pa2.fsc
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+transitive n
+grammar-name "lr1_pa2"
+name-space "NS_lr1_pa2"
+thread-name "Clr1_pa2_rul_fsm"
+monolithic y
+file-name "lr1_pa2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 2
+ raw_a
+ raw_b
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lr1_pa2.h b/web/yacco2/qa/lr1_pa2.h
new file mode 100644
index 0000000000..4354cabcd5
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2.h
@@ -0,0 +1,76 @@
+/*
+ File: lr1_pa2.h
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#ifndef __lr1_pa2_h__
+#define __lr1_pa2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_pa2_rul_fsm;
+namespace NS_lr1_pa2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clr1_pa2_rul_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_pa2_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_pa2_ = 1
+ ,R_RX_ = 570//start_of_rule_list + 2
+ ,rhs1_RX_ = 2
+ ,rhs2_RX_ = 3
+ ,rhs3_RX_ = 4
+ ,rhs4_RX_ = 5
+ ,R_RY_ = 571//start_of_rule_list + 4
+ ,rhs1_RY_ = 6
+ ,R_RZ_ = 572//start_of_rule_list + 6
+ ,rhs1_RZ_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 17
+ Clr1_pa2_rul_fsm();
+ ~Clr1_pa2_rul_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rlr1_pa2;
+struct RX;
+struct RY;
+struct RZ;
+struct Rlr1_pa2:public yacco2::CAbs_lr1_sym {
+ Rlr1_pa2(yacco2::Parser* P);
+ public:
+};
+
+struct RX:public yacco2::CAbs_lr1_sym {
+ RX(yacco2::Parser* P);
+ public:
+};
+
+struct RY:public yacco2::CAbs_lr1_sym {
+ RY(yacco2::Parser* P);
+ public:
+};
+
+struct RZ:public yacco2::CAbs_lr1_sym {
+ RZ(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_pa2.lex b/web/yacco2/qa/lr1_pa2.lex
new file mode 100644
index 0000000000..b13131723b
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2.lex
@@ -0,0 +1,43 @@
+/*
+$echo FILE: LR1_pa2.lex
+$echo A LR1 GRAMMAR FROM
+$echo ACTA INFORMATICA 7 249-268(1977)
+$echo A PRACTICAL GENERAL METHOD FOR CONSTRUCTING LR(K) PARSERS
+$echo BY DAVID PAGER
+$echo P. 259 GRAMMAR G3
+$echo Okay
+*/
+/@
+@** |LR1_pa2| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ ACTA INFORMATICA 7 249-268(1977)
+ A PRACTICAL GENERAL METHOD FOR CONSTRUCTING LR(K) PARSERS
+ BY DAVID PAGER
+ P. 259 GRAMMAR G3
+@/
+fsm(fsm-id "lr1_pa2.lex",fsm-filename lr1_pa2,fsm-namespace NS_lr1_pa2
+ ,fsm-class Clr1_pa2_rul_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_pa2(){
+ -> RX eog
+ }
+
+ RX(){
+ -> a RY d
+ -> a RZ c
+ -> b RY e
+ -> b RZ d
+ }
+
+ RY(){
+ -> t u v
+ }
+
+ RZ(){
+ -> t u w
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_pa2.pdf b/web/yacco2/qa/lr1_pa2.pdf
new file mode 100644
index 0000000000..99966cbe21
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_pa2_idx.pdf b/web/yacco2/qa/lr1_pa2_idx.pdf
new file mode 100644
index 0000000000..f3133a02e5
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_pa2sym.cpp b/web/yacco2/qa/lr1_pa2sym.cpp
new file mode 100644
index 0000000000..28f28c46ef
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: lr1_pa2sym.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_pa2_rul_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_pa2_:{
+ Rlr1_pa2* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_pa2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_pa2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_RX_:{
+ RX* sym;
+ if(re->rule_ == 0){
+ sym = new RX(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RX*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RY_:{
+ RY* sym;
+ if(re->rule_ == 0){
+ sym = new RY(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RY*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RZ_:{
+ RZ* sym;
+ if(re->rule_ == 0){
+ sym = new RZ(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RZ*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_pa2tbl.cpp b/web/yacco2/qa/lr1_pa2tbl.cpp
new file mode 100644
index 0000000000..d248fa29f5
--- /dev/null
+++ b/web/yacco2/qa/lr1_pa2tbl.cpp
@@ -0,0 +1,298 @@
+/*
+ File: lr1_pa2tbl.cpp
+ Date and Time: Mon Oct 13 18:18:14 2014
+*/
+#include "lr1_pa2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_pa2;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Clr1_pa2_rul_fsm[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Clr1_pa2_rul_fsm[] ={
+1
+,0,4
+};
+// raw_d
+// raw_e
+yacco2::UCHAR LA3_Clr1_pa2_rul_fsm[] ={
+1
+,13,48
+};
+// raw_c
+// raw_d
+yacco2::UCHAR LA4_Clr1_pa2_rul_fsm[] ={
+1
+,13,24
+};
+extern yacco2::State S1_Clr1_pa2_rul_fsm;
+extern yacco2::State S2_Clr1_pa2_rul_fsm;
+extern yacco2::State S3_Clr1_pa2_rul_fsm;
+extern yacco2::State S4_Clr1_pa2_rul_fsm;
+extern yacco2::State S5_Clr1_pa2_rul_fsm;
+extern yacco2::State S6_Clr1_pa2_rul_fsm;
+extern yacco2::State S7_Clr1_pa2_rul_fsm;
+extern yacco2::State S8_Clr1_pa2_rul_fsm;
+extern yacco2::State S9_Clr1_pa2_rul_fsm;
+extern yacco2::State S10_Clr1_pa2_rul_fsm;
+extern yacco2::State S11_Clr1_pa2_rul_fsm;
+extern yacco2::State S12_Clr1_pa2_rul_fsm;
+extern yacco2::State S13_Clr1_pa2_rul_fsm;
+extern yacco2::State S14_Clr1_pa2_rul_fsm;
+extern yacco2::State S15_Clr1_pa2_rul_fsm;
+extern yacco2::State S16_Clr1_pa2_rul_fsm;
+extern yacco2::State S17_Clr1_pa2_rul_fsm;
+struct S1std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Clr1_pa2_rul_fsm S1st_Clr1_pa2_rul_fsm = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_pa2_rul_fsm} // shift sym: raw_a
+ ,{106,(State*)&S7_Clr1_pa2_rul_fsm} // shift sym: raw_b
+ ,{569,(State*)&S1_Clr1_pa2_rul_fsm} // accept sym: Rlr1_pa2
+ ,{570,(State*)&S12_Clr1_pa2_rul_fsm} // shift sym: RX
+ }// end of shift table
+};
+yacco2::State S1_Clr1_pa2_rul_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S2std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clr1_pa2_rul_fsm S2st_Clr1_pa2_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {124,(State*)&S14_Clr1_pa2_rul_fsm} // shift sym: raw_t
+ ,{571,(State*)&S3_Clr1_pa2_rul_fsm} // shift sym: RY
+ ,{572,(State*)&S5_Clr1_pa2_rul_fsm} // shift sym: RZ
+ }// end of shift table
+};
+yacco2::State S2_Clr1_pa2_rul_fsm = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S3std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_pa2_rul_fsm S3st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S4_Clr1_pa2_rul_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S3_Clr1_pa2_rul_fsm = //State's vectored into symbol: "RY"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S4rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_pa2_rul_fsm S4rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs1_RX_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_pa2_rul_fsm = //State's vectored into symbol: "d"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S5std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clr1_pa2_rul_fsm S5st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S6_Clr1_pa2_rul_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S5_Clr1_pa2_rul_fsm = //State's vectored into symbol: "RZ"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S6rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_pa2_rul_fsm S6rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs2_RX_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_pa2_rul_fsm = //State's vectored into symbol: "c"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S7std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Clr1_pa2_rul_fsm S7st_Clr1_pa2_rul_fsm = {
+ 3
+ ,
+ {// start of table
+ {124,(State*)&S14_Clr1_pa2_rul_fsm} // shift sym: raw_t
+ ,{571,(State*)&S8_Clr1_pa2_rul_fsm} // shift sym: RY
+ ,{572,(State*)&S10_Clr1_pa2_rul_fsm} // shift sym: RZ
+ }// end of shift table
+};
+yacco2::State S7_Clr1_pa2_rul_fsm = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S8std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S8std_Clr1_pa2_rul_fsm S8st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {109,(State*)&S9_Clr1_pa2_rul_fsm} // shift sym: raw_e
+ }// end of shift table
+};
+yacco2::State S8_Clr1_pa2_rul_fsm = //State's vectored into symbol: "RY"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S9rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clr1_pa2_rul_fsm S9rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs3_RX_}
+ }// end of reduce table
+};
+yacco2::State S9_Clr1_pa2_rul_fsm = //State's vectored into symbol: "e"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S10std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S10std_Clr1_pa2_rul_fsm S10st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S11_Clr1_pa2_rul_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S10_Clr1_pa2_rul_fsm = //State's vectored into symbol: "RZ"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S11rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clr1_pa2_rul_fsm S11rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs4_RX_}
+ }// end of reduce table
+};
+yacco2::State S11_Clr1_pa2_rul_fsm = //State's vectored into symbol: "d"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S12std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clr1_pa2_rul_fsm S12st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Clr1_pa2_rul_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Clr1_pa2_rul_fsm = //State's vectored into symbol: "RX"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S13rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_pa2_rul_fsm S13rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs1_Rlr1_pa2_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_pa2_rul_fsm = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S14std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Clr1_pa2_rul_fsm S14st_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {125,(State*)&S15_Clr1_pa2_rul_fsm} // shift sym: raw_u
+ }// end of shift table
+};
+yacco2::State S14_Clr1_pa2_rul_fsm = //State's vectored into symbol: "t"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S15std_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Clr1_pa2_rul_fsm S15st_Clr1_pa2_rul_fsm = {
+ 2
+ ,
+ {// start of table
+ {126,(State*)&S16_Clr1_pa2_rul_fsm} // shift sym: raw_v
+ ,{127,(State*)&S17_Clr1_pa2_rul_fsm} // shift sym: raw_w
+ }// end of shift table
+};
+yacco2::State S15_Clr1_pa2_rul_fsm = //State's vectored into symbol: "u"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Clr1_pa2_rul_fsm,0,0,0,0};
+struct S16rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_pa2_rul_fsm S16rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs1_RY_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_pa2_rul_fsm = //State's vectored into symbol: "v"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clr1_pa2_rul_fsm,0,0,0};
+struct S17rtd_Clr1_pa2_rul_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_pa2_rul_fsm S17rt_Clr1_pa2_rul_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_pa2_rul_fsm,Clr1_pa2_rul_fsm::rhs1_RZ_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_pa2_rul_fsm = //State's vectored into symbol: "w"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_pa2_rul_fsm,0,0,0};
diff --git a/web/yacco2/qa/lr1_sp2.cpp b/web/yacco2/qa/lr1_sp2.cpp
new file mode 100644
index 0000000000..31f692ca18
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2.cpp
@@ -0,0 +1,133 @@
+/*
+ File: lr1_sp2.cpp
+ Date and Time: Mon Oct 13 18:18:12 2014
+*/
+#include "lr1_sp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 10;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+}
+ Clr1_sp2_fsm::
+ Clr1_sp2_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_sp2.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:12 2014 "
+ ,S1_Clr1_sp2_fsm){
+
+ }
+
+Clr1_sp2_fsm::~Clr1_sp2_fsm(){
+
+ for(int x = 0;x < 10;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_sp2_fsm::failed(){
+ return false;
+ }
+ void Clr1_sp2_fsm::op(){
+}
+int Clr1_sp2_fsm::rhs_to_rules_mapping_[30] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,1 // subrule 4 for rule 2
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,1 // subrule 7 for rule 2
+ ,1 // subrule 8 for rule 2
+ ,1 // subrule 9 for rule 2
+ ,1 // subrule 10 for rule 2
+ ,1 // subrule 11 for rule 2
+ ,1 // subrule 12 for rule 2
+ ,1 // subrule 13 for rule 2
+ ,1 // subrule 14 for rule 2
+ ,1 // subrule 15 for rule 2
+ ,1 // subrule 16 for rule 2
+ ,1 // subrule 17 for rule 2
+ ,2 // subrule 18 for rule 3
+ ,2 // subrule 19 for rule 3
+ ,3 // subrule 20 for rule 4
+ ,3 // subrule 21 for rule 4
+ ,4 // subrule 22 for rule 5
+ ,4 // subrule 23 for rule 5
+ ,5 // subrule 24 for rule 6
+ ,5 // subrule 25 for rule 6
+ ,6 // subrule 26 for rule 7
+ ,7 // subrule 27 for rule 8
+ ,8 // subrule 28 for rule 9
+ ,9 // subrule 29 for rule 10
+};
+Rlr1_sp2::Rlr1_sp2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_sp2",0,Clr1_sp2_fsm::R_Rlr1_sp2_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Clr1_sp2_fsm::R_RS_,P,false,false){
+}
+
+RE::RE(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RE",0,Clr1_sp2_fsm::R_RE_,P,false,false){
+}
+
+RF::RF(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RF",0,Clr1_sp2_fsm::R_RF_,P,false,false){
+}
+
+RG::RG(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RG",0,Clr1_sp2_fsm::R_RG_,P,false,false){
+}
+
+RH::RH(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RH",0,Clr1_sp2_fsm::R_RH_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_sp2_fsm::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_sp2_fsm::R_RB_,P,false,false){
+}
+
+RC::RC(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RC",0,Clr1_sp2_fsm::R_RC_,P,false,false){
+}
+
+RD::RD(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RD",0,Clr1_sp2_fsm::R_RD_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_sp2.fsc b/web/yacco2/qa/lr1_sp2.fsc
new file mode 100644
index 0000000000..30e9a767aa
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2.fsc
@@ -0,0 +1,23 @@
+/*
+ File: lr1_sp2.fsc
+ Date and Time: Mon Oct 13 18:18:12 2014
+*/
+transitive n
+grammar-name "lr1_sp2"
+name-space "NS_lr1_sp2"
+thread-name "Clr1_sp2_fsm"
+monolithic y
+file-name "lr1_sp2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ raw_t
+ raw_u
+ raw_v
+ raw_w
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lr1_sp2.h b/web/yacco2/qa/lr1_sp2.h
new file mode 100644
index 0000000000..5ec8575f34
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2.h
@@ -0,0 +1,140 @@
+/*
+ File: lr1_sp2.h
+ Date and Time: Mon Oct 13 18:18:12 2014
+*/
+#ifndef __lr1_sp2_h__
+#define __lr1_sp2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_sp2_fsm;
+namespace NS_lr1_sp2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[10];
+};
+class Clr1_sp2_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_sp2_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_sp2_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,rhs3_RS_ = 4
+ ,rhs4_RS_ = 5
+ ,rhs5_RS_ = 6
+ ,rhs6_RS_ = 7
+ ,rhs7_RS_ = 8
+ ,rhs8_RS_ = 9
+ ,rhs9_RS_ = 10
+ ,rhs10_RS_ = 11
+ ,rhs11_RS_ = 12
+ ,rhs12_RS_ = 13
+ ,rhs13_RS_ = 14
+ ,rhs14_RS_ = 15
+ ,rhs15_RS_ = 16
+ ,rhs16_RS_ = 17
+ ,R_RE_ = 571//start_of_rule_list + 4
+ ,rhs1_RE_ = 18
+ ,rhs2_RE_ = 19
+ ,R_RF_ = 572//start_of_rule_list + 6
+ ,rhs1_RF_ = 20
+ ,rhs2_RF_ = 21
+ ,R_RG_ = 573//start_of_rule_list + 8
+ ,rhs1_RG_ = 22
+ ,rhs2_RG_ = 23
+ ,R_RH_ = 574//start_of_rule_list + 10
+ ,rhs1_RH_ = 24
+ ,rhs2_RH_ = 25
+ ,R_RA_ = 575//start_of_rule_list + 12
+ ,rhs1_RA_ = 26
+ ,R_RB_ = 576//start_of_rule_list + 14
+ ,rhs1_RB_ = 27
+ ,R_RC_ = 577//start_of_rule_list + 16
+ ,rhs1_RC_ = 28
+ ,R_RD_ = 578//start_of_rule_list + 18
+ ,rhs1_RD_ = 29
+ };
+ //no of la sets = 6
+ //no of states = 83
+ Clr1_sp2_fsm();
+ ~Clr1_sp2_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[30];
+ };
+struct Rlr1_sp2;
+struct RS;
+struct RE;
+struct RF;
+struct RG;
+struct RH;
+struct RA;
+struct RB;
+struct RC;
+struct RD;
+struct Rlr1_sp2:public yacco2::CAbs_lr1_sym {
+ Rlr1_sp2(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RE:public yacco2::CAbs_lr1_sym {
+ RE(yacco2::Parser* P);
+ public:
+};
+
+struct RF:public yacco2::CAbs_lr1_sym {
+ RF(yacco2::Parser* P);
+ public:
+};
+
+struct RG:public yacco2::CAbs_lr1_sym {
+ RG(yacco2::Parser* P);
+ public:
+};
+
+struct RH:public yacco2::CAbs_lr1_sym {
+ RH(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+struct RC:public yacco2::CAbs_lr1_sym {
+ RC(yacco2::Parser* P);
+ public:
+};
+
+struct RD:public yacco2::CAbs_lr1_sym {
+ RD(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_sp2.lex b/web/yacco2/qa/lr1_sp2.lex
new file mode 100644
index 0000000000..1e158949a7
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2.lex
@@ -0,0 +1,78 @@
+/*
+$echo FILE: LR1_SP2.lex
+$echo A LR1 GRAMMAR FROM
+$echo DAVID SPECTOR
+$echo SIGPLAN VOL 23 DEC/88
+$echo Okay
+*/
+/@
+@** |LR1_SP2| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+@/
+fsm (fsm-id "lr1_sp2.lex",fsm-filename lr1_sp2,fsm-namespace NS_lr1_sp2
+ ,fsm-class Clr1_sp2_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_sp2(){
+ -> RS eog
+ }
+
+ RS(){
+ -> t RE a
+ -> t RF b
+ -> t RG c
+ -> t RH d
+ -> u RE b
+ -> u RF c
+ -> u RG d
+ -> u RH a
+ -> v RE c
+ -> v RF d
+ -> v RG a
+ -> v RH b
+ -> w RE d
+ -> w RF a
+ -> w RG b
+ -> w RH c
+ }
+
+ RE(){
+ -> x RA
+ -> y RD
+ }
+
+ RF(){
+ -> x RB
+ -> y RA
+ }
+
+ RG(){
+ -> x RC
+ -> y RB
+ }
+
+ RH(){
+ -> x RD
+ -> y RC
+ }
+ RA(){
+ -> z
+ }
+
+ RB(){
+ -> z
+ }
+
+ RC(){
+ -> z
+ }
+
+ RD(){
+ -> z
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_sp2.pdf b/web/yacco2/qa/lr1_sp2.pdf
new file mode 100644
index 0000000000..c0c13c9ee0
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp2_idx.pdf b/web/yacco2/qa/lr1_sp2_idx.pdf
new file mode 100644
index 0000000000..f02f81bdc2
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp2sym.cpp b/web/yacco2/qa/lr1_sp2sym.cpp
new file mode 100644
index 0000000000..7dca31325d
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2sym.cpp
@@ -0,0 +1,433 @@
+/*
+ File: lr1_sp2sym.cpp
+ Date and Time: Mon Oct 13 18:18:12 2014
+*/
+#include "lr1_sp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_sp2_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_sp2_:{
+ Rlr1_sp2* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_sp2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_sp2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs4_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs5_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs6_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs7_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs8_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs9_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs10_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs11_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs12_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs13_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs14_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs15_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs16_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RF_:{
+ RF* sym;
+ if(re->rule_ == 0){
+ sym = new RF(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RF*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RF_:{
+ RF* sym;
+ if(re->rule_ == 0){
+ sym = new RF(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RF*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RG_:{
+ RG* sym;
+ if(re->rule_ == 0){
+ sym = new RG(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RG*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RG_:{
+ RG* sym;
+ if(re->rule_ == 0){
+ sym = new RG(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RG*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RH_:{
+ RH* sym;
+ if(re->rule_ == 0){
+ sym = new RH(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RH*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RH_:{
+ RH* sym;
+ if(re->rule_ == 0){
+ sym = new RH(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RH*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RC_:{
+ RC* sym;
+ if(re->rule_ == 0){
+ sym = new RC(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RC*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_sp2tbl.cpp b/web/yacco2/qa/lr1_sp2tbl.cpp
new file mode 100644
index 0000000000..3cc36e45bf
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp2tbl.cpp
@@ -0,0 +1,1357 @@
+/*
+ File: lr1_sp2tbl.cpp
+ Date and Time: Mon Oct 13 18:18:12 2014
+*/
+#include "lr1_sp2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp2;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Clr1_sp2_fsm[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Clr1_sp2_fsm[] ={
+1
+,0,4
+};
+// raw_a
+yacco2::UCHAR LA3_Clr1_sp2_fsm[] ={
+1
+,13,2
+};
+// raw_b
+yacco2::UCHAR LA4_Clr1_sp2_fsm[] ={
+1
+,13,4
+};
+// raw_c
+yacco2::UCHAR LA5_Clr1_sp2_fsm[] ={
+1
+,13,8
+};
+// raw_d
+yacco2::UCHAR LA6_Clr1_sp2_fsm[] ={
+1
+,13,16
+};
+extern yacco2::State S1_Clr1_sp2_fsm;
+extern yacco2::State S2_Clr1_sp2_fsm;
+extern yacco2::State S3_Clr1_sp2_fsm;
+extern yacco2::State S4_Clr1_sp2_fsm;
+extern yacco2::State S5_Clr1_sp2_fsm;
+extern yacco2::State S6_Clr1_sp2_fsm;
+extern yacco2::State S7_Clr1_sp2_fsm;
+extern yacco2::State S8_Clr1_sp2_fsm;
+extern yacco2::State S9_Clr1_sp2_fsm;
+extern yacco2::State S10_Clr1_sp2_fsm;
+extern yacco2::State S11_Clr1_sp2_fsm;
+extern yacco2::State S12_Clr1_sp2_fsm;
+extern yacco2::State S13_Clr1_sp2_fsm;
+extern yacco2::State S14_Clr1_sp2_fsm;
+extern yacco2::State S15_Clr1_sp2_fsm;
+extern yacco2::State S16_Clr1_sp2_fsm;
+extern yacco2::State S17_Clr1_sp2_fsm;
+extern yacco2::State S18_Clr1_sp2_fsm;
+extern yacco2::State S19_Clr1_sp2_fsm;
+extern yacco2::State S20_Clr1_sp2_fsm;
+extern yacco2::State S21_Clr1_sp2_fsm;
+extern yacco2::State S22_Clr1_sp2_fsm;
+extern yacco2::State S23_Clr1_sp2_fsm;
+extern yacco2::State S24_Clr1_sp2_fsm;
+extern yacco2::State S25_Clr1_sp2_fsm;
+extern yacco2::State S26_Clr1_sp2_fsm;
+extern yacco2::State S27_Clr1_sp2_fsm;
+extern yacco2::State S28_Clr1_sp2_fsm;
+extern yacco2::State S29_Clr1_sp2_fsm;
+extern yacco2::State S30_Clr1_sp2_fsm;
+extern yacco2::State S31_Clr1_sp2_fsm;
+extern yacco2::State S32_Clr1_sp2_fsm;
+extern yacco2::State S33_Clr1_sp2_fsm;
+extern yacco2::State S34_Clr1_sp2_fsm;
+extern yacco2::State S35_Clr1_sp2_fsm;
+extern yacco2::State S36_Clr1_sp2_fsm;
+extern yacco2::State S37_Clr1_sp2_fsm;
+extern yacco2::State S38_Clr1_sp2_fsm;
+extern yacco2::State S39_Clr1_sp2_fsm;
+extern yacco2::State S40_Clr1_sp2_fsm;
+extern yacco2::State S41_Clr1_sp2_fsm;
+extern yacco2::State S42_Clr1_sp2_fsm;
+extern yacco2::State S43_Clr1_sp2_fsm;
+extern yacco2::State S44_Clr1_sp2_fsm;
+extern yacco2::State S45_Clr1_sp2_fsm;
+extern yacco2::State S46_Clr1_sp2_fsm;
+extern yacco2::State S47_Clr1_sp2_fsm;
+extern yacco2::State S48_Clr1_sp2_fsm;
+extern yacco2::State S49_Clr1_sp2_fsm;
+extern yacco2::State S50_Clr1_sp2_fsm;
+extern yacco2::State S51_Clr1_sp2_fsm;
+extern yacco2::State S52_Clr1_sp2_fsm;
+extern yacco2::State S53_Clr1_sp2_fsm;
+extern yacco2::State S54_Clr1_sp2_fsm;
+extern yacco2::State S55_Clr1_sp2_fsm;
+extern yacco2::State S56_Clr1_sp2_fsm;
+extern yacco2::State S57_Clr1_sp2_fsm;
+extern yacco2::State S58_Clr1_sp2_fsm;
+extern yacco2::State S59_Clr1_sp2_fsm;
+extern yacco2::State S60_Clr1_sp2_fsm;
+extern yacco2::State S61_Clr1_sp2_fsm;
+extern yacco2::State S62_Clr1_sp2_fsm;
+extern yacco2::State S63_Clr1_sp2_fsm;
+extern yacco2::State S64_Clr1_sp2_fsm;
+extern yacco2::State S65_Clr1_sp2_fsm;
+extern yacco2::State S66_Clr1_sp2_fsm;
+extern yacco2::State S67_Clr1_sp2_fsm;
+extern yacco2::State S68_Clr1_sp2_fsm;
+extern yacco2::State S69_Clr1_sp2_fsm;
+extern yacco2::State S70_Clr1_sp2_fsm;
+extern yacco2::State S71_Clr1_sp2_fsm;
+extern yacco2::State S72_Clr1_sp2_fsm;
+extern yacco2::State S73_Clr1_sp2_fsm;
+extern yacco2::State S74_Clr1_sp2_fsm;
+extern yacco2::State S75_Clr1_sp2_fsm;
+extern yacco2::State S76_Clr1_sp2_fsm;
+extern yacco2::State S77_Clr1_sp2_fsm;
+extern yacco2::State S78_Clr1_sp2_fsm;
+extern yacco2::State S79_Clr1_sp2_fsm;
+extern yacco2::State S80_Clr1_sp2_fsm;
+extern yacco2::State S81_Clr1_sp2_fsm;
+extern yacco2::State S82_Clr1_sp2_fsm;
+extern yacco2::State S83_Clr1_sp2_fsm;
+struct S1std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S1std_Clr1_sp2_fsm S1st_Clr1_sp2_fsm = {
+ 6
+ ,
+ {// start of table
+ {124,(State*)&S2_Clr1_sp2_fsm} // shift sym: raw_t
+ ,{125,(State*)&S11_Clr1_sp2_fsm} // shift sym: raw_u
+ ,{126,(State*)&S20_Clr1_sp2_fsm} // shift sym: raw_v
+ ,{127,(State*)&S29_Clr1_sp2_fsm} // shift sym: raw_w
+ ,{569,(State*)&S1_Clr1_sp2_fsm} // accept sym: Rlr1_sp2
+ ,{570,(State*)&S38_Clr1_sp2_fsm} // shift sym: RS
+ }// end of shift table
+};
+yacco2::State S1_Clr1_sp2_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_sp2_fsm,0,0,0,0};
+struct S2std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S2std_Clr1_sp2_fsm S2st_Clr1_sp2_fsm = {
+ 6
+ ,
+ {// start of table
+ {128,(State*)&S40_Clr1_sp2_fsm} // shift sym: raw_x
+ ,{129,(State*)&S46_Clr1_sp2_fsm} // shift sym: raw_y
+ ,{571,(State*)&S3_Clr1_sp2_fsm} // shift sym: RE
+ ,{572,(State*)&S5_Clr1_sp2_fsm} // shift sym: RF
+ ,{573,(State*)&S7_Clr1_sp2_fsm} // shift sym: RG
+ ,{574,(State*)&S9_Clr1_sp2_fsm} // shift sym: RH
+ }// end of shift table
+};
+yacco2::State S2_Clr1_sp2_fsm = //State's vectored into symbol: "t"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_sp2_fsm,0,0,0,0};
+struct S3std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_sp2_fsm S3st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S4_Clr1_sp2_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S3_Clr1_sp2_fsm = //State's vectored into symbol: "RE"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_sp2_fsm,0,0,0,0};
+struct S4rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_sp2_fsm S4rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_sp2_fsm = //State's vectored into symbol: "a"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_sp2_fsm,0,0,0};
+struct S5std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clr1_sp2_fsm S5st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S6_Clr1_sp2_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S5_Clr1_sp2_fsm = //State's vectored into symbol: "RF"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_sp2_fsm,0,0,0,0};
+struct S6rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_sp2_fsm S6rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_sp2_fsm = //State's vectored into symbol: "b"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_sp2_fsm,0,0,0};
+struct S7std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Clr1_sp2_fsm S7st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S8_Clr1_sp2_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S7_Clr1_sp2_fsm = //State's vectored into symbol: "RG"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_sp2_fsm,0,0,0,0};
+struct S8rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clr1_sp2_fsm S8rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs3_RS_}
+ }// end of reduce table
+};
+yacco2::State S8_Clr1_sp2_fsm = //State's vectored into symbol: "c"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clr1_sp2_fsm,0,0,0};
+struct S9std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Clr1_sp2_fsm S9st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S10_Clr1_sp2_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S9_Clr1_sp2_fsm = //State's vectored into symbol: "RH"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_sp2_fsm,0,0,0,0};
+struct S10rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clr1_sp2_fsm S10rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs4_RS_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_sp2_fsm = //State's vectored into symbol: "d"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clr1_sp2_fsm,0,0,0};
+struct S11std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S11std_Clr1_sp2_fsm S11st_Clr1_sp2_fsm = {
+ 6
+ ,
+ {// start of table
+ {128,(State*)&S52_Clr1_sp2_fsm} // shift sym: raw_x
+ ,{129,(State*)&S57_Clr1_sp2_fsm} // shift sym: raw_y
+ ,{571,(State*)&S12_Clr1_sp2_fsm} // shift sym: RE
+ ,{572,(State*)&S14_Clr1_sp2_fsm} // shift sym: RF
+ ,{573,(State*)&S16_Clr1_sp2_fsm} // shift sym: RG
+ ,{574,(State*)&S18_Clr1_sp2_fsm} // shift sym: RH
+ }// end of shift table
+};
+yacco2::State S11_Clr1_sp2_fsm = //State's vectored into symbol: "u"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Clr1_sp2_fsm,0,0,0,0};
+struct S12std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clr1_sp2_fsm S12st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S13_Clr1_sp2_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S12_Clr1_sp2_fsm = //State's vectored into symbol: "RE"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_sp2_fsm,0,0,0,0};
+struct S13rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_sp2_fsm S13rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs5_RS_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_sp2_fsm = //State's vectored into symbol: "b"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_sp2_fsm,0,0,0};
+struct S14std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Clr1_sp2_fsm S14st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S15_Clr1_sp2_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S14_Clr1_sp2_fsm = //State's vectored into symbol: "RF"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Clr1_sp2_fsm,0,0,0,0};
+struct S15rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clr1_sp2_fsm S15rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs6_RS_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_sp2_fsm = //State's vectored into symbol: "c"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_sp2_fsm,0,0,0};
+struct S16std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Clr1_sp2_fsm S16st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S17_Clr1_sp2_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S16_Clr1_sp2_fsm = //State's vectored into symbol: "RG"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Clr1_sp2_fsm,0,0,0,0};
+struct S17rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_sp2_fsm S17rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs7_RS_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_sp2_fsm = //State's vectored into symbol: "d"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_sp2_fsm,0,0,0};
+struct S18std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S18std_Clr1_sp2_fsm S18st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S19_Clr1_sp2_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S18_Clr1_sp2_fsm = //State's vectored into symbol: "RH"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Clr1_sp2_fsm,0,0,0,0};
+struct S19rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clr1_sp2_fsm S19rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs8_RS_}
+ }// end of reduce table
+};
+yacco2::State S19_Clr1_sp2_fsm = //State's vectored into symbol: "a"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clr1_sp2_fsm,0,0,0};
+struct S20std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S20std_Clr1_sp2_fsm S20st_Clr1_sp2_fsm = {
+ 6
+ ,
+ {// start of table
+ {128,(State*)&S63_Clr1_sp2_fsm} // shift sym: raw_x
+ ,{129,(State*)&S68_Clr1_sp2_fsm} // shift sym: raw_y
+ ,{571,(State*)&S21_Clr1_sp2_fsm} // shift sym: RE
+ ,{572,(State*)&S23_Clr1_sp2_fsm} // shift sym: RF
+ ,{573,(State*)&S25_Clr1_sp2_fsm} // shift sym: RG
+ ,{574,(State*)&S27_Clr1_sp2_fsm} // shift sym: RH
+ }// end of shift table
+};
+yacco2::State S20_Clr1_sp2_fsm = //State's vectored into symbol: "v"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Clr1_sp2_fsm,0,0,0,0};
+struct S21std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S21std_Clr1_sp2_fsm S21st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S22_Clr1_sp2_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S21_Clr1_sp2_fsm = //State's vectored into symbol: "RE"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Clr1_sp2_fsm,0,0,0,0};
+struct S22rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clr1_sp2_fsm S22rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs9_RS_}
+ }// end of reduce table
+};
+yacco2::State S22_Clr1_sp2_fsm = //State's vectored into symbol: "c"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clr1_sp2_fsm,0,0,0};
+struct S23std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S23std_Clr1_sp2_fsm S23st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S24_Clr1_sp2_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S23_Clr1_sp2_fsm = //State's vectored into symbol: "RF"
+{23
+,0,0,0,0,(Shift_tbl*)&S23st_Clr1_sp2_fsm,0,0,0,0};
+struct S24rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clr1_sp2_fsm S24rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs10_RS_}
+ }// end of reduce table
+};
+yacco2::State S24_Clr1_sp2_fsm = //State's vectored into symbol: "d"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clr1_sp2_fsm,0,0,0};
+struct S25std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S25std_Clr1_sp2_fsm S25st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S26_Clr1_sp2_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S25_Clr1_sp2_fsm = //State's vectored into symbol: "RG"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Clr1_sp2_fsm,0,0,0,0};
+struct S26rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Clr1_sp2_fsm S26rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs11_RS_}
+ }// end of reduce table
+};
+yacco2::State S26_Clr1_sp2_fsm = //State's vectored into symbol: "a"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Clr1_sp2_fsm,0,0,0};
+struct S27std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S27std_Clr1_sp2_fsm S27st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S28_Clr1_sp2_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S27_Clr1_sp2_fsm = //State's vectored into symbol: "RH"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Clr1_sp2_fsm,0,0,0,0};
+struct S28rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Clr1_sp2_fsm S28rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs12_RS_}
+ }// end of reduce table
+};
+yacco2::State S28_Clr1_sp2_fsm = //State's vectored into symbol: "b"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clr1_sp2_fsm,0,0,0};
+struct S29std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S29std_Clr1_sp2_fsm S29st_Clr1_sp2_fsm = {
+ 6
+ ,
+ {// start of table
+ {128,(State*)&S74_Clr1_sp2_fsm} // shift sym: raw_x
+ ,{129,(State*)&S79_Clr1_sp2_fsm} // shift sym: raw_y
+ ,{571,(State*)&S30_Clr1_sp2_fsm} // shift sym: RE
+ ,{572,(State*)&S32_Clr1_sp2_fsm} // shift sym: RF
+ ,{573,(State*)&S34_Clr1_sp2_fsm} // shift sym: RG
+ ,{574,(State*)&S36_Clr1_sp2_fsm} // shift sym: RH
+ }// end of shift table
+};
+yacco2::State S29_Clr1_sp2_fsm = //State's vectored into symbol: "w"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Clr1_sp2_fsm,0,0,0,0};
+struct S30std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S30std_Clr1_sp2_fsm S30st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {108,(State*)&S31_Clr1_sp2_fsm} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S30_Clr1_sp2_fsm = //State's vectored into symbol: "RE"
+{30
+,0,0,0,0,(Shift_tbl*)&S30st_Clr1_sp2_fsm,0,0,0,0};
+struct S31rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S31rtd_Clr1_sp2_fsm S31rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs13_RS_}
+ }// end of reduce table
+};
+yacco2::State S31_Clr1_sp2_fsm = //State's vectored into symbol: "d"
+{31
+,0,0,0,0,0,(Reduce_tbl*)&S31rt_Clr1_sp2_fsm,0,0,0};
+struct S32std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S32std_Clr1_sp2_fsm S32st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S33_Clr1_sp2_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S32_Clr1_sp2_fsm = //State's vectored into symbol: "RF"
+{32
+,0,0,0,0,(Shift_tbl*)&S32st_Clr1_sp2_fsm,0,0,0,0};
+struct S33rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S33rtd_Clr1_sp2_fsm S33rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs14_RS_}
+ }// end of reduce table
+};
+yacco2::State S33_Clr1_sp2_fsm = //State's vectored into symbol: "a"
+{33
+,0,0,0,0,0,(Reduce_tbl*)&S33rt_Clr1_sp2_fsm,0,0,0};
+struct S34std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S34std_Clr1_sp2_fsm S34st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S35_Clr1_sp2_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S34_Clr1_sp2_fsm = //State's vectored into symbol: "RG"
+{34
+,0,0,0,0,(Shift_tbl*)&S34st_Clr1_sp2_fsm,0,0,0,0};
+struct S35rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S35rtd_Clr1_sp2_fsm S35rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs15_RS_}
+ }// end of reduce table
+};
+yacco2::State S35_Clr1_sp2_fsm = //State's vectored into symbol: "b"
+{35
+,0,0,0,0,0,(Reduce_tbl*)&S35rt_Clr1_sp2_fsm,0,0,0};
+struct S36std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S36std_Clr1_sp2_fsm S36st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S37_Clr1_sp2_fsm} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S36_Clr1_sp2_fsm = //State's vectored into symbol: "RH"
+{36
+,0,0,0,0,(Shift_tbl*)&S36st_Clr1_sp2_fsm,0,0,0,0};
+struct S37rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S37rtd_Clr1_sp2_fsm S37rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs16_RS_}
+ }// end of reduce table
+};
+yacco2::State S37_Clr1_sp2_fsm = //State's vectored into symbol: "c"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Clr1_sp2_fsm,0,0,0};
+struct S38std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S38std_Clr1_sp2_fsm S38st_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S39_Clr1_sp2_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S38_Clr1_sp2_fsm = //State's vectored into symbol: "RS"
+{38
+,0,0,0,0,(Shift_tbl*)&S38st_Clr1_sp2_fsm,0,0,0,0};
+struct S39rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Clr1_sp2_fsm S39rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_Rlr1_sp2_}
+ }// end of reduce table
+};
+yacco2::State S39_Clr1_sp2_fsm = //State's vectored into symbol: "eog"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Clr1_sp2_fsm,0,0,0};
+struct S40std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S40std_Clr1_sp2_fsm S40st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S41_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S42_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S43_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S44_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S45_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S40_Clr1_sp2_fsm = //State's vectored into symbol: "x"
+{40
+,0,0,0,0,(Shift_tbl*)&S40st_Clr1_sp2_fsm,0,0,0,0};
+struct S41rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[4];
+};
+S41rtd_Clr1_sp2_fsm S41rt_Clr1_sp2_fsm = {
+ 4
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RA_}
+ ,{(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RC_}
+ ,{(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S41_Clr1_sp2_fsm = //State's vectored into symbol: "z"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Clr1_sp2_fsm,0,0,0};
+struct S42rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S42rtd_Clr1_sp2_fsm S42rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S42_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{42
+,0,0,0,0,0,(Reduce_tbl*)&S42rt_Clr1_sp2_fsm,0,0,0};
+struct S43rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Clr1_sp2_fsm S43rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RF_}
+ }// end of reduce table
+};
+yacco2::State S43_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Clr1_sp2_fsm,0,0,0};
+struct S44rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S44rtd_Clr1_sp2_fsm S44rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RG_}
+ }// end of reduce table
+};
+yacco2::State S44_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{44
+,0,0,0,0,0,(Reduce_tbl*)&S44rt_Clr1_sp2_fsm,0,0,0};
+struct S45rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Clr1_sp2_fsm S45rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RH_}
+ }// end of reduce table
+};
+yacco2::State S45_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Clr1_sp2_fsm,0,0,0};
+struct S46std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S46std_Clr1_sp2_fsm S46st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S47_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S48_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S49_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S50_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S51_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S46_Clr1_sp2_fsm = //State's vectored into symbol: "y"
+{46
+,0,0,0,0,(Shift_tbl*)&S46st_Clr1_sp2_fsm,0,0,0,0};
+struct S47rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[4];
+};
+S47rtd_Clr1_sp2_fsm S47rt_Clr1_sp2_fsm = {
+ 4
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RA_}
+ ,{(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RC_}
+ ,{(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S47_Clr1_sp2_fsm = //State's vectored into symbol: "z"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Clr1_sp2_fsm,0,0,0};
+struct S48rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S48rtd_Clr1_sp2_fsm S48rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RF_}
+ }// end of reduce table
+};
+yacco2::State S48_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{48
+,0,0,0,0,0,(Reduce_tbl*)&S48rt_Clr1_sp2_fsm,0,0,0};
+struct S49rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Clr1_sp2_fsm S49rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RG_}
+ }// end of reduce table
+};
+yacco2::State S49_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Clr1_sp2_fsm,0,0,0};
+struct S50rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S50rtd_Clr1_sp2_fsm S50rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RH_}
+ }// end of reduce table
+};
+yacco2::State S50_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{50
+,0,0,0,0,0,(Reduce_tbl*)&S50rt_Clr1_sp2_fsm,0,0,0};
+struct S51rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S51rtd_Clr1_sp2_fsm S51rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S51_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{51
+,0,0,0,0,0,(Reduce_tbl*)&S51rt_Clr1_sp2_fsm,0,0,0};
+struct S52std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S52std_Clr1_sp2_fsm S52st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S47_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S53_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S54_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S55_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S56_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S52_Clr1_sp2_fsm = //State's vectored into symbol: "x"
+{52
+,0,0,0,0,(Shift_tbl*)&S52st_Clr1_sp2_fsm,0,0,0,0};
+struct S53rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S53rtd_Clr1_sp2_fsm S53rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S53_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{53
+,0,0,0,0,0,(Reduce_tbl*)&S53rt_Clr1_sp2_fsm,0,0,0};
+struct S54rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S54rtd_Clr1_sp2_fsm S54rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RF_}
+ }// end of reduce table
+};
+yacco2::State S54_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{54
+,0,0,0,0,0,(Reduce_tbl*)&S54rt_Clr1_sp2_fsm,0,0,0};
+struct S55rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S55rtd_Clr1_sp2_fsm S55rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RG_}
+ }// end of reduce table
+};
+yacco2::State S55_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{55
+,0,0,0,0,0,(Reduce_tbl*)&S55rt_Clr1_sp2_fsm,0,0,0};
+struct S56rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S56rtd_Clr1_sp2_fsm S56rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RH_}
+ }// end of reduce table
+};
+yacco2::State S56_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{56
+,0,0,0,0,0,(Reduce_tbl*)&S56rt_Clr1_sp2_fsm,0,0,0};
+struct S57std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S57std_Clr1_sp2_fsm S57st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S58_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S59_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S60_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S61_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S62_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S57_Clr1_sp2_fsm = //State's vectored into symbol: "y"
+{57
+,0,0,0,0,(Shift_tbl*)&S57st_Clr1_sp2_fsm,0,0,0,0};
+struct S58rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[4];
+};
+S58rtd_Clr1_sp2_fsm S58rt_Clr1_sp2_fsm = {
+ 4
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RA_}
+ ,{(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RC_}
+ ,{(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S58_Clr1_sp2_fsm = //State's vectored into symbol: "z"
+{58
+,0,0,0,0,0,(Reduce_tbl*)&S58rt_Clr1_sp2_fsm,0,0,0};
+struct S59rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S59rtd_Clr1_sp2_fsm S59rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RF_}
+ }// end of reduce table
+};
+yacco2::State S59_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{59
+,0,0,0,0,0,(Reduce_tbl*)&S59rt_Clr1_sp2_fsm,0,0,0};
+struct S60rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S60rtd_Clr1_sp2_fsm S60rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RG_}
+ }// end of reduce table
+};
+yacco2::State S60_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{60
+,0,0,0,0,0,(Reduce_tbl*)&S60rt_Clr1_sp2_fsm,0,0,0};
+struct S61rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S61rtd_Clr1_sp2_fsm S61rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RH_}
+ }// end of reduce table
+};
+yacco2::State S61_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{61
+,0,0,0,0,0,(Reduce_tbl*)&S61rt_Clr1_sp2_fsm,0,0,0};
+struct S62rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S62rtd_Clr1_sp2_fsm S62rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S62_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{62
+,0,0,0,0,0,(Reduce_tbl*)&S62rt_Clr1_sp2_fsm,0,0,0};
+struct S63std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S63std_Clr1_sp2_fsm S63st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S58_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S64_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S65_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S66_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S67_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S63_Clr1_sp2_fsm = //State's vectored into symbol: "x"
+{63
+,0,0,0,0,(Shift_tbl*)&S63st_Clr1_sp2_fsm,0,0,0,0};
+struct S64rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S64rtd_Clr1_sp2_fsm S64rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S64_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{64
+,0,0,0,0,0,(Reduce_tbl*)&S64rt_Clr1_sp2_fsm,0,0,0};
+struct S65rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S65rtd_Clr1_sp2_fsm S65rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RF_}
+ }// end of reduce table
+};
+yacco2::State S65_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{65
+,0,0,0,0,0,(Reduce_tbl*)&S65rt_Clr1_sp2_fsm,0,0,0};
+struct S66rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S66rtd_Clr1_sp2_fsm S66rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RG_}
+ }// end of reduce table
+};
+yacco2::State S66_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{66
+,0,0,0,0,0,(Reduce_tbl*)&S66rt_Clr1_sp2_fsm,0,0,0};
+struct S67rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S67rtd_Clr1_sp2_fsm S67rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RH_}
+ }// end of reduce table
+};
+yacco2::State S67_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{67
+,0,0,0,0,0,(Reduce_tbl*)&S67rt_Clr1_sp2_fsm,0,0,0};
+struct S68std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S68std_Clr1_sp2_fsm S68st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S69_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S70_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S71_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S72_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S73_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S68_Clr1_sp2_fsm = //State's vectored into symbol: "y"
+{68
+,0,0,0,0,(Shift_tbl*)&S68st_Clr1_sp2_fsm,0,0,0,0};
+struct S69rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[4];
+};
+S69rtd_Clr1_sp2_fsm S69rt_Clr1_sp2_fsm = {
+ 4
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RA_}
+ ,{(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RC_}
+ ,{(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S69_Clr1_sp2_fsm = //State's vectored into symbol: "z"
+{69
+,0,0,0,0,0,(Reduce_tbl*)&S69rt_Clr1_sp2_fsm,0,0,0};
+struct S70rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S70rtd_Clr1_sp2_fsm S70rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RF_}
+ }// end of reduce table
+};
+yacco2::State S70_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{70
+,0,0,0,0,0,(Reduce_tbl*)&S70rt_Clr1_sp2_fsm,0,0,0};
+struct S71rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S71rtd_Clr1_sp2_fsm S71rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RG_}
+ }// end of reduce table
+};
+yacco2::State S71_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{71
+,0,0,0,0,0,(Reduce_tbl*)&S71rt_Clr1_sp2_fsm,0,0,0};
+struct S72rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S72rtd_Clr1_sp2_fsm S72rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RH_}
+ }// end of reduce table
+};
+yacco2::State S72_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{72
+,0,0,0,0,0,(Reduce_tbl*)&S72rt_Clr1_sp2_fsm,0,0,0};
+struct S73rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S73rtd_Clr1_sp2_fsm S73rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S73_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{73
+,0,0,0,0,0,(Reduce_tbl*)&S73rt_Clr1_sp2_fsm,0,0,0};
+struct S74std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S74std_Clr1_sp2_fsm S74st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S69_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S75_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S76_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S77_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S78_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S74_Clr1_sp2_fsm = //State's vectored into symbol: "x"
+{74
+,0,0,0,0,(Shift_tbl*)&S74st_Clr1_sp2_fsm,0,0,0,0};
+struct S75rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S75rtd_Clr1_sp2_fsm S75rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S75_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{75
+,0,0,0,0,0,(Reduce_tbl*)&S75rt_Clr1_sp2_fsm,0,0,0};
+struct S76rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S76rtd_Clr1_sp2_fsm S76rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RF_}
+ }// end of reduce table
+};
+yacco2::State S76_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{76
+,0,0,0,0,0,(Reduce_tbl*)&S76rt_Clr1_sp2_fsm,0,0,0};
+struct S77rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S77rtd_Clr1_sp2_fsm S77rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RG_}
+ }// end of reduce table
+};
+yacco2::State S77_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{77
+,0,0,0,0,0,(Reduce_tbl*)&S77rt_Clr1_sp2_fsm,0,0,0};
+struct S78rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S78rtd_Clr1_sp2_fsm S78rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs1_RH_}
+ }// end of reduce table
+};
+yacco2::State S78_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{78
+,0,0,0,0,0,(Reduce_tbl*)&S78rt_Clr1_sp2_fsm,0,0,0};
+struct S79std_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S79std_Clr1_sp2_fsm S79st_Clr1_sp2_fsm = {
+ 5
+ ,
+ {// start of table
+ {130,(State*)&S41_Clr1_sp2_fsm} // shift sym: raw_z
+ ,{575,(State*)&S80_Clr1_sp2_fsm} // shift sym: RA
+ ,{576,(State*)&S81_Clr1_sp2_fsm} // shift sym: RB
+ ,{577,(State*)&S82_Clr1_sp2_fsm} // shift sym: RC
+ ,{578,(State*)&S83_Clr1_sp2_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S79_Clr1_sp2_fsm = //State's vectored into symbol: "y"
+{79
+,0,0,0,0,(Shift_tbl*)&S79st_Clr1_sp2_fsm,0,0,0,0};
+struct S80rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S80rtd_Clr1_sp2_fsm S80rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RF_}
+ }// end of reduce table
+};
+yacco2::State S80_Clr1_sp2_fsm = //State's vectored into symbol: "RA"
+{80
+,0,0,0,0,0,(Reduce_tbl*)&S80rt_Clr1_sp2_fsm,0,0,0};
+struct S81rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S81rtd_Clr1_sp2_fsm S81rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RG_}
+ }// end of reduce table
+};
+yacco2::State S81_Clr1_sp2_fsm = //State's vectored into symbol: "RB"
+{81
+,0,0,0,0,0,(Reduce_tbl*)&S81rt_Clr1_sp2_fsm,0,0,0};
+struct S82rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S82rtd_Clr1_sp2_fsm S82rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RH_}
+ }// end of reduce table
+};
+yacco2::State S82_Clr1_sp2_fsm = //State's vectored into symbol: "RC"
+{82
+,0,0,0,0,0,(Reduce_tbl*)&S82rt_Clr1_sp2_fsm,0,0,0};
+struct S83rtd_Clr1_sp2_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S83rtd_Clr1_sp2_fsm S83rt_Clr1_sp2_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_sp2_fsm,Clr1_sp2_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S83_Clr1_sp2_fsm = //State's vectored into symbol: "RD"
+{83
+,0,0,0,0,0,(Reduce_tbl*)&S83rt_Clr1_sp2_fsm,0,0,0};
diff --git a/web/yacco2/qa/lr1_sp3.cpp b/web/yacco2/qa/lr1_sp3.cpp
new file mode 100644
index 0000000000..2cc16fbce6
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3.cpp
@@ -0,0 +1,75 @@
+/*
+ File: lr1_sp3.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "lr1_sp3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp3;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Clr1_sp3::
+ Clr1_sp3()
+ :yacco2::CAbs_fsm
+ ("lr1_sp3.lex"
+ ,"1.0"
+ ,"27-jun-99"
+ ,true
+ ,"test out lr1 --- D Spector Vol 23 No 12 Dec/88"
+ ,"Mon Oct 13 18:18:13 2014 "
+ ,S1_Clr1_sp3){
+
+ }
+
+Clr1_sp3::~Clr1_sp3(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_sp3::failed(){
+ return false;
+ }
+ void Clr1_sp3::op(){
+}
+int Clr1_sp3::rhs_to_rules_mapping_[8] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+};
+Rlr1_sp3::Rlr1_sp3(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_sp3",0,Clr1_sp3::R_Rlr1_sp3_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Clr1_sp3::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_sp3::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_sp3::R_RB_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_sp3.fsc b/web/yacco2/qa/lr1_sp3.fsc
new file mode 100644
index 0000000000..f39f8c186d
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3.fsc
@@ -0,0 +1,20 @@
+/*
+ File: lr1_sp3.fsc
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+transitive n
+grammar-name "lr1_sp3"
+name-space "NS_lr1_sp3"
+thread-name "Clr1_sp3"
+monolithic y
+file-name "lr1_sp3.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1 --- D Spector Vol 23 No 12 Dec/88"
diff --git a/web/yacco2/qa/lr1_sp3.h b/web/yacco2/qa/lr1_sp3.h
new file mode 100644
index 0000000000..ae93e4ea3e
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3.h
@@ -0,0 +1,76 @@
+/*
+ File: lr1_sp3.h
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#ifndef __lr1_sp3_h__
+#define __lr1_sp3_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_sp3;
+namespace NS_lr1_sp3 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Clr1_sp3: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_sp3_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_sp3_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,R_RA_ = 571//start_of_rule_list + 4
+ ,rhs1_RA_ = 4
+ ,rhs2_RA_ = 5
+ ,R_RB_ = 572//start_of_rule_list + 6
+ ,rhs1_RB_ = 6
+ ,rhs2_RB_ = 7
+ };
+ //no of la sets = 4
+ //no of states = 17
+ Clr1_sp3();
+ ~Clr1_sp3();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[8];
+ };
+struct Rlr1_sp3;
+struct RS;
+struct RA;
+struct RB;
+struct Rlr1_sp3:public yacco2::CAbs_lr1_sym {
+ Rlr1_sp3(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_sp3.lex b/web/yacco2/qa/lr1_sp3.lex
new file mode 100644
index 0000000000..9a6902a1d6
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3.lex
@@ -0,0 +1,38 @@
+/*
+$echo FILE: LR1_SP3.lex
+$echo A LR1 GRAMMAR FROM
+$echo DAVID SPECTOR
+$echo SIGPLAN VOL 23 NO 12 DEC/88
+$echo Okay
+*/
+/@
+@** |lr1_sp3| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+@/
+fsm (fsm-id "lr1_sp3.lex",fsm-filename lr1_sp3,fsm-namespace NS_lr1_sp3
+ ,fsm-class Clr1_sp3,fsm-version "1.0",fsm-date "27-jun-99"
+ ,fsm-debug "true",fsm-comments "test out lr1 --- D Spector Vol 23 No 12 Dec/88")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+Rlr1_sp3 (){
+ -> RS eog
+ }
+
+ RS (){
+ -> RA b
+ -> RB c
+ }
+
+ RA (){
+ -> a RA c
+ -> a
+ }
+
+ RB (){
+ -> a RB b
+ -> a
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_sp3.pdf b/web/yacco2/qa/lr1_sp3.pdf
new file mode 100644
index 0000000000..a3afd7acac
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp3_idx.pdf b/web/yacco2/qa/lr1_sp3_idx.pdf
new file mode 100644
index 0000000000..e431525004
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp3sym.cpp b/web/yacco2/qa/lr1_sp3sym.cpp
new file mode 100644
index 0000000000..ae69870c2f
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3sym.cpp
@@ -0,0 +1,125 @@
+/*
+ File: lr1_sp3sym.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "lr1_sp3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp3;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_sp3::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_sp3_:{
+ Rlr1_sp3* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_sp3(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_sp3*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_sp3tbl.cpp b/web/yacco2/qa/lr1_sp3tbl.cpp
new file mode 100644
index 0000000000..884aef9368
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp3tbl.cpp
@@ -0,0 +1,320 @@
+/*
+ File: lr1_sp3tbl.cpp
+ Date and Time: Mon Oct 13 18:18:13 2014
+*/
+#include "lr1_sp3.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp3;// grammar's ns
+// first set terminals
+// raw_b
+yacco2::UCHAR LA1_Clr1_sp3[] ={
+1
+,13,4
+};
+// raw_c
+yacco2::UCHAR LA2_Clr1_sp3[] ={
+1
+,13,8
+};
+// LR1_eolr
+yacco2::UCHAR LA3_Clr1_sp3[] ={
+1
+,0,4
+};
+// LR1_eog
+yacco2::UCHAR LA4_Clr1_sp3[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Clr1_sp3;
+extern yacco2::State S2_Clr1_sp3;
+extern yacco2::State S3_Clr1_sp3;
+extern yacco2::State S4_Clr1_sp3;
+extern yacco2::State S5_Clr1_sp3;
+extern yacco2::State S6_Clr1_sp3;
+extern yacco2::State S7_Clr1_sp3;
+extern yacco2::State S8_Clr1_sp3;
+extern yacco2::State S9_Clr1_sp3;
+extern yacco2::State S10_Clr1_sp3;
+extern yacco2::State S11_Clr1_sp3;
+extern yacco2::State S12_Clr1_sp3;
+extern yacco2::State S13_Clr1_sp3;
+extern yacco2::State S14_Clr1_sp3;
+extern yacco2::State S15_Clr1_sp3;
+extern yacco2::State S16_Clr1_sp3;
+extern yacco2::State S17_Clr1_sp3;
+struct S1std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Clr1_sp3 S1st_Clr1_sp3 = {
+ 5
+ ,
+ {// start of table
+ {105,(State*)&S2_Clr1_sp3} // shift sym: raw_a
+ ,{569,(State*)&S1_Clr1_sp3} // accept sym: Rlr1_sp3
+ ,{570,(State*)&S7_Clr1_sp3} // shift sym: RS
+ ,{571,(State*)&S9_Clr1_sp3} // shift sym: RA
+ ,{572,(State*)&S11_Clr1_sp3} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S1_Clr1_sp3 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_sp3,0,0,0,0};
+struct S2std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S2std_Clr1_sp3 S2st_Clr1_sp3 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S13_Clr1_sp3} // shift sym: raw_a
+ ,{571,(State*)&S3_Clr1_sp3} // shift sym: RA
+ ,{572,(State*)&S5_Clr1_sp3} // shift sym: RB
+ }// end of shift table
+};
+struct S2rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S2rtd_Clr1_sp3 S2rt_Clr1_sp3 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp3,Clr1_sp3::rhs2_RA_}
+ ,{(Set_tbl*)&LA2_Clr1_sp3,Clr1_sp3::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S2_Clr1_sp3 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_sp3,(Reduce_tbl*)&S2rt_Clr1_sp3,0,0,0};
+struct S3std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_sp3 S3st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S4_Clr1_sp3} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S3_Clr1_sp3 = //State's vectored into symbol: "RA"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_sp3,0,0,0,0};
+struct S4rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_sp3 S4rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp3,Clr1_sp3::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_sp3 = //State's vectored into symbol: "c"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_sp3,0,0,0};
+struct S5std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S5std_Clr1_sp3 S5st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S6_Clr1_sp3} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S5_Clr1_sp3 = //State's vectored into symbol: "RB"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_sp3,0,0,0,0};
+struct S6rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Clr1_sp3 S6rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp3,Clr1_sp3::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S6_Clr1_sp3 = //State's vectored into symbol: "b"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Clr1_sp3,0,0,0};
+struct S7std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S7std_Clr1_sp3 S7st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S8_Clr1_sp3} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S7_Clr1_sp3 = //State's vectored into symbol: "RS"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_sp3,0,0,0,0};
+struct S8rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Clr1_sp3 S8rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_sp3,Clr1_sp3::rhs1_Rlr1_sp3_}
+ }// end of reduce table
+};
+yacco2::State S8_Clr1_sp3 = //State's vectored into symbol: "eog"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clr1_sp3,0,0,0};
+struct S9std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Clr1_sp3 S9st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S10_Clr1_sp3} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S9_Clr1_sp3 = //State's vectored into symbol: "RA"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_sp3,0,0,0,0};
+struct S10rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clr1_sp3 S10rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp3,Clr1_sp3::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_sp3 = //State's vectored into symbol: "b"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clr1_sp3,0,0,0};
+struct S11std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S11std_Clr1_sp3 S11st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S12_Clr1_sp3} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S11_Clr1_sp3 = //State's vectored into symbol: "RB"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Clr1_sp3,0,0,0,0};
+struct S12rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Clr1_sp3 S12rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp3,Clr1_sp3::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S12_Clr1_sp3 = //State's vectored into symbol: "c"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Clr1_sp3,0,0,0};
+struct S13std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S13std_Clr1_sp3 S13st_Clr1_sp3 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S13_Clr1_sp3} // shift sym: raw_a
+ ,{571,(State*)&S14_Clr1_sp3} // shift sym: RA
+ ,{572,(State*)&S16_Clr1_sp3} // shift sym: RB
+ }// end of shift table
+};
+struct S13rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S13rtd_Clr1_sp3 S13rt_Clr1_sp3 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp3,Clr1_sp3::rhs2_RA_}
+ ,{(Set_tbl*)&LA1_Clr1_sp3,Clr1_sp3::rhs2_RB_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_sp3 = //State's vectored into symbol: "a"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_Clr1_sp3,(Reduce_tbl*)&S13rt_Clr1_sp3,0,0,0};
+struct S14std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S14std_Clr1_sp3 S14st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {107,(State*)&S15_Clr1_sp3} // shift sym: raw_c
+ }// end of shift table
+};
+yacco2::State S14_Clr1_sp3 = //State's vectored into symbol: "RA"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Clr1_sp3,0,0,0,0};
+struct S15rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S15rtd_Clr1_sp3 S15rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp3,Clr1_sp3::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_sp3 = //State's vectored into symbol: "c"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_sp3,0,0,0};
+struct S16std_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Clr1_sp3 S16st_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S17_Clr1_sp3} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S16_Clr1_sp3 = //State's vectored into symbol: "RB"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Clr1_sp3,0,0,0,0};
+struct S17rtd_Clr1_sp3{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_sp3 S17rt_Clr1_sp3 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp3,Clr1_sp3::rhs1_RB_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_sp3 = //State's vectored into symbol: "b"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_sp3,0,0,0};
diff --git a/web/yacco2/qa/lr1_sp4.lex b/web/yacco2/qa/lr1_sp4.lex
new file mode 100644
index 0000000000..3eebc14660
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp4.lex
@@ -0,0 +1,41 @@
+/*
+$echo FILE: LR1_sp4.lex
+$echo A LR1 GRAMMAR FROM
+$echo FULL LR(1) PARSER GENERATOR
+$echo BY DAVID SPECTOR
+$echo SIGPLAN VOL 16 NO 8 AUG 1981
+$echo G1 P. 61
+$echo Okay
+*/
+/@
+@** |LR1_sp4| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+@/
+fsm (fsm-id "lr1_sp4.lex",fsm-filename LR1_sp4,fsm-namespace NS_LR1_sp4
+ ,fsm-class Clr1_sp4_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_sp4(){
+ -> RS eog
+ }
+
+ RS(){
+ -> a RA c
+ -> a RB d
+ -> b RA d
+ -> b RB c
+ }
+
+ RA(){
+ -> f
+ }
+
+ RB(){
+ -> f
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_sp4.pdf b/web/yacco2/qa/lr1_sp4.pdf
new file mode 100644
index 0000000000..2460189512
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp4.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp4_idx.pdf b/web/yacco2/qa/lr1_sp4_idx.pdf
new file mode 100644
index 0000000000..81c5553371
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp4_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp5.lex b/web/yacco2/qa/lr1_sp5.lex
new file mode 100644
index 0000000000..c0f870d554
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp5.lex
@@ -0,0 +1,53 @@
+/*
+$echo FILE:{ LR1_sp5.lex
+$echo A LR1 GRAMMAR FROM
+$echo FULL LR(1) PARSER GENERATION
+$echo BY DAVID SPECTOR
+$echo P. 62 GRAMMAR G2
+$echo SIGPLAN VOL 16 NO 8 AUG 1981
+$echo Okay
+*/
+/@
+@** |lr1_sp5| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+@/
+fsm (fsm-id "lr1_sp5.lex",fsm-filename LR1_sp5,fsm-namespace NS_LR1_sp5
+ ,fsm-class Clr1_sp5_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_sp5(){
+ -> RS eog
+ }
+
+ RS(){
+ -> a b RA RE
+ -> a b RB x
+ -> a RD
+ -> RA z
+ -> RB x
+ }
+
+ RA(){
+ -> d
+ }
+
+ RB(){
+ -> d
+ }
+
+ RD(){
+ -> f RA
+ -> f RB x
+ -> f a RD
+ }
+
+ RE(){
+ ->
+ -> z
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_sp5.pdf b/web/yacco2/qa/lr1_sp5.pdf
new file mode 100644
index 0000000000..81a0f51616
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp5.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp5_idx.pdf b/web/yacco2/qa/lr1_sp5_idx.pdf
new file mode 100644
index 0000000000..d12dd1155a
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp5_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_sp6.cpp b/web/yacco2/qa/lr1_sp6.cpp
new file mode 100644
index 0000000000..07acca1403
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6.cpp
@@ -0,0 +1,122 @@
+/*
+ File: lr1_sp6.cpp
+ Date and Time: Sun Sep 14 21:16:19 2014
+*/
+#include "lr1_sp6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp6;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 10;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+}
+ Clr1_sp6_fsm::
+ Clr1_sp6_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_sp6.lex"
+ ,"1.0"
+ ,"8-oct-96"
+ ,true
+ ,"test out lr1"
+ ,"Sun Sep 14 21:16:19 2014 "
+ ,S1_Clr1_sp6_fsm){
+
+ }
+
+Clr1_sp6_fsm::~Clr1_sp6_fsm(){
+
+ for(int x = 0;x < 10;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_sp6_fsm::failed(){
+ return false;
+ }
+ void Clr1_sp6_fsm::op(){
+}
+int Clr1_sp6_fsm::rhs_to_rules_mapping_[19] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+ ,4 // subrule 6 for rule 5
+ ,5 // subrule 7 for rule 6
+ ,5 // subrule 8 for rule 6
+ ,5 // subrule 9 for rule 6
+ ,5 // subrule 10 for rule 6
+ ,5 // subrule 11 for rule 6
+ ,6 // subrule 12 for rule 7
+ ,7 // subrule 13 for rule 8
+ ,8 // subrule 14 for rule 9
+ ,8 // subrule 15 for rule 9
+ ,8 // subrule 16 for rule 9
+ ,9 // subrule 17 for rule 10
+ ,9 // subrule 18 for rule 10
+};
+Repi_test::Repi_test(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Repi_test",0,Clr1_sp6_fsm::R_Repi_test_,P,false,false){
+}
+
+Repi_rt_bnd_tst::Repi_rt_bnd_tst(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Repi_rt_bnd_tst",0,Clr1_sp6_fsm::R_Repi_rt_bnd_tst_,P,false,false){
+}
+
+Repi::Repi(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Repi",0,Clr1_sp6_fsm::R_Repi_,P,false,false){
+}
+
+Repi_eog::Repi_eog(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Repi_eog",0,Clr1_sp6_fsm::R_Repi_eog_,P,false,false){
+}
+
+Rlr1_sp5::Rlr1_sp5(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_sp5",0,Clr1_sp6_fsm::R_Rlr1_sp5_,P,false,false){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Clr1_sp6_fsm::R_RS_,P,false,false){
+}
+
+RA::RA(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA",0,Clr1_sp6_fsm::R_RA_,P,false,false){
+}
+
+RB::RB(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB",0,Clr1_sp6_fsm::R_RB_,P,false,false){
+}
+
+RD::RD(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RD",0,Clr1_sp6_fsm::R_RD_,P,false,false){
+}
+
+RE::RE(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RE",0,Clr1_sp6_fsm::R_RE_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_sp6.fsc b/web/yacco2/qa/lr1_sp6.fsc
new file mode 100644
index 0000000000..5b492a48a3
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6.fsc
@@ -0,0 +1,20 @@
+/*
+ File: lr1_sp6.fsc
+ Date and Time: Sun Sep 14 21:16:19 2014
+*/
+transitive n
+grammar-name "lr1_sp6"
+name-space "NS_lr1_sp6"
+thread-name "Clr1_sp6_fsm"
+monolithic y
+file-name "lr1_sp6.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_u
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/lr1_sp6.h b/web/yacco2/qa/lr1_sp6.h
new file mode 100644
index 0000000000..2f7f5c08a7
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6.h
@@ -0,0 +1,129 @@
+/*
+ File: lr1_sp6.h
+ Date and Time: Sun Sep 14 21:16:19 2014
+*/
+#ifndef __lr1_sp6_h__
+#define __lr1_sp6_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Clr1_sp6_fsm;
+namespace NS_lr1_sp6 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[10];
+};
+class Clr1_sp6_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Repi_test_ = 569//start_of_rule_list + 0
+ ,rhs1_Repi_test_ = 1
+ ,R_Repi_rt_bnd_tst_ = 570//start_of_rule_list + 2
+ ,rhs1_Repi_rt_bnd_tst_ = 2
+ ,R_Repi_ = 571//start_of_rule_list + 4
+ ,rhs1_Repi_ = 3
+ ,rhs2_Repi_ = 4
+ ,R_Repi_eog_ = 572//start_of_rule_list + 6
+ ,rhs1_Repi_eog_ = 5
+ ,R_Rlr1_sp5_ = 573//start_of_rule_list + 8
+ ,rhs1_Rlr1_sp5_ = 6
+ ,R_RS_ = 574//start_of_rule_list + 10
+ ,rhs1_RS_ = 7
+ ,rhs2_RS_ = 8
+ ,rhs3_RS_ = 9
+ ,rhs4_RS_ = 10
+ ,rhs5_RS_ = 11
+ ,R_RA_ = 575//start_of_rule_list + 12
+ ,rhs1_RA_ = 12
+ ,R_RB_ = 576//start_of_rule_list + 14
+ ,rhs1_RB_ = 13
+ ,R_RD_ = 577//start_of_rule_list + 16
+ ,rhs1_RD_ = 14
+ ,rhs2_RD_ = 15
+ ,rhs3_RD_ = 16
+ ,R_RE_ = 578//start_of_rule_list + 18
+ ,rhs1_RE_ = 17
+ ,rhs2_RE_ = 18
+ };
+ //no of la sets = 5
+ //no of states = 28
+ Clr1_sp6_fsm();
+ ~Clr1_sp6_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[19];
+ };
+struct Repi_test;
+struct Repi_rt_bnd_tst;
+struct Repi;
+struct Repi_eog;
+struct Rlr1_sp5;
+struct RS;
+struct RA;
+struct RB;
+struct RD;
+struct RE;
+struct Repi_test:public yacco2::CAbs_lr1_sym {
+ Repi_test(yacco2::Parser* P);
+ public:
+};
+
+struct Repi_rt_bnd_tst:public yacco2::CAbs_lr1_sym {
+ Repi_rt_bnd_tst(yacco2::Parser* P);
+ public:
+};
+
+struct Repi:public yacco2::CAbs_lr1_sym {
+ Repi(yacco2::Parser* P);
+ public:
+};
+
+struct Repi_eog:public yacco2::CAbs_lr1_sym {
+ Repi_eog(yacco2::Parser* P);
+ public:
+};
+
+struct Rlr1_sp5:public yacco2::CAbs_lr1_sym {
+ Rlr1_sp5(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct RA:public yacco2::CAbs_lr1_sym {
+ RA(yacco2::Parser* P);
+ public:
+};
+
+struct RB:public yacco2::CAbs_lr1_sym {
+ RB(yacco2::Parser* P);
+ public:
+};
+
+struct RD:public yacco2::CAbs_lr1_sym {
+ RD(yacco2::Parser* P);
+ public:
+};
+
+struct RE:public yacco2::CAbs_lr1_sym {
+ RE(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_sp6.lex b/web/yacco2/qa/lr1_sp6.lex
new file mode 100644
index 0000000000..c43a9c1a93
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6.lex
@@ -0,0 +1,72 @@
+/*
+$echo FILE:{ LR1_sp6.lex
+$echo A LR1 GRAMMAR FROM
+$echo FULL LR(1) PARSER GENERATION
+$echo BY DAVID SPECTOR
+$echo P. 62 GRAMMAR G2
+$echo SIGPLAN VOL 16 NO 8 AUG 1981
+$echo with interior epsilon
+$echo NOT LR! due to epsilon on eog rule ---- my modification test
+*/
+/@
+@** |LR1_sp6| grammar.\fbreak
+ A LR1 GRAMMAR FROM
+ DAVID SPECTOR
+ SIGPLAN VOL 23 NO 12 DEC/88
+ with interior epsilon
+@/
+fsm (fsm-id "lr1_sp6.lex",fsm-filename lr1_sp6,fsm-namespace NS_lr1_sp6
+ ,fsm-class Clr1_sp6_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Repi_test(){
+ -> u Repi_rt_bnd_tst Repi_eog
+ }
+
+ Repi_rt_bnd_tst(){
+ -> Rlr1_sp5 Repi
+ }
+
+ Repi(){
+ ->
+ -> m
+ }
+ Repi_eog(){
+ -> eog
+ ->
+ }
+
+ Rlr1_sp5(){
+ -> RS
+ }
+
+ RS(){
+ -> a b RA RE
+ -> a b RB x
+ -> a RD
+ -> RA z
+ -> RB x
+ }
+
+ RA(){
+ -> d
+ }
+
+ RB(){
+ -> d
+ }
+
+ RD(){
+ -> f RA
+ -> f RB x
+ -> f a RD
+ }
+
+ RE(){
+ ->
+ -> z
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_sp6sym.cpp b/web/yacco2/qa/lr1_sp6sym.cpp
new file mode 100644
index 0000000000..fef993ef1a
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6sym.cpp
@@ -0,0 +1,279 @@
+/*
+ File: lr1_sp6sym.cpp
+ Date and Time: Sun Sep 14 21:16:19 2014
+*/
+#include "lr1_sp6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp6;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Clr1_sp6_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Repi_test_:{
+ Repi_test* sym;
+ if(re->rule_ == 0){
+ sym = new Repi_test(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repi_test*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Repi_rt_bnd_tst_:{
+ Repi_rt_bnd_tst* sym;
+ if(re->rule_ == 0){
+ sym = new Repi_rt_bnd_tst(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repi_rt_bnd_tst*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Repi_:{
+ Repi* sym;
+ if(re->rule_ == 0){
+ sym = new Repi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Repi_:{
+ Repi* sym;
+ if(re->rule_ == 0){
+ sym = new Repi(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repi*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Repi_eog_:{
+ Repi_eog* sym;
+ if(re->rule_ == 0){
+ sym = new Repi_eog(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Repi_eog*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rlr1_sp5_:{
+ Rlr1_sp5* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_sp5(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_sp5*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 4;
+
+
+ return;}
+ case rhs3_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs4_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs5_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA_:{
+ RA* sym;
+ if(re->rule_ == 0){
+ sym = new RA(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB_:{
+ RB* sym;
+ if(re->rule_ == 0){
+ sym = new RB(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs3_RD_:{
+ RD* sym;
+ if(re->rule_ == 0){
+ sym = new RD(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RD*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_RE_:{
+ RE* sym;
+ if(re->rule_ == 0){
+ sym = new RE(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RE*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_sp6tbl.cpp b/web/yacco2/qa/lr1_sp6tbl.cpp
new file mode 100644
index 0000000000..1a6c5ebd61
--- /dev/null
+++ b/web/yacco2/qa/lr1_sp6tbl.cpp
@@ -0,0 +1,505 @@
+/*
+ File: lr1_sp6tbl.cpp
+ Date and Time: Sun Sep 14 21:16:19 2014
+*/
+#include "lr1_sp6.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_sp6;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Clr1_sp6_fsm[] ={
+1
+,0,4
+};
+// raw_x
+yacco2::UCHAR LA2_Clr1_sp6_fsm[] ={
+1
+,16,1
+};
+// LR1_eog
+// raw_m
+// raw_z
+yacco2::UCHAR LA3_Clr1_sp6_fsm[] ={
+3
+,0,2
+,14,32
+,16,4
+};
+// LR1_eog
+// raw_m
+yacco2::UCHAR LA4_Clr1_sp6_fsm[] ={
+2
+,0,2
+,14,32
+};
+// LR1_eog
+yacco2::UCHAR LA5_Clr1_sp6_fsm[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Clr1_sp6_fsm;
+extern yacco2::State S2_Clr1_sp6_fsm;
+extern yacco2::State S3_Clr1_sp6_fsm;
+extern yacco2::State S4_Clr1_sp6_fsm;
+extern yacco2::State S5_Clr1_sp6_fsm;
+extern yacco2::State S6_Clr1_sp6_fsm;
+extern yacco2::State S7_Clr1_sp6_fsm;
+extern yacco2::State S8_Clr1_sp6_fsm;
+extern yacco2::State S9_Clr1_sp6_fsm;
+extern yacco2::State S10_Clr1_sp6_fsm;
+extern yacco2::State S11_Clr1_sp6_fsm;
+extern yacco2::State S12_Clr1_sp6_fsm;
+extern yacco2::State S13_Clr1_sp6_fsm;
+extern yacco2::State S14_Clr1_sp6_fsm;
+extern yacco2::State S15_Clr1_sp6_fsm;
+extern yacco2::State S16_Clr1_sp6_fsm;
+extern yacco2::State S17_Clr1_sp6_fsm;
+extern yacco2::State S18_Clr1_sp6_fsm;
+extern yacco2::State S19_Clr1_sp6_fsm;
+extern yacco2::State S20_Clr1_sp6_fsm;
+extern yacco2::State S21_Clr1_sp6_fsm;
+extern yacco2::State S22_Clr1_sp6_fsm;
+extern yacco2::State S23_Clr1_sp6_fsm;
+extern yacco2::State S24_Clr1_sp6_fsm;
+extern yacco2::State S25_Clr1_sp6_fsm;
+extern yacco2::State S26_Clr1_sp6_fsm;
+extern yacco2::State S27_Clr1_sp6_fsm;
+extern yacco2::State S28_Clr1_sp6_fsm;
+struct S1std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Clr1_sp6_fsm S1st_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {125,(State*)&S2_Clr1_sp6_fsm} // shift sym: raw_u
+ ,{569,(State*)&S1_Clr1_sp6_fsm} // accept sym: Repi_test
+ }// end of shift table
+};
+yacco2::State S1_Clr1_sp6_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_sp6_fsm,0,0,0,0};
+struct S2std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[7];
+};
+S2std_Clr1_sp6_fsm S2st_Clr1_sp6_fsm = {
+ 7
+ ,
+ {// start of table
+ {105,(State*)&S6_Clr1_sp6_fsm} // shift sym: raw_a
+ ,{108,(State*)&S8_Clr1_sp6_fsm} // shift sym: raw_d
+ ,{570,(State*)&S3_Clr1_sp6_fsm} // shift sym: Repi_rt_bnd_tst
+ ,{573,(State*)&S21_Clr1_sp6_fsm} // shift sym: Rlr1_sp5
+ ,{574,(State*)&S24_Clr1_sp6_fsm} // shift sym: RS
+ ,{575,(State*)&S25_Clr1_sp6_fsm} // shift sym: RA
+ ,{576,(State*)&S27_Clr1_sp6_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S2_Clr1_sp6_fsm = //State's vectored into symbol: "u"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_sp6_fsm,0,0,0,0};
+struct S3std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S3std_Clr1_sp6_fsm S3st_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {1,(State*)&S4_Clr1_sp6_fsm} // shift sym: LR1_eog
+ ,{572,(State*)&S5_Clr1_sp6_fsm} // shift sym: Repi_eog
+ }// end of shift table
+};
+yacco2::State S3_Clr1_sp6_fsm = //State's vectored into symbol: "Repi_rt_bnd_tst"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_sp6_fsm,0,0,0,0};
+struct S4rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_sp6_fsm S4rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_Repi_eog_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_sp6_fsm = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_sp6_fsm,0,0,0};
+struct S5rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Clr1_sp6_fsm S5rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_Repi_test_}
+ }// end of reduce table
+};
+yacco2::State S5_Clr1_sp6_fsm = //State's vectored into symbol: "Repi_eog"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Clr1_sp6_fsm,0,0,0};
+struct S6std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S6std_Clr1_sp6_fsm S6st_Clr1_sp6_fsm = {
+ 3
+ ,
+ {// start of table
+ {106,(State*)&S7_Clr1_sp6_fsm} // shift sym: raw_b
+ ,{110,(State*)&S14_Clr1_sp6_fsm} // shift sym: raw_f
+ ,{577,(State*)&S20_Clr1_sp6_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S6_Clr1_sp6_fsm = //State's vectored into symbol: "a"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Clr1_sp6_fsm,0,0,0,0};
+struct S7std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S7std_Clr1_sp6_fsm S7st_Clr1_sp6_fsm = {
+ 3
+ ,
+ {// start of table
+ {108,(State*)&S8_Clr1_sp6_fsm} // shift sym: raw_d
+ ,{575,(State*)&S9_Clr1_sp6_fsm} // shift sym: RA
+ ,{576,(State*)&S12_Clr1_sp6_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S7_Clr1_sp6_fsm = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_Clr1_sp6_fsm,0,0,0,0};
+struct S8rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S8rtd_Clr1_sp6_fsm S8rt_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_RB_}
+ ,{(Set_tbl*)&LA3_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_RA_}
+ }// end of reduce table
+};
+yacco2::State S8_Clr1_sp6_fsm = //State's vectored into symbol: "d"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Clr1_sp6_fsm,0,0,0};
+struct S9std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Clr1_sp6_fsm S9st_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {130,(State*)&S10_Clr1_sp6_fsm} // shift sym: raw_z
+ ,{578,(State*)&S11_Clr1_sp6_fsm} // shift sym: RE
+ }// end of shift table
+};
+struct S9rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Clr1_sp6_fsm S9rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_RE_}
+ }// end of reduce table
+};
+yacco2::State S9_Clr1_sp6_fsm = //State's vectored into symbol: "RA"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_sp6_fsm,(Reduce_tbl*)&S9rt_Clr1_sp6_fsm,0,0,0};
+struct S10rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clr1_sp6_fsm S10rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs2_RE_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_sp6_fsm = //State's vectored into symbol: "z"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clr1_sp6_fsm,0,0,0};
+struct S11rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Clr1_sp6_fsm S11rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S11_Clr1_sp6_fsm = //State's vectored into symbol: "RE"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Clr1_sp6_fsm,0,0,0};
+struct S12std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clr1_sp6_fsm S12st_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S13_Clr1_sp6_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S12_Clr1_sp6_fsm = //State's vectored into symbol: "RB"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_sp6_fsm,0,0,0,0};
+struct S13rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_sp6_fsm S13rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_sp6_fsm = //State's vectored into symbol: "x"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_sp6_fsm,0,0,0};
+struct S14std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S14std_Clr1_sp6_fsm S14st_Clr1_sp6_fsm = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S15_Clr1_sp6_fsm} // shift sym: raw_a
+ ,{108,(State*)&S8_Clr1_sp6_fsm} // shift sym: raw_d
+ ,{575,(State*)&S17_Clr1_sp6_fsm} // shift sym: RA
+ ,{576,(State*)&S18_Clr1_sp6_fsm} // shift sym: RB
+ }// end of shift table
+};
+yacco2::State S14_Clr1_sp6_fsm = //State's vectored into symbol: "f"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_Clr1_sp6_fsm,0,0,0,0};
+struct S15std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_Clr1_sp6_fsm S15st_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {110,(State*)&S14_Clr1_sp6_fsm} // shift sym: raw_f
+ ,{577,(State*)&S16_Clr1_sp6_fsm} // shift sym: RD
+ }// end of shift table
+};
+yacco2::State S15_Clr1_sp6_fsm = //State's vectored into symbol: "a"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_Clr1_sp6_fsm,0,0,0,0};
+struct S16rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S16rtd_Clr1_sp6_fsm S16rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs3_RD_}
+ }// end of reduce table
+};
+yacco2::State S16_Clr1_sp6_fsm = //State's vectored into symbol: "RD"
+{16
+,0,0,0,0,0,(Reduce_tbl*)&S16rt_Clr1_sp6_fsm,0,0,0};
+struct S17rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_sp6_fsm S17rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_RD_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_sp6_fsm = //State's vectored into symbol: "RA"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_sp6_fsm,0,0,0};
+struct S18std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S18std_Clr1_sp6_fsm S18st_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S19_Clr1_sp6_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S18_Clr1_sp6_fsm = //State's vectored into symbol: "RB"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Clr1_sp6_fsm,0,0,0,0};
+struct S19rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clr1_sp6_fsm S19rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs2_RD_}
+ }// end of reduce table
+};
+yacco2::State S19_Clr1_sp6_fsm = //State's vectored into symbol: "x"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clr1_sp6_fsm,0,0,0};
+struct S20rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S20rtd_Clr1_sp6_fsm S20rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs3_RS_}
+ }// end of reduce table
+};
+yacco2::State S20_Clr1_sp6_fsm = //State's vectored into symbol: "RD"
+{20
+,0,0,0,0,0,(Reduce_tbl*)&S20rt_Clr1_sp6_fsm,0,0,0};
+struct S21std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S21std_Clr1_sp6_fsm S21st_Clr1_sp6_fsm = {
+ 2
+ ,
+ {// start of table
+ {117,(State*)&S22_Clr1_sp6_fsm} // shift sym: raw_m
+ ,{571,(State*)&S23_Clr1_sp6_fsm} // shift sym: Repi
+ }// end of shift table
+};
+struct S21rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clr1_sp6_fsm S21rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_Repi_}
+ }// end of reduce table
+};
+yacco2::State S21_Clr1_sp6_fsm = //State's vectored into symbol: "Rlr1_sp5"
+{21
+,0,0,0,0,(Shift_tbl*)&S21st_Clr1_sp6_fsm,(Reduce_tbl*)&S21rt_Clr1_sp6_fsm,0,0,0};
+struct S22rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S22rtd_Clr1_sp6_fsm S22rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs2_Repi_}
+ }// end of reduce table
+};
+yacco2::State S22_Clr1_sp6_fsm = //State's vectored into symbol: "m"
+{22
+,0,0,0,0,0,(Reduce_tbl*)&S22rt_Clr1_sp6_fsm,0,0,0};
+struct S23rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Clr1_sp6_fsm S23rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_Repi_rt_bnd_tst_}
+ }// end of reduce table
+};
+yacco2::State S23_Clr1_sp6_fsm = //State's vectored into symbol: "Repi"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Clr1_sp6_fsm,0,0,0};
+struct S24rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S24rtd_Clr1_sp6_fsm S24rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs1_Rlr1_sp5_}
+ }// end of reduce table
+};
+yacco2::State S24_Clr1_sp6_fsm = //State's vectored into symbol: "RS"
+{24
+,0,0,0,0,0,(Reduce_tbl*)&S24rt_Clr1_sp6_fsm,0,0,0};
+struct S25std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S25std_Clr1_sp6_fsm S25st_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {130,(State*)&S26_Clr1_sp6_fsm} // shift sym: raw_z
+ }// end of shift table
+};
+yacco2::State S25_Clr1_sp6_fsm = //State's vectored into symbol: "RA"
+{25
+,0,0,0,0,(Shift_tbl*)&S25st_Clr1_sp6_fsm,0,0,0,0};
+struct S26rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S26rtd_Clr1_sp6_fsm S26rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs4_RS_}
+ }// end of reduce table
+};
+yacco2::State S26_Clr1_sp6_fsm = //State's vectored into symbol: "z"
+{26
+,0,0,0,0,0,(Reduce_tbl*)&S26rt_Clr1_sp6_fsm,0,0,0};
+struct S27std_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S27std_Clr1_sp6_fsm S27st_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {128,(State*)&S28_Clr1_sp6_fsm} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S27_Clr1_sp6_fsm = //State's vectored into symbol: "RB"
+{27
+,0,0,0,0,(Shift_tbl*)&S27st_Clr1_sp6_fsm,0,0,0,0};
+struct S28rtd_Clr1_sp6_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S28rtd_Clr1_sp6_fsm S28rt_Clr1_sp6_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_sp6_fsm,Clr1_sp6_fsm::rhs5_RS_}
+ }// end of reduce table
+};
+yacco2::State S28_Clr1_sp6_fsm = //State's vectored into symbol: "x"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clr1_sp6_fsm,0,0,0};
diff --git a/web/yacco2/qa/lr1_tst.cpp b/web/yacco2/qa/lr1_tst.cpp
new file mode 100644
index 0000000000..c439ae6822
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst.cpp
@@ -0,0 +1,184 @@
+/*
+ File: lr1_tst.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "lr1_tst.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_tst;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 13;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[7] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[8] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[9] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[10] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[11] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[12] = new Per_rule_s_reuse_table();
+}
+ Clr1_tst_fsm::
+ Clr1_tst_fsm()
+ :yacco2::CAbs_fsm
+ ("lr1_tst.lex"
+ ,"1.0"
+ ,"12 Nov. 2006"
+ ,true
+ ,"test out lr1 compatibility against 2 sets of reduce /reduce conflict states"
+ ,"Mon Oct 13 18:18:15 2014 "
+ ,S1_Clr1_tst_fsm){
+
+ // test out Clr1\_tst\_fsm fsm constructor emit code
+
+ }
+
+Clr1_tst_fsm::~Clr1_tst_fsm(){
+
+ // test out Clr1\_tst\_fsm fsm destructor emit code
+
+ for(int x = 0;x < 13;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Clr1_tst_fsm::failed(){
+
+ // test out Clr1\_tst\_fsm fsm failed emit code
+ return true;
+
+ }
+ void Clr1_tst_fsm::op(){
+ // test out Clr1\_tst\_fsm fsm op emit code
+
+}
+int Clr1_tst_fsm::rhs_to_rules_mapping_[25] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,0 // subrule 2 for rule 1
+ ,0 // subrule 3 for rule 1
+ ,0 // subrule 4 for rule 1
+ ,1 // subrule 5 for rule 2
+ ,1 // subrule 6 for rule 2
+ ,2 // subrule 7 for rule 3
+ ,2 // subrule 8 for rule 3
+ ,3 // subrule 9 for rule 4
+ ,3 // subrule 10 for rule 4
+ ,4 // subrule 11 for rule 5
+ ,4 // subrule 12 for rule 5
+ ,5 // subrule 13 for rule 6
+ ,5 // subrule 14 for rule 6
+ ,6 // subrule 15 for rule 7
+ ,6 // subrule 16 for rule 7
+ ,7 // subrule 17 for rule 8
+ ,7 // subrule 18 for rule 8
+ ,8 // subrule 19 for rule 9
+ ,8 // subrule 20 for rule 9
+ ,9 // subrule 21 for rule 10
+ ,10 // subrule 22 for rule 11
+ ,11 // subrule 23 for rule 12
+ ,12 // subrule 24 for rule 13
+};
+
+ // test out Clr1\_tst\_fsm fsm user-implementation code
+
+Rlr1_tst::Rlr1_tst(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rlr1_tst",&dtor_Rlr1_tst,Clr1_tst_fsm::R_Rlr1_tst_,P,false,false){
+}
+
+void Rlr1_tst::dtor_Rlr1_tst(yacco2::VOIDP This,yacco2::VOIDP P){
+ Rlr1_tst* R = (Rlr1_tst*)(This);
+
+ // test out Rlr1\_tst rule destructor emit code
+
+}
+void Rlr1_tst::op(){
+ sstrace_rulesss
+
+ // test out Rlr1\_tst rule op emit code
+
+}
+void Rlr1_tst::ctor(){
+
+ // test out Rlr1\_tst rule constructor emit code
+
+}
+
+ // test out Rlr1\_tst rule user-implementation code
+
+void Rlr1_tst::sr1(){
+
+ // test out subrule u RAabBab eog op emit code
+
+}
+
+RAabBab::RAabBab(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAabBab",0,Clr1_tst_fsm::R_RAabBab_,P,false,false){
+}
+
+RAbaBab::RAbaBab(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAbaBab",0,Clr1_tst_fsm::R_RAbaBab_,P,false,false){
+}
+
+RAabBba::RAabBba(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAabBba",0,Clr1_tst_fsm::R_RAabBba_,P,false,false){
+}
+
+RAbaBba::RAbaBba(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAbaBba",0,Clr1_tst_fsm::R_RAbaBba_,P,false,false){
+}
+
+RAab::RAab(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAab",0,Clr1_tst_fsm::R_RAab_,P,false,false){
+}
+
+RAba::RAba(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RAba",0,Clr1_tst_fsm::R_RAba_,P,false,false){
+}
+
+RBab::RBab(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RBab",0,Clr1_tst_fsm::R_RBab_,P,false,false){
+}
+
+RBba::RBba(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RBba",0,Clr1_tst_fsm::R_RBba_,P,false,false){
+}
+
+RA1::RA1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA1",0,Clr1_tst_fsm::R_RA1_,P,false,false){
+}
+
+RA2::RA2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RA2",0,Clr1_tst_fsm::R_RA2_,P,false,false){
+}
+
+RB1::RB1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB1",0,Clr1_tst_fsm::R_RB1_,P,false,false){
+}
+
+RB2::RB2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RB2",0,Clr1_tst_fsm::R_RB2_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/lr1_tst.fsc b/web/yacco2/qa/lr1_tst.fsc
new file mode 100644
index 0000000000..6f90decb6f
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst.fsc
@@ -0,0 +1,23 @@
+/*
+ File: lr1_tst.fsc
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+transitive n
+grammar-name "lr1_tst"
+name-space "NS_lr1_tst"
+thread-name "TH_lr1_tst"
+monolithic n
+file-name "lr1_tst.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 4
+ raw_u
+ raw_v
+ raw_w
+ raw_x
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1 compatibility against 2 sets of reduce /reduce conflict states"
diff --git a/web/yacco2/qa/lr1_tst.h b/web/yacco2/qa/lr1_tst.h
new file mode 100644
index 0000000000..3b7f082f78
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst.h
@@ -0,0 +1,173 @@
+/*
+ File: lr1_tst.h
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#ifndef __lr1_tst_h__
+#define __lr1_tst_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_lr1_tst;
+
+extern yacco2::State S1_Clr1_tst_fsm;
+namespace NS_lr1_tst {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_lr1_tst(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_lr1_tst(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[13];
+};
+class Clr1_tst_fsm: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rlr1_tst_ = 569//start_of_rule_list + 0
+ ,rhs1_Rlr1_tst_ = 1
+ ,rhs2_Rlr1_tst_ = 2
+ ,rhs3_Rlr1_tst_ = 3
+ ,rhs4_Rlr1_tst_ = 4
+ ,R_RAabBab_ = 570//start_of_rule_list + 2
+ ,rhs1_RAabBab_ = 5
+ ,rhs2_RAabBab_ = 6
+ ,R_RAbaBab_ = 571//start_of_rule_list + 4
+ ,rhs1_RAbaBab_ = 7
+ ,rhs2_RAbaBab_ = 8
+ ,R_RAabBba_ = 572//start_of_rule_list + 6
+ ,rhs1_RAabBba_ = 9
+ ,rhs2_RAabBba_ = 10
+ ,R_RAbaBba_ = 573//start_of_rule_list + 8
+ ,rhs1_RAbaBba_ = 11
+ ,rhs2_RAbaBba_ = 12
+ ,R_RAab_ = 574//start_of_rule_list + 10
+ ,rhs1_RAab_ = 13
+ ,rhs2_RAab_ = 14
+ ,R_RAba_ = 575//start_of_rule_list + 12
+ ,rhs1_RAba_ = 15
+ ,rhs2_RAba_ = 16
+ ,R_RBab_ = 576//start_of_rule_list + 14
+ ,rhs1_RBab_ = 17
+ ,rhs2_RBab_ = 18
+ ,R_RBba_ = 577//start_of_rule_list + 16
+ ,rhs1_RBba_ = 19
+ ,rhs2_RBba_ = 20
+ ,R_RA1_ = 578//start_of_rule_list + 18
+ ,rhs1_RA1_ = 21
+ ,R_RA2_ = 579//start_of_rule_list + 20
+ ,rhs1_RA2_ = 22
+ ,R_RB1_ = 580//start_of_rule_list + 22
+ ,rhs1_RB1_ = 23
+ ,R_RB2_ = 581//start_of_rule_list + 24
+ ,rhs1_RB2_ = 24
+ };
+ //no of la sets = 6
+ //no of states = 49
+ Clr1_tst_fsm();
+ ~Clr1_tst_fsm();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[25];
+
+ // test out Clr1\_tst\_fsm fsm user-declaration code
+ public:
+
+ };
+struct Rlr1_tst;
+struct RAabBab;
+struct RAbaBab;
+struct RAabBba;
+struct RAbaBba;
+struct RAab;
+struct RAba;
+struct RBab;
+struct RBba;
+struct RA1;
+struct RA2;
+struct RB1;
+struct RB2;
+struct Rlr1_tst:public yacco2::CAbs_lr1_sym {
+ Rlr1_tst(yacco2::Parser* P);
+ static void dtor_Rlr1_tst(yacco2::VOIDP This,yacco2::VOIDP P);
+ void op();
+ void ctor();
+
+ // test out Rlr1\_tst rule user-declaration code
+ public:
+
+ public:
+ void sr1();
+};
+
+struct RAabBab:public yacco2::CAbs_lr1_sym {
+ RAabBab(yacco2::Parser* P);
+ public:
+};
+
+struct RAbaBab:public yacco2::CAbs_lr1_sym {
+ RAbaBab(yacco2::Parser* P);
+ public:
+};
+
+struct RAabBba:public yacco2::CAbs_lr1_sym {
+ RAabBba(yacco2::Parser* P);
+ public:
+};
+
+struct RAbaBba:public yacco2::CAbs_lr1_sym {
+ RAbaBba(yacco2::Parser* P);
+ public:
+};
+
+struct RAab:public yacco2::CAbs_lr1_sym {
+ RAab(yacco2::Parser* P);
+ public:
+};
+
+struct RAba:public yacco2::CAbs_lr1_sym {
+ RAba(yacco2::Parser* P);
+ public:
+};
+
+struct RBab:public yacco2::CAbs_lr1_sym {
+ RBab(yacco2::Parser* P);
+ public:
+};
+
+struct RBba:public yacco2::CAbs_lr1_sym {
+ RBba(yacco2::Parser* P);
+ public:
+};
+
+struct RA1:public yacco2::CAbs_lr1_sym {
+ RA1(yacco2::Parser* P);
+ public:
+};
+
+struct RA2:public yacco2::CAbs_lr1_sym {
+ RA2(yacco2::Parser* P);
+ public:
+};
+
+struct RB1:public yacco2::CAbs_lr1_sym {
+ RB1(yacco2::Parser* P);
+ public:
+};
+
+struct RB2:public yacco2::CAbs_lr1_sym {
+ RB2(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/lr1_tst.lex b/web/yacco2/qa/lr1_tst.lex
new file mode 100644
index 0000000000..9cd4ce3b31
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst.lex
@@ -0,0 +1,142 @@
+/*
+$echo FILE: LR1_tst.lex
+$echo My grammar to test out merges.
+$echo This grammar tests out mergers against the reduce / reduce states
+$echo There are 2 sets of rules RAx and RBx where x is 1 or 2 that produce reduce / reduce
+$echo conflict states
+$echo Okay
+*/
+/@
+@** |LR1_tst| grammar.\fbreak
+This grammar tests out mergers against the reduce / reduce states.
+There are 2 sets of rules RAx and RBx where x is 1 or 2 that produce reduce / reduce
+conflict states.
+
+The objectives are:\fbreak
+\INDENT{.3in}{1) is the grammar LR1? which it is}
+\INDENT{.3in}{2) proper splitting of conflict states by merging into differenct closure states}
+@/
+fsm (fsm-id "lr1_tst.lex",fsm-filename lr1_tst,fsm-namespace NS_lr1_tst
+ ,fsm-class Clr1_tst_fsm {
+ user-imp-sym
+ // test out Clr1\_tst\_fsm fsm user-imp-sym emit code
+ ***
+ user-imp-tbl
+ // test out Clr1\_tst\_fsm fsm user-imp-tbl emit code
+ ***
+ constructor
+ // test out Clr1\_tst\_fsm fsm constructor emit code
+ ***
+ destructor
+ // test out Clr1\_tst\_fsm fsm destructor emit code
+ ***
+ failed
+ // test out Clr1\_tst\_fsm fsm failed emit code
+ return true;
+ ***
+ op
+ // test out Clr1\_tst\_fsm fsm op emit code
+ ***
+ user-declaration
+ // test out Clr1\_tst\_fsm fsm user-declaration code
+ public:
+ ***
+ user-implementation
+ // test out Clr1\_tst\_fsm fsm user-implementation code
+ ***
+ }
+ ,fsm-version "1.0",fsm-date "12 Nov. 2006"
+ ,fsm-debug "true"
+ ,fsm-comments "test out lr1 compatibility against 2 sets of reduce /reduce conflict states")
+parallel-parser
+(
+ parallel-thread-function
+ TH_lr1_tst
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rlr1_tst(
+
+lhs {
+ constructor
+ // test out Rlr1\_tst rule constructor emit code
+ ***
+ destructor
+ // test out Rlr1\_tst rule destructor emit code
+ ***
+ op
+ // test out Rlr1\_tst rule op emit code
+ ***
+ user-declaration
+ // test out Rlr1\_tst rule user-declaration code
+ public:
+ ***
+ user-implementation
+ // test out Rlr1\_tst rule user-implementation code
+ ***
+ }
+ ){
+ -> u RAabBab eog {
+ op
+ // test out subrule u RAabBab eog op emit code
+ ***
+ }
+ -> v RAbaBab eog
+ -> w RAabBba eog
+ -> x RAbaBba eog
+ }
+
+ RAabBab(){
+ -> RAab m
+ -> RBab n
+ }
+ RAbaBab(){
+ -> RAba m
+ -> RBab n
+ }
+ RAabBba(){
+ -> RAab m
+ -> RBba n
+ }
+ RAbaBba(){
+ -> RAba m
+ -> RBba n
+ }
+
+ RAab(){
+ -> RA1 a
+ -> RA2 b
+ }
+ RAba(){
+ -> RA1 b
+ -> RA2 a
+ }
+ RBab(){
+ -> RB1 a
+ -> RB2 b
+ }
+ RBba(){
+ -> RB1 b
+ -> RB2 a
+ }
+ RA1(){
+ -> a
+ }
+
+ RA2(){
+ -> a
+ }
+ RB1(){
+ -> b
+ }
+
+ RB2(){
+ -> b
+ }
+
+} // end of grammar
diff --git a/web/yacco2/qa/lr1_tst.pdf b/web/yacco2/qa/lr1_tst.pdf
new file mode 100644
index 0000000000..3f09723d53
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_tst_idx.pdf b/web/yacco2/qa/lr1_tst_idx.pdf
new file mode 100644
index 0000000000..c0d386f3ec
--- /dev/null
+++ b/web/yacco2/qa/lr1_tst_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/lr1_tstsym.cpp b/web/yacco2/qa/lr1_tstsym.cpp
new file mode 100644
index 0000000000..9cfa5e2efd
--- /dev/null
+++ b/web/yacco2/qa/lr1_tstsym.cpp
@@ -0,0 +1,396 @@
+/*
+ File: lr1_tstsym.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+
+ // test out Clr1\_tst\_fsm fsm user-imp-sym emit code
+
+#include "lr1_tst.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_tst;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_lr1_tst::TH_lr1_tst(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_lr1_tst;
+ NS_lr1_tst::Clr1_tst_fsm Clr1_tst_fsm_;// parallel-parser's parse table
+#define ssPARSE_TABLE Clr1_tst_fsm_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_lr1_tst::PROC_TH_lr1_tst(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_lr1_tst";
+ static bool one_time(false);
+ static NS_lr1_tst::Clr1_tst_fsm* NS_lr1_tst_Clr1_tst_fsm_(0);// parallel-parser's fsm table
+ static Parser* NS_lr1_tst_Clr1_tst_fsm_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_lr1_tst_Clr1_tst_fsm_ = new NS_lr1_tst::Clr1_tst_fsm();// parallel-parser's fsm table
+ NS_lr1_tst_Clr1_tst_fsm_parser = new Parser(*NS_lr1_tst_Clr1_tst_fsm_,Caller_pp);
+ }
+ proc_parser = NS_lr1_tst_Clr1_tst_fsm_parser;
+#include "wproc_pp_core.h"
+}
+void
+Clr1_tst_fsm::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rlr1_tst_:{
+ Rlr1_tst* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_tst(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_tst*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rlr1_tst_:{
+ Rlr1_tst* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_tst(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_tst*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs3_Rlr1_tst_:{
+ Rlr1_tst* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_tst(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_tst*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs4_Rlr1_tst_:{
+ Rlr1_tst* sym;
+ if(re->rule_ == 0){
+ sym = new Rlr1_tst(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rlr1_tst*)re->rule_;
+ }
+ sym->ctor();
+
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ sym->op();
+ return;}
+ case rhs1_RAabBab_:{
+ RAabBab* sym;
+ if(re->rule_ == 0){
+ sym = new RAabBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAabBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAabBab_:{
+ RAabBab* sym;
+ if(re->rule_ == 0){
+ sym = new RAabBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAabBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RAbaBab_:{
+ RAbaBab* sym;
+ if(re->rule_ == 0){
+ sym = new RAbaBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAbaBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAbaBab_:{
+ RAbaBab* sym;
+ if(re->rule_ == 0){
+ sym = new RAbaBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAbaBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RAabBba_:{
+ RAabBba* sym;
+ if(re->rule_ == 0){
+ sym = new RAabBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAabBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAabBba_:{
+ RAabBba* sym;
+ if(re->rule_ == 0){
+ sym = new RAabBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAabBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RAbaBba_:{
+ RAbaBba* sym;
+ if(re->rule_ == 0){
+ sym = new RAbaBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAbaBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAbaBba_:{
+ RAbaBba* sym;
+ if(re->rule_ == 0){
+ sym = new RAbaBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAbaBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RAab_:{
+ RAab* sym;
+ if(re->rule_ == 0){
+ sym = new RAab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAab_:{
+ RAab* sym;
+ if(re->rule_ == 0){
+ sym = new RAab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RAba_:{
+ RAba* sym;
+ if(re->rule_ == 0){
+ sym = new RAba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RAba_:{
+ RAba* sym;
+ if(re->rule_ == 0){
+ sym = new RAba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RAba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RBab_:{
+ RBab* sym;
+ if(re->rule_ == 0){
+ sym = new RBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RBab_:{
+ RBab* sym;
+ if(re->rule_ == 0){
+ sym = new RBab(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RBab*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RBba_:{
+ RBba* sym;
+ if(re->rule_ == 0){
+ sym = new RBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs2_RBba_:{
+ RBba* sym;
+ if(re->rule_ == 0){
+ sym = new RBba(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RBba*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RA1_:{
+ RA1* sym;
+ if(re->rule_ == 0){
+ sym = new RA1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RA2_:{
+ RA2* sym;
+ if(re->rule_ == 0){
+ sym = new RA2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RA2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB1_:{
+ RB1* sym;
+ if(re->rule_ == 0){
+ sym = new RB1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RB2_:{
+ RB2* sym;
+ if(re->rule_ == 0){
+ sym = new RB2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RB2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/lr1_tsttbl.cpp b/web/yacco2/qa/lr1_tsttbl.cpp
new file mode 100644
index 0000000000..c7d71b9c67
--- /dev/null
+++ b/web/yacco2/qa/lr1_tsttbl.cpp
@@ -0,0 +1,821 @@
+/*
+ File: lr1_tsttbl.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+
+ // test out Clr1\_tst\_fsm fsm user-imp-tbl emit code
+
+#include "lr1_tst.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_lr1_tst;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Clr1_tst_fsm[] ={
+1
+,0,4
+};
+// raw_a
+yacco2::UCHAR LA2_Clr1_tst_fsm[] ={
+1
+,13,2
+};
+// raw_b
+yacco2::UCHAR LA3_Clr1_tst_fsm[] ={
+1
+,13,4
+};
+// LR1_eog
+yacco2::UCHAR LA4_Clr1_tst_fsm[] ={
+1
+,0,2
+};
+// raw_m
+yacco2::UCHAR LA5_Clr1_tst_fsm[] ={
+1
+,14,32
+};
+// raw_n
+yacco2::UCHAR LA6_Clr1_tst_fsm[] ={
+1
+,14,64
+};
+extern yacco2::State S1_Clr1_tst_fsm;
+extern yacco2::State S2_Clr1_tst_fsm;
+extern yacco2::State S3_Clr1_tst_fsm;
+extern yacco2::State S4_Clr1_tst_fsm;
+extern yacco2::State S5_Clr1_tst_fsm;
+extern yacco2::State S6_Clr1_tst_fsm;
+extern yacco2::State S7_Clr1_tst_fsm;
+extern yacco2::State S8_Clr1_tst_fsm;
+extern yacco2::State S9_Clr1_tst_fsm;
+extern yacco2::State S10_Clr1_tst_fsm;
+extern yacco2::State S11_Clr1_tst_fsm;
+extern yacco2::State S12_Clr1_tst_fsm;
+extern yacco2::State S13_Clr1_tst_fsm;
+extern yacco2::State S14_Clr1_tst_fsm;
+extern yacco2::State S15_Clr1_tst_fsm;
+extern yacco2::State S16_Clr1_tst_fsm;
+extern yacco2::State S17_Clr1_tst_fsm;
+extern yacco2::State S18_Clr1_tst_fsm;
+extern yacco2::State S19_Clr1_tst_fsm;
+extern yacco2::State S20_Clr1_tst_fsm;
+extern yacco2::State S21_Clr1_tst_fsm;
+extern yacco2::State S22_Clr1_tst_fsm;
+extern yacco2::State S23_Clr1_tst_fsm;
+extern yacco2::State S24_Clr1_tst_fsm;
+extern yacco2::State S25_Clr1_tst_fsm;
+extern yacco2::State S26_Clr1_tst_fsm;
+extern yacco2::State S27_Clr1_tst_fsm;
+extern yacco2::State S28_Clr1_tst_fsm;
+extern yacco2::State S29_Clr1_tst_fsm;
+extern yacco2::State S30_Clr1_tst_fsm;
+extern yacco2::State S31_Clr1_tst_fsm;
+extern yacco2::State S32_Clr1_tst_fsm;
+extern yacco2::State S33_Clr1_tst_fsm;
+extern yacco2::State S34_Clr1_tst_fsm;
+extern yacco2::State S35_Clr1_tst_fsm;
+extern yacco2::State S36_Clr1_tst_fsm;
+extern yacco2::State S37_Clr1_tst_fsm;
+extern yacco2::State S38_Clr1_tst_fsm;
+extern yacco2::State S39_Clr1_tst_fsm;
+extern yacco2::State S40_Clr1_tst_fsm;
+extern yacco2::State S41_Clr1_tst_fsm;
+extern yacco2::State S42_Clr1_tst_fsm;
+extern yacco2::State S43_Clr1_tst_fsm;
+extern yacco2::State S44_Clr1_tst_fsm;
+extern yacco2::State S45_Clr1_tst_fsm;
+extern yacco2::State S46_Clr1_tst_fsm;
+extern yacco2::State S47_Clr1_tst_fsm;
+extern yacco2::State S48_Clr1_tst_fsm;
+extern yacco2::State S49_Clr1_tst_fsm;
+struct S1std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Clr1_tst_fsm S1st_Clr1_tst_fsm = {
+ 5
+ ,
+ {// start of table
+ {125,(State*)&S2_Clr1_tst_fsm} // shift sym: raw_u
+ ,{126,(State*)&S5_Clr1_tst_fsm} // shift sym: raw_v
+ ,{127,(State*)&S8_Clr1_tst_fsm} // shift sym: raw_w
+ ,{128,(State*)&S11_Clr1_tst_fsm} // shift sym: raw_x
+ ,{569,(State*)&S1_Clr1_tst_fsm} // accept sym: Rlr1_tst
+ }// end of shift table
+};
+yacco2::State S1_Clr1_tst_fsm = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Clr1_tst_fsm,0,0,0,0};
+struct S2std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S2std_Clr1_tst_fsm S2st_Clr1_tst_fsm = {
+ 9
+ ,
+ {// start of table
+ {105,(State*)&S14_Clr1_tst_fsm} // shift sym: raw_a
+ ,{106,(State*)&S15_Clr1_tst_fsm} // shift sym: raw_b
+ ,{570,(State*)&S3_Clr1_tst_fsm} // shift sym: RAabBab
+ ,{574,(State*)&S16_Clr1_tst_fsm} // shift sym: RAab
+ ,{576,(State*)&S18_Clr1_tst_fsm} // shift sym: RBab
+ ,{578,(State*)&S20_Clr1_tst_fsm} // shift sym: RA1
+ ,{579,(State*)&S22_Clr1_tst_fsm} // shift sym: RA2
+ ,{580,(State*)&S24_Clr1_tst_fsm} // shift sym: RB1
+ ,{581,(State*)&S26_Clr1_tst_fsm} // shift sym: RB2
+ }// end of shift table
+};
+yacco2::State S2_Clr1_tst_fsm = //State's vectored into symbol: "u"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Clr1_tst_fsm,0,0,0,0};
+struct S3std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Clr1_tst_fsm S3st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_Clr1_tst_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S3_Clr1_tst_fsm = //State's vectored into symbol: "RAabBab"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Clr1_tst_fsm,0,0,0,0};
+struct S4rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Clr1_tst_fsm S4rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_Rlr1_tst_}
+ }// end of reduce table
+};
+yacco2::State S4_Clr1_tst_fsm = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Clr1_tst_fsm,0,0,0};
+struct S5std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S5std_Clr1_tst_fsm S5st_Clr1_tst_fsm = {
+ 9
+ ,
+ {// start of table
+ {105,(State*)&S28_Clr1_tst_fsm} // shift sym: raw_a
+ ,{106,(State*)&S15_Clr1_tst_fsm} // shift sym: raw_b
+ ,{571,(State*)&S6_Clr1_tst_fsm} // shift sym: RAbaBab
+ ,{575,(State*)&S29_Clr1_tst_fsm} // shift sym: RAba
+ ,{576,(State*)&S31_Clr1_tst_fsm} // shift sym: RBab
+ ,{578,(State*)&S33_Clr1_tst_fsm} // shift sym: RA1
+ ,{579,(State*)&S35_Clr1_tst_fsm} // shift sym: RA2
+ ,{580,(State*)&S24_Clr1_tst_fsm} // shift sym: RB1
+ ,{581,(State*)&S26_Clr1_tst_fsm} // shift sym: RB2
+ }// end of shift table
+};
+yacco2::State S5_Clr1_tst_fsm = //State's vectored into symbol: "v"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_Clr1_tst_fsm,0,0,0,0};
+struct S6std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S6std_Clr1_tst_fsm S6st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S7_Clr1_tst_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S6_Clr1_tst_fsm = //State's vectored into symbol: "RAbaBab"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Clr1_tst_fsm,0,0,0,0};
+struct S7rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Clr1_tst_fsm S7rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_Rlr1_tst_}
+ }// end of reduce table
+};
+yacco2::State S7_Clr1_tst_fsm = //State's vectored into symbol: "eog"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Clr1_tst_fsm,0,0,0};
+struct S8std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S8std_Clr1_tst_fsm S8st_Clr1_tst_fsm = {
+ 9
+ ,
+ {// start of table
+ {105,(State*)&S14_Clr1_tst_fsm} // shift sym: raw_a
+ ,{106,(State*)&S37_Clr1_tst_fsm} // shift sym: raw_b
+ ,{572,(State*)&S9_Clr1_tst_fsm} // shift sym: RAabBba
+ ,{574,(State*)&S38_Clr1_tst_fsm} // shift sym: RAab
+ ,{577,(State*)&S40_Clr1_tst_fsm} // shift sym: RBba
+ ,{578,(State*)&S20_Clr1_tst_fsm} // shift sym: RA1
+ ,{579,(State*)&S22_Clr1_tst_fsm} // shift sym: RA2
+ ,{580,(State*)&S42_Clr1_tst_fsm} // shift sym: RB1
+ ,{581,(State*)&S44_Clr1_tst_fsm} // shift sym: RB2
+ }// end of shift table
+};
+yacco2::State S8_Clr1_tst_fsm = //State's vectored into symbol: "w"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_Clr1_tst_fsm,0,0,0,0};
+struct S9std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S9std_Clr1_tst_fsm S9st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S10_Clr1_tst_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S9_Clr1_tst_fsm = //State's vectored into symbol: "RAabBba"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Clr1_tst_fsm,0,0,0,0};
+struct S10rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Clr1_tst_fsm S10rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_tst_fsm,Clr1_tst_fsm::rhs3_Rlr1_tst_}
+ }// end of reduce table
+};
+yacco2::State S10_Clr1_tst_fsm = //State's vectored into symbol: "eog"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Clr1_tst_fsm,0,0,0};
+struct S11std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[9];
+};
+S11std_Clr1_tst_fsm S11st_Clr1_tst_fsm = {
+ 9
+ ,
+ {// start of table
+ {105,(State*)&S28_Clr1_tst_fsm} // shift sym: raw_a
+ ,{106,(State*)&S37_Clr1_tst_fsm} // shift sym: raw_b
+ ,{573,(State*)&S12_Clr1_tst_fsm} // shift sym: RAbaBba
+ ,{575,(State*)&S46_Clr1_tst_fsm} // shift sym: RAba
+ ,{577,(State*)&S48_Clr1_tst_fsm} // shift sym: RBba
+ ,{578,(State*)&S33_Clr1_tst_fsm} // shift sym: RA1
+ ,{579,(State*)&S35_Clr1_tst_fsm} // shift sym: RA2
+ ,{580,(State*)&S42_Clr1_tst_fsm} // shift sym: RB1
+ ,{581,(State*)&S44_Clr1_tst_fsm} // shift sym: RB2
+ }// end of shift table
+};
+yacco2::State S11_Clr1_tst_fsm = //State's vectored into symbol: "x"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_Clr1_tst_fsm,0,0,0,0};
+struct S12std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S12std_Clr1_tst_fsm S12st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S13_Clr1_tst_fsm} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S12_Clr1_tst_fsm = //State's vectored into symbol: "RAbaBba"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Clr1_tst_fsm,0,0,0,0};
+struct S13rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Clr1_tst_fsm S13rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Clr1_tst_fsm,Clr1_tst_fsm::rhs4_Rlr1_tst_}
+ }// end of reduce table
+};
+yacco2::State S13_Clr1_tst_fsm = //State's vectored into symbol: "eog"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Clr1_tst_fsm,0,0,0};
+struct S14rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S14rtd_Clr1_tst_fsm S14rt_Clr1_tst_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RA1_}
+ ,{(Set_tbl*)&LA3_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RA2_}
+ }// end of reduce table
+};
+yacco2::State S14_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Clr1_tst_fsm,0,0,0};
+struct S15rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S15rtd_Clr1_tst_fsm S15rt_Clr1_tst_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RB1_}
+ ,{(Set_tbl*)&LA3_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RB2_}
+ }// end of reduce table
+};
+yacco2::State S15_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{15
+,0,0,0,0,0,(Reduce_tbl*)&S15rt_Clr1_tst_fsm,0,0,0};
+struct S16std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S16std_Clr1_tst_fsm S16st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {117,(State*)&S17_Clr1_tst_fsm} // shift sym: raw_m
+ }// end of shift table
+};
+yacco2::State S16_Clr1_tst_fsm = //State's vectored into symbol: "RAab"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_Clr1_tst_fsm,0,0,0,0};
+struct S17rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_Clr1_tst_fsm S17rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAabBab_}
+ }// end of reduce table
+};
+yacco2::State S17_Clr1_tst_fsm = //State's vectored into symbol: "m"
+{17
+,0,0,0,0,0,(Reduce_tbl*)&S17rt_Clr1_tst_fsm,0,0,0};
+struct S18std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S18std_Clr1_tst_fsm S18st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {118,(State*)&S19_Clr1_tst_fsm} // shift sym: raw_n
+ }// end of shift table
+};
+yacco2::State S18_Clr1_tst_fsm = //State's vectored into symbol: "RBab"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_Clr1_tst_fsm,0,0,0,0};
+struct S19rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_Clr1_tst_fsm S19rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAabBab_}
+ }// end of reduce table
+};
+yacco2::State S19_Clr1_tst_fsm = //State's vectored into symbol: "n"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_Clr1_tst_fsm,0,0,0};
+struct S20std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S20std_Clr1_tst_fsm S20st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S21_Clr1_tst_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S20_Clr1_tst_fsm = //State's vectored into symbol: "RA1"
+{20
+,0,0,0,0,(Shift_tbl*)&S20st_Clr1_tst_fsm,0,0,0,0};
+struct S21rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S21rtd_Clr1_tst_fsm S21rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAab_}
+ }// end of reduce table
+};
+yacco2::State S21_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{21
+,0,0,0,0,0,(Reduce_tbl*)&S21rt_Clr1_tst_fsm,0,0,0};
+struct S22std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S22std_Clr1_tst_fsm S22st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S23_Clr1_tst_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S22_Clr1_tst_fsm = //State's vectored into symbol: "RA2"
+{22
+,0,0,0,0,(Shift_tbl*)&S22st_Clr1_tst_fsm,0,0,0,0};
+struct S23rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S23rtd_Clr1_tst_fsm S23rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAab_}
+ }// end of reduce table
+};
+yacco2::State S23_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{23
+,0,0,0,0,0,(Reduce_tbl*)&S23rt_Clr1_tst_fsm,0,0,0};
+struct S24std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S24std_Clr1_tst_fsm S24st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S25_Clr1_tst_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S24_Clr1_tst_fsm = //State's vectored into symbol: "RB1"
+{24
+,0,0,0,0,(Shift_tbl*)&S24st_Clr1_tst_fsm,0,0,0,0};
+struct S25rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S25rtd_Clr1_tst_fsm S25rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RBab_}
+ }// end of reduce table
+};
+yacco2::State S25_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{25
+,0,0,0,0,0,(Reduce_tbl*)&S25rt_Clr1_tst_fsm,0,0,0};
+struct S26std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S26std_Clr1_tst_fsm S26st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S27_Clr1_tst_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S26_Clr1_tst_fsm = //State's vectored into symbol: "RB2"
+{26
+,0,0,0,0,(Shift_tbl*)&S26st_Clr1_tst_fsm,0,0,0,0};
+struct S27rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S27rtd_Clr1_tst_fsm S27rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RBab_}
+ }// end of reduce table
+};
+yacco2::State S27_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{27
+,0,0,0,0,0,(Reduce_tbl*)&S27rt_Clr1_tst_fsm,0,0,0};
+struct S28rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S28rtd_Clr1_tst_fsm S28rt_Clr1_tst_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RA1_}
+ ,{(Set_tbl*)&LA2_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RA2_}
+ }// end of reduce table
+};
+yacco2::State S28_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{28
+,0,0,0,0,0,(Reduce_tbl*)&S28rt_Clr1_tst_fsm,0,0,0};
+struct S29std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S29std_Clr1_tst_fsm S29st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {117,(State*)&S30_Clr1_tst_fsm} // shift sym: raw_m
+ }// end of shift table
+};
+yacco2::State S29_Clr1_tst_fsm = //State's vectored into symbol: "RAba"
+{29
+,0,0,0,0,(Shift_tbl*)&S29st_Clr1_tst_fsm,0,0,0,0};
+struct S30rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S30rtd_Clr1_tst_fsm S30rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAbaBab_}
+ }// end of reduce table
+};
+yacco2::State S30_Clr1_tst_fsm = //State's vectored into symbol: "m"
+{30
+,0,0,0,0,0,(Reduce_tbl*)&S30rt_Clr1_tst_fsm,0,0,0};
+struct S31std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S31std_Clr1_tst_fsm S31st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {118,(State*)&S32_Clr1_tst_fsm} // shift sym: raw_n
+ }// end of shift table
+};
+yacco2::State S31_Clr1_tst_fsm = //State's vectored into symbol: "RBab"
+{31
+,0,0,0,0,(Shift_tbl*)&S31st_Clr1_tst_fsm,0,0,0,0};
+struct S32rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S32rtd_Clr1_tst_fsm S32rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAbaBab_}
+ }// end of reduce table
+};
+yacco2::State S32_Clr1_tst_fsm = //State's vectored into symbol: "n"
+{32
+,0,0,0,0,0,(Reduce_tbl*)&S32rt_Clr1_tst_fsm,0,0,0};
+struct S33std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S33std_Clr1_tst_fsm S33st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S34_Clr1_tst_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S33_Clr1_tst_fsm = //State's vectored into symbol: "RA1"
+{33
+,0,0,0,0,(Shift_tbl*)&S33st_Clr1_tst_fsm,0,0,0,0};
+struct S34rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S34rtd_Clr1_tst_fsm S34rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAba_}
+ }// end of reduce table
+};
+yacco2::State S34_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{34
+,0,0,0,0,0,(Reduce_tbl*)&S34rt_Clr1_tst_fsm,0,0,0};
+struct S35std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S35std_Clr1_tst_fsm S35st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S36_Clr1_tst_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S35_Clr1_tst_fsm = //State's vectored into symbol: "RA2"
+{35
+,0,0,0,0,(Shift_tbl*)&S35st_Clr1_tst_fsm,0,0,0,0};
+struct S36rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S36rtd_Clr1_tst_fsm S36rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA5_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAba_}
+ }// end of reduce table
+};
+yacco2::State S36_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{36
+,0,0,0,0,0,(Reduce_tbl*)&S36rt_Clr1_tst_fsm,0,0,0};
+struct S37rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S37rtd_Clr1_tst_fsm S37rt_Clr1_tst_fsm = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RB1_}
+ ,{(Set_tbl*)&LA2_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RB2_}
+ }// end of reduce table
+};
+yacco2::State S37_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{37
+,0,0,0,0,0,(Reduce_tbl*)&S37rt_Clr1_tst_fsm,0,0,0};
+struct S38std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S38std_Clr1_tst_fsm S38st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {117,(State*)&S39_Clr1_tst_fsm} // shift sym: raw_m
+ }// end of shift table
+};
+yacco2::State S38_Clr1_tst_fsm = //State's vectored into symbol: "RAab"
+{38
+,0,0,0,0,(Shift_tbl*)&S38st_Clr1_tst_fsm,0,0,0,0};
+struct S39rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S39rtd_Clr1_tst_fsm S39rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAabBba_}
+ }// end of reduce table
+};
+yacco2::State S39_Clr1_tst_fsm = //State's vectored into symbol: "m"
+{39
+,0,0,0,0,0,(Reduce_tbl*)&S39rt_Clr1_tst_fsm,0,0,0};
+struct S40std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S40std_Clr1_tst_fsm S40st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {118,(State*)&S41_Clr1_tst_fsm} // shift sym: raw_n
+ }// end of shift table
+};
+yacco2::State S40_Clr1_tst_fsm = //State's vectored into symbol: "RBba"
+{40
+,0,0,0,0,(Shift_tbl*)&S40st_Clr1_tst_fsm,0,0,0,0};
+struct S41rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S41rtd_Clr1_tst_fsm S41rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAabBba_}
+ }// end of reduce table
+};
+yacco2::State S41_Clr1_tst_fsm = //State's vectored into symbol: "n"
+{41
+,0,0,0,0,0,(Reduce_tbl*)&S41rt_Clr1_tst_fsm,0,0,0};
+struct S42std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S42std_Clr1_tst_fsm S42st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {106,(State*)&S43_Clr1_tst_fsm} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S42_Clr1_tst_fsm = //State's vectored into symbol: "RB1"
+{42
+,0,0,0,0,(Shift_tbl*)&S42st_Clr1_tst_fsm,0,0,0,0};
+struct S43rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S43rtd_Clr1_tst_fsm S43rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RBba_}
+ }// end of reduce table
+};
+yacco2::State S43_Clr1_tst_fsm = //State's vectored into symbol: "b"
+{43
+,0,0,0,0,0,(Reduce_tbl*)&S43rt_Clr1_tst_fsm,0,0,0};
+struct S44std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S44std_Clr1_tst_fsm S44st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S45_Clr1_tst_fsm} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S44_Clr1_tst_fsm = //State's vectored into symbol: "RB2"
+{44
+,0,0,0,0,(Shift_tbl*)&S44st_Clr1_tst_fsm,0,0,0,0};
+struct S45rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S45rtd_Clr1_tst_fsm S45rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA6_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RBba_}
+ }// end of reduce table
+};
+yacco2::State S45_Clr1_tst_fsm = //State's vectored into symbol: "a"
+{45
+,0,0,0,0,0,(Reduce_tbl*)&S45rt_Clr1_tst_fsm,0,0,0};
+struct S46std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S46std_Clr1_tst_fsm S46st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {117,(State*)&S47_Clr1_tst_fsm} // shift sym: raw_m
+ }// end of shift table
+};
+yacco2::State S46_Clr1_tst_fsm = //State's vectored into symbol: "RAba"
+{46
+,0,0,0,0,(Shift_tbl*)&S46st_Clr1_tst_fsm,0,0,0,0};
+struct S47rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S47rtd_Clr1_tst_fsm S47rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs1_RAbaBba_}
+ }// end of reduce table
+};
+yacco2::State S47_Clr1_tst_fsm = //State's vectored into symbol: "m"
+{47
+,0,0,0,0,0,(Reduce_tbl*)&S47rt_Clr1_tst_fsm,0,0,0};
+struct S48std_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S48std_Clr1_tst_fsm S48st_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {118,(State*)&S49_Clr1_tst_fsm} // shift sym: raw_n
+ }// end of shift table
+};
+yacco2::State S48_Clr1_tst_fsm = //State's vectored into symbol: "RBba"
+{48
+,0,0,0,0,(Shift_tbl*)&S48st_Clr1_tst_fsm,0,0,0,0};
+struct S49rtd_Clr1_tst_fsm{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S49rtd_Clr1_tst_fsm S49rt_Clr1_tst_fsm = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Clr1_tst_fsm,Clr1_tst_fsm::rhs2_RAbaBba_}
+ }// end of reduce table
+};
+yacco2::State S49_Clr1_tst_fsm = //State's vectored into symbol: "n"
+{49
+,0,0,0,0,0,(Reduce_tbl*)&S49rt_Clr1_tst_fsm,0,0,0};
diff --git a/web/yacco2/qa/not_lr1_1.cpp b/web/yacco2/qa/not_lr1_1.cpp
new file mode 100644
index 0000000000..bad5958a56
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1.cpp
@@ -0,0 +1,59 @@
+/*
+ File: not_lr1_1.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_1;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 2;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+}
+ Cnot_lr1_1::
+ Cnot_lr1_1()
+ :yacco2::CAbs_fsm
+ ("not_lr1_1.lex"
+ ,"1.0"
+ ,"13-sep-97"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:15 2014 "
+ ,S1_Cnot_lr1_1){
+
+ }
+
+Cnot_lr1_1::~Cnot_lr1_1(){
+
+ for(int x = 0;x < 2;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cnot_lr1_1::failed(){
+ return false;
+ }
+ void Cnot_lr1_1::op(){
+}
+int Cnot_lr1_1::rhs_to_rules_mapping_[4] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+};
+Rnot_lr1_1::Rnot_lr1_1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnot_lr1_1",0,Cnot_lr1_1::R_Rnot_lr1_1_,P,false,false){
+}
+
+RS1::RS1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS1",0,Cnot_lr1_1::R_RS1_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/not_lr1_1.fsc b/web/yacco2/qa/not_lr1_1.fsc
new file mode 100644
index 0000000000..bf4c07f0b2
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1.fsc
@@ -0,0 +1,20 @@
+/*
+ File: not_lr1_1.fsc
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+transitive n
+grammar-name "not_lr1_1"
+name-space "NS_not_lr1_1"
+thread-name "Cnot_lr1_1"
+monolithic y
+file-name "not_lr1_1.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/not_lr1_1.h b/web/yacco2/qa/not_lr1_1.h
new file mode 100644
index 0000000000..ebcd5165c2
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1.h
@@ -0,0 +1,58 @@
+/*
+ File: not_lr1_1.h
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#ifndef __not_lr1_1_h__
+#define __not_lr1_1_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cnot_lr1_1;
+namespace NS_not_lr1_1 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[2];
+};
+class Cnot_lr1_1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rnot_lr1_1_ = 569//start_of_rule_list + 0
+ ,rhs1_Rnot_lr1_1_ = 1
+ ,R_RS1_ = 570//start_of_rule_list + 2
+ ,rhs1_RS1_ = 2
+ ,rhs2_RS1_ = 3
+ };
+ //no of la sets = 2
+ //no of states = 4
+ Cnot_lr1_1();
+ ~Cnot_lr1_1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[4];
+ };
+struct Rnot_lr1_1;
+struct RS1;
+struct Rnot_lr1_1:public yacco2::CAbs_lr1_sym {
+ Rnot_lr1_1(yacco2::Parser* P);
+ public:
+};
+
+struct RS1:public yacco2::CAbs_lr1_sym {
+ RS1(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/not_lr1_1.lex b/web/yacco2/qa/not_lr1_1.lex
new file mode 100644
index 0000000000..996909ed14
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1.lex
@@ -0,0 +1,25 @@
+/*
+$echo FILE: not_lr1_1.lex
+$echo Error --- reduce / reduce conflict
+*/
+/@
+@** |not_lr1_1| grammar.\fbreak
+ Test out a shift conflict on 2 reducing productions.
+@/
+fsm
+ (fsm-id "not_lr1_1.lex",fsm-filename not_lr1_1,fsm-namespace NS_not_lr1_1
+ ,fsm-class Cnot_lr1_1
+ ,fsm-version "1.0",fsm-date "13-sep-97"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rnot_lr1_1(){
+ -> RS1 eog
+ }
+
+ RS1(){
+ -> a
+ -> a
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/not_lr1_1sym.cpp b/web/yacco2/qa/not_lr1_1sym.cpp
new file mode 100644
index 0000000000..c0e63c9e3a
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1sym.cpp
@@ -0,0 +1,69 @@
+/*
+ File: not_lr1_1sym.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_1;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cnot_lr1_1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rnot_lr1_1_:{
+ Rnot_lr1_1* sym;
+ if(re->rule_ == 0){
+ sym = new Rnot_lr1_1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnot_lr1_1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/not_lr1_1tbl.cpp b/web/yacco2/qa/not_lr1_1tbl.cpp
new file mode 100644
index 0000000000..e6b94369b3
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_1tbl.cpp
@@ -0,0 +1,86 @@
+/*
+ File: not_lr1_1tbl.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_1.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_1;// grammar's ns
+// first set terminals
+// LR1_eog
+yacco2::UCHAR LA1_Cnot_lr1_1[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA2_Cnot_lr1_1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_Cnot_lr1_1;
+extern yacco2::State S2_Cnot_lr1_1;
+extern yacco2::State S3_Cnot_lr1_1;
+extern yacco2::State S4_Cnot_lr1_1;
+struct S1std_Cnot_lr1_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_Cnot_lr1_1 S1st_Cnot_lr1_1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S2_Cnot_lr1_1} // shift sym: raw_a
+ ,{569,(State*)&S1_Cnot_lr1_1} // accept sym: Rnot_lr1_1
+ ,{570,(State*)&S3_Cnot_lr1_1} // shift sym: RS1
+ }// end of shift table
+};
+yacco2::State S1_Cnot_lr1_1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cnot_lr1_1,0,0,0,0};
+struct S2rtd_Cnot_lr1_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S2rtd_Cnot_lr1_1 S2rt_Cnot_lr1_1 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cnot_lr1_1,Cnot_lr1_1::rhs1_RS1_}
+ ,{(Set_tbl*)&LA1_Cnot_lr1_1,Cnot_lr1_1::rhs2_RS1_}
+ }// end of reduce table
+};
+yacco2::State S2_Cnot_lr1_1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_Cnot_lr1_1,0,0,0};
+struct S3std_Cnot_lr1_1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cnot_lr1_1 S3st_Cnot_lr1_1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_Cnot_lr1_1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S3_Cnot_lr1_1 = //State's vectored into symbol: "RS1"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cnot_lr1_1,0,0,0,0};
+struct S4rtd_Cnot_lr1_1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cnot_lr1_1 S4rt_Cnot_lr1_1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cnot_lr1_1,Cnot_lr1_1::rhs1_Rnot_lr1_1_}
+ }// end of reduce table
+};
+yacco2::State S4_Cnot_lr1_1 = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cnot_lr1_1,0,0,0};
diff --git a/web/yacco2/qa/not_lr1_2.cpp b/web/yacco2/qa/not_lr1_2.cpp
new file mode 100644
index 0000000000..667f34c091
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2.cpp
@@ -0,0 +1,73 @@
+/*
+ File: not_lr1_2.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_2;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ Cnot_lr1_2::
+ Cnot_lr1_2()
+ :yacco2::CAbs_fsm
+ ("not_lr1_2.lex"
+ ,"1.0"
+ ,"13-sep-97"
+ ,true
+ ,"test out lr1"
+ ,"Mon Oct 13 18:18:15 2014 "
+ ,S1_Cnot_lr1_2){
+
+ }
+
+Cnot_lr1_2::~Cnot_lr1_2(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Cnot_lr1_2::failed(){
+ return false;
+ }
+ void Cnot_lr1_2::op(){
+}
+int Cnot_lr1_2::rhs_to_rules_mapping_[6] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,3 // subrule 5 for rule 4
+};
+Rnot_lr1_2::Rnot_lr1_2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rnot_lr1_2",0,Cnot_lr1_2::R_Rnot_lr1_2_,P,false,false){
+}
+
+RS0::RS0(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS0",0,Cnot_lr1_2::R_RS0_,P,false,false){
+}
+
+RS1::RS1(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS1",0,Cnot_lr1_2::R_RS1_,P,false,false){
+}
+
+RS2::RS2(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS2",0,Cnot_lr1_2::R_RS2_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/not_lr1_2.fsc b/web/yacco2/qa/not_lr1_2.fsc
new file mode 100644
index 0000000000..0426d30f42
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2.fsc
@@ -0,0 +1,20 @@
+/*
+ File: not_lr1_2.fsc
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+transitive n
+grammar-name "not_lr1_2"
+name-space "NS_not_lr1_2"
+thread-name "Cnot_lr1_2"
+monolithic y
+file-name "not_lr1_2.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"test out lr1"
diff --git a/web/yacco2/qa/not_lr1_2.h b/web/yacco2/qa/not_lr1_2.h
new file mode 100644
index 0000000000..79ba9c15a2
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2.h
@@ -0,0 +1,74 @@
+/*
+ File: not_lr1_2.h
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#ifndef __not_lr1_2_h__
+#define __not_lr1_2_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_Cnot_lr1_2;
+namespace NS_not_lr1_2 {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class Cnot_lr1_2: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rnot_lr1_2_ = 569//start_of_rule_list + 0
+ ,rhs1_Rnot_lr1_2_ = 1
+ ,R_RS0_ = 570//start_of_rule_list + 2
+ ,rhs1_RS0_ = 2
+ ,rhs2_RS0_ = 3
+ ,R_RS1_ = 571//start_of_rule_list + 4
+ ,rhs1_RS1_ = 4
+ ,R_RS2_ = 572//start_of_rule_list + 6
+ ,rhs1_RS2_ = 5
+ };
+ //no of la sets = 2
+ //no of states = 7
+ Cnot_lr1_2();
+ ~Cnot_lr1_2();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[6];
+ };
+struct Rnot_lr1_2;
+struct RS0;
+struct RS1;
+struct RS2;
+struct Rnot_lr1_2:public yacco2::CAbs_lr1_sym {
+ Rnot_lr1_2(yacco2::Parser* P);
+ public:
+};
+
+struct RS0:public yacco2::CAbs_lr1_sym {
+ RS0(yacco2::Parser* P);
+ public:
+};
+
+struct RS1:public yacco2::CAbs_lr1_sym {
+ RS1(yacco2::Parser* P);
+ public:
+};
+
+struct RS2:public yacco2::CAbs_lr1_sym {
+ RS2(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/not_lr1_2.lex b/web/yacco2/qa/not_lr1_2.lex
new file mode 100644
index 0000000000..50a1af995f
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2.lex
@@ -0,0 +1,31 @@
+/*
+$echo FILE: not_lr1_2.lex
+$echo Error --- indirect reduce / reduce conflict
+*/
+/@
+@** |not_lr1_2| grammar.\fbreak
+ Test out a shift conflict on 2 reducing productions.
+@/
+fsm
+ (fsm-id "not_lr1_2.lex",fsm-filename not_lr1_2,fsm-namespace NS_not_lr1_2
+ ,fsm-class Cnot_lr1_2
+ ,fsm-version "1.0",fsm-date "13-sep-97"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules
+{
+ Rnot_lr1_2(){
+ -> a RS0 eog
+ }
+
+ RS0(){
+ -> RS1
+ -> RS2
+ }
+ RS1(){
+ -> a
+ }
+ RS2(){
+ -> a
+ }
+} // end of grammar
diff --git a/web/yacco2/qa/not_lr1_2sym.cpp b/web/yacco2/qa/not_lr1_2sym.cpp
new file mode 100644
index 0000000000..224064904d
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2sym.cpp
@@ -0,0 +1,97 @@
+/*
+ File: not_lr1_2sym.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_2;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+Cnot_lr1_2::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rnot_lr1_2_:{
+ Rnot_lr1_2* sym;
+ if(re->rule_ == 0){
+ sym = new Rnot_lr1_2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rnot_lr1_2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_RS0_:{
+ RS0* sym;
+ if(re->rule_ == 0){
+ sym = new RS0(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS0*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_RS0_:{
+ RS0* sym;
+ if(re->rule_ == 0){
+ sym = new RS0(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS0*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RS1_:{
+ RS1* sym;
+ if(re->rule_ == 0){
+ sym = new RS1(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS1*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RS2_:{
+ RS2* sym;
+ if(re->rule_ == 0){
+ sym = new RS2(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS2*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/not_lr1_2tbl.cpp b/web/yacco2/qa/not_lr1_2tbl.cpp
new file mode 100644
index 0000000000..0819e3b565
--- /dev/null
+++ b/web/yacco2/qa/not_lr1_2tbl.cpp
@@ -0,0 +1,133 @@
+/*
+ File: not_lr1_2tbl.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "not_lr1_2.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_not_lr1_2;// grammar's ns
+// first set terminals
+// LR1_eolr
+yacco2::UCHAR LA1_Cnot_lr1_2[] ={
+1
+,0,4
+};
+// LR1_eog
+yacco2::UCHAR LA2_Cnot_lr1_2[] ={
+1
+,0,2
+};
+extern yacco2::State S1_Cnot_lr1_2;
+extern yacco2::State S2_Cnot_lr1_2;
+extern yacco2::State S3_Cnot_lr1_2;
+extern yacco2::State S4_Cnot_lr1_2;
+extern yacco2::State S5_Cnot_lr1_2;
+extern yacco2::State S6_Cnot_lr1_2;
+extern yacco2::State S7_Cnot_lr1_2;
+struct S1std_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S1std_Cnot_lr1_2 S1st_Cnot_lr1_2 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_Cnot_lr1_2} // shift sym: raw_a
+ ,{569,(State*)&S1_Cnot_lr1_2} // accept sym: Rnot_lr1_2
+ }// end of shift table
+};
+yacco2::State S1_Cnot_lr1_2 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_Cnot_lr1_2,0,0,0,0};
+struct S2std_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S2std_Cnot_lr1_2 S2st_Cnot_lr1_2 = {
+ 4
+ ,
+ {// start of table
+ {105,(State*)&S5_Cnot_lr1_2} // shift sym: raw_a
+ ,{570,(State*)&S3_Cnot_lr1_2} // shift sym: RS0
+ ,{571,(State*)&S6_Cnot_lr1_2} // shift sym: RS1
+ ,{572,(State*)&S7_Cnot_lr1_2} // shift sym: RS2
+ }// end of shift table
+};
+yacco2::State S2_Cnot_lr1_2 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Cnot_lr1_2,0,0,0,0};
+struct S3std_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S3std_Cnot_lr1_2 S3st_Cnot_lr1_2 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S4_Cnot_lr1_2} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S3_Cnot_lr1_2 = //State's vectored into symbol: "RS0"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_Cnot_lr1_2,0,0,0,0};
+struct S4rtd_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Cnot_lr1_2 S4rt_Cnot_lr1_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Cnot_lr1_2,Cnot_lr1_2::rhs1_Rnot_lr1_2_}
+ }// end of reduce table
+};
+yacco2::State S4_Cnot_lr1_2 = //State's vectored into symbol: "eog"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Cnot_lr1_2,0,0,0};
+struct S5rtd_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S5rtd_Cnot_lr1_2 S5rt_Cnot_lr1_2 = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cnot_lr1_2,Cnot_lr1_2::rhs1_RS1_}
+ ,{(Set_tbl*)&LA2_Cnot_lr1_2,Cnot_lr1_2::rhs1_RS2_}
+ }// end of reduce table
+};
+yacco2::State S5_Cnot_lr1_2 = //State's vectored into symbol: "a"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Cnot_lr1_2,0,0,0};
+struct S6rtd_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Cnot_lr1_2 S6rt_Cnot_lr1_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cnot_lr1_2,Cnot_lr1_2::rhs1_RS0_}
+ }// end of reduce table
+};
+yacco2::State S6_Cnot_lr1_2 = //State's vectored into symbol: "RS1"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Cnot_lr1_2,0,0,0};
+struct S7rtd_Cnot_lr1_2{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Cnot_lr1_2 S7rt_Cnot_lr1_2 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Cnot_lr1_2,Cnot_lr1_2::rhs2_RS0_}
+ }// end of reduce table
+};
+yacco2::State S7_Cnot_lr1_2 = //State's vectored into symbol: "RS2"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Cnot_lr1_2,0,0,0};
diff --git a/web/yacco2/qa/o2_sdc.h b/web/yacco2/qa/o2_sdc.h
new file mode 100644
index 0000000000..bebf52da4c
--- /dev/null
+++ b/web/yacco2/qa/o2_sdc.h
@@ -0,0 +1,100 @@
+/*
+ File: o2_sdc.h
+ Date and Time: Fri Oct 24 08:20:24 2014
+*/
+#ifndef __o2_sdc_h__
+#define __o2_sdc_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+
+#include "cweb_or_c_k.h"
+#include "c_string.h"
+#include "c_literal.h"
+#include "o2_code_end.h"
+extern char PRT_SW;
+
+extern yacco2::Thread_entry ITH_o2_sdc;
+
+extern yacco2::State S1_Co2_sdc;
+namespace NS_o2_sdc {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_o2_sdc(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_o2_sdc(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[3];
+};
+class Co2_sdc: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Ryacco2_syntax_code_ = 569//start_of_rule_list + 0
+ ,rhs1_Ryacco2_syntax_code_ = 1
+ ,R_Rchrs_ = 570//start_of_rule_list + 2
+ ,rhs1_Rchrs_ = 2
+ ,rhs2_Rchrs_ = 3
+ ,R_Rchr_ = 571//start_of_rule_list + 4
+ ,rhs1_Rchr_ = 4
+ ,rhs2_Rchr_ = 5
+ ,rhs3_Rchr_ = 6
+ ,rhs4_Rchr_ = 7
+ ,rhs5_Rchr_ = 8
+ ,rhs6_Rchr_ = 9
+ ,rhs7_Rchr_ = 10
+ };
+ //no of la sets = 2
+ //no of states = 12
+ Co2_sdc();
+ ~Co2_sdc();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[11];
+
+ public:
+ char ddd_[1024*32];
+ int ddd_idx_;
+ void copy_str_into_buffer(std::string* Str);
+ void copy_kstr_into_buffer(const char* Str);
+
+ };
+struct Ryacco2_syntax_code;
+struct Rchrs;
+struct Rchr;
+struct Ryacco2_syntax_code:public yacco2::CAbs_lr1_sym {
+ Ryacco2_syntax_code(yacco2::Parser* P);
+ void op();
+ public:
+};
+
+struct Rchrs:public yacco2::CAbs_lr1_sym {
+ Rchrs(yacco2::Parser* P);
+ public:
+};
+
+struct Rchr:public yacco2::CAbs_lr1_sym {
+ Rchr(yacco2::Parser* P);
+ void op();
+ public:
+ void sr1();
+ void sr2();
+ void sr3();
+ void sr4();
+ void sr5();
+ void sr6();
+ void sr7();
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/o2_sdcsym.cpp b/web/yacco2/qa/o2_sdcsym.cpp
new file mode 100644
index 0000000000..f96f176c42
--- /dev/null
+++ b/web/yacco2/qa/o2_sdcsym.cpp
@@ -0,0 +1,203 @@
+/*
+ File: o2_sdcsym.cpp
+ Date and Time: Sat Oct 18 20:34:23 2014
+*/
+#include "o2_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_sdc;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_o2_sdc::TH_o2_sdc(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_o2_sdc;
+ NS_o2_sdc::Co2_sdc Co2_sdc_;// parallel-parser's parse table
+#define ssPARSE_TABLE Co2_sdc_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_o2_sdc::PROC_TH_o2_sdc(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_o2_sdc";
+ static bool one_time(false);
+ static NS_o2_sdc::Co2_sdc* NS_o2_sdc_Co2_sdc_(0);// parallel-parser's fsm table
+ static Parser* NS_o2_sdc_Co2_sdc_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_o2_sdc_Co2_sdc_ = new NS_o2_sdc::Co2_sdc();// parallel-parser's fsm table
+ NS_o2_sdc_Co2_sdc_parser = new Parser(*NS_o2_sdc_Co2_sdc_,Caller_pp);
+ }
+ proc_parser = NS_o2_sdc_Co2_sdc_parser;
+#include "wproc_pp_core.h"
+}
+void
+Co2_sdc::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Ryacco2_syntax_code_:{
+ Ryacco2_syntax_code* sym;
+ if(re->rule_ == 0){
+ sym = new Ryacco2_syntax_code(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ryacco2_syntax_code*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->op();
+ return;}
+ case rhs1_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Rchrs_:{
+ Rchrs* sym;
+ if(re->rule_ == 0){
+ sym = new Rchrs(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchrs*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr1();
+ sym->op();
+ return;}
+ case rhs2_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr2();
+ sym->op();
+ return;}
+ case rhs3_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr3();
+ sym->op();
+ return;}
+ case rhs4_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr4();
+ sym->op();
+ return;}
+ case rhs5_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr5();
+ sym->op();
+ return;}
+ case rhs6_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ sym->sr6();
+ sym->op();
+ return;}
+ case rhs7_Rchr_:{
+ Rchr* sym;
+ if(re->rule_ == 0){
+ sym = new Rchr(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rchr*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ sym->sr7();
+ sym->op();
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/o2_sdctbl.cpp b/web/yacco2/qa/o2_sdctbl.cpp
new file mode 100644
index 0000000000..d290a08f0f
--- /dev/null
+++ b/web/yacco2/qa/o2_sdctbl.cpp
@@ -0,0 +1,1514 @@
+/*
+ File: o2_sdctbl.cpp
+ Date and Time: Sat Oct 18 20:34:23 2014
+*/
+#include "o2_sdc.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_o2_sdc;// grammar's ns
+// first set terminals
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// LR1_eog
+// LR1_reduce_operator
+// LR1_all_shift_operator
+yacco2::UCHAR LA1_Co2_sdc[] ={
+72
+,0,82
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+// raw_nul
+// raw_soh
+// raw_stx
+// raw_etx
+// raw_eot
+// raw_enq
+// raw_ack
+// raw_bel
+// raw_bs
+// raw_ht
+// raw_lf
+// raw_vt
+// raw_ff
+// raw_cr
+// raw_so
+// raw_si
+// raw_dle
+// raw_dc1
+// raw_dc2
+// raw_dc3
+// raw_dc4
+// raw_nak
+// raw_syn
+// raw_etb
+// raw_can
+// raw_em
+// raw_sub
+// raw_esc
+// raw_fs
+// raw_gs
+// raw_rs
+// raw_us
+// raw_sp
+// raw_exclam
+// raw_dbl_quote
+// raw_no_sign
+// raw_dollar_sign
+// raw_percent
+// raw_ampersign
+// raw_right_quote
+// raw_open_bracket
+// raw_close_bracket
+// raw_asteric
+// raw_plus
+// raw_comma
+// raw_minus
+// raw_period
+// raw_slash
+// raw_0
+// raw_1
+// raw_2
+// raw_3
+// raw_4
+// raw_5
+// raw_6
+// raw_7
+// raw_8
+// raw_9
+// raw_colon
+// raw_semi_colon
+// raw_less_than
+// raw_eq
+// raw_gt_than
+// raw_question_mark
+// raw_at_sign
+// raw_A
+// raw_B
+// raw_C
+// raw_D
+// raw_E
+// raw_F
+// raw_G
+// raw_H
+// raw_I
+// raw_J
+// raw_K
+// raw_L
+// raw_M
+// raw_N
+// raw_O
+// raw_P
+// raw_Q
+// raw_R
+// raw_S
+// raw_T
+// raw_U
+// raw_V
+// raw_W
+// raw_X
+// raw_Y
+// raw_Z
+// raw_open_sq_bracket
+// raw_back_slash
+// raw_close_sq_bracket
+// raw_up_arrow
+// raw_under_score
+// raw_left_quote
+// raw_a
+// raw_b
+// raw_c
+// raw_d
+// raw_e
+// raw_f
+// raw_g
+// raw_h
+// raw_i
+// raw_j
+// raw_k
+// raw_l
+// raw_m
+// raw_n
+// raw_o
+// raw_p
+// raw_q
+// raw_r
+// raw_s
+// raw_t
+// raw_u
+// raw_v
+// raw_w
+// raw_x
+// raw_y
+// raw_z
+// raw_open_brace
+// raw_vertical_line
+// raw_close_brace
+// raw_tilde
+// raw_del
+// raw_x80
+// raw_x81
+// raw_x82
+// raw_x83
+// raw_x84
+// raw_x85
+// raw_x86
+// raw_x87
+// raw_x88
+// raw_x89
+// raw_x8a
+// raw_x8b
+// raw_x8c
+// raw_x8d
+// raw_x8e
+// raw_x8f
+// raw_x90
+// raw_x91
+// raw_x92
+// raw_x93
+// raw_x94
+// raw_x95
+// raw_x96
+// raw_x97
+// raw_x98
+// raw_x99
+// raw_x9a
+// raw_x9b
+// raw_x9c
+// raw_x9d
+// raw_x9e
+// raw_x9f
+// raw_xa0
+// raw_xa1
+// raw_xa2
+// raw_xa3
+// raw_xa4
+// raw_xa5
+// raw_xa6
+// raw_xa7
+// raw_xa8
+// raw_xa9
+// raw_xaa
+// raw_xab
+// raw_xac
+// raw_xad
+// raw_xae
+// raw_xaf
+// raw_xb0
+// raw_xb1
+// raw_xb2
+// raw_xb3
+// raw_xb4
+// raw_xb5
+// raw_xb6
+// raw_xb7
+// raw_xb8
+// raw_xb9
+// raw_xba
+// raw_xbb
+// raw_xbc
+// raw_xbd
+// raw_xbe
+// raw_xbf
+// raw_xc0
+// raw_xc1
+// raw_xc2
+// raw_xc3
+// raw_xc4
+// raw_xc5
+// raw_xc6
+// raw_xc7
+// raw_xc8
+// raw_xc9
+// raw_xca
+// raw_xcb
+// raw_xcc
+// raw_xcd
+// raw_xce
+// raw_xcf
+// raw_xd0
+// raw_xd1
+// raw_xd2
+// raw_xd3
+// raw_xd4
+// raw_xd5
+// raw_xd6
+// raw_xd7
+// raw_xd8
+// raw_xd9
+// raw_xda
+// raw_xdb
+// raw_xdc
+// raw_xdd
+// raw_xde
+// raw_xdf
+// raw_xe0
+// raw_xe1
+// raw_xe2
+// raw_xe3
+// raw_xe4
+// raw_xe5
+// raw_xe6
+// raw_xe7
+// raw_xe8
+// raw_xe9
+// raw_xea
+// raw_xeb
+// raw_xec
+// raw_xed
+// raw_xee
+// raw_xef
+// raw_xf0
+// raw_xf1
+// raw_xf2
+// raw_xf3
+// raw_xf4
+// raw_xf5
+// raw_xf6
+// raw_xf7
+// raw_xf8
+// raw_xf9
+// raw_xfa
+// raw_xfb
+// raw_xfc
+// raw_xfd
+// raw_xfe
+// raw_xff
+// T_option_t
+// T_option_p
+// T_option_err
+// T_esc_seq
+// T_eol
+// T_basic_char
+// T_raw_char
+// T_comment
+// T_ws
+// T_angled_string
+// T_c_literal
+// T_c_string
+// T_xc_str
+// T_unquoted_string
+// T_file_inclusion
+// T_identifier
+// T_int_no
+// T_raw_characters
+// T_lr1_constant_symbols
+// T_error_symbols
+// T_eocode
+// T_AD
+// T_AB
+// T_parallel_la_boundary
+// T_arbitrator_code
+// T_parallel_parser
+// T_parallel_thread_function
+// T_parallel_control_monitor
+// T_fsm
+// T_fsm_id
+// T_fsm_filename
+// T_fsm_namespace
+// T_fsm_class
+// T_fsm_version
+// T_fsm_date
+// T_fsm_debug
+// T_fsm_comments
+// T_terminals
+// T_enumeration
+// T_file_name
+// T_name_space
+// T_sym_class
+// T_rules
+// T_lhs
+// T_user_declaration
+// T_user_prefix_declaration
+// T_user_suffix_declaration
+// T_constructor
+// T_destructor
+// T_op
+// T_failed
+// T_user_implementation
+// T_user_imp_tbl
+// T_user_imp_sym
+// T_constant_defs
+// T_terminals_refs
+// T_terminals_sufx
+// T_lrk_sufx
+// T_selector
+// T_NULL
+// T_2colon
+// T_block
+// T_syntax_code
+// T_fsm_class_phrase
+// T_fsm_phrase
+// T_parallel_parser_phrase
+// T_enum_phrase
+// T_terminal_def
+// table_entry
+// T_sym_tbl_report_card
+// T_terminals_phrase
+// T_error_symbols_phrase
+// T_lr1_k_phrase
+// T_rc_phrase
+// T_rule_lhs_phrase
+// T_parallel_monitor_phrase
+// rule_def
+// T_rules_phrase
+// T_subrule_def
+// T_subrules_phrase
+// T_in_stbl
+// refered_T
+// rule_in_stbl
+// refered_rule
+// T_transitive
+// T_grammar_name
+// T_thread_name
+// T_monolithic
+// T_no_of_T
+// T_list_of_native_first_set_terminals
+// T_end_list_of_native_first_set_terminals
+// T_list_of_transitive_threads
+// T_end_list_of_transitive_threads
+// T_emitfile
+// T_preamble
+// T_end_preamble
+// T_T_alphabet
+// T_end_T_alphabet
+// T_file_of_T_alphabet
+// T_attributes
+// tth_in_stbl
+// thread_attributes
+// th_in_stbl
+// kw_in_stbl
+// T_la_expr_src
+// T_eosubrule
+// T_called_thread_eosubrule
+// T_null_call_thread_eosubrule
+// T_cweb_comment
+// T_grammar_phrase
+// T_cweb_marker
+// T_lint
+// T_list_of_used_threads
+// T_end_list_of_used_threads
+// Err_nested_files_exceeded
+// Err_no_end_of_code
+// Err_no_cmd_lne_data
+// Err_no_filename
+// Err_bad_filename
+// Err_bad_fsmheader_filename
+// Err_bad_fsmcpp_filename
+// Err_bad_fsmsym_filename
+// Err_bad_fsmtbl_filename
+// Err_bad_enum_filename
+// Err_bad_errors_hdrfilename
+// Err_bad_errors_impfilename
+// Err_bad_cmd_lne_opt
+// Err_bad_int_no
+// Err_bad_int_no_range
+// Err_no_int_present
+// Err_bad_eos
+// Err_bad_esc
+// Err_comment_overrun
+// Err_bad_char
+// Err_bad_univ_seq
+// Err_improper_closing_of_rules
+// Err_no_identifier_present
+// Err_no_directive_present
+// Err_duplicate_directive
+// Err_no_syntax_code_present
+// Err_no_open_parenthesis
+// Err_no_close_parenthesis
+// Err_no_fsm_id_present
+// Err_no_fsm_id_string
+// Err_no_fsm_filename_present
+// Err_no_fsm_filename_id_present
+// Err_no_comma_present
+// Err_no_terminal_key_present
+// Err_no_fsm_namespace_present
+// Err_no_fsm_namespace_id_present
+// Err_no_fsm_class_present
+// Err_no_fsm_version_present
+// Err_no_fsm_version_string
+// Err_no_fsm_date_present
+// Err_no_fsm_date_string
+// Err_no_fsm_debug_present
+// Err_no_fsm_debug_string
+// Err_no_fsm_comments_present
+// Err_no_fsm_comments_string
+// Err_fsm_debug_string_not_true_or_false
+// Err_no_pp_thread_function_present
+// Err_no_pp_ctrl_mntor_kw_present
+// Err_no_pp_fnct_id_present
+// Err_no_pp_bndry_present
+// Err_no_pp_la_bndary_expr_present
+// Err_no_syntax_code_end_present
+// Err_no_pp_code_present
+// Err_no_pp_code_stc_present
+// Err_not_arbitration_code_kw
+// Err_no_open_brace
+// Err_no_close_brace
+// Err_no_constant_defs_present
+// Err_no_filename_present
+// Err_no_filename_id_present
+// Err_no_namespace_present
+// Err_no_namespace_id_present
+// Err_no_kdefs_code_present
+// Err_no_kdefs_kw_present
+// Err_no_tdef_code_present
+// Err_no_sym_defs_present
+// Err_dup_entry_in_alphabet
+// Err_already_defined_AB
+// Err_already_defined_AD
+// Err_improper_directive
+// Err_no_sym_class_present
+// Err_no_sym_class_id_present
+// Err_zero_len_sym
+// Err_sym_tbl_full
+// Err_sym_tbl_char_pool_full
+// Err_dup_entry_in_sym_table
+// Err_subscript_out_of_range
+// Err_sym_tbl_nested_scope_stk_overflow
+// Err_sym_tbl_nested_scope_stk_underflow
+// Err_sym_tbl_context_buf_overflow
+// Err_report_card_ptr_0
+// Err_cannot_define_term_after_sufx_dir
+// Err_dup_sufx_directive
+// Err_terminals_refs_def_after_terminals
+// Err_terminals_refs_dup_def
+// Err_no_rule_name_present
+// Err_no_sub_rule_present
+// Err_subrule_use_undefined_T
+// Err_stbl_entry_unknown
+// Err_subrule_overrun
+// Err_stble_has_entry_but_not_a_rule
+// Err_file_of_T_alphabet_kw_not_present
+// Err_emitfile_kw_not_present
+// Err_preamble_kw_not_present
+// Err_preamble_srce_code_not_present
+// Err_end_preamble_kw_not_present
+// Err_cmd_line_chaffe
+// Err_T_alphabet_kw_not_present
+// Err_T_alphabet_file_not_present
+// Err_end_T_alphabet_kw_not_present
+// Err_no_terminals_in_T_alphabet_list
+// Err_rotten_chr_in_T_alphabet
+// Err_transitive_kw_not_present
+// Err_grammar_name_kw_not_present
+// Err_namespace_kw_not_present
+// Err_filename_kw_not_present
+// Err_threadname_kw_not_present
+// Err_monolithic_kw_not_present
+// Err_no_of_T_kw_not_present
+// Err_list_of_terminals_kw_not_present
+// Err_no_list_of_trans_threads_kw
+// Err_no_terminals_present_in_T_alphabet
+// Err_transitive_value_bad
+// Err_monolithic_value_bad
+// Err_grammar_name_value_not_present
+// Err_namespace_value_not_present
+// Err_threadname_value_not_present
+// Err_filename_value_not_present
+// Err_no_of_T_value_not_present
+// Err_no_of_terminals_not_present
+// Err_end_list_native_T_kw_not_present
+// Err_end_list_of_transitive_threads_kw_not_present
+// Err_no_of_native_Ts_in_list_not_equal
+// Err_no_of_threads_in_list_not_equal
+// Err_thread_refed_but_not_defined
+// Err_bad_T_in_list
+// Err_bad_th_in_list
+// Err_already_defined_in_fsc_file
+// Err_bad_thread_subscript
+// Err_not_a_keyword
+// Err_no_of_threads_not_present
+// Err_bad_T_alphabet
+// Err_fsc_file_does_not_exist
+// Err_filename_file_does_not_exist
+// Err_T_alphabet_file_does_not_exist
+// Err_emitfile_file_does_not_exist
+// Err_emitfile_file_not_present
+// Err_fsc_cntl_file_not_present
+// Err_file_of_T_alphabet_not_present
+// Err_epsilon_pass_thru
+// Err_epsilon_pass_thru_no_Ts
+// Err_rule_not_in_stbl
+// Err_T_not_in_stbl
+// Err_bad_directive
+// Err_bad_term_in_la_expr
+// Err_empty_set_removal_in_la_expr
+// Err_bad_operator_in_la_expr
+// Err_not_a_lhs_kw
+// Err_pp_la_boundary_attribute_not_fnd
+// Err_already_processed_fsm_phase
+// Err_already_processed_pp_phase
+// Err_already_processed_T_enum_phase
+// Err_already_processed_error_phase
+// Err_already_processed_rc_phase
+// Err_already_processed_lrk_phase
+// Err_already_processed_T_phase
+// Err_already_processed_rule_phase
+// Err_not_T_for_rtned_token_from_th
+// Err_not_id_for_ns_in_th_stmt
+// Err_not_id_for_th_name_in_th_stmt
+// Err_bad_th_qualifier
+// Err_not_dbl_colon_in_th_stmt
+// Err_not_T_or_R_in_subrule_expr
+// Err_not_T_or_R_or_eos_in_subrule_expr
+// Err_not_eos_in_subrule_expr
+// Err_invalid_logical_name
+// Err_invalid_logical_value
+// Err_duplicate_logical_name
+// Err_missing_terminals_refs_kw
+// Err_missing_terminals_sufx_kw
+// Err_not_a_terminal_definition
+// Err_missing_lrk_sufx_kw
+// ERR_sick_grammar
+// ERR_no_fsm_phrase
+// ERR_no_T_enum_phrase
+// ERR_no_lrk_phrase
+// ERR_no_rc_phrase
+// ERR_no_errors_phrase
+// ERR_no_terminals_phrase
+// ERR_no_rules_phrase
+// Err_used_rule_but_undefined
+// Err_rule_already_defined
+// Err_la_expr_calc_empty_set
+// Err_no_close_brace_ending_rules_defs
+// Err_use_of_T_outside_Rules_construct
+// Err_not_kw_defining_grammar_construct
+// Err_use_of_N_outside_Rules_construct
+// Err_misplaced_or_misspelt_Rule_or_T
+// Err_not_a_Rule
+// Err_empty_file
+// Err_not_lhs_pcnrl_mntr
+// LR1_eog
+yacco2::UCHAR LA2_Co2_sdc[] ={
+72
+,0,2
+,1,255
+,2,255
+,3,255
+,4,255
+,5,255
+,6,255
+,7,255
+,8,255
+,9,255
+,10,255
+,11,255
+,12,255
+,13,255
+,14,255
+,15,255
+,16,255
+,17,255
+,18,255
+,19,255
+,20,255
+,21,255
+,22,255
+,23,255
+,24,255
+,25,255
+,26,255
+,27,255
+,28,255
+,29,255
+,30,255
+,31,255
+,32,255
+,33,255
+,34,255
+,35,255
+,36,255
+,37,255
+,38,255
+,39,255
+,40,255
+,41,255
+,42,255
+,43,255
+,44,255
+,45,255
+,46,255
+,47,255
+,48,255
+,49,255
+,50,255
+,51,255
+,52,255
+,53,255
+,54,255
+,55,255
+,56,255
+,57,255
+,58,255
+,59,255
+,60,255
+,61,255
+,62,255
+,63,255
+,64,255
+,65,255
+,66,255
+,67,255
+,68,255
+,69,255
+,70,255
+,71,1
+};
+extern yacco2::State S1_Co2_sdc;
+extern yacco2::State S2_Co2_sdc;
+struct S2ttd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[4];
+};
+S2ttd_Co2_sdc S2tt_Co2_sdc = {
+ 4 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITH_cweb_or_c_k
+ ,(yacco2::Thread_entry*)&ITH_c_literal
+ ,(yacco2::Thread_entry*)&ITH_c_string
+ ,(yacco2::Thread_entry*)&ITH_o2_code_end
+};
+extern yacco2::State S3_Co2_sdc;
+extern yacco2::State S4_Co2_sdc;
+extern yacco2::State S5_Co2_sdc;
+extern yacco2::State S6_Co2_sdc;
+extern yacco2::State S7_Co2_sdc;
+extern yacco2::State S8_Co2_sdc;
+extern yacco2::State S9_Co2_sdc;
+extern yacco2::State S10_Co2_sdc;
+extern yacco2::State S11_Co2_sdc;
+extern yacco2::State S12_Co2_sdc;
+struct S1std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[5];
+};
+S1std_Co2_sdc S1st_Co2_sdc = {
+ 5
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_sdc} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Co2_sdc} // shift sym: LR1_all_shift_operator
+ ,{569,(State*)&S1_Co2_sdc} // accept sym: Ryacco2_syntax_code
+ ,{570,(State*)&S10_Co2_sdc} // shift sym: Rchrs
+ ,{571,(State*)&S12_Co2_sdc} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Co2_sdc = {3,(State*)&S2_Co2_sdc};
+yacco2::Shift_entry S1ase_Co2_sdc = {6,(State*)&S9_Co2_sdc};
+yacco2::State S1_Co2_sdc = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Co2_sdc,(Shift_entry*)&S1ase_Co2_sdc
+,0,0,(Shift_tbl*)&S1st_Co2_sdc,0,(State_s_thread_tbl*)&S2tt_Co2_sdc,0,0};
+struct S2std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[6];
+};
+S2std_Co2_sdc S2st_Co2_sdc = {
+ 6
+ ,
+ {// start of table
+ {0,(State*)&S3_Co2_sdc} // shift sym: LR1_questionable_shift_operator
+ ,{271,(State*)&S4_Co2_sdc} // shift sym: T_comment
+ ,{274,(State*)&S5_Co2_sdc} // shift sym: T_c_literal
+ ,{275,(State*)&S6_Co2_sdc} // shift sym: T_c_string
+ ,{284,(State*)&S7_Co2_sdc} // shift sym: T_eocode
+ ,{372,(State*)&S8_Co2_sdc} // shift sym: T_cweb_comment
+ }// end of shift table
+};
+yacco2::Shift_entry S2qse_Co2_sdc = {0,(State*)&S3_Co2_sdc};
+yacco2::State S2_Co2_sdc = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Co2_sdc,0,0,0,(Shift_entry*)&S2qse_Co2_sdc
+};
+struct S3rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Co2_sdc S3rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs7_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S3_Co2_sdc = //State's vectored into symbol: "|?|"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Co2_sdc,0,0,0};
+struct S4rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Co2_sdc S4rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs1_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S4_Co2_sdc = //State's vectored into symbol: "comment"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Co2_sdc,0,0,0};
+struct S5rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S5rtd_Co2_sdc S5rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs4_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S5_Co2_sdc = //State's vectored into symbol: "c-literal"
+{5
+,0,0,0,0,0,(Reduce_tbl*)&S5rt_Co2_sdc,0,0,0};
+struct S6rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S6rtd_Co2_sdc S6rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs3_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S6_Co2_sdc = //State's vectored into symbol: "c-string"
+{6
+,0,0,0,0,0,(Reduce_tbl*)&S6rt_Co2_sdc,0,0,0};
+struct S7rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Co2_sdc S7rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs5_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S7_Co2_sdc = //State's vectored into symbol: "#***"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Co2_sdc,0,0,0};
+struct S8rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Co2_sdc S8rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs2_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S8_Co2_sdc = //State's vectored into symbol: "cweb-comment"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Co2_sdc,0,0,0};
+struct S9rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Co2_sdc S9rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs6_Rchr_}
+ }// end of reduce table
+};
+yacco2::State S9_Co2_sdc = //State's vectored into symbol: "|+|"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_Co2_sdc,0,0,0};
+struct S10std_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S10std_Co2_sdc S10st_Co2_sdc = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S2_Co2_sdc} // shift sym: LR1_parallel_operator
+ ,{6,(State*)&S9_Co2_sdc} // shift sym: LR1_all_shift_operator
+ ,{571,(State*)&S11_Co2_sdc} // shift sym: Rchr
+ }// end of shift table
+};
+yacco2::Shift_entry S10pse_Co2_sdc = {3,(State*)&S2_Co2_sdc};
+yacco2::Shift_entry S10ase_Co2_sdc = {6,(State*)&S9_Co2_sdc};
+struct S10rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Co2_sdc S10rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Co2_sdc,Co2_sdc::rhs1_Ryacco2_syntax_code_}
+ }// end of reduce table
+};
+yacco2::State S10_Co2_sdc = //State's vectored into symbol: "Rchrs"
+{10
+,(Shift_entry*)&S10pse_Co2_sdc,(Shift_entry*)&S10ase_Co2_sdc
+,0,0,(Shift_tbl*)&S10st_Co2_sdc,(Reduce_tbl*)&S10rt_Co2_sdc,(State_s_thread_tbl*)&S2tt_Co2_sdc,0,0};
+struct S11rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Co2_sdc S11rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs2_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S11_Co2_sdc = //State's vectored into symbol: "Rchr"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Co2_sdc,0,0,0};
+struct S12rtd_Co2_sdc{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S12rtd_Co2_sdc S12rt_Co2_sdc = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Co2_sdc,Co2_sdc::rhs1_Rchrs_}
+ }// end of reduce table
+};
+yacco2::State S12_Co2_sdc = //State's vectored into symbol: "Rchr"
+{12
+,0,0,0,0,0,(Reduce_tbl*)&S12rt_Co2_sdc,0,0,0};
diff --git a/web/yacco2/qa/o2_testsuite.sh b/web/yacco2/qa/o2_testsuite.sh
new file mode 100755
index 0000000000..9e0f97b648
--- /dev/null
+++ b/web/yacco2/qa/o2_testsuite.sh
@@ -0,0 +1,226 @@
+#! /bin/sh
+# file: o2_testsuite.bat
+# test suite for o2
+echo "////////////////////////////////////////"
+echo "////////////o2_testsuite.bat////////////"
+echo "////////////testing syntax part of o2///"
+echo "////////////////////////////////////////"
+qa="/usr/local/yacco2/qa/"
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+sw1=
+sw2=
+sw3=
+sw4=
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $1"
+ eval "$o2 $sw1 $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+cc_lex "$qa"fsm_class_phrase4.dat "$qa"fsm_class_phrase4
+cc_lex "$qa"fsm_class_phrase5.dat "$qa"fsm_class_phrase5
+echo "//////////////////////////////test out cli options/////////////"
+echo "bad rc cli switch deprecated"
+sw1=-rc
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad lrk cli switch deprecated"
+sw1=-lrk
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad prefix cli switch"
+sw1=-e
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad prefix cli switch"
+sw1=-er
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad too long overrun cli switch"
+sw1=-errr
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad cli switch"
+sw1=-n
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad cli switch"
+sw1=-tT
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad cli switch"
+sw1=-lr
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+echo "bad cli switch --- act as a file name"
+sw1=/x
+cc_lex "$qa"lr1_sp2.dat "$qa"lr1_sp2
+echo "bad cli switch deprecated"
+sw1=-pp
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+cc_lex "$qa"lr1_sp21.lex "$qa"lr1_sp2
+echo "all switches good"
+sw1="-err -t -p"
+echo "//////////////////////////////finished test out cli options/////////////"
+sw1=" "
+cc_lex "$qa"file_include1.dat "$qa"file_include1
+cc_lex "$qa"file_include2.dat "$qa"file_include2
+cc_lex "$qa"fsm_class_phrase.dat "$qa"fsm_class_phrase
+cc_lex "$qa"fsm_class_phrase1.dat "$qa"fsm_class_phrase1
+cc_lex "$qa"fsm_class_phrase2.dat "$qa"fsm_class_phrase2
+cc_lex "$qa"fsm_class_phrase3.dat "$qa"fsm_class_phrase3
+cc_lex "$qa"fsm_class_phrase4.dat "$qa"fsm_class_phrase4
+cc_lex "$qa"fsm_class_phrase5.dat "$qa"fsm_class_phrase5
+cc_lex "$qa"fsm_class_phrase6.dat "$qa"fsm_class_phrase6
+cc_lex "$qa"fsm_class_phrase7.dat "$qa"fsm_class_phrase7
+cc_lex "$qa"fsm_class_phrase8.dat "$qa"fsm_class_phrase8
+cc_lex "$qa"fsm_class_phrase9.dat "$qa"fsm_class_phrase9
+cc_lex "$qa"fsm_class_phrase10.dat "$qa"fsm_class_phrase10
+cc_lex "$qa"fsm_class_phrase11.dat "$qa"fsm_class_phrase11
+cc_lex "$qa"fsm_class_phrase12.dat "$qa"fsm_class_phrase12
+cc_lex "$qa"fsm_class_phrase13.dat "$qa"fsm_class_phrase13
+cc_lex "$qa"fsm_class_phrase14.dat "$qa"fsm_class_phrase14
+cc_lex "$qa"fsm_class_phrase15.dat "$qa"fsm_class_phrase15
+
+cc_lex "$qa"rule1.dat "$qa"rule1
+cc_lex "$qa"rule2.dat "$qa"rule2
+cc_lex "$qa"rule3.dat "$qa"rule3
+cc_lex "$qa"rule4.dat "$qa"rule4
+cc_lex "$qa"rule5.dat "$qa"rule5
+cc_lex "$qa"rule6.dat "$qa"rule6
+cc_lex "$qa"rule7.dat "$qa"rule7
+cc_lex "$qa"rule8.dat "$qa"rule8
+cc_lex "$qa"rule9.dat "$qa"rule9
+
+cc_lex "$qa"rule_test2.dat "$qa"rule_test2
+cc_lex "$qa"t_enum.dat "$qa"t_enum
+cc_lex "$qa"t_enum1.dat "$qa"t_enum1
+cc_lex "$qa"t_enum10.dat "$qa"t_enum10
+cc_lex "$qa"t_enum11.dat "$qa"t_enum11
+cc_lex "$qa"t_enum2.dat "$qa"t_enum2
+cc_lex "$qa"t_enum3.dat "$qa"t_enum3
+cc_lex "$qa"t_enum4.dat "$qa"t_enum4
+cc_lex "$qa"t_enum5.dat "$qa"t_enum5
+cc_lex "$qa"t_enum6.dat "$qa"t_enum6
+cc_lex "$qa"t_enum7.dat "$qa"t_enum7
+cc_lex "$qa"t_enum8.dat "$qa"t_enum8
+cc_lex "$qa"t_enum9.dat "$qa"t_enum9
+cc_lex "$qa"term_test1.dat "$qa"term_test1
+cc_lex "$qa"term_test2.dat "$qa"term_test2
+cc_lex "$qa"term_test3.dat "$qa"term_test3
+cc_lex "$qa"term_test4.dat "$qa"term_test4
+cc_lex "$qa"term_test5.dat "$qa"term_test5
+cc_lex "$qa"term_test6.dat "$qa"term_test6
+cc_lex "$qa"term_test7.dat "$qa"term_test7
+cc_lex "$qa"term_test8.dat "$qa"term_test8
+cc_lex "$qa"term_test9.dat "$qa"term_test9
+
+cc_lex "$qa"parallel_parser1.dat "$qa"parallel_parser1
+cc_lex "$qa"parallel_parser2.dat "$qa"parallel_parser2
+
+cc_lex "$qa"fsm_op.dat "$qa"fsm_op
+cc_lex "$qa"fsm_op1.dat "$qa"fsm_op1
+cc_lex "$qa"fsm_op10.dat "$qa"fsm_op10
+cc_lex "$qa"fsm_op2.dat "$qa"fsm_op2
+cc_lex "$qa"fsm_op3.dat "$qa"fsm_op3
+cc_lex "$qa"fsm_op4.dat "$qa"fsm_op4
+cc_lex "$qa"fsm_op5.dat "$qa"fsm_op5
+cc_lex "$qa"fsm_op6.dat "$qa"fsm_op6
+cc_lex "$qa"fsm_op7.dat "$qa"fsm_op7
+cc_lex "$qa"fsm_op8.dat fsm_op8
+cc_lex "$qa"fsm_op9.dat "$qa"fsm_op9
+
+cc_lex "$qa"err_sym.dat "$qa"err_sym
+cc_lex "$qa"err_sym1.dat "$qa"err_sym1
+cc_lex "$qa"err_sym10.dat "$qa"err_sym10
+cc_lex "$qa"err_sym11.dat "$qa"err_sym11
+cc_lex "$qa"err_sym2.dat "$qa"err_sym2
+cc_lex "$qa"err_sym3.dat "$qa"err_sym3
+cc_lex "$qa"err_sym4.dat "$qa"err_sym4
+cc_lex "$qa"err_sym5.dat "$qa"err_sym5
+cc_lex "$qa"err_sym6.dat "$qa"err_sym6
+cc_lex "$qa"err_sym7.dat "$qa"err_sym7
+cc_lex "$qa"err_sym8.dat "$qa"err_sym8
+cc_lex "$qa"err_sym9.dat "$qa"err_sym9
+
+cc_lex "$qa"1.dat "$qa"1
+cc_lex "$qa"a.dat "$qa"a
+cc_lex "$qa"eol.dat "$qa"eol
+
+cc_lex "$qa"cmd_line.dat "$qa"cmd_line
+cc_lex "$qa"cmd_line1.dat "$qa"cmd_line1
+cc_lex "$qa"cmd_line2.dat "$qa"cmd_line2
+cc_lex "$qa"cmd_line3.dat "$qa"cmd_line3
+cc_lex "$qa"cmd_line4.dat "$qa"cmd_line4
+
+
diff --git a/web/yacco2/qa/o2_testsuite_lrness.sh b/web/yacco2/qa/o2_testsuite_lrness.sh
new file mode 100755
index 0000000000..7ef36a8b10
--- /dev/null
+++ b/web/yacco2/qa/o2_testsuite_lrness.sh
@@ -0,0 +1,104 @@
+#! /bin/sh
+# file: o2_testsuite3.bat
+# test suite for o2
+echo "////////////////////////////////////////"
+echo "////////////o2_testsuite_lrness.bat////////////"
+echo "////////////////////////////////////////"
+qa="/usr/local/yacco2/qa/"
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $1"
+ eval "$o2 $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ sw1=
+ sw2=
+ sw3=
+ sw4=
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+cc_lex "$qa"lr1_sp6.lex "$qa"lr1_sp6
+cc_lex "$qa"lalr1_dp1.lex "$qa"lalr1_dp1
+cc_lex "$qa"lr1_pa2.lex "$qa"lr1_pa2
+cc_lex "$qa"lr1_tst.lex "$qa"lr1_tst
+cc_lex "$qa"knu1.lex "$qa"knu1
+
+
diff --git a/web/yacco2/qa/o2linker_testsuite2.sh b/web/yacco2/qa/o2linker_testsuite2.sh
new file mode 100755
index 0000000000..c3af8681fa
--- /dev/null
+++ b/web/yacco2/qa/o2linker_testsuite2.sh
@@ -0,0 +1,117 @@
+#! /bin/sh
+# file: o2_testsuite2.bat
+# test suite2 for o2linker not very complete
+echo "////////////////////////////////////////"
+echo "////////////o2linker_testsuite2.bat////////////"
+echo "////////////////////////////////////////"
+qa="/usr/local/yacco2/qa/"
+o2=/usr/local/yacco2/bin/o2linker
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+sw1=$1
+sw2=$2
+sw3=$3
+sw4=$4
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $sw1 $sw2 $sw3 $sw4 $1"
+ eval "$o2 $sw1 $sw2 $sw3 $sw4 $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ sw1=
+ sw2=
+ sw3=
+ sw4=
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+ if test $prt_pdf -eq 1; then
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ ##eval "cat eplain.txt $file_name_only.tex > $file_name_only.tex1"
+ eval "pdftex $file_name_only.tex"
+ xref="$file_name_only""_idx"
+ echo "%%%%%%%%%%%%%%%%% index file: $xref to cweave and pdftex"
+ eval "cweave $xref.w"
+ eval "pdftex $xref.tex"
+ pdftops "$file_name_only.pdf"
+ pdftops "$xref"".pdf"
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+cc_lex "$qa"TS.fsc "$qa"TS
+cc_lex "$qa"TS1.fsc "$qa"TS1
+
diff --git a/web/yacco2/qa/o2testdriver_tests.sh b/web/yacco2/qa/o2testdriver_tests.sh
new file mode 100755
index 0000000000..d29331b2a0
--- /dev/null
+++ b/web/yacco2/qa/o2testdriver_tests.sh
@@ -0,0 +1,136 @@
+#! /bin/sh
+# file: testdriver_tests.bat
+# test suite for o2
+echo "////////////////////////////////////////"
+echo "////////////o2testdriver_tests.bat /////"
+echo "/////// test lexical components of o2///"
+echo "////////////////////////////////////////"
+echo "////////////////////////////////////////"
+testdriver=/usr/local/yacco2/bin/testdriver
+#o2=/usr/local/yacco2/bin/testdriver
+qa="/usr/local/yacco2/qa/"
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+sw1=$1
+sw2=$2
+sw3=$3
+sw4=$4
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $sw1 $sw2 $sw3 $sw4 $1"
+ eval "$testdriver $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ sw1=
+ sw2=
+ sw3=
+ sw4=
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+ if test $prt_pdf -eq 1; then
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ ##eval "cat eplain.txt $file_name_only.tex > $file_name_only.tex1"
+ eval "pdftex $file_name_only.tex"
+ xref="$file_name_only""_idx"
+ echo "%%%%%%%%%%%%%%%%% index file: $xref to cweave and pdftex"
+ eval "cweave $xref.w"
+ eval "pdftex $xref.tex"
+ pdftops "$file_name_only.pdf"
+ pdftops "$xref"".pdf"
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+cc_lex "$qa"unquoted_string.dat "$qa"unquoted_string
+cc_lex "$qa"xc_str.dat "$qa"xc_str
+cc_lex "$qa"comment.dat "$qa"comment
+cc_lex "$qa"comment1.dat "$qa"comment1
+cc_lex "$qa"c_literal.dat "$qa"c_literal
+cc_lex "$qa"c_literal1.dat "$qa"c_literal1
+cc_lex "$qa"c_string.dat "$qa"c_string
+cc_lex "$qa"c_string1.dat "$qa"c_string1
+cc_lex "$qa"esc_seq.dat "$qa"esc_seq
+cc_lex "$qa"identifier.dat "$qa"identifier
+cc_lex "$qa"keyword.dat "$qa"keyword
+cc_lex "$qa"keyword1.dat "$qa"keyword1
+cc_lex "$qa"angled_string.dat "$qa"angled_string
+cc_lex "$qa"b.dat "$qa"b
+cc_lex "$qa"dbl_colon.dat "$qa"dbl_colon
+cc_lex "$qa"esc_seq.dat "$qa"esc_seq
+cc_lex "$qa"int_no.dat "$qa"int_no
+
+
+
diff --git a/web/yacco2/qa/parallel_parser1.dat b/web/yacco2/qa/parallel_parser1.dat
new file mode 100644
index 0000000000..00bba92cf9
--- /dev/null
+++ b/web/yacco2/qa/parallel_parser1.dat
@@ -0,0 +1,65 @@
+/*
+file: parallel_parser1.dat
+ all directives
+*/
+fsm
+(fsm-id "parallel_parser_phrase_th.lex"
+,fsm-filename parallel_parser_phrase_th
+,fsm-namespace NS_parallel_parser_phrase_th
+,fsm-class Cparallel_parser_phrase_th{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+ #include "c:/yacco2/compiler/grammars/ws_eol_k.h"
+ #include "c:/yacco2/compiler/grammars/identifier.h"
+ #include "c:/yacco2/compiler/grammars/yacco2_syntax_code.h"
+ #include "c:/yacco2/compiler/grammars/yacco2_code_end.h"
+ #include "c:/yacco2/compiler/grammars/parallel_parser_attributes.h"
+ ***
+ user-declaration
+ public:
+ T_parallel_parser_phrase* parallel_parser_phrase_;
+ std::map<string,CAbs_lr1_sym*> attributes_map_;
+ void remove_attributes_from_map();
+ void add_attributes_to_map(CAbs_lr1_sym* Attributes);
+ ***
+ constructor
+ parallel_parser_phrase_ = 0;
+ ***
+ destructor
+ delete parallel_parser_phrase_; // stop_parse: clean up plastic dodos
+ ***
+ user-implementation
+ void Cparallel_parser_phrase_th::remove_attributes_from_map(){
+ delete parallel_parser_phrase_;
+ parallel_parser_phrase_ = 0;
+ }
+
+ void
+ Cparallel_parser_phrase_th::
+ add_attributes_to_map(CAbs_lr1_sym* Attribute){
+ parallel_parser_phrase_->add_attribute_to_map(Attribute,abs_parser());
+ }
+ ***
+ op
+ if(parallel_parser_phrase_ != 0){
+ delete parallel_parser_phrase_;
+ parallel_parser_phrase_ = 0;
+ }
+ parallel_parser_phrase_ = new T_parallel_parser_phrase;
+ parallel_parser_phrase_->rc(abs_parser()->start_token(),abs_parser());
+ ***
+}
+,fsm-version "1.0",fsm-date "11 mar 2004",fsm-debug "true"
+,fsm-comments "into the valley of ...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_parallel_parser_phrase_th
+ ***
+ parallel-la-boundary
+ eolr - ||| - |.|
+ ***
+ code
+ #include <parallel_function_include_code.h>
+ ***
+)
diff --git a/web/yacco2/qa/parallel_parser2.dat b/web/yacco2/qa/parallel_parser2.dat
new file mode 100644
index 0000000000..0306251a78
--- /dev/null
+++ b/web/yacco2/qa/parallel_parser2.dat
@@ -0,0 +1,23 @@
+/*
+file: parallel_parser2.dat
+ short correct sample for parallel parser
+*/
+fsm
+(fsm-id "pphrase_th.lex"
+,fsm-filename pphrase_th
+,fsm-namespace NS_pphrase_th
+,fsm-class Cpphrase_th
+,fsm-version "1.0",fsm-date "11 mar 2004",fsm-debug "true"
+,fsm-comments "testing 1 2 3...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_pphrase_th
+ ***
+ parallel-la-boundary
+ eolr - ||| - |.|
+ ***
+ code
+ #include <parallel_function_include_code.h>
+ ***
+)
diff --git a/web/yacco2/qa/pathological.lex b/web/yacco2/qa/pathological.lex
new file mode 100644
index 0000000000..0c93754e23
--- /dev/null
+++ b/web/yacco2/qa/pathological.lex
@@ -0,0 +1,77 @@
+/*
+$echo FILE: pathological.lex
+$echo Purpose: Rules that do no derive T strings
+$echo Error
+*/
+/@
+@** pathological Grammar.\fbreak
+Test on the variants on pathological grammars.\fbreak
+RA,RB,RD,RF are variants on rules not deriving ${^* \Rightarrow}$ t.
+@/
+fsm
+(fsm-id "pathological.lex",fsm-filename pathological,fsm-namespace NS_pathological
+,fsm-class Cpathological
+,fsm-version "1.0",fsm-date "24 Mar. 2006",fsm-debug "true"
+,fsm-comments "pathological grammar")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Rstart AD AB(){
+ -> RA eog
+ -> RB eog
+ -> RD eog
+ -> RF eog
+}
+
+/@
+@** |RA| rule.\fbreak
+Call self.
+@/
+RA AD AB()
+{
+ -> RA
+}
+
+/@
+@** |RB| rule.\fbreak
+Indirect call on self.
+@/
+
+RB AD AB()
+{
+ -> RC
+}
+RC AD AB()
+{
+ -> RB
+}
+
+/@
+@** |RD| rule.\fbreak
+${\alpha}${} ${^* \Rightarrow}${} ${\epsilon}${} with right recursion.
+@/
+RD AD AB()
+{
+ -> RE RD
+}
+RE AD AB()
+{
+ ->
+}
+/@
+@** |RF| rule.\fbreak
+${\alpha}${} ${^+ \Rightarrow}${} ${1}${} with right recursion.
+@/
+
+RF AD AB()
+{
+ -> RG RF
+}
+RG AD AB()
+{
+ -> 1
+}
+}// end of rules
diff --git a/web/yacco2/qa/qa_alltests.sh b/web/yacco2/qa/qa_alltests.sh
new file mode 100755
index 0000000000..c63d5ff52a
--- /dev/null
+++ b/web/yacco2/qa/qa_alltests.sh
@@ -0,0 +1,117 @@
+#! /bin/sh
+# file: QA_alltests.bat
+echo "////////////////////////////////////////"
+echo "////////////QA_alltests.bat////////////"
+echo "////////////////////////////////////////"
+qa="/usr/local/yacco2/qa/"
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $1"
+ eval "$o2 $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ sw1=
+ sw2=
+ sw3=
+ sw4=
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+cc_lex "$qa"pathological.lex "$qa"pathological
+cc_lex "$qa"TS_la1.lex "$qa"TS_la1
+cc_lex "$qa"TS_la2.lex "$qa"TS_la2
+cc_lex "$qa"TS_la2a.lex "$qa" TS_la2a
+cc_lex "$qa"TS_la3.lex "$qa"TS_la3
+cc_lex "$qa"TS_la4.lex "$qa"TS_la4
+cc_lex "$qa"TS_la5.lex "$qa"TS_la5
+cc_lex "$qa"TS_la6.lex "$qa"TS_la6
+cc_lex "$qa"TS_la7.lex "$qa"TS_la7
+cc_lex "$qa"TS_la8.lex "$qa"TS_la8
+cc_lex "$qa"TS_la9.lex "$qa"TS_la9
+cc_lex "$qa"TS_laa.lex "$qa"TS_laa
+cc_lex "$qa"TS_lab.lex "$qa"TS_lab
+cc_lex "$qa"TS_path1.lex "$qa"TS_path1
+cc_lex "$qa"TS_path1a.lex "$qa"TS_path1a
+cc_lex "$qa"TS_path2.lex "$qa"TS_path2
+cc_lex "$qa"TS_path3.lex "$qa"TS_path3
+cc_lex "$qa"TS_path4.lex "$qa"TS_path4
+cc_lex "$qa"TS_path5.lex "$qa"TS_path5
+cc_lex "$qa"TS_path6.lex "$qa"TS_path6
+cc_lex "$qa"TS_path7.lex "$qa"TS_path7
diff --git a/web/yacco2/qa/qa_alltests1.sh b/web/yacco2/qa/qa_alltests1.sh
new file mode 100755
index 0000000000..9f325d58c0
--- /dev/null
+++ b/web/yacco2/qa/qa_alltests1.sh
@@ -0,0 +1,115 @@
+#! /bin/sh
+# file: QA_alltests1.bat
+echo "////////////////////////////////////////"
+echo "////////////QA_alltests1.bat////////////"
+echo "////////////////////////////////////////"
+qa="/usr/local/yacco2/qa/"
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+prt_pdf=0
+delete_files=1
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ echo " =====Grammar=> $1 <===File==="
+ sed -n -f '/usr/local/yacco2/qa/qa_echo.sedt' "$1" | sh
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ #echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ echo " executing command line=>: $o2 $1"
+ eval "$o2 $1"
+ echo "------------------------------------------------"
+ echo " "
+ # once gened is enough for the various T gening
+ sw1=
+ sw2=
+ sw3=
+ sw4=
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+if test $delete_files -eq 1; then
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-----Copying--------> $k to $dir_only/$k"
+ eval "rm -f $k"
+;;
+ *.fsc)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k" eof
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k"
+;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k"
+ ;;
+ esac
+ done
+fi
+}
+
+cc_lex "$qa"lr1_sp2.lex "$qa"lr1_sp2
+cc_lex "$qa"lr1_sp3.lex "$qa"lr1_sp3
+cc_lex "$qa"lr1_sp4.lex "$qa"lr1_sp4
+cc_lex "$qa"lr1_sp5.lex "$qa"lr1_sp5
+cc_lex "$qa"lr1_sp6.lex "$qa"lr1_sp6
+cc_lex "$qa"lalr1_dp1.lex "$qa"lalr1_dp1
+cc_lex "$qa"lalr1_dp2.lex "$qa"lalr1_dp2
+cc_lex "$qa"lr1_br1.lex "$qa"lr1_br1
+cc_lex "$qa"lr1_pa1.lex "$qa"lr1_pa1
+cc_lex "$qa"lr1_pa2.lex "$qa"lr1_pa2
+cc_lex "$qa"lr1_tst.lex "$qa"lr1_tst
+cc_lex "$qa"not_lr1_1.lex "$qa"not_lr1_1
+cc_lex "$qa"not_lr1_2.lex "$qa"not_lr1_2
+cc_lex "$qa"test_use_cnt.lex "$qa"test_use_cnt
+cc_lex "$qa"test_called_thd_fs.lex "$qa"test_called_thd_fs
+cc_lex "$qa"rule7.dat "$qa"rule7
+cc_lex "$qa"knu1.lex "$qa"knu1
+cc_lex "$qa"lr1_sp6.lex "$qa"lr1_sp6
+cc_lex "$qa"knu1_sick.lex "$qa"knu1_sick
diff --git a/web/yacco2/qa/qa_echo.sedt b/web/yacco2/qa/qa_echo.sedt
new file mode 100644
index 0000000000..b43c6858ea
--- /dev/null
+++ b/web/yacco2/qa/qa_echo.sedt
@@ -0,0 +1,2 @@
+# file: /usr/local/yacco2/qa/qa_echo.sedt
+s/\$echo\(.*\)/echo "\1"/p \ No newline at end of file
diff --git a/web/yacco2/qa/rule1.dat b/web/yacco2/qa/rule1.dat
new file mode 100644
index 0000000000..c4c9c3c3b9
--- /dev/null
+++ b/web/yacco2/qa/rule1.dat
@@ -0,0 +1,45 @@
+/*
+$echo file: rule1.dat
+$echo test: relaxed order of lhs,parallel-control-monitor
+$echo Okay
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(
+parallel-control-monitor{
+ arbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> x
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule2.dat b/web/yacco2/qa/rule2.dat
new file mode 100644
index 0000000000..e1532a3c0c
--- /dev/null
+++ b/web/yacco2/qa/rule2.dat
@@ -0,0 +1,42 @@
+/*
+$echo file: rule2.dat
+$echo test: bad pparallel-control-monitor
+$echo Error
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(
+pparallel-control-monitor{
+ arbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> x
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule3.dat b/web/yacco2/qa/rule3.dat
new file mode 100644
index 0000000000..f3000ecc04
--- /dev/null
+++ b/web/yacco2/qa/rule3.dat
@@ -0,0 +1,29 @@
+/*
+$echo file: rule3.dat
+$echo test: no fsm clause present
+$echo as i parse constructs by keyword triggers,
+$echo individual constructs get parsed so no fsm clause is allowed.
+$echo What gps so should i point to the comments? as error gps???
+$echo As the eval_phrases does a tree breadth only retrival of the phrase tokens
+$echo and eval_phrase grammar tokens are ordered i will take the
+$echo current T's gps as its error gps?
+$echo What gps so should i point to the comments? as error gps???
+$echo phrase clauses are evaluated for proper order by eval_phrases
+$echo Error --- misplaced or missing fsm phrase
+*/
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(){
+ -> x
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule4.dat b/web/yacco2/qa/rule4.dat
new file mode 100644
index 0000000000..28f39234f1
--- /dev/null
+++ b/web/yacco2/qa/rule4.dat
@@ -0,0 +1,39 @@
+/*
+$echo file: rule4.dat
+$echo test: bad sub rule: missing ->
+$echo Error
+*/
+fsm (fsm-id "lr1_br1.lex",fsm-filename lr1_br1,fsm-namespace NS_lr1_br1
+ ,fsm-class Clr1_br1_rul_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(
+parallel-control-monitor{
+ arbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> x{
+ op
+ Csubrule_def* fsm = (Csubrule_def*)abs_parser()->fsm_tbl();
+ RSVP(fsm->subrule_def_)
+ ***
+ }
+ ***
+ - >
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule5.dat b/web/yacco2/qa/rule5.dat
new file mode 100644
index 0000000000..ada8af68ce
--- /dev/null
+++ b/web/yacco2/qa/rule5.dat
@@ -0,0 +1,59 @@
+/*
+$echo file: rule5.dat
+$echo test: bad sub rule: extra ***
+$echo Error
+*/
+fsm (fsm-id "lr1_br1.lex",fsm-filename lr1_br1,fsm-namespace NS_lr1_br1
+ ,fsm-class Clr1_br1_rul_fsm
+ ,fsm-version "1.0",fsm-date "8-oct-96"
+ ,fsm-debug "true",fsm-comments "test out lr1")
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+ Rsubrule_def AD AB(
+parallel-control-monitor{
+ arbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> Rvector
+ Rcomponents Rrhs_bnd
+ Rlint{
+ op
+ Csubrule_def* fsm = (Csubrule_def*)abs_parser()->fsm_tbl();
+ RSVP(fsm->subrule_def_)
+ ***
+ }
+ ***
+ }
+}
+
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(
+parallel-control-monitor{
+ arbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> x{
+ op
+ Csubrule_def* fsm = (Csubrule_def*)abs_parser()->fsm_tbl();
+ RSVP(fsm->subrule_def_)
+ ***
+ }
+ ***
+ }
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule6.dat b/web/yacco2/qa/rule6.dat
new file mode 100644
index 0000000000..a76e39e779
--- /dev/null
+++ b/web/yacco2/qa/rule6.dat
@@ -0,0 +1,33 @@
+/*
+$echo file: rule6.dat
+$echo test: missing subrule
+$echo Error
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+}
+}// end of rules
diff --git a/web/yacco2/qa/rule7.dat b/web/yacco2/qa/rule7.dat
new file mode 100644
index 0000000000..34456ee047
--- /dev/null
+++ b/web/yacco2/qa/rule7.dat
@@ -0,0 +1,95 @@
+/*
+$echo file: rule7.dat
+$echo test: undefined terminal ###
+$echo Error
+*/
+/*
+FILE: rule_def_phrase.lex
+Dates: 3 Jun 2004
+Purpose: parse a rule definition construct
+ Verifies if the symbol being defined is duplicate
+ within yacco2's symbol table.
+ Adds symbol to global symbol table.
+Output: T_rule_def
+ assorted errors
+*/
+fsm
+(fsm-id "rule_def_phrase.lex"
+,fsm-filename rule_def_phrase
+,fsm-namespace NS_rule_def_phrase
+,fsm-class Crule_def_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+ #include "c:/yacco2/compiler/grammars/ws.h"
+ #include "c:/yacco2/compiler/grammars/c_comments.h"
+ #include "c:/yacco2/compiler/grammars/identifier.h"
+ #include "c:/yacco2/compiler/grammars/c_string.h"
+ #include "c:/yacco2/compiler/grammars/terminal_def_directives.h"
+ #include "c:/yacco2/compiler/grammars/terminal_def_delabort_tags.h"
+ #include "c:/yacco2/compiler/grammars/subrules_phrase.h"
+ #include "c:/yacco2/compiler/grammars/rule_lhs_phrase.h"
+ #include "c:/yacco2/compiler/cweb/symbol table/yacco2_ste.h"
+ #include "c:/yacco2/compiler/grammars/parallel_monitor_phrase.h"
+ ***
+ user-declaration
+ public:
+ T_rule_def* rule_def_;
+ ***
+ constructor
+ rule_def_ = 0;
+ ***
+ destructor
+ delete rule_def_; // stop_parse: clean up software dodos
+ ***
+ op
+ if(rule_def_ != 0){
+ delete rule_def_;
+ rule_def_ = 0;
+ }
+ rule_def_ = new T_rule_def;
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "true"
+,fsm-comments "into the valley of ...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rule_def_phrase
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrule_def_phrase AD AB(){
+ -> Rid
+ -> ###
+}
+
+Rid AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ const char* skey = Sub_rule_1.p2__->identifier()->c_str();
+ fsm->rule_def_->rule_name(skey);
+ Sub_rule_1.p2__->auto_delete(true);
+ ***
+ }
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_rule_name_present;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+}
+}// end of rules \ No newline at end of file
diff --git a/web/yacco2/qa/rule8.dat b/web/yacco2/qa/rule8.dat
new file mode 100644
index 0000000000..a015b11d87
--- /dev/null
+++ b/web/yacco2/qa/rule8.dat
@@ -0,0 +1,346 @@
+/*
+$echo file: rule8.dat
+$echo test: premature closing of rules by extra }
+$echo Error
+*/
+
+fsm
+(fsm-id "rule_def_phrase.lex"
+,fsm-filename rule_def_phrase
+,fsm-namespace NS_rule_def_phrase
+,fsm-class Crule_def_phrase{
+ user-prefix-declaration
+ using namespace NS_yacco2_terminals;
+ #include "c:/yacco2/compiler/grammars/ws.h"
+ #include "c:/yacco2/compiler/grammars/c_comments.h"
+ #include "c:/yacco2/compiler/grammars/identifier.h"
+ #include "c:/yacco2/compiler/grammars/c_string.h"
+ #include "c:/yacco2/compiler/grammars/terminal_def_directives.h"
+ #include "c:/yacco2/compiler/grammars/terminal_def_delabort_tags.h"
+ #include "c:/yacco2/compiler/grammars/subrules_phrase.h"
+ #include "c:/yacco2/compiler/grammars/rule_lhs_phrase.h"
+ #include "c:/yacco2/compiler/cweb/symbol table/yacco2_ste.h"
+ #include "c:/yacco2/compiler/grammars/parallel_monitor_phrase.h"
+ ***
+ user-declaration
+ public:
+ T_rule_def* rule_def_;
+ ***
+ constructor
+ rule_def_ = 0;
+ ***
+ destructor
+ delete rule_def_; // stop_parse: clean up software dodos
+ ***
+ op
+ if(rule_def_ != 0){
+ delete rule_def_;
+ rule_def_ = 0;
+ }
+ rule_def_ = new T_rule_def;
+ // due to a compiler bug in the whos who of pc processing
+ // which is not linux but win...
+ //rule_def_->rc(abs_parser()->start_token(),abs_parser());
+///*
+ CAbs_lr1_sym* Rc = abs_parser()->start_token();
+ rule_def_->tok_co_ords__.external_file_id__ = Rc->external_file_id();
+ rule_def_->tok_co_ords__.rc_pos__ = Rc->rc_pos();
+ rule_def_->tok_co_ords__.line_no__ = Rc->line_no();
+ rule_def_->tok_co_ords__.pos_in_line__ = Rc->pos_in_line();
+//*/
+ ***
+}
+,fsm-version "1.0",fsm-date "24 mar 2004",fsm-debug "true"
+,fsm-comments "into the valley of ...")
+parallel-parser
+(
+ parallel-thread-function
+ TH_rule_def_phrase
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Rrule_def_phrase AD AB(){
+ -> Rid Rlint Rad_ab_tags
+ Ropen_par Rlint
+ Rrule_parameters
+ Rclose_par Rlint
+ Rrule_body
+ {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ // add to global symbol table
+ const char* skey = fsm->rule_def_->rule_name()->c_str();
+ T_sym_tbl_report_card report_card;
+ using namespace yacco2_ste;
+ find_sym_in_stbl(&report_card,skey);
+ if(report_card.action_ == T_sym_tbl_report_card::fnd){
+ if(report_card.sym_entry_->type_ != T_table_entry::rule){
+ CAbs_lr1_sym* sym = new LR1_err_stble_has_entry_but_not_a_rule;
+ sym->rc(abs_parser()->start_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ return;
+ }
+ if(report_card.sym_entry_->defined_ == true){
+ CAbs_lr1_sym* sym = new LR1_err_dup_entry_in_sym_table;
+ sym->rc(abs_parser()->start_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ return;
+ }
+ report_card.sym_entry_->defined_ = true;
+ RSVP(fsm->rule_def_)
+ fsm->rule_def_ = 0;
+ return;
+ }
+
+ add_sym_to_stbl
+ (&report_card
+ ,skey
+ ,fsm->rule_def_
+ ,T_table_entry::defed
+ ,T_table_entry::rule);
+ RSVP(fsm->rule_def_)
+ fsm->rule_def_ = 0;
+ ***
+ }
+}
+
+Rid AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| identifier NS_identifier::TH_identifier {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ const char* skey = Sub_rule_1.p2__->identifier()->c_str();
+ fsm->rule_def_->rule_name(skey);
+ Sub_rule_1.p2__->auto_delete(true);
+ ***
+ }
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_rule_name_present;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+}
+
+Rad_ab_tags AD AB(){
+ -> Rad_ab_tag Rlint
+ -> Rad_ab_tags Rad_ab_tag Rlint
+ -> |.|
+}
+
+Rad_ab_tag AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| "#AD" NS_terminal_def_delabort_tags::TH_terminal_def_delabort_tags {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ if(fsm->rule_def_->autodelete() == true){
+ CAbs_lr1_sym* sym = new LR1_err_already_defined_AD;
+ sym->rc(Sub_rule_1.p2__,abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autodelete(true);
+ ***
+ }
+ -> ||| "#AB" NULL {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ if(fsm->rule_def_->autoabort() == true){
+ CAbs_lr1_sym* sym = new LR1_err_already_defined_AB;
+ sym->rc(Sub_rule_2.p2__,abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ return;
+ }
+ fsm->rule_def_->autoabort(true);
+ ***
+ }
+}
+
+Rrule_parameters AD AB(){
+ ->
+ -> Rrule_parameter
+ -> Rrule_parameters "," Rrule_parameter
+}
+
+Rrule_parameter AD AB(){
+ -> ||| |+| NULL{
+ op
+ RSVP(Sub_rule_1.p2__)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ -> Rlhs_phrase Rlint
+ -> Rparallel_monitor_phrase Rlint
+}
+
+Rlhs_phrase AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| "rule-lhs-phrase" NS_rule_lhs_phrase::TH_rule_lhs_phrase {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ fsm->rule_def_->rule_lhs(Sub_rule_1.p2__);
+ ***
+ }
+}
+
+Rparallel_monitor_phrase AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| "parallel-monitor-phrase" NS_parallel_monitor_phrase::TH_parallel_monitor_phrase {
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ fsm->rule_def_->parallel_mntr(Sub_rule_1.p2__);
+ ***
+ }
+}
+
+Rrule_body AD AB(){
+ -> Ropen_brace Rlint
+ Rsubrules
+ Rclose_brace Rlint
+}
+
+Rsubrules AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| "subrules-phrase" NS_subrules_phrase::TH_subrules_phrase{
+ op
+ Crule_def_phrase* fsm = (Crule_def_phrase*)abs_parser()->fsm_tbl();
+ fsm->rule_def_->subrules(Sub_rule_1.p2__);
+ ***
+ }
+ -> ||| |+| NULL{
+ op
+ RSVP(Sub_rule_2.p2__)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_sub_rule_present;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+}
+
+Ropen_par AD AB(){
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_open_parenthesis;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ -> "("
+}
+
+Rclose_par AD AB(){
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_close_parenthesis;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ -> ")"
+}
+
+Ropen_brace AD AB(){
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_open_brace;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ -> "{"
+}
+
+Rclose_brace AD AB(){
+ -> |.| {
+ op
+ CAbs_lr1_sym* sym = new LR1_err_no_closing_brace;
+ sym->rc(abs_parser()->current_token(),abs_parser());
+ RSVP(sym)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+ }//extra
+
+}//this stops the rules process
+
+Rlint AD AB(){
+ -> |.|
+ -> Rfluffs |.|
+}
+
+Rfluffs AD AB(){
+ -> Rfluff
+ -> Rfluffs Rfluff
+}
+
+Rfluff AD AB(
+lhs
+,parallel-control-monitor{
+ arbitrator-code
+ ***
+ }
+){
+ -> ||| ws NS_ws::TH_ws {
+ op
+ Sub_rule_1.p2__->auto_delete(true);
+ ***
+ }
+ -> ||| comment NS_c_comments::TH_c_comments {
+ op
+
+ Sub_rule_2.p2__->auto_delete(true);
+ ***
+ }
+ -> ||| |+| NULL {
+ op
+ RSVP(Sub_rule_3.p2__)
+ abs_parser()->stop_parse(true);
+ ***
+ }
+}
+}// end of rules \ No newline at end of file
diff --git a/web/yacco2/qa/rule9.dat b/web/yacco2/qa/rule9.dat
new file mode 100644
index 0000000000..64f6968c71
--- /dev/null
+++ b/web/yacco2/qa/rule9.dat
@@ -0,0 +1,44 @@
+/*
+$echo file: rule9.dat
+$echo run against o2 not testdriver
+$echo test: bad aarbitrator-code
+$echo Error
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer --- Unix, Mac, and Microsoft supported styles.")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr
+ ***
+)
+@"/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+rules{
+Reol (){
+ -> Rdelimiters
+}
+
+Rdelimiters ()
+{
+ -> Rsubrule_def
+}
+
+Rsubrule_def AD AB(
+lhs,
+parallel-control-monitor{
+ aarbitrator-code
+ int s(0);//cccccccc
+ ***
+ }
+){
+ -> x
+}
+
+}// end of rules
diff --git a/web/yacco2/qa/rule_test2.dat b/web/yacco2/qa/rule_test2.dat
new file mode 100644
index 0000000000..d320e72c8d
--- /dev/null
+++ b/web/yacco2/qa/rule_test2.dat
@@ -0,0 +1,44 @@
+/*
+FILE: rule_test2.dat
+*/
+fsm
+(fsm-id "eol.lex",fsm-filename eol,fsm-namespace NS_eol
+,fsm-class Ceol
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "false"
+,fsm-comments "end-of-line recognizer")
+parallel-parser
+(
+ parallel-thread-function
+ TH_eol
+ ***
+ parallel-la-boundary
+ eolr // - "x0a" more efficient to use |.|
+ ***
+ code
+#include <parallel_function_include_code.h>
+ ***
+)
+@"c:/yacco2/compiler/grammars/yacco2_include_files.lex"
+//
+rules{
+Reol AD AB(){
+ -> xfa Rdelimiters {
+ rhs-op
+ ++yacco2::POS_IN_LINE_NO__;
+ CAbs_lr1_sym* sym = new T_eol;
+ sym->rc(abs_parser()->start_token(),abs_parser());
+ sym->set_line_no_and_pos_in_line(yacco2::LINE_NO__,yacco2::POS_IN_LINE_NO__);
+ RSVP(sym)
+ ++yacco2::LINE_NO__;// next line no
+ yacco2::POS_IN_LINE_NO__ = 0;// reset for next line
+ ***
+ }
+}
+
+Rdelimiters AD AB(){
+ -> no-end-of-code
+ -> "x0a"
+ -> "x0d" |.|
+ -> "x0d" "x0a"
+}
+}// end of rules \ No newline at end of file
diff --git a/web/yacco2/qa/symtbl_test.txt b/web/yacco2/qa/symtbl_test.txt
new file mode 100644
index 0000000000..163bd83176
--- /dev/null
+++ b/web/yacco2/qa/symtbl_test.txt
@@ -0,0 +1,30 @@
+
+C:\yacco2\testdriver>rem file: t1.bat
+
+C:\yacco2\testdriver>rem note: remed out lines that have been tested okay
+
+C:\yacco2\testdriver>cd c:\yacco2\testdriver\debug
+
+C:\yacco2\testdriver\Debug>rem echo ########### test out error symbol
+
+C:\yacco2\testdriver\Debug>testdriver 4 "c:/yacco2/compiler/grammars/rule7.dat"
+
+Prime number used: 20011
+Test zero len key
+Error zero_len_name: zero-len-symbol
+1st entry test
+duplicate entry test
+Error duplicate entry: dup-entry-in-sym-table
+Same key address test
+Error same key address: same-address-as-key-in-symbol-table
+Fill up balance of table
+Overflow test
+Should be overflow error
+Find symbol test
+Not found test
+Error should be not found:
+get symbol by subscript test
+Error subscript out of range: -1 subscript-out-of-range
+Error subscript out of range: 20011 subscript-out-of-range
+Clean up
+enter any key then press Enter: x \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum.dat b/web/yacco2/qa/t_enum.dat
new file mode 100644
index 0000000000..0aa79fc1e2
--- /dev/null
+++ b/web/yacco2/qa/t_enum.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum.dat
+correct format
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum1.dat b/web/yacco2/qa/t_enum1.dat
new file mode 100644
index 0000000000..2a7da5cc0a
--- /dev/null
+++ b/web/yacco2/qa/t_enum1.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum1.dat
+no(
+*/
+T-enumeration /**/
+/**//**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum10.dat b/web/yacco2/qa/t_enum10.dat
new file mode 100644
index 0000000000..1bcff9cc72
--- /dev/null
+++ b/web/yacco2/qa/t_enum10.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum10.dat
+no *** present
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ **
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum11.dat b/web/yacco2/qa/t_enum11.dat
new file mode 100644
index 0000000000..64a4e30e4e
--- /dev/null
+++ b/web/yacco2/qa/t_enum11.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum11.dat
+no }
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**///}
diff --git a/web/yacco2/qa/t_enum2.dat b/web/yacco2/qa/t_enum2.dat
new file mode 100644
index 0000000000..dabc2b3bb5
--- /dev/null
+++ b/web/yacco2/qa/t_enum2.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum2.dat
+no file-name
+*/
+T-enumeration /**/
+/**/(/**/file-namex/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum3.dat b/web/yacco2/qa/t_enum3.dat
new file mode 100644
index 0000000000..c900ecc7fa
--- /dev/null
+++ b/web/yacco2/qa/t_enum3.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum3.dat
+no file-name id
+*/
+T-enumeration /**/
+/**/(/**/file-name/**///yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum4.dat b/web/yacco2/qa/t_enum4.dat
new file mode 100644
index 0000000000..1886fb7eb1
--- /dev/null
+++ b/web/yacco2/qa/t_enum4.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum4.dat
+no ,
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**//*,*//**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum5.dat b/web/yacco2/qa/t_enum5.dat
new file mode 100644
index 0000000000..641e4a571b
--- /dev/null
+++ b/web/yacco2/qa/t_enum5.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum5.dat
+no name-space
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-spacex/**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum6.dat b/web/yacco2/qa/t_enum6.dat
new file mode 100644
index 0000000000..ccfec573cc
--- /dev/null
+++ b/web/yacco2/qa/t_enum6.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum6.dat
+no name-space id
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**///NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum7.dat b/web/yacco2/qa/t_enum7.dat
new file mode 100644
index 0000000000..130b32c89a
--- /dev/null
+++ b/web/yacco2/qa/t_enum7.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum7.dat
+no )
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**///)/***/
+{/***/
+ constant-defs/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum8.dat b/web/yacco2/qa/t_enum8.dat
new file mode 100644
index 0000000000..b85432aaec
--- /dev/null
+++ b/web/yacco2/qa/t_enum8.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum8.dat
+no constant-defs
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs1/**/
+ bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/t_enum9.dat b/web/yacco2/qa/t_enum9.dat
new file mode 100644
index 0000000000..5ae31d2b63
--- /dev/null
+++ b/web/yacco2/qa/t_enum9.dat
@@ -0,0 +1,12 @@
+/*
+file: t_enum9.dat
+no constant-defs code
+*/
+T-enumeration /**/
+/**/(/**/file-name/**/yacco2_T_enumeration
+/**/,/**/name-space /**/NS_yacco2_T_enum/**/)/***/
+{/***/
+ constant-defs/**/
+ //bool True(true);
+ ***
+/**/} \ No newline at end of file
diff --git a/web/yacco2/qa/term_test1.dat b/web/yacco2/qa/term_test1.dat
new file mode 100644
index 0000000000..6eaf4b8f5e
--- /dev/null
+++ b/web/yacco2/qa/term_test1.dat
@@ -0,0 +1,59 @@
+/*
+ file: term_test1.dat
+ no sufx code
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_fsm_operation_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+//struct pas_tble_lkup;
+//extern "C" pas_tble_lkup* PAS_SYM_TBL_PTR;
+ ***
+"#***" (sym-class T_eocode)
+"#AD" AD (sym-class T_AD)
+"#AB" AD (sym-class T_AB)
+"#parallel-la-boundary"
+(sym-class T_parallel_la_boundary{
+ user-declaration
+ public:
+ T_parallel_la_boundary();
+ INT start_pos();
+ void start_pos(INT Start);
+ INT stop_pos();
+ void stop_pos(INT Stop);
+ void supplier(token_container_type* Supplier);
+ token_container_type* supplier();
+ private:INT start_pos_;INT stop_pos_;token_container_type* supplier_;
+ ***
+ user-implementation
+ T_parallel_la_boundary::T_parallel_la_boundary() {
+ T_CTOR("#parallel-la-boundary",T_T_parallel_la_boundary_,0,0,false,false,0,0)
+ start_pos_ = 0;stop_pos_ = 0;supplier_ = 0;}
+ token_container_type* T_parallel_la_boundary::supplier(){return supplier_;}
+ void T_parallel_la_boundary::supplier(token_container_type* Supplier){supplier_ = Supplier;}
+ INT T_parallel_la_boundary::start_pos(){return start_pos_;}
+ void T_parallel_la_boundary::start_pos(INT Start){start_pos_ = Start;}
+ INT T_parallel_la_boundary::stop_pos(){return stop_pos_;}
+ void T_parallel_la_boundary::stop_pos(INT Stop){stop_pos_ = Stop;}
+ ***
+ }
+)
+ terminals-sufx
+//#include "pas_tbl_lkup.h"
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test2.dat b/web/yacco2/qa/term_test2.dat
new file mode 100644
index 0000000000..82569094cc
--- /dev/null
+++ b/web/yacco2/qa/term_test2.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test2.dat
+ dup sufx code
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+"#***" (sym-class T_eocode)
+ terminals-sufx
+int x;
+ ***
+ terminals-sufx
+int x;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test3.dat b/web/yacco2/qa/term_test3.dat
new file mode 100644
index 0000000000..32fae32307
--- /dev/null
+++ b/web/yacco2/qa/term_test3.dat
@@ -0,0 +1,59 @@
+/*
+ file: term_test3.dat
+ term def after sux error
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_fsm_operation_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+//struct pas_tble_lkup;
+//extern "C" pas_tble_lkup* PAS_SYM_TBL_PTR;
+ ***
+"#AD" AD (sym-class T_AD)
+"#AB" AD (sym-class T_AB)
+"#parallel-la-boundary"
+(sym-class T_parallel_la_boundary{
+ user-declaration
+ public:
+ T_parallel_la_boundary();
+ INT start_pos();
+ void start_pos(INT Start);
+ INT stop_pos();
+ void stop_pos(INT Stop);
+ void supplier(token_container_type* Supplier);
+ token_container_type* supplier();
+ private:INT start_pos_;INT stop_pos_;token_container_type* supplier_;
+ ***
+ user-implementation
+ T_parallel_la_boundary::T_parallel_la_boundary() {
+ T_CTOR("#parallel-la-boundary",T_T_parallel_la_boundary_,0,0,false,false,0,0)
+ start_pos_ = 0;stop_pos_ = 0;supplier_ = 0;}
+ token_container_type* T_parallel_la_boundary::supplier(){return supplier_;}
+ void T_parallel_la_boundary::supplier(token_container_type* Supplier){supplier_ = Supplier;}
+ INT T_parallel_la_boundary::start_pos(){return start_pos_;}
+ void T_parallel_la_boundary::start_pos(INT Start){start_pos_ = Start;}
+ INT T_parallel_la_boundary::stop_pos(){return stop_pos_;}
+ void T_parallel_la_boundary::stop_pos(INT Stop){stop_pos_ = Stop;}
+ ***
+ }
+)
+ terminals-sufx
+#include "pas_tbl_lkup.h"
+ ***
+"#***" (sym-class T_eocode)
+} // end of terminals
diff --git a/web/yacco2/qa/term_test4.dat b/web/yacco2/qa/term_test4.dat
new file mode 100644
index 0000000000..d2ba07c012
--- /dev/null
+++ b/web/yacco2/qa/term_test4.dat
@@ -0,0 +1,78 @@
+/*
+ file: term_test4.dat
+ dup terminals-refs error
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_fsm_operation_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+//struct pas_tble_lkup;
+//extern "C" pas_tble_lkup* PAS_SYM_TBL_PTR;
+ ***
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+struct T_fsm_class_phrase;
+struct T_fsm_class;
+struct T_fsm_phrase;
+struct T_fsm_operation_phrase;
+struct T_parallel_parser_phrase;
+struct T_enum_phrase;
+struct T_error_symbols_phrase;
+struct T_rc_phrase;
+struct T_lr1_k_phrase;
+struct T_terminals_phrase;
+//struct pas_tble_lkup;
+//extern "C" pas_tble_lkup* PAS_SYM_TBL_PTR;
+ ***
+"#AD" AD (sym-class T_AD)
+"#AB" AD (sym-class T_AB)
+"#parallel-la-boundary"
+(sym-class T_parallel_la_boundary{
+ user-declaration
+ public:
+ T_parallel_la_boundary();
+ INT start_pos();
+ void start_pos(INT Start);
+ INT stop_pos();
+ void stop_pos(INT Stop);
+ void supplier(token_container_type* Supplier);
+ token_container_type* supplier();
+ private:INT start_pos_;INT stop_pos_;token_container_type* supplier_;
+ ***
+ user-implementation
+ T_parallel_la_boundary::T_parallel_la_boundary() {
+ T_CTOR("#parallel-la-boundary",T_T_parallel_la_boundary_,0,0,false,false,0,0)
+ start_pos_ = 0;stop_pos_ = 0;supplier_ = 0;}
+ token_container_type* T_parallel_la_boundary::supplier(){return supplier_;}
+ void T_parallel_la_boundary::supplier(token_container_type* Supplier){supplier_ = Supplier;}
+ INT T_parallel_la_boundary::start_pos(){return start_pos_;}
+ void T_parallel_la_boundary::start_pos(INT Start){start_pos_ = Start;}
+ INT T_parallel_la_boundary::stop_pos(){return stop_pos_;}
+ void T_parallel_la_boundary::stop_pos(INT Stop){stop_pos_ = Stop;}
+ ***
+ }
+)
+ terminals-sufx
+#include "pas_tbl_lkup.h"
+ ***
+"#***" (sym-class T_eocode)
+} // end of terminals
diff --git a/web/yacco2/qa/term_test5.dat b/web/yacco2/qa/term_test5.dat
new file mode 100644
index 0000000000..fce293ae28
--- /dev/null
+++ b/web/yacco2/qa/term_test5.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test5.dat
+ refx after sufx code
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+"#***" (sym-class T_eocode)
+ terminals-sufx
+int x;
+ ***
+ terminals-refx
+struct xxx;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test6.dat b/web/yacco2/qa/term_test6.dat
new file mode 100644
index 0000000000..37d37f5e6f
--- /dev/null
+++ b/web/yacco2/qa/term_test6.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test6.dat
+ missing (
+*/
+terminals
+file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+"#***" (sym-class T_eocode)
+ terminals-sufx
+int x;
+ ***
+ terminals-refx
+struct xxx;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test7.dat b/web/yacco2/qa/term_test7.dat
new file mode 100644
index 0000000000..e6924c7e00
--- /dev/null
+++ b/web/yacco2/qa/term_test7.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test7.dat
+ missing filename
+*/
+terminals
+( yacco2_terminals
+,name-space NS_yacco2_terminals){
+"#***" (sym-class T_eocode)
+ terminals-sufx
+int x;
+ ***
+ terminals-refx
+struct xxx;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test8.dat b/web/yacco2/qa/term_test8.dat
new file mode 100644
index 0000000000..f26956f0c0
--- /dev/null
+++ b/web/yacco2/qa/term_test8.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test8.dat
+ missing )
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals{
+"#***" (sym-class T_eocode)
+ terminals-sufx
+int x;
+ ***
+ terminals-refx
+struct xxx;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/term_test9.dat b/web/yacco2/qa/term_test9.dat
new file mode 100644
index 0000000000..d56ee31606
--- /dev/null
+++ b/web/yacco2/qa/term_test9.dat
@@ -0,0 +1,15 @@
+/*
+ file: term_test9.dat
+ no missing terminal
+*/
+terminals
+(file-name yacco2_terminals
+,name-space NS_yacco2_terminals){
+ terminals-refs
+using namespace std;
+using namespace NS_yacco2_err_symbols;
+struct T_c_literal;
+struct T_identifier;
+struct T_syntax_code;
+ ***
+} // end of terminals
diff --git a/web/yacco2/qa/test_called_thd_fs.cpp b/web/yacco2/qa/test_called_thd_fs.cpp
new file mode 100644
index 0000000000..f7b3fe48b9
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs.cpp
@@ -0,0 +1,98 @@
+/*
+ File: test_called_thd_fs.cpp
+ Date and Time: Mon Oct 13 18:18:16 2014
+*/
+#include "test_called_thd_fs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_called_thd_fs;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 7;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[4] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[5] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[6] = new Per_rule_s_reuse_table();
+}
+ Ctest_called_thd_fs::
+ Ctest_called_thd_fs()
+ :yacco2::CAbs_fsm
+ ("test_called_thd_fs.lex"
+ ,"1.0"
+ ,"25 Mar 2008"
+ ,true
+ ,"test the transience"
+ ,"Mon Oct 13 18:18:16 2014 "
+ ,S1_Ctest_called_thd_fs){
+
+ }
+
+Ctest_called_thd_fs::~Ctest_called_thd_fs(){
+
+ for(int x = 0;x < 7;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool Ctest_called_thd_fs::failed(){
+ return false;
+ }
+ void Ctest_called_thd_fs::op(){
+}
+int Ctest_called_thd_fs::rhs_to_rules_mapping_[13] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,1 // subrule 3 for rule 2
+ ,2 // subrule 4 for rule 3
+ ,2 // subrule 5 for rule 3
+ ,3 // subrule 6 for rule 4
+ ,3 // subrule 7 for rule 4
+ ,4 // subrule 8 for rule 5
+ ,4 // subrule 9 for rule 5
+ ,5 // subrule 10 for rule 6
+ ,5 // subrule 11 for rule 6
+ ,6 // subrule 12 for rule 7
+};
+RSt::RSt(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RSt",0,Ctest_called_thd_fs::R_RSt_,P,true,true){
+}
+
+RS::RS(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("RS",0,Ctest_called_thd_fs::R_RS_,P,false,false){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,Ctest_called_thd_fs::R_Ra_,P,false,false){
+}
+
+Rb::Rb(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rb",0,Ctest_called_thd_fs::R_Rb_,P,false,false){
+}
+
+Rc::Rc(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rc",0,Ctest_called_thd_fs::R_Rc_,P,false,false){
+}
+
+Rd::Rd(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rd",0,Ctest_called_thd_fs::R_Rd_,P,false,false){
+}
+
+Re::Re(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Re",0,Ctest_called_thd_fs::R_Re_,P,false,false){
+}
+
diff --git a/web/yacco2/qa/test_called_thd_fs.fsc b/web/yacco2/qa/test_called_thd_fs.fsc
new file mode 100644
index 0000000000..6c56efa26f
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs.fsc
@@ -0,0 +1,28 @@
+/*
+ File: test_called_thd_fs.fsc
+ Date and Time: Mon Oct 13 18:18:16 2014
+*/
+transitive y
+grammar-name "test_called_thd_fs"
+name-space "NS_test_called_thd_fs"
+thread-name "TH_test_called_thd_fs"
+monolithic n
+file-name "test_called_thd_fs.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 3
+ raw_c
+ raw_e
+ raw_z
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 3
+ NSa::THa
+ NSb::THb
+ NSd::THd
+end-list-of-transitive-threads
+list-of-used-threads 3
+ NSa::THa
+ NSb::THb
+ NSd::THd
+end-list-of-used-threads
+fsm-comments
+"test the transience"
diff --git a/web/yacco2/qa/test_called_thd_fs.h b/web/yacco2/qa/test_called_thd_fs.h
new file mode 100644
index 0000000000..46543f94cf
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs.h
@@ -0,0 +1,107 @@
+/*
+ File: test_called_thd_fs.h
+ Date and Time: Mon Oct 13 18:18:16 2014
+*/
+#ifndef __test_called_thd_fs_h__
+#define __test_called_thd_fs_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+extern yacco2::Thread_entry ITH_test_called_thd_fs;
+
+extern yacco2::State S1_Ctest_called_thd_fs;
+namespace NS_test_called_thd_fs {
+yacco2::THR _YACCO2_CALL_TYPE
+TH_test_called_thd_fs(yacco2::Parser* Caller);// called thread
+yacco2::THR_result _YACCO2_CALL_TYPE
+PROC_TH_test_called_thd_fs(yacco2::Parser* Caller);// called thread's twin the procedure
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[7];
+};
+class Ctest_called_thd_fs: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_RSt_ = 569//start_of_rule_list + 0
+ ,rhs1_RSt_ = 1
+ ,R_RS_ = 570//start_of_rule_list + 2
+ ,rhs1_RS_ = 2
+ ,rhs2_RS_ = 3
+ ,R_Ra_ = 571//start_of_rule_list + 4
+ ,rhs1_Ra_ = 4
+ ,rhs2_Ra_ = 5
+ ,R_Rb_ = 572//start_of_rule_list + 6
+ ,rhs1_Rb_ = 6
+ ,rhs2_Rb_ = 7
+ ,R_Rc_ = 573//start_of_rule_list + 8
+ ,rhs1_Rc_ = 8
+ ,rhs2_Rc_ = 9
+ ,R_Rd_ = 574//start_of_rule_list + 10
+ ,rhs1_Rd_ = 10
+ ,rhs2_Rd_ = 11
+ ,R_Re_ = 575//start_of_rule_list + 12
+ ,rhs1_Re_ = 12
+ };
+ //no of la sets = 4
+ //no of states = 14
+ Ctest_called_thd_fs();
+ ~Ctest_called_thd_fs();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[13];
+ };
+struct RSt;
+struct RS;
+struct Ra;
+struct Rb;
+struct Rc;
+struct Rd;
+struct Re;
+struct RSt:public yacco2::CAbs_lr1_sym {
+ RSt(yacco2::Parser* P);
+ public:
+};
+
+struct RS:public yacco2::CAbs_lr1_sym {
+ RS(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+struct Rb:public yacco2::CAbs_lr1_sym {
+ Rb(yacco2::Parser* P);
+ public:
+};
+
+struct Rc:public yacco2::CAbs_lr1_sym {
+ Rc(yacco2::Parser* P);
+ public:
+};
+
+struct Rd:public yacco2::CAbs_lr1_sym {
+ Rd(yacco2::Parser* P);
+ public:
+};
+
+struct Re:public yacco2::CAbs_lr1_sym {
+ Re(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/test_called_thd_fs.lex b/web/yacco2/qa/test_called_thd_fs.lex
new file mode 100644
index 0000000000..a6a0424407
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs.lex
@@ -0,0 +1,75 @@
+/*
+$echo FILE: test_called_thd_fs.lex
+$echo Purpose: test transience on called threads and Start rule.
+$echo Okay
+*/
+/@
+@** |test_called_thd_fs| grammar.\fbreak
+Test out the transience of called threads and native first sets.
+\O2's ``.fsc'' file tells the tale.
+Here's an excerp where Start rule is \emptyrule{} caused by Rc.
+Note the common prefix Ra to see if the transience goes through the called threads
+ and T first set. And so it does:\fbreak
+\fbreak
+list-of-native-first-set-terminals 3\fbreak
+ LR1\_eolr\fbreak
+ raw\_c\fbreak
+ raw\_e\fbreak
+end-list-of-native-first-set-terminals\fbreak
+list-of-transitive-threads 3\fbreak
+ NSa::THa\fbreak
+ NSb::THb\fbreak
+ NSd::THd\fbreak
+end-list-of-transitive-threads\fbreak
+\fbreak
+@/
+fsm
+(fsm-id "test_called_thd_fs.lex"
+,fsm-filename test_called_thd_fs,fsm-namespace NS_test_called_thd_fs
+,fsm-class Ctest_called_thd_fs
+,fsm-version "1.0" ,fsm-date "25 Mar 2008",fsm-debug "true"
+,fsm-comments "test the transience")
+parallel-parser
+(
+ parallel-thread-function
+ TH_test_called_thd_fs
+ ***
+ parallel-la-boundary
+ z
+ ***
+)
+
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+rules{
+RSt AD AB(){
+ -> RS
+}
+RS(){
+ -> Ra Rb Rc
+ -> Ra Rd Re
+}
+Ra ()
+{
+ ->
+ -> ||| a NSa::THa
+}
+Rb ()
+{
+ ->
+ -> ||| b NSb::THb
+}
+Rc ()
+{
+ ->
+ -> c
+}
+Rd ()
+{
+ ->
+ -> ||| d NSd::THd
+}
+Re ()
+{
+ -> e
+}
+}// end of rules
diff --git a/web/yacco2/qa/test_called_thd_fs.pdf b/web/yacco2/qa/test_called_thd_fs.pdf
new file mode 100644
index 0000000000..783714a1fa
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs.pdf
Binary files differ
diff --git a/web/yacco2/qa/test_called_thd_fs_idx.pdf b/web/yacco2/qa/test_called_thd_fs_idx.pdf
new file mode 100644
index 0000000000..83587ee038
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fs_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/test_called_thd_fssym.cpp b/web/yacco2/qa/test_called_thd_fssym.cpp
new file mode 100644
index 0000000000..4c9538892b
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fssym.cpp
@@ -0,0 +1,216 @@
+/*
+ File: test_called_thd_fssym.cpp
+ Date and Time: Mon Oct 13 18:18:16 2014
+*/
+#include "test_called_thd_fs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_called_thd_fs;// grammar's ns
+// first set terminals
+yacco2::THR _YACCO2_CALL_TYPE
+NS_test_called_thd_fs::TH_test_called_thd_fs(yacco2::Parser* Caller_pp){
+ yacco2::Thread_entry& pp_thread_entry = ITH_test_called_thd_fs;
+ NS_test_called_thd_fs::Ctest_called_thd_fs Ctest_called_thd_fs_;// parallel-parser's parse table
+#define ssPARSE_TABLE Ctest_called_thd_fs_
+#include "wpp_core.h"
+}
+THR_result _YACCO2_CALL_TYPE
+NS_test_called_thd_fs::PROC_TH_test_called_thd_fs(yacco2::Parser* Caller_pp){
+ char called_proc_name[] = "PROC_TH_test_called_thd_fs";
+ static bool one_time(false);
+ static NS_test_called_thd_fs::Ctest_called_thd_fs* NS_test_called_thd_fs_Ctest_called_thd_fs_(0);// parallel-parser's fsm table
+ static Parser* NS_test_called_thd_fs_Ctest_called_thd_fs_parser(0);
+ Parser* proc_parser(0);
+ if(one_time == false){
+ one_time = true;
+ NS_test_called_thd_fs_Ctest_called_thd_fs_ = new NS_test_called_thd_fs::Ctest_called_thd_fs();// parallel-parser's fsm table
+ NS_test_called_thd_fs_Ctest_called_thd_fs_parser = new Parser(*NS_test_called_thd_fs_Ctest_called_thd_fs_,Caller_pp);
+ }
+ proc_parser = NS_test_called_thd_fs_Ctest_called_thd_fs_parser;
+#include "wproc_pp_core.h"
+}
+void
+Ctest_called_thd_fs::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_RSt_:{
+ RSt* sym;
+ if(re->rule_ == 0){
+ sym = new RSt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RSt*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs2_RS_:{
+ RS* sym;
+ if(re->rule_ == 0){
+ sym = new RS(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (RS*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 3;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rb_:{
+ Rb* sym;
+ if(re->rule_ == 0){
+ sym = new Rb(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rb*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Rc_:{
+ Rc* sym;
+ if(re->rule_ == 0){
+ sym = new Rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rc_:{
+ Rc* sym;
+ if(re->rule_ == 0){
+ sym = new Rc(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rc*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs1_Rd_:{
+ Rd* sym;
+ if(re->rule_ == 0){
+ sym = new Rd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 0;
+
+
+ return;}
+ case rhs2_Rd_:{
+ Rd* sym;
+ if(re->rule_ == 0){
+ sym = new Rd(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rd*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ case rhs1_Re_:{
+ Re* sym;
+ if(re->rule_ == 0){
+ sym = new Re(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Re*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/test_called_thd_fstbl.cpp b/web/yacco2/qa/test_called_thd_fstbl.cpp
new file mode 100644
index 0000000000..90f89a8e28
--- /dev/null
+++ b/web/yacco2/qa/test_called_thd_fstbl.cpp
@@ -0,0 +1,319 @@
+/*
+ File: test_called_thd_fstbl.cpp
+ Date and Time: Mon Oct 13 18:18:16 2014
+*/
+#include "test_called_thd_fs.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_called_thd_fs;// grammar's ns
+// first set terminals
+// LR1_reduce_operator
+// raw_c
+// raw_e
+// raw_z
+yacco2::UCHAR LA1_Ctest_called_thd_fs[] ={
+3
+,0,16
+,13,40
+,16,4
+};
+// raw_z
+yacco2::UCHAR LA2_Ctest_called_thd_fs[] ={
+1
+,16,4
+};
+// raw_c
+// raw_z
+yacco2::UCHAR LA3_Ctest_called_thd_fs[] ={
+2
+,13,8
+,16,4
+};
+// raw_e
+yacco2::UCHAR LA4_Ctest_called_thd_fs[] ={
+1
+,13,32
+};
+extern yacco2::State S1_Ctest_called_thd_fs;
+extern yacco2::State S2_Ctest_called_thd_fs;
+struct S2ttd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[1];
+};
+S2ttd_Ctest_called_thd_fs S2tt_Ctest_called_thd_fs = {
+ 1 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITHa
+};
+extern yacco2::State S3_Ctest_called_thd_fs;
+extern yacco2::State S4_Ctest_called_thd_fs;
+extern yacco2::State S5_Ctest_called_thd_fs;
+extern yacco2::State S6_Ctest_called_thd_fs;
+struct S6ttd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Type_pp_fnct_ptr ar_fnct_ptr_;
+ yacco2::ULINT (*thd_id_bit_map_ptr__)[];
+ yacco2::Thread_entry* thread_entries_[2];
+};
+S6ttd_Ctest_called_thd_fs S6tt_Ctest_called_thd_fs = {
+ 2 // no of threads
+ ,0 //AR_rulename or 0
+ ,0// ptr to thread id bit map
+ ,(yacco2::Thread_entry*)&ITHb
+ ,(yacco2::Thread_entry*)&ITHd
+};
+extern yacco2::State S7_Ctest_called_thd_fs;
+extern yacco2::State S8_Ctest_called_thd_fs;
+extern yacco2::State S9_Ctest_called_thd_fs;
+extern yacco2::State S10_Ctest_called_thd_fs;
+extern yacco2::State S11_Ctest_called_thd_fs;
+extern yacco2::State S12_Ctest_called_thd_fs;
+extern yacco2::State S13_Ctest_called_thd_fs;
+extern yacco2::State S14_Ctest_called_thd_fs;
+struct S1std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[4];
+};
+S1std_Ctest_called_thd_fs S1st_Ctest_called_thd_fs = {
+ 4
+ ,
+ {// start of table
+ {3,(State*)&S2_Ctest_called_thd_fs} // shift sym: LR1_parallel_operator
+ ,{569,(State*)&S1_Ctest_called_thd_fs} // accept sym: RSt
+ ,{570,(State*)&S4_Ctest_called_thd_fs} // shift sym: RS
+ ,{571,(State*)&S5_Ctest_called_thd_fs} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::Shift_entry S1pse_Ctest_called_thd_fs = {3,(State*)&S2_Ctest_called_thd_fs};
+struct S1rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S1rtd_Ctest_called_thd_fs S1rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S1_Ctest_called_thd_fs = //State's vectored into symbol: " No symbol"
+{1
+,(Shift_entry*)&S1pse_Ctest_called_thd_fs,0,0,0,(Shift_tbl*)&S1st_Ctest_called_thd_fs,(Reduce_tbl*)&S1rt_Ctest_called_thd_fs,(State_s_thread_tbl*)&S2tt_Ctest_called_thd_fs,0,0};
+struct S2std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S2std_Ctest_called_thd_fs S2st_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S3_Ctest_called_thd_fs} // shift sym: raw_a
+ }// end of shift table
+};
+yacco2::State S2_Ctest_called_thd_fs = //State's vectored into symbol: "|||"
+{2
+,0,0,0,0,(Shift_tbl*)&S2st_Ctest_called_thd_fs,0,0,0,0};
+struct S3rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S3rtd_Ctest_called_thd_fs S3rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs2_Ra_}
+ }// end of reduce table
+};
+yacco2::State S3_Ctest_called_thd_fs = //State's vectored into symbol: "a"
+{3
+,0,0,0,0,0,(Reduce_tbl*)&S3rt_Ctest_called_thd_fs,0,0,0};
+struct S4rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_Ctest_called_thd_fs S4rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_RSt_}
+ }// end of reduce table
+};
+yacco2::State S4_Ctest_called_thd_fs = //State's vectored into symbol: "RS"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_Ctest_called_thd_fs,0,0,0};
+struct S5std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S5std_Ctest_called_thd_fs S5st_Ctest_called_thd_fs = {
+ 3
+ ,
+ {// start of table
+ {3,(State*)&S6_Ctest_called_thd_fs} // shift sym: LR1_parallel_operator
+ ,{572,(State*)&S9_Ctest_called_thd_fs} // shift sym: Rb
+ ,{574,(State*)&S12_Ctest_called_thd_fs} // shift sym: Rd
+ }// end of shift table
+};
+yacco2::Shift_entry S5pse_Ctest_called_thd_fs = {3,(State*)&S6_Ctest_called_thd_fs};
+struct S5rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[2];
+};
+S5rtd_Ctest_called_thd_fs S5rt_Ctest_called_thd_fs = {
+ 2
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_Rb_}
+ ,{(Set_tbl*)&LA4_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_Rd_}
+ }// end of reduce table
+};
+yacco2::State S5_Ctest_called_thd_fs = //State's vectored into symbol: "Ra"
+{5
+,(Shift_entry*)&S5pse_Ctest_called_thd_fs,0,0,0,(Shift_tbl*)&S5st_Ctest_called_thd_fs,(Reduce_tbl*)&S5rt_Ctest_called_thd_fs,(State_s_thread_tbl*)&S6tt_Ctest_called_thd_fs,0,0};
+struct S6std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S6std_Ctest_called_thd_fs S6st_Ctest_called_thd_fs = {
+ 2
+ ,
+ {// start of table
+ {106,(State*)&S7_Ctest_called_thd_fs} // shift sym: raw_b
+ ,{108,(State*)&S8_Ctest_called_thd_fs} // shift sym: raw_d
+ }// end of shift table
+};
+yacco2::State S6_Ctest_called_thd_fs = //State's vectored into symbol: "|||"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_Ctest_called_thd_fs,0,0,0,0};
+struct S7rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S7rtd_Ctest_called_thd_fs S7rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs2_Rb_}
+ }// end of reduce table
+};
+yacco2::State S7_Ctest_called_thd_fs = //State's vectored into symbol: "b"
+{7
+,0,0,0,0,0,(Reduce_tbl*)&S7rt_Ctest_called_thd_fs,0,0,0};
+struct S8rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S8rtd_Ctest_called_thd_fs S8rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs2_Rd_}
+ }// end of reduce table
+};
+yacco2::State S8_Ctest_called_thd_fs = //State's vectored into symbol: "d"
+{8
+,0,0,0,0,0,(Reduce_tbl*)&S8rt_Ctest_called_thd_fs,0,0,0};
+struct S9std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S9std_Ctest_called_thd_fs S9st_Ctest_called_thd_fs = {
+ 2
+ ,
+ {// start of table
+ {107,(State*)&S10_Ctest_called_thd_fs} // shift sym: raw_c
+ ,{573,(State*)&S11_Ctest_called_thd_fs} // shift sym: Rc
+ }// end of shift table
+};
+struct S9rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_Ctest_called_thd_fs S9rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_Rc_}
+ }// end of reduce table
+};
+yacco2::State S9_Ctest_called_thd_fs = //State's vectored into symbol: "Rb"
+{9
+,0,0,0,0,(Shift_tbl*)&S9st_Ctest_called_thd_fs,(Reduce_tbl*)&S9rt_Ctest_called_thd_fs,0,0,0};
+struct S10rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S10rtd_Ctest_called_thd_fs S10rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs2_Rc_}
+ }// end of reduce table
+};
+yacco2::State S10_Ctest_called_thd_fs = //State's vectored into symbol: "c"
+{10
+,0,0,0,0,0,(Reduce_tbl*)&S10rt_Ctest_called_thd_fs,0,0,0};
+struct S11rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S11rtd_Ctest_called_thd_fs S11rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_RS_}
+ }// end of reduce table
+};
+yacco2::State S11_Ctest_called_thd_fs = //State's vectored into symbol: "Rc"
+{11
+,0,0,0,0,0,(Reduce_tbl*)&S11rt_Ctest_called_thd_fs,0,0,0};
+struct S12std_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S12std_Ctest_called_thd_fs S12st_Ctest_called_thd_fs = {
+ 2
+ ,
+ {// start of table
+ {109,(State*)&S13_Ctest_called_thd_fs} // shift sym: raw_e
+ ,{575,(State*)&S14_Ctest_called_thd_fs} // shift sym: Re
+ }// end of shift table
+};
+yacco2::State S12_Ctest_called_thd_fs = //State's vectored into symbol: "Rd"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_Ctest_called_thd_fs,0,0,0,0};
+struct S13rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S13rtd_Ctest_called_thd_fs S13rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs1_Re_}
+ }// end of reduce table
+};
+yacco2::State S13_Ctest_called_thd_fs = //State's vectored into symbol: "e"
+{13
+,0,0,0,0,0,(Reduce_tbl*)&S13rt_Ctest_called_thd_fs,0,0,0};
+struct S14rtd_Ctest_called_thd_fs{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S14rtd_Ctest_called_thd_fs S14rt_Ctest_called_thd_fs = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_Ctest_called_thd_fs,Ctest_called_thd_fs::rhs2_RS_}
+ }// end of reduce table
+};
+yacco2::State S14_Ctest_called_thd_fs = //State's vectored into symbol: "Re"
+{14
+,0,0,0,0,0,(Reduce_tbl*)&S14rt_Ctest_called_thd_fs,0,0,0};
diff --git a/web/yacco2/qa/test_use_cnt.cpp b/web/yacco2/qa/test_use_cnt.cpp
new file mode 100644
index 0000000000..ada1cdc7fc
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.cpp
@@ -0,0 +1,73 @@
+/*
+ File: test_use_cnt.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "test_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_use_cnt;// grammar's ns
+// first set terminals
+fsm_rules_reuse_table_type::fsm_rules_reuse_table_type(){
+ no_rules_entries_ = 4;
+ per_rule_s_table_[0] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[1] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[2] = new Per_rule_s_reuse_table();
+ per_rule_s_table_[3] = new Per_rule_s_reuse_table();
+}
+ CTS_la1::
+ CTS_la1()
+ :yacco2::CAbs_fsm
+ ("test_use_cnt.lex"
+ ,"1.0"
+ ,"17 Juin 2003"
+ ,true
+ ,"end-of-line recognizer"
+ ,"Mon Oct 13 18:18:15 2014 "
+ ,S1_CTS_la1){
+
+ }
+
+CTS_la1::~CTS_la1(){
+
+ for(int x = 0;x < 4;++x){
+ ///delete fsm_rules_reuse_table.per_rule_s_table_[x];
+ }
+}
+
+ bool CTS_la1::failed(){
+ return false;
+ }
+ void CTS_la1::op(){
+}
+int CTS_la1::rhs_to_rules_mapping_[6] = {
+ -1
+ ,0 // subrule 1 for rule 1
+ ,1 // subrule 2 for rule 2
+ ,2 // subrule 3 for rule 3
+ ,3 // subrule 4 for rule 4
+ ,3 // subrule 5 for rule 4
+};
+Rtest_use_cnt::Rtest_use_cnt(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rtest_use_cnt",0,CTS_la1::R_Rtest_use_cnt_,P,true,true){
+}
+
+Rxx::Rxx(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rxx",0,CTS_la1::R_Rxx_,P,true,true){
+}
+
+Rxxx::Rxxx(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Rxxx",0,CTS_la1::R_Rxxx_,P,true,true){
+}
+
+Ra::Ra(yacco2::Parser* P)
+ :CAbs_lr1_sym
+ ("Ra",0,CTS_la1::R_Ra_,P,true,true){
+}
+
diff --git a/web/yacco2/qa/test_use_cnt.fsc b/web/yacco2/qa/test_use_cnt.fsc
new file mode 100644
index 0000000000..e61b3fa49e
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.fsc
@@ -0,0 +1,20 @@
+/*
+ File: test_use_cnt.fsc
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+transitive n
+grammar-name "test_use_cnt"
+name-space "NS_test_use_cnt"
+thread-name "CTS_la1"
+monolithic y
+file-name "test_use_cnt.fsc"
+no-of-T 569
+list-of-native-first-set-terminals 1
+ raw_a
+end-list-of-native-first-set-terminals
+list-of-transitive-threads 0
+end-list-of-transitive-threads
+list-of-used-threads 0
+end-list-of-used-threads
+fsm-comments
+"end-of-line recognizer"
diff --git a/web/yacco2/qa/test_use_cnt.h b/web/yacco2/qa/test_use_cnt.h
new file mode 100644
index 0000000000..9512131635
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.h
@@ -0,0 +1,74 @@
+/*
+ File: test_use_cnt.h
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#ifndef __test_use_cnt_h__
+#define __test_use_cnt_h__ 1
+#include "yacco2.h"
+#include "yacco2_T_enumeration.h"
+#include "yacco2_k_symbols.h"
+#include "yacco2_err_symbols.h"
+#include "yacco2_terminals.h"
+#include "yacco2_characters.h"
+// monolithic grammar: no thread
+extern yacco2::State S1_CTS_la1;
+namespace NS_test_use_cnt {
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace yacco2;
+struct fsm_rules_reuse_table_type{
+ fsm_rules_reuse_table_type();
+ int no_rules_entries_;
+ Per_rule_s_reuse_table* per_rule_s_table_[4];
+};
+class CTS_la1: public yacco2::CAbs_fsm {
+ public:
+ enum rules_and_subrules{
+ start_of_rule_list = NS_yacco2_T_enum::T_Enum::sum_total_T
+ ,R_Rtest_use_cnt_ = 569//start_of_rule_list + 0
+ ,rhs1_Rtest_use_cnt_ = 1
+ ,R_Rxx_ = 570//start_of_rule_list + 2
+ ,rhs1_Rxx_ = 2
+ ,R_Rxxx_ = 571//start_of_rule_list + 4
+ ,rhs1_Rxxx_ = 3
+ ,R_Ra_ = 572//start_of_rule_list + 6
+ ,rhs1_Ra_ = 4
+ ,rhs2_Ra_ = 5
+ };
+ //no of la sets = 4
+ //no of states = 19
+ CTS_la1();
+ ~CTS_la1();
+ void op();
+ bool failed();
+ void reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule);
+ fsm_rules_reuse_table_type fsm_rules_reuse_table;
+ static int rhs_to_rules_mapping_[6];
+ };
+struct Rtest_use_cnt;
+struct Rxx;
+struct Rxxx;
+struct Ra;
+struct Rtest_use_cnt:public yacco2::CAbs_lr1_sym {
+ Rtest_use_cnt(yacco2::Parser* P);
+ public:
+};
+
+struct Rxx:public yacco2::CAbs_lr1_sym {
+ Rxx(yacco2::Parser* P);
+ public:
+};
+
+struct Rxxx:public yacco2::CAbs_lr1_sym {
+ Rxxx(yacco2::Parser* P);
+ public:
+};
+
+struct Ra:public yacco2::CAbs_lr1_sym {
+ Ra(yacco2::Parser* P);
+ public:
+};
+
+} // end of namespace
+
+#endif
diff --git a/web/yacco2/qa/test_use_cnt.lex b/web/yacco2/qa/test_use_cnt.lex
new file mode 100644
index 0000000000..06eab253d6
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.lex
@@ -0,0 +1,33 @@
+/*
+$echo FILE: test_use_cnt.lex
+$echo Purpose: test rules use count as an optimization
+$echo Okay
+*/
+fsm
+(fsm-id "test_use_cnt.lex",fsm-filename test_use_cnt,fsm-namespace NS_test_use_cnt
+,fsm-class CTS_la1
+,fsm-version "1.0" ,fsm-date "17 Juin 2003",fsm-debug "true"
+,fsm-comments "end-of-line recognizer")
+@"/usr/local/yacco2/compiler/grammars/yacco2_T_includes.T"
+
+/@
+@** Rules.\fbreak
+@/
+rules{
+Rtest_use_cnt AD AB(){
+ -> Ra Rxx Ra Rxxx eog
+}
+Rxx AD AB()
+{
+ -> x Ra x Ra b
+}
+Rxxx AD AB()
+{
+ -> x Ra x Ra x Ra
+}
+Ra AD AB()
+{
+ -> a
+ -> Ra a
+}
+}// end of rules
diff --git a/web/yacco2/qa/test_use_cnt.pdf b/web/yacco2/qa/test_use_cnt.pdf
new file mode 100644
index 0000000000..c46658846c
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.pdf
Binary files differ
diff --git a/web/yacco2/qa/test_use_cnt.sh b/web/yacco2/qa/test_use_cnt.sh
new file mode 100755
index 0000000000..40264137a7
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt.sh
@@ -0,0 +1,81 @@
+#! /bin/sh
+#file: test_use_cnt.sh
+echo "////////////////////////////////////////"
+echo "////////////test_use_cnt.sh////////////"
+echo "////////////////////////////////////////"
+o2=/usr/local/yacco2/bin/o2
+tmp=/tmp/o2
+if [ ! -e "$tmp" ]
+then
+ mkdir $tmp
+fi
+cd $tmp
+
+#echo '\input eplain' > $tmp/eplain.txt
+cont=n
+ccresult=0
+
+sw1=$1
+sw2=$2
+sw3=$3
+sw4=$4
+
+file_no=$((0))
+file_pos=$((1))
+cc_lex()
+{
+ file_name_only="`basename $2`"
+ dir_only="`dirname $2`"
+ echo "%%%%%%%%%%%%%%%%target directory $dir_only"
+ eval "$o2 -p $sw1 $sw2 $sw3 $sw4 $1"
+ if test $ccresult -eq 1; then
+ echo -n "grammar in error: continue y or n: ";
+ read cont;
+ if test $cont -eq n; then
+ echo "Error in grammar exiting";
+ exit 1;
+ fi
+ fi
+ eval "mpost $file_name_only.mp"
+ eval "cweave $file_name_only.w"
+ ##eval "cat eplain.txt $file_name_only.tex > $file_name_only.tex1"
+ eval "pdftex $file_name_only.tex"
+ for k in `ls * `;
+ do
+ #echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!Casing on $k"
+ case $k in
+ *.cpp|*.h)
+ eval "cp $k $dir_only/$k";
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.scn|*.idx|*.log|*.toc)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ Err.w|T.w) # error and terminal documents to be cweave then pdftex printed by xpdf
+ #echo "-------------> Deleting $k"
+ #eval "rm -f $k"
+;;
+ *.w)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.tex)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.mp)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.tex1)
+ #echo "-------------> Deleting $k"
+ eval "rm -f $k" ;;
+ *.[1-9])
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k" ;;
+ *.[1-9][0-9]*)
+ #echo "-------------> Deleting Mpost diagrams $k"
+ eval "rm -f $k" ;;
+ esac
+ done
+}
+
+cc_lex /usr/local/yacco2/qa/test_use_cnt.lex /usr/local/yacco2/qa/test_use_cnt/test_use_cnt
+
diff --git a/web/yacco2/qa/test_use_cnt_idx.pdf b/web/yacco2/qa/test_use_cnt_idx.pdf
new file mode 100644
index 0000000000..9e91f86df6
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnt_idx.pdf
Binary files differ
diff --git a/web/yacco2/qa/test_use_cntsym.cpp b/web/yacco2/qa/test_use_cntsym.cpp
new file mode 100644
index 0000000000..8abc3f350a
--- /dev/null
+++ b/web/yacco2/qa/test_use_cntsym.cpp
@@ -0,0 +1,97 @@
+/*
+ File: test_use_cntsym.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "test_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_use_cnt;// grammar's ns
+// first set terminals
+// monolithic grammar --- no thread
+void
+CTS_la1::reduce_rhs_of_rule
+ (yacco2::UINT Sub_rule_no,yacco2::Rule_s_reuse_entry** Recycled_rule){
+ int reducing_rule = rhs_to_rules_mapping_[Sub_rule_no];
+ Per_rule_s_reuse_table* rule_reuse_tbl_ptr =
+ fsm_rules_reuse_table.per_rule_s_table_[reducing_rule];
+ Rule_s_reuse_entry* re(0);
+ find_a_recycled_rule(rule_reuse_tbl_ptr,&re);
+ (*Recycled_rule) = re;
+ fnd_re: switch (Sub_rule_no){
+ case rhs1_Rtest_use_cnt_:{
+ Rtest_use_cnt* sym;
+ if(re->rule_ == 0){
+ sym = new Rtest_use_cnt(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rtest_use_cnt*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rxx_:{
+ Rxx* sym;
+ if(re->rule_ == 0){
+ sym = new Rxx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rxx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 5;
+
+
+ return;}
+ case rhs1_Rxxx_:{
+ Rxxx* sym;
+ if(re->rule_ == 0){
+ sym = new Rxxx(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Rxxx*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 6;
+
+
+ return;}
+ case rhs1_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 1;
+
+
+ return;}
+ case rhs2_Ra_:{
+ Ra* sym;
+ if(re->rule_ == 0){
+ sym = new Ra(parser__);
+ re->rule_ = sym;
+ }else{
+ sym = (Ra*)re->rule_;
+ }
+ // no rule's constructor directive
+ (*Recycled_rule)->rule_ = sym;
+ sym->rule_info__.rhs_no_of_parms__ = 2;
+
+
+ return;}
+ default: return;
+ }
+}
diff --git a/web/yacco2/qa/test_use_cnttbl.cpp b/web/yacco2/qa/test_use_cnttbl.cpp
new file mode 100644
index 0000000000..f382490e75
--- /dev/null
+++ b/web/yacco2/qa/test_use_cnttbl.cpp
@@ -0,0 +1,350 @@
+/*
+ File: test_use_cnttbl.cpp
+ Date and Time: Mon Oct 13 18:18:15 2014
+*/
+#include "test_use_cnt.h"
+using namespace NS_yacco2_T_enum;// enumerate
+using namespace NS_yacco2_err_symbols;// error symbols
+using namespace NS_yacco2_k_symbols;// lrk
+using namespace NS_yacco2_terminals;// terminals
+using namespace NS_yacco2_characters;// rc
+using namespace yacco2;// yacco2 library
+using namespace NS_test_use_cnt;// grammar's ns
+// first set terminals
+// LR1_eog
+// raw_a
+// raw_b
+// raw_x
+yacco2::UCHAR LA1_CTS_la1[] ={
+3
+,0,2
+,13,6
+,16,1
+};
+// raw_a
+yacco2::UCHAR LA2_CTS_la1[] ={
+1
+,13,2
+};
+// LR1_eog
+yacco2::UCHAR LA3_CTS_la1[] ={
+1
+,0,2
+};
+// LR1_eolr
+yacco2::UCHAR LA4_CTS_la1[] ={
+1
+,0,4
+};
+extern yacco2::State S1_CTS_la1;
+extern yacco2::State S2_CTS_la1;
+extern yacco2::State S3_CTS_la1;
+extern yacco2::State S4_CTS_la1;
+extern yacco2::State S5_CTS_la1;
+extern yacco2::State S6_CTS_la1;
+extern yacco2::State S7_CTS_la1;
+extern yacco2::State S8_CTS_la1;
+extern yacco2::State S9_CTS_la1;
+extern yacco2::State S10_CTS_la1;
+extern yacco2::State S11_CTS_la1;
+extern yacco2::State S12_CTS_la1;
+extern yacco2::State S13_CTS_la1;
+extern yacco2::State S14_CTS_la1;
+extern yacco2::State S15_CTS_la1;
+extern yacco2::State S16_CTS_la1;
+extern yacco2::State S17_CTS_la1;
+extern yacco2::State S18_CTS_la1;
+extern yacco2::State S19_CTS_la1;
+struct S1std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S1std_CTS_la1 S1st_CTS_la1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{569,(State*)&S1_CTS_la1} // accept sym: Rtest_use_cnt
+ ,{572,(State*)&S3_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S1_CTS_la1 = //State's vectored into symbol: " No symbol"
+{1
+,0,0,0,0,(Shift_tbl*)&S1st_CTS_la1,0,0,0,0};
+struct S2rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S2rtd_CTS_la1 S2rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs1_Ra_}
+ }// end of reduce table
+};
+yacco2::State S2_CTS_la1 = //State's vectored into symbol: "a"
+{2
+,0,0,0,0,0,(Reduce_tbl*)&S2rt_CTS_la1,0,0,0};
+struct S3std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S3std_CTS_la1 S3st_CTS_la1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{128,(State*)&S5_CTS_la1} // shift sym: raw_x
+ ,{570,(State*)&S10_CTS_la1} // shift sym: Rxx
+ }// end of shift table
+};
+yacco2::State S3_CTS_la1 = //State's vectored into symbol: "Ra"
+{3
+,0,0,0,0,(Shift_tbl*)&S3st_CTS_la1,0,0,0,0};
+struct S4rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S4rtd_CTS_la1 S4rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA1_CTS_la1,CTS_la1::rhs2_Ra_}
+ }// end of reduce table
+};
+yacco2::State S4_CTS_la1 = //State's vectored into symbol: "a"
+{4
+,0,0,0,0,0,(Reduce_tbl*)&S4rt_CTS_la1,0,0,0};
+struct S5std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S5std_CTS_la1 S5st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S6_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S5_CTS_la1 = //State's vectored into symbol: "x"
+{5
+,0,0,0,0,(Shift_tbl*)&S5st_CTS_la1,0,0,0,0};
+struct S6std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S6std_CTS_la1 S6st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{128,(State*)&S7_CTS_la1} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S6_CTS_la1 = //State's vectored into symbol: "Ra"
+{6
+,0,0,0,0,(Shift_tbl*)&S6st_CTS_la1,0,0,0,0};
+struct S7std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S7std_CTS_la1 S7st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S8_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S7_CTS_la1 = //State's vectored into symbol: "x"
+{7
+,0,0,0,0,(Shift_tbl*)&S7st_CTS_la1,0,0,0,0};
+struct S8std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S8std_CTS_la1 S8st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{106,(State*)&S9_CTS_la1} // shift sym: raw_b
+ }// end of shift table
+};
+yacco2::State S8_CTS_la1 = //State's vectored into symbol: "Ra"
+{8
+,0,0,0,0,(Shift_tbl*)&S8st_CTS_la1,0,0,0,0};
+struct S9rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S9rtd_CTS_la1 S9rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA2_CTS_la1,CTS_la1::rhs1_Rxx_}
+ }// end of reduce table
+};
+yacco2::State S9_CTS_la1 = //State's vectored into symbol: "b"
+{9
+,0,0,0,0,0,(Reduce_tbl*)&S9rt_CTS_la1,0,0,0};
+struct S10std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S10std_CTS_la1 S10st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S11_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S10_CTS_la1 = //State's vectored into symbol: "Rxx"
+{10
+,0,0,0,0,(Shift_tbl*)&S10st_CTS_la1,0,0,0,0};
+struct S11std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[3];
+};
+S11std_CTS_la1 S11st_CTS_la1 = {
+ 3
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{128,(State*)&S12_CTS_la1} // shift sym: raw_x
+ ,{571,(State*)&S18_CTS_la1} // shift sym: Rxxx
+ }// end of shift table
+};
+yacco2::State S11_CTS_la1 = //State's vectored into symbol: "Ra"
+{11
+,0,0,0,0,(Shift_tbl*)&S11st_CTS_la1,0,0,0,0};
+struct S12std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S12std_CTS_la1 S12st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S13_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S12_CTS_la1 = //State's vectored into symbol: "x"
+{12
+,0,0,0,0,(Shift_tbl*)&S12st_CTS_la1,0,0,0,0};
+struct S13std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S13std_CTS_la1 S13st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{128,(State*)&S14_CTS_la1} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S13_CTS_la1 = //State's vectored into symbol: "Ra"
+{13
+,0,0,0,0,(Shift_tbl*)&S13st_CTS_la1,0,0,0,0};
+struct S14std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S14std_CTS_la1 S14st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S15_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S14_CTS_la1 = //State's vectored into symbol: "x"
+{14
+,0,0,0,0,(Shift_tbl*)&S14st_CTS_la1,0,0,0,0};
+struct S15std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S15std_CTS_la1 S15st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ ,{128,(State*)&S16_CTS_la1} // shift sym: raw_x
+ }// end of shift table
+};
+yacco2::State S15_CTS_la1 = //State's vectored into symbol: "Ra"
+{15
+,0,0,0,0,(Shift_tbl*)&S15st_CTS_la1,0,0,0,0};
+struct S16std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[2];
+};
+S16std_CTS_la1 S16st_CTS_la1 = {
+ 2
+ ,
+ {// start of table
+ {105,(State*)&S2_CTS_la1} // shift sym: raw_a
+ ,{572,(State*)&S17_CTS_la1} // shift sym: Ra
+ }// end of shift table
+};
+yacco2::State S16_CTS_la1 = //State's vectored into symbol: "x"
+{16
+,0,0,0,0,(Shift_tbl*)&S16st_CTS_la1,0,0,0,0};
+struct S17std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S17std_CTS_la1 S17st_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {105,(State*)&S4_CTS_la1} // shift sym: raw_a
+ }// end of shift table
+};
+struct S17rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S17rtd_CTS_la1 S17rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA3_CTS_la1,CTS_la1::rhs1_Rxxx_}
+ }// end of reduce table
+};
+yacco2::State S17_CTS_la1 = //State's vectored into symbol: "Ra"
+{17
+,0,0,0,0,(Shift_tbl*)&S17st_CTS_la1,(Reduce_tbl*)&S17rt_CTS_la1,0,0,0};
+struct S18std_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Shift_entry shift_entries_[1];
+};
+S18std_CTS_la1 S18st_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {1,(State*)&S19_CTS_la1} // shift sym: LR1_eog
+ }// end of shift table
+};
+yacco2::State S18_CTS_la1 = //State's vectored into symbol: "Rxxx"
+{18
+,0,0,0,0,(Shift_tbl*)&S18st_CTS_la1,0,0,0,0};
+struct S19rtd_CTS_la1{
+ yacco2::USINT no_entries_;
+ yacco2::Reduce_entry reduce_entries_[1];
+};
+S19rtd_CTS_la1 S19rt_CTS_la1 = {
+ 1
+ ,
+ {// start of table
+ {(Set_tbl*)&LA4_CTS_la1,CTS_la1::rhs1_Rtest_use_cnt_}
+ }// end of reduce table
+};
+yacco2::State S19_CTS_la1 = //State's vectored into symbol: "eog"
+{19
+,0,0,0,0,0,(Reduce_tbl*)&S19rt_CTS_la1,0,0,0};
diff --git a/web/yacco2/qa/unquoted_string.dat b/web/yacco2/qa/unquoted_string.dat
new file mode 100644
index 0000000000..3f38f074ca
--- /dev/null
+++ b/web/yacco2/qa/unquoted_string.dat
@@ -0,0 +1,9 @@
+/*
+$echo file:unquoted_string.dat
+$echo should produce a duality against unquoted string being longest string accepted
+$echo and an identifier of ws
+$echo must use arbitrator to choose rtn T
+$echo as this will interfere with all other id test so disable and
+$echo produce 4 Tes of identifier . identifier ws
+*/
+ws.lex
diff --git a/web/yacco2/qa/xc_str.dat b/web/yacco2/qa/xc_str.dat
new file mode 100644
index 0000000000..2ebe66c35c
--- /dev/null
+++ b/web/yacco2/qa/xc_str.dat
@@ -0,0 +1,11 @@
+/*
+$echo file:xc_str.dat
+$echo test out literal strings where last one has a bad escape sequence
+*/
+""// zero filled string
+"\""// string of 1 "
+"\"\""// string of 2 ""
+"hello world"
+"'"
+"'''"
+"\n\t\v\b\r\f\a\\\?\'\"\000\x0123456789abcdefg\w"// \test escape \ No newline at end of file